summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rd_party/CMakeLists.txt5
-rw-r--r--src/appMain/CMakeLists.txt1
-rwxr-xr-xsrc/appMain/hmi_capabilities.json20
-rw-r--r--src/appMain/life_cycle.cc43
-rw-r--r--src/appMain/life_cycle.h7
-rw-r--r--src/appMain/sdl_preloaded_pt.json17
-rw-r--r--src/appMain/smartDeviceLink.ini76
-rw-r--r--src/components/CMakeLists.txt5
-rw-r--r--src/components/application_manager/CMakeLists.txt6
-rw-r--r--src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h2
-rw-r--r--src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h34
-rw-r--r--src/components/application_manager/include/application_manager/application.h31
-rw-r--r--src/components/application_manager/include/application_manager/application_impl.h26
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h59
-rw-r--r--src/components/application_manager/include/application_manager/message_helper.h36
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resume_ctrl.h9
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h22
-rw-r--r--src/components/application_manager/include/application_manager/smart_object_keys.h2
-rw-r--r--src/components/application_manager/include/application_manager/usage_statistics.h2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_module_constants.h13
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager.h30
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager_impl.h24
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc24
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc111
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc8
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/resource_allocation_manager_impl.cc144
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/CMakeLists.txt1
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_resource_allocation_manager.h5
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc206
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_request_template.h83
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_response_template.h83
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_request_template.h83
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_response_template.h82
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_request_template.h83
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_response_template.h84
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc5
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc6
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc41
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc856
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/activate_app_request_test.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc44
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc27
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/get_vehicle_data_request.h16
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/subscribe_vehicle_data_request.h14
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/unsubscribe_vehicle_data_request.h14
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/get_vehicle_data_request.cc172
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc142
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc137
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/get_vehicle_data_request_test.cc6
-rw-r--r--src/components/application_manager/src/app_launch/app_launch_data_db.cc2
-rw-r--r--src/components/application_manager/src/app_launch/device_apps_launcher.cc112
-rw-r--r--src/components/application_manager/src/application_impl.cc36
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc239
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc248
-rw-r--r--src/components/application_manager/src/mobile_message_handler.cc3
-rw-r--r--src/components/application_manager/src/policies/policy_event_observer.cc9
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc7
-rw-r--r--src/components/application_manager/src/resumption/resume_ctrl_impl.cc204
-rw-r--r--src/components/application_manager/src/rpc_handler_impl.cc4
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc4
-rw-r--r--src/components/application_manager/src/smart_object_keys.cc2
-rw-r--r--src/components/application_manager/test/app_launch/app_launch_ctrl_test.cc2
-rw-r--r--src/components/application_manager/test/app_launch/app_launch_data_db_test.cc4
-rw-r--r--src/components/application_manager/test/app_launch/app_launch_data_json_test.cc6
-rw-r--r--src/components/application_manager/test/application_impl_test.cc29
-rw-r--r--src/components/application_manager/test/application_manager_impl_test.cc413
-rw-r--r--src/components/application_manager/test/include/application_manager/commands/commands_test.h9
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_application.h7
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_message_helper.h12
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h2
-rw-r--r--src/components/application_manager/test/mock_message_helper.cc22
-rw-r--r--src/components/application_manager/test/resumption/resume_ctrl_test.cc209
-rw-r--r--src/components/application_manager/test/sdl_preloaded_pt.json4
-rw-r--r--src/components/application_manager/test/sdl_pt_update.json4
-rw-r--r--src/components/application_manager/test/usage_statistics_test.cc6
-rw-r--r--src/components/config_profile/include/config_profile/profile.h114
-rw-r--r--src/components/config_profile/src/profile.cc294
-rw-r--r--src/components/config_profile/test/profile_test.cc26
-rw-r--r--src/components/connection_handler/include/connection_handler/connection.h57
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler_impl.h98
-rw-r--r--src/components/connection_handler/src/connection.cc136
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc478
-rw-r--r--src/components/connection_handler/test/connection_handler_impl_test.cc239
-rw-r--r--src/components/connection_handler/test/connection_test.cc178
-rw-r--r--src/components/connection_handler/test/heart_beat_monitor_test.cc68
-rw-r--r--src/components/dbus/CMakeLists.txt82
-rw-r--r--src/components/dbus/codegen/code_formatter.py58
-rw-r--r--src/components/dbus/codegen/ford_xml_parser.py231
-rw-r--r--src/components/dbus/codegen/introspection_xml.cc327
-rwxr-xr-xsrc/components/dbus/codegen/make_hmi_requests.py343
-rwxr-xr-xsrc/components/dbus/codegen/make_introspection_c.py126
-rwxr-xr-xsrc/components/dbus/codegen/make_message_descriptions.py273
-rwxr-xr-xsrc/components/dbus/codegen/make_notifications_qml.py387
-rwxr-xr-xsrc/components/dbus/codegen/make_qml_dbus_cpp.py736
-rwxr-xr-xsrc/components/dbus/codegen/make_qml_dbus_qml.py217
-rw-r--r--src/components/dbus/codegen/make_qml_requests_cpp.py253
-rwxr-xr-xsrc/components/dbus/codegen/make_request_to_sdl.py335
-rw-r--r--src/components/dbus/include/dbus/dbus_adapter.h375
-rw-r--r--src/components/dbus/include/dbus/dbus_message.h179
-rw-r--r--src/components/dbus/include/dbus/dbus_message_controller.h97
-rw-r--r--src/components/dbus/include/dbus/dbus_message_inl.h214
-rw-r--r--src/components/dbus/include/dbus/schema.h98
-rw-r--r--src/components/dbus/src/dbus_adapter.cc937
-rw-r--r--src/components/dbus/src/dbus_message.cc217
-rw-r--r--src/components/dbus/src/dbus_message_controller.cc90
-rw-r--r--src/components/dbus/src/introspection_xml.cc327
-rw-r--r--src/components/dbus/src/message_descriptions.cc10424
-rw-r--r--src/components/dbus/src/schema.cc145
-rw-r--r--src/components/dbus/test/CMakeLists.txt53
-rw-r--r--src/components/dbus/test/dbus_message_controller_test.cc116
-rw-r--r--src/components/dbus/test/include/dbus/mock_dbus_message_controller.h75
-rw-r--r--src/components/dbus/test/include/dbus/mock_subscriber.h62
-rw-r--r--src/components/dbus/test/mock_subscriber.cc71
-rw-r--r--src/components/dbus/test/schema_test.cc118
-rw-r--r--src/components/hmi_message_handler/CMakeLists.txt10
-rw-r--r--src/components/hmi_message_handler/include/hmi_message_handler/dbus_message_adapter.h98
-rw-r--r--src/components/hmi_message_handler/src/dbus_message_adapter.cc223
-rw-r--r--src/components/include/application_manager/application_manager.h21
-rw-r--r--src/components/include/application_manager/application_manager_settings.h9
-rw-r--r--src/components/include/connection_handler/connection_handler.h68
-rw-r--r--src/components/include/connection_handler/connection_handler_observer.h17
-rw-r--r--src/components/include/protocol/bson_object_keys.h6
-rw-r--r--src/components/include/protocol/common.h16
-rw-r--r--src/components/include/protocol_handler/protocol_handler.h10
-rw-r--r--src/components/include/protocol_handler/protocol_handler_settings.h22
-rw-r--r--src/components/include/protocol_handler/session_observer.h30
-rw-r--r--src/components/include/test/application_manager/mock_application_manager.h5
-rw-r--r--src/components/include/test/application_manager/mock_application_manager_settings.h7
-rw-r--r--src/components/include/test/connection_handler/mock_connection_handler.h29
-rw-r--r--src/components/include/test/connection_handler/mock_connection_handler_observer.h5
-rw-r--r--src/components/include/test/protocol_handler/mock_protocol_handler.h5
-rw-r--r--src/components/include/test/protocol_handler/mock_protocol_handler_settings.h11
-rw-r--r--src/components/include/test/protocol_handler/mock_session_observer.h11
-rw-r--r--src/components/include/test/transport_manager/mock_transport_manager_listener.h2
-rw-r--r--src/components/include/test/transport_manager/mock_transport_manager_settings.h2
-rw-r--r--src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h2
-rw-r--r--src/components/include/transport_manager/transport_adapter/transport_adapter.h26
-rw-r--r--src/components/include/transport_manager/transport_adapter/transport_adapter_event.h8
-rw-r--r--src/components/include/transport_manager/transport_manager_listener.h14
-rw-r--r--src/components/include/transport_manager/transport_manager_listener_empty.h13
-rw-r--r--src/components/include/transport_manager/transport_manager_settings.h6
-rw-r--r--src/components/include/utils/data_accessor.h2
-rw-r--r--src/components/interfaces/CMakeLists.txt27
-rw-r--r--src/components/interfaces/HMI_API.xml223
-rw-r--r--src/components/interfaces/MOBILE_API.xml230
-rw-r--r--src/components/interfaces/QT_HMI_API.xml5517
-rw-r--r--src/components/policy/policy_external/.gitignore2
-rw-r--r--src/components/policy/policy_external/include/policy/policy_table/enums.h6
-rw-r--r--src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml1
-rw-r--r--src/components/policy/policy_external/src/policy_table/enums.cc14
-rw-r--r--src/components/policy/policy_external/test/json/PTU.json4
-rw-r--r--src/components/policy/policy_external/test/json/PTU2.json4
-rw-r--r--src/components/policy/policy_external/test/json/PTU3.json4
-rw-r--r--src/components/policy/policy_external/test/json/PTU_with_empty_requestType_array.json4
-rw-r--r--src/components/policy/policy_external/test/json/PTU_with_invalid_requestType_between_correct.json4
-rw-r--r--src/components/policy/policy_external/test/json/PTU_with_one_invalid_requestType.json4
-rw-r--r--src/components/policy/policy_external/test/json/PTU_without_requestType_field.json4
-rw-r--r--src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_reqestType_between_valid.json4
-rw-r--r--src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_requestType.json4
-rw-r--r--src/components/policy/policy_external/test/json/preloadedPT_with_several_invalid_default_requestTypes.json4
-rw-r--r--src/components/policy/policy_external/test/json/ptu2_requestType.json4
-rw-r--r--src/components/policy/policy_external/test/json/ptu_requestType.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_preloaded_pt.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_preloaded_pt1.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_preloaded_pt_send_location.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_pt_first_update.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_pt_second_update.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_pt_update.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_have_params.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1_omitted_in2.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_update_pt_send_location.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_update_pt_send_location_all_params.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_update_pt_send_location_no_params.json4
-rw-r--r--src/components/policy/policy_external/test/json/sdl_update_pt_send_location_some_params.json4
-rw-r--r--src/components/policy/policy_external/test/json/valid_sdl_pt_update.json4
-rw-r--r--src/components/policy/policy_external/test/sql_pt_representation_test.cc6
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_table/enums.h6
-rw-r--r--src/components/policy/policy_regular/policy_table_interface_ext.xml1
-rw-r--r--src/components/policy/policy_regular/src/policy_table/enums.cc14
-rw-r--r--src/components/policy/policy_regular/test/PTU.json4
-rw-r--r--src/components/policy/policy_regular/test/PTU2.json4
-rw-r--r--src/components/policy/policy_regular/test/PTU3.json4
-rw-r--r--src/components/policy/policy_regular/test/PTU4.json4
-rw-r--r--src/components/policy/policy_regular/test/ptu2_requestType.json4
-rw-r--r--src/components/policy/policy_regular/test/ptu_requestType.json4
-rw-r--r--src/components/policy/policy_regular/test/sdl_preloaded_pt.json4
-rw-r--r--src/components/policy/policy_regular/test/sdl_pt_first_update.json4
-rw-r--r--src/components/policy/policy_regular/test/sdl_pt_second_update.json4
-rw-r--r--src/components/policy/policy_regular/test/sdl_pt_update.json4
-rw-r--r--src/components/policy/policy_regular/test/sql_pt_representation_test.cc4
-rw-r--r--src/components/policy/policy_regular/test/valid_sdl_pt_update.json4
-rw-r--r--src/components/protocol/src/bson_object_keys.cc6
-rw-r--r--src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h115
-rw-r--r--src/components/protocol_handler/include/protocol_handler/protocol_packet.h5
-rw-r--r--src/components/protocol_handler/src/protocol_handler_impl.cc639
-rw-r--r--src/components/protocol_handler/src/protocol_packet.cc12
-rw-r--r--src/components/protocol_handler/test/incoming_data_handler_test.cc8
-rw-r--r--src/components/protocol_handler/test/protocol_handler_tm_test.cc1167
-rw-r--r--src/components/protocol_handler/test/protocol_header_validator_test.cc8
-rw-r--r--src/components/rpc_base/include/rpc_base/rpc_base.h24
-rw-r--r--src/components/rpc_base/include/rpc_base/rpc_base_dbus_inl.h501
-rw-r--r--src/components/rpc_base/test/CMakeLists.txt13
-rw-r--r--src/components/rpc_base/test/rpc_base_dbus_test.cc682
-rw-r--r--src/components/transport_manager/CMakeLists.txt21
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/network_interface_listener.h (renamed from src/components/dbus/test/dbus_adapter_test.cc)62
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/network_interface_listener_impl.h95
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/platform_specific/linux/platform_specific_network_interface_listener_impl.h228
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/platform_specific/qnx/platform_specific_network_interface_listener_impl.h102
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h53
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h30
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h12
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h20
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h14
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h14
-rw-r--r--src/components/transport_manager/src/tcp/network_interface_listener_impl.cc74
-rw-r--r--src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc704
-rw-r--r--src/components/transport_manager/src/tcp/platform_specific/qnx/platform_specific_network_interface_listener.cc (renamed from src/components/dbus/include/dbus/message_descriptions.h)66
-rw-r--r--src/components/transport_manager/src/tcp/tcp_client_listener.cc553
-rw-r--r--src/components/transport_manager/src/tcp/tcp_transport_adapter.cc36
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc27
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc24
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc12
-rw-r--r--src/components/transport_manager/test/CMakeLists.txt7
-rw-r--r--src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_client_listener.h66
-rw-r--r--src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h2
-rw-r--r--src/components/transport_manager/test/network_interface_listener_test.cc89
-rw-r--r--src/components/transport_manager/test/platform_specific/linux/linux_network_interface_listener_test.cc599
-rw-r--r--src/components/transport_manager/test/tcp_client_listener_test.cc504
-rw-r--r--src/components/transport_manager/test/tcp_transport_adapter_test.cc39
-rw-r--r--src/components/transport_manager/test/transport_adapter_listener_test.cc9
-rw-r--r--src/components/transport_manager/test/transport_adapter_test.cc29
-rw-r--r--src/components/transport_manager/test/transport_manager_default_test.cc12
-rw-r--r--src/components/transport_manager/test/transport_manager_impl_test.cc23
-rw-r--r--src/components/utils/include/utils/timer.h2
242 files changed, 9972 insertions, 26832 deletions
diff --git a/src/3rd_party/CMakeLists.txt b/src/3rd_party/CMakeLists.txt
index 6f1e3dc353..ae9267e5bb 100644
--- a/src/3rd_party/CMakeLists.txt
+++ b/src/3rd_party/CMakeLists.txt
@@ -44,17 +44,14 @@ if(FORCE_3RD_PARTY)
message(FATAL_ERROR "Please don't turn on both FORCE_3RD_PARTY and NO_REBUILD_3RD_PARTY at the same time.")
else()
set(FORCE_3RD_PARTY_LOGGER ON)
- set(FORCE_3RD_PARTY_DBUS ON)
endif()
endif()
-if(ENABLE_LOG OR HMI_DBUS_API)
+if(ENABLE_LOG)
# --- libexpat
add_subdirectory(expat-2.1.0)
set(EXPAT_LIBS_DIRECTORY ${3RD_PARTY_INSTALL_PREFIX_ARCH}/lib PARENT_SCOPE)
-endif()
-if(ENABLE_LOG)
if(NO_REBUILD_3RD_PARTY_LOGGER)
message(STATUS "Not rebuilding logger.")
else()
diff --git a/src/appMain/CMakeLists.txt b/src/appMain/CMakeLists.txt
index e82d95f904..a05f4f97a1 100644
--- a/src/appMain/CMakeLists.txt
+++ b/src/appMain/CMakeLists.txt
@@ -62,7 +62,6 @@ include_directories(
${POLICY_GLOBAL_INCLUDE_PATH}/
${COMPONENTS_DIR}/rpc_base/include
${COMPONENTS_DIR}/resumption/include
- ${COMPONENTS_DIR}/dbus/include
${CMAKE_BINARY_DIR}/src/components
${JSONCPP_INCLUDE_DIRECTORY}
${LOG4CXX_INCLUDE_DIRECTORY}
diff --git a/src/appMain/hmi_capabilities.json b/src/appMain/hmi_capabilities.json
index 50cb479a74..4eedd6b17a 100755
--- a/src/appMain/hmi_capabilities.json
+++ b/src/appMain/hmi_capabilities.json
@@ -462,6 +462,26 @@
"signalStrengthAvailable": true,
"stateAvailable": true
}
+ ],
+ "seatControlCapabilities": [
+ {
+ "moduleName": "driver_seat",
+ "heatingEnabledAvailable" : true,
+ "coolingEnabledAvailable": true,
+ "heatingLevelAvailable": true,
+ "coolingLevelAvailable": true,
+ "horizontalPositionAvailable": true,
+ "verticalPositionAvailable" : true,
+ "frontVerticalPositionAvailable": true,
+ "backVerticalPositionAvailable": true,
+ "backTiltAngleAvailable": true,
+ "headSupportHorizontalPositionAvailable": true,
+ "headSupportVerticalPositionAvailable" : true,
+ "massageEnabledAvailable": true,
+ "massageModeAvailable": true,
+ "massageCushionFirmnessAvailable": true,
+ "memoryAvailable": true
+ }
]
}
}
diff --git a/src/appMain/life_cycle.cc b/src/appMain/life_cycle.cc
index e42032a5cb..b9623d080a 100644
--- a/src/appMain/life_cycle.cc
+++ b/src/appMain/life_cycle.cc
@@ -70,10 +70,6 @@ LifeCycle::LifeCycle(const profile::Profile& profile)
#ifdef TELEMETRY_MONITOR
, telemetry_monitor_(NULL)
#endif // TELEMETRY_MONITOR
-#ifdef DBUS_HMIADAPTER
- , dbus_adapter_(NULL)
- , dbus_adapter_thread_(NULL)
-#endif // DBUS_HMIADAPTER
#ifdef MESSAGEBROKER_HMIADAPTER
, mb_adapter_(NULL)
, mb_adapter_thread_(NULL)
@@ -189,30 +185,6 @@ bool LifeCycle::InitMessageSystem() {
}
#endif // MESSAGEBROKER_HMIADAPTER
-#ifdef DBUS_HMIADAPTER
-/**
- * Initialize DBus component
- * @return true if success otherwise false.
- */
-bool LifeCycle::InitMessageSystem() {
- dbus_adapter_ = new hmi_message_handler::DBusMessageAdapter(hmi_handler_);
-
- hmi_handler_->AddHMIMessageAdapter(dbus_adapter_);
- if (!dbus_adapter_->Init()) {
- LOG4CXX_FATAL(logger_, "Cannot init DBus service!");
- return false;
- }
-
- dbus_adapter_->SubscribeTo();
-
- LOG4CXX_INFO(logger_, "Start DBusMessageAdapter thread!");
- dbus_adapter_thread_ = new std::thread(
- &hmi_message_handler::DBusMessageAdapter::Run, dbus_adapter_);
-
- return true;
-}
-#endif // DBUS_HMIADAPTER
-
namespace {
void sig_handler(int sig) {
switch (sig) {
@@ -315,21 +287,6 @@ void LifeCycle::StopComponents() {
LOG4CXX_INFO(logger_, "Destroying HMI Message Handler and MB adapter.");
-#ifdef DBUS_HMIADAPTER
- if (dbus_adapter_) {
- DCHECK_OR_RETURN_VOID(hmi_handler_);
- hmi_handler_->RemoveHMIMessageAdapter(dbus_adapter_);
- dbus_adapter_->Shutdown();
- if (dbus_adapter_thread_ != NULL) {
- dbus_adapter_thread_->join();
- }
- delete dbus_adapter_;
- dbus_adapter_ = NULL;
- delete dbus_adapter_thread_;
- dbus_adapter_thread_ = NULL;
- }
-#endif // DBUS_HMIADAPTER
-
#ifdef MESSAGEBROKER_HMIADAPTER
if (mb_adapter_) {
DCHECK_OR_RETURN_VOID(hmi_handler_);
diff --git a/src/appMain/life_cycle.h b/src/appMain/life_cycle.h
index 69f4b987f5..0ac2f4047b 100644
--- a/src/appMain/life_cycle.h
+++ b/src/appMain/life_cycle.h
@@ -39,9 +39,6 @@
#include "config_profile/profile.h"
#include "hmi_message_handler/hmi_message_handler_impl.h"
-#ifdef DBUS_HMIADAPTER
-#include "hmi_message_handler/dbus_message_adapter.h"
-#endif // DBUS_HMIADAPTER
#if (defined(MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI))
#include "hmi_message_handler/messagebroker_adapter.h"
#endif // #if ( defined (MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI) )
@@ -99,10 +96,6 @@ class LifeCycle {
#ifdef TELEMETRY_MONITOR
telemetry_monitor::TelemetryMonitor* telemetry_monitor_;
#endif // TELEMETRY_MONITOR
-#ifdef DBUS_HMIADAPTER
- hmi_message_handler::DBusMessageAdapter* dbus_adapter_;
- std::thread* dbus_adapter_thread_;
-#endif // DBUS_HMIADAPTER
#ifdef MESSAGEBROKER_HMIADAPTER
hmi_message_handler::MessageBrokerAdapter* mb_adapter_;
diff --git a/src/appMain/sdl_preloaded_pt.json b/src/appMain/sdl_preloaded_pt.json
index 1cf3bf52c1..d503ae34e5 100644
--- a/src/appMain/sdl_preloaded_pt.json
+++ b/src/appMain/sdl_preloaded_pt.json
@@ -141,7 +141,8 @@
"OnDriverDistraction": {
"hmi_levels": ["BACKGROUND",
"FULL",
- "LIMITED"]
+ "LIMITED",
+ "NONE"]
},
"OnEncodedSyncPData": {
"hmi_levels": ["BACKGROUND",
@@ -345,6 +346,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -357,6 +359,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -369,6 +372,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -381,6 +385,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -551,6 +556,12 @@
"FULL",
"LIMITED",
"NONE"]
+ },
+ "OnRCStatus": {
+ "hmi_levels": ["BACKGROUND",
+ "FULL",
+ "LIMITED",
+ "NONE"]
}
}
},
@@ -709,7 +720,8 @@
"OnDriverDistraction": {
"hmi_levels": ["BACKGROUND",
"FULL",
- "LIMITED"]
+ "LIMITED",
+ "NONE"]
},
"OnEncodedSyncPData": {
"hmi_levels": ["BACKGROUND",
@@ -2378,4 +2390,3 @@
}
}
}
-
diff --git a/src/appMain/smartDeviceLink.ini b/src/appMain/smartDeviceLink.ini
index aa15b7c5fe..444affc06c 100644
--- a/src/appMain/smartDeviceLink.ini
+++ b/src/appMain/smartDeviceLink.ini
@@ -190,6 +190,9 @@ OpenAttemptTimeoutMs = 500
[TransportManager]
; Listening port form incoming TCP mobile connection
TCPAdapterPort = 12345
+; Name of the network interface that Core will listen on for incoming TCP connection, e.g. eth0.
+; If the name is omitted, Core will listen on all network interfaces by binding to INADDR_ANY.
+TCPAdapterNetworkInterface =
[ProtocolHandler]
; SDL supported protocol version
@@ -264,6 +267,57 @@ AttemptsToOpenResumptionDB = 5
; Timeout between attempts during opening DB in milliseconds
OpenAttemptTimeoutMsResumptionDB = 500
+[TransportRequiredForResumption]
+; This section specifies transport types that are required to trigger resumption for each
+; AppHMIType. App has to be connected through at least one of the transports listed (either as
+; the primary transport or secondary transport) to trigger resumption. If the app is not
+; connected with any of the transports listed, its HMIlevel will be kept in NONE and the state
+; stays in NOT_AUDIBLE.
+; In case an app has multiple AppHMIType, requirements of all of the AppHMITypes are applied.
+;
+; Possible AppHMITypes: Default, Communication, Media, Messaging, Navigation, Information,
+; Social, BackgroundProcess, Testing, System, Projection, RemoteControl,
+; EmptyApp
+; Possible transport types: TCP_WIFI, IAP_CARPLAY, IAP_USB_HOST_MODE, IAP_USB_DEVICE_MODE,
+; IAP_USB, AOA_USB, IAP_BLUETOOTH, SPP_BLUETOOTH
+;
+; The default behavior is to always enable resumption. If an AppHMIType is not listed in this
+; section, resumption is enabled for an app with the AppHMIType.
+; On the other hand, if you want to disable resumption and always keep an app in NONE and
+; NOT_AUDIBLE state after registration, specify an empty value for the AppHMIType.
+;
+; NAVIGATION apps, PROJECTION apps and apps that declare themselves as media apps have a
+; special exception. When these apps do not have any of the transports listed here, they will
+; be still resumed into particular HMIlevel defined in LowBandwidthTransportResumptionLevel
+; section.
+
+;DefaultTransportRequiredForResumption =
+;CommunicationTransportRequiredForResumption =
+;MediaTransportRequiredForResumption =
+;MessagingTransportRequiredForResumption =
+;NavigationTransportRequiredForResumption =
+;InformationTransportRequiredForResumption =
+;SocialTransportRequiredForResumption =
+;BackgroundProcessTransportRequiredForResumption =
+;TestingTransportRequiredForResumption =
+;SystemTransportRequiredForResumption =
+;ProjectionTransportRequiredForResumption =
+;RemoteControlTransportRequiredForResumption =
+; "EmptyAppTransportRequiredForResumption" applies to apps that don't specify any AppHMIType
+;EmptyAppTransportRequiredForResumption =
+
+[LowBandwidthTransportResumptionLevel]
+; The HMI Level that an app will resume to if no high bandwidth connection is active.
+; High bandwidth connections for each app type are defined under TransportRequiredForResumption
+; section.
+; Possible values: NONE, BACKGROUND, LIMITED and FULL
+; this is for NAVIGATION apps
+;NavigationLowBandwidthResumptionLevel =
+; this is for PROJECTION apps
+;ProjectionLowBandwidthResumptionLevel =
+; this is for apps who declare themselves as media apps. (Don't be confused with AppHMIType=MEDIA.)
+;MediaLowBandwidthResumptionLevel =
+
[AppLaunch]
; time in milliseconds started from device connection - after expiring SDL remotely launches all known not-yet-registered apps from this device
AppLaunchWaitTime = 5000
@@ -279,3 +333,25 @@ MaxNumberOfiOSDevice = 10
WaitTimeBetweenApps = 4000
; App Launch on iOS devices SDL feature enabler/disabler
EnableAppLaunchIOS = true
+
+[MultipleTransports]
+; Whether multiple-transports feature is enabled
+;MultipleTransportsEnabled = true
+
+; Comma-separated list of transports that can be used as Secondary Transport for each Primary Transport.
+; Possible values are: WiFi, USB and Bluetooth.
+; Core will not suggest Secondary Transport if the value is empty.
+;SecondaryTransportForBluetooth = WiFi
+;SecondaryTransportForUSB =
+;SecondaryTransportForWiFi =
+
+[ServicesMap]
+; A matrix to specify which service is allowed on which transports. The transports are listed
+; in preferred order. If a transport is not listed, then the service is not allowed
+; to run on the transport.
+; Only video and audio services are configurable.
+; If the entry of a service is completely omitted, the service will be allowed on all transports.
+; Possible values are: IAP_BLUETOOTH, IAP_USB, IAP_USB_HOST_MODE, IAP_USB_DEVICE_MODE, IAP_CARPLAY, SPP_BLUETOOTH, AOA_USB and TCP_WIFI.
+; Note: this configuration is applied even if multiple-transports feature is not enabled.
+;AudioServiceTransports = TCP_WIFI, IAP_CARPLAY, IAP_USB_HOST_MODE, IAP_USB_DEVICE_MODE, IAP_USB, AOA_USB
+;VideoServiceTransports = TCP_WIFI, IAP_CARPLAY, IAP_USB_HOST_MODE, IAP_USB_DEVICE_MODE, IAP_USB, AOA_USB
diff --git a/src/components/CMakeLists.txt b/src/components/CMakeLists.txt
index 4f984bb3a8..f262f201c2 100644
--- a/src/components/CMakeLists.txt
+++ b/src/components/CMakeLists.txt
@@ -91,8 +91,3 @@ add_subdirectory(./media_manager)
if(TELEMETRY_MONITOR)
add_subdirectory(./telemetry_monitor)
endif()
-
-# --- DBus
-if(HMI_DBUS_API)
- add_subdirectory(./dbus)
-endif()
diff --git a/src/components/application_manager/CMakeLists.txt b/src/components/application_manager/CMakeLists.txt
index b7a6d94503..67a7136a62 100644
--- a/src/components/application_manager/CMakeLists.txt
+++ b/src/components/application_manager/CMakeLists.txt
@@ -118,12 +118,6 @@ collect_sources(EVENT_ENGINE_SOURCES "${EVENT_ENGINE_PATHS}")
collect_sources(POLICIES_SOURCES "${POLICIES_PATHS}")
-if (${HMI_JSON_API})
- set (HMI_COMMANDS_SOURCES ${HMI_COMMANDS_SOURCES} ${HMI_COMMANDS_SOURCES_JSON})
-endif (${HMI_JSON_API})
-
-set (HMI_COMMANDS_SOURCES ${HMI_COMMANDS_SOURCES} ${HMI_COMMANDS_SOURCES_DBUS})
-
set(EXCLUDE_PATHS
${EVENT_ENGINE_SOURCE_DIR}
${MESSAGE_HELPER_SOURCE_DIR}
diff --git a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h
index 92d6bbd9ef..ccbf4c7c01 100644
--- a/src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h
+++ b/src/components/application_manager/include/application_manager/app_launch/app_launch_data_db.h
@@ -153,7 +153,7 @@ class AppLaunchDataDB : public AppLaunchDataImpl {
/**
* @brief returns pointer to data base
*/
- std::auto_ptr<utils::dbms::SQLDatabase> db_;
+ std::unique_ptr<utils::dbms::SQLDatabase> db_;
/**
* @brief indicate initializing status of DB
diff --git a/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h b/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h
index f1f29471e6..2a6cdb0745 100644
--- a/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h
+++ b/src/components/application_manager/include/application_manager/app_launch/device_apps_launcher.h
@@ -10,9 +10,39 @@
namespace app_launch {
class AppLaunchCtrlImpl;
-class DeviceAppsLauncherImpl;
+class DeviceAppsLauncher;
class AppsLauncher;
class AppLaunchSettings;
+class Launcher;
+class LauncherGenerator;
+
+// impl class must be defined for unique_ptr in DeviceAppsLauncher
+class DeviceAppsLauncherImpl {
+ public:
+ DeviceAppsLauncherImpl(DeviceAppsLauncher& interface,
+ AppsLauncher& apps_launcher);
+
+ bool LaunchAppsOnDevice(
+ const std::string& device_mac,
+ const std::vector<ApplicationDataPtr>& applications_to_launch);
+
+ struct LauncherFinder {
+ LauncherFinder(const std::string& device_mac) : device_mac_(device_mac) {}
+
+ bool operator()(const utils::SharedPtr<Launcher>& launcher) const;
+
+ std::string device_mac_;
+ };
+
+ bool StopLaunchingAppsOnDevice(const std::string& device_mac);
+
+ private:
+ sync_primitives::Lock launchers_lock_;
+ std::vector<utils::SharedPtr<Launcher> > free_launchers_;
+ std::vector<utils::SharedPtr<Launcher> > works_launchers_;
+ DeviceAppsLauncher& interface_;
+};
+
/**
* @brief The MultipleAppsLauncher struct
* should manage launching applications and gaps between launching application
@@ -36,7 +66,7 @@ class DeviceAppsLauncher {
private:
application_manager::ApplicationManager& app_mngr_;
const AppLaunchSettings& settings_;
- std::auto_ptr<DeviceAppsLauncherImpl> impl_;
+ std::unique_ptr<DeviceAppsLauncherImpl> impl_;
friend class DeviceAppsLauncherImpl;
DISALLOW_COPY_AND_ASSIGN(DeviceAppsLauncher);
};
diff --git a/src/components/application_manager/include/application_manager/application.h b/src/components/application_manager/include/application_manager/application.h
index 8a681ac29a..cfc3c03a5b 100644
--- a/src/components/application_manager/include/application_manager/application.h
+++ b/src/components/application_manager/include/application_manager/application.h
@@ -552,6 +552,12 @@ class Application : public virtual InitialApplicationData,
const = 0;
virtual const std::string& app_icon_path() const = 0;
virtual connection_handler::DeviceHandle device() const = 0;
+ /**
+ * @brief Returns handle of the device on which secondary transport of this
+ * app is running
+ * @return handle of the device on which secondary transport is running
+ */
+ virtual connection_handler::DeviceHandle secondary_device() const = 0;
/**
* @brief sets true if application has sent TTS GlobalProperties
@@ -589,6 +595,13 @@ class Application : public virtual InitialApplicationData,
virtual void set_app_allowed(const bool allowed) = 0;
DEPRECATED virtual void set_device(
connection_handler::DeviceHandle device) = 0;
+ /**
+ * @brief Sets the handle of the device on which secondary transport of this
+ * app is running
+ * @param handle of the device on which secondary transport is running
+ */
+ virtual void set_secondary_device(
+ connection_handler::DeviceHandle secondary_device) = 0;
virtual uint32_t get_grammar_id() const = 0;
virtual void set_grammar_id(uint32_t value) = 0;
@@ -599,6 +612,24 @@ class Application : public virtual InitialApplicationData,
virtual void set_is_resuming(bool is_resuming) = 0;
virtual bool is_resuming() const = 0;
+ /**
+ * @brief Remembers the HMI level which the app would resume into if high-
+ * bandwidth transport were available.
+ * @param level The HMI level which the app would resume into. Specify
+ * INVALID_ENUM to clear the state.
+ */
+ virtual void set_deferred_resumption_hmi_level(
+ mobile_api::HMILevel::eType level) = 0;
+ /**
+ * @brief Returns the HMI level which the app would resume into if high-
+ * bandwidth transport were available.
+ *
+ * A value of INVALID_ENUM indicates that the app does not have deferred
+ * HMI level.
+ * @return HMI level which the app would resume into
+ */
+ virtual mobile_api::HMILevel::eType deferred_resumption_hmi_level() const = 0;
+
virtual bool AddFile(const AppFile& file) = 0;
virtual const AppFilesMap& getAppFiles() const = 0;
diff --git a/src/components/application_manager/include/application_manager/application_impl.h b/src/components/application_manager/include/application_manager/application_impl.h
index b69a056e03..46706fad4f 100644
--- a/src/components/application_manager/include/application_manager/application_impl.h
+++ b/src/components/application_manager/include/application_manager/application_impl.h
@@ -41,7 +41,7 @@
#include <forward_list>
#include <stdint.h>
-#include "utils/date_time.h"
+#include "application_manager/application.h"
#include "application_manager/application_data_impl.h"
#include "application_manager/usage_statistics.h"
#include "application_manager/help_prompt_manager_impl.h"
@@ -54,6 +54,7 @@
#include "utils/custom_string.h"
#include "utils/timer.h"
#include "utils/macro.h"
+#include "utils/date_time.h"
namespace usage_statistics {
@@ -176,6 +177,7 @@ class ApplicationImpl : public virtual Application,
const;
const std::string& app_icon_path() const;
connection_handler::DeviceHandle device() const;
+ connection_handler::DeviceHandle secondary_device() const;
const std::string& mac_address() const OVERRIDE;
const std::string& bundle_id() const OVERRIDE;
void set_bundle_id(const std::string& bundle_id) OVERRIDE;
@@ -192,6 +194,7 @@ class ApplicationImpl : public virtual Application,
bool set_app_icon_path(const std::string& path);
void set_app_allowed(const bool allowed);
void set_device(connection_handler::DeviceHandle device);
+ void set_secondary_device(connection_handler::DeviceHandle secondary_device);
virtual uint32_t get_grammar_id() const;
virtual void set_grammar_id(uint32_t value);
bool is_audio() const OVERRIDE;
@@ -203,6 +206,24 @@ class ApplicationImpl : public virtual Application,
virtual void set_is_resuming(bool is_resuming);
virtual bool is_resuming() const;
+ /**
+ * @brief Remembers the HMI level which the app would resume into if high-
+ * bandwidth transport were available.
+ * @param level The HMI level which the app would resume into. Specify
+ * INVALID_ENUM to clear the state.
+ */
+ void set_deferred_resumption_hmi_level(
+ mobile_api::HMILevel::eType level) OVERRIDE;
+ /**
+ * @brief Returns the HMI level which the app would resume into if high-
+ * bandwidth transport were available.
+ *
+ * A value of INVALID_ENUM indicates that the app does not have deferred
+ * HMI level.
+ * @return HMI level which the app would resume into
+ */
+ mobile_api::HMILevel::eType deferred_resumption_hmi_level() const OVERRIDE;
+
bool AddFile(const AppFile& file);
bool UpdateFile(const AppFile& file);
bool DeleteFile(const std::string& file_name);
@@ -456,6 +477,7 @@ class ApplicationImpl : public virtual Application,
bool audio_streaming_suspended_;
sync_primitives::Lock video_streaming_suspended_lock_;
sync_primitives::Lock audio_streaming_suspended_lock_;
+ sync_primitives::Lock streaming_stop_lock_;
bool is_app_allowed_;
bool has_been_activated_;
@@ -469,6 +491,7 @@ class ApplicationImpl : public virtual Application,
std::string app_icon_path_;
std::string mac_address_;
connection_handler::DeviceHandle device_id_;
+ connection_handler::DeviceHandle secondary_device_id_;
std::string bundle_id_;
AppFilesMap app_files_;
std::set<mobile_apis::ButtonName::eType> subscribed_buttons_;
@@ -477,6 +500,7 @@ class ApplicationImpl : public virtual Application,
protocol_handler::MajorProtocolVersion protocol_version_;
bool is_voice_communication_application_;
sync_primitives::atomic_bool is_resuming_;
+ mobile_api::HMILevel::eType deferred_resumption_hmi_level_;
bool is_hash_changed_during_suspend_;
uint32_t video_stream_retry_number_;
diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h
index 7433a5560f..399b710286 100644
--- a/src/components/application_manager/include/application_manager/application_manager_impl.h
+++ b/src/components/application_manager/include/application_manager/application_manager_impl.h
@@ -188,6 +188,8 @@ class ApplicationManagerImpl
void SendHMIStatusNotification(
const utils::SharedPtr<Application> app) OVERRIDE;
+ void SendDriverDistractionState(ApplicationSharedPtr application);
+
ApplicationSharedPtr application(
const std::string& device_id,
const std::string& policy_app_id) const OVERRIDE;
@@ -671,6 +673,10 @@ class ApplicationManagerImpl
const int32_t& session_key,
const protocol_handler::ServiceType& type,
const connection_handler::CloseSessionReason& close_reason) OVERRIDE;
+ void OnSecondaryTransportStartedCallback(
+ const connection_handler::DeviceHandle device_handle,
+ const int32_t session_key) OVERRIDE;
+ void OnSecondaryTransportEndedCallback(const int32_t session_key) OVERRIDE;
/**
* @brief Check if application with specified app_id has NAVIGATION HMI type
@@ -818,6 +824,18 @@ class ApplicationManagerImpl
ApplicationConstSharedPtr application) const;
/**
+ * @brief Checks if required transport for resumption is available
+ *
+ * The required transport can be configured through smartDeviceLink.ini file.
+ *
+ * @param application an instance of the app to check
+ * @return true if the app is connected through one of the required
+ * transports, false otherwise
+ */
+ bool CheckResumptionRequiredTransportAvailable(
+ ApplicationConstSharedPtr application) const;
+
+ /**
* Getter for resume_controller
* @return Resume Controller
*/
@@ -1140,6 +1158,14 @@ class ApplicationManagerImpl
mobile_apis::AppHMIType::eType StringToAppHMIType(std::string str);
/**
+ * @brief Returns a string representation of AppHMIType
+ * @param type an enum value of AppHMIType
+ * @return string representation of the enum value
+ */
+ const std::string AppHMITypeToString(
+ mobile_apis::AppHMIType::eType type) const;
+
+ /**
* @brief Method compares arrays of app HMI type
* @param from_policy contains app HMI type from policy
* @param from_application contains app HMI type from application
@@ -1325,14 +1351,6 @@ class ApplicationManagerImpl
void DisallowStreaming(uint32_t app_id);
/**
- * @brief Checks if driver distraction state is valid, creates message
- * and puts it to postponed message.
- * @param application contains registered application.
- */
- void PutDriverDistractionMessageToPostponed(
- ApplicationSharedPtr application) const;
-
- /**
* @brief Types of directories used by Application Manager
*/
enum DirectoryType { TYPE_STORAGE, TYPE_SYSTEM, TYPE_ICONS };
@@ -1396,6 +1414,15 @@ class ApplicationManagerImpl
const std::string& mac_address);
/**
+ * @brief Converts device handle to transport type string used in
+ * smartDeviceLink.ini file, e.g. "TCP_WIFI"
+ * @param device_handle A device handle
+ * @return string representation of the transport of the device
+ */
+ const std::string GetTransportTypeProfileString(
+ connection_handler::DeviceHandle device_handle) const;
+
+ /**
* @brief Converts BSON object containing video parameters to
* smart object's map object
* @param output the smart object to add video parameters
@@ -1458,7 +1485,7 @@ class ApplicationManagerImpl
hmi_message_handler::HMIMessageHandler* hmi_handler_;
connection_handler::ConnectionHandler* connection_handler_;
- std::auto_ptr<policy::PolicyHandlerInterface> policy_handler_;
+ std::unique_ptr<policy::PolicyHandlerInterface> policy_handler_;
protocol_handler::ProtocolHandler* protocol_handler_;
request_controller::RequestController request_ctrl_;
std::unique_ptr<plugin_manager::RPCPluginManager> plugin_manager_;
@@ -1487,7 +1514,7 @@ class ApplicationManagerImpl
static uint32_t corelation_id_;
static const uint32_t max_corelation_id_;
- std::auto_ptr<HMICapabilities> hmi_capabilities_;
+ std::unique_ptr<HMICapabilities> hmi_capabilities_;
// The reason of HU shutdown
mobile_api::AppInterfaceUnregisteredReason::eType unregister_reason_;
@@ -1496,7 +1523,7 @@ class ApplicationManagerImpl
* about persistent application data on disk, and save session ID for resuming
* application in case INGITION_OFF or MASTER_RESSET
*/
- std::auto_ptr<resumption::ResumeCtrl> resume_ctrl_;
+ std::unique_ptr<resumption::ResumeCtrl> resume_ctrl_;
HmiInterfacesImpl hmi_interfaces_;
@@ -1511,8 +1538,8 @@ class ApplicationManagerImpl
sync_primitives::Lock timer_pool_lock_;
mutable sync_primitives::Lock stopping_application_mng_lock_;
StateControllerImpl state_ctrl_;
- std::auto_ptr<app_launch::AppLaunchData> app_launch_dto_;
- std::auto_ptr<app_launch::AppLaunchCtrl> app_launch_ctrl_;
+ std::unique_ptr<app_launch::AppLaunchData> app_launch_dto_;
+ std::unique_ptr<app_launch::AppLaunchCtrl> app_launch_ctrl_;
/**
* @brief ReregisterWaitList is list of applications expected to be
@@ -1523,6 +1550,12 @@ class ApplicationManagerImpl
mutable sync_primitives::Lock reregister_wait_list_lock_;
+ // This is a cache to remember DeviceHandle of secondary transports. Only used
+ // during RegisterApplication().
+ typedef std::map<int32_t, connection_handler::DeviceHandle> DeviceMap;
+
+ DeviceMap secondary_transport_devices_cache_;
+
#ifdef TELEMETRY_MONITOR
AMTelemetryObserver* metric_observer_;
#endif // TELEMETRY_MONITOR
diff --git a/src/components/application_manager/include/application_manager/message_helper.h b/src/components/application_manager/include/application_manager/message_helper.h
index 6590098a01..9559c2007e 100644
--- a/src/components/application_manager/include/application_manager/message_helper.h
+++ b/src/components/application_manager/include/application_manager/message_helper.h
@@ -72,7 +72,23 @@ typedef std::map<std::string, mobile_apis::VehicleDataType::eType> VehicleData;
class MessageHelper {
public:
/**
- * @brief Creates request for different interfaces(JSON, DBUS)
+ * @brief CreateNotification creates basic mobile notification smart object
+ * @param function_id Notification function ID
+ * @param app_id application to send notification
+ * @return basic mobile notification smart object
+ */
+ static smart_objects::SmartObjectSPtr CreateNotification(
+ mobile_apis::FunctionID::eType function_id, uint32_t app_id);
+ /**
+ * @brief CreateHMINotification creates basic hmi notification smart object
+ * @param function_id Notification function ID
+ * @return basic hmi notification smart object
+ */
+ static smart_objects::SmartObjectSPtr CreateHMINotification(
+ hmi_apis::FunctionID::eType function_id);
+
+ /**
+ * @brief Creates request for different interfaces(JSON)
* @param correlation_id unique ID
* @param params Vector of arguments that we need in GetVehicleData request
* (e.g. gps, odometer, fuel_level)
@@ -286,6 +302,24 @@ class MessageHelper {
ApplicationManager& app_mngr);
/*
+ * @brief Create Common.DeviceInfo struct from device handle
+ * @param device_handle device handle of the app
+ * @param session_observer instance of SessionObserver to retrieve device
+ * information
+ * @param policy_handler instance of PolicyHandlerInterface to get the value
+ * of 'isSDLAllowed'
+ * @param app_mngr instance of ApplicationManager
+ * @param output smart object to store created Common.DeviceInfo struct
+ * @return true on success, false otherwise
+ */
+ static bool CreateDeviceInfo(
+ connection_handler::DeviceHandle device_handle,
+ const protocol_handler::SessionObserver& session_observer,
+ const policy::PolicyHandlerInterface& policy_handler,
+ ApplicationManager& app_mngr,
+ smart_objects::SmartObject* output);
+
+ /*
* @brief Create Common.HMIApplication struct application instance
* @param app : applicaton instace
* @param output smart object to store Common.HMIApplication struct
diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
index 0ec58f2419..6d26b6a617 100644
--- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
+++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
@@ -158,6 +158,13 @@ class ResumeCtrl {
app_mngr::ApplicationSharedPtr application) = 0;
/**
+ * @brief Retry resumption of an app if it has been disabled or limited
+ * due to absence of high-bandwidth transport.
+ * @param app_id ID of the app to resume
+ */
+ virtual void RetryResumption(const uint32_t app_id) = 0;
+
+ /**
* @brief Check if there are all files need for resumption
* @param application that is need to be restored
* @return true if it all files exist, otherwise return false
@@ -264,6 +271,8 @@ class ResumeCtrl {
#ifdef BUILD_TESTS
virtual void set_resumption_storage(
utils::SharedPtr<ResumptionData> mock_storage) = 0;
+
+ virtual bool get_resumption_active() const = 0;
#endif // BUILD_TESTS
};
diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
index d7ff621c95..9e084af66b 100644
--- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
+++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
@@ -178,6 +178,13 @@ class ResumeCtrlImpl : public ResumeCtrl,
app_mngr::ApplicationSharedPtr application) OVERRIDE;
/**
+ * @brief Retry resumption of an app if it has been disabled or limited
+ * due to absence of high-bandwidth transport.
+ * @param app_id ID of the app to resume
+ */
+ void RetryResumption(const uint32_t app_id) OVERRIDE;
+
+ /**
* @brief Check if there are all files need for resumption
* @param application that is need to be restored
* @return true if it all files exist, otherwise return false
@@ -298,6 +305,8 @@ class ResumeCtrlImpl : public ResumeCtrl,
#ifdef BUILD_TESTS
void set_resumption_storage(
utils::SharedPtr<ResumptionData> mock_storage) OVERRIDE;
+
+ bool get_resumption_active() const OVERRIDE;
#endif // BUILD_TESTS
private:
/**
@@ -500,6 +509,19 @@ class ResumeCtrlImpl : public ResumeCtrl,
const application_manager::ApplicationSharedPtr application) const;
/**
+ * @brief Retrieve the HMI level of the app when high-bandwidth transport
+ *isn't available
+ *
+ * The value is configured through smartDeviceLink.ini file
+ *
+ * @param application an instance of the app
+ * @return HMI level that the app is allowed when high-bandwidth transport
+ *isn't available
+ */
+ mobile_apis::HMILevel::eType GetHmiLevelOnLowBandwidthTransport(
+ app_mngr::ApplicationConstSharedPtr application) const;
+
+ /**
*@brief Mapping applications to time_stamps
* wait for timer to resume HMI Level
*
diff --git a/src/components/application_manager/include/application_manager/smart_object_keys.h b/src/components/application_manager/include/application_manager/smart_object_keys.h
index 80e475a680..991937f11f 100644
--- a/src/components/application_manager/include/application_manager/smart_object_keys.h
+++ b/src/components/application_manager/include/application_manager/smart_object_keys.h
@@ -218,6 +218,7 @@ extern const char* did_location;
extern const char* app_list;
extern const char* device_list;
extern const char* device_info;
+extern const char* secondary_device_info;
extern const char* name;
extern const char* id;
extern const char* isSDLAllowed;
@@ -260,6 +261,7 @@ extern const char* prndl;
extern const char* tire_pressure;
extern const char* odometer;
extern const char* belt_status;
+extern const char* electronic_park_brake_status;
extern const char* body_information;
extern const char* device_status;
extern const char* driver_braking;
diff --git a/src/components/application_manager/include/application_manager/usage_statistics.h b/src/components/application_manager/include/application_manager/usage_statistics.h
index 886389b05c..aa07e41cad 100644
--- a/src/components/application_manager/include/application_manager/usage_statistics.h
+++ b/src/components/application_manager/include/application_manager/usage_statistics.h
@@ -66,7 +66,7 @@ class UsageStatistics {
void RecordTLSError();
private:
- std::auto_ptr<usage_statistics::AppStopwatch> time_in_hmi_state_sptr_;
+ std::unique_ptr<usage_statistics::AppStopwatch> time_in_hmi_state_sptr_;
usage_statistics::AppInfo app_registration_language_gui_;
usage_statistics::AppInfo app_registration_language_vui_;
usage_statistics::AppCounter count_of_rejected_rpc_calls_;
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_module_constants.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_module_constants.h
index e22f2b64a8..f2037aabbb 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_module_constants.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_module_constants.h
@@ -40,10 +40,7 @@ namespace strings {
const char kclimateControlCapabilities[] = "climateControlCapabilities";
const char kradioControlCapabilities[] = "radioControlCapabilities";
const char kbuttonCapabilities[] = "buttonCapabilities";
-// RemoteControlCapabilities constants
-
-const char kRadioControlData[] = "radioControlData";
-const char kClimateControlData[] = "climateControlData";
+const char kseatControlCapabilities[] = "seatControlCapabilities";
} // strings
namespace result_codes {
@@ -90,6 +87,7 @@ const char kCode[] = "code";
namespace message_params {
const char kName[] = "name";
+const char kId[] = "id";
// SetInteriorVehicleData request
const char kModuleData[] = "moduleData";
@@ -114,6 +112,11 @@ const char kButtonName[] = "buttonName";
const char kButtonPressMode[] = "buttonPressMode";
// ButtonPress request
+// OnRCStatusNotification
+const char kAllocatedModules[] = "allocatedModules";
+const char kFreeModules[] = "freeModules";
+// OnRCStatusNotification
+
// RdsData struct
const char kPS[] = "PS";
const char kRT[] = "RT";
@@ -155,6 +158,7 @@ const char kVentilationMode[] = "ventilationMode";
// ModuleData struct
const char kRadioControlData[] = "radioControlData";
const char kClimateControlData[] = "climateControlData";
+const char kSeatControlData[] = "seatControlData";
// ModuleData struct
const char kHMIAppID[] = "appID";
@@ -168,6 +172,7 @@ namespace enums_value {
// ModuleType enum
const char kClimate[] = "CLIMATE";
const char kRadio[] = "RADIO";
+const char kSeat[] = "SEAT";
// ModuleType enum
// RadioBand enum
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager.h
index 0dc8b59f8f..20bd438494 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager.h
@@ -56,6 +56,19 @@ enum eType { FREE = 0, BUSY };
}
/**
+ * Defines triggers for OnRCStatus notification sending
+ */
+namespace NotificationTrigger {
+/**
+ * @brief The eType
+ * APP_REGISTRATION RC app registation event
+ * RC_STATE_CHANGING enabling/disabling RC on HMI event
+ * MODULE_ALLOCATION module allocation/deallocation event
+ */
+enum eType { APP_REGISTRATION = 0, MODULE_ALLOCATION, RC_STATE_CHANGING };
+}
+
+/**
* @brief Resources defines list of resources
*/
typedef std::vector<std::string> Resources;
@@ -144,6 +157,23 @@ class ResourceAllocationManager {
virtual RCAppExtensionPtr GetApplicationExtention(
application_manager::ApplicationSharedPtr application) = 0;
+ /**
+ * @brief Create and send OnRCStatusNotification to mobile and HMI
+ * @param event trigger for notification sending
+ * @param application - app that should receive notification
+ * in case of registration; in cases of RC enabling/disabling
+ * or module allocation - application is just empty shared ptr,
+ * because in these cases all registered RC apps should
+ * receive a notification
+ */
+ virtual void SendOnRCStatusNotifications(
+ NotificationTrigger::eType event,
+ application_manager::ApplicationSharedPtr application) = 0;
+
+ virtual bool is_rc_enabled() const = 0;
+
+ virtual void set_rc_enabled(const bool value) = 0;
+
virtual ~ResourceAllocationManager() {}
};
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager_impl.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager_impl.h
index bb875bb180..d6124a026b 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager_impl.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/resource_allocation_manager_impl.h
@@ -118,7 +118,29 @@ class ResourceAllocationManagerImpl : public ResourceAllocationManager {
RCAppExtensionPtr GetApplicationExtention(
application_manager::ApplicationSharedPtr application) FINAL;
+ void SendOnRCStatusNotifications(
+ NotificationTrigger::eType event,
+ application_manager::ApplicationSharedPtr application) FINAL;
+
+ bool is_rc_enabled() const FINAL;
+
+ void set_rc_enabled(const bool value) FINAL;
+
private:
+ typedef std::vector<application_manager::ApplicationSharedPtr> Apps;
+
+ /**
+ * @brief Create OnRCStatusNotification creates OnRCStatus notification smart
+ * object for mobile application
+ * @param app_id application to send OnRCStatusNotification
+ * @return smart object with mobile OnRCStatusNotification
+ */
+ smart_objects::SmartObjectSPtr CreateOnRCStatusNotificationToMobile(
+ const application_manager::ApplicationSharedPtr app);
+
+ smart_objects::SmartObjectSPtr CreateOnRCStatusNotificationToHmi(
+ const application_manager::ApplicationSharedPtr app);
+
/**
* @brief IsModuleTypeRejected check if current resource was rejected by
* driver for current application
@@ -177,6 +199,7 @@ class ResourceAllocationManagerImpl : public ResourceAllocationManager {
void SetResourceFree(const std::string& module_type, const uint32_t app_id);
std::vector<std::string> all_supported_modules();
+
/**
* @brief AllocatedResources contains link between resource and application
* owning that resource
@@ -204,6 +227,7 @@ class ResourceAllocationManagerImpl : public ResourceAllocationManager {
hmi_apis::Common_RCAccessMode::eType current_access_mode_;
application_manager::ApplicationManager& app_mngr_;
application_manager::rpc_service::RPCService& rpc_service_;
+ bool is_rc_enabled_;
};
} // rc_rpc_plugin
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc
index 817223a369..ca96b1cf97 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc
@@ -131,6 +131,7 @@ void RCOnRemoteControlSettingsNotification::Run() {
hmi_apis::Common_RCAccessMode::eType access_mode =
hmi_apis::Common_RCAccessMode::INVALID_ENUM;
LOG4CXX_DEBUG(logger_, "Allowing RC Functionality");
+ resource_allocation_manager_.set_rc_enabled(true);
if ((*message_)[app_mngr::strings::msg_params].keyExists(
message_params::kAccessMode)) {
access_mode = static_cast<hmi_apis::Common_RCAccessMode::eType>(
@@ -150,6 +151,7 @@ void RCOnRemoteControlSettingsNotification::Run() {
LOG4CXX_DEBUG(logger_, "Disallowing RC Functionality");
DisallowRCFunctionality();
resource_allocation_manager_.ResetAllAllocations();
+ resource_allocation_manager_.set_rc_enabled(false);
}
}
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc
index 38f94637c2..06c44d2ff3 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc
@@ -63,18 +63,20 @@ bool CheckIfModuleTypeExistInCapabilities(
const smart_objects::SmartObject& rc_capabilities,
const std::string& module_type) {
LOG4CXX_AUTO_TRACE(logger_);
- if (enums_value::kRadio == module_type &&
- !rc_capabilities.keyExists(strings::kradioControlCapabilities)) {
- LOG4CXX_DEBUG(logger_, " Radio control capabilities not present");
- return false;
- }
- if (enums_value::kClimate == module_type &&
- !rc_capabilities.keyExists(strings::kclimateControlCapabilities)) {
- LOG4CXX_DEBUG(logger_, " Climate control capabilities not present");
- return false;
+ const std::map<std::string, std::string> params = {
+ {enums_value::kRadio, strings::kradioControlCapabilities},
+ {enums_value::kClimate, strings::kclimateControlCapabilities},
+ {enums_value::kSeat, strings::kseatControlCapabilities}};
+ bool is_module_type_valid = false;
+ for (const auto& param : params) {
+ if (param.first == module_type) {
+ if (rc_capabilities.keyExists(param.second)) {
+ is_module_type_valid = true;
+ break;
+ }
+ }
}
-
- return true;
+ return is_module_type_valid;
}
void GetInteriorVehicleDataRequest::Execute() {
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc
index 160915f347..83bb526076 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc
@@ -32,6 +32,7 @@
#include "rc_rpc_plugin/commands/mobile/set_interior_vehicle_data_request.h"
#include "rc_rpc_plugin/rc_module_constants.h"
+#include "rc_rpc_plugin/rc_rpc_plugin.h"
#include "smart_objects/enum_schema_item.h"
#include "utils/macro.h"
#include "json/json.h"
@@ -60,6 +61,14 @@ std::vector<std::string> GetModuleReadOnlyParams(
return module_ro_params;
}
+const std::map<std::string, std::string> GetModuleTypeToDataMapping() {
+ std::map<std::string, std::string> mapping = {
+ {enums_value::kRadio, message_params::kRadioControlData},
+ {enums_value::kClimate, message_params::kClimateControlData},
+ {enums_value::kSeat, message_params::kSeatControlData}};
+ return mapping;
+}
+
const std::map<std::string, std::string> GetModuleDataToCapabilitiesMapping() {
std::map<std::string, std::string> mapping;
// climate
@@ -86,6 +95,25 @@ const std::map<std::string, std::string> GetModuleDataToCapabilitiesMapping() {
mapping["radioEnable"] = "radioEnableAvailable";
mapping["state"] = "stateAvailable";
+ // seat
+ mapping["heatingEnabled"] = "heatingEnabledAvailable";
+ mapping["coolingEnabled"] = "coolingEnabledAvailable";
+ mapping["heatingLevel"] = "heatingLevelAvailable";
+ mapping["coolingLevel"] = "coolingLevelAvailable";
+ mapping["horizontalPosition"] = "horizontalPositionAvailable";
+ mapping["verticalPosition"] = "verticalPositionAvailable";
+ mapping["frontVerticalPosition"] = "frontVerticalPositionAvailable";
+ mapping["backVerticalPosition"] = "backVerticalPositionAvailable";
+ mapping["backTiltAngle"] = "backTiltAngleAvailable";
+ mapping["headSupportHorizontalPosition"] =
+ "headSupportHorizontalPositionAvailable";
+ mapping["headSupportVerticalPosition"] =
+ "headSupportVerticalPositionAvailable";
+ mapping["massageEnabled"] = "massageEnabledAvailable";
+ mapping["massageMode"] = "massageModeAvailable";
+ mapping["massageCushionFirmness"] = "massageCushionFirmnessAvailable";
+ mapping["memory"] = "memoryAvailable";
+
return mapping;
}
} // namespace
@@ -113,12 +141,14 @@ bool CheckControlDataByCapabilities(
const smart_objects::SmartObject& control_data) {
std::map<std::string, std::string> mapping =
GetModuleDataToCapabilitiesMapping();
-
+ const smart_objects::SmartObject& capabilities_status = module_caps[0];
auto it = control_data.map_begin();
for (; it != control_data.map_end(); ++it) {
const std::string& request_parameter = it->first;
+ if (message_params::kId == request_parameter) {
+ continue;
+ }
const std::string& caps_key = mapping[request_parameter];
- const smart_objects::SmartObject& capabilities_status = module_caps[0];
LOG4CXX_DEBUG(logger_,
"Checking request parameter "
<< request_parameter
@@ -145,30 +175,39 @@ bool CheckIfModuleDataExistInCapabilities(
const smart_objects::SmartObject& rc_capabilities,
const smart_objects::SmartObject& module_data) {
LOG4CXX_AUTO_TRACE(logger_);
- bool is_radio_data_valid = true;
- bool is_climate_data_valid = true;
- if (module_data.keyExists(message_params::kRadioControlData)) {
- if (!rc_capabilities.keyExists(strings::kradioControlCapabilities)) {
- LOG4CXX_DEBUG(logger_, " Radio control capabilities not present");
- return false;
+ const std::map<std::string, std::string> params = {
+ {message_params::kRadioControlData, strings::kradioControlCapabilities},
+ {message_params::kClimateControlData,
+ strings::kclimateControlCapabilities},
+ {message_params::kSeatControlData, strings::kseatControlCapabilities}};
+ bool is_module_data_valid = false;
+ for (const auto& param : params) {
+ if (module_data.keyExists(param.first)) {
+ if (!rc_capabilities.keyExists(param.second)) {
+ LOG4CXX_DEBUG(logger_, param.first << " capabilities not present");
+ return false;
+ }
+ const smart_objects::SmartObject& caps = rc_capabilities[param.second];
+ is_module_data_valid =
+ CheckControlDataByCapabilities(caps, module_data[param.first]);
}
- const smart_objects::SmartObject& radio_caps =
- rc_capabilities[strings::kradioControlCapabilities];
- is_radio_data_valid = CheckControlDataByCapabilities(
- radio_caps, module_data[strings::kRadioControlData]);
}
- if (module_data.keyExists(message_params::kClimateControlData)) {
- if (!rc_capabilities.keyExists(strings::kclimateControlCapabilities)) {
- LOG4CXX_DEBUG(logger_, " Climate control capabilities not present");
- return false;
+ return is_module_data_valid;
+}
+
+bool isModuleTypeAndDataMatch(const std::string& module_type,
+ const smart_objects::SmartObject& module_data) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ std::map<std::string, std::string> data_mapping =
+ GetModuleTypeToDataMapping();
+ bool module_type_and_data_match = false;
+ for (const auto& data : data_mapping) {
+ if (data.first == module_type) {
+ module_type_and_data_match = module_data.keyExists(data.second);
+ break;
}
- const smart_objects::SmartObject& climate_caps =
- rc_capabilities[strings::kclimateControlCapabilities];
- is_climate_data_valid = CheckControlDataByCapabilities(
- climate_caps, module_data[strings::kClimateControlData]);
}
-
- return is_radio_data_valid && is_climate_data_valid;
+ return module_type_and_data_match;
}
void SetInteriorVehicleDataRequest::Execute() {
@@ -177,19 +216,8 @@ void SetInteriorVehicleDataRequest::Execute() {
smart_objects::SmartObject& module_data =
(*message_)[app_mngr::strings::msg_params][message_params::kModuleData];
const std::string module_type = ModuleType();
- bool module_type_and_data_match = true;
-
- if (enums_value::kRadio == module_type) {
- module_type_and_data_match =
- !(module_data.keyExists(message_params::kClimateControlData));
- }
- if (enums_value::kClimate == module_type) {
- module_type_and_data_match =
- !(module_data.keyExists(message_params::kRadioControlData));
- }
-
- if (module_type_and_data_match) {
+ if (isModuleTypeAndDataMatch(module_type, module_data)) {
const smart_objects::SmartObject* rc_capabilities =
hmi_capabilities_.rc_capability();
if (rc_capabilities &&
@@ -265,13 +293,16 @@ void SetInteriorVehicleDataRequest::on_event(
const smart_objects::SmartObject& SetInteriorVehicleDataRequest::ControlData(
const smart_objects::SmartObject& module_data) {
- const std::string module = ModuleType();
-
- if (enums_value::kRadio == module) {
- return module_data[message_params::kRadioControlData];
- } else {
- return module_data[message_params::kClimateControlData];
+ const std::string module_type = ModuleType();
+ std::map<std::string, std::string> data_mapping =
+ GetModuleTypeToDataMapping();
+ for (const auto& data : data_mapping) {
+ if (data.first == module_type) {
+ return module_data[data.second];
+ }
}
+ NOTREACHED();
+ return module_data[0];
}
bool SetInteriorVehicleDataRequest::AreAllParamsReadOnly(
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
index 4f968dd2d8..524e4db7fa 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
@@ -140,6 +140,14 @@ void RCCommandRequest::Run() {
SendResponse(false, mobile_apis::Result::DISALLOWED, "");
return;
}
+ if (!resource_allocation_manager_.is_rc_enabled()) {
+ LOG4CXX_WARN(logger_, "Remote control is disabled by user");
+ SetResourceState(ModuleType(), ResourceState::FREE);
+ SendResponse(false,
+ mobile_apis::Result::USER_DISALLOWED,
+ "Remote control is disabled by user");
+ return;
+ }
if (CheckDriverConsent()) {
if (AcquireResources()) {
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
index 36377c620b..4378f1ea48 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
@@ -91,6 +91,8 @@ void RCRPCPlugin::OnApplicationEvent(
switch (event) {
case plugins::kApplicationRegistered: {
application->AddExtension(new RCAppExtension(kRCPluginID));
+ resource_allocation_manager_->SendOnRCStatusNotifications(
+ NotificationTrigger::APP_REGISTRATION, application);
break;
}
case plugins::kApplicationExit: {
@@ -125,4 +127,4 @@ RCRPCPlugin::Apps RCRPCPlugin::GetRCApplications(
extern "C" application_manager::plugin_manager::RPCPlugin* Create() {
return new rc_rpc_plugin::RCRPCPlugin();
-}
+} // namespace rc_rpc_plugin
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/resource_allocation_manager_impl.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/resource_allocation_manager_impl.cc
index c2962863e3..450bf79fe7 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/resource_allocation_manager_impl.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/resource_allocation_manager_impl.cc
@@ -52,7 +52,8 @@ ResourceAllocationManagerImpl::ResourceAllocationManagerImpl(
application_manager::rpc_service::RPCService& rpc_service)
: current_access_mode_(hmi_apis::Common_RCAccessMode::AUTO_ALLOW)
, app_mngr_(app_mngr)
- , rpc_service_(rpc_service) {}
+ , rpc_service_(rpc_service)
+ , is_rc_enabled_(true) {}
ResourceAllocationManagerImpl::~ResourceAllocationManagerImpl() {}
@@ -174,6 +175,11 @@ void ResourceAllocationManagerImpl::ProcessApplicationPolicyUpdate() {
rc_extention->UnsubscribeFromInteriorVehicleData(*module);
}
}
+ if (!disallowed_modules.empty()) {
+ SendOnRCStatusNotifications(
+ NotificationTrigger::MODULE_ALLOCATION,
+ utils::SharedPtr<application_manager::Application>());
+ }
}
}
@@ -213,10 +219,131 @@ void ResourceAllocationManagerImpl::RemoveAppsSubscriptions(const Apps& apps) {
}
}
+template <typename EnumType>
+EnumType StringToEnum(const std::string& str) {
+ using smart_objects::EnumConversionHelper;
+ EnumType val;
+ EnumConversionHelper<EnumType>::StringToEnum(str, &val);
+ return val;
+}
+
+void ConstructOnRCStatusNotificationParams(
+ smart_objects::SmartObject& msg_params,
+ const std::map<std::string, uint32_t>& allocated_resources,
+ const std::vector<std::string>& supported_resources,
+ const uint32_t app_id) {
+ namespace strings = application_manager::strings;
+ namespace message_params = rc_rpc_plugin::message_params;
+ using smart_objects::SmartObject;
+ using smart_objects::SmartType_Map;
+ using smart_objects::SmartType_Array;
+ LOG4CXX_AUTO_TRACE(logger_);
+ auto modules_inserter = [](SmartObject& result_modules) {
+ return [&result_modules](const std::string& module_name) {
+ smart_objects::SmartObject module_data =
+ SmartObject(smart_objects::SmartType_Map);
+ auto module_type =
+ StringToEnum<mobile_apis::ModuleType::eType>(module_name);
+ module_data[message_params::kModuleType] = module_type;
+ result_modules.asArray()->push_back(module_data);
+ };
+ };
+ SmartObject allocated_modules = SmartObject(SmartType_Array);
+ for (const auto& module : allocated_resources) {
+ if (module.second == app_id) {
+ modules_inserter(allocated_modules)(module.first);
+ }
+ }
+ SmartObject free_modules = SmartObject(SmartType_Array);
+ for (auto& module : supported_resources) {
+ if (allocated_resources.find(module) == allocated_resources.end()) {
+ modules_inserter(free_modules)(module);
+ }
+ }
+
+ msg_params[message_params::kAllocatedModules] = allocated_modules;
+ msg_params[message_params::kFreeModules] = free_modules;
+}
+
+smart_objects::SmartObjectSPtr
+ResourceAllocationManagerImpl::CreateOnRCStatusNotificationToMobile(
+ const application_manager::ApplicationSharedPtr app) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ using application_manager::MessageHelper;
+ auto msg_to_mobile = MessageHelper::CreateNotification(
+ mobile_apis::FunctionID::OnRCStatusID, app->app_id());
+ auto& msg_params = (*msg_to_mobile)[application_manager::strings::msg_params];
+ if (is_rc_enabled()) {
+ ConstructOnRCStatusNotificationParams(msg_params,
+ allocated_resources_,
+ all_supported_modules(),
+ app->app_id());
+ } else {
+ msg_params[message_params::kAllocatedModules] =
+ smart_objects::SmartObject(smart_objects::SmartType_Array);
+ msg_params[message_params::kFreeModules] =
+ smart_objects::SmartObject(smart_objects::SmartType_Array);
+ }
+ return msg_to_mobile;
+}
+
+smart_objects::SmartObjectSPtr
+ResourceAllocationManagerImpl::CreateOnRCStatusNotificationToHmi(
+ const application_manager::ApplicationSharedPtr app) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ using application_manager::MessageHelper;
+ auto msg_to_hmi =
+ MessageHelper::CreateHMINotification(hmi_apis::FunctionID::RC_OnRCStatus);
+ auto& msg_params = (*msg_to_hmi)[application_manager::strings::msg_params];
+ ConstructOnRCStatusNotificationParams(
+ msg_params, allocated_resources_, all_supported_modules(), app->app_id());
+ msg_params[application_manager::strings::app_id] = app->hmi_app_id();
+ return msg_to_hmi;
+}
+
void ResourceAllocationManagerImpl::SetResourceAquired(
const std::string& module_type, const uint32_t app_id) {
LOG4CXX_AUTO_TRACE(logger_);
allocated_resources_[module_type] = app_id;
+ SendOnRCStatusNotifications(
+ NotificationTrigger::MODULE_ALLOCATION,
+ utils::SharedPtr<application_manager::Application>());
+}
+
+void ResourceAllocationManagerImpl::SendOnRCStatusNotifications(
+ NotificationTrigger::eType event,
+ application_manager::ApplicationSharedPtr application) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ smart_objects::SmartObjectSPtr msg_to_mobile;
+ smart_objects::SmartObjectSPtr msg_to_hmi;
+ if (NotificationTrigger::APP_REGISTRATION == event) {
+ DCHECK(application);
+ msg_to_mobile = CreateOnRCStatusNotificationToMobile(application);
+ (*msg_to_mobile)[application_manager::strings::msg_params]
+ [message_params::kAllowed] = is_rc_enabled();
+ rpc_service_.SendMessageToMobile(msg_to_mobile);
+ } else {
+ auto rc_apps = RCRPCPlugin::GetRCApplications(app_mngr_);
+ for (const auto& rc_app : rc_apps) {
+ msg_to_mobile = CreateOnRCStatusNotificationToMobile(rc_app);
+ (*msg_to_mobile)[application_manager::strings::msg_params]
+ [message_params::kAllowed] = is_rc_enabled();
+ rpc_service_.SendMessageToMobile(msg_to_mobile);
+ msg_to_hmi = CreateOnRCStatusNotificationToHmi(rc_app);
+ rpc_service_.SendMessageToHMI(msg_to_hmi);
+ }
+ }
+}
+
+bool ResourceAllocationManagerImpl::is_rc_enabled() const {
+ return is_rc_enabled_;
+}
+
+void ResourceAllocationManagerImpl::set_rc_enabled(const bool value) {
+ is_rc_enabled_ = value;
+ SendOnRCStatusNotifications(
+ NotificationTrigger::RC_STATE_CHANGING,
+ utils::SharedPtr<application_manager::Application>());
}
void ResourceAllocationManagerImpl::SetResourceFree(
@@ -237,6 +364,15 @@ void ResourceAllocationManagerImpl::SetResourceFree(
LOG4CXX_DEBUG(logger_, "Resource " << module_type << " is released.");
}
+std::vector<std::string>
+ResourceAllocationManagerImpl::all_supported_modules() {
+ std::vector<std::string> result;
+ result.push_back(enums_value::kClimate);
+ result.push_back(enums_value::kRadio);
+ result.push_back(enums_value::kSeat);
+ return result;
+}
+
std::vector<std::string> ResourceAllocationManagerImpl::GetAcquiredResources(
const uint32_t application_id) const {
LOG4CXX_AUTO_TRACE(logger_);
@@ -372,7 +508,11 @@ void ResourceAllocationManagerImpl::OnApplicationEvent(
for (; acquired_modules.end() != module; ++module) {
ReleaseResource(*module, application->app_id());
}
-
+ if (!acquired_modules.empty()) {
+ SendOnRCStatusNotifications(
+ NotificationTrigger::MODULE_ALLOCATION,
+ utils::SharedPtr<application_manager::Application>());
+ }
Apps app_list;
app_list.push_back(application);
RemoveAppsSubscriptions(app_list);
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/CMakeLists.txt b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/CMakeLists.txt
index a66ab107be..a1f0f5a6ff 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/CMakeLists.txt
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/CMakeLists.txt
@@ -53,6 +53,7 @@ file(GLOB SOURCES
set(LIBRARIES
RCRpcPluginStaticLib
ApplicationManager
+ connectionHandler
SmartObjects
ProtocolHandler
MessageHelper
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc
index 5098f6472e..7ab4819002 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/button_press_request_test.cc
@@ -130,6 +130,8 @@ class ButtonPressRequestTest
CheckHMIType(kPolicyAppId,
mobile_apis::AppHMIType::eType::REMOTE_CONTROL,
nullptr)).WillByDefault(Return(true));
+ ON_CALL(mock_allocation_manager_, is_rc_enabled())
+ .WillByDefault(Return(true));
}
MessageSharedPtr CreateBasicMessage() {
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
index 7074bfb9c5..685bc1fd42 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
@@ -100,6 +100,8 @@ class GetInteriorVehicleDataRequestTest
CheckHMIType(
_, mobile_apis::AppHMIType::eType::REMOTE_CONTROL, nullptr))
.WillByDefault(Return(true));
+ ON_CALL(mock_allocation_manager_, is_rc_enabled())
+ .WillByDefault(Return(true));
}
MessageSharedPtr CreateBasicMessage() {
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc
index 8fad1aef60..c5a8e54c6d 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/rc_get_interior_vehicle_data_consent_test.cc
@@ -141,6 +141,8 @@ class RCGetInteriorVehicleDataConsentTest
.WillByDefault(Return(rpc_plugin));
ON_CALL(mock_allocation_manager_, IsResourceFree(kResource))
.WillByDefault(Return(true));
+ ON_CALL(mock_allocation_manager_, is_rc_enabled())
+ .WillByDefault(Return(true));
}
template <class Command>
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc
index 68985e5f94..1d5e63e2df 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/set_interior_vehicle_data_request_test.cc
@@ -89,6 +89,8 @@ class SetInteriorVehicleDataRequestTest
CheckHMIType(kPolicyAppId,
mobile_apis::AppHMIType::eType::REMOTE_CONTROL,
nullptr)).WillByDefault(Return(true));
+ ON_CALL(mock_allocation_manager_, is_rc_enabled())
+ .WillByDefault(Return(true));
}
MessageSharedPtr CreateBasicMessage() {
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_resource_allocation_manager.h b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_resource_allocation_manager.h
index fb9326209c..d74e8fcb65 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_resource_allocation_manager.h
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/include/rc_rpc_plugin/mock/mock_resource_allocation_manager.h
@@ -65,6 +65,11 @@ class MockResourceAllocationManager
rc_rpc_plugin::RCAppExtensionPtr(
application_manager::ApplicationSharedPtr application));
MOCK_METHOD0(ResetAllAllocations, void());
+ MOCK_METHOD2(SendOnRCStatusNotifications,
+ void(rc_rpc_plugin::NotificationTrigger::eType,
+ application_manager::ApplicationSharedPtr application));
+ MOCK_CONST_METHOD0(is_rc_enabled, bool());
+ MOCK_METHOD1(set_rc_enabled, void(const bool value));
};
} // namespace rc_rpc_plugin_test
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc
index 26840a1b33..28142f0b4e 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/resource_allocation_manager_impl_test.cc
@@ -34,6 +34,7 @@
#include "rc_rpc_plugin/resource_allocation_manager_impl.h"
#include "rc_rpc_plugin/rc_rpc_plugin.h"
+#include "rc_rpc_plugin/rc_module_constants.h"
#include "application_manager/mock_application.h"
#include "application_manager/mock_application_manager.h"
#include "application_manager/mock_rpc_service.h"
@@ -69,8 +70,10 @@ const std::string kModuleType2 = "RADIO";
const int32_t kConnectionKey = 5;
const int32_t kCorrelationId = 5;
const uint32_t kAppId1 = 11u;
+const uint32_t kHMIAppId1 = 1u;
const uint32_t kAppId2 = 22u;
const std::string policy_app_id_1_ = "policy_id_1";
+const uint32_t kSizeOfModules = 3u;
}
namespace rc_rpc_plugin_test {
@@ -91,6 +94,8 @@ class RAManagerTest : public ::testing::Test {
auto plugin_id = rc_rpc_plugin::RCRPCPlugin::kRCPluginID;
app_ext_ptr_ = utils::MakeShared<rc_rpc_plugin::RCAppExtension>(plugin_id);
ON_CALL(*mock_app_1_, app_id()).WillByDefault(Return(kAppId1));
+
+ OnRCStatusNotificationExpectations();
}
void CheckResultWithHMILevelAndAccessMode(
@@ -99,6 +104,8 @@ class RAManagerTest : public ::testing::Test {
const rc_rpc_plugin::AcquireResult::eType expected_result,
const hmi_apis::Common_RCAccessMode::eType access_mode);
+ void OnRCStatusNotificationExpectations();
+
protected:
NiceMock<MockApplicationManager> mock_app_mngr_;
NiceMock<MockRPCService> mock_rpc_service_;
@@ -134,6 +141,15 @@ void RAManagerTest::CheckResultWithHMILevelAndAccessMode(
EXPECT_EQ(expected_result, ra_manager.AcquireResource(kModuleType1, kAppId2));
}
+void RAManagerTest::OnRCStatusNotificationExpectations() {
+ ON_CALL(mock_app_mngr_, application(kAppId1))
+ .WillByDefault(Return(mock_app_1_));
+ ON_CALL(*mock_app_1_, QueryInterface(rc_rpc_plugin::RCRPCPlugin::kRCPluginID))
+ .WillByDefault(Return(app_ext_ptr_));
+ apps_.insert(mock_app_1_);
+ ON_CALL(mock_app_mngr_, applications()).WillByDefault(Return(apps_da_));
+}
+
TEST_F(RAManagerTest, AcquireResource_NoAppRegistered_Expect_InUse) {
// Arrange
EXPECT_CALL(mock_app_mngr_, application(kAppId1))
@@ -147,8 +163,6 @@ TEST_F(RAManagerTest, AcquireResource_NoAppRegistered_Expect_InUse) {
TEST_F(RAManagerTest,
AcquireResource_AppRegisteredAnyHmiLevelResourceFree_Expect_Allowed) {
// Arrange
- EXPECT_CALL(mock_app_mngr_, application(kAppId1))
- .WillOnce(Return(mock_app_1_));
ResourceAllocationManagerImpl ra_manager(mock_app_mngr_, mock_rpc_service_);
// Act & Assert
EXPECT_EQ(rc_rpc_plugin::AcquireResult::ALLOWED,
@@ -258,13 +272,6 @@ TEST_F(RAManagerTest, AppExit_ReleaseResource) {
EXPECT_CALL(mock_app_mngr_, application(kAppId1))
.WillRepeatedly(Return(mock_app_1_));
- RCAppExtensionPtr rc_extention_ptr =
- utils::MakeShared<RCAppExtension>(application_manager::AppExtensionUID(
- rc_rpc_plugin::RCRPCPlugin::kRCPluginID));
-
- EXPECT_CALL(*mock_app_1_, QueryInterface(_))
- .WillOnce(Return(rc_extention_ptr));
-
EXPECT_EQ(rc_rpc_plugin::AcquireResult::ALLOWED,
ra_manager.AcquireResource(kModuleType1, kAppId1));
@@ -323,12 +330,6 @@ TEST_F(RAManagerTest, AppUnregistered_ReleaseResource) {
utils::MakeShared<RCAppExtension>(application_manager::AppExtensionUID(
rc_rpc_plugin::RCRPCPlugin::kRCPluginID));
- EXPECT_CALL(*mock_app_1_, QueryInterface(_))
- .WillOnce(Return(rc_extention_ptr));
-
- EXPECT_CALL(mock_app_mngr_, application(kAppId1))
- .WillRepeatedly(Return(mock_app_1_));
-
EXPECT_EQ(rc_rpc_plugin::AcquireResult::ALLOWED,
ra_manager.AcquireResource(kModuleType1, kAppId1));
@@ -505,4 +506,179 @@ TEST_F(RAManagerTest, GetAccessMode_ExpectedSameAsHadSet) {
ra_manager.GetAccessMode());
}
+TEST_F(RAManagerTest, OnRCStatus_AppRegistation_RC_allowed) {
+ // Arrange
+ ResourceAllocationManagerImpl ra_manager(mock_app_mngr_, mock_rpc_service_);
+ ON_CALL((*mock_app_1_), is_remote_control_supported())
+ .WillByDefault(Return(true));
+ ON_CALL((*mock_app_1_), hmi_app_id()).WillByDefault(Return(kHMIAppId1));
+
+ application_manager::commands::MessageSharedPtr message_to_mob;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToMobile(_, false))
+ .WillOnce(SaveArg<0>(&message_to_mob));
+ application_manager::commands::MessageSharedPtr message_to_hmi;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToHMI(_)).Times(0);
+
+ // Act
+ ra_manager.SendOnRCStatusNotifications(NotificationTrigger::APP_REGISTRATION,
+ mock_app_1_);
+
+ auto msg_to_mob_params =
+ (*message_to_mob)[application_manager::strings::msg_params];
+
+ // Assert
+ EXPECT_EQ(msg_to_mob_params[message_params::kAllowed].asBool(), true);
+ EXPECT_EQ(
+ msg_to_mob_params[message_params::kAllocatedModules].asArray()->size(),
+ 0u);
+ EXPECT_EQ(msg_to_mob_params[message_params::kFreeModules].asArray()->size(),
+ kSizeOfModules);
+}
+
+TEST_F(RAManagerTest, OnRCStatus_AppRegistation_RC_disallowed) {
+ // Arrange
+ ResourceAllocationManagerImpl ra_manager(mock_app_mngr_, mock_rpc_service_);
+ ra_manager.set_rc_enabled(false);
+
+ ON_CALL((*mock_app_1_), is_remote_control_supported())
+ .WillByDefault(Return(true));
+
+ application_manager::commands::MessageSharedPtr message_to_mob;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToMobile(_, false))
+ .WillOnce(SaveArg<0>(&message_to_mob));
+ EXPECT_CALL(mock_rpc_service_, SendMessageToHMI(_)).Times(0);
+
+ // Act
+ ra_manager.SendOnRCStatusNotifications(NotificationTrigger::APP_REGISTRATION,
+ mock_app_1_);
+
+ auto msg_to_mob_params =
+ (*message_to_mob)[application_manager::strings::msg_params];
+ // Assert
+ EXPECT_EQ(msg_to_mob_params[message_params::kAllowed].asBool(), false);
+ EXPECT_EQ(
+ msg_to_mob_params[message_params::kAllocatedModules].asArray()->size(),
+ 0u);
+ EXPECT_EQ(msg_to_mob_params[message_params::kFreeModules].asArray()->size(),
+ 0u);
+}
+
+TEST_F(RAManagerTest, OnRCStatus_RCStateChanging_RC_disabling) {
+ // Arrange
+ ResourceAllocationManagerImpl ra_manager(mock_app_mngr_, mock_rpc_service_);
+ ON_CALL((*mock_app_1_), is_remote_control_supported())
+ .WillByDefault(Return(true));
+ ON_CALL((*mock_app_1_), hmi_app_id()).WillByDefault(Return(kHMIAppId1));
+
+ application_manager::commands::MessageSharedPtr message_to_mob;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToMobile(_, false))
+ .WillOnce(SaveArg<0>(&message_to_mob));
+ application_manager::commands::MessageSharedPtr message_to_hmi;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToHMI(_))
+ .WillOnce(SaveArg<0>(&message_to_hmi));
+
+ // Act
+ ra_manager.set_rc_enabled(false);
+
+ auto msg_to_mob_params =
+ (*message_to_mob)[application_manager::strings::msg_params];
+ auto msg_to_hmi_params =
+ (*message_to_hmi)[application_manager::strings::msg_params];
+ // Assert
+ EXPECT_EQ(msg_to_mob_params[message_params::kAllowed].asBool(), false);
+ EXPECT_EQ(
+ msg_to_mob_params[message_params::kAllocatedModules].asArray()->size(),
+ 0u);
+ EXPECT_EQ(msg_to_mob_params[message_params::kFreeModules].asArray()->size(),
+ 0u);
+ EXPECT_EQ(
+ msg_to_hmi_params[message_params::kAllocatedModules].asArray()->size(),
+ 0u);
+ EXPECT_EQ(msg_to_hmi_params[message_params::kFreeModules].asArray()->size(),
+ kSizeOfModules);
+ EXPECT_EQ(msg_to_hmi_params[application_manager::strings::app_id].asInt(),
+ kHMIAppId1);
+}
+
+TEST_F(RAManagerTest, OnRCStatus_RCStateChanging_RC_enabling) {
+ // Arrange
+ ResourceAllocationManagerImpl ra_manager(mock_app_mngr_, mock_rpc_service_);
+ ON_CALL((*mock_app_1_), is_remote_control_supported())
+ .WillByDefault(Return(true));
+ ON_CALL((*mock_app_1_), hmi_app_id()).WillByDefault(Return(kHMIAppId1));
+
+ application_manager::commands::MessageSharedPtr message_to_mob;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToMobile(_, false))
+ .WillOnce(SaveArg<0>(&message_to_mob));
+ application_manager::commands::MessageSharedPtr message_to_hmi;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToHMI(_))
+ .WillOnce(SaveArg<0>(&message_to_hmi));
+
+ // Act
+ ra_manager.set_rc_enabled(true);
+
+ auto msg_to_mob_params =
+ (*message_to_mob)[application_manager::strings::msg_params];
+ auto msg_to_hmi_params =
+ (*message_to_hmi)[application_manager::strings::msg_params];
+ // Assert
+ EXPECT_EQ(msg_to_mob_params[message_params::kAllowed].asBool(), true);
+ EXPECT_EQ(
+ msg_to_mob_params[message_params::kAllocatedModules].asArray()->size(),
+ 0u);
+ EXPECT_EQ(msg_to_mob_params[message_params::kFreeModules].asArray()->size(),
+ kSizeOfModules);
+ EXPECT_EQ(
+ msg_to_hmi_params[message_params::kAllocatedModules].asArray()->size(),
+ 0u);
+ EXPECT_EQ(msg_to_hmi_params[message_params::kFreeModules].asArray()->size(),
+ kSizeOfModules);
+ EXPECT_EQ(msg_to_hmi_params[application_manager::strings::app_id].asInt(),
+ kHMIAppId1);
+}
+
+TEST_F(RAManagerTest, OnRCStatus_ModuleAllocation) {
+ // Arrange
+ ResourceAllocationManagerImpl ra_manager(mock_app_mngr_, mock_rpc_service_);
+
+ ON_CALL((*mock_app_1_), is_remote_control_supported())
+ .WillByDefault(Return(true));
+ ON_CALL((*mock_app_1_), hmi_app_id()).WillByDefault(Return(kHMIAppId1));
+
+ EXPECT_EQ(rc_rpc_plugin::AcquireResult::ALLOWED,
+ ra_manager.AcquireResource(kModuleType1, kAppId1));
+
+ application_manager::commands::MessageSharedPtr message_to_mob;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToMobile(_, false))
+ .WillOnce(SaveArg<0>(&message_to_mob));
+
+ application_manager::commands::MessageSharedPtr message_to_hmi;
+ EXPECT_CALL(mock_rpc_service_, SendMessageToHMI(_))
+ .WillOnce(SaveArg<0>(&message_to_hmi));
+
+ // Act
+ ra_manager.SendOnRCStatusNotifications(
+ NotificationTrigger::MODULE_ALLOCATION,
+ utils::SharedPtr<application_manager::Application>());
+
+ auto msg_to_mob_params =
+ (*message_to_mob)[application_manager::strings::msg_params];
+ auto msg_to_hmi_params =
+ (*message_to_hmi)[application_manager::strings::msg_params];
+ // Assert
+ EXPECT_EQ(msg_to_mob_params[message_params::kAllowed].asBool(), true);
+ EXPECT_EQ(
+ msg_to_mob_params[message_params::kAllocatedModules].asArray()->size(),
+ 1u);
+ EXPECT_EQ(msg_to_mob_params[message_params::kFreeModules].asArray()->size(),
+ kSizeOfModules - 1u);
+ EXPECT_EQ(
+ msg_to_hmi_params[message_params::kAllocatedModules].asArray()->size(),
+ 1u);
+ EXPECT_EQ(msg_to_hmi_params[message_params::kFreeModules].asArray()->size(),
+ kSizeOfModules - 1u);
+ EXPECT_EQ(msg_to_hmi_params[application_manager::strings::app_id].asInt(),
+ kHMIAppId1);
+}
+
} // namespace rc_rpc_plugin
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_request_template.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_request_template.h
deleted file mode 100644
index 0c3c63c32c..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_request_template.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_GET_VEHICLE_DATA_REQUEST_TEMPLATE_H_
-#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_GET_VEHICLE_DATA_REQUEST_TEMPLATE_H_
-
-#include "application_manager/event_engine/event.h"
-#include "application_manager/commands/request_to_hmi.h"
-
-namespace sdl_rpc_plugin {
-namespace app_mngr = application_manager;
-namespace commands {
-
-/**
- * @brief VIGetVehicleDataRequestTemplate command class
- *
- * Template class for sending 1 subscribe thin request
- **/
-template <event_engine::Event::EventID eventID>
-class VIGetVehicleDataRequestTemplate
- : public app_mngr::commands::RequestToHMI {
- public:
- /**
- * @brief VIGetVehicleDataRequestTemplate class constructor
- *
- * @param message Incoming SmartObject message
- **/
- VIGetVehicleDataRequestTemplate(
- const app_mngr::commands::MessageSharedPtr& message,
- app_mngr::ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle)
- : RequestToHMI(message,
- application_manager,
- rpc_service,
- hmi_capabilities,
- policy_handle) {}
-
- /**
- * @brief Execute command with sending DBus thin request to HMI
- **/
- virtual void Run() {
- LOG4CXX_AUTO_TRACE(logger_);
- SendRequest();
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(VIGetVehicleDataRequestTemplate<eventID>);
-};
-
-} // namespace commands
-} // namespace application_manager
-#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_GET_VEHICLE_DATA_REQUEST_TEMPLATE_H_
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_response_template.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_response_template.h
deleted file mode 100644
index e28c55ba12..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_response_template.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_GET_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
-#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_GET_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
-
-#include "application_manager/event_engine/event.h"
-#include "application_manager/commands/response_from_hmi.h"
-#include "application_manager/application_manager.h"
-
-namespace sdl_rpc_plugin {
-namespace app_mngr = application_manager;
-namespace commands {
-
-/**
- * @brief VIGetVehicleDataResponseTemplate command class
- **/
-template <event_engine::Event::EventID eventID>
-class VIGetVehicleDataResponseTemplate : public ResponseFromHMI {
- public:
- /**
- * @brief VIGetVehicleDataResponseTemplate class constructor
- *
- * @param message Incoming SmartObject message
- **/
- VIGetVehicleDataResponseTemplate(
- const app_mngr::commands::MessageSharedPtr& message,
- app_mngr::ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle)
- : ResponseFromHMI(message,
- application_manager,
- rpc_service,
- hmi_capabilities,
- policy_handle) {}
-
- /**
- * @brief Execute command
- **/
- virtual void Run() {
- LOG4CXX_AUTO_TRACE(logger_);
- event_engine::Event event(eventID);
- event.set_smart_object(*message_);
- event.raise(application_manager_.event_dispatcher());
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(VIGetVehicleDataResponseTemplate<eventID>);
-};
-
-} // namespace commands
-} // namespace application_manager
-#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_GET_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_request_template.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_request_template.h
deleted file mode 100644
index b74d013a82..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_request_template.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_SUBSCRIBE_VEHICLE_DATA_REQUEST_TEMPLATE_H_
-#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_SUBSCRIBE_VEHICLE_DATA_REQUEST_TEMPLATE_H_
-
-#include "application_manager/event_engine/event.h"
-#include "application_manager/commands/request_to_hmi.h"
-
-namespace sdl_rpc_plugin {
-namespace app_mngr = application_manager;
-namespace commands {
-
-/**
- * @brief VISubscriveVehicleDataRequestTemplate command class
- *
- * Template class for sending 1 subscribe thin request
- **/
-template <event_engine::Event::EventID eventID>
-class VISubscribeVehicleDataRequestTemplate
- : public app_mngr::commands::RequestToHMI {
- public:
- /**
- * @brief VISubscriveVehicleDataRequestTemplate class constructor
- *
- * @param message Incoming SmartObject message
- **/
- VISubscribeVehicleDataRequestTemplate(
- const app_mngr::commands::MessageSharedPtr& message,
- app_mngr::ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle)
- : RequestToHMI(message,
- application_manager,
- rpc_service,
- hmi_capabilities,
- policy_handle) {}
-
- /**
- * @brief Execute command with sending DBus thin request to HMI
- **/
- virtual void Run() {
- LOG4CXX_AUTO_TRACE(logger_);
- SendRequest();
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(VISubscribeVehicleDataRequestTemplate<eventID>);
-};
-
-} // namespace commands
-} // namespace application_manager
-#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_SUBSCRIBE_VEHICLE_DATA_REQUEST_TEMPLATE_H_
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_response_template.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_response_template.h
deleted file mode 100644
index 42dba56345..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_response_template.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_SUBSCRIBE_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
-#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_SUBSCRIBE_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
-
-#include "application_manager/event_engine/event.h"
-#include "application_manager/commands/response_from_hmi.h"
-#include "application_manager/application_manager.h"
-
-namespace sdl_rpc_plugin {
-namespace app_mngr = application_manager;
-namespace commands {
-/**
- * @brief VISubscriveVehicleDataResponseTemplate command class
- **/
-template <event_engine::Event::EventID eventID>
-class VISubscribeVehicleDataResponseTemplate : public ResponseFromHMI {
- public:
- /**
- * @brief VISubscriveVehicleDataResponseTemplate class constructor
- *
- * @param message Incoming SmartObject message
- **/
- VISubscribeVehicleDataResponseTemplate(
- const app_mngr::commands::MessageSharedPtr& message,
- app_mngr::ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle)
- : ResponseFromHMI(message,
- application_manager,
- rpc_service,
- hmi_capabilities,
- policy_handle) {}
-
- /**
- * @brief Execute command
- **/
- virtual void Run() {
- LOG4CXX_AUTO_TRACE(logger_);
- event_engine::Event event(eventID);
- event.set_smart_object(*message_);
- event.raise(application_manager_.event_dispatcher());
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(VISubscribeVehicleDataResponseTemplate<eventID>);
-};
-
-} // namespace commands
-} // namespace application_manager
-#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_SUBSCRIBE_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_request_template.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_request_template.h
deleted file mode 100644
index 2cb5d622b1..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_request_template.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_UNSUBSCRIBE_VEHICLE_DATA_REQUEST_TEMPLATE_H_
-#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_UNSUBSCRIBE_VEHICLE_DATA_REQUEST_TEMPLATE_H_
-
-#include "application_manager/event_engine/event.h"
-#include "application_manager/commands/request_to_hmi.h"
-
-namespace sdl_rpc_plugin {
-namespace app_mngr = application_manager;
-namespace commands {
-
-/**
- * @brief VIUnsubscriveVehicleDataRequestTemplate command class
- *
- * Template class for sending 1 unsubscribe thin request
- **/
-template <event_engine::Event::EventID eventID>
-class VIUnsubscribeVehicleDataRequestTemplate
- : public app_mngr::commands::RequestToHMI {
- public:
- /**
- * @brief VIUnsubscriveVehicleDataRequestTemplate class constructor
- *
- * @param message Incoming SmartObject message
- **/
- VIUnsubscribeVehicleDataRequestTemplate(
- const app_mngr::commands::MessageSharedPtr& message,
- app_mngr::ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle)
- : RequestToHMI(message,
- application_manager,
- rpc_service,
- hmi_capabilities,
- policy_handle) {}
-
- /**
- * @brief Execute command with sending DBus thin request to HMI
- **/
- virtual void Run() {
- LOG4CXX_AUTO_TRACE(logger_);
- SendRequest();
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(VIUnsubscribeVehicleDataRequestTemplate<eventID>);
-};
-
-} // namespace commands
-} // namespace application_manager
-#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_UNSUBSCRIBE_VEHICLE_DATA_REQUEST_TEMPLATE_H_
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_response_template.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_response_template.h
deleted file mode 100644
index 6138aa59fb..0000000000
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_response_template.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2018, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_UNSUBSCRIBE_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
-#define SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_UNSUBSCRIBE_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
-
-#include "application_manager/event_engine/event.h"
-#include "application_manager/commands/response_from_hmi.h"
-#include "application_manager/application_manager.h"
-
-namespace sdl_rpc_plugin {
-namespace app_mngr = application_manager;
-namespace commands {
-
-/**
- * @brief VIUnsubscriveVehicleDataResponseTemplate command class
- **/
-template <event_engine::Event::EventID eventID>
-class VIUnsubscribeVehicleDataResponseTemplate : public ResponseFromHMI {
- public:
- /**
- * @brief VISubscriveVehicleDataResponseTemplate class constructor
- *
- * @param message Incoming SmartObject message
- **/
- VIUnsubscribeVehicleDataResponseTemplate(
- const app_mngr::commands::MessageSharedPtr& message,
- app_mngr::ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handle)
- : ResponseFromHMI(message,
- application_manager,
- rpc_service,
- hmi_capabilities,
- policy_handle) {}
-
- /**
- * @brief Execute command
- **/
- virtual void Run() {
- LOG4CXX_AUTO_TRACE(logger_);
- event_engine::Event event(eventID);
- event.set_smart_object(*message_);
- event.raise(application_manager_.event_dispatcher());
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(VIUnsubscribeVehicleDataResponseTemplate<eventID>);
-};
-
-} // namespace commands
-} // namespace application_manager
-
-#endif // SRC_COMPONENTS_APPLICATION_MANAGER_RPC_PLUGINS_SDL_RPC_PLUGIN_INCLUDE_SDL_RPC_PLUGIN_COMMANDS_HMI_VI_UNSUBSCRIBE_VEHICLE_DATA_RESPONSE_TEMPLATE_H_
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc
index 3d2370d55b..a9698d36ab 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc
@@ -63,7 +63,10 @@ AudioStartStreamRequest::AudioStartStreamRequest(
<< "; retry_number_ = " << retry_number_);
}
-AudioStartStreamRequest::~AudioStartStreamRequest() {}
+AudioStartStreamRequest::~AudioStartStreamRequest() {
+ // see comment in NaviStartStreamRequest
+ unsubscribe_from_event(hmi_apis::FunctionID::Navigation_StartAudioStream);
+}
void AudioStartStreamRequest::Run() {
LOG4CXX_AUTO_TRACE(logger_);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc
index e44d89f93a..f3d971acba 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc
@@ -63,7 +63,11 @@ NaviStartStreamRequest::NaviStartStreamRequest(
<< "; retry_number_ = " << retry_number_);
}
-NaviStartStreamRequest::~NaviStartStreamRequest() {}
+NaviStartStreamRequest::~NaviStartStreamRequest() {
+ // unsubscribe_from_all_events() in EventObserver's destructor isn't enough;
+ // we must unsubscribe before this NaviStartStreamRequest instance is removed
+ unsubscribe_from_event(hmi_apis::FunctionID::Navigation_StartStream);
+}
void NaviStartStreamRequest::Run() {
LOG4CXX_AUTO_TRACE(logger_);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
index ea353c8d90..4706f9742f 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
@@ -411,6 +411,7 @@ void RegisterAppInterfaceRequest::Run() {
smart_objects::SmartObjectSPtr so =
GetLockScreenIconUrlNotification(connection_key(), application);
rpc_service_.ManageMobileCommand(so, SOURCE_SDL);
+ application_manager_.SendDriverDistractionState(application);
}
smart_objects::SmartObjectSPtr
@@ -938,31 +939,27 @@ void RegisterAppInterfaceRequest::SendOnAppRegisteredNotificationToHMI(
application[strings::request_subtype] = SmartObject(SmartType_Array);
}
- application[strings::device_info] = SmartObject(SmartType_Map);
- smart_objects::SmartObject& device_info = application[strings::device_info];
const protocol_handler::SessionObserver& session_observer =
application_manager_.connection_handler().get_session_observer();
- std::string device_name;
- std::string mac_address;
- std::string transport_type;
- const connection_handler::DeviceHandle handle = application_impl.device();
- if (-1 ==
- session_observer.GetDataOnDeviceID(
- handle, &device_name, NULL, &mac_address, &transport_type)) {
- LOG4CXX_ERROR(logger_,
- "Failed to extract information for device " << handle);
- }
- device_info[strings::name] = device_name;
- device_info[strings::id] = mac_address;
-
- const policy::DeviceConsent device_consent =
- GetPolicyHandler().GetUserConsentForDevice(mac_address);
- device_info[strings::isSDLAllowed] =
- policy::DeviceConsent::kDeviceAllowed == device_consent;
-
- device_info[strings::transport_type] =
- application_manager_.GetDeviceTransportType(transport_type);
+ application[strings::device_info] = SmartObject(SmartType_Map);
+ smart_objects::SmartObject& device_info = application[strings::device_info];
+ MessageHelper::CreateDeviceInfo(application_impl.device(),
+ session_observer,
+ GetPolicyHandler(),
+ application_manager_,
+ &device_info);
+
+ if (application_impl.secondary_device() != 0) {
+ application[strings::secondary_device_info] = SmartObject(SmartType_Map);
+ smart_objects::SmartObject& secondary_device_info =
+ application[strings::secondary_device_info];
+ MessageHelper::CreateDeviceInfo(application_impl.secondary_device(),
+ session_observer,
+ GetPolicyHandler(),
+ application_manager_,
+ &secondary_device_info);
+ }
const smart_objects::SmartObject* day_color_scheme =
application_impl.day_color_scheme();
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc
index bb621f814c..c510315ad8 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/hmi_command_factory.cc
@@ -158,36 +158,6 @@
#include "sdl_rpc_plugin/commands/hmi/decrypt_certificate_response.h"
#endif // EXTERNAL_PROPRIETARY_MODE
-#ifdef HMI_DBUS_API
-#include "sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_request_template.h"
-#include "sdl_rpc_plugin/commands/hmi/vi_get_vehicle_data_response_template.h"
-#include "sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_request_template.h"
-#include "sdl_rpc_plugin/commands/hmi/vi_subscribe_vehicle_data_response_template.h"
-#include "sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_request_template.h"
-#include "sdl_rpc_plugin/commands/hmi/vi_unsubscribe_vehicle_data_response_template.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_gps_data_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_speed_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_rpm_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_fuel_level_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_fuel_level_state_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_instant_fuel_consumption_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_external_temperature_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_vin_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_prndl_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_tire_pressure_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_odometer_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_belt_status_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_body_information_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_device_status_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_driver_braking_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_wiper_status_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_head_lamp_status_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_engine_torque_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_acc_pedal_position_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_steering_wheel_angle_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_my_key_notification.h"
-#endif // #ifdef HMI_DBUS_API
-
#include "sdl_rpc_plugin/commands/hmi/navi_is_ready_request.h"
#include "sdl_rpc_plugin/commands/hmi/navi_show_constant_tbt_request.h"
#include "sdl_rpc_plugin/commands/hmi/navi_show_constant_tbt_response.h"
@@ -603,228 +573,6 @@ CommandCreator& HMICommandFactory::get_creator_factory(
? factory.GetCreator<commands::UIIsReadyRequest>()
: factory.GetCreator<commands::UIIsReadyResponse>();
}
-#ifdef HMI_DBUS_API
- case hmi_apis::FunctionID::VehicleInfo_GetGpsData: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetGpsData> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetGpsData> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetSpeed: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetSpeed> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetSpeed> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetRpm: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehitcleInfo_GetRpm> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetRpm> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetFuelLevel: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevel> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevel> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetFuelLevelState: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevelState> >();
- : factory.GetCreator<
- commands::VIGetVehicleDataResponseTemplate<hmi_apis::
- FunctionID::VehicleInfo_GetFuelLevelState>> ()
- }
- case hmi_apis::FunctionID::VehicleInfo_GetInstantFuelConsumption: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetInstantFuelConsumption> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetInstantFuelConsumption> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetExternalTemperature: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetExternalTemperature> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetExternalTemperature> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetPrndl: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetPrndl> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetPrndl> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetVin: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetVin> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetVin> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetTirePressure: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetTirePressure> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetTirePressure> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetOdometer: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetOdometer> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetOdometer> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetBeltStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetBeltStatus> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetBeltStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetBodyInformation: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetBodyInformation> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetBodyInformation> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetDeviceStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetDeviceStatus> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetDeviceStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetDriverBraking: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetDriverBraking> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetDriverBraking> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetWiperStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetWiperStatus> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetWiperStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetHeadLampStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetHeadLampStatus> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetHeadLampStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetEngineTorque: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetEngineTorque> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetEngineTorque> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetAccPedalPosition: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetAccPedalPosition> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetAccPedalPosition> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetSteeringWheelAngle: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetSteeringWheelAngle> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetSteeringWheelAngle> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetECallInfo: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetECallInfo> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetECallInfo> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetAirbagStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetAirbagStatus> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetAirbagStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetEmergencyEvent: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetEmergencyEvent> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetEmergencyEvent> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetClusterModeStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetClusterModeStatus> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_GetClusterModeStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_GetMyKey: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::VIGetVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetMyKey> >()
- : factory
- .GetCreator<commands::VIGetVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_GetMyKey> >();
- }
-#endif // #ifdef HMI_DBUS_API
case hmi_apis::FunctionID::Navigation_IsReady: {
return hmi_apis::messageType::request == message_type
? factory.GetCreator<commands::NaviIsReadyRequest>()
@@ -954,610 +702,6 @@ CommandCreator& HMICommandFactory::get_creator_factory(
return factory
.GetCreator<commands::hmi::OnButtonSubscriptionNotification>();
}
-#ifdef HMI_DBUS_API
- case hmi_apis::FunctionID::VehicleInfo_SubscribeGps: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribeGps> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribeGps> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeSpeed: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribeSpeed> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeSpeed> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeRpm: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribeRpm> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribeRpm> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeFuelLevel> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeFuelLevel> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel_State: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeFuelLevel_State> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeFuelLevel_State> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeInstantFuelConsumption: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeInstantFuelConsumption> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeInstantFuelConsumption> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeExternalTemperature: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeExternalTemperature> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeExternalTemperature> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribePrndl: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribePrndl> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribePrndl> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeVin: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribeVin> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribeVin> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeTirePressure: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeTirePressure> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeTirePressure> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeOdometer: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeOdometer> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeOdometer> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeBeltStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeBeltStatus> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeBeltStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeBodyInformation: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeBodyInformation> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeBodyInformation> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeDeviceStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeDeviceStatus> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeDeviceStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeDriverBraking: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeDriverBraking> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeDriverBraking> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeWiperStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeWiperStatus> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeWiperStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeHeadLampStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeHeadLampStatus> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeHeadLampStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeEngineTorque: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeEngineTorque> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeEngineTorque> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeAccPedalPosition: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeAccPedalPosition> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeAccPedalPosition> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeSteeringWheelAngle: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeSteeringWheelAngle> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeSteeringWheelAngle> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeECallInfo: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeECallInfo> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeECallInfo> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeAirbagStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeAirbagStatus> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeAirbagStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeEmergencyEvent: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeEmergencyEvent> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeEmergencyEvent> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeClusterModeStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeClusterModeStatus> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeClusterModeStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_SubscribeMyKey: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VISubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_SubscribeMyKey> >()
- : factory.GetCreator<
- commands::VISubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_SubscribeMyKey> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeGps: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator <
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeGps>()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeGps> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeSpeed: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeSpeed> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeSpeed> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeRpm: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeRpm> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeRpm> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeFuelLevel: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeFuelLevel> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeFuelLevel> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeFuelLevel_State: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeFuelLevel_State> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeFuelLevel_State> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeInstantFuelConsumption: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeInstantFuelConsumption> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeInstantFuelConsumption> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeExternalTemperature: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeExternalTemperature> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeExternalTemperature> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribePrndl: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribePrndl> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribePrndl> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeVin: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeVin> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeVin> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeTirePressure: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeTirePressure> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeTirePressure> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeOdometer: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeOdometer> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeOdometer> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeBeltStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeBeltStatus> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeBeltStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeBodyInformation: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeBodyInformation> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeBodyInformation> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeDeviceStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeDeviceStatus> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeDeviceStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeDriverBraking: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeDriverBraking> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeDriverBraking> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeWiperStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeWiperStatus> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeWiperStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeHeadLampStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeHeadLampStatus> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeHeadLampStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeEngineTorque: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeEngineTorque> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeEngineTorque> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeAccPedalPosition: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeAccPedalPosition> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeAccPedalPosition> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeSteeringWheelAngle: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeSteeringWheelAngle> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeSteeringWheelAngle> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeECallInfo: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeECallInfo> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeECallInfo> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeAirbagStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeAirbagStatus> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeAirbagStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeEmergencyEvent: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeEmergencyEvent> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeEmergencyEvent> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeClusterModeStatus: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<
- commands::VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeClusterModeStatus> >()
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeClusterModeStatus> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_UnsubscribeMyKey: {
- return hmi_apis::messageType::request == message_type
- ? factory.GetCreator<commands::>(
- VIUnsubscribeVehicleDataRequestTemplate<
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeMyKey>)
- : factory.GetCreator<
- commands::VIUnsubscribeVehicleDataResponseTemplate<
- hmi_apis::FunctionID::
- VehicleInfo_UnsubscribeMyKey> >();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnGpsData: {
- return factory.GetCreator<commands::OnVIGpsDataNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnSpeed: {
- return factory.GetCreator<commands::OnVISpeedNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnRpm: {
- return factory.GetCreator<commands::OnVIRpmNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnFuelLevel: {
- return factory.GetCreator<commands::OnVifuelLevelNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnFuelLevelState: {
- return factory.GetCreator<commands::OnVifuelLevelStateNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnInstantFuelConsumption: {
- return factory
- .GetCreator<commands::OnVIInstantFuelConsumptionNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnExternalTemperature: {
- return factory
- .GetCreator<commands::OnVIExternalTemperatureNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnVin: {
- return factory.GetCreator<commands::OnVIVinNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnPrndl: {
- return factory.GetCreator<commands::OnVIPrndlNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnTirePressure: {
- return factory.GetCreator<commands::OnVITirePressureNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnOdometer: {
- return factory.GetCreator<commands::OnVIOdometerNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnBeltStatus: {
- return factory.GetCreator<commands::OnVIBeltStatusNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnBodyInformation: {
- return factory.GetCreator<commands::OnVIBodyInformationNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnDeviceStatus: {
- return factory.GetCreator<commands::OnVIDeviceStatusNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnDriverBraking: {
- return factory.GetCreator<commands::OnVIDriverBrakingNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnWiperStatus: {
- return factory.GetCreator<commands::OnVIWiperStatusNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnHeadLampStatus: {
- return factory.GetCreator<commands::OnVIHeadLampStatusNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnEngineTorque: {
- return factory.GetCreator<commands::OnVIEngineTorqueNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnAccPedalPosition: {
- return factory.GetCreator<commands::OnVIAccPedalPositionNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnSteeringWheelAngle: {
- return factory.GetCreator<commands::OnVISteeringWheelAngleNotification>();
- }
- case hmi_apis::FunctionID::VehicleInfo_OnMyKey: {
- return factory.GetCreator<commands::OnVIMyKeyNotification>();
- }
-#endif // #ifdef HMI_DBUS_API
case hmi_apis::FunctionID::Navigation_OnTBTClientState: {
return factory.GetCreator<commands::OnNaviTBTClientStateNotification>();
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/activate_app_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/activate_app_request_test.cc
index dcbd21dbe0..8cb5e97891 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/activate_app_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/activate_app_request_test.cc
@@ -105,8 +105,7 @@ TEST_F(ActivateAppRequestTest, Run_SUCCESS) {
EXPECT_CALL(mock_rpc_service_,
SendMessageToHMI(CheckMessage(mobile_apis::HMILevel::HMI_FULL)));
#else
- EXPECT_CALL(mock_rpc_service_,
- SendMessageToHMI(msg)));
+ EXPECT_CALL(mock_rpc_service_, SendMessageToHMI(msg));
#endif
command->Run();
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc
index 2374609774..b8b84f13c9 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/dummy_hmi_commands_test.cc
@@ -223,27 +223,6 @@
#include "hmi/on_tts_reset_timeout_notification.h"
#include "hmi/dial_number_request.h"
#include "hmi/dial_number_response.h"
-#include "hmi/on_vi_gps_data_notification.h"
-#include "hmi/on_vi_speed_notification.h"
-#include "hmi/on_vi_rpm_notification.h"
-#include "hmi/on_vi_fuel_level_notification.h"
-#include "hmi/on_vi_fuel_level_state_notification.h"
-#include "hmi/on_vi_instant_fuel_consumption_notification.h"
-#include "hmi/on_vi_external_temperature_notification.h"
-#include "hmi/on_vi_vin_notification.h"
-#include "hmi/on_vi_prndl_notification.h"
-#include "hmi/on_vi_tire_pressure_notification.h"
-#include "hmi/on_vi_odometer_notification.h"
-#include "hmi/on_vi_belt_status_notification.h"
-#include "hmi/on_vi_body_information_notification.h"
-#include "hmi/on_vi_device_status_notification.h"
-#include "hmi/on_vi_driver_braking_notification.h"
-#include "hmi/on_vi_wiper_status_notification.h"
-#include "hmi/on_vi_head_lamp_status_notification.h"
-#include "hmi/on_vi_engine_torque_notification.h"
-#include "hmi/on_vi_acc_pedal_position_notification.h"
-#include "hmi/on_vi_steering_wheel_angle_notification.h"
-#include "hmi/on_vi_my_key_notification.h"
#include "hmi/ui_set_icon_request.h"
#include "application_manager/commands/commands_test.h"
@@ -515,28 +494,7 @@ typedef Types<commands::hmi::OnButtonEventNotification,
commands::OnVRLanguageChangeNotification,
commands::OnTTSLanguageChangeNotification> HMICommandsListFourth;
-typedef Types<commands::OnVIGpsDataNotification,
- commands::OnVISpeedNotification,
- commands::OnVIRpmNotification,
- commands::OnVIFuelLevelNotification,
- commands::OnVIFuelLevelStateNotification,
- commands::OnVIInstantFuelConsumptionNotification,
- commands::OnVIExternalTemperatureNotification,
- commands::OnVIVinNotification,
- commands::OnVIPrndlNotification,
- commands::OnVITirePressureNotification,
- commands::OnVIOdometerNotification,
- commands::OnVIBeltStatusNotification,
- commands::OnVIBodyInformationNotification,
- commands::OnVIDeviceStatusNotification,
- commands::OnVIDriverBrakingNotification,
- commands::OnVIWiperStatusNotification,
- commands::OnVIHeadLampStatusNotification,
- commands::OnVIEngineTorqueNotification,
- commands::OnVIAccPedalPositionNotification,
- commands::OnVISteeringWheelAngleNotification,
- commands::OnVIMyKeyNotification,
- commands::AllowAllAppsRequest,
+typedef Types<commands::AllowAllAppsRequest,
commands::AllowAllAppsResponse,
commands::AllowAppRequest,
commands::AllowAppResponse> HMICommandsListFifth;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
index b498d07d99..245bb72860 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
@@ -42,27 +42,6 @@
#include "sdl_rpc_plugin/commands/hmi/on_ui_command_notification.h"
#include "sdl_rpc_plugin/commands/hmi/on_ui_keyboard_input_notification.h"
#include "sdl_rpc_plugin/commands/hmi/on_ui_touch_event_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_acc_pedal_position_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_belt_status_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_body_information_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_device_status_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_driver_braking_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_engine_torque_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_external_temperature_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_fuel_level_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_fuel_level_state_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_gps_data_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_head_lamp_status_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_instant_fuel_consumption_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_my_key_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_odometer_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_prndl_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_rpm_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_speed_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_steering_wheel_angle_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_tire_pressure_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_vin_notification.h"
-#include "sdl_rpc_plugin/commands/hmi/on_vi_wiper_status_notification.h"
#include "sdl_rpc_plugin/commands/hmi/on_app_permission_changed_notification.h"
#include "sdl_rpc_plugin/commands/hmi/on_app_registered_notification.h"
#include "sdl_rpc_plugin/commands/hmi/on_audio_data_streaming_notification.h"
@@ -312,12 +291,6 @@ void sig_handler(int sig) {
} // namespace
template <class Command>
-class HMIOnViNotifications : public commands_test::CommandsTest<kIsNice> {
- public:
- typedef Command CommandType;
-};
-
-template <class Command>
class HMIOnNotificationsListToHMI
: public commands_test::CommandsTest<kIsNice> {
public:
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
index 8b21ceff17..a44a4a452a 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
@@ -295,6 +295,7 @@ TEST_F(RegisterAppInterfaceRequestTest, Run_MinimalData_SUCCESS) {
EXPECT_CALL(mock_rpc_service_,
ManageMobileCommand(_, am::commands::Command::SOURCE_SDL))
.Times(2);
+ EXPECT_CALL(app_mngr_, SendDriverDistractionState(_));
command_->Run();
}
@@ -408,6 +409,7 @@ TEST_F(RegisterAppInterfaceRequestTest,
EXPECT_CALL(mock_rpc_service_,
ManageMobileCommand(_, am::commands::Command::SOURCE_SDL))
.Times(2);
+ EXPECT_CALL(app_mngr_, SendDriverDistractionState(_));
command_->Run();
}
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/get_vehicle_data_request.h b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/get_vehicle_data_request.h
index 17ae1ffd09..04a131da8f 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/get_vehicle_data_request.h
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/get_vehicle_data_request.h
@@ -73,22 +73,6 @@ class GetVehicleDataRequest : public app_mngr::commands::CommandRequestImpl {
protected:
virtual void on_event(const app_mngr::event_engine::Event& event);
-#ifdef HMI_DBUS_API
- private:
- void SendRequestsToHmi(const int32_t app_id);
-
- struct HmiRequest {
- hmi_apis::Common_Result::eType status;
- bool complete;
- smart_objects::SmartObject value;
- const char* str;
- hmi_apis::FunctionID::eType func_id;
- };
-
- typedef std::vector<HmiRequest> HmiRequests;
- HmiRequests hmi_requests_;
-#endif // #ifdef HMI_DBUS_API
-
DISALLOW_COPY_AND_ASSIGN(GetVehicleDataRequest);
};
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/subscribe_vehicle_data_request.h b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/subscribe_vehicle_data_request.h
index d324d5ca24..6e084e0869 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/subscribe_vehicle_data_request.h
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/subscribe_vehicle_data_request.h
@@ -87,20 +87,6 @@ class SubscribeVehicleDataRequest
*/
bool Init() FINAL;
-#ifdef HMI_DBUS_API
- private:
- struct HmiRequest {
- hmi_apis::Common_Result::eType status;
- bool complete;
- smart_objects::SmartObject value;
- const char* str;
- hmi_apis::FunctionID::eType func_id;
- };
-
- typedef std::vector<HmiRequest> HmiRequests;
- HmiRequests hmi_requests_;
-#endif // #ifdef HMI_DBUS_API
-
private:
/**
* @brief Checks, if any app is subscribed for particular VI parameter
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/unsubscribe_vehicle_data_request.h b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/unsubscribe_vehicle_data_request.h
index 5730048b85..e04d1fb97a 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/unsubscribe_vehicle_data_request.h
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/commands/mobile/unsubscribe_vehicle_data_request.h
@@ -84,20 +84,6 @@ class UnsubscribeVehicleDataRequest
*/
bool Init() FINAL;
-#ifdef HMI_DBUS_API
- private:
- struct HmiRequest {
- hmi_apis::Common_Result::eType status;
- bool complete;
- smart_objects::SmartObject value;
- const char* str;
- hmi_apis::FunctionID::eType func_id;
- };
-
- typedef std::vector<HmiRequest> HmiRequests;
- HmiRequests hmi_requests_;
-#endif // #ifdef HMI_DBUS_API
-
private:
/**
* @brief Checks, if any app is subscribed for particular VI parameter
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/get_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/get_vehicle_data_request.cc
index 7c7a5e61f7..87a9ace377 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/get_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/get_vehicle_data_request.cc
@@ -46,176 +46,6 @@ namespace commands {
namespace str = strings;
-#ifdef HMI_DBUS_API
-GetVehicleDataRequest::GetVehicleDataRequest(
- const application_manager::commands::MessageSharedPtr& message,
- ApplicationManager& application_manager,
- app_mngr::rpc_service::RPCService& rpc_service,
- app_mngr::HMICapabilities& hmi_capabilities,
- policy::PolicyHandlerInterface& policy_handler)
- : CommandRequestImpl(message, application_manager) {}
-
-GetVehicleDataRequest::~GetVehicleDataRequest() {}
-
-void GetVehicleDataRequest::Run() {
- LOG4CXX_AUTO_TRACE(logger_);
-
- int32_t app_id =
- (*message_)[strings::params][strings::connection_key].asUInt();
- ApplicationSharedPtr app = application_manager_.application(app_id);
-
- if (!app) {
- LOG4CXX_ERROR(logger_, "NULL pointer");
- SendResponse(false, mobile_apis::Result::APPLICATION_NOT_REGISTERED);
- return;
- }
-
- const VehicleData& vehicle_data = MessageHelper::vehicle_data();
- VehicleData::const_iterator it = vehicle_data.begin();
-
- for (; vehicle_data.end() != it; ++it) {
- if (true == (*message_)[str::msg_params].keyExists(it->first) &&
- true == (*message_)[str::msg_params][it->first].asBool()) {
- SendRequestsToHmi(app->app_id());
- return;
- }
- }
-
- SendResponse(false, mobile_apis::Result::INVALID_DATA);
-}
-
-namespace {
-struct Subrequest {
- hmi_apis::FunctionID::eType func_id;
- const char* str;
-};
-Subrequest subrequests[] = {
- {hmi_apis::FunctionID::VehicleInfo_GetGpsData, str::gps},
- {hmi_apis::FunctionID::VehicleInfo_GetSpeed, str::speed},
- {hmi_apis::FunctionID::VehicleInfo_GetRpm, str::rpm},
- {hmi_apis::FunctionID::VehicleInfo_GetFuelLevel, str::fuel_level},
- {hmi_apis::FunctionID::VehicleInfo_GetFuelLevelState,
- str::fuel_level_state},
- {hmi_apis::FunctionID::VehicleInfo_GetInstantFuelConsumption,
- str::instant_fuel_consumption},
- {hmi_apis::FunctionID::VehicleInfo_GetExternalTemperature,
- str::external_temp},
- {hmi_apis::FunctionID::VehicleInfo_GetVin, str::vin},
- {hmi_apis::FunctionID::VehicleInfo_GetPrndl, str::prndl},
- {hmi_apis::FunctionID::VehicleInfo_GetTirePressure, str::tire_pressure},
- {hmi_apis::FunctionID::VehicleInfo_GetOdometer, str::odometer},
- {hmi_apis::FunctionID::VehicleInfo_GetBeltStatus, str::belt_status},
- {hmi_apis::FunctionID::VehicleInfo_GetBodyInformation,
- str::body_information},
- {hmi_apis::FunctionID::VehicleInfo_GetDeviceStatus, str::device_status},
- {hmi_apis::FunctionID::VehicleInfo_GetDriverBraking, str::driver_braking},
- {hmi_apis::FunctionID::VehicleInfo_GetWiperStatus, str::wiper_status},
- {hmi_apis::FunctionID::VehicleInfo_GetHeadLampStatus,
- str::head_lamp_status},
- {hmi_apis::FunctionID::VehicleInfo_GetEngineTorque, str::engine_torque},
- {hmi_apis::FunctionID::VehicleInfo_GetAccPedalPosition, str::acc_pedal_pos},
- {hmi_apis::FunctionID::VehicleInfo_GetSteeringWheelAngle,
- str::steering_wheel_angle},
- {hmi_apis::FunctionID::VehicleInfo_GetECallInfo, str::e_call_info},
- {hmi_apis::FunctionID::VehicleInfo_GetAirbagStatus, str::airbag_status},
- {hmi_apis::FunctionID::VehicleInfo_GetEmergencyEvent, str::emergency_event},
- {hmi_apis::FunctionID::VehicleInfo_GetClusterModeStatus,
- str::cluster_mode_status},
- {hmi_apis::FunctionID::VehicleInfo_GetMyKey, str::my_key},
-};
-}
-
-void GetVehicleDataRequest::SendRequestsToHmi(const int32_t app_id) {
- smart_objects::SmartObject msg_params(smart_objects::SmartType_Map);
- msg_params[strings::app_id] = app_id;
-
- for (size_t i = 0; i < sizeof(subrequests) / sizeof(subrequests[0]); ++i) {
- const Subrequest& sr = subrequests[i];
- if (true == (*message_)[str::msg_params].keyExists(sr.str) &&
- true == (*message_)[str::msg_params][sr.str].asBool()) {
- HmiRequest hmi_request;
- hmi_request.str = sr.str;
- hmi_request.func_id = sr.func_id;
- hmi_request.complete = false;
- hmi_requests_.push_back(hmi_request);
- }
- }
-
- LOG4CXX_INFO(logger_,
- hmi_requests_.size() << " requests are going to be sent to HMI");
-
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- SendHMIRequest(it->func_id, &msg_params, true);
- }
-}
-
-void GetVehicleDataRequest::on_event(const event_engine::Event& event) {
- LOG4CXX_INFO(logger_, "GetVehicleDataRequest::on_event " << event.id());
-
- const smart_objects::SmartObject& message = event.smart_object();
-
- for (HmiRequests::iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- HmiRequest& hmi_request = *it;
- if (hmi_request.func_id == event.id()) {
- hmi_request.status = static_cast<hmi_apis::Common_Result::eType>(
- message[strings::params][hmi_response::code].asInt());
- if (hmi_apis::Common_Result::SUCCESS == hmi_request.status)
- hmi_request.value = message[str::msg_params][hmi_request.str];
- hmi_request.complete = true;
- break;
- }
- }
-
- bool all_complete = true;
- bool any_arg_success = false;
- mobile_api::Result::eType status = mobile_api::Result::eType::SUCCESS;
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- if (!it->complete) {
- all_complete = false;
- break;
- }
- if (hmi_apis::Common_Result::SUCCESS != it->status) {
- if (mobile_api::Result::SUCCESS == status) {
- status = static_cast<mobile_apis::Result::eType>(it->status);
- } else if (status !=
- static_cast<mobile_apis::Result::eType>(it->status)) {
- status = mobile_api::Result::eType::GENERIC_ERROR;
- }
- LOG4CXX_TRACE(logger_,
- "Status from HMI: " << it->status
- << ", so response status become "
- << status);
- } else {
- any_arg_success = true;
- }
- }
-
- if (all_complete) {
- smart_objects::SmartObject response_params(smart_objects::SmartType_Map);
- if (any_arg_success) {
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- response_params[it->str] = it->value;
- }
- }
- LOG4CXX_INFO(logger_, "All HMI requests are complete");
- const char* info = NULL;
- std::string error_message;
- if (true == message[strings::params].keyExists(strings::error_msg)) {
- error_message = message[strings::params][strings::error_msg].asString();
- info = error_message.c_str();
- }
- SendResponse(any_arg_success, status, info, &response_params);
- }
-}
-#else
GetVehicleDataRequest::GetVehicleDataRequest(
const application_manager::commands::MessageSharedPtr& message,
ApplicationManager& application_manager,
@@ -312,8 +142,6 @@ void GetVehicleDataRequest::on_event(const event_engine::Event& event) {
}
}
-#endif // #ifdef HMI_DBUS_API
-
} // namespace commands
} // namespace application_manager
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
index 27716855a2..41fd35b8b5 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
@@ -1,26 +1,19 @@
/*
-
Copyright (c) 2018, Ford Motor Company
All rights reserved.
-
Copyright (c) 2018, Livio, Inc.
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 Ford Motor Company 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
@@ -59,59 +52,6 @@ SubscribeVehicleDataRequest::SubscribeVehicleDataRequest(
SubscribeVehicleDataRequest::~SubscribeVehicleDataRequest() {}
-#ifdef HMI_DBUS_API
-namespace {
-struct Subrequest {
- hmi_apis::FunctionID::eType func_id;
- const char* str;
-};
-Subrequest subrequests[] = {
- {hmi_apis::FunctionID::VehicleInfo_SubscribeGps, strings::gps},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeSpeed, strings::speed},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeRpm, strings::rpm},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel, strings::fuel_level},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel_State,
- strings::fuel_level_state},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeInstantFuelConsumption,
- strings::instant_fuel_consumption},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeExternalTemperature,
- strings::external_temp},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeVin, strings::vin},
- {hmi_apis::FunctionID::VehicleInfo_SubscribePrndl, strings::prndl},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeTirePressure,
- strings::tire_pressure},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeOdometer, strings::odometer},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeBeltStatus,
- strings::belt_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeBodyInformation,
- strings::body_information},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeDeviceStatus,
- strings::device_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeDriverBraking,
- strings::driver_braking},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeWiperStatus,
- strings::wiper_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeHeadLampStatus,
- strings::head_lamp_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeEngineTorque,
- strings::engine_torque},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeAccPedalPosition,
- strings::acc_pedal_pos},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeSteeringWheelAngle,
- strings::steering_wheel_angle},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeECallInfo,
- strings::e_call_info},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeAirbagStatus,
- strings::airbag_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeEmergencyEvent,
- strings::emergency_event},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeClusterModeStatus,
- strings::cluster_mode_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeMyKey, strings::my_key},
-};
-}
-#endif // #ifdef HMI_DBUS_API
-
void SubscribeVehicleDataRequest::Run() {
LOG4CXX_AUTO_TRACE(logger_);
@@ -140,33 +80,10 @@ void SubscribeVehicleDataRequest::Run() {
return;
}
-#ifdef HMI_DBUS_API
- // Generate list of subrequests
- for (size_t i = 0; i < sizeof(subrequests) / sizeof(subrequests[0]); ++i) {
- const Subrequest& sr = subrequests[i];
- if (true == (*message_)[strings::msg_params].keyExists(sr.str) &&
- true == (*message_)[strings::msg_params][sr.str].asBool()) {
- HmiRequest hmi_request;
- hmi_request.str = sr.str;
- hmi_request.func_id = sr.func_id;
- hmi_request.complete = false;
- hmi_requests_.push_back(hmi_request);
- }
- }
- LOG4CXX_DEBUG(
- logger_, hmi_requests_.size() << " requests are going to be sent to HMI");
-
- // Send subrequests
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it)
- SendHMIRequest(it->func_id, &msg_params, true);
-#else
StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_VehicleInfo);
SendHMIRequest(hmi_apis::FunctionID::VehicleInfo_SubscribeVehicleData,
&msg_params,
true);
-#endif // #ifdef HMI_DBUS_API
}
void SubscribeVehicleDataRequest::on_event(const event_engine::Event& event) {
@@ -188,64 +105,6 @@ void SubscribeVehicleDataRequest::on_event(const event_engine::Event& event) {
return;
}
-#ifdef HMI_DBUS_API
- for (HmiRequests::iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- HmiRequest& hmi_request = *it;
- if (hmi_request.func_id == event.id()) {
- hmi_request.status = static_cast<hmi_apis::Common_Result::eType>(
- message[strings::params][hmi_response::code].asInt());
- if (hmi_apis::Common_Result::SUCCESS == hmi_request.status)
- hmi_request.value = message[strings::msg_params][hmi_request.str];
- hmi_request.complete = true;
- break;
- }
- }
- bool all_complete = true;
- bool any_arg_success = false;
- mobile_api::Result::eType status = mobile_api::Result::eType::SUCCESS;
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- if (!it->complete) {
- all_complete = false;
- break;
- }
- if (hmi_apis::Common_Result::SUCCESS != it->status) {
- if (mobile_api::Result::SUCCESS == status) {
- status = static_cast<mobile_apis::Result::eType>(it->status);
- } else if (status !=
- static_cast<mobile_apis::Result::eType>(it->status)) {
- status = mobile_api::Result::eType::GENERIC_ERROR;
- }
- LOG4CXX_TRACE(logger_,
- "Status from HMI: " << it->status
- << ", so response status become "
- << status);
- } else {
- any_arg_success = true;
- }
- }
-
- if (all_complete) {
- smart_objects::SmartObject response_params(smart_objects::SmartType_Map);
- if (any_arg_success) {
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- response_params[it->str] = it->value;
- }
- }
- LOG4CXX_DEBUG(logger_, "All HMI requests are complete");
- const bool result = any_arg_success;
- SendResponse(any_arg_success, status, NULL, &response_params);
- if (result) {
- app->UpdateHash();
- }
- }
-#else
-
hmi_apis::Common_Result::eType hmi_result =
static_cast<hmi_apis::Common_Result::eType>(
message[strings::params][hmi_response::code].asInt());
@@ -288,7 +147,6 @@ void SubscribeVehicleDataRequest::on_event(const event_engine::Event& event) {
result_code,
response_info.empty() ? NULL : response_info.c_str(),
&(message[strings::msg_params]));
-#endif // #ifdef HMI_DBUS_API
}
bool SubscribeVehicleDataRequest::Init() {
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
index de419894c5..d0152ea0c3 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/unsubscribe_vehicle_data_request.cc
@@ -60,60 +60,6 @@ UnsubscribeVehicleDataRequest::UnsubscribeVehicleDataRequest(
UnsubscribeVehicleDataRequest::~UnsubscribeVehicleDataRequest() {}
-#ifdef HMI_DBUS_API
-namespace {
-struct Subrequest {
- hmi_apis::FunctionID::eType func_id;
- const char* str;
-};
-Subrequest subrequests[] = {
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeGps, strings::gps},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeSpeed, strings::speed},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeRpm, strings::rpm},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeFuelLevel,
- strings::fuel_level},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeFuelLevel_State,
- strings::fuel_level_state},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeInstantFuelConsumption,
- strings::instant_fuel_consumption},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeExternalTemperature,
- strings::external_temp},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeVin, strings::vin},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribePrndl, strings::prndl},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeTirePressure,
- strings::tire_pressure},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeOdometer, strings::odometer},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeBeltStatus,
- strings::belt_status},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeBodyInformation,
- strings::body_information},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeDeviceStatus,
- strings::device_status},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeDriverBraking,
- strings::driver_braking},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeWiperStatus,
- strings::wiper_status},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeHeadLampStatus,
- strings::head_lamp_status},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeEngineTorque,
- strings::engine_torque},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeAccPedalPosition,
- strings::acc_pedal_pos},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeSteeringWheelAngle,
- strings::steering_wheel_angle},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeECallInfo,
- strings::e_call_info},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeAirbagStatus,
- strings::airbag_status},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeEmergencyEvent,
- strings::emergency_event},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeClusterModeStatus,
- strings::cluster_mode_status},
- {hmi_apis::FunctionID::VehicleInfo_UnsubscribeMyKey, strings::my_key},
-};
-}
-#endif // #ifdef HMI_DBUS_API
-
void UnsubscribeVehicleDataRequest::Run() {
LOG4CXX_AUTO_TRACE(logger_);
@@ -226,33 +172,10 @@ void UnsubscribeVehicleDataRequest::Run() {
return;
}
-#ifdef HMI_DBUS_API
- // Generate list of subrequests
- for (size_t i = 0; i < sizeof(subrequests) / sizeof(subrequests[0]); ++i) {
- const Subrequest& sr = subrequests[i];
- if (true == (*message_)[strings::msg_params].keyExists(sr.str) &&
- true == (*message_)[strings::msg_params][sr.str].asBool()) {
- HmiRequest hmi_request;
- hmi_request.str = sr.str;
- hmi_request.func_id = sr.func_id;
- hmi_request.complete = false;
- hmi_requests_.push_back(hmi_request);
- }
- }
- LOG4CXX_INFO(logger_,
- hmi_requests_.size() << " requests are going to be sent to HMI");
-
- // Send subrequests
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it)
- SendHMIRequest(it->func_id, &msg_params, true);
-#else
StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_VehicleInfo);
SendHMIRequest(hmi_apis::FunctionID::VehicleInfo_UnsubscribeVehicleData,
&msg_params,
true);
-#endif // #ifdef HMI_DBUS_API
}
void UnsubscribeVehicleDataRequest::on_event(const event_engine::Event& event) {
@@ -275,65 +198,6 @@ void UnsubscribeVehicleDataRequest::on_event(const event_engine::Event& event) {
return;
}
-#ifdef HMI_DBUS_API
- for (HmiRequests::iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- HmiRequest& hmi_request = *it;
- if (hmi_request.func_id == event.id()) {
- hmi_request.status = static_cast<hmi_apis::Common_Result::eType>(
- message[strings::params][hmi_response::code].asInt());
- if (hmi_apis::Common_Result::SUCCESS == hmi_request.status)
- hmi_request.value = message[strings::msg_params][hmi_request.str];
- hmi_request.complete = true;
- break;
- }
- }
- bool all_complete = true;
- bool any_arg_success = false;
- mobile_api::Result::eType status = mobile_api::Result::eType::SUCCESS;
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- if (!it->complete) {
- all_complete = false;
- break;
- }
- if (hmi_apis::Common_Result::SUCCESS != it->status) {
- if (mobile_api::Result::SUCCESS == status) {
- status = static_cast<mobile_apis::Result::eType>(it->status);
- } else if (status !=
- static_cast<mobile_apis::Result::eType>(it->status)) {
- status = mobile_api::Result::eType::GENERIC_ERROR;
- }
- LOG4CXX_TRACE(logger_,
- "Status from HMI: " << it->status
- << ", so response status become "
- << status);
- } else {
- any_arg_success = true;
- }
- }
- if (all_complete) {
- smart_objects::SmartObject response_params(smart_objects::SmartType_Map);
- if (any_arg_success) {
- for (HmiRequests::const_iterator it = hmi_requests_.begin();
- it != hmi_requests_.end();
- ++it) {
- response_params[it->str] = it->value;
- }
- }
-
- LOG4CXX_INFO(logger_, "All HMI requests are complete");
- if (true == any_arg_success) {
- SetAllowedToTerminate(false);
- }
- SendResponse(any_arg_success, status, NULL, &response_params);
- if (true == any_arg_success) {
- app->UpdateHash();
- }
- }
-#else
hmi_apis::Common_Result::eType hmi_result =
static_cast<hmi_apis::Common_Result::eType>(
message[strings::params][hmi_response::code].asInt());
@@ -369,7 +233,6 @@ void UnsubscribeVehicleDataRequest::on_event(const event_engine::Event& event) {
application_manager_.TerminateRequest(
connection_key(), correlation_id(), function_id());
}
-#endif // #ifdef HMI_DBUS_API
}
bool UnsubscribeVehicleDataRequest::Init() {
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/get_vehicle_data_request_test.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/get_vehicle_data_request_test.cc
index d8e4c3d075..4ad8a84189 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/get_vehicle_data_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/commands/mobile/get_vehicle_data_request_test.cc
@@ -92,10 +92,6 @@ class UnwrappedGetVehicleDataRequest : public GetVehicleDataRequest {
using GetVehicleDataRequest::on_event;
};
-#ifdef HMI_DBUS_API
-// HMI_DBUS_API currently not supported
-#else
-
TEST_F(GetVehicleDataRequestTest, Run_ApplicationIsNotRegistered_UNSUCCESS) {
GetVehicleDataRequestPtr command(CreateCommand<GetVehicleDataRequest>());
@@ -253,8 +249,6 @@ TEST_F(GetVehicleDataRequestTest, OnEvent_DataNotAvailable_SUCCESS) {
command->on_event(event);
}
-#endif // HMI_DBUS_API
-
} // namespace get_vehicle_data_request
} // namespace mobile_commands_test
} // namespace commands_test
diff --git a/src/components/application_manager/src/app_launch/app_launch_data_db.cc b/src/components/application_manager/src/app_launch/app_launch_data_db.cc
index f3adfc749b..64f9102d90 100644
--- a/src/components/application_manager/src/app_launch/app_launch_data_db.cc
+++ b/src/components/application_manager/src/app_launch/app_launch_data_db.cc
@@ -384,7 +384,7 @@ bool AppLaunchDataDB::WriteDb() {
utils::dbms::SQLDatabase* AppLaunchDataDB::db() const {
#ifdef __QNX__
- std::auto_ptr<utils::dbms::SQLDatabase> db_qnx(
+ std::unique_ptr<utils::dbms::SQLDatabase> db_qnx(
new utils::dbms::SQLDatabase(kDatabaseName));
db_qnx.get()->Open();
return db_qnx.get();
diff --git a/src/components/application_manager/src/app_launch/device_apps_launcher.cc b/src/components/application_manager/src/app_launch/device_apps_launcher.cc
index 0eb9245cf8..9c67c70e2c 100644
--- a/src/components/application_manager/src/app_launch/device_apps_launcher.cc
+++ b/src/components/application_manager/src/app_launch/device_apps_launcher.cc
@@ -61,7 +61,7 @@ class Launcher {
} else {
LOG4CXX_DEBUG(logger_,
"All Apps on " << apps_on_device_->first
- << " posponed launched");
+ << " postponed launched");
device_launcher_.StopLaunchingAppsOnDevice(apps_on_device_->first);
}
}
@@ -116,71 +116,59 @@ struct LauncherGenerator {
AppsLauncher& apps_launcher_;
};
-class DeviceAppsLauncherImpl {
- public:
- DeviceAppsLauncherImpl(DeviceAppsLauncher& interface,
- AppsLauncher& apps_launcher)
- : interface_(interface) {
- sync_primitives::AutoLock lock(launchers_lock_);
- LauncherGenerator generate(
- interface.app_mngr_.resume_controller(), interface, apps_launcher);
- free_launchers_.reserve(interface.settings_.max_number_of_ios_device());
- std::generate_n(std::back_inserter(free_launchers_),
- interface.settings_.max_number_of_ios_device(),
- generate);
- }
-
- bool LaunchAppsOnDevice(
- const std::string& device_mac,
- const std::vector<ApplicationDataPtr>& applications_to_launch) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_,
- "On Device " << device_mac << " will be launched "
- << applications_to_launch.size() << " apps");
- AppsOnDevicePtr apps_on_device =
- utils::MakeShared<AppsOnDevice>(device_mac, applications_to_launch);
- sync_primitives::AutoLock lock(launchers_lock_);
- DCHECK_OR_RETURN(!free_launchers_.empty(), false)
- const Launchers::iterator it = free_launchers_.begin();
- LauncherPtr launcher = *it;
- works_launchers_.push_back(launcher);
- free_launchers_.erase(it);
- launcher->Start(apps_on_device);
- return true;
- }
+// DeviceAppsLauncherImpl member function definitions
+DeviceAppsLauncherImpl::DeviceAppsLauncherImpl(DeviceAppsLauncher& interface,
+ AppsLauncher& apps_launcher)
+ : interface_(interface) {
+ sync_primitives::AutoLock lock(launchers_lock_);
+ LauncherGenerator generate(
+ interface.app_mngr_.resume_controller(), interface, apps_launcher);
+ free_launchers_.reserve(interface.settings_.max_number_of_ios_device());
+ std::generate_n(std::back_inserter(free_launchers_),
+ interface.settings_.max_number_of_ios_device(),
+ generate);
+}
- struct LauncherFinder {
- LauncherFinder(const std::string& device_mac) : device_mac_(device_mac) {}
+bool DeviceAppsLauncherImpl::LauncherFinder::operator()(
+ const utils::SharedPtr<Launcher>& launcher) const {
+ return device_mac_ == launcher->apps_on_device_->first;
+}
- bool operator()(const LauncherPtr& launcher) const {
- return device_mac_ == launcher->apps_on_device_->first;
- }
+bool DeviceAppsLauncherImpl::LaunchAppsOnDevice(
+ const std::string& device_mac,
+ const std::vector<ApplicationDataPtr>& applications_to_launch) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ LOG4CXX_DEBUG(logger_,
+ "On Device " << device_mac << " will be launched "
+ << applications_to_launch.size() << " apps");
+ AppsOnDevicePtr apps_on_device =
+ utils::MakeShared<AppsOnDevice>(device_mac, applications_to_launch);
+ sync_primitives::AutoLock lock(launchers_lock_);
+ DCHECK_OR_RETURN(!free_launchers_.empty(), false)
+ const Launchers::iterator it = free_launchers_.begin();
+ LauncherPtr launcher = *it;
+ works_launchers_.push_back(launcher);
+ free_launchers_.erase(it);
+ launcher->Start(apps_on_device);
+ return true;
+}
- std::string device_mac_;
- };
-
- bool StopLaunchingAppsOnDevice(const std::string& device_mac) {
- LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoLock lock(launchers_lock_);
- const Launchers::iterator it = std::find_if(works_launchers_.begin(),
- works_launchers_.end(),
- LauncherFinder(device_mac));
- if (it == works_launchers_.end()) {
- return false;
- }
- LauncherPtr launcher = *it;
- launcher->Clear();
- free_launchers_.push_back(launcher);
- works_launchers_.erase(it);
- return true;
+bool DeviceAppsLauncherImpl::StopLaunchingAppsOnDevice(
+ const std::string& device_mac) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(launchers_lock_);
+ const Launchers::iterator it = std::find_if(works_launchers_.begin(),
+ works_launchers_.end(),
+ LauncherFinder(device_mac));
+ if (it == works_launchers_.end()) {
+ return false;
}
-
- private:
- sync_primitives::Lock launchers_lock_;
- Launchers free_launchers_;
- Launchers works_launchers_;
- DeviceAppsLauncher& interface_;
-};
+ LauncherPtr launcher = *it;
+ launcher->Clear();
+ free_launchers_.push_back(launcher);
+ works_launchers_.erase(it);
+ return true;
+}
bool DeviceAppsLauncher::LaunchAppsOnDevice(
const std::string& device_mac,
diff --git a/src/components/application_manager/src/application_impl.cc b/src/components/application_manager/src/application_impl.cc
index 6efd737f0c..717fbeba1b 100644
--- a/src/components/application_manager/src/application_impl.cc
+++ b/src/components/application_manager/src/application_impl.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Ford Motor Company
+ * Copyright (c) 2018, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -124,12 +124,14 @@ ApplicationImpl::ApplicationImpl(
, list_files_in_none_count_(0)
, mac_address_(mac_address)
, device_id_(device_id)
+ , secondary_device_id_(0)
, usage_report_(mobile_app_id, statistics_manager)
, help_prompt_manager_impl_(*this, application_manager)
, protocol_version_(
protocol_handler::MajorProtocolVersion::PROTOCOL_VERSION_3)
, is_voice_communication_application_(false)
, is_resuming_(false)
+ , deferred_resumption_hmi_level_(mobile_api::HMILevel::eType::INVALID_ENUM)
, is_hash_changed_during_suspend_(false)
, video_stream_retry_number_(0)
, audio_stream_retry_number_(0)
@@ -390,6 +392,10 @@ connection_handler::DeviceHandle ApplicationImpl::device() const {
return device_id_;
}
+connection_handler::DeviceHandle ApplicationImpl::secondary_device() const {
+ return secondary_device_id_;
+}
+
const std::string& ApplicationImpl::mac_address() const {
return mac_address_;
}
@@ -503,6 +509,9 @@ void ApplicationImpl::StopStreamingForce(
using namespace protocol_handler;
LOG4CXX_AUTO_TRACE(logger_);
+ // see the comment in StopStreaming()
+ sync_primitives::AutoLock lock(streaming_stop_lock_);
+
SuspendStreaming(service_type);
if (service_type == ServiceType::kMobileNav) {
@@ -517,6 +526,12 @@ void ApplicationImpl::StopStreaming(
using namespace protocol_handler;
LOG4CXX_AUTO_TRACE(logger_);
+ // since WakeUpStreaming() is called from another thread, it is possible that
+ // the stream will be restarted after we call SuspendStreaming() and before
+ // we call StopXxxStreaming(). To avoid such timing issue, make sure that
+ // we run SuspendStreaming() and StopXxxStreaming() atomically.
+ sync_primitives::AutoLock lock(streaming_stop_lock_);
+
SuspendStreaming(service_type);
if (service_type == ServiceType::kMobileNav && video_streaming_approved()) {
@@ -567,6 +582,10 @@ void ApplicationImpl::WakeUpStreaming(
using namespace protocol_handler;
LOG4CXX_AUTO_TRACE(logger_);
+ // See the comment in StopStreaming(). Also, please make sure that we acquire
+ // streaming_stop_lock_ then xxx_streaming_suspended_lock_ in this order!
+ sync_primitives::AutoLock lock(streaming_stop_lock_);
+
if (ServiceType::kMobileNav == service_type) {
sync_primitives::AutoLock lock(video_streaming_suspended_lock_);
if (video_streaming_suspended_) {
@@ -650,6 +669,11 @@ void ApplicationImpl::set_device(connection_handler::DeviceHandle device) {
device_id_ = device;
}
+void ApplicationImpl::set_secondary_device(
+ connection_handler::DeviceHandle secondary_device) {
+ secondary_device_id_ = secondary_device;
+}
+
uint32_t ApplicationImpl::get_grammar_id() const {
return grammar_id_;
}
@@ -695,6 +719,16 @@ bool ApplicationImpl::is_resuming() const {
return is_resuming_;
}
+void ApplicationImpl::set_deferred_resumption_hmi_level(
+ mobile_api::HMILevel::eType level) {
+ deferred_resumption_hmi_level_ = level;
+}
+
+mobile_api::HMILevel::eType ApplicationImpl::deferred_resumption_hmi_level()
+ const {
+ return deferred_resumption_hmi_level_;
+}
+
bool ApplicationImpl::AddFile(const AppFile& file) {
if (app_files_.count(file.file_name) == 0) {
LOG4CXX_INFO(logger_,
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 35deddfc8d..571359007c 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -93,7 +93,13 @@ DeviceTypes devicesType = {
hmi_apis::Common_TransportType::BLUETOOTH),
std::make_pair(std::string("BLUETOOTH_IOS"),
hmi_apis::Common_TransportType::BLUETOOTH),
- std::make_pair(std::string("WIFI"), hmi_apis::Common_TransportType::WIFI)};
+ std::make_pair(std::string("WIFI"), hmi_apis::Common_TransportType::WIFI),
+ std::make_pair(std::string("USB_IOS_HOST_MODE"),
+ hmi_apis::Common_TransportType::USB_IOS),
+ std::make_pair(std::string("USB_IOS_DEVICE_MODE"),
+ hmi_apis::Common_TransportType::USB_IOS),
+ std::make_pair(std::string("CARPLAY_WIRELESS_IOS"),
+ hmi_apis::Common_TransportType::WIFI)};
}
/**
@@ -141,8 +147,7 @@ ApplicationManagerImpl::ApplicationManagerImpl(
, apps_to_register_list_lock_ptr_(std::make_shared<sync_primitives::Lock>())
, audio_pass_thru_active_(false)
, audio_pass_thru_app_id_(0)
- , driver_distraction_state_(
- hmi_apis::Common_DriverDistractionState::INVALID_ENUM)
+ , driver_distraction_state_(hmi_apis::Common_DriverDistractionState::DD_OFF)
, is_vr_session_strated_(false)
, hmi_cooperating_(false)
, is_all_apps_allowed_(true)
@@ -222,6 +227,8 @@ ApplicationManagerImpl::~ApplicationManagerImpl() {
navi_app_to_stop_.clear();
navi_app_to_end_stream_.clear();
+
+ secondary_transport_devices_cache_.clear();
}
DataAccessor<ApplicationSet> ApplicationManagerImpl::applications() const {
@@ -628,8 +635,6 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
application->set_app_icon_path(full_icon_path);
}
- PutDriverDistractionMessageToPostponed(application);
-
// Stops timer of saving data to resumption in order to
// doesn't erase data from resumption storage.
// Timer will be started after hmi level resumption.
@@ -644,6 +649,18 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
apps_size_ = applications_.size();
applications_list_lock_ptr_->Release();
+ // It is possible that secondary transport of this app has been already
+ // established. Make sure that the information is reflected to application
+ // instance.
+ // Also, make sure that this is done *after* we updated applications_ list to
+ // avoid timing issues.
+ DeviceMap::iterator itr =
+ secondary_transport_devices_cache_.find(connection_key);
+ if (secondary_transport_devices_cache_.end() != itr) {
+ connection_handler::DeviceHandle secondary_device_handle = itr->second;
+ application->set_secondary_device(secondary_device_handle);
+ }
+
return application;
}
@@ -1181,6 +1198,79 @@ mobile_apis::HMILevel::eType ApplicationManagerImpl::GetDefaultHmiLevel(
return default_hmi;
}
+bool ApplicationManagerImpl::CheckResumptionRequiredTransportAvailable(
+ ApplicationConstSharedPtr application) const {
+ using namespace mobile_apis;
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ const std::map<std::string, std::vector<std::string> >& transport_map =
+ get_settings().transport_required_for_resumption_map();
+
+ // retrieve transport type string used in .ini file
+ const std::string transport_type =
+ GetTransportTypeProfileString(application->device());
+ const std::string secondary_transport_type =
+ GetTransportTypeProfileString(application->secondary_device());
+
+ const smart_objects::SmartObject* app_types_array = application->app_types();
+ if (app_types_array == NULL || app_types_array->length() == 0) {
+ // This app does not have any AppHMIType. In this case, check "EMPTY_APP"
+ // entry
+ std::map<std::string, std::vector<std::string> >::const_iterator it =
+ transport_map.find(std::string("EMPTY_APP"));
+ if (it == transport_map.end()) {
+ // if "EMPTY_APP" is not specified, resumption is always enabled
+ return true;
+ }
+ const std::vector<std::string>& required_transport_list = it->second;
+
+ for (std::vector<std::string>::const_iterator itr =
+ required_transport_list.begin();
+ itr != required_transport_list.end();
+ ++itr) {
+ if (transport_type == *itr || secondary_transport_type == *itr) {
+ return true;
+ }
+ }
+ return false;
+ } else {
+ // check all AppHMITypes that the app has
+ for (size_t i = 0; i < app_types_array->length(); i++) {
+ const std::string app_type_string =
+ AppHMITypeToString(static_cast<mobile_apis::AppHMIType::eType>(
+ app_types_array->getElement(i).asUInt()));
+ bool transport_is_found = false;
+
+ std::map<std::string, std::vector<std::string> >::const_iterator it =
+ transport_map.find(app_type_string);
+ if (it == transport_map.end()) {
+ // this AppHMIType is not listed in .ini file, so resumption is always
+ // enabled
+ continue;
+ }
+
+ const std::vector<std::string>& required_transport_list = it->second;
+ for (std::vector<std::string>::const_iterator itr =
+ required_transport_list.begin();
+ itr != required_transport_list.end();
+ ++itr) {
+ if (transport_type == *itr || secondary_transport_type == *itr) {
+ transport_is_found = true;
+ break;
+ }
+ }
+
+ // if neither primary or secondary transport type is included in the list,
+ // then resumption will be disabled
+ if (!transport_is_found) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
+
uint32_t ApplicationManagerImpl::GenerateGrammarID() {
return rand();
}
@@ -1605,6 +1695,79 @@ void ApplicationManagerImpl::OnServiceEndedCallback(
}
}
+void ApplicationManagerImpl::OnSecondaryTransportStartedCallback(
+ const connection_handler::DeviceHandle device_handle,
+ const int32_t session_key) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (device_handle == 0) {
+ LOG4CXX_WARN(logger_,
+ "Invalid device handle passed for secondary transport of app "
+ << session_key);
+ return;
+ }
+
+ secondary_transport_devices_cache_[session_key] = device_handle;
+
+ {
+ sync_primitives::AutoLock auto_lock(applications_list_lock_ptr_);
+ ApplicationSharedPtr app = application(session_key);
+ if (!app) {
+ // It is possible that secondary transport is established prior to
+ // RegisterAppInterface request being processed. In this case, we will
+ // update the app's information during RegisterApplication().
+ LOG4CXX_DEBUG(logger_,
+ "Application with id: " << session_key << " is not found");
+ return;
+ }
+ app->set_secondary_device(device_handle);
+ }
+
+ // notify the event to HMI through BC.UpdateAppList request
+ SendUpdateAppList();
+
+ // if resumption has not been enabled, run it now
+ resume_controller().RetryResumption(session_key);
+}
+
+void ApplicationManagerImpl::OnSecondaryTransportEndedCallback(
+ const int32_t session_key) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ DeviceMap::iterator it = secondary_transport_devices_cache_.find(session_key);
+ if (it == secondary_transport_devices_cache_.end()) {
+ LOG4CXX_WARN(
+ logger_,
+ "Unknown session_key specified while removing secondary transport: "
+ << session_key);
+ } else {
+ secondary_transport_devices_cache_.erase(it);
+ }
+
+ {
+ sync_primitives::AutoLock auto_lock(applications_list_lock_ptr_);
+ ApplicationSharedPtr app = application(session_key);
+ if (!app) {
+ LOG4CXX_DEBUG(logger_,
+ "Application with id: " << session_key << " is not found");
+ return;
+ }
+
+ connection_handler::DeviceHandle device_handle = app->secondary_device();
+ if (device_handle == 0) {
+ LOG4CXX_WARN(logger_,
+ "Secondary transport of app " << session_key
+ << " is not found");
+ return;
+ }
+
+ app->set_secondary_device(0);
+ }
+
+ // notify the event to HMI through BC.UpdateAppList request
+ SendUpdateAppList();
+}
+
bool ApplicationManagerImpl::CheckAppIsNavi(const uint32_t app_id) const {
LOG4CXX_AUTO_TRACE(logger_);
ApplicationSharedPtr app = application(app_id);
@@ -2283,15 +2446,11 @@ void ApplicationManagerImpl::SendOnSDLClose() {
logger_,
"Attached schema to message, result if valid: " << msg->isValid());
-#ifdef HMI_DBUS_API
- message_to_send->set_smart_object(*msg);
-#else
if (!ConvertSOtoMessage(*msg, *message_to_send)) {
LOG4CXX_WARN(logger_,
"Cannot send message to HMI: failed to create string");
return;
}
-#endif // HMI_DBUS_API
if (!hmi_handler_) {
LOG4CXX_WARN(logger_, "No HMI Handler set");
@@ -3179,6 +3338,39 @@ mobile_apis::AppHMIType::eType ApplicationManagerImpl::StringToAppHMIType(
}
}
+const std::string ApplicationManagerImpl::AppHMITypeToString(
+ mobile_apis::AppHMIType::eType type) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+ switch (type) {
+ case mobile_apis::AppHMIType::DEFAULT:
+ return "DEFAULT";
+ case mobile_apis::AppHMIType::COMMUNICATION:
+ return "COMMUNICATION";
+ case mobile_apis::AppHMIType::MEDIA:
+ return "MEDIA";
+ case mobile_apis::AppHMIType::MESSAGING:
+ return "MESSAGING";
+ case mobile_apis::AppHMIType::NAVIGATION:
+ return "NAVIGATION";
+ case mobile_apis::AppHMIType::INFORMATION:
+ return "INFORMATION";
+ case mobile_apis::AppHMIType::SOCIAL:
+ return "SOCIAL";
+ case mobile_apis::AppHMIType::BACKGROUND_PROCESS:
+ return "BACKGROUND_PROCESS";
+ case mobile_apis::AppHMIType::TESTING:
+ return "TESTING";
+ case mobile_apis::AppHMIType::SYSTEM:
+ return "SYSTEM";
+ case mobile_apis::AppHMIType::PROJECTION:
+ return "PROJECTION";
+ case mobile_apis::AppHMIType::REMOTE_CONTROL:
+ return "REMOTE_CONTROL";
+ default:
+ return "INVALID_ENUM";
+ }
+}
+
bool ApplicationManagerImpl::CompareAppHMIType(
const smart_objects::SmartObject& from_policy,
const smart_objects::SmartObject& from_application) {
@@ -3316,8 +3508,8 @@ void ApplicationManagerImpl::OnPTUFinished(const bool ptu_result) {
plugin_manager_->ForEachPlugin(on_app_policy_updated);
}
-void ApplicationManagerImpl::PutDriverDistractionMessageToPostponed(
- ApplicationSharedPtr application) const {
+void ApplicationManagerImpl::SendDriverDistractionState(
+ ApplicationSharedPtr application) {
LOG4CXX_AUTO_TRACE(logger_);
if (hmi_apis::Common_DriverDistractionState::INVALID_ENUM ==
driver_distraction_state()) {
@@ -3335,7 +3527,20 @@ void ApplicationManagerImpl::PutDriverDistractionMessageToPostponed(
driver_distraction_state();
(*on_driver_distraction)[strings::params][strings::connection_key] =
application->app_id();
- application->PushMobileMessage(on_driver_distraction);
+
+ const std::string function_id = MessageHelper::StringifiedFunctionID(
+ static_cast<mobile_apis::FunctionID::eType>(
+ (*on_driver_distraction)[strings::params][strings::function_id]
+ .asUInt()));
+ const RPCParams params;
+ const mobile_apis::Result::eType check_result =
+ CheckPolicyPermissions(application, function_id, params);
+ if (mobile_api::Result::SUCCESS == check_result) {
+ rpc_service_->ManageMobileCommand(on_driver_distraction,
+ commands::Command::SOURCE_SDL);
+ } else {
+ application->PushMobileMessage(on_driver_distraction);
+ }
}
protocol_handler::MajorProtocolVersion
@@ -3478,6 +3683,16 @@ const std::set<int32_t> ApplicationManagerImpl::GetAppsSubscribedForWayPoints()
return subscribed_way_points_apps_list_;
}
+// retrieve transport type string used in .ini file, e.g. "TCP_WIFI"
+const std::string ApplicationManagerImpl::GetTransportTypeProfileString(
+ connection_handler::DeviceHandle device_handle) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ return connection_handler()
+ .get_session_observer()
+ .TransportTypeProfileStringFromDeviceHandle(device_handle);
+}
+
static hmi_apis::Common_VideoStreamingProtocol::eType ConvertVideoProtocol(
const char* str) {
if (strcmp(str, "RAW") == 0) {
diff --git a/src/components/application_manager/src/message_helper/message_helper.cc b/src/components/application_manager/src/message_helper/message_helper.cc
index ae8f5b74ab..81491b7bf9 100644
--- a/src/components/application_manager/src/message_helper/message_helper.cc
+++ b/src/components/application_manager/src/message_helper/message_helper.cc
@@ -191,6 +191,9 @@ std::pair<std::string,
mobile_apis::VehicleDataType::VEHICLEDATA_ODOMETER),
std::make_pair(strings::belt_status,
mobile_apis::VehicleDataType::VEHICLEDATA_BELTSTATUS),
+ std::make_pair(
+ strings::electronic_park_brake_status,
+ mobile_apis::VehicleDataType::VEHICLEDATA_ELECTRONICPARKBRAKESTATUS),
std::make_pair(strings::body_information,
mobile_apis::VehicleDataType::VEHICLEDATA_BODYINFO),
std::make_pair(strings::device_status,
@@ -229,58 +232,44 @@ const VehicleData MessageHelper::vehicle_data_(
kVehicleDataInitializer,
kVehicleDataInitializer + ARRAYSIZE(kVehicleDataInitializer));
-#ifdef HMI_DBUS_API
-namespace {
-struct VehicleInfo_Requests {
- hmi_apis::FunctionID::eType func_id;
- const char* str;
-};
-static VehicleInfo_Requests ivi_subrequests[] = {
- {hmi_apis::FunctionID::VehicleInfo_SubscribeGps, strings::gps},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeSpeed, strings::speed},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeRpm, strings::rpm},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel, strings::fuel_level},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel_State,
- strings::fuel_level_state},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeInstantFuelConsumption,
- strings::instant_fuel_consumption},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeExternalTemperature,
- strings::external_temp},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeVin, strings::vin},
- {hmi_apis::FunctionID::VehicleInfo_SubscribePrndl, strings::prndl},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeTirePressure,
- strings::tire_pressure},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeOdometer, strings::odometer},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeBeltStatus,
- strings::belt_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeBodyInformation,
- strings::body_information},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeDeviceStatus,
- strings::device_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeDriverBraking,
- strings::driver_braking},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeWiperStatus,
- strings::wiper_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeHeadLampStatus,
- strings::head_lamp_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeEngineTorque,
- strings::engine_torque},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeAccPedalPosition,
- strings::acc_pedal_pos},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeSteeringWheelAngle,
- strings::steering_wheel_angle},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeECallInfo,
- strings::e_call_info},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeAirbagStatus,
- strings::airbag_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeEmergencyEvent,
- strings::emergency_event},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeClusterModeStatus,
- strings::cluster_mode_status},
- {hmi_apis::FunctionID::VehicleInfo_SubscribeMyKey, strings::my_key},
-};
+smart_objects::SmartObjectSPtr MessageHelper::CreateNotification(
+ mobile_apis::FunctionID::eType function_id, uint32_t app_id) {
+ using smart_objects::SmartObject;
+ LOG4CXX_AUTO_TRACE(logger_);
+ smart_objects::SmartObjectSPtr object(
+ new SmartObject(smart_objects::SmartType_Map));
+ (*object)[strings::params][strings::message_type] =
+ static_cast<int>(kNotification);
+ (*object)[strings::params][strings::function_id] = function_id;
+ (*object)[strings::params][strings::connection_key] = app_id;
+ (*object)[strings::params][strings::protocol_version] =
+ commands::CommandImpl::protocol_version_;
+ (*object)[strings::params][strings::protocol_type] =
+ commands::CommandImpl::mobile_protocol_type_;
+ (*object)[strings::msg_params] =
+ smart_objects::SmartObject(smart_objects::SmartType_Map);
+ return object;
+}
+
+NsSmartDeviceLink::NsSmartObjects::SmartObjectSPtr
+MessageHelper::CreateHMINotification(hmi_apis::FunctionID::eType function_id) {
+ using smart_objects::SmartObject;
+ using smart_objects::SmartObjectSPtr;
+ using smart_objects::SmartType_Map;
+ LOG4CXX_AUTO_TRACE(logger_);
+ SmartObjectSPtr notification_ptr =
+ utils::MakeShared<SmartObject>(SmartType_Map);
+ SmartObject& notification = *notification_ptr;
+ notification[strings::params][strings::message_type] =
+ static_cast<int32_t>(kNotification);
+ notification[strings::params][strings::protocol_version] =
+ commands::CommandImpl::protocol_version_;
+ notification[strings::params][strings::protocol_type] =
+ commands::CommandImpl::hmi_protocol_type_;
+ notification[strings::params][strings::function_id] = function_id;
+
+ return notification_ptr;
}
-#endif // #ifdef HMI_DBUS_API
const uint32_t MessageHelper::GetPriorityCode(const std::string& priority) {
CommonAppPriorityMap::const_iterator it = app_priority_values.find(priority);
@@ -830,101 +819,11 @@ std::string MessageHelper::StringifiedFunctionID(
return std::string();
}
-#ifdef HMI_DBUS_API
-namespace {
-const std::map<std::string, uint16_t> create_get_vehicle_data_args() {
- std::map<std::string, uint16_t> rc;
- rc.insert(std::make_pair(strings::gps,
- hmi_apis::FunctionID::VehicleInfo_GetGpsData));
- rc.insert(std::make_pair(strings::speed,
- hmi_apis::FunctionID::VehicleInfo_GetSpeed));
- rc.insert(
- std::make_pair(strings::rpm, hmi_apis::FunctionID::VehicleInfo_GetRpm));
- rc.insert(std::make_pair(strings::fuel_level,
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevel));
- rc.insert(
- std::make_pair(strings::fuel_level_state,
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevelState));
- rc.insert(std::make_pair(
- strings::instant_fuel_consumption,
- hmi_apis::FunctionID::VehicleInfo_GetInstantFuelConsumption));
- rc.insert(
- std::make_pair(strings::external_temp,
- hmi_apis::FunctionID::VehicleInfo_GetExternalTemperature));
- rc.insert(
- std::make_pair(strings::vin, hmi_apis::FunctionID::VehicleInfo_GetVin));
- rc.insert(std::make_pair(strings::prndl,
- hmi_apis::FunctionID::VehicleInfo_GetPrndl));
- rc.insert(std::make_pair(strings::tire_pressure,
- hmi_apis::FunctionID::VehicleInfo_GetTirePressure));
- rc.insert(std::make_pair(strings::odometer,
- hmi_apis::FunctionID::VehicleInfo_GetOdometer));
- rc.insert(std::make_pair(strings::belt_status,
- hmi_apis::FunctionID::VehicleInfo_GetBeltStatus));
- rc.insert(
- std::make_pair(strings::body_information,
- hmi_apis::FunctionID::VehicleInfo_GetBodyInformation));
- rc.insert(std::make_pair(strings::device_status,
- hmi_apis::FunctionID::VehicleInfo_GetDeviceStatus));
- rc.insert(std::make_pair(strings::driver_braking,
- hmi_apis::FunctionID::VehicleInfo_GetDriverBraking));
- rc.insert(std::make_pair(strings::wiper_status,
- hmi_apis::FunctionID::VehicleInfo_GetWiperStatus));
- rc.insert(
- std::make_pair(strings::head_lamp_status,
- hmi_apis::FunctionID::VehicleInfo_GetHeadLampStatus));
- rc.insert(std::make_pair(strings::engine_torque,
- hmi_apis::FunctionID::VehicleInfo_GetEngineTorque));
- rc.insert(
- std::make_pair(strings::acc_pedal_pos,
- hmi_apis::FunctionID::VehicleInfo_GetAccPedalPosition));
- rc.insert(
- std::make_pair(strings::steering_wheel_angle,
- hmi_apis::FunctionID::VehicleInfo_GetSteeringWheelAngle));
- rc.insert(std::make_pair(strings::e_call_info,
- hmi_apis::FunctionID::VehicleInfo_GetECallInfo));
- rc.insert(std::make_pair(strings::airbag_status,
- hmi_apis::FunctionID::VehicleInfo_GetAirbagStatus));
- rc.insert(
- std::make_pair(strings::emergency_event,
- hmi_apis::FunctionID::VehicleInfo_GetEmergencyEvent));
- rc.insert(
- std::make_pair(strings::cluster_mode_status,
- hmi_apis::FunctionID::VehicleInfo_GetClusterModeStatus));
- rc.insert(std::make_pair(strings::my_key,
- hmi_apis::FunctionID::VehicleInfo_GetMyKey));
- return rc;
-}
-static std::map<std::string, uint16_t> vehicle_data_args =
- create_get_vehicle_data_args();
-}
-#endif
-
void MessageHelper::CreateGetVehicleDataRequest(
const uint32_t correlation_id,
const std::vector<std::string>& params,
ApplicationManager& app_mngr) {
LOG4CXX_AUTO_TRACE(logger_);
-#ifdef HMI_DBUS_API
- for (std::vector<std::string>::const_iterator it = params.begin();
- it != params.end();
- it++) {
- smart_objects::SmartObjectSPtr request =
- utils::MakeShared<smart_objects::SmartObject>();
-
- (*request)[strings::params][strings::message_type] =
- static_cast<int>(kRequest);
- (*request)[strings::params][strings::correlation_id] = correlation_id;
- (*request)[strings::params][strings::protocol_version] =
- commands::CommandImpl::protocol_version_;
- (*request)[strings::params][strings::protocol_type] =
- commands::CommandImpl::hmi_protocol_type_;
- (*request)[strings::params][strings::function_id] =
- static_cast<int>(vehicle_data_args[*it]);
- app_mngr.GetRPCService().ManageHMICommand(request);
- }
-#else
-
smart_objects::SmartObjectSPtr request =
utils::MakeShared<smart_objects::SmartObject>();
@@ -945,7 +844,6 @@ void MessageHelper::CreateGetVehicleDataRequest(
(*request)[strings::msg_params][*it] = true;
}
app_mngr.GetRPCService().ManageHMICommand(request);
-#endif
}
smart_objects::SmartObjectSPtr MessageHelper::CreateBlockedByPoliciesResponse(
@@ -1583,6 +1481,40 @@ smart_objects::SmartObjectSPtr MessageHelper::CreateAddVRCommandToHMI(
return vr_command;
}
+bool MessageHelper::CreateDeviceInfo(
+ connection_handler::DeviceHandle device_handle,
+ const protocol_handler::SessionObserver& session_observer,
+ const policy::PolicyHandlerInterface& policy_handler,
+ ApplicationManager& app_mngr,
+ smart_objects::SmartObject* output) {
+ DCHECK_OR_RETURN(output, false);
+
+ std::string device_name;
+ std::string mac_address;
+ std::string transport_type;
+ if (-1 ==
+ session_observer.GetDataOnDeviceID(
+ device_handle, &device_name, NULL, &mac_address, &transport_type)) {
+ LOG4CXX_ERROR(logger_,
+ "Failed to extract information for device " << device_handle);
+ }
+
+ smart_objects::SmartObject& device_info_map = *output;
+ device_info_map = smart_objects::SmartObject(smart_objects::SmartType_Map);
+
+ device_info_map[strings::name] = device_name;
+ device_info_map[strings::id] = mac_address;
+ device_info_map[strings::transport_type] =
+ app_mngr.GetDeviceTransportType(transport_type);
+
+ const policy::DeviceConsent device_consent =
+ policy_handler.GetUserConsentForDevice(mac_address);
+ device_info_map[strings::isSDLAllowed] =
+ policy::DeviceConsent::kDeviceAllowed == device_consent;
+
+ return true;
+}
+
bool MessageHelper::CreateHMIApplicationStruct(
ApplicationConstSharedPtr app,
const protocol_handler::SessionObserver& session_observer,
@@ -1604,15 +1536,6 @@ bool MessageHelper::CreateHMIApplicationStruct(
const smart_objects::SmartObject* day_color_scheme = app->day_color_scheme();
const smart_objects::SmartObject* night_color_scheme =
app->night_color_scheme();
- std::string device_name;
- std::string mac_address;
- std::string transport_type;
- if (-1 ==
- session_observer.GetDataOnDeviceID(
- app->device(), &device_name, NULL, &mac_address, &transport_type)) {
- LOG4CXX_ERROR(logger_,
- "Failed to extract information for device " << app->device());
- }
message = smart_objects::SmartObject(smart_objects::SmartType_Map);
message[strings::app_name] = app->name();
@@ -1651,15 +1574,22 @@ bool MessageHelper::CreateHMIApplicationStruct(
message[strings::device_info] =
smart_objects::SmartObject(smart_objects::SmartType_Map);
- message[strings::device_info][strings::name] = device_name;
- message[strings::device_info][strings::id] = mac_address;
- const policy::DeviceConsent device_consent =
- policy_handler.GetUserConsentForDevice(mac_address);
- message[strings::device_info][strings::isSDLAllowed] =
- policy::DeviceConsent::kDeviceAllowed == device_consent;
+ smart_objects::SmartObject& device_info = message[strings::device_info];
+ CreateDeviceInfo(
+ app->device(), session_observer, policy_handler, app_mngr, &device_info);
+
+ if (app->secondary_device() != 0) {
+ message[strings::secondary_device_info] =
+ smart_objects::SmartObject(smart_objects::SmartType_Map);
+ smart_objects::SmartObject& secondary_device_info =
+ message[strings::secondary_device_info];
+ CreateDeviceInfo(app->secondary_device(),
+ session_observer,
+ policy_handler,
+ app_mngr,
+ &secondary_device_info);
+ }
- message[strings::device_info][strings::transport_type] =
- app_mngr.GetDeviceTransportType(transport_type);
return true;
}
diff --git a/src/components/application_manager/src/mobile_message_handler.cc b/src/components/application_manager/src/mobile_message_handler.cc
index 2f06c5f3b5..1ee368a212 100644
--- a/src/components/application_manager/src/mobile_message_handler.cc
+++ b/src/components/application_manager/src/mobile_message_handler.cc
@@ -143,6 +143,7 @@ MobileMessageHandler::HandleIncomingMessageProtocolV1(
message->service_type()));
if (!message) {
NOTREACHED();
+ delete outgoing_message;
return NULL;
}
@@ -178,7 +179,7 @@ MobileMessageHandler::HandleIncomingMessageProtocolV2(
return NULL;
}
- std::auto_ptr<application_manager::Message> outgoing_message(
+ std::unique_ptr<application_manager::Message> outgoing_message(
new application_manager::Message(
protocol_handler::MessagePriority::FromServiceType(
message->service_type())));
diff --git a/src/components/application_manager/src/policies/policy_event_observer.cc b/src/components/application_manager/src/policies/policy_event_observer.cc
index 828f2d923a..f397814005 100644
--- a/src/components/application_manager/src/policies/policy_event_observer.cc
+++ b/src/components/application_manager/src/policies/policy_event_observer.cc
@@ -63,14 +63,6 @@ void PolicyEventObserver::on_event(const event_engine::Event& event) {
const smart_objects::SmartObject& message = event.smart_object();
switch (event.id()) {
-#ifdef HMI_DBUS_API
- case hmi_apis::FunctionID::VehicleInfo_GetOdometer: {
- ProcessOdometerEvent(message);
- break;
- }
- default: { break; }
- unsubscribe_from_event(hmi_apis::FunctionID::VehicleInfo_GetOdometer);
-#else
case hmi_apis::FunctionID::VehicleInfo_GetVehicleData: {
ProcessOdometerEvent(message);
unsubscribe_from_event(hmi_apis::FunctionID::VehicleInfo_GetVehicleData);
@@ -82,7 +74,6 @@ void PolicyEventObserver::on_event(const event_engine::Event& event) {
break;
}
default: { break; }
-#endif
}
}
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index 1cff7b7c96..88c01c7af7 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -1083,12 +1083,7 @@ bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
SetDaysAfterEpoch();
event_observer_->subscribe_on_event(
-#ifdef HMI_DBUS_API
- hmi_apis::FunctionID::VehicleInfo_GetOdometer, correlation_id
-#else
- hmi_apis::FunctionID::VehicleInfo_GetVehicleData, correlation_id
-#endif
- );
+ hmi_apis::FunctionID::VehicleInfo_GetVehicleData, correlation_id);
std::vector<std::string> vehicle_data_args;
vehicle_data_args.push_back(strings::odometer);
MessageHelper::CreateGetVehicleDataRequest(
diff --git a/src/components/application_manager/src/resumption/resume_ctrl_impl.cc b/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
index def618f965..be2bff5534 100644
--- a/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
+++ b/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
@@ -54,6 +54,12 @@
namespace resumption {
using namespace application_manager;
+static mobile_api::HMILevel::eType PickHigherHmiLevel(
+ mobile_api::HMILevel::eType val1, mobile_api::HMILevel::eType val2);
+static mobile_api::HMILevel::eType PickLowerHmiLevel(
+ mobile_api::HMILevel::eType val1, mobile_api::HMILevel::eType val2);
+static mobile_api::HMILevel::eType ConvertHmiLevelString(const std::string str);
+
CREATE_LOGGERPTR_GLOBAL(logger_, "Resumption")
ResumeCtrlImpl::ResumeCtrlImpl(ApplicationManager& application_manager)
@@ -76,6 +82,11 @@ void ResumeCtrlImpl::set_resumption_storage(
utils::SharedPtr<ResumptionData> mock_storage) {
resumption_storage_ = mock_storage;
}
+
+bool ResumeCtrlImpl::get_resumption_active() const {
+ sync_primitives::AutoLock auto_lock(queue_lock_);
+ return is_resumption_active_;
+}
#endif // BUILD_TESTS
bool ResumeCtrlImpl::Init(resumption::LastState& last_state) {
@@ -158,10 +169,38 @@ bool ResumeCtrlImpl::RestoreAppHMIState(ApplicationSharedPtr application) {
if (result) {
DCHECK_OR_RETURN(application, false);
if (saved_app.keyExists(strings::hmi_level)) {
- const HMILevel::eType saved_hmi_level =
- static_cast<mobile_apis::HMILevel::eType>(
- saved_app[strings::hmi_level].asInt());
- LOG4CXX_DEBUG(logger_, "Saved HMI Level is : " << saved_hmi_level);
+ HMILevel::eType saved_hmi_level;
+ if (HMILevel::eType::INVALID_ENUM !=
+ application->deferred_resumption_hmi_level()) {
+ saved_hmi_level = application->deferred_resumption_hmi_level();
+ LOG4CXX_INFO(logger_,
+ "Retry resuming into HMI level : " << saved_hmi_level);
+ application->set_deferred_resumption_hmi_level(
+ HMILevel::eType::INVALID_ENUM);
+ } else {
+ saved_hmi_level = static_cast<mobile_apis::HMILevel::eType>(
+ saved_app[strings::hmi_level].asInt());
+ LOG4CXX_DEBUG(logger_, "Saved HMI Level is : " << saved_hmi_level);
+ }
+
+ // Check one of the high-bandwidth transports (configured through
+ // smartDeviceLink.ini file) is available. If not, then the HMI level to
+ // resume into will be modified.
+ if (!application_manager_.CheckResumptionRequiredTransportAvailable(
+ application)) {
+ mobile_apis::HMILevel::eType low_bandwidth_level =
+ GetHmiLevelOnLowBandwidthTransport(application);
+
+ application->set_deferred_resumption_hmi_level(saved_hmi_level);
+
+ saved_hmi_level =
+ PickLowerHmiLevel(saved_hmi_level, low_bandwidth_level);
+ LOG4CXX_DEBUG(
+ logger_,
+ "High-bandwidth transport not available, app will resume into : "
+ << saved_hmi_level);
+ }
+
return SetAppHMIState(application, saved_hmi_level, true);
} else {
result = false;
@@ -176,9 +215,23 @@ bool ResumeCtrlImpl::RestoreAppHMIState(ApplicationSharedPtr application) {
bool ResumeCtrlImpl::SetupDefaultHMILevel(ApplicationSharedPtr application) {
LOG4CXX_AUTO_TRACE(logger_);
DCHECK_OR_RETURN(application, false);
- mobile_apis::HMILevel::eType default_hmi =
+ mobile_apis::HMILevel::eType hmi_level =
application_manager_.GetDefaultHmiLevel(application);
- return SetAppHMIState(application, default_hmi, false);
+
+ // Check one of the high-bandwidth transports (configured through
+ // smartDeviceLink.ini file) is available. If not, then the HMI level to
+ // resume into will be modified.
+ if (!application_manager_.CheckResumptionRequiredTransportAvailable(
+ application)) {
+ mobile_apis::HMILevel::eType low_bandwidth_level =
+ GetHmiLevelOnLowBandwidthTransport(application);
+ hmi_level = PickLowerHmiLevel(hmi_level, low_bandwidth_level);
+ LOG4CXX_DEBUG(
+ logger_,
+ "High-bandwidth transport not available, default HMI level is set to : "
+ << hmi_level);
+ }
+ return SetAppHMIState(application, hmi_level, false);
}
void ResumeCtrlImpl::ApplicationResumptiOnTimer() {
@@ -353,6 +406,28 @@ bool ResumeCtrlImpl::StartResumptionOnlyHMILevel(
return result;
}
+void ResumeCtrlImpl::RetryResumption(const uint32_t app_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ ApplicationSharedPtr app = application_manager_.application(app_id);
+ if (!app) {
+ LOG4CXX_WARN(logger_, "Invalid app_id = " << app_id);
+ return;
+ }
+
+ {
+ sync_primitives::AutoLock auto_lock(queue_lock_);
+ // check and update resumption deferred flag in queue_lock_
+ if (mobile_api::HMILevel::eType::INVALID_ENUM ==
+ app->deferred_resumption_hmi_level()) {
+ LOG4CXX_DEBUG(logger_, "No need to retry resumption for app: " << app_id);
+ return;
+ }
+ }
+
+ AddToResumptionTimerQueue(app_id);
+}
+
void ResumeCtrlImpl::StartAppHmiStateResumption(
ApplicationSharedPtr application) {
using namespace date_time;
@@ -375,6 +450,11 @@ void ResumeCtrlImpl::StartAppHmiStateResumption(
LOG4CXX_INFO(logger_,
"Resume application " << application->policy_app_id());
RestoreAppHMIState(application);
+ if (mobile_apis::HMILevel::eType::INVALID_ENUM !=
+ application->deferred_resumption_hmi_level()) {
+ // the application has not been fully resumed
+ return;
+ }
RemoveApplicationFromSaved(application);
} else {
LOG4CXX_INFO(logger_,
@@ -681,8 +761,14 @@ bool ResumeCtrlImpl::CheckAppRestrictions(
LOG4CXX_AUTO_TRACE(logger_);
DCHECK_OR_RETURN(saved_app.keyExists(strings::hmi_level), false);
- const HMILevel::eType hmi_level =
- static_cast<HMILevel::eType>(saved_app[strings::hmi_level].asInt());
+ HMILevel::eType hmi_level;
+ if (mobile_api::HMILevel::eType::INVALID_ENUM !=
+ application->deferred_resumption_hmi_level()) {
+ hmi_level = application->deferred_resumption_hmi_level();
+ } else {
+ hmi_level =
+ static_cast<HMILevel::eType>(saved_app[strings::hmi_level].asInt());
+ }
const bool result = Compare<HMILevel::eType, EQ, ONE>(
hmi_level, HMILevel::HMI_FULL, HMILevel::HMI_LIMITED)
? true
@@ -758,14 +844,19 @@ void ResumeCtrlImpl::ProcessHMIRequests(
void ResumeCtrlImpl::AddToResumptionTimerQueue(const uint32_t app_id) {
LOG4CXX_AUTO_TRACE(logger_);
+ bool run_resumption = false;
queue_lock_.Acquire();
waiting_for_timer_.push_back(app_id);
+
+ if (!is_resumption_active_) {
+ is_resumption_active_ = true;
+ run_resumption = true;
+ }
queue_lock_.Release();
LOG4CXX_DEBUG(logger_,
"Application ID " << app_id << " have been added"
" to resumption queue.");
- if (!is_resumption_active_) {
- is_resumption_active_ = true;
+ if (run_resumption) {
restore_hmi_level_timer_.Start(
application_manager_.get_settings().app_resuming_timeout(),
timer::kSingleShot);
@@ -830,4 +921,97 @@ bool ResumeCtrlImpl::IsAppDataResumptionExpired(
return max_ign_off_count <= application[strings::ign_off_count].asInt();
}
+mobile_apis::HMILevel::eType ResumeCtrlImpl::GetHmiLevelOnLowBandwidthTransport(
+ ApplicationConstSharedPtr application) const {
+ using namespace mobile_apis;
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ const ApplicationManagerSettings& settings =
+ application_manager_.get_settings();
+ const std::string& level_for_navi_app =
+ settings.navigation_lowbandwidth_resumption_level();
+ const std::string& level_for_projection_app =
+ settings.projection_lowbandwidth_resumption_level();
+ const std::string& level_for_media_app =
+ settings.media_lowbandwidth_resumption_level();
+
+ HMILevel::eType result_level = HMILevel::HMI_NONE;
+ HMILevel::eType level;
+
+ // NAVIGATION, PROJECTION and media apps have special exceptions. Their HMI
+ // level can be configured through .ini file. when the app has multiple
+ // AppHMIType, then the highest level will be applied.
+ if (application->is_navi()) {
+ level = ConvertHmiLevelString(level_for_navi_app);
+ LOG4CXX_DEBUG(logger_,
+ "NAVIGATION apps may have level "
+ << level
+ << " while high-bandwidth transport is not available.");
+ result_level = PickHigherHmiLevel(level, result_level);
+ }
+ if (application->mobile_projection_enabled()) {
+ level = ConvertHmiLevelString(level_for_projection_app);
+ LOG4CXX_DEBUG(logger_,
+ "PROJECTION apps may have level "
+ << level
+ << " while high-bandwidth transport is not available.");
+ result_level = PickHigherHmiLevel(level, result_level);
+ }
+ if (application->is_media_application()) {
+ level = ConvertHmiLevelString(level_for_media_app);
+ LOG4CXX_DEBUG(logger_,
+ "media apps may have level "
+ << level
+ << " while high-bandwidth transport is not available.");
+ result_level = PickHigherHmiLevel(level, result_level);
+ }
+
+ return result_level;
+}
+
+static mobile_api::HMILevel::eType PickHigherHmiLevel(
+ mobile_api::HMILevel::eType val1, mobile_api::HMILevel::eType val2) {
+ using namespace mobile_apis;
+
+ if (val1 == HMILevel::INVALID_ENUM) {
+ return val2;
+ } else if (val2 == HMILevel::INVALID_ENUM) {
+ return val1;
+ }
+
+ // smaller enum value has higher level
+ return val1 < val2 ? val1 : val2;
+}
+
+static mobile_api::HMILevel::eType PickLowerHmiLevel(
+ mobile_api::HMILevel::eType val1, mobile_api::HMILevel::eType val2) {
+ using namespace mobile_apis;
+
+ if (val1 == HMILevel::INVALID_ENUM) {
+ return val2;
+ } else if (val2 == HMILevel::INVALID_ENUM) {
+ return val1;
+ }
+
+ // bigger enum value has lower level
+ return val1 > val2 ? val1 : val2;
+}
+
+static mobile_api::HMILevel::eType ConvertHmiLevelString(
+ const std::string str) {
+ using namespace mobile_apis;
+
+ if ("BACKGROUND" == str) {
+ return HMILevel::HMI_BACKGROUND;
+ } else if ("FULL" == str) {
+ return HMILevel::HMI_FULL;
+ } else if ("LIMITED" == str) {
+ return HMILevel::HMI_LIMITED;
+ } else if ("NONE" == str) {
+ return HMILevel::HMI_NONE;
+ } else {
+ return HMILevel::HMI_NONE;
+ }
+}
+
} // namespce resumption
diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc
index 5cf5500709..42894a36a8 100644
--- a/src/components/application_manager/src/rpc_handler_impl.cc
+++ b/src/components/application_manager/src/rpc_handler_impl.cc
@@ -100,9 +100,6 @@ void RPCHandlerImpl::ProcessMessageFromHMI(
return;
}
-#ifdef HMI_DBUS_API
- *smart_object = message->smart_object();
-#else
if (!ConvertMessageToSO(*message, *smart_object)) {
if (application_manager::MessageType::kResponse ==
(*smart_object)[strings::params][strings::message_type].asInt()) {
@@ -116,7 +113,6 @@ void RPCHandlerImpl::ProcessMessageFromHMI(
return;
}
}
-#endif // HMI_DBUS_API
LOG4CXX_DEBUG(logger_, "Converted message, trying to create hmi command");
if (!app_manager_.GetRPCService().ManageHMICommand(smart_object)) {
diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc
index 7d930d1432..11a98fc970 100644
--- a/src/components/application_manager/src/rpc_service_impl.cc
+++ b/src/components/application_manager/src/rpc_service_impl.cc
@@ -498,15 +498,11 @@ void RPCServiceImpl::SendMessageToHMI(
logger_,
"Attached schema to message, result if valid: " << message->isValid());
-#ifdef HMI_DBUS_API
- message_to_send->set_smart_object(*message);
-#else
if (!ConvertSOtoMessage(*message, *message_to_send)) {
LOG4CXX_WARN(logger_,
"Cannot send message to HMI: failed to create string");
return;
}
-#endif // HMI_DBUS_API
messages_to_hmi_.PostMessage(impl::MessageToHmi(message_to_send));
}
diff --git a/src/components/application_manager/src/smart_object_keys.cc b/src/components/application_manager/src/smart_object_keys.cc
index 5514ad688a..96d2a925fd 100644
--- a/src/components/application_manager/src/smart_object_keys.cc
+++ b/src/components/application_manager/src/smart_object_keys.cc
@@ -182,6 +182,7 @@ const char* did_location = "didLocation";
const char* app_list = "appList";
const char* device_list = "deviceList";
const char* device_info = "deviceInfo";
+const char* secondary_device_info = "secondaryDeviceInfo";
const char* name = "name";
const char* id = "id";
const char* isSDLAllowed = "isSDLAllowed";
@@ -224,6 +225,7 @@ const char* prndl = "prndl";
const char* tire_pressure = "tirePressure";
const char* odometer = "odometer";
const char* belt_status = "beltStatus";
+const char* electronic_park_brake_status = "electronicParkBrakeStatus";
const char* body_information = "bodyInformation";
const char* device_status = "deviceStatus";
const char* driver_braking = "driverBraking";
diff --git a/src/components/application_manager/test/app_launch/app_launch_ctrl_test.cc b/src/components/application_manager/test/app_launch/app_launch_ctrl_test.cc
index 1b90f29647..2fda4a7031 100644
--- a/src/components/application_manager/test/app_launch/app_launch_ctrl_test.cc
+++ b/src/components/application_manager/test/app_launch/app_launch_ctrl_test.cc
@@ -164,7 +164,7 @@ class AppLaunchCtrlTest : public ::testing::Test {
NiceMock<ch_test::MockConnectionHandler> connection_handler_mock_;
NiceMock<resumprion_test::MockResumeCtrl> resume_ctrl_mock_;
NiceMock<app_launch_test::MockAppLaunchSettings> settings_;
- std::auto_ptr<app_launch::AppLaunchCtrlImpl> app_launch_ctrl_;
+ std::unique_ptr<app_launch::AppLaunchCtrlImpl> app_launch_ctrl_;
};
app_launch::ApplicationData AppDataFromApp(
diff --git a/src/components/application_manager/test/app_launch/app_launch_data_db_test.cc b/src/components/application_manager/test/app_launch/app_launch_data_db_test.cc
index e095f0682e..bfae920dbf 100644
--- a/src/components/application_manager/test/app_launch/app_launch_data_db_test.cc
+++ b/src/components/application_manager/test/app_launch/app_launch_data_db_test.cc
@@ -113,7 +113,7 @@ class AppLaunchDataDBTest : public ::testing::Test {
return test_db_;
}
- static std::auto_ptr<AppLaunchDataDB> res_db_;
+ static std::unique_ptr<AppLaunchDataDB> res_db_;
AppLaunchDataDB* res_db() {
return res_db_.get();
@@ -145,7 +145,7 @@ class AppLaunchDataDBTest : public ::testing::Test {
};
utils::dbms::SQLDatabase* AppLaunchDataDBTest::test_db_ = NULL;
-std::auto_ptr<AppLaunchDataDB> AppLaunchDataDBTest::res_db_;
+std::unique_ptr<AppLaunchDataDB> AppLaunchDataDBTest::res_db_;
void AppLaunchDataDBTest::AddApplicationDataWithIncreaseTable(
const ApplicationData& data) {
diff --git a/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc b/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc
index cc7d3f5814..04006954b5 100644
--- a/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc
+++ b/src/components/application_manager/test/app_launch/app_launch_data_json_test.cc
@@ -67,7 +67,7 @@ class AppLaunchDataJsonTest : public ::testing::Test {
private:
virtual void SetUp() {
::file_system::DeleteFile(kAppStorageFile);
- test_last_state_ = std::auto_ptr<resumption::LastState>(
+ test_last_state_ = std::unique_ptr<resumption::LastState>(
new resumption::LastStateImpl(kAppStorageFolder, kAppInfoStorage));
ASSERT_TRUE(::file_system::CreateFile(kAppStorageFile));
@@ -102,8 +102,8 @@ class AppLaunchDataJsonTest : public ::testing::Test {
void GetApplicationData_EXPECT_FALSE(const ApplicationData& in_data);
std::string AddCounter(const std::string& inp, int32_t val);
- std::auto_ptr<resumption::LastState> test_last_state_;
- std::auto_ptr<AppLaunchDataJson> res_json_;
+ std::unique_ptr<resumption::LastState> test_last_state_;
+ std::unique_ptr<AppLaunchDataJson> res_json_;
void SetTimestamp(const ApplicationData& in_data, TimevalStruct& timestamp);
};
diff --git a/src/components/application_manager/test/application_impl_test.cc b/src/components/application_manager/test/application_impl_test.cc
index be2986e719..3fe646d710 100644
--- a/src/components/application_manager/test/application_impl_test.cc
+++ b/src/components/application_manager/test/application_impl_test.cc
@@ -64,6 +64,7 @@ using namespace mobile_apis;
namespace custom_str = utils::custom_string;
using ::testing::_;
+using ::testing::Mock;
using ::testing::Return;
using ::testing::ReturnRef;
using ::testing::AtLeast;
@@ -106,6 +107,11 @@ class ApplicationImplTest : public ::testing::Test {
HmiStatePtr initial_state = CreateTestHmiState();
app_impl->SetInitialState(initial_state);
}
+
+ virtual void TearDown() OVERRIDE {
+ Mock::VerifyAndClearExpectations(MockMessageHelper::message_helper_mock());
+ }
+
HmiStatePtr CreateTestHmiState();
HmiStatePtr TestAddHmiState(HMILevel::eType hmi_lvl,
@@ -827,6 +833,29 @@ TEST_F(ApplicationImplTest, PushPopMobileMessage) {
EXPECT_TRUE(messages.empty());
}
+TEST_F(ApplicationImplTest, SetSecondaryDeviceTest) {
+ connection_handler::DeviceHandle initial_device =
+ app_impl->secondary_device();
+ EXPECT_EQ(0u, initial_device);
+
+ connection_handler::DeviceHandle device = 123;
+ app_impl->set_secondary_device(device);
+
+ EXPECT_EQ(device, app_impl->secondary_device());
+}
+
+TEST_F(ApplicationImplTest, SetDeferredResumptionHMILevelTest) {
+ using namespace mobile_api::HMILevel;
+ HMILevel::eType initial_deferred_level =
+ app_impl->deferred_resumption_hmi_level();
+ EXPECT_EQ(HMILevel::eType::INVALID_ENUM, initial_deferred_level);
+
+ HMILevel::eType deferred_level = HMILevel::eType::HMI_FULL;
+ app_impl->set_deferred_resumption_hmi_level(deferred_level);
+
+ EXPECT_EQ(deferred_level, app_impl->deferred_resumption_hmi_level());
+}
+
} // namespace application_manager_test
} // namespace components
} // namespace test
diff --git a/src/components/application_manager/test/application_manager_impl_test.cc b/src/components/application_manager/test/application_manager_impl_test.cc
index c13a47aae5..d2bba895c8 100644
--- a/src/components/application_manager/test/application_manager_impl_test.cc
+++ b/src/components/application_manager/test/application_manager_impl_test.cc
@@ -71,6 +71,7 @@ namespace policy_test = test::components::policy_handler_test;
namespace con_test = connection_handler_test;
using testing::_;
+using ::testing::An;
using ::testing::Matcher;
using ::testing::ByRef;
using ::testing::DoAll;
@@ -110,10 +111,10 @@ class ApplicationManagerImplTest : public ::testing::Test {
{
logger::create_log_message_loop_thread();
- Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ Mock::VerifyAndClearExpectations(mock_message_helper_);
}
~ApplicationManagerImplTest() {
- Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ Mock::VerifyAndClearExpectations(mock_message_helper_);
}
protected:
@@ -185,6 +186,14 @@ class ApplicationManagerImplTest : public ::testing::Test {
SetArgPointee<4u>(connection_type),
Return(0)));
}
+
+ bool CheckResumptionRequiredTransportAvailableTest(
+ smart_objects::SmartObject* app_types_array,
+ connection_handler::DeviceHandle primary_device_handle,
+ std::string primary_transport_device_string,
+ connection_handler::DeviceHandle secondary_device_handle,
+ std::string secondary_transport_device_string);
+
uint32_t app_id_;
NiceMock<policy_test::MockPolicySettings> mock_policy_settings_;
utils::SharedPtr<NiceMock<resumption_test::MockResumptionData> >
@@ -195,7 +204,7 @@ class ApplicationManagerImplTest : public ::testing::Test {
NiceMock<protocol_handler_test::MockSessionObserver> mock_session_observer_;
NiceMock<MockApplicationManagerSettings> mock_application_manager_settings_;
application_manager_test::MockApplicationManager mock_app_mngr_;
- std::auto_ptr<am::ApplicationManagerImpl> app_manager_impl_;
+ std::unique_ptr<am::ApplicationManagerImpl> app_manager_impl_;
application_manager::MockMessageHelper* mock_message_helper_;
utils::SharedPtr<MockApplication> mock_app_ptr_;
@@ -688,6 +697,86 @@ TEST_F(ApplicationManagerImplTest,
}
TEST_F(ApplicationManagerImplTest,
+ OnSecondaryTransportStartedCallback_BeforeAppRegistration) {
+ const connection_handler::DeviceHandle device_handle = 1;
+ const int32_t session_key = 123;
+
+ // make sure that BC.UpdateAppList is not invoked
+ EXPECT_CALL(*mock_message_helper_,
+ CreateModuleInfoSO(
+ hmi_apis::FunctionID::BasicCommunication_UpdateAppList, _))
+ .Times(0);
+
+ app_manager_impl_->OnSecondaryTransportStartedCallback(device_handle,
+ session_key);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ OnSecondaryTransportStartedCallback_AfterAppRegistration) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ AddMockApplication();
+ EXPECT_CALL(*mock_app_ptr_, app_id()).WillRepeatedly(Return(app_id_));
+
+ const connection_handler::DeviceHandle device_handle = 1;
+ const int32_t session_key = app_id_;
+
+ EXPECT_CALL(*mock_app_ptr_, set_secondary_device(device_handle)).Times(1);
+ // called by ResumeCtrlImpl::RetryResumption()
+ EXPECT_CALL(*mock_app_ptr_, deferred_resumption_hmi_level())
+ .WillOnce(Return(mobile_api::HMILevel::eType::INVALID_ENUM));
+
+ smart_objects::SmartObject dummy_object(SmartType_Map);
+ SmartObjectSPtr sptr = MakeShared<SmartObject>(dummy_object);
+
+ EXPECT_CALL(*mock_message_helper_,
+ CreateModuleInfoSO(
+ hmi_apis::FunctionID::BasicCommunication_UpdateAppList, _))
+ .WillOnce(Return(sptr));
+
+ app_manager_impl_->OnSecondaryTransportStartedCallback(device_handle,
+ session_key);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ OnSecondaryTransportEndedCallback_AfterAppRegistration) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ const connection_handler::DeviceHandle device_handle = 1;
+ const int32_t session_key = app_id_;
+
+ AddMockApplication();
+ EXPECT_CALL(*mock_app_ptr_, app_id()).WillRepeatedly(Return(app_id_));
+ EXPECT_CALL(*mock_app_ptr_, secondary_device())
+ .WillRepeatedly(Return(device_handle));
+
+ EXPECT_CALL(*mock_app_ptr_, set_secondary_device(0)).Times(1);
+
+ smart_objects::SmartObject dummy_object(SmartType_Map);
+ SmartObjectSPtr sptr = MakeShared<SmartObject>(dummy_object);
+
+ EXPECT_CALL(*mock_message_helper_,
+ CreateModuleInfoSO(
+ hmi_apis::FunctionID::BasicCommunication_UpdateAppList, _))
+ .WillOnce(Return(sptr));
+
+ app_manager_impl_->OnSecondaryTransportEndedCallback(session_key);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ OnSecondaryTransportEndedCallback_BeforeAppRegistration) {
+ const int32_t session_key = app_id_;
+
+ // make sure that BC.UpdateAppList is not invoked
+ EXPECT_CALL(*mock_message_helper_,
+ CreateModuleInfoSO(
+ hmi_apis::FunctionID::BasicCommunication_UpdateAppList, _))
+ .Times(0);
+
+ app_manager_impl_->OnSecondaryTransportEndedCallback(session_key);
+}
+
+TEST_F(ApplicationManagerImplTest,
OnDeviceSwitchingStart_ExpectPutAppsInWaitList) {
utils::SharedPtr<MockApplication> switching_app_ptr =
utils::MakeShared<MockApplication>();
@@ -963,6 +1052,324 @@ TEST_F(ApplicationManagerImplTest, UnregisterAnotherAppDuringAudioPassThru) {
}
}
+static std::map<std::string, std::vector<std::string> > CreateTransportMap() {
+ /*
+ * DefaultTransportRequiredForResumption = TCP_WIFI, IAP_USB, SPP_BLUETOOTH
+ * MediaTransportRequiredForResumption = TCP_WIFI, AOA_USB
+ * NavigationTransportRequiredForResumption = AOA_USB, SPP_BLUETOOTH
+ * TestingTransportRequiredForResumption =
+ * EmptyAppTransportRequiredForResumption = TCP_WIFI
+ */
+ std::string TCP_WIFI("TCP_WIFI");
+ std::string IAP_USB("IAP_USB");
+ std::string SPP_BLUETOOTH("SPP_BLUETOOTH");
+ std::string AOA_USB("AOA_USB");
+
+ std::vector<std::string> default_transports;
+ default_transports.push_back(TCP_WIFI);
+ default_transports.push_back(IAP_USB);
+ default_transports.push_back(SPP_BLUETOOTH);
+ std::vector<std::string> media_transports;
+ media_transports.push_back(TCP_WIFI);
+ media_transports.push_back(AOA_USB);
+ std::vector<std::string> navi_transports;
+ navi_transports.push_back(AOA_USB);
+ navi_transports.push_back(SPP_BLUETOOTH);
+ std::vector<std::string> testing_transports;
+ std::vector<std::string> empty_transports;
+ empty_transports.push_back(TCP_WIFI);
+
+ std::map<std::string, std::vector<std::string> > transport_map;
+ transport_map[std::string("DEFAULT")] = default_transports;
+ transport_map[std::string("MEDIA")] = media_transports;
+ transport_map[std::string("NAVIGATION")] = navi_transports;
+ transport_map[std::string("TESTING")] = testing_transports;
+ transport_map[std::string("EMPTY_APP")] = empty_transports;
+
+ return transport_map;
+}
+
+bool ApplicationManagerImplTest::CheckResumptionRequiredTransportAvailableTest(
+ smart_objects::SmartObject* app_types_array,
+ connection_handler::DeviceHandle primary_device_handle,
+ std::string primary_transport_device_string,
+ connection_handler::DeviceHandle secondary_device_handle,
+ std::string secondary_transport_device_string) {
+ EXPECT_CALL(*mock_app_ptr_, app_types())
+ .WillRepeatedly(Return(app_types_array));
+
+ std::map<std::string, std::vector<std::string> > transport_map =
+ CreateTransportMap();
+
+ EXPECT_CALL(mock_application_manager_settings_,
+ transport_required_for_resumption_map())
+ .WillRepeatedly(ReturnRef(transport_map));
+
+ EXPECT_CALL(*mock_app_ptr_, device())
+ .WillRepeatedly(Return(primary_device_handle));
+ EXPECT_CALL(*mock_app_ptr_, secondary_device())
+ .WillRepeatedly(Return(secondary_device_handle));
+
+ EXPECT_CALL(mock_session_observer_,
+ TransportTypeProfileStringFromDeviceHandle(primary_device_handle))
+ .WillOnce(Return(primary_transport_device_string));
+
+ if (secondary_device_handle != 0) {
+ EXPECT_CALL(
+ mock_session_observer_,
+ TransportTypeProfileStringFromDeviceHandle(secondary_device_handle))
+ .WillOnce(Return(secondary_transport_device_string));
+ } else {
+ EXPECT_CALL(mock_session_observer_,
+ TransportTypeProfileStringFromDeviceHandle(
+ secondary_device_handle)).WillOnce(Return(std::string("")));
+ }
+
+ return app_manager_impl_->CheckResumptionRequiredTransportAvailable(
+ mock_app_ptr_);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_Success) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ smart_objects::SmartObject app_types_array(SmartType_Array);
+ app_types_array[0] = mobile_apis::AppHMIType::eType::DEFAULT;
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 0;
+
+ // refer to transport_adapter_impl.cc
+ std::string primary_transport_device_string("SPP_BLUETOOTH");
+ std::string secondary_transport_device_string("");
+
+ // - The app is DEFAULT.
+ // - A DEFAULT app is allowed for resumption if either primary or secondary
+ // transport is TCP_WIFI, IAP_USB or SPP_BLUETOOTH.
+ // - We have SPP_BLUETOOTH for primary transport.
+ // -> Conclusion: the app has required transport.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ &app_types_array,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_TRUE(result);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_NotListed) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ smart_objects::SmartObject app_types_array(SmartType_Array);
+ app_types_array[0] = mobile_apis::AppHMIType::eType::SOCIAL;
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 0;
+
+ std::string primary_transport_device_string("SPP_BLUETOOTH");
+ std::string secondary_transport_device_string("");
+
+ // - The app is SOCIAL.
+ // - We do not have an entry in .ini file for SOCIAL apps.
+ // -> In this case, resumption is always enabled for backward compatibility.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ &app_types_array,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_TRUE(result);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_Disabled) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ smart_objects::SmartObject app_types_array(SmartType_Array);
+ app_types_array[0] = mobile_apis::AppHMIType::eType::TESTING;
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 0;
+
+ std::string primary_transport_device_string("SPP_BLUETOOTH");
+ std::string secondary_transport_device_string("");
+
+ // - The app is TESTING.
+ // - We do not have any transports allowed for TESTING apps.
+ // -> In this case, resumption is always disabled.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ &app_types_array,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_FALSE(result);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_NoAppTypes) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ smart_objects::SmartObject app_types_array(SmartType_Array);
+ // we don't specify any app type
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 0;
+
+ std::string primary_transport_device_string("SPP_BLUETOOTH");
+ std::string secondary_transport_device_string("");
+
+ // - The app doesn't specify AppHMIType.
+ // - .ini file specifies TCP_WIFI for EMPTY_APP entry.
+ // -> The app does not have required transport.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ &app_types_array,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_FALSE(result);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_PrimaryOnly_NoAppTypes2) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 0;
+
+ std::string primary_transport_device_string("SPP_BLUETOOTH");
+ std::string secondary_transport_device_string("");
+
+ // - The app doesn't specify AppHMIType.
+ // - .ini file specifies TCP_WIFI for EMPTY_APP entry.
+ // -> The app does not have required transport.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ NULL,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_FALSE(result);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_TwoTransports_Success) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ smart_objects::SmartObject app_types_array(SmartType_Array);
+ app_types_array[0] = mobile_apis::AppHMIType::eType::MEDIA;
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 2;
+
+ // refer to transport_adapter_impl.cc
+ std::string primary_transport_device_string("SPP_BLUETOOTH");
+ std::string secondary_transport_device_string("TCP_WIFI");
+
+ // - The app is MEDIA.
+ // - A MEDIA app is allowed for resumption if either primary or secondary
+ // transport is TCP_WIFI or AOA_USB.
+ // - We have TCP_WIFI for secondary transport.
+ // -> Conclusion: the app has required transport.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ &app_types_array,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_TRUE(result);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_TwoTransports_Failure) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ smart_objects::SmartObject app_types_array(SmartType_Array);
+ app_types_array[0] = mobile_apis::AppHMIType::eType::NAVIGATION;
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 2;
+
+ // refer to transport_adapter_impl.cc
+ std::string primary_transport_device_string("IAP_USB");
+ std::string secondary_transport_device_string("TCP_WIFI");
+
+ // - The app is NAVIGATION.
+ // - A NAVIGATION app is allowed for resumption if either primary or secondary
+ // transport is AOA_USB or SPP_BLUETOOTH.
+ // - We have IAP_USB for primary and TCP_WIFI for secondary transport.
+ // -> Conclusion: the app does not have required transport.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ &app_types_array,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_FALSE(result);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_MultipleAppTypes_Failure) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ smart_objects::SmartObject app_types_array(SmartType_Array);
+ app_types_array[0] = mobile_apis::AppHMIType::eType::MEDIA;
+ app_types_array[1] = mobile_apis::AppHMIType::eType::NAVIGATION;
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 2;
+
+ std::string primary_transport_device_string("IAP_USB");
+ std::string secondary_transport_device_string("TCP_WIFI");
+
+ // - The app is MEDIA and NAVIGATION.
+ // - A MEDIA app is allowed for resumption if either primary or secondary
+ // transport is TCP_WIFI or AOA_USB.
+ // - A NAVIGATION app is allowed for resumption if either primary or secondary
+ // transport is AOA_USB or SPP_BLUETOOTH.
+ // - We have IAP_USB for primary and TCP_WIFI is secondary
+ // -> Conclusion: the app does NOT have required transport.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ &app_types_array,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_FALSE(result);
+}
+
+TEST_F(ApplicationManagerImplTest,
+ CheckResumptionRequiredTransportAvailableTest_MultipleAppTypes_Empty) {
+ using namespace NsSmartDeviceLink::NsSmartObjects;
+
+ smart_objects::SmartObject app_types_array(SmartType_Array);
+ app_types_array[0] = mobile_apis::AppHMIType::eType::NAVIGATION;
+ app_types_array[1] = mobile_apis::AppHMIType::eType::SYSTEM;
+
+ const connection_handler::DeviceHandle primary_device_handle = 1;
+ const connection_handler::DeviceHandle secondary_device_handle = 2;
+
+ std::string primary_transport_device_string("IAP_USB");
+ std::string secondary_transport_device_string("TCP_WIFI");
+
+ // - The app is NAVIGATION and SYSTEM.
+ // - A NAVIGATION app is allowed for resumption if either primary or secondary
+ // transport is AOA_USB or SPP_BLUETOOTH.
+ // - .ini file does not have an entry for SYSTEM apps. So any transport is
+ // allowed.
+ // - We have SPP_BLUETOOTH for primary and TCP_WIFI is secondary
+ // -> Conclusion: the app does NOT have required transport.
+ bool result = CheckResumptionRequiredTransportAvailableTest(
+ &app_types_array,
+ primary_device_handle,
+ primary_transport_device_string,
+ secondary_device_handle,
+ secondary_transport_device_string);
+ EXPECT_FALSE(result);
+}
+
TEST_F(ApplicationManagerImplTest,
RegisterApplication_PathToTheIconExists_IconWasSet) {
file_system::CreateDirectory(kDirectoryName);
diff --git a/src/components/application_manager/test/include/application_manager/commands/commands_test.h b/src/components/application_manager/test/include/application_manager/commands/commands_test.h
index ab392c5ba0..ddd0db2cbe 100644
--- a/src/components/application_manager/test/include/application_manager/commands/commands_test.h
+++ b/src/components/application_manager/test/include/application_manager/commands/commands_test.h
@@ -158,14 +158,16 @@ class CommandsTest : public ::testing::Test {
protected:
virtual void InitCommand(const uint32_t& timeout) {
+ timeout_ = timeout;
ON_CALL(app_mngr_, get_settings())
.WillByDefault(ReturnRef(app_mngr_settings_));
ON_CALL(app_mngr_settings_, default_timeout())
- .WillByDefault(ReturnRef(timeout));
+ .WillByDefault(ReturnRef(timeout_));
}
CommandsTest()
- : mock_message_helper_(*am::MockMessageHelper::message_helper_mock()) {
+ : mock_message_helper_(*am::MockMessageHelper::message_helper_mock())
+ , timeout_(0) {
ON_CALL(app_mngr_, hmi_interfaces())
.WillByDefault(ReturnRef(mock_hmi_interfaces_));
ON_CALL(mock_hmi_interfaces_, GetInterfaceFromFunction(_))
@@ -223,6 +225,9 @@ class CommandsTest : public ::testing::Test {
MobileResult::DATA_NOT_AVAILABLE);
link_hmi_to_mob_result(HMIResult::READ_ONLY, MobileResult::READ_ONLY);
}
+
+ private:
+ uint32_t timeout_;
};
MATCHER_P(MobileResultCodeIs, result_code, "") {
diff --git a/src/components/application_manager/test/include/application_manager/mock_application.h b/src/components/application_manager/test/include/application_manager/mock_application.h
index 819f90f195..47a39d742c 100644
--- a/src/components/application_manager/test/include/application_manager/mock_application.h
+++ b/src/components/application_manager/test/include/application_manager/mock_application.h
@@ -110,6 +110,7 @@ class MockApplication : public ::application_manager::Application {
const mobile_apis::VideoStreamingState::eType());
MOCK_CONST_METHOD0(app_icon_path, const std::string&());
MOCK_CONST_METHOD0(device, connection_handler::DeviceHandle());
+ MOCK_CONST_METHOD0(secondary_device, connection_handler::DeviceHandle());
MOCK_CONST_METHOD0(CurrentHmiState, const application_manager::HmiStatePtr());
MOCK_CONST_METHOD0(RegularHmiState, const application_manager::HmiStatePtr());
MOCK_CONST_METHOD0(PostponedHmiState,
@@ -128,6 +129,8 @@ class MockApplication : public ::application_manager::Application {
MOCK_METHOD1(set_app_icon_path, bool(const std::string& file_name));
MOCK_METHOD1(set_app_allowed, void(const bool allowed));
MOCK_METHOD1(set_device, void(connection_handler::DeviceHandle device));
+ MOCK_METHOD1(set_secondary_device,
+ void(connection_handler::DeviceHandle secondary_device));
MOCK_CONST_METHOD0(get_grammar_id, uint32_t());
MOCK_METHOD1(set_grammar_id, void(uint32_t value));
MOCK_METHOD1(
@@ -137,6 +140,10 @@ class MockApplication : public ::application_manager::Application {
::protocol_handler::MajorProtocolVersion());
MOCK_METHOD1(set_is_resuming, void(bool));
MOCK_CONST_METHOD0(is_resuming, bool());
+ MOCK_METHOD1(set_deferred_resumption_hmi_level,
+ void(application_manager::mobile_api::HMILevel::eType level));
+ MOCK_CONST_METHOD0(deferred_resumption_hmi_level,
+ application_manager::mobile_api::HMILevel::eType());
MOCK_METHOD1(AddFile, bool(const ::application_manager::AppFile& file));
MOCK_CONST_METHOD0(getAppFiles, const ::application_manager::AppFilesMap&());
MOCK_METHOD1(UpdateFile, bool(const ::application_manager::AppFile& file));
diff --git a/src/components/application_manager/test/include/application_manager/mock_message_helper.h b/src/components/application_manager/test/include/application_manager/mock_message_helper.h
index fe17eb6788..8641a3781e 100644
--- a/src/components/application_manager/test/include/application_manager/mock_message_helper.h
+++ b/src/components/application_manager/test/include/application_manager/mock_message_helper.h
@@ -46,6 +46,12 @@ namespace application_manager {
class MockMessageHelper {
public:
+ MOCK_METHOD2(CreateNotification,
+ smart_objects::SmartObjectSPtr(mobile_apis::FunctionID::eType,
+ uint32_t));
+ MOCK_METHOD1(CreateHMINotification,
+ smart_objects::SmartObjectSPtr(hmi_apis::FunctionID::eType));
+
MOCK_METHOD1(GetHashUpdateNotification,
smart_objects::SmartObjectSPtr(const uint32_t app_id));
MOCK_METHOD2(SendHashUpdateNotification,
@@ -230,6 +236,12 @@ class MockMessageHelper {
MOCK_METHOD2(SendUIChangeRegistrationRequestToHMI,
void(ApplicationConstSharedPtr app,
ApplicationManager& app_mngr));
+ MOCK_METHOD5(CreateDeviceInfo,
+ bool(connection_handler::DeviceHandle device_handle,
+ const protocol_handler::SessionObserver& session_observer,
+ const policy::PolicyHandlerInterface& policy_handler,
+ ApplicationManager& app_mngr,
+ smart_objects::SmartObject* output));
MOCK_METHOD5(CreateHMIApplicationStruct,
bool(ApplicationConstSharedPtr app,
const protocol_handler::SessionObserver& session_observer,
diff --git a/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h b/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
index fb264b7d82..907d0c26f2 100644
--- a/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
+++ b/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
@@ -57,6 +57,7 @@ class MockResumeCtrl : public resumption::ResumeCtrl {
const std::string& hash));
MOCK_METHOD1(StartResumptionOnlyHMILevel,
bool(app_mngr::ApplicationSharedPtr application));
+ MOCK_METHOD1(RetryResumption, void(const uint32_t app_id));
MOCK_METHOD1(CheckPersistenceFilesForResumption,
bool(app_mngr::ApplicationSharedPtr application));
MOCK_METHOD2(CheckApplicationHash,
@@ -96,6 +97,7 @@ class MockResumeCtrl : public resumption::ResumeCtrl {
#ifdef BUILD_TESTS
MOCK_METHOD1(set_resumption_storage,
void(utils::SharedPtr<resumption::ResumptionData> mock_storage));
+ MOCK_CONST_METHOD0(get_resumption_active, bool());
#endif // BUILD_TESTS
};
diff --git a/src/components/application_manager/test/mock_message_helper.cc b/src/components/application_manager/test/mock_message_helper.cc
index fc2136cdd8..9e2eb75a55 100644
--- a/src/components/application_manager/test/mock_message_helper.cc
+++ b/src/components/application_manager/test/mock_message_helper.cc
@@ -39,6 +39,18 @@
namespace application_manager {
+smart_objects::SmartObjectSPtr MessageHelper::CreateNotification(
+ mobile_apis::FunctionID::eType function_id, uint32_t app_id) {
+ return MockMessageHelper::message_helper_mock()->CreateNotification(
+ function_id, app_id);
+}
+
+smart_objects::SmartObjectSPtr MessageHelper::CreateHMINotification(
+ hmi_apis::FunctionID::eType function_id) {
+ return MockMessageHelper::message_helper_mock()->CreateHMINotification(
+ function_id);
+}
+
void MessageHelper::SendHashUpdateNotification(uint32_t const app_id,
ApplicationManager& app_mngr) {
MockMessageHelper::message_helper_mock()->SendHashUpdateNotification(
@@ -423,6 +435,16 @@ void MessageHelper::SendUIChangeRegistrationRequestToHMI(
->SendUIChangeRegistrationRequestToHMI(app, app_mngr);
}
+bool MessageHelper::CreateDeviceInfo(
+ connection_handler::DeviceHandle device_handle,
+ const protocol_handler::SessionObserver& session_observer,
+ const policy::PolicyHandlerInterface& policy_handler,
+ ApplicationManager& app_mngr,
+ smart_objects::SmartObject* output) {
+ return MockMessageHelper::message_helper_mock()->CreateDeviceInfo(
+ device_handle, session_observer, policy_handler, app_mngr, output);
+}
+
bool MessageHelper::CreateHMIApplicationStruct(
ApplicationConstSharedPtr app,
const protocol_handler::SessionObserver& session_observer,
diff --git a/src/components/application_manager/test/resumption/resume_ctrl_test.cc b/src/components/application_manager/test/resumption/resume_ctrl_test.cc
index a8a01b9ad8..f126e95e33 100644
--- a/src/components/application_manager/test/resumption/resume_ctrl_test.cc
+++ b/src/components/application_manager/test/resumption/resume_ctrl_test.cc
@@ -65,6 +65,8 @@ using ::testing::NiceMock;
using ::testing::Return;
using ::testing::ReturnRef;
using ::testing::SetArgReferee;
+using ::testing::ReturnPointee;
+using ::testing::SaveArg;
using namespace application_manager_test;
using namespace resumption;
@@ -83,7 +85,11 @@ class ResumeCtrlTest : public ::testing::Test {
, kHash_("saved_hash")
, kAppResumingTimeout_(30000u) // miliseconds
, kTestTimeStamp_(1452074434u)
- , app_set_lock_ptr_(std::make_shared<sync_primitives::Lock>()) {}
+ , app_set_lock_ptr_(std::make_shared<sync_primitives::Lock>())
+ , kDefaultDeferredTestLevel_(eType::INVALID_ENUM)
+ , kNaviLowbandwidthLevel_("LIMITED")
+ , kProjectionLowbandwidthLevel_("NONE")
+ , kMediaLowbandwidthLevel_("NONE") {}
virtual void SetUp() OVERRIDE {
Mock::VerifyAndClearExpectations(&mock_app_mngr_);
@@ -106,11 +112,32 @@ class ResumeCtrlTest : public ::testing::Test {
.WillByDefault(ReturnRef(mock_state_controller_));
ON_CALL(mock_app_mngr_, get_settings())
.WillByDefault(ReturnRef(mock_application_manager_settings_));
+ EXPECT_CALL(mock_app_mngr_, CheckResumptionRequiredTransportAvailable(_))
+ .Times(AtLeast(0))
+ .WillRepeatedly(Return(true));
ON_CALL(mock_application_manager_settings_, use_db_for_resumption())
.WillByDefault(Return(false));
ON_CALL(mock_application_manager_settings_, app_resuming_timeout())
.WillByDefault(ReturnRef(kAppResumingTimeout_));
+ // use EXPECTED_CALL().Times(AtLeast(0)) instead of ON_CALL to remove
+ // warning messages
+ EXPECT_CALL(mock_application_manager_settings_,
+ navigation_lowbandwidth_resumption_level())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(kNaviLowbandwidthLevel_));
+ EXPECT_CALL(mock_application_manager_settings_,
+ projection_lowbandwidth_resumption_level())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(kProjectionLowbandwidthLevel_));
+ EXPECT_CALL(mock_application_manager_settings_,
+ media_lowbandwidth_resumption_level())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(kMediaLowbandwidthLevel_));
+
+ EXPECT_CALL(*mock_app_, deferred_resumption_hmi_level())
+ .Times(AtLeast(0))
+ .WillRepeatedly(Return(kDefaultDeferredTestLevel_));
}
void TearDown() OVERRIDE {
Mock::VerifyAndClearExpectations(&mock_app_mngr_);
@@ -147,6 +174,11 @@ class ResumeCtrlTest : public ::testing::Test {
const uint32_t kAppResumingTimeout_;
const uint32_t kTestTimeStamp_;
std::shared_ptr<sync_primitives::Lock> app_set_lock_ptr_;
+ sync_primitives::Lock app_set_lock_;
+ const mobile_apis::HMILevel::eType kDefaultDeferredTestLevel_;
+ const std::string kNaviLowbandwidthLevel_;
+ const std::string kProjectionLowbandwidthLevel_;
+ const std::string kMediaLowbandwidthLevel_;
};
/**
@@ -552,6 +584,32 @@ TEST_F(ResumeCtrlTest, StartResumptionOnlyHMILevel) {
EXPECT_TRUE(res);
}
+TEST_F(ResumeCtrlTest, RetryResumption) {
+ const uint32_t app_id = 1;
+
+ EXPECT_CALL(mock_app_mngr_, application(app_id)).WillOnce(Return(mock_app_));
+ EXPECT_CALL(*mock_app_, deferred_resumption_hmi_level())
+ .WillOnce(Return(eType::HMI_FULL));
+
+ res_ctrl_->RetryResumption(app_id);
+
+ bool is_resumption_active = res_ctrl_->get_resumption_active();
+ EXPECT_TRUE(is_resumption_active);
+}
+
+TEST_F(ResumeCtrlTest, RetryResumption_NotDeferred) {
+ const uint32_t app_id = 1;
+
+ EXPECT_CALL(mock_app_mngr_, application(app_id)).WillOnce(Return(mock_app_));
+ EXPECT_CALL(*mock_app_, deferred_resumption_hmi_level())
+ .WillOnce(Return(eType::INVALID_ENUM));
+
+ res_ctrl_->RetryResumption(app_id);
+
+ bool is_resumption_active = res_ctrl_->get_resumption_active();
+ EXPECT_FALSE(is_resumption_active);
+}
+
TEST_F(ResumeCtrlTest, StartAppHmiStateResumption_AppInFull) {
mobile_apis::HMILevel::eType restored_test_type = eType::HMI_FULL;
uint32_t ign_off_count = 0;
@@ -599,6 +657,126 @@ TEST_F(ResumeCtrlTest, StartAppHmiStateResumption_AppInBackground) {
res_ctrl_->StartAppHmiStateResumption(mock_app_);
}
+TEST_F(ResumeCtrlTest, StartAppHmiStateResumption_AppHasDeferredResumption) {
+ mobile_apis::HMILevel::eType restored_test_type = eType::HMI_NONE;
+ mobile_apis::HMILevel::eType deferred_level = eType::HMI_FULL;
+ uint32_t ign_off_count = 0;
+ smart_objects::SmartObject saved_app;
+ saved_app[application_manager::strings::ign_off_count] = ign_off_count;
+ saved_app[application_manager::strings::hmi_level] = restored_test_type;
+
+ // resume into deferred level instead of restored level
+ EXPECT_CALL(mock_state_controller_, SetRegularState(_, deferred_level))
+ .Times(AtLeast(1));
+ GetInfoFromApp();
+ ON_CALL(*mock_storage_,
+ GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _))
+ .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true)));
+
+ mobile_apis::HMILevel::eType app_deferred_level = deferred_level;
+ EXPECT_CALL(*mock_app_, deferred_resumption_hmi_level())
+ .WillRepeatedly(ReturnPointee(&app_deferred_level));
+ EXPECT_CALL(*mock_app_,
+ set_deferred_resumption_hmi_level(eType::INVALID_ENUM))
+ .WillOnce(SaveArg<0>(&app_deferred_level));
+
+ EXPECT_CALL(*mock_storage_,
+ RemoveApplicationFromSaved(kTestPolicyAppId_, kMacAddress_))
+ .WillOnce(Return(true));
+
+ ON_CALL(mock_app_mngr_, GetUserConsentForDevice("12345"))
+ .WillByDefault(Return(policy::kDeviceAllowed));
+ res_ctrl_->StartAppHmiStateResumption(mock_app_);
+}
+
+TEST_F(ResumeCtrlTest,
+ StartAppHmiStateResumption_HighBandwidthTransportNotAvailable) {
+ mobile_apis::HMILevel::eType restored_test_type = eType::HMI_FULL;
+ uint32_t ign_off_count = 0;
+ smart_objects::SmartObject saved_app;
+ saved_app[application_manager::strings::ign_off_count] = ign_off_count;
+ saved_app[application_manager::strings::hmi_level] = restored_test_type;
+
+ EXPECT_CALL(mock_state_controller_, SetRegularState(_, eType::HMI_LIMITED))
+ .Times(AtLeast(1));
+ GetInfoFromApp();
+ ON_CALL(*mock_storage_,
+ GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _))
+ .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true)));
+
+ EXPECT_CALL(mock_app_mngr_, CheckResumptionRequiredTransportAvailable(_))
+ .WillOnce(Return(false));
+
+ EXPECT_CALL(*mock_app_, is_navi()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_app_, mobile_projection_enabled())
+ .WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_app_, is_media_application()).WillRepeatedly(Return(false));
+
+ // if resumption is deferred ...
+ EXPECT_CALL(*mock_app_, deferred_resumption_hmi_level())
+ .WillRepeatedly(Return(restored_test_type));
+
+ // ... then RemoveApplicationFromSaved() will not be called
+ EXPECT_CALL(*mock_storage_,
+ RemoveApplicationFromSaved(kTestPolicyAppId_, kMacAddress_))
+ .Times(0);
+
+ ON_CALL(mock_app_mngr_, GetUserConsentForDevice("12345"))
+ .WillByDefault(Return(policy::kDeviceAllowed));
+ res_ctrl_->StartAppHmiStateResumption(mock_app_);
+}
+
+TEST_F(
+ ResumeCtrlTest,
+ StartAppHmiStateResumption_HighBandwidthTransportNotAvailable_NaviAndMedia) {
+ mobile_apis::HMILevel::eType restored_test_type = eType::HMI_LIMITED;
+ uint32_t ign_off_count = 0;
+ smart_objects::SmartObject saved_app;
+ saved_app[application_manager::strings::ign_off_count] = ign_off_count;
+ saved_app[application_manager::strings::hmi_level] = restored_test_type;
+
+ // in this test, it is expected that the app will resume into LIMITED, which
+ // is the higher level among NONE and LIMITED
+ EXPECT_CALL(mock_state_controller_, SetRegularState(_, eType::HMI_LIMITED))
+ .Times(AtLeast(1));
+ GetInfoFromApp();
+ ON_CALL(*mock_storage_,
+ GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _))
+ .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true)));
+
+ EXPECT_CALL(mock_app_mngr_, CheckResumptionRequiredTransportAvailable(_))
+ .WillOnce(Return(false));
+
+ EXPECT_CALL(*mock_app_, is_navi()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_app_, mobile_projection_enabled())
+ .WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_app_, is_media_application()).WillRepeatedly(Return(true));
+
+ std::string navi_lowbandwidth_level("NONE");
+ std::string projection_lowbandwidth_level("BACKGROUND");
+ std::string media_lowbandwidth_level("LIMITED");
+ EXPECT_CALL(mock_application_manager_settings_,
+ navigation_lowbandwidth_resumption_level())
+ .WillRepeatedly(ReturnRef(navi_lowbandwidth_level));
+ EXPECT_CALL(mock_application_manager_settings_,
+ projection_lowbandwidth_resumption_level())
+ .WillRepeatedly(ReturnRef(projection_lowbandwidth_level));
+ EXPECT_CALL(mock_application_manager_settings_,
+ media_lowbandwidth_resumption_level())
+ .WillRepeatedly(ReturnRef(media_lowbandwidth_level));
+
+ EXPECT_CALL(*mock_app_, deferred_resumption_hmi_level())
+ .WillRepeatedly(Return(restored_test_type));
+
+ EXPECT_CALL(*mock_storage_,
+ RemoveApplicationFromSaved(kTestPolicyAppId_, kMacAddress_))
+ .Times(0);
+
+ ON_CALL(mock_app_mngr_, GetUserConsentForDevice("12345"))
+ .WillByDefault(Return(policy::kDeviceAllowed));
+ res_ctrl_->StartAppHmiStateResumption(mock_app_);
+}
+
/**
* @brief Group of tests which check restoring resumption with different data
*/
@@ -652,6 +830,35 @@ TEST_F(ResumeCtrlTest, SetupDefaultHMILevel) {
res_ctrl_->SetupDefaultHMILevel(mock_app_);
}
+TEST_F(ResumeCtrlTest,
+ SetupDefaultHMILevel_HighBandwidthTransportNotAvailable) {
+ smart_objects::SmartObject saved_app;
+
+ saved_app[application_manager::strings::hmi_level] = kDefaultTestLevel_;
+
+ ON_CALL(mock_app_mngr_, GetDefaultHmiLevel(const_app_))
+ .WillByDefault(Return(kDefaultTestLevel_));
+ GetInfoFromApp();
+ EXPECT_CALL(mock_app_mngr_, GetUserConsentForDevice("12345")).Times(0);
+
+ ON_CALL(mock_app_mngr_, GetDefaultHmiLevel(const_app_))
+ .WillByDefault(Return(kDefaultTestLevel_));
+
+ EXPECT_CALL(mock_app_mngr_, CheckResumptionRequiredTransportAvailable(_))
+ .WillRepeatedly(Return(false));
+
+ EXPECT_CALL(*mock_app_, is_navi()).WillRepeatedly(Return(false));
+ EXPECT_CALL(*mock_app_, mobile_projection_enabled())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(*mock_app_, is_media_application()).WillRepeatedly(Return(false));
+
+ // SetRegularState() should be called with kProjectionLowbandwidthLevel_
+ EXPECT_CALL(mock_state_controller_, SetRegularState(_, eType::HMI_NONE))
+ .Times(AtLeast(1));
+
+ res_ctrl_->SetupDefaultHMILevel(mock_app_);
+}
+
TEST_F(ResumeCtrlTest, ApplicationResumptiOnTimer_AppInFull) {
ON_CALL(mock_app_mngr_, application(kTestAppId_))
.WillByDefault(Return(mock_app_));
diff --git a/src/components/application_manager/test/sdl_preloaded_pt.json b/src/components/application_manager/test/sdl_preloaded_pt.json
index 7f5436b5b6..59e3f947c3 100644
--- a/src/components/application_manager/test/sdl_preloaded_pt.json
+++ b/src/components/application_manager/test/sdl_preloaded_pt.json
@@ -297,6 +297,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -309,6 +310,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -321,6 +323,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -333,6 +336,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/application_manager/test/sdl_pt_update.json b/src/components/application_manager/test/sdl_pt_update.json
index e5fdb33a93..23c75e8475 100644
--- a/src/components/application_manager/test/sdl_pt_update.json
+++ b/src/components/application_manager/test/sdl_pt_update.json
@@ -1433,6 +1433,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1445,6 +1446,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1457,6 +1459,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1469,6 +1472,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/application_manager/test/usage_statistics_test.cc b/src/components/application_manager/test/usage_statistics_test.cc
index 6efef83052..b07ce310e9 100644
--- a/src/components/application_manager/test/usage_statistics_test.cc
+++ b/src/components/application_manager/test/usage_statistics_test.cc
@@ -78,14 +78,14 @@ class UsageStatisticsTest : public testing::Test {
protected:
utils::SharedPtr<MockStatisticsManager> mock_statistics_manager_sptr_;
- std::auto_ptr<application_manager::UsageStatistics>
+ std::unique_ptr<application_manager::UsageStatistics>
usage_statistics_test_object1_sptr_;
const std::string language_;
};
TEST_F(UsageStatisticsTest, RecordHmiStateChanged_CallMethod_ExpectMethodCall) {
// Arrange
- std::auto_ptr<MockAppStopwatch> mock_app_stopwatch_object(
+ std::unique_ptr<MockAppStopwatch> mock_app_stopwatch_object(
new MockAppStopwatch);
// Checks
@@ -93,7 +93,7 @@ TEST_F(UsageStatisticsTest, RecordHmiStateChanged_CallMethod_ExpectMethodCall) {
EXPECT_CALL(*mock_app_stopwatch_object, Switch(kTestAppStopwatchId));
// Act
- std::auto_ptr<application_manager::UsageStatistics>
+ std::unique_ptr<application_manager::UsageStatistics>
usage_statistics_test_object2_sptr_(
new application_manager::UsageStatistics(
kAppId,
diff --git a/src/components/config_profile/include/config_profile/profile.h b/src/components/config_profile/include/config_profile/profile.h
index 61dddf55b0..4c2be53228 100644
--- a/src/components/config_profile/include/config_profile/profile.h
+++ b/src/components/config_profile/include/config_profile/profile.h
@@ -37,6 +37,7 @@
#include <string>
#include <vector>
#include <list>
+#include <map>
#include "utils/macro.h"
#include "protocol_handler/protocol_handler_settings.h"
#include "connection_handler/connection_handler_settings.h"
@@ -385,6 +386,12 @@ class Profile : public protocol_handler::ProtocolHandlerSettings,
*/
uint16_t transport_manager_tcp_adapter_port() const OVERRIDE;
+ /**
+ * @brief Returns the network interface name for TCP transport adapter
+ */
+ const std::string& transport_manager_tcp_adapter_network_interface()
+ const OVERRIDE;
+
// TransportManageMMESettings interface
const std::string& event_mq_name() const OVERRIDE;
@@ -466,17 +473,39 @@ class Profile : public protocol_handler::ProtocolHandlerSettings,
size_t update_before_hours() const;
#endif // ENABLE_SECURITY
- /**
- * @brief Reads a string value from the profile
- *
- * @param value Result value
- * @param default_value Value to use key wasn't found
- * @param pSection The section to read the value in
- * @param pKey The key whose value needs to be read out
- *
- * @return FALSE if could not read the value out of the profile
- * (then the value is equal \c default_value)
- */
+
+ /**
+ * @brief Returns true multiple transports is enabled
+ */
+ const bool multiple_transports_enabled() const OVERRIDE;
+
+ /**
+ * @brief Returns list of secondary transports available
+ * for the named primary transport
+ */
+ const std::vector<std::string>& secondary_transports_for_bluetooth()
+ const OVERRIDE;
+ const std::vector<std::string>& secondary_transports_for_usb() const OVERRIDE;
+ const std::vector<std::string>& secondary_transports_for_wifi()
+ const OVERRIDE;
+
+ /**
+ * @brief Returns list of allowed transports for the named service
+ */
+ const std::vector<std::string>& audio_service_transports() const OVERRIDE;
+ const std::vector<std::string>& video_service_transports() const OVERRIDE;
+
+ /**
+ * @brief Reads a string value from the profile
+ *
+ * @param value Result value
+ * @param default_value Value to use key wasn't found
+ * @param pSection The section to read the value in
+ * @param pKey The key whose value needs to be read out
+ *
+ * @return FALSE if could not read the value out of the profile
+ * (then the value is equal \c default_value)
+ */
bool ReadStringValue(std::string* value,
const char* default_value,
const char* const pSection,
@@ -520,13 +549,17 @@ class Profile : public protocol_handler::ProtocolHandlerSettings,
* @param pKey The key whose value needs to be read out
* @param out_result Pointer to bool value for result reading Section
* (could be NULL)
+ * @param allow_empty If true, then out_result will be true when the value
+ * contains an empty string.
+ * If false, then out_result will be false in such case.
*
* @return container of values or empty continer
* if could not read the value out of the profile
*/
std::vector<std::string> ReadStringContainer(const char* const pSection,
const char* const pKey,
- bool* out_result) const;
+ bool* out_result,
+ bool allow_empty = false) const;
/**
* @brief Reads an container of hex int values from the profile,
* which handle as "0x01, 0xA0, 0XFF"
@@ -618,6 +651,33 @@ class Profile : public protocol_handler::ProtocolHandlerSettings,
uint16_t open_attempt_timeout_ms_resumption_db() const;
/**
+ * @brief Returns "transport required for resumption" map
+ *
+ * Keys of the map are AppHMIType strings, i.e. "DEFAULT", "COMMUNICATION",
+ * "MEDIA", and so on. The map may contain a special key "EMPTY_APP" for apps
+ * that does not specify any AppHMIType.
+ */
+ const std::map<std::string, std::vector<std::string> >&
+ transport_required_for_resumption_map() const OVERRIDE;
+
+ /**
+ * @brief Returns HMI level for resumption of a NAVIGATION app
+ */
+ const std::string& navigation_lowbandwidth_resumption_level() const OVERRIDE;
+
+ /**
+ * @brief Returns HMI level for resumption of a PROJECTION app
+ */
+ const std::string& projection_lowbandwidth_resumption_level() const OVERRIDE;
+
+ /**
+ * @brief Returns HMI level for resumption of a media app
+ *
+ * Note: this is *not* for AppHMIType = MEDIA.
+ */
+ const std::string& media_lowbandwidth_resumption_level() const OVERRIDE;
+
+ /**
* @brief Returns wait time after device connection
* before app launch request
*/
@@ -714,13 +774,29 @@ class Profile : public protocol_handler::ProtocolHandlerSettings,
* @param pKey The key whose value needs to be read out
*
* @return FALSE if could not read the value out of the profile
- * (then the value is not changed)
+ * (then the value is not changed) or the value was empty
*/
bool ReadValue(std::string* value,
const char* const pSection,
const char* const pKey) const;
/**
+ * @brief Reads a string value from the profile
+ *
+ * This is same as ReadValue(), except that this method will accept an empty
+ * string.
+ *
+ * @param value The value to return
+ * @param pSection The section to read the value in
+ * @param pKey The key whose value needs to be read out
+ *
+ * @return TRUE if the value is read, FALSE if the value is not found
+ */
+ bool ReadValueEmpty(std::string* value,
+ const char* const pSection,
+ const char* const pKey) const;
+
+ /**
* @brief Reads a boolean value from the profile
*
* @param value The value to return
@@ -859,6 +935,7 @@ class Profile : public protocol_handler::ProtocolHandlerSettings,
std::vector<uint32_t> supported_diag_modes_;
std::string system_files_path_;
uint16_t transport_manager_tcp_adapter_port_;
+ std::string transport_manager_tcp_adapter_network_interface_;
std::string tts_delimiter_;
uint32_t audio_data_stopped_timeout_;
uint32_t video_data_stopped_timeout_;
@@ -919,6 +996,11 @@ class Profile : public protocol_handler::ProtocolHandlerSettings,
bool use_db_for_resumption_;
uint16_t attempts_to_open_resumption_db_;
uint16_t open_attempt_timeout_ms_resumption_db_;
+ std::map<std::string, std::vector<std::string> >
+ transport_required_for_resumption_map_;
+ std::string navigation_lowbandwidth_resumption_level_;
+ std::string projection_lowbandwidth_resumption_level_;
+ std::string media_lowbandwidth_resumption_level_;
uint16_t app_launch_wait_time_;
uint16_t app_launch_max_retry_attempt_;
uint16_t app_launch_retry_wait_time_;
@@ -928,6 +1010,12 @@ class Profile : public protocol_handler::ProtocolHandlerSettings,
bool enable_app_launch_ios_;
uint32_t app_tranport_change_timer_;
uint32_t app_tranport_change_timer_addition_;
+ bool multiple_transports_enabled_;
+ std::vector<std::string> secondary_transports_for_bluetooth_;
+ std::vector<std::string> secondary_transports_for_usb_;
+ std::vector<std::string> secondary_transports_for_wifi_;
+ std::vector<std::string> audio_service_transports_;
+ std::vector<std::string> video_service_transports_;
bool error_occured_;
std::string error_description_;
diff --git a/src/components/config_profile/src/profile.cc b/src/components/config_profile/src/profile.cc
index 4137476d63..3f3ec7eb63 100644
--- a/src/components/config_profile/src/profile.cc
+++ b/src/components/config_profile/src/profile.cc
@@ -33,6 +33,7 @@
#include "config_profile/profile.h"
#include <errno.h>
+#include <numeric>
#include <string.h>
#include <stdlib.h>
#include <sstream>
@@ -88,6 +89,12 @@ const char* kSDL4Section = "SDL4";
const char* kSDL5Section = "SDL5";
const char* kResumptionSection = "Resumption";
const char* kAppLaunchSection = "AppLaunch";
+const char* kMultipleTransportsSection = "MultipleTransports";
+const char* kServicesMapSection = "ServicesMap";
+const char* kTransportRequiredForResumptionSection =
+ "TransportRequiredForResumption";
+const char* kLowBandwidthTransportResumptionLevelSection =
+ "LowBandwidthTransportResumptionLevel";
const char* kSDLVersionKey = "SDLVersion";
const char* kHmiCapabilitiesKey = "HMICapabilities";
@@ -146,6 +153,7 @@ const char* kHeartBeatTimeoutKey = "HeartBeatTimeout";
const char* kMaxSupportedProtocolVersionKey = "MaxSupportedProtocolVersion";
const char* kUseLastStateKey = "UseLastState";
const char* kTCPAdapterPortKey = "TCPAdapterPort";
+const char* kTCPAdapterNetworkInterfaceKey = "TCPAdapterNetworkInterface";
const char* kServerPortKey = "ServerPort";
const char* kVideoStreamingPortKey = "VideoStreamingPort";
const char* kAudioStreamingPortKey = "AudioStreamingPort";
@@ -214,6 +222,60 @@ const char* kEnableAppLaunchIOSKey = "EnableAppLaunchIOS";
const char* kAppTransportChangeTimerKey = "AppTransportChangeTimer";
const char* kAppTransportChangeTimerAdditionKey =
"AppTransportChangeTimerAddition";
+const char* kMultipleTransportsEnabledKey = "MultipleTransportsEnabled";
+const char* kSecondaryTransportForBluetoothKey =
+ "SecondaryTransportForBluetooth";
+const char* kSecondaryTransportForUSBKey = "SecondaryTransportForUSB";
+const char* kSecondaryTransportForWiFiKey = "SecondaryTransportForWiFi";
+const char* kAudioServiceTransportsKey = "AudioServiceTransports";
+const char* kVideoServiceTransportsKey = "VideoServiceTransports";
+
+const char* kDefaultTransportRequiredForResumptionKey =
+ "DefaultTransportRequiredForResumption";
+const char* kAppHMITypeDefault = "DEFAULT";
+const char* kCommunicationTransportRequiredForResumptionKey =
+ "CommunicationTransportRequiredForResumption";
+const char* kAppHMITypeCommunication = "COMMUNICATION";
+const char* kMediaTransportRequiredForResumptionKey =
+ "MediaTransportRequiredForResumption";
+const char* kAppHMITypeMedia = "MEDIA";
+const char* kMessagingTransportRequiredForResumptionKey =
+ "MessagingTransportRequiredForResumption";
+const char* kAppHMITypeMessaging = "MESSAGING";
+const char* kNavigationTransportRequiredForResumptionKey =
+ "NavigationTransportRequiredForResumption";
+const char* kAppHMITypeNavigation = "NAVIGATION";
+const char* kInformationTransportRequiredForResumptionKey =
+ "InformationTransportRequiredForResumption";
+const char* kAppHMITypeInformation = "INFORMATION";
+const char* kSocialTransportRequiredForResumptionKey =
+ "SocialTransportRequiredForResumption";
+const char* kAppHMITypeSocial = "SOCIAL";
+const char* kBackgroundProcessTransportRequiredForResumptionKey =
+ "BackgroundProcessTransportRequiredForResumption";
+const char* kAppHMITypeBackgroundProcess = "BACKGROUND_PROCESS";
+const char* kTestingTransportRequiredForResumptionKey =
+ "TestingTransportRequiredForResumption";
+const char* kAppHMITypeTesting = "TESTING";
+const char* kSystemTransportRequiredForResumptionKey =
+ "SystemTransportRequiredForResumption";
+const char* kAppHMITypeSystem = "SYSTEM";
+const char* kProjectionTransportRequiredForResumptionKey =
+ "ProjectionTransportRequiredForResumption";
+const char* kAppHMITypeProjection = "PROJECTION";
+const char* kRemoteControlTransportRequiredForResumptionKey =
+ "RemoteControlTransportRequiredForResumption";
+const char* kAppHMITypeRemoteControl = "REMOTE_CONTROL";
+const char* kEmptyAppTransportRequiredForResumptionKey =
+ "EmptyAppTransportRequiredForResumption";
+const char* kAppHMITypeEmptyApp = "EMPTY_APP";
+const char* kNavigationLowBandwidthResumptionLevelKey =
+ "NavigationLowBandwidthResumptionLevel";
+const char* kProjectionLowBandwidthResumptionLevelKey =
+ "ProjectionLowBandwidthResumptionLevel";
+const char* kMediaLowBandwidthResumptionLevelKey =
+ "MediaLowBandwidthResumptionLevel";
+
#ifdef WEB_HMI
const char* kDefaultLinkToWebHMI = "HMI/index.html";
#endif // WEB_HMI
@@ -237,6 +299,7 @@ const char* kDefaultHubProtocolMask = "com.smartdevicelink.prot";
const char* kDefaultPoolProtocolMask = "com.smartdevicelink.prot";
const char* kDefaultIAPSystemConfig = "/fs/mp/etc/mm/ipod.cfg";
const char* kDefaultIAP2SystemConfig = "/fs/mp/etc/mm/iap2.cfg";
+const char* kDefaultTransportManagerTCPAdapterNetworkInterface = "";
#ifdef ENABLE_SECURITY
const char* kDefaultSecurityProtocol = "TLSv1.2";
@@ -311,6 +374,8 @@ const uint32_t kDefaultAppTransportChangeTimer = 500u;
const uint32_t kDefaultAppTransportChangeTimerAddition = 0u;
const std::string kAllowedSymbols =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-";
+const bool kDefaultMultipleTransportsEnabled = false;
+const char* kDefaultLowBandwidthResumptionLevel = "NONE";
} // namespace
namespace profile {
@@ -403,6 +468,11 @@ Profile::Profile()
, attempts_to_open_resumption_db_(kDefaultAttemptsToOpenResumptionDB)
, open_attempt_timeout_ms_resumption_db_(
kDefaultOpenAttemptTimeoutMsResumptionDB)
+ , navigation_lowbandwidth_resumption_level_(
+ kDefaultLowBandwidthResumptionLevel)
+ , projection_lowbandwidth_resumption_level_(
+ kDefaultLowBandwidthResumptionLevel)
+ , media_lowbandwidth_resumption_level_(kDefaultLowBandwidthResumptionLevel)
, app_launch_wait_time_(kDefaultAppLaunchWaitTime)
, app_launch_max_retry_attempt_(kDefaultAppLaunchMaxRetryAttempt)
, app_launch_retry_wait_time_(kDefaultAppLaunchRetryWaitTime)
@@ -413,6 +483,7 @@ Profile::Profile()
, app_tranport_change_timer_(kDefaultAppTransportChangeTimer)
, app_tranport_change_timer_addition_(
kDefaultAppTransportChangeTimerAddition)
+ , multiple_transports_enabled_(kDefaultMultipleTransportsEnabled)
, error_occured_(false)
, error_description_() {
// SDL version
@@ -682,6 +753,11 @@ uint16_t Profile::transport_manager_tcp_adapter_port() const {
return transport_manager_tcp_adapter_port_;
}
+const std::string& Profile::transport_manager_tcp_adapter_network_interface()
+ const {
+ return transport_manager_tcp_adapter_network_interface_;
+}
+
const std::string& Profile::tts_delimiter() const {
return tts_delimiter_;
}
@@ -899,6 +975,23 @@ uint16_t Profile::open_attempt_timeout_ms_resumption_db() const {
return open_attempt_timeout_ms_resumption_db_;
}
+const std::map<std::string, std::vector<std::string> >&
+Profile::transport_required_for_resumption_map() const {
+ return transport_required_for_resumption_map_;
+}
+
+const std::string& Profile::navigation_lowbandwidth_resumption_level() const {
+ return navigation_lowbandwidth_resumption_level_;
+}
+
+const std::string& Profile::projection_lowbandwidth_resumption_level() const {
+ return projection_lowbandwidth_resumption_level_;
+}
+
+const std::string& Profile::media_lowbandwidth_resumption_level() const {
+ return media_lowbandwidth_resumption_level_;
+}
+
const uint16_t Profile::app_launch_max_retry_attempt() const {
return app_launch_max_retry_attempt_;
}
@@ -935,6 +1028,31 @@ const uint16_t Profile::wait_time_between_apps() const {
return wait_time_between_apps_;
}
+const bool Profile::multiple_transports_enabled() const {
+ return multiple_transports_enabled_;
+}
+
+const std::vector<std::string>& Profile::secondary_transports_for_bluetooth()
+ const {
+ return secondary_transports_for_bluetooth_;
+}
+
+const std::vector<std::string>& Profile::secondary_transports_for_usb() const {
+ return secondary_transports_for_usb_;
+}
+
+const std::vector<std::string>& Profile::secondary_transports_for_wifi() const {
+ return secondary_transports_for_wifi_;
+}
+
+const std::vector<std::string>& Profile::audio_service_transports() const {
+ return audio_service_transports_;
+}
+
+const std::vector<std::string>& Profile::video_service_transports() const {
+ return video_service_transports_;
+}
+
const bool Profile::ErrorOccured() const {
return error_occured_;
}
@@ -1610,6 +1728,16 @@ void Profile::UpdateValues() {
kTCPAdapterPortKey,
kTransportManagerSection);
+ // Transport manager TCP network interface
+ ReadStringValue(&transport_manager_tcp_adapter_network_interface_,
+ kDefaultTransportManagerTCPAdapterNetworkInterface,
+ kTransportManagerSection,
+ kTCPAdapterNetworkInterfaceKey);
+
+ LOG_UPDATED_VALUE(transport_manager_tcp_adapter_network_interface_,
+ kTCPAdapterNetworkInterfaceKey,
+ kTransportManagerSection);
+
// Event MQ
ReadStringValue(
&event_mq_name_, kDefaultEventMQ, kTransportManagerSection, kEventMQKey);
@@ -1841,6 +1969,84 @@ void Profile::UpdateValues() {
kOpenAttemptTimeoutMsResumptionDBKey,
kResumptionSection);
+ { // read parameters from TransportRequiredForResumption section
+ struct KeyPair {
+ const char* ini_key_name;
+ const char* map_key_name;
+ } keys[] = {
+ {kDefaultTransportRequiredForResumptionKey, kAppHMITypeDefault},
+ {kCommunicationTransportRequiredForResumptionKey,
+ kAppHMITypeCommunication},
+ {kMediaTransportRequiredForResumptionKey, kAppHMITypeMedia},
+ {kMessagingTransportRequiredForResumptionKey, kAppHMITypeMessaging},
+ {kNavigationTransportRequiredForResumptionKey, kAppHMITypeNavigation},
+ {kInformationTransportRequiredForResumptionKey, kAppHMITypeInformation},
+ {kSocialTransportRequiredForResumptionKey, kAppHMITypeSocial},
+ {kBackgroundProcessTransportRequiredForResumptionKey,
+ kAppHMITypeBackgroundProcess},
+ {kTestingTransportRequiredForResumptionKey, kAppHMITypeTesting},
+ {kSystemTransportRequiredForResumptionKey, kAppHMITypeSystem},
+ {kProjectionTransportRequiredForResumptionKey, kAppHMITypeProjection},
+ {kRemoteControlTransportRequiredForResumptionKey,
+ kAppHMITypeRemoteControl},
+ {kEmptyAppTransportRequiredForResumptionKey, kAppHMITypeEmptyApp},
+ {NULL, NULL}};
+ struct KeyPair* entry = keys;
+
+ while (entry->ini_key_name != NULL) {
+ bool exist = false;
+ std::vector<std::string> transport_list =
+ ReadStringContainer(kTransportRequiredForResumptionSection,
+ entry->ini_key_name,
+ &exist,
+ true);
+ if (exist) {
+ transport_required_for_resumption_map_[entry->map_key_name] =
+ transport_list;
+
+ const std::string list_with_comma = std::accumulate(
+ transport_list.begin(),
+ transport_list.end(),
+ std::string(""),
+ [](std::string& first, std::string& second) {
+ return first.empty() ? second : first + ", " + second;
+ });
+ LOG_UPDATED_VALUE(list_with_comma,
+ entry->ini_key_name,
+ kTransportRequiredForResumptionSection);
+ }
+ entry++;
+ }
+ }
+
+ // Read parameters from LowBandwidthTransportResumptionLevel section
+ ReadStringValue(&navigation_lowbandwidth_resumption_level_,
+ kDefaultLowBandwidthResumptionLevel,
+ kLowBandwidthTransportResumptionLevelSection,
+ kNavigationLowBandwidthResumptionLevelKey);
+
+ LOG_UPDATED_VALUE(navigation_lowbandwidth_resumption_level_,
+ kNavigationLowBandwidthResumptionLevelKey,
+ kLowBandwidthTransportResumptionLevelSection);
+
+ ReadStringValue(&projection_lowbandwidth_resumption_level_,
+ kDefaultLowBandwidthResumptionLevel,
+ kLowBandwidthTransportResumptionLevelSection,
+ kProjectionLowBandwidthResumptionLevelKey);
+
+ LOG_UPDATED_VALUE(projection_lowbandwidth_resumption_level_,
+ kProjectionLowBandwidthResumptionLevelKey,
+ kLowBandwidthTransportResumptionLevelSection);
+
+ ReadStringValue(&media_lowbandwidth_resumption_level_,
+ kDefaultLowBandwidthResumptionLevel,
+ kLowBandwidthTransportResumptionLevelSection,
+ kMediaLowBandwidthResumptionLevelKey);
+
+ LOG_UPDATED_VALUE(media_lowbandwidth_resumption_level_,
+ kMediaLowBandwidthResumptionLevelKey,
+ kLowBandwidthTransportResumptionLevelSection);
+
// Read parameters from App Launch section
ReadUIntValue(&app_launch_wait_time_,
kDefaultAppLaunchWaitTime,
@@ -1917,6 +2123,59 @@ void Profile::UpdateValues() {
LOG_UPDATED_VALUE(app_tranport_change_timer_addition_,
kAppTransportChangeTimerAdditionKey,
kMainSection);
+
+ ReadBoolValue(&multiple_transports_enabled_,
+ kDefaultMultipleTransportsEnabled,
+ kMultipleTransportsSection,
+ kMultipleTransportsEnabledKey);
+
+ LOG_UPDATED_BOOL_VALUE(multiple_transports_enabled_,
+ kMultipleTransportsEnabledKey,
+ kMultipleTransportsSection);
+
+ { // Secondary Transports and ServicesMap
+ struct KeyPair {
+ std::vector<std::string>* ini_vector;
+ const char* ini_section_name;
+ const char* ini_key_name;
+ } keys[] = {{&secondary_transports_for_bluetooth_,
+ kMultipleTransportsSection,
+ kSecondaryTransportForBluetoothKey},
+ {&secondary_transports_for_usb_,
+ kMultipleTransportsSection,
+ kSecondaryTransportForUSBKey},
+ {&secondary_transports_for_wifi_,
+ kMultipleTransportsSection,
+ kSecondaryTransportForWiFiKey},
+ {&audio_service_transports_,
+ kServicesMapSection,
+ kAudioServiceTransportsKey},
+ {&video_service_transports_,
+ kServicesMapSection,
+ kVideoServiceTransportsKey},
+ {NULL, NULL, NULL}};
+ struct KeyPair* entry = keys;
+
+ while (entry->ini_vector != NULL) {
+ bool exist = false;
+ std::vector<std::string> profile_entry = ReadStringContainer(
+ entry->ini_section_name, entry->ini_key_name, &exist, true);
+ if (exist) {
+ *entry->ini_vector = profile_entry;
+
+ const std::string list_with_comma = std::accumulate(
+ profile_entry.begin(),
+ profile_entry.end(),
+ std::string(""),
+ [](std::string& first, std::string& second) {
+ return first.empty() ? second : first + ", " + second;
+ });
+ LOG_UPDATED_VALUE(
+ list_with_comma, entry->ini_key_name, entry->ini_section_name);
+ }
+ entry++;
+ }
+ }
}
bool Profile::ReadValue(bool* value,
@@ -1944,15 +2203,22 @@ bool Profile::ReadValue(std::string* value,
const char* const pSection,
const char* const pKey) const {
DCHECK(value);
+ return ReadValueEmpty(value, pSection, pKey) && "\0" != *value;
+}
+
+bool Profile::ReadValueEmpty(std::string* value,
+ const char* const pSection,
+ const char* const pKey) const {
+ DCHECK(value);
bool ret = false;
char buf[INI_LINE_LEN + 1];
*buf = '\0';
- if ((0 != ini_read_value(config_file_name_.c_str(), pSection, pKey, buf)) &&
- ('\0' != *buf)) {
+ if (0 != ini_read_value(config_file_name_.c_str(), pSection, pKey, buf)) {
*value = buf;
ret = true;
}
+
return ret;
}
@@ -2014,6 +2280,18 @@ namespace {
int32_t hex_to_int(const std::string& value) {
return static_cast<int32_t>(strtol(value.c_str(), NULL, 16));
}
+
+std::string trim_string(const std::string& str) {
+ const char* delims = " \t";
+
+ size_t start = str.find_first_not_of(delims);
+ if (std::string::npos == start) {
+ return std::string();
+ }
+ size_t end = str.find_last_not_of(delims);
+
+ return str.substr(start, end - start + 1);
+}
}
std::vector<int> Profile::ReadIntContainer(const char* const pSection,
@@ -2031,9 +2309,15 @@ std::vector<int> Profile::ReadIntContainer(const char* const pSection,
std::vector<std::string> Profile::ReadStringContainer(
const char* const pSection,
const char* const pKey,
- bool* out_result) const {
+ bool* out_result,
+ bool allow_empty) const {
std::string string;
- const bool result = ReadValue(&string, pSection, pKey);
+ bool result;
+ if (allow_empty) {
+ result = ReadValueEmpty(&string, pSection, pKey);
+ } else {
+ result = ReadValue(&string, pSection, pKey);
+ }
if (out_result)
*out_result = result;
std::vector<std::string> value_container;
@@ -2043,7 +2327,7 @@ std::vector<std::string> Profile::ReadStringContainer(
while (iss) {
if (!getline(iss, temp_str, ','))
break;
- value_container.push_back(temp_str);
+ value_container.push_back(trim_string(temp_str));
}
}
return value_container;
diff --git a/src/components/config_profile/test/profile_test.cc b/src/components/config_profile/test/profile_test.cc
index e7d62f4740..64bafdd6bf 100644
--- a/src/components/config_profile/test/profile_test.cc
+++ b/src/components/config_profile/test/profile_test.cc
@@ -690,10 +690,34 @@ TEST_F(ProfileTest, CheckStringContainer) {
std::vector<std::string>::iterator element_mode = diagmodes_list.begin();
element_mode++;
element_mode++;
- diag_mode = std::find(diagmodes_list.begin(), diagmodes_list.end(), " 0x03");
+ diag_mode = std::find(diagmodes_list.begin(), diagmodes_list.end(), "0x03");
EXPECT_EQ(diag_mode, element_mode);
}
+TEST_F(ProfileTest, CheckStringContainerEmpty) {
+ // Set new config file
+ profile_.set_config_file_name("smartDeviceLink_test.ini");
+ EXPECT_EQ("smartDeviceLink_test.ini", profile_.config_file_name());
+
+ bool isread = false;
+ std::vector<std::string> output_list =
+ profile_.ReadStringContainer("MAIN", "AppConfigFolder", &isread);
+ EXPECT_FALSE(isread);
+ EXPECT_TRUE(output_list.empty());
+
+ isread = false;
+ std::vector<std::string> output_list2 =
+ profile_.ReadStringContainer("MAIN", "AppConfigFolder", &isread, true);
+ EXPECT_TRUE(isread);
+ EXPECT_TRUE(output_list2.empty());
+
+ isread = false;
+ std::vector<std::string> output_list3 =
+ profile_.ReadStringContainer("MAIN", "DoesNotExistKey", &isread, true);
+ EXPECT_FALSE(isread);
+ EXPECT_TRUE(output_list2.empty());
+}
+
#ifdef ENABLE_SECURITY
TEST_F(ProfileTest, CheckIntContainerInSecurityData) {
// Set new config file
diff --git a/src/components/connection_handler/include/connection_handler/connection.h b/src/components/connection_handler/include/connection_handler/connection.h
index 9b72d60776..a2309c1521 100644
--- a/src/components/connection_handler/include/connection_handler/connection.h
+++ b/src/components/connection_handler/include/connection_handler/connection.h
@@ -72,13 +72,18 @@ typedef std::map<int32_t, Connection*> ConnectionList;
*/
struct Service {
protocol_handler::ServiceType service_type;
+ transport_manager::ConnectionUID connection_id;
bool is_protected_;
Service()
: service_type(protocol_handler::kInvalidServiceType)
+ , connection_id(0)
, is_protected_(false) {}
- explicit Service(protocol_handler::ServiceType service_type)
- : service_type(service_type), is_protected_(false) {}
+ explicit Service(protocol_handler::ServiceType service_type,
+ transport_manager::ConnectionUID connection_id)
+ : service_type(service_type)
+ , connection_id(connection_id)
+ , is_protected_(false) {}
bool operator==(const protocol_handler::ServiceType service_type) const {
return this->service_type == service_type;
@@ -154,9 +159,11 @@ class Connection {
/**
* @brief Adds session to connection
+ * @param connection_handle Connection Handle for the session
* @return new session id or 0 in case of issues
*/
- uint32_t AddNewSession();
+ uint32_t AddNewSession(
+ const transport_manager::ConnectionUID connection_handle);
/**
* @brief Removes session from connection
@@ -171,11 +178,13 @@ class Connection {
* @param session_id session ID
* @param service_type Type of service
* @param is_protected protection state
+ * @param connection_id Connection ID associated with the service
* @return TRUE on success, otherwise FALSE
*/
bool AddNewService(uint8_t session_id,
protocol_handler::ServiceType service_type,
- const bool is_protected);
+ const bool is_protected,
+ transport_manager::ConnectionUID connection_id);
/**
* @brief Removes service from session
* @param session_id session ID
@@ -184,6 +193,18 @@ class Connection {
*/
bool RemoveService(uint8_t session_id,
protocol_handler::ServiceType service_type);
+
+ /**
+ * @brief Removes secondary service from session
+ * @param secondary_connection_handle connection identifying services to be
+ * removed
+ * @param removed_services_list Returned: List of service types removed
+ * @return the session ID associated with the services removed
+ */
+ uint8_t RemoveSecondaryServices(
+ transport_manager::ConnectionUID secondary_connection_handle,
+ std::list<protocol_handler::ServiceType>& removed_services_list);
+
#ifdef ENABLE_SECURITY
/**
* @brief Sets crypto context of service
@@ -213,10 +234,11 @@ class Connection {
const protocol_handler::ServiceType& service_type);
#endif // ENABLE_SECURITY
- /**
- * @brief Returns map of sessions which have been opened in
- * current connection.
- */
+
+ /**
+ * @brief Returns map of sessions which have been opened in
+ * current connection.
+ */
const SessionMap session_map() const;
/**
@@ -283,6 +305,20 @@ class Connection {
*/
bool ProtocolVersion(uint8_t session_id, uint8_t& protocol_version);
+ /**
+ * @brief Returns the primary connection handle associated with this
+ * connection
+ * @return ConnectionHandle
+ */
+ ConnectionHandle primary_connection_handle() const;
+
+ /**
+ * @brief Sets the primary connection handle
+ * @param primary_connection_handle the primary connection handle to
+ * associate with this connection
+ */
+ void SetPrimaryConnectionHandle(ConnectionHandle primary_connection_handle);
+
private:
/**
* @brief Current connection handler.
@@ -307,6 +343,11 @@ class Connection {
mutable sync_primitives::Lock session_map_lock_;
/**
+ * @brief primary connection handle for secondary connections
+ */
+ ConnectionHandle primary_connection_handle_;
+
+ /**
* @brief monitor that closes connection if there is no traffic over it
*/
HeartBeatMonitor* heartbeat_monitor_;
diff --git a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
index e270d9faeb..121d5ed08c 100644
--- a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
+++ b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
@@ -54,11 +54,14 @@
#include "utils/stl_utils.h"
#include "utils/rwlock.h"
+const transport_manager::ConnectionUID kDisabledSecondary = 0xFFFFFFFF;
+
/**
* \namespace connection_handler
* \brief SmartDeviceLink connection_handler namespace.
*/
namespace connection_handler {
+
/**
* \class ConnectionHandlerImpl
* \brief SmartDeviceLink connection_handler main class
@@ -274,6 +277,24 @@ class ConnectionHandlerImpl
void OnMalformedMessageCallback(const uint32_t& connection_key) OVERRIDE;
/**
+ * @brief Converts connection handle to transport type string used in
+ * smartDeviceLink.ini file, e.g. "TCP_WIFI"
+ * @param connection_handle A connection identifier
+ * @return string representation of the transport of the device
+ */
+ const std::string TransportTypeProfileStringFromConnHandle(
+ transport_manager::ConnectionUID connection_handle) const;
+
+ /**
+ * @brief Converts device handle to transport type string used in
+ * smartDeviceLink.ini file, e.g. "TCP_WIFI"
+ * @param device_handle A device handle
+ * @return string representation of the transport of the device
+ */
+ const std::string TransportTypeProfileStringFromDeviceHandle(
+ DeviceHandle device_handle) const;
+
+ /**
* \brief Creates unique identifier of session (can be used as hash)
* from given connection identifier
* within which session exists and session number.
@@ -509,6 +530,43 @@ class ConnectionHandlerImpl
DevicesDiscoveryStarter& get_device_discovery_starter();
/**
+ * \brief Add a session. This is meant to be called from Connection class.
+ * \param primary_transport_id the primary connection ID to associate with the
+ * newly created session
+ * \return new session id, or 0 if failed
+ **/
+ uint32_t AddSession(
+ const transport_manager::ConnectionUID primary_transport_id) OVERRIDE;
+
+ /**
+ * \brief Remove a session. This is meant to be called from Connection class.
+ * \param session_id ID of the session to remove
+ * \return true if successful, false otherwise
+ **/
+ bool RemoveSession(uint8_t session_id) OVERRIDE;
+
+ DataAccessor<SessionConnectionMap> session_connection_map() OVERRIDE;
+
+ /**
+ * \brief Associate a secondary transport ID with a session
+ * \param session_id the session ID
+ * \param connection_id the new secondary connection ID to associate with the
+ * session
+ * \return the SessionTransports (newly) associated with the session
+ **/
+ SessionTransports SetSecondaryTransportID(
+ uint8_t session_id,
+ transport_manager::ConnectionUID secondary_transport_id) OVERRIDE;
+
+ /**
+ * \brief Retrieve the session transports associated with a session
+ * \param session_id the session ID
+ * \return the SessionTransports associated with the session
+ **/
+ const SessionTransports GetSessionTransports(
+ uint8_t session_id) const OVERRIDE;
+
+ /**
* \brief Invoked when observer's OnServiceStartedCallback is completed
* \param session_key the key of started session passed to
* OnServiceStartedCallback().
@@ -524,6 +582,28 @@ class ConnectionHandlerImpl
bool result,
std::vector<std::string>& rejected_params);
+ /**
+ * \brief Called when secondary transport with given session ID is established
+ * \param primary_connection_handle Set to identifier of primary connection
+ * \param secondary_connection_handle Identifier of secondary connection
+ * \param sessionid session ID taken from Register Secondary Transport frame
+ **/
+ bool OnSecondaryTransportStarted(
+ transport_manager::ConnectionUID& primary_connection_handle,
+ const transport_manager::ConnectionUID secondary_connection_handle,
+ const uint8_t session_id) OVERRIDE;
+
+ /**
+ * \brief Called when secondary transport shuts down
+ * \param primary_connection_handle Identifier of primary connection
+ * \param secondary_connection_handle Identifier of secondary connection
+ * transport
+ **/
+ void OnSecondaryTransportEnded(
+ const transport_manager::ConnectionUID primary_connection_handle,
+ const transport_manager::ConnectionUID secondary_connection_handle)
+ OVERRIDE;
+
private:
/**
* \brief Disconnect application.
@@ -535,6 +615,9 @@ class ConnectionHandlerImpl
void OnConnectionEnded(const transport_manager::ConnectionUID connection_id);
+ const uint8_t GetSessionIdFromSecondaryTransport(
+ transport_manager::ConnectionUID secondary_transport_id) const;
+
const ConnectionHandlerSettings& settings_;
/**
* \brief Pointer to observer
@@ -554,6 +637,13 @@ class ConnectionHandlerImpl
DeviceMap device_list_;
/**
+ * @brief session/connection map
+ */
+ SessionConnectionMap session_connection_map_;
+ mutable std::shared_ptr<sync_primitives::Lock>
+ session_connection_map_lock_ptr_;
+
+ /**
* \brief List of connections
*/
ConnectionList connection_list_;
@@ -573,6 +663,11 @@ class ConnectionHandlerImpl
std::map<uint32_t, protocol_handler::SessionContext>
start_service_context_map_;
+ /**
+ * @brief connection object as it's being closed
+ */
+ Connection* ending_connection_;
+
#ifdef BUILD_TESTS
// Methods for test usage
public:
@@ -581,6 +676,9 @@ class ConnectionHandlerImpl
void addDeviceConnection(
const transport_manager::DeviceInfo& device_info,
const transport_manager::ConnectionUID connection_id);
+ SessionConnectionMap& getSessionConnectionMap() {
+ return session_connection_map_;
+ }
#endif
private:
DISALLOW_COPY_AND_ASSIGN(ConnectionHandlerImpl);
diff --git a/src/components/connection_handler/src/connection.cc b/src/components/connection_handler/src/connection.cc
index 614120312a..b8399b2c9b 100644
--- a/src/components/connection_handler/src/connection.cc
+++ b/src/components/connection_handler/src/connection.cc
@@ -82,6 +82,7 @@ Connection::Connection(ConnectionHandle connection_handle,
, connection_handle_(connection_handle)
, connection_device_handle_(connection_device_handle)
, session_map_lock_(true)
+ , primary_connection_handle_(0)
, heartbeat_timeout_(heartbeat_timeout) {
LOG4CXX_AUTO_TRACE(logger_);
DCHECK(connection_handler_);
@@ -97,39 +98,62 @@ Connection::~Connection() {
heart_beat_monitor_thread_->join();
delete heartbeat_monitor_;
threads::DeleteThread(heart_beat_monitor_thread_);
- sync_primitives::AutoLock lock(session_map_lock_);
- session_map_.clear();
-}
-// Finds a key not presented in std::map<unsigned char, T>
-// Returns 0 if that key not found
-namespace {
-template <class T>
-uint32_t findGap(const std::map<unsigned char, T>& map) {
- for (uint32_t i = 1; i <= UCHAR_MAX; ++i) {
- if (map.find(i) == map.end()) {
- return i;
- }
+ // Before clearing out the session_map_, we must remove all sessions
+ // associated with this Connection from the SessionConnectionMap.
+
+ // NESTED LOCK: make sure to lock session_map_lock_ then ConnectionHandler's
+ // session_connection_map_lock_ptr_ (which will be taken in RemoveSession).
+ sync_primitives::AutoLock lock(session_map_lock_);
+ SessionMap::iterator session_it = session_map_.begin();
+ while (session_it != session_map_.end()) {
+ LOG4CXX_INFO(
+ logger_,
+ "Removed Session ID "
+ << static_cast<int>(session_it->first)
+ << " from Session/Connection Map in Connection Destructor");
+ connection_handler_->RemoveSession(session_it->first);
+ session_it++;
}
- return 0;
+
+ session_map_.clear();
}
-} // namespace
-uint32_t Connection::AddNewSession() {
+uint32_t Connection::AddNewSession(
+ const transport_manager::ConnectionUID connection_handle) {
LOG4CXX_AUTO_TRACE(logger_);
+
+ // NESTED LOCK: make sure to lock session_map_lock_ then ConnectionHandler's
+ // session_connection_map_lock_ptr_ (which will be taken in AddSession)
sync_primitives::AutoLock lock(session_map_lock_);
- const uint32_t session_id = findGap(session_map_);
+
+ // Even though we have our own SessionMap, we use the Connection Handler's
+ // SessionConnectionMap to generate a session ID. We want to make sure that
+ // session IDs are globally unique, and not only unique within a Connection.
+ const uint32_t session_id =
+ connection_handler_->AddSession(connection_handle);
if (session_id > 0) {
Session& new_session = session_map_[session_id];
new_session.protocol_version = ::protocol_handler::PROTOCOL_VERSION_2;
- new_session.service_list.push_back(Service(protocol_handler::kRpc));
- new_session.service_list.push_back(Service(protocol_handler::kBulk));
+ new_session.service_list.push_back(
+ Service(protocol_handler::kRpc, connection_handle));
+ new_session.service_list.push_back(
+ Service(protocol_handler::kBulk, connection_handle));
}
+
return session_id;
}
uint32_t Connection::RemoveSession(uint8_t session_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // Again, a NESTED lock, but it follows the rules.
sync_primitives::AutoLock lock(session_map_lock_);
+
+ if (!connection_handler_->RemoveSession(session_id)) {
+ return 0;
+ }
+
SessionMap::iterator it = session_map_.find(session_id);
if (session_map_.end() == it) {
LOG4CXX_WARN(logger_, "Session not found in this connection!");
@@ -137,12 +161,14 @@ uint32_t Connection::RemoveSession(uint8_t session_id) {
}
heartbeat_monitor_->RemoveSession(session_id);
session_map_.erase(session_id);
+
return session_id;
}
bool Connection::AddNewService(uint8_t session_id,
protocol_handler::ServiceType service_type,
- const bool request_protection) {
+ const bool request_protection,
+ transport_manager::ConnectionUID connection_id) {
// Ignore wrong services
if (protocol_handler::kControl == service_type ||
protocol_handler::kInvalidServiceType == service_type) {
@@ -152,7 +178,9 @@ bool Connection::AddNewService(uint8_t session_id,
LOG4CXX_DEBUG(logger_,
"Add service " << service_type << " for session "
- << static_cast<uint32_t>(session_id));
+ << static_cast<uint32_t>(session_id)
+ << " using connection ID "
+ << static_cast<uint32_t>(connection_id));
sync_primitives::AutoLock lock(session_map_lock_);
SessionMap::iterator session_it = session_map_.find(session_id);
@@ -201,7 +229,7 @@ bool Connection::AddNewService(uint8_t session_id,
#endif // ENABLE_SECURITY
}
// id service is not exists
- session.service_list.push_back(Service(service_type));
+ session.service_list.push_back(Service(service_type, connection_id));
return true;
}
@@ -246,6 +274,63 @@ bool Connection::RemoveService(uint8_t session_id,
return true;
}
+uint8_t Connection::RemoveSecondaryServices(
+ transport_manager::ConnectionUID secondary_connection_handle,
+ std::list<protocol_handler::ServiceType>& removed_services_list) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ uint8_t found_session_id = 0;
+ sync_primitives::AutoLock lock(session_map_lock_);
+
+ LOG4CXX_INFO(logger_,
+ "RemoveSecondaryServices looking for services on Connection ID "
+ << static_cast<int>(secondary_connection_handle));
+
+ // Walk the SessionMap in the primary connection, and for each
+ // Session, we walk its ServiceList, looking for all the services
+ // that were running on the now-closed Secondary Connection.
+ for (SessionMap::iterator session_it = session_map_.begin();
+ session_map_.end() != session_it;
+ ++session_it) {
+ LOG4CXX_INFO(logger_,
+ "RemoveSecondaryServices found session ID "
+ << static_cast<int>(session_it->first));
+
+ // Now, for each session, walk the its ServiceList, looking for services
+ // that were using secondary)_connection_handle. If we find such a service,
+ // set session_found and break out of the outer loop.
+ ServiceList& service_list = session_it->second.service_list;
+ ServiceList::iterator service_it = service_list.begin();
+ for (; service_it != service_list.end();) {
+ LOG4CXX_INFO(logger_,
+ "RemoveSecondaryServices found service ID "
+ << static_cast<int>(service_it->service_type));
+ if (service_it->connection_id == secondary_connection_handle) {
+ found_session_id = session_it->first;
+
+ LOG4CXX_INFO(logger_,
+ "RemoveSecondaryServices removing Service "
+ << static_cast<int>(service_it->service_type)
+ << " in session "
+ << static_cast<int>(found_session_id));
+
+ removed_services_list.push_back(service_it->service_type);
+ service_it = service_list.erase(service_it);
+ } else {
+ service_it++;
+ }
+ }
+
+ // If we found a session that had services running on the secondary
+ // connection, we're done.
+ if (found_session_id != 0) {
+ break;
+ }
+ }
+
+ return found_session_id;
+}
+
#ifdef ENABLE_SECURITY
int Connection::SetSSLContext(uint8_t session_id,
security_manager::SSLContext* context) {
@@ -405,6 +490,15 @@ bool Connection::ProtocolVersion(uint8_t session_id,
return true;
}
+ConnectionHandle Connection::primary_connection_handle() const {
+ return primary_connection_handle_;
+}
+
+void Connection::SetPrimaryConnectionHandle(
+ ConnectionHandle primary_connection_handle) {
+ primary_connection_handle_ = primary_connection_handle;
+}
+
void Connection::StartHeartBeat(uint8_t session_id) {
heartbeat_monitor_->AddSession(session_id);
}
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc
index 83d80d9696..270b38d724 100644
--- a/src/components/connection_handler/src/connection_handler_impl.cc
+++ b/src/components/connection_handler/src/connection_handler_impl.cc
@@ -68,11 +68,14 @@ ConnectionHandlerImpl::ConnectionHandlerImpl(
, connection_handler_observer_(NULL)
, transport_manager_(tm)
, protocol_handler_(NULL)
+ , session_connection_map_lock_ptr_(
+ std::make_shared<sync_primitives::Lock>(true))
, connection_list_lock_()
, connection_handler_observer_lock_()
, connection_list_deleter_(&connection_list_)
, start_service_context_map_lock_()
- , start_service_context_map_() {}
+ , start_service_context_map_()
+ , ending_connection_(NULL) {}
ConnectionHandlerImpl::~ConnectionHandlerImpl() {
LOG4CXX_AUTO_TRACE(logger_);
@@ -362,7 +365,7 @@ uint32_t ConnectionHandlerImpl::OnSessionStartedCallback(
Connection* connection = it->second;
if ((0 == session_id) && (protocol_handler::kRpc == service_type)) {
- new_session_id = connection->AddNewSession();
+ new_session_id = connection->AddNewSession(connection_handle);
if (0 == new_session_id) {
LOG4CXX_ERROR(logger_, "Couldn't start new session!");
return 0;
@@ -371,7 +374,8 @@ uint32_t ConnectionHandlerImpl::OnSessionStartedCallback(
*hash_id = KeyFromPair(connection_handle, new_session_id);
}
} else { // Could be create new service or protected exists one
- if (!connection->AddNewService(session_id, service_type, is_protected)) {
+ if (!connection->AddNewService(
+ session_id, service_type, is_protected, connection_handle)) {
LOG4CXX_ERROR(logger_,
"Couldn't establish "
#ifdef ENABLE_SECURITY
@@ -414,7 +418,33 @@ void ConnectionHandlerImpl::OnSessionStartedCallback(
LOG4CXX_AUTO_TRACE(logger_);
std::vector<std::string> rejected_params;
- protocol_handler::SessionContext context(connection_handle,
+
+ // In case this is a Session running on a Secondary Transport, we need to
+ // find the Sessions's primary transport. In this case, "connection_handle"
+ // reflects the secondary transport, which we need for the various callbacks,
+ // so they can send appropriate Ack or NAK messages on the correct transport.
+ transport_manager::ConnectionUID primary_connection_handle =
+ connection_handle;
+ if (session_id != 0) {
+ SessionTransports st = GetSessionTransports(session_id);
+ if (st.primary_transport == 0) {
+ LOG4CXX_WARN(logger_,
+ "OnSessionStartedCallback could not find Session in the "
+ "Session/Connection Map!");
+ } else {
+ LOG4CXX_INFO(logger_,
+ "OnSessionStartedCallback found session "
+ << static_cast<int>(session_id)
+ << " with primary connection "
+ << static_cast<int>(st.primary_transport)
+ << " and secondary connection "
+ << static_cast<int>(st.secondary_transport));
+ primary_connection_handle = st.primary_transport;
+ }
+ }
+
+ protocol_handler::SessionContext context(primary_connection_handle,
+ connection_handle,
session_id,
0,
service_type,
@@ -428,7 +458,8 @@ void ConnectionHandlerImpl::OnSessionStartedCallback(
}
#endif // ENABLE_SECURITY
sync_primitives::AutoReadLock lock(connection_list_lock_);
- ConnectionList::iterator it = connection_list_.find(connection_handle);
+ ConnectionList::iterator it =
+ connection_list_.find(primary_connection_handle);
if (connection_list_.end() == it) {
LOG4CXX_ERROR(logger_, "Unknown connection!");
protocol_handler_->NotifySessionStarted(context, rejected_params);
@@ -440,15 +471,18 @@ void ConnectionHandlerImpl::OnSessionStartedCallback(
!connection->SessionServiceExists(session_id, service_type);
if ((0 == session_id) && (protocol_handler::kRpc == service_type)) {
- context.new_session_id_ = connection->AddNewSession();
+ context.new_session_id_ =
+ connection->AddNewSession(primary_connection_handle);
if (0 == context.new_session_id_) {
LOG4CXX_ERROR(logger_, "Couldn't start new session!");
protocol_handler_->NotifySessionStarted(context, rejected_params);
return;
}
- context.hash_id_ = KeyFromPair(connection_handle, context.new_session_id_);
+ context.hash_id_ =
+ KeyFromPair(primary_connection_handle, context.new_session_id_);
} else { // Could be create new service or protected exists one
- if (!connection->AddNewService(session_id, service_type, is_protected)) {
+ if (!connection->AddNewService(
+ session_id, service_type, is_protected, connection_handle)) {
LOG4CXX_ERROR(logger_,
"Couldn't establish "
#ifdef ENABLE_SECURITY
@@ -465,7 +499,7 @@ void ConnectionHandlerImpl::OnSessionStartedCallback(
sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_) {
const uint32_t session_key =
- KeyFromPair(connection_handle, context.new_session_id_);
+ KeyFromPair(primary_connection_handle, context.new_session_id_);
{
sync_primitives::AutoLock auto_lock(start_service_context_map_lock_);
@@ -502,10 +536,12 @@ void ConnectionHandlerImpl::NotifyServiceStartedResult(
start_service_context_map_.erase(it);
}
+ // We need the context's primary connection so we can manage its services list
Connection* connection = NULL;
{
sync_primitives::AutoReadLock lock(connection_list_lock_);
- ConnectionList::iterator it = connection_list_.find(context.connection_id_);
+ ConnectionList::iterator it =
+ connection_list_.find(context.primary_connection_id_);
if (connection_list_.end() == it) {
LOG4CXX_ERROR(logger_, "connection not found");
return;
@@ -538,6 +574,28 @@ void ConnectionHandlerImpl::OnApplicationFloodCallBack(
uint8_t session_id = 0;
PairFromKey(connection_key, &connection_handle, &session_id);
+ // In case this is a Session running on a Secondary Transport,
+ // "connection_handle" will reflect the active (secondary) transport.
+ // To close the conneciton and its sessions properly, we need to find
+ // the Sessions's primary transport/connection.
+ if (session_id != 0) {
+ SessionTransports st = GetSessionTransports(session_id);
+ if (st.primary_transport == 0) {
+ LOG4CXX_WARN(logger_,
+ "OnApplicationFloodCallBack could not find Session in the "
+ "Session/Connection Map!");
+ } else {
+ LOG4CXX_INFO(logger_,
+ "OnApplicationFloodCallBack found session "
+ << static_cast<int>(session_id)
+ << " with primary connection "
+ << static_cast<int>(st.primary_transport)
+ << " and secondary connection "
+ << static_cast<int>(st.secondary_transport));
+ connection_handle = st.primary_transport;
+ }
+ }
+
LOG4CXX_INFO(logger_, "Disconnect flooding application");
if (session_id != 0) {
CloseSession(connection_handle, session_id, kFlood);
@@ -555,6 +613,28 @@ void ConnectionHandlerImpl::OnMalformedMessageCallback(
uint8_t session_id = 0;
PairFromKey(connection_key, &connection_handle, &session_id);
+ // In case this is a Session running on a Secondary Transport,
+ // "connection_handle" will reflect the active (secondary) transport.
+ // To close the conneciton and its sessions properly, we need to find
+ // the Sessions's primary transport/connection.
+ if (session_id != 0) {
+ SessionTransports st = GetSessionTransports(session_id);
+ if (st.primary_transport == 0) {
+ LOG4CXX_WARN(logger_,
+ "OnMalformedMessageCallback could not find Session in the "
+ "Session/Connection Map!");
+ } else {
+ LOG4CXX_INFO(logger_,
+ "OnMalformedMessageCallback found session "
+ << static_cast<int>(session_id)
+ << " with primary connection "
+ << static_cast<int>(st.primary_transport)
+ << " and secondary connection "
+ << static_cast<int>(st.secondary_transport));
+ connection_handle = st.primary_transport;
+ }
+ }
+
LOG4CXX_INFO(logger_, "Disconnect malformed messaging application");
CloseConnectionSessions(connection_handle, kMalformed);
CloseConnection(connection_handle);
@@ -577,8 +657,33 @@ uint32_t ConnectionHandlerImpl::OnSessionEndedCallback(
const protocol_handler::ServiceType& service_type) {
LOG4CXX_AUTO_TRACE(logger_);
+ // In case this is a Session running on a Secondary Transport, we need to
+ // find the Sessions's primary transport. In this case, "connection_handle"
+ // reflects the secondary transport, which we need for the various callbacks,
+ // so they can send appropriate Ack or NAK messages on the correct transport.
+ transport_manager::ConnectionUID primary_connection_handle =
+ connection_handle;
+ if (session_id != 0) {
+ SessionTransports st = GetSessionTransports(session_id);
+ if (st.primary_transport == 0) {
+ LOG4CXX_WARN(logger_,
+ "OnSessionEndedCallback could not find Session in the "
+ "Session/Connection Map!");
+ } else {
+ LOG4CXX_INFO(logger_,
+ "OnSessionEndedCallback found session "
+ << static_cast<int>(session_id)
+ << " with primary connection "
+ << static_cast<int>(st.primary_transport)
+ << " and secondary connection "
+ << static_cast<int>(st.secondary_transport));
+ primary_connection_handle = st.primary_transport;
+ }
+ }
+
connection_list_lock_.AcquireForReading();
- ConnectionList::iterator it = connection_list_.find(connection_handle);
+ ConnectionList::iterator it =
+ connection_list_.find(primary_connection_handle);
if (connection_list_.end() == it) {
LOG4CXX_WARN(logger_, "Unknown connection!");
connection_list_lock_.Release();
@@ -588,7 +693,8 @@ uint32_t ConnectionHandlerImpl::OnSessionEndedCallback(
connection_list_lock_.Release();
Connection* connection = connection_item.second;
- const uint32_t session_key = KeyFromPair(connection_handle, session_id);
+ const uint32_t session_key =
+ KeyFromPair(primary_connection_handle, session_id);
if (protocol_handler::kRpc == service_type) {
LOG4CXX_INFO(logger_,
@@ -631,6 +737,178 @@ uint32_t ConnectionHandlerImpl::OnSessionEndedCallback(
return session_key;
}
+bool ConnectionHandlerImpl::OnSecondaryTransportStarted(
+ transport_manager::ConnectionUID& primary_connection_handle,
+ const transport_manager::ConnectionUID secondary_connection_handle,
+ const uint8_t session_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (session_id == 0) {
+ LOG4CXX_WARN(logger_, "Session id for secondary transport is invalid");
+ return false;
+ }
+
+ DeviceHandle device_handle;
+ Connection* connection;
+ {
+ sync_primitives::AutoReadLock lock(connection_list_lock_);
+ ConnectionList::iterator it =
+ connection_list_.find(secondary_connection_handle);
+ if (connection_list_.end() == it) {
+ LOG4CXX_WARN(logger_,
+ "Unknown connection " << secondary_connection_handle);
+ return false;
+ }
+
+ connection = it->second;
+ device_handle = connection->connection_device_handle();
+ }
+
+ // Add the secondary transport connection ID to the SessionConnectionMap
+ SessionTransports st =
+ SetSecondaryTransportID(session_id, secondary_connection_handle);
+ primary_connection_handle = st.primary_transport;
+ if (st.secondary_transport != secondary_connection_handle) {
+ LOG4CXX_WARN(logger_,
+ "Failed setting the session's secondary transport ID");
+ return false;
+ }
+
+ connection->SetPrimaryConnectionHandle(primary_connection_handle);
+
+ const uint32_t session_key =
+ KeyFromPair(primary_connection_handle, session_id);
+
+ sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
+ if (connection_handler_observer_) {
+ LOG4CXX_TRACE(logger_,
+ "Calling Connection Handler Observer's "
+ "OnSecondaryTransportStartedCallback");
+ connection_handler_observer_->OnSecondaryTransportStartedCallback(
+ device_handle, session_key);
+ }
+
+ return true;
+}
+
+void ConnectionHandlerImpl::OnSecondaryTransportEnded(
+ const transport_manager::ConnectionUID primary_connection_handle,
+ const transport_manager::ConnectionUID secondary_connection_handle) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ LOG4CXX_INFO(logger_,
+ "Secondary Transport: "
+ << static_cast<int32_t>(secondary_connection_handle)
+ << " ended. Cleaning up services from primary connection ID "
+ << static_cast<int32_t>(primary_connection_handle));
+ connection_list_lock_.AcquireForReading();
+ ConnectionList::iterator itr =
+ connection_list_.find(primary_connection_handle);
+ if (connection_list_.end() == itr) {
+ LOG4CXX_ERROR(logger_, "Primary Connection not found!");
+ connection_list_lock_.Release();
+ return;
+ }
+ Connection* connection = itr->second;
+ connection_list_lock_.Release();
+
+ if (connection != NULL) {
+ std::list<protocol_handler::ServiceType> removed_services_list;
+ uint8_t session_id = connection->RemoveSecondaryServices(
+ secondary_connection_handle, removed_services_list);
+
+ if (session_id == 0) {
+ // The secondary services have already been removed from the primary
+ // connection, so we find the session associated with this secondary
+ // transport in the SessionConnectionMap
+ session_id =
+ GetSessionIdFromSecondaryTransport(secondary_connection_handle);
+ }
+
+ if (session_id != 0) {
+ {
+ sync_primitives::AutoReadLock read_lock(
+ connection_handler_observer_lock_);
+ if (connection_handler_observer_) {
+ const uint32_t session_key =
+ KeyFromPair(primary_connection_handle, session_id);
+
+ // Walk the returned list of services and call the ServiceEnded
+ // callback for each
+ std::list<protocol_handler::ServiceType>::const_iterator it =
+ removed_services_list.begin();
+ for (; removed_services_list.end() != it; ++it) {
+ connection_handler_observer_->OnServiceEndedCallback(
+ session_key, *it, CloseSessionReason::kCommon);
+ }
+
+ connection_handler_observer_->OnSecondaryTransportEndedCallback(
+ session_key);
+ }
+ }
+
+ // Clear the secondary connection from the Session/Connection map entry
+ // associated with this session
+ SetSecondaryTransportID(session_id, 0);
+ }
+ }
+}
+
+const std::string
+ConnectionHandlerImpl::TransportTypeProfileStringFromConnHandle(
+ transport_manager::ConnectionUID connection_handle) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ sync_primitives::AutoReadLock lock(connection_list_lock_);
+ ConnectionList::const_iterator it = connection_list_.find(connection_handle);
+ if (connection_list_.end() == it) {
+ LOG4CXX_WARN(logger_, "Unknown connection " << connection_handle);
+ return std::string();
+ } else {
+ DeviceHandle device_handle = it->second->connection_device_handle();
+ return TransportTypeProfileStringFromDeviceHandle(device_handle);
+ }
+}
+
+const std::string
+ConnectionHandlerImpl::TransportTypeProfileStringFromDeviceHandle(
+ DeviceHandle device_handle) const {
+ std::string connection_type;
+ DeviceMap::const_iterator it = device_list_.find(device_handle);
+ if (device_list_.end() == it) {
+ LOG4CXX_ERROR(logger_, "Device not found!");
+ } else {
+ connection_type = it->second.connection_type();
+ }
+
+ // Caution: this should be in sync with devicesType map in
+ // transport_adapter_impl.cc
+ if (connection_type == "USB_AOA") {
+ return std::string("AOA_USB");
+ } else if (connection_type == "BLUETOOTH") {
+ return std::string("SPP_BLUETOOTH");
+ } else if (connection_type == "USB_IOS") {
+ return std::string("IAP_USB");
+ } else if (connection_type == "BLUETOOTH_IOS") {
+ return std::string("IAP_BLUETOOTH");
+ } else if (connection_type == "WIFI") {
+ return std::string("TCP_WIFI");
+ } else if (connection_type == "USB_IOS_HOST_MODE") {
+ return std::string("IAP_USB_HOST_MODE");
+ } else if (connection_type == "USB_IOS_DEVICE_MODE") {
+ return std::string("IAP_USB_DEVICE_MODE");
+ } else if (connection_type == "CARPLAY_WIRELESS_IOS") {
+ return std::string("IAP_CARPLAY");
+#ifdef BUILD_TESTS
+ } else if (connection_type == "BTMAC") {
+ return std::string("BTMAC");
+#endif
+ } else {
+ LOG4CXX_WARN(logger_, "Unknown transport type string: " << connection_type);
+ return std::string();
+ }
+}
+
uint32_t ConnectionHandlerImpl::KeyFromPair(
transport_manager::ConnectionUID connection_handle,
uint8_t session_id) const {
@@ -639,7 +917,7 @@ uint32_t ConnectionHandlerImpl::KeyFromPair(
"Key for ConnectionHandle:"
<< static_cast<uint32_t>(connection_handle)
<< " Session:" << static_cast<uint32_t>(session_id)
- << " is: " << static_cast<uint32_t>(key));
+ << " is: 0x" << std::hex << static_cast<uint32_t>(key));
if (protocol_handler::HASH_ID_WRONG == key) {
LOG4CXX_ERROR(logger_,
"Connection key is WRONG_HASH_ID "
@@ -722,6 +1000,139 @@ DevicesDiscoveryStarter& ConnectionHandlerImpl::get_device_discovery_starter() {
return *this;
}
+// Finds a key not presented in std::map<unsigned char, T>
+// Returns 0 if that key not found
+namespace {
+template <class T>
+uint32_t findGap(const std::map<unsigned char, T>& map) {
+ for (uint32_t i = 1; i <= UCHAR_MAX; ++i) {
+ if (map.find(i) == map.end()) {
+ return i;
+ }
+ }
+ return 0;
+}
+} // namespace
+
+uint32_t ConnectionHandlerImpl::AddSession(
+ const transport_manager::ConnectionUID primary_transport_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_);
+ const uint32_t session_id = findGap(session_connection_map_);
+ if (session_id > 0) {
+ LOG4CXX_INFO(logger_,
+ "New session ID " << session_id << " and Connection Id "
+ << static_cast<int>(primary_transport_id)
+ << " added to Session/Connection Map");
+ SessionTransports st;
+ st.primary_transport = primary_transport_id;
+ st.secondary_transport = 0;
+ session_connection_map_[session_id] = st;
+ } else {
+ LOG4CXX_WARN(logger_,
+ "Session/Connection Map could not create a new session ID!!!");
+ }
+
+ return session_id;
+}
+
+bool ConnectionHandlerImpl::RemoveSession(uint8_t session_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_);
+ SessionConnectionMap::iterator itr = session_connection_map_.find(session_id);
+ if (session_connection_map_.end() == itr) {
+ LOG4CXX_WARN(logger_, "Session not found in Session/Connection Map!");
+ return false;
+ }
+
+ LOG4CXX_INFO(logger_,
+ "Removed Session ID " << static_cast<int>(session_id)
+ << " from Session/Connection Map");
+ session_connection_map_.erase(session_id);
+ return true;
+}
+
+DataAccessor<SessionConnectionMap>
+ConnectionHandlerImpl::session_connection_map() {
+ return DataAccessor<SessionConnectionMap>(session_connection_map_,
+ session_connection_map_lock_ptr_);
+}
+
+SessionTransports ConnectionHandlerImpl::SetSecondaryTransportID(
+ uint8_t session_id,
+ transport_manager::ConnectionUID secondary_transport_id) {
+ SessionTransports st;
+
+ sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_);
+ SessionConnectionMap::iterator it = session_connection_map_.find(session_id);
+ if (session_connection_map_.end() == it) {
+ LOG4CXX_WARN(logger_,
+ "SetSecondaryTransportID: session ID "
+ << static_cast<int>(session_id)
+ << " not found in Session/Connection map");
+ st.primary_transport = 0;
+ st.secondary_transport = 0;
+ } else {
+ st = it->second;
+
+ // The only time we overwrite an existing entry in the map is if the new
+ // secondary transport ID is kDisabledSecondary, which effectively DISABLES
+ // the secondary transport feature for the session, or if the new secondary
+ // transport ID is 0, which means a secondary transport has shut down
+ if (st.secondary_transport != 0 &&
+ secondary_transport_id != kDisabledSecondary &&
+ secondary_transport_id != 0) {
+ LOG4CXX_WARN(logger_,
+ "SetSecondaryTransportID: session ID "
+ << static_cast<int>(session_id)
+ << " already has a secondary connection "
+ << static_cast<int>(st.secondary_transport)
+ << " in the Session/Connection map");
+ } else {
+ st.secondary_transport = secondary_transport_id;
+ session_connection_map_[session_id] = st;
+ }
+ }
+
+ return st;
+}
+
+const SessionTransports ConnectionHandlerImpl::GetSessionTransports(
+ uint8_t session_id) const {
+ SessionTransports st;
+ sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_);
+ SessionConnectionMap::const_iterator it =
+ session_connection_map_.find(session_id);
+ if (session_connection_map_.end() == it) {
+ st.primary_transport = 0;
+ st.secondary_transport = 0;
+ } else {
+ st = it->second;
+ }
+
+ return st;
+}
+
+const uint8_t ConnectionHandlerImpl::GetSessionIdFromSecondaryTransport(
+ transport_manager::ConnectionUID secondary_transport_id) const {
+ sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_);
+ SessionConnectionMap::const_iterator it = session_connection_map_.begin();
+ for (; session_connection_map_.end() != it; it++) {
+ SessionTransports st = it->second;
+ if (st.secondary_transport == secondary_transport_id) {
+ return it->first;
+ }
+ }
+
+ LOG4CXX_ERROR(logger_,
+ "Could not find secondary transport ID "
+ << static_cast<int>(secondary_transport_id)
+ << " in the Session/Connection map");
+ return 0;
+}
+
struct CompareMAC {
explicit CompareMAC(const std::string& mac) : mac_(mac) {}
bool operator()(const DeviceMap::value_type& device) {
@@ -1098,8 +1509,28 @@ void ConnectionHandlerImpl::SendEndService(uint32_t key, uint8_t service_type) {
uint32_t connection_handle = 0;
uint8_t session_id = 0;
PairFromKey(key, &connection_handle, &session_id);
- protocol_handler_->SendEndService(
- connection_handle, session_id, service_type);
+
+ // If the service is running on a secondary transport, we need to retrieve
+ // that transport from the SessionConnection Map
+ SessionTransports st = GetSessionTransports(session_id);
+ if (st.primary_transport == 0) {
+ LOG4CXX_WARN(logger_,
+ "SendEndService could not find Session in the "
+ "Session/Connection Map!");
+ } else {
+ LOG4CXX_INFO(logger_,
+ "SendEndService found session "
+ << static_cast<int>(session_id)
+ << " with primary connection "
+ << static_cast<int>(st.primary_transport)
+ << " and secondary connection "
+ << static_cast<int>(st.secondary_transport));
+
+ protocol_handler_->SendEndService(st.primary_transport,
+ st.secondary_transport,
+ session_id,
+ service_type);
+ }
}
}
@@ -1160,12 +1591,16 @@ void ConnectionHandlerImpl::OnConnectionEnded(
connection_list_lock_.Release();
return;
}
- std::auto_ptr<Connection> connection(itr->second);
+ std::unique_ptr<Connection> connection(itr->second);
connection_list_.erase(itr);
connection_list_lock_.Release();
sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
if (connection_handler_observer_ && connection.get() != NULL) {
+ // We have to remember the Connection object we just removed from
+ // connection_list_, because we will need to retrieve the protocol
+ // version from it inside of OnServiceEndedCallback
+ ending_connection_ = connection.get();
const SessionMap session_map = connection->session_map();
for (SessionMap::const_iterator session_it = session_map.begin();
@@ -1182,6 +1617,13 @@ void ConnectionHandlerImpl::OnConnectionEnded(
session_key, service_it->service_type, CloseSessionReason::kCommon);
}
}
+ ending_connection_ = NULL;
+ }
+
+ ConnectionHandle primary_connection_handle =
+ connection->primary_connection_handle();
+ if (primary_connection_handle != 0) {
+ OnSecondaryTransportEnded(primary_connection_handle, connection_id);
}
}
@@ -1222,6 +1664,10 @@ bool ConnectionHandlerImpl::ProtocolVersionUsed(
ConnectionList::const_iterator it = connection_list_.find(connection_id);
if (connection_list_.end() != it) {
return it->second->ProtocolVersion(session_id, protocol_version);
+ } else if (ending_connection_ &&
+ static_cast<uint32_t>(ending_connection_->connection_handle()) ==
+ connection_id) {
+ return ending_connection_->ProtocolVersion(session_id, protocol_version);
}
LOG4CXX_WARN(logger_, "Connection not found !");
return false;
diff --git a/src/components/connection_handler/test/connection_handler_impl_test.cc b/src/components/connection_handler/test/connection_handler_impl_test.cc
index 56dbf6b9de..f66d6b350c 100644
--- a/src/components/connection_handler/test/connection_handler_impl_test.cc
+++ b/src/components/connection_handler/test/connection_handler_impl_test.cc
@@ -198,10 +198,12 @@ class ConnectionHandlerTest : public ::testing::Test {
}
// Check Service Wrapper
- void CheckServiceExists(const int connectionId,
- const int session_id,
- const ::protocol_handler::ServiceType serviceId,
- const bool exists) {
+ void CheckServiceExists(
+ const int connectionId,
+ const int session_id,
+ const ::protocol_handler::ServiceType serviceId,
+ const ::transport_manager::ConnectionUID serviceConnectionId,
+ const bool exists) {
// Check all trees to find Service and check own protected value
const ConnectionList& connection_list =
connection_handler_->getConnectionList();
@@ -221,6 +223,7 @@ class ConnectionHandlerTest : public ::testing::Test {
std::find(service_list.begin(), service_list.end(), serviceId);
if (exists) {
ASSERT_NE(serv_it, service_list.end());
+ ASSERT_EQ(serv_it->connection_id, serviceConnectionId);
} else {
ASSERT_EQ(serv_it, service_list.end());
}
@@ -306,6 +309,31 @@ class ConnectionHandlerTest : public ::testing::Test {
connection->ProtocolVersion(session_id, check_protocol_version));
EXPECT_EQ(check_protocol_version, protocol_version);
}
+ void AddSecondaryTestService(ServiceType service_type) {
+ EXPECT_NE(0u, out_context_.new_session_id_);
+ EXPECT_EQ(SessionHash(uid_, out_context_.new_session_id_),
+ out_context_.hash_id_);
+ CheckSessionExists(uid_, out_context_.new_session_id_);
+
+ // Set protocol version to 5
+ ChangeProtocol(uid_,
+ out_context_.new_session_id_,
+ protocol_handler::PROTOCOL_VERSION_5);
+
+ connection_handler_test::MockConnectionHandlerObserver
+ temp_connection_handler_observer;
+ connection_handler_->set_connection_handler_observer(
+ &temp_connection_handler_observer);
+ EXPECT_CALL(temp_connection_handler_observer,
+ OnServiceStartedCallback(_, _, service_type, _)).Times(1);
+
+ connection_handler_->OnSessionStartedCallback(2u,
+ out_context_.new_session_id_,
+ service_type,
+ PROTECTION_OFF,
+ static_cast<BsonObject*>(0));
+ connection_handler_->set_connection_handler_observer(NULL);
+ }
ConnectionHandlerImpl* connection_handler_;
testing::NiceMock<transport_manager_test::MockTransportManager>
@@ -518,7 +546,7 @@ MATCHER_P(SameDevice, device, "") {
TEST_F(ConnectionHandlerTest, SendEndServiceWithoutSetProtocolHandler) {
AddTestDeviceConnection();
AddTestSession();
- EXPECT_CALL(mock_protocol_handler_, SendEndService(_, _, kRpc)).Times(0);
+ EXPECT_CALL(mock_protocol_handler_, SendEndService(_, _, _, kRpc)).Times(0);
connection_handler_->SendEndService(connection_key_, kRpc);
}
@@ -526,7 +554,7 @@ TEST_F(ConnectionHandlerTest, SendEndService) {
AddTestDeviceConnection();
AddTestSession();
connection_handler_->set_protocol_handler(&mock_protocol_handler_);
- EXPECT_CALL(mock_protocol_handler_, SendEndService(_, _, kRpc));
+ EXPECT_CALL(mock_protocol_handler_, SendEndService(_, _, _, kRpc));
connection_handler_->SendEndService(connection_key_, kRpc);
}
@@ -1112,7 +1140,7 @@ TEST_F(ConnectionHandlerTest, StartService_withServices) {
PROTECTION_OFF,
static_cast<BsonObject*>(NULL));
EXPECT_NE(0u, audio_context.new_session_id_);
- CheckServiceExists(uid_, audio_context.new_session_id_, kAudio, true);
+ CheckServiceExists(uid_, audio_context.new_session_id_, kAudio, uid_, true);
EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, audio_context.hash_id_);
// Start Audio service
@@ -1122,7 +1150,8 @@ TEST_F(ConnectionHandlerTest, StartService_withServices) {
PROTECTION_OFF,
static_cast<BsonObject*>(NULL));
EXPECT_NE(0u, video_context.new_session_id_);
- CheckServiceExists(uid_, video_context.new_session_id_, kMobileNav, true);
+ CheckServiceExists(
+ uid_, video_context.new_session_id_, kMobileNav, uid_, true);
EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, video_context.hash_id_);
connection_handler_->set_protocol_handler(NULL);
@@ -1150,7 +1179,8 @@ TEST_F(ConnectionHandlerTest, StartService_withServices_withParams) {
PROTECTION_OFF,
dummy_param);
EXPECT_EQ(out_context_.new_session_id_, video_context.new_session_id_);
- CheckServiceExists(uid_, out_context_.new_session_id_, kMobileNav, true);
+ CheckServiceExists(
+ uid_, out_context_.new_session_id_, kMobileNav, uid_, true);
EXPECT_EQ(protocol_handler::HASH_ID_NOT_SUPPORTED, video_context.hash_id_);
connection_handler_->set_protocol_handler(NULL);
@@ -1174,7 +1204,7 @@ TEST_F(ConnectionHandlerTest, ServiceStop_UnExistService) {
connection_handler_->OnSessionEndedCallback(
uid_, out_context_.new_session_id_, &dummy_hash, kAudio);
EXPECT_EQ(0u, end_session_result);
- CheckServiceExists(uid_, out_context_.new_session_id_, kAudio, false);
+ CheckServiceExists(uid_, out_context_.new_session_id_, kAudio, uid_, false);
}
TEST_F(ConnectionHandlerTest, ServiceStop) {
@@ -1204,7 +1234,7 @@ TEST_F(ConnectionHandlerTest, ServiceStop) {
connection_handler_->OnSessionEndedCallback(
uid_, out_context_.new_session_id_, &some_hash_id, kAudio);
EXPECT_EQ(connection_key_, end_session_result);
- CheckServiceExists(uid_, out_context_.new_session_id_, kAudio, false);
+ CheckServiceExists(uid_, out_context_.new_session_id_, kAudio, uid_, false);
}
}
@@ -2003,6 +2033,193 @@ TEST_F(ConnectionHandlerTest, OnDeviceConnectionSwitching) {
connection_handler_->OnDeviceSwitchingStart(mac_address_, second_mac_address);
}
+TEST_F(ConnectionHandlerTest, StartStopSecondarySession) {
+ // Add virtual device and connection
+ AddTestDeviceConnection();
+ // Start new session with RPC service
+ AddTestSession();
+
+ connection_handler_test::MockConnectionHandlerObserver
+ mock_connection_handler_observer;
+ connection_handler_->set_connection_handler_observer(
+ &mock_connection_handler_observer);
+
+ // Start a session on a secondary transport
+ const transport_manager::DeviceInfo secondary_device_info(
+ device_handle_, mac_address_, device_name_, std::string("WIFI"));
+ const transport_manager::ConnectionUID secondary_uid = 2u;
+ // Add Device and connection
+ ON_CALL(mock_connection_handler_settings, heart_beat_timeout())
+ .WillByDefault(Return(1000u));
+ connection_handler_->addDeviceConnection(secondary_device_info,
+ secondary_uid);
+
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnSecondaryTransportStartedCallback(device_handle_, _)).Times(1);
+
+ connection_handler_->OnSecondaryTransportStarted(
+ uid_, secondary_uid, out_context_.new_session_id_);
+
+ SessionTransports st =
+ connection_handler_->GetSessionTransports(out_context_.new_session_id_);
+ EXPECT_EQ(st.primary_transport, uid_);
+ EXPECT_EQ(st.secondary_transport, secondary_uid);
+
+ AddSecondaryTestService(kAudio);
+ AddSecondaryTestService(kMobileNav);
+
+ CheckServiceExists(
+ uid_, out_context_.new_session_id_, kAudio, secondary_uid, true);
+ CheckServiceExists(
+ uid_, out_context_.new_session_id_, kMobileNav, secondary_uid, true);
+
+ connection_handler_->set_connection_handler_observer(
+ &mock_connection_handler_observer);
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnSecondaryTransportEndedCallback(_)).Times(1);
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnServiceEndedCallback(_, kAudio, _)).Times(1);
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnServiceEndedCallback(_, kMobileNav, _)).Times(1);
+
+ connection_handler_->OnSecondaryTransportEnded(uid_, secondary_uid);
+
+ st = connection_handler_->GetSessionTransports(out_context_.new_session_id_);
+ EXPECT_EQ(st.primary_transport, uid_);
+ EXPECT_EQ(st.secondary_transport, 0u);
+
+ CheckServiceExists(
+ uid_, out_context_.new_session_id_, kAudio, secondary_uid, false);
+ CheckServiceExists(
+ uid_, out_context_.new_session_id_, kMobileNav, secondary_uid, false);
+}
+
+TEST_F(ConnectionHandlerTest, StopSecondarySession_NoService) {
+ AddTestDeviceConnection();
+ AddTestSession();
+
+ connection_handler_test::MockConnectionHandlerObserver
+ mock_connection_handler_observer;
+ connection_handler_->set_connection_handler_observer(
+ &mock_connection_handler_observer);
+
+ const transport_manager::DeviceInfo secondary_device_info(
+ device_handle_, mac_address_, device_name_, std::string("WIFI"));
+ const transport_manager::ConnectionUID secondary_uid = 123u;
+ ON_CALL(mock_connection_handler_settings, heart_beat_timeout())
+ .WillByDefault(Return(1000u));
+ connection_handler_->addDeviceConnection(secondary_device_info,
+ secondary_uid);
+
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnSecondaryTransportStartedCallback(device_handle_, _)).Times(1);
+ connection_handler_->OnSecondaryTransportStarted(
+ uid_, secondary_uid, out_context_.new_session_id_);
+
+ // check if OnSecondaryTransportEndedCallback is triggered with correct
+ // session ID even if we don't have any services
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnSecondaryTransportEndedCallback(_));
+ EXPECT_CALL(mock_connection_handler_observer, OnServiceEndedCallback(_, _, _))
+ .Times(0);
+
+ connection_handler_->OnSecondaryTransportEnded(uid_, secondary_uid);
+
+ SessionTransports st =
+ connection_handler_->GetSessionTransports(out_context_.new_session_id_);
+ EXPECT_EQ(st.primary_transport, uid_);
+ EXPECT_EQ(st.secondary_transport, 0u);
+}
+
+TEST_F(ConnectionHandlerTest, ConnectionType_valid) {
+ AddTestDeviceConnection();
+ AddTestSession();
+
+ std::string ret =
+ connection_handler_->TransportTypeProfileStringFromConnHandle(uid_);
+ EXPECT_EQ(connection_type_, ret);
+}
+
+TEST_F(ConnectionHandlerTest, ConnectionType_invalid) {
+ AddTestDeviceConnection();
+
+ transport_manager::ConnectionUID invalid_uid = 12345;
+ ASSERT_TRUE(invalid_uid != uid_);
+ std::string ret =
+ connection_handler_->TransportTypeProfileStringFromConnHandle(
+ invalid_uid);
+ EXPECT_EQ(std::string(), ret);
+}
+
+TEST_F(ConnectionHandlerTest, SetSecondaryTransportID_UpdateSuccess) {
+ uint8_t session_id = 123;
+ transport_manager::ConnectionUID primary_uid = 100;
+ transport_manager::ConnectionUID secondary_uid = 0;
+
+ SessionConnectionMap& session_connection_map =
+ connection_handler_->getSessionConnectionMap();
+ // secondary transport's ID is 0
+ SessionTransports st = {primary_uid, secondary_uid};
+ session_connection_map[session_id] = st;
+
+ secondary_uid = 200;
+ st = connection_handler_->SetSecondaryTransportID(session_id, secondary_uid);
+ EXPECT_EQ(primary_uid, st.primary_transport);
+ EXPECT_EQ(secondary_uid, st.secondary_transport);
+}
+
+TEST_F(ConnectionHandlerTest, SetSecondaryTransportID_UpdateFailure) {
+ uint8_t session_id = 123;
+ transport_manager::ConnectionUID primary_uid = 100;
+ transport_manager::ConnectionUID secondary_uid = 300;
+
+ SessionConnectionMap& session_connection_map =
+ connection_handler_->getSessionConnectionMap();
+ // secondary transport's ID is already assigned
+ SessionTransports st = {primary_uid, secondary_uid};
+ session_connection_map[session_id] = st;
+
+ st = connection_handler_->SetSecondaryTransportID(session_id, 500);
+ EXPECT_EQ(primary_uid, st.primary_transport);
+ // secondary transport's ID is NOT updated
+ EXPECT_EQ(secondary_uid, st.secondary_transport);
+}
+
+TEST_F(ConnectionHandlerTest, SetSecondaryTransportID_OverwirteSecondaryUID) {
+ uint8_t session_id = 123;
+ transport_manager::ConnectionUID primary_uid = 200;
+ transport_manager::ConnectionUID secondary_uid = 500;
+
+ SessionConnectionMap& session_connection_map =
+ connection_handler_->getSessionConnectionMap();
+ SessionTransports st = {primary_uid, secondary_uid};
+ session_connection_map[session_id] = st;
+
+ secondary_uid = kDisabledSecondary;
+ st = connection_handler_->SetSecondaryTransportID(session_id, secondary_uid);
+ EXPECT_EQ(primary_uid, st.primary_transport);
+ // secondary transport's ID is updated
+ EXPECT_EQ(secondary_uid, st.secondary_transport);
+}
+
+TEST_F(ConnectionHandlerTest, SetSecondaryTransportID_Failure) {
+ uint8_t session_id = 123;
+ transport_manager::ConnectionUID primary_uid = 100;
+ transport_manager::ConnectionUID secondary_uid = 0;
+
+ SessionConnectionMap& session_connection_map =
+ connection_handler_->getSessionConnectionMap();
+ SessionTransports st = {primary_uid, secondary_uid};
+ session_connection_map[session_id] = st;
+
+ uint8_t invalid_session_id = 10;
+ secondary_uid = 300;
+ st = connection_handler_->SetSecondaryTransportID(invalid_session_id,
+ secondary_uid);
+ EXPECT_EQ(0u, st.primary_transport);
+ EXPECT_EQ(0u, st.secondary_transport);
+}
+
} // namespace connection_handler_test
} // namespace components
} // namespace test
diff --git a/src/components/connection_handler/test/connection_test.cc b/src/components/connection_handler/test/connection_test.cc
index de21dd1e97..98b83f5fc4 100644
--- a/src/components/connection_handler/test/connection_test.cc
+++ b/src/components/connection_handler/test/connection_test.cc
@@ -36,6 +36,7 @@
#include "protocol/common.h"
#include "connection_handler/connection.h"
+#include "connection_handler/mock_connection_handler.h"
#include "connection_handler/connection_handler_impl.h"
#include "protocol/service_type.h"
#include "connection_handler/mock_connection_handler_settings.h"
@@ -56,6 +57,8 @@ namespace connection_handler_test {
using namespace ::connection_handler;
using namespace ::protocol_handler;
+using ::testing::Return;
+
class ConnectionTest : public ::testing::Test {
protected:
void SetUp() OVERRIDE {
@@ -78,7 +81,7 @@ class ConnectionTest : public ::testing::Test {
session_id, protocol_handler::PROTOCOL_VERSION_3);
}
void StartDefaultSession() {
- session_id = connection_->AddNewSession();
+ session_id = connection_->AddNewSession(kDefaultConnectionHandle);
EXPECT_NE(session_id, 0u);
const SessionMap sessionMap = connection_->session_map();
EXPECT_FALSE(sessionMap.empty());
@@ -88,13 +91,14 @@ class ConnectionTest : public ::testing::Test {
std::find(serviceList.begin(), serviceList.end(), kRpc);
const bool found_result = (it != serviceList.end());
EXPECT_TRUE(found_result);
+ EXPECT_EQ(connection_->primary_connection_handle(), 0);
}
void AddNewService(const ServiceType service_type,
const bool protection,
const bool expect_add_new_service_call_result,
const bool expect_exist_service) {
- const bool result =
- connection_->AddNewService(session_id, service_type, protection);
+ const bool result = connection_->AddNewService(
+ session_id, service_type, protection, kDefaultConnectionHandle);
EXPECT_EQ(result, expect_add_new_service_call_result);
#ifdef ENABLE_SECURITY
@@ -110,12 +114,35 @@ class ConnectionTest : public ::testing::Test {
std::find(newServiceList.begin(), newServiceList.end(), service_type);
const bool found_result = it != newServiceList.end();
EXPECT_EQ(expect_exist_service, found_result);
-#ifdef ENABLE_SECURITY
if (found_result) {
const Service& service = *it;
+ transport_manager::ConnectionUID expected_connection_handle =
+ kDefaultConnectionHandle;
+ EXPECT_EQ(service.connection_id, expected_connection_handle);
+#ifdef ENABLE_SECURITY
EXPECT_EQ(service.is_protected_, protection);
- }
#endif // ENABLE_SECURITY
+ }
+ }
+ void AddNewSecondaryService(const ServiceType service_type) {
+ const bool result = connection_->AddNewService(
+ session_id, service_type, false, kSecondaryConnectionHandle);
+ EXPECT_EQ(result, true);
+
+ const SessionMap session_map = connection_->session_map();
+ EXPECT_FALSE(session_map.empty());
+ const ServiceList newServiceList = session_map.begin()->second.service_list;
+ EXPECT_FALSE(newServiceList.empty());
+ const ServiceList::const_iterator it =
+ std::find(newServiceList.begin(), newServiceList.end(), service_type);
+ const bool found_result = it != newServiceList.end();
+ EXPECT_TRUE(found_result);
+ if (found_result) {
+ const Service& service = *it;
+ transport_manager::ConnectionUID expected_secondary_connection_handle =
+ kSecondaryConnectionHandle;
+ EXPECT_EQ(service.connection_id, expected_secondary_connection_handle);
+ }
}
void RemoveService(const ServiceType service_type,
@@ -141,6 +168,8 @@ class ConnectionTest : public ::testing::Test {
transport_manager_mock;
ConnectionHandlerImpl* connection_handler_;
uint32_t session_id;
+ static const transport_manager::ConnectionUID kDefaultConnectionHandle = 1;
+ static const transport_manager::ConnectionUID kSecondaryConnectionHandle = 2;
};
TEST_F(ConnectionTest, Session_TryGetProtocolVersionWithoutSession) {
@@ -236,13 +265,17 @@ TEST_F(ConnectionTest, HeartBeat_Protocol5_ZeroHeartBeat_NotSupported) {
// Try to add service without session
TEST_F(ConnectionTest, Session_AddNewServiceWithoutSession) {
- EXPECT_EQ(connection_->AddNewService(session_id, kAudio, true),
+ EXPECT_EQ(connection_->AddNewService(
+ session_id, kAudio, true, kDefaultConnectionHandle),
EXPECT_RETURN_FALSE);
- EXPECT_EQ(connection_->AddNewService(session_id, kAudio, false),
+ EXPECT_EQ(connection_->AddNewService(
+ session_id, kAudio, false, kDefaultConnectionHandle),
EXPECT_RETURN_FALSE);
- EXPECT_EQ(connection_->AddNewService(session_id, kMobileNav, true),
+ EXPECT_EQ(connection_->AddNewService(
+ session_id, kMobileNav, true, kDefaultConnectionHandle),
EXPECT_RETURN_FALSE);
- EXPECT_EQ(connection_->AddNewService(session_id, kMobileNav, false),
+ EXPECT_EQ(connection_->AddNewService(
+ session_id, kMobileNav, false, kDefaultConnectionHandle),
EXPECT_RETURN_FALSE);
}
@@ -409,6 +442,133 @@ TEST_F(ConnectionTest, RemoveSession) {
EXPECT_EQ(0u, connection_->RemoveSession(session_id));
}
+TEST_F(ConnectionTest, AddNewSession_VerifyAddSessionCalled) {
+ MockConnectionHandler mock_connection_handler;
+
+ ConnectionHandle connection_handle = 123;
+ DeviceHandle device_handle = 0u;
+ uint32_t heart_beat = 10000u;
+ Connection* connection = new Connection(
+ connection_handle, device_handle, &mock_connection_handler, heart_beat);
+
+ transport_manager::ConnectionUID connection_handle_uid = 1;
+ uint32_t mock_session_id = 2;
+ EXPECT_CALL(mock_connection_handler, AddSession(connection_handle_uid))
+ .WillOnce(Return(mock_session_id));
+
+ uint32_t sid = connection->AddNewSession(connection_handle_uid);
+ EXPECT_EQ(mock_session_id, sid);
+
+ EXPECT_CALL(mock_connection_handler, RemoveSession(mock_session_id))
+ .WillOnce(Return(true)); // invoked by destructor of connection
+ delete connection;
+}
+
+TEST_F(ConnectionTest, RemoveSession_VerifyRemoveSessionCalled) {
+ MockConnectionHandler mock_connection_handler;
+
+ ConnectionHandle connection_handle = 123;
+ DeviceHandle device_handle = 0u;
+ uint32_t heart_beat = 10000u;
+ Connection* connection = new Connection(
+ connection_handle, device_handle, &mock_connection_handler, heart_beat);
+
+ transport_manager::ConnectionUID connection_handle_uid = 1;
+ uint32_t mock_session_id = 10;
+ EXPECT_CALL(mock_connection_handler, AddSession(connection_handle_uid))
+ .WillOnce(Return(mock_session_id));
+ EXPECT_CALL(mock_connection_handler,
+ RemoveSession(static_cast<uint8_t>(mock_session_id)))
+ .WillOnce(Return(true));
+
+ uint32_t sid = connection->AddNewSession(connection_handle_uid);
+
+ uint32_t ret = connection->RemoveSession(sid);
+ EXPECT_EQ(sid, ret);
+
+ delete connection;
+}
+
+TEST_F(ConnectionTest, SecondarySessionTest) {
+ StartSession();
+ AddNewService(
+ kRpc, PROTECTION_OFF, EXPECT_RETURN_FALSE, EXPECT_SERVICE_EXISTS);
+
+ const ConnectionHandle connectionHandle = 0;
+ const DeviceHandle device_handle = 0u;
+ const uint32_t heart_beat = 0u;
+ Connection* secondary_connection = new Connection(
+ connectionHandle, device_handle, connection_handler_, heart_beat);
+
+ secondary_connection->SetPrimaryConnectionHandle(kDefaultConnectionHandle);
+ connection_handler::ConnectionHandle expected_primary_connection_handle =
+ kDefaultConnectionHandle;
+ EXPECT_EQ(secondary_connection->primary_connection_handle(),
+ expected_primary_connection_handle);
+
+ AddNewSecondaryService(kAudio);
+ AddNewSecondaryService(kMobileNav);
+
+ delete secondary_connection;
+}
+
+TEST_F(ConnectionTest, RemoveSecondaryServices_SUCCESS) {
+ StartSession();
+
+ ServiceType services[2] = {kMobileNav, kAudio};
+ AddNewSecondaryService(services[0]);
+ AddNewSecondaryService(services[1]);
+ size_t services_count = sizeof(services) / sizeof(services[0]);
+
+ std::list<ServiceType> removed_services;
+ uint8_t ret_session_id = connection_->RemoveSecondaryServices(
+ kSecondaryConnectionHandle, removed_services);
+
+ // check return value
+ EXPECT_EQ(session_id, ret_session_id);
+ // check returned list
+ EXPECT_EQ(services_count, removed_services.size());
+ std::list<protocol_handler::ServiceType>::iterator it;
+ it = std::find(removed_services.begin(), removed_services.end(), services[0]);
+ EXPECT_TRUE(it != removed_services.end());
+ it = std::find(removed_services.begin(), removed_services.end(), services[1]);
+ EXPECT_TRUE(it != removed_services.end());
+}
+
+TEST_F(ConnectionTest, RemoveSecondaryServices_NoService) {
+ StartSession();
+ /* do not call AddNewSecondaryService() */
+
+ std::list<ServiceType> removed_services;
+ uint8_t ret_session_id = connection_->RemoveSecondaryServices(
+ kSecondaryConnectionHandle, removed_services);
+
+ // check return value
+ EXPECT_EQ(0, ret_session_id);
+ // check returned list
+ EXPECT_EQ(0u, removed_services.size());
+}
+
+TEST_F(ConnectionTest, RemoveSecondaryServices_InvalidConnectionHandle) {
+ StartSession();
+
+ ServiceType services[2] = {kMobileNav, kAudio};
+ AddNewSecondaryService(services[0]);
+ AddNewSecondaryService(services[1]);
+
+ transport_manager::ConnectionUID invalid_connection_handle = 123;
+ ASSERT_TRUE(kSecondaryConnectionHandle != invalid_connection_handle);
+
+ std::list<ServiceType> removed_services;
+ uint8_t ret_session_id = connection_->RemoveSecondaryServices(
+ invalid_connection_handle, removed_services);
+
+ // check return value
+ EXPECT_EQ(0, ret_session_id);
+ // check returned list
+ EXPECT_EQ(0u, removed_services.size());
+}
+
#ifdef ENABLE_SECURITY
TEST_F(ConnectionTest, SetSSLContextWithoutSession) {
diff --git a/src/components/connection_handler/test/heart_beat_monitor_test.cc b/src/components/connection_handler/test/heart_beat_monitor_test.cc
index 4c67c97191..e089a07ec4 100644
--- a/src/components/connection_handler/test/heart_beat_monitor_test.cc
+++ b/src/components/connection_handler/test/heart_beat_monitor_test.cc
@@ -51,6 +51,7 @@ namespace connection_handler_test {
using ::testing::DoAll;
using ::testing::_;
+using ::testing::Return;
class HeartBeatMonitorTest : public testing::Test {
public:
@@ -64,6 +65,8 @@ class HeartBeatMonitorTest : public testing::Test {
uint32_t kTimeout;
static const connection_handler::ConnectionHandle kConnectionHandle =
0xABCDEF;
+ static const transport_manager::ConnectionUID kDefaultConnectionHandle = 1;
+ static const uint32_t kDefaultSessionId = 1;
virtual void SetUp() {
conn = new connection_handler::Connection(
@@ -80,25 +83,40 @@ ACTION_P2(RemoveSession, conn, session_id) {
}
TEST_F(HeartBeatMonitorTest, TimerNotStarted) {
+ EXPECT_CALL(connection_handler_mock, AddSession(_))
+ .WillOnce(Return(kDefaultSessionId));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kDefaultSessionId))
+ .WillOnce(Return(true)); // called by destructor of Connection
+
// Whithout StartHeartBeat nothing to be call
EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0);
EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0);
EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, _)).Times(0);
- conn->AddNewSession();
+ conn->AddNewSession(kDefaultConnectionHandle);
}
TEST_F(HeartBeatMonitorTest, TimerNotElapsed) {
+ EXPECT_CALL(connection_handler_mock, AddSession(_))
+ .WillOnce(Return(kDefaultSessionId));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kDefaultSessionId))
+ .WillOnce(Return(true));
+
EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, _)).Times(0);
EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0);
EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0);
- const uint32_t session = conn->AddNewSession();
+ const uint32_t session = conn->AddNewSession(kDefaultConnectionHandle);
conn->StartHeartBeat(session);
}
TEST_F(HeartBeatMonitorTest, TimerElapsed) {
- const uint32_t session = conn->AddNewSession();
+ EXPECT_CALL(connection_handler_mock, AddSession(_))
+ .WillOnce(Return(kDefaultSessionId));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kDefaultSessionId))
+ .WillOnce(Return(true)); // invoked by RemoveSession action
+
+ const uint32_t session = conn->AddNewSession(kDefaultConnectionHandle);
TestAsyncWaiter waiter;
uint32_t times = 0;
@@ -121,11 +139,16 @@ TEST_F(HeartBeatMonitorTest, TimerElapsed) {
}
TEST_F(HeartBeatMonitorTest, KeptAlive) {
+ EXPECT_CALL(connection_handler_mock, AddSession(_))
+ .WillOnce(Return(kDefaultSessionId));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kDefaultSessionId))
+ .WillOnce(Return(true));
+
EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0);
EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0);
EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, _)).Times(0);
- const uint32_t session = conn->AddNewSession();
+ const uint32_t session = conn->AddNewSession(kDefaultConnectionHandle);
conn->StartHeartBeat(session);
usleep(kTimeout * MICROSECONDS_IN_MILLISECONDS - MICROSECONDS_IN_SECOND);
conn->KeepAlive(session);
@@ -137,7 +160,12 @@ TEST_F(HeartBeatMonitorTest, KeptAlive) {
}
TEST_F(HeartBeatMonitorTest, NotKeptAlive) {
- const uint32_t session = conn->AddNewSession();
+ EXPECT_CALL(connection_handler_mock, AddSession(_))
+ .WillOnce(Return(kDefaultSessionId));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kDefaultSessionId))
+ .WillOnce(Return(true));
+
+ const uint32_t session = conn->AddNewSession(kDefaultConnectionHandle);
TestAsyncWaiter waiter;
uint32_t times = 0;
@@ -167,8 +195,20 @@ TEST_F(HeartBeatMonitorTest, NotKeptAlive) {
}
TEST_F(HeartBeatMonitorTest, TwoSessionsElapsed) {
- const uint32_t kSession1 = conn->AddNewSession();
- const uint32_t kSession2 = conn->AddNewSession();
+ const uint32_t kMockSessionId1 = 1;
+ const uint32_t kMockSessionId2 = 2;
+ EXPECT_CALL(connection_handler_mock, AddSession(_))
+ .WillOnce(Return(kMockSessionId1))
+ .WillOnce(Return(kMockSessionId2));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kMockSessionId1))
+ .WillOnce(Return(true));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kMockSessionId2))
+ .WillOnce(Return(true));
+
+ const uint32_t kSession1 = conn->AddNewSession(kDefaultConnectionHandle);
+
+ const transport_manager::ConnectionUID kAnotherConnectionHandle = 2;
+ const uint32_t kSession2 = conn->AddNewSession(kAnotherConnectionHandle);
TestAsyncWaiter waiter;
uint32_t times = 0;
@@ -199,7 +239,12 @@ TEST_F(HeartBeatMonitorTest, TwoSessionsElapsed) {
}
TEST_F(HeartBeatMonitorTest, IncreaseHeartBeatTimeout) {
- const uint32_t kSession = conn->AddNewSession();
+ EXPECT_CALL(connection_handler_mock, AddSession(_))
+ .WillOnce(Return(kDefaultSessionId));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kDefaultSessionId))
+ .WillOnce(Return(true));
+
+ const uint32_t kSession = conn->AddNewSession(kDefaultConnectionHandle);
EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0);
EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0);
@@ -211,7 +256,12 @@ TEST_F(HeartBeatMonitorTest, IncreaseHeartBeatTimeout) {
}
TEST_F(HeartBeatMonitorTest, DecreaseHeartBeatTimeout) {
- const uint32_t kSession = conn->AddNewSession();
+ EXPECT_CALL(connection_handler_mock, AddSession(_))
+ .WillOnce(Return(kDefaultSessionId));
+ EXPECT_CALL(connection_handler_mock, RemoveSession(kDefaultSessionId))
+ .WillOnce(Return(true));
+
+ const uint32_t kSession = conn->AddNewSession(kDefaultConnectionHandle);
TestAsyncWaiter waiter;
uint32_t times = 0;
diff --git a/src/components/dbus/CMakeLists.txt b/src/components/dbus/CMakeLists.txt
deleted file mode 100644
index 26ff9373bf..0000000000
--- a/src/components/dbus/CMakeLists.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (c) 2016, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
-
-include_directories (
- ${DBUS_INCLUDE_DIRS}
- ${CMAKE_CURRENT_SOURCE_DIR}/include/
- ${CMAKE_SOURCE_DIR}/
- ${COMPONENTS_DIR}
- ${COMPONENTS_DIR}/formatters/include/
- ${COMPONENTS_DIR}/smart_objects/include/
- ${COMPONENTS_DIR}/utils/include/
- ${CMAKE_BINARY_DIR}/src/components/
-)
-
-set(PATHS
- ${CMAKE_CURRENT_SOURCE_DIR}/include
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- ${CMAKE_CURRENT_SOURCE_DIR}/src/introspection_xml.cc
- ${CMAKE_CURRENT_BINARY_DIR}/message_descriptions.cc
-)
-collect_sources(SOURCES "${PATHS}")
-
-set(LIBRARIES
- HMI_API
- Utils
- dbus-1
-)
-
-add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/message_descriptions.cc
- COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/codegen/make_message_descriptions.py
- --infile ${CMAKE_CURRENT_SOURCE_DIR}/../interfaces/QT_HMI_API.xml
- --outdir ${CMAKE_CURRENT_BINARY_DIR}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../interfaces/QT_HMI_API.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/codegen/make_message_descriptions.py
-)
-
-add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/introspection_xml.cc
- COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/codegen/make_introspection_c.py
- --infile ${CMAKE_CURRENT_SOURCE_DIR}/../interfaces/QT_HMI_API.xml
- --outdir ${CMAKE_CURRENT_BINARY_DIR}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../interfaces/QT_HMI_API.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/codegen/make_introspection_c.py
-)
-
-add_library("DBus" ${SOURCES})
-
-target_link_libraries("DBus" "${LIBRARIES}")
-
-if(BUILD_TESTS)
- add_subdirectory(test)
-endif()
diff --git a/src/components/dbus/codegen/code_formatter.py b/src/components/dbus/codegen/code_formatter.py
deleted file mode 100644
index c3eb1b7815..0000000000
--- a/src/components/dbus/codegen/code_formatter.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file code_formatter.py
-# @brief Utility that helps to manage indents in generated code
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2013, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-class CodeBlock:
- indent = 0
- def __init__(self, out):
- self.out = out
- if type(out) == file:
- self.indent = 0
- elif type(out) == CodeBlock:
- self.indent = out.indent
- def __enter__(self):
- self.indent += 1
- return self
- def __exit__(self, exc_type, exc_value, traceback):
- if self.indent >= 1:
- self.indent -= 1
- def write(self, s):
- for string in s.splitlines(True):
- self.out.write(' ' * self.indent + string)
-
-# vim: set ts=4 sw=4 et:
-
diff --git a/src/components/dbus/codegen/ford_xml_parser.py b/src/components/dbus/codegen/ford_xml_parser.py
deleted file mode 100644
index 4f9f222d24..0000000000
--- a/src/components/dbus/codegen/ford_xml_parser.py
+++ /dev/null
@@ -1,231 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file ford_xml_parser.py
-# @brief Parser for HMI_API.xml
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2013, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from xml.etree import ElementTree
-from collections import OrderedDict
-
-node_name = '/com/ford/hmi'
-
-class ParamDesc:
- pass
-
-class FordXmlParser:
- def __init__(self, in_el_tree, interface_path=None):
- self.interface_path = interface_path
- self.el_tree = in_el_tree
- self.find_enums()
- self.find_structs()
-
- def find_enums(self):
- self.enums = dict()
- for interface_el in self.el_tree.findall('interface'):
- interface_name = interface_el.get('name')
- for enum_el in interface_el.findall('enum'):
- enum_name = enum_el.get('name')
- self.enums[(interface_name,enum_name)] = enum_el
-
-
- def make_param_desc(self, param_el, iface=None):
- param_desc = ParamDesc()
- param_desc.name = param_el.get('name')
- param_desc.type = param_el.get('type')
- param_desc.enum = False
- param_desc.struct = False
- param_desc.fulltype = param_desc.type
- if param_el.get('mandatory') == 'false':
- param_desc.mandatory = False
- else:
- param_desc.mandatory = True
- if param_el.get('array') == 'true':
- param_desc.array = True
- else:
- param_desc.array = False
- param_desc.minValue = param_el.get('minvalue') if param_el.get('minvalue') else 0
- param_desc.maxValue = param_el.get('maxvalue')
- param_desc.minLength = param_el.get('minlength') if param_el.get('minlength') else 0
- param_desc.maxLength = param_el.get('maxlength')
- param_desc.minSize = param_el.get('minsize')
- param_desc.maxSize = param_el.get('maxsize')
-
- param_desc.restricted = param_desc.minValue != None or \
- param_desc.maxValue != None or \
- param_desc.minLength > 0 or \
- param_desc.maxLength > 0
- param_desc.restrictedArray = param_desc.array and (param_desc.minSize > 0 or param_desc.maxSize > 0)
- if iface is None:
- return param_desc
- if param_desc.type not in ['Integer', 'String', 'Boolean', 'Float']:
- param_type = param_desc.type.split('.')
- if len(param_type) > 1:
- param_type = (param_type[0], param_type[1])
- else:
- param_type = (iface, param_type[0])
- param_desc.fulltype = param_type
- if param_type in self.enums: param_desc.enum = True
- elif param_type in self.structs: param_desc.struct = True
- return param_desc
-
-
- def find_structs(self):
- self.structs = OrderedDict()
- for interface_el in self.el_tree.findall('interface'):
- interface_name = interface_el.get('name')
- for struct_el in interface_el.findall('struct'):
- struct_name = struct_el.get('name')
- self.structs[(interface_name, struct_name)] = []
-
- for interface_el in self.el_tree.findall('interface'):
- interface_name = interface_el.get('name')
- for struct_el in interface_el.findall('struct'):
- struct_name = struct_el.get('name')
- for param_el in struct_el.findall('param'):
- param_desc = self.make_param_desc(param_el, interface_name)
- self.structs[(interface_name, struct_name)].append(param_desc)
-
-
- def convert_struct_to_dbus(self, param_type):
- ret = '('
- struct = self.structs[param_type]
- for param in struct:
- ret = ret + self.convert_to_dbus_type(param)
- ret = ret + ')'
- return ret
-
-
- def convert_to_dbus_type(self, param):
- if param.type == 'Integer': restype = 'i'
- elif param.type == 'String': restype = 's'
- elif param.type == 'Boolean': restype = 'b'
- elif param.type == 'Float': restype = 'd' # D-Bus double
- elif param.enum: restype = 'i' # D-Bus 32-bit signed int
- elif param.struct: restype = self.convert_struct_to_dbus(param.fulltype)
- else: raise RuntimeError('Unknown type: ' + param.type)
- if param.array: restype = 'a' + restype
- if not param.mandatory: restype = '(b' + restype + ')'
- return restype
-
-
- def find_notifications(self, interface_el):
- notifications = list()
- for function_el in interface_el.findall('function[@messagetype="notification"]'):
- notifications.append(function_el)
- return notifications
-
-
- def find_notifications_by_provider(self, interface_el, provider):
- notifications = list()
- condition = 'function[@messagetype="notification"][@provider="%s"]' % provider
- for function_el in interface_el.findall(condition):
- notifications.append(function_el)
- return notifications
-
-
- def find_request_response_pairs(self, interface_el):
- result = list()
- request_els = interface_el.findall('function[@messagetype="request"]')
- response_els = interface_el.findall('function[@messagetype="response"]')
- for request_el in request_els:
- name = request_el.get('name')
- response_el = next(r for r in response_els if r.get('name') == name)
- result.append((request_el, response_el))
- return result
-
-
- def find_request_response_pairs_by_provider(self, interface_el, provider):
- result = list()
- condition = 'function[@messagetype="request"][@provider="%s"]' % provider
- request_els = interface_el.findall(condition)
- response_els = interface_el.findall('function[@messagetype="response"]')
- for request_el in request_els:
- name = request_el.get('name')
- response_el = next(r for r in response_els if r.get('name') == name)
- result.append((request_el, response_el))
- return result
-
-
- def convert_to_signal(self, notification_el, interface):
- result = ElementTree.Element('signal')
- result.set('name', notification_el.get('name'))
- for param_el in notification_el.findall('param'):
- self.create_arg_element(result, param_el, interface)
- return result
-
-
- def convert_to_method(self, (request_el, response_el), interface):
- result = ElementTree.Element('method')
- result.set('name', request_el.get('name'))
- for param_el in request_el.findall('param'):
- arg_el = self.create_arg_element(result, param_el, interface)
- arg_el.set('direction', 'in')
-
- arg_el = ElementTree.SubElement(result, 'arg')
- arg_el.set('name', 'retCode')
- arg_el.set('type', 'i')
- arg_el.set('direction', 'out')
-
- for param_el in response_el.findall('param'):
- arg_el = self.create_arg_element(result, param_el, interface)
- arg_el.set('direction', 'out')
- return result
-
-
- def create_arg_element(self, parent, param_el, interface):
- arg_el = ElementTree.SubElement(parent, 'arg')
- arg_el.set('name', param_el.get('name'))
- arg_el.set('type', self.convert_to_dbus_type(self.make_param_desc(param_el, interface)))
- return arg_el
-
-
- def create_introspection_iface_el(self, interface_el, provider):
- interface = interface_el.get('name')
- interface_name = self.interface_path + '.' + interface
-
- notifications = self.find_notifications_by_provider(interface_el, provider)
- signals = [self.convert_to_signal(n, interface) for n in notifications]
-
- request_responses = self.find_request_response_pairs_by_provider(interface_el, provider)
- methods = [self.convert_to_method(r, interface) for r in request_responses]
-
- if signals or methods:
- el = ElementTree.Element('interface', attrib={'name':interface_name})
- for m in methods: el.append(m)
- for s in signals: el.append(s)
- return el
-
-
-
diff --git a/src/components/dbus/codegen/introspection_xml.cc b/src/components/dbus/codegen/introspection_xml.cc
deleted file mode 100644
index 210c232a4d..0000000000
--- a/src/components/dbus/codegen/introspection_xml.cc
+++ /dev/null
@@ -1,327 +0,0 @@
-// Warning! This file is generated by 'make_introspection_c.py'. Edit at your
-// own risk.
-/**
- * @file instrospections_xml.cc
- * @brief D-Bus introspection XML as C-string
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2013, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-char introspection_xml[] = {
- 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x6e, 0x6f,
- 0x64, 0x65, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d,
- 0x2f, 0x2f, 0x66, 0x72, 0x65, 0x65, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f,
- 0x70, 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, 0x44, 0x2d, 0x42, 0x55, 0x53,
- 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x49, 0x6e, 0x74, 0x72,
- 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e,
- 0x30, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70,
- 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64,
- 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73,
- 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x2f, 0x64, 0x62, 0x75,
- 0x73, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73,
- 0x70, 0x65, 0x63, 0x74, 0x2e, 0x64, 0x74, 0x64, 0x22, 0x3e, 0x0a, 0x3c,
- 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x2f,
- 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6f, 0x72, 0x64, 0x2f, 0x68, 0x6d, 0x69,
- 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6d, 0x2e, 0x66,
- 0x6f, 0x72, 0x64, 0x2e, 0x68, 0x6d, 0x69, 0x2e, 0x73, 0x64, 0x6c, 0x2e,
- 0x42, 0x61, 0x73, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x73, 0x69, 0x67,
- 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e,
- 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x53,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x49, 0x44, 0x22,
- 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e,
- 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69,
- 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f,
- 0x6e, 0x53, 0x44, 0x4c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65,
- 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52,
- 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x4e,
- 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22,
- 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e,
- 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61,
- 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61,
- 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x41, 0x70, 0x70, 0x52, 0x65, 0x67,
- 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x28, 0x73, 0x28, 0x62, 0x73, 0x29, 0x28, 0x62, 0x73,
- 0x29, 0x28, 0x73, 0x73, 0x28, 0x62, 0x69, 0x29, 0x28, 0x62, 0x62, 0x29,
- 0x29, 0x73, 0x28, 0x62, 0x61, 0x28, 0x73, 0x69, 0x29, 0x29, 0x28, 0x62,
- 0x61, 0x73, 0x29, 0x69, 0x69, 0x62, 0x28, 0x62, 0x61, 0x69, 0x29, 0x28,
- 0x62, 0x62, 0x29, 0x28, 0x62, 0x61, 0x69, 0x29, 0x29, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x74, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x28, 0x62, 0x61, 0x28, 0x73, 0x69, 0x29, 0x29, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x76, 0x72, 0x53, 0x79, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x73,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x61, 0x73,
- 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x56, 0x72,
- 0x47, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x73, 0x22, 0x20, 0x74, 0x79,
- 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29, 0x22, 0x20, 0x2f, 0x3e,
- 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70,
- 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c,
- 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67,
- 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e,
- 0x41, 0x70, 0x70, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
- 0x72, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
- 0x65, 0x64, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x61, 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
- 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x50, 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6e,
- 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x61, 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x65, 0x74, 0x68, 0x6f,
- 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
- 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x53, 0x44, 0x4c, 0x43, 0x6c,
- 0x6f, 0x73, 0x65, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x50,
- 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x73, 0x65,
- 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69,
- 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x20,
- 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22, 0x20,
- 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
- 0x22, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x20, 0x74,
- 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79,
- 0x70, 0x65, 0x3d, 0x22, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x79, 0x6e, 0x63,
- 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79,
- 0x70, 0x65, 0x3d, 0x22, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65,
- 0x54, 0x79, 0x70, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65,
- 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f,
- 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x74,
- 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x3e, 0x3c, 0x69, 0x6e, 0x74, 0x65,
- 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6f, 0x72, 0x64, 0x2e, 0x68, 0x6d, 0x69,
- 0x2e, 0x73, 0x64, 0x6c, 0x2e, 0x55, 0x49, 0x22, 0x3e, 0x3c, 0x73, 0x69,
- 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f,
- 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74,
- 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
- 0x22, 0x61, 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67,
- 0x6e, 0x61, 0x6c, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
- 0x61, 0x63, 0x65, 0x3e, 0x3c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
- 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6d,
- 0x2e, 0x66, 0x6f, 0x72, 0x64, 0x2e, 0x68, 0x6d, 0x69, 0x2e, 0x73, 0x64,
- 0x6c, 0x2e, 0x53, 0x44, 0x4c, 0x22, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x68,
- 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x41, 0x63, 0x74,
- 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x22, 0x3e, 0x3c, 0x61,
- 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x61, 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
- 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75,
- 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74,
- 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69,
- 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74,
- 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x53, 0x44,
- 0x4c, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0x20, 0x74, 0x79,
- 0x70, 0x65, 0x3d, 0x22, 0x62, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d,
- 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x62, 0x28, 0x73, 0x73, 0x28, 0x62, 0x69, 0x29, 0x28,
- 0x62, 0x62, 0x29, 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d,
- 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x65, 0x64,
- 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x41, 0x70, 0x70, 0x50,
- 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
- 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
- 0x22, 0x62, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75,
- 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70,
- 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x62, 0x61, 0x28, 0x73, 0x69, 0x28, 0x62, 0x62, 0x29,
- 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75,
- 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x41,
- 0x70, 0x70, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x22, 0x20, 0x74,
- 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61,
- 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
- 0x22, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x20, 0x74,
- 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3e, 0x3c, 0x6d,
- 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x46, 0x72, 0x69, 0x65, 0x6e,
- 0x64, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3e,
- 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64,
- 0x65, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x73,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61,
- 0x67, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62,
- 0x69, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75,
- 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74,
- 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69,
- 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74,
- 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x65, 0x73, 0x73,
- 0x61, 0x67, 0x65, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x28, 0x62, 0x61, 0x28, 0x73, 0x28, 0x62, 0x73, 0x29, 0x28, 0x62, 0x73,
- 0x29, 0x28, 0x62, 0x73, 0x29, 0x28, 0x62, 0x73, 0x29, 0x28, 0x62, 0x73,
- 0x29, 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74,
- 0x68, 0x6f, 0x64, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73,
- 0x74, 0x4f, 0x66, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
- 0x6e, 0x73, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x49, 0x44, 0x22,
- 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x43, 0x6f, 0x64,
- 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20,
- 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
- 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x74,
- 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x28, 0x73, 0x69, 0x28, 0x62, 0x62,
- 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68,
- 0x6f, 0x64, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53,
- 0x44, 0x4c, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x43, 0x6f,
- 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3e, 0x3c, 0x6d,
- 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69,
- 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74,
- 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x43,
- 0x6f, 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20,
- 0x2f, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3e, 0x3c,
- 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
- 0x22, 0x47, 0x65, 0x74, 0x55, 0x52, 0x4c, 0x53, 0x22, 0x3e, 0x3c, 0x61,
- 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67,
- 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22,
- 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72,
- 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20,
- 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f,
- 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x72,
- 0x6c, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62,
- 0x61, 0x28, 0x73, 0x28, 0x62, 0x73, 0x29, 0x29, 0x29, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3e, 0x3c, 0x73,
- 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x4f, 0x6e, 0x41, 0x70, 0x70, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73,
- 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x3e,
- 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61,
- 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x41, 0x70, 0x70, 0x50, 0x65, 0x72,
- 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x76, 0x6f,
- 0x6b, 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28,
- 0x62, 0x62, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x52, 0x65, 0x76,
- 0x6f, 0x6b, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28,
- 0x62, 0x61, 0x28, 0x73, 0x69, 0x28, 0x62, 0x62, 0x29, 0x29, 0x29, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x61, 0x70, 0x70, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73,
- 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74,
- 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61,
- 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70,
- 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22,
- 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
- 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x61,
- 0x69, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x53, 0x44, 0x4c, 0x43, 0x6f,
- 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x22,
- 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x73, 0x73, 0x28, 0x62, 0x69, 0x29, 0x28, 0x62, 0x62,
- 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3e,
- 0x3c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x3e,
- 0x3c, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x3e, 0x00}; \ No newline at end of file
diff --git a/src/components/dbus/codegen/make_hmi_requests.py b/src/components/dbus/codegen/make_hmi_requests.py
deleted file mode 100755
index 4716d40439..0000000000
--- a/src/components/dbus/codegen/make_hmi_requests.py
+++ /dev/null
@@ -1,343 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file make_qml_dbus_cpp.py
-# @brief Generator of QML to QDbus C++ part
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2014, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from argparse import ArgumentParser
-import os.path
-from sys import argv
-from xml.etree import ElementTree
-from copy import copy
-from ford_xml_parser import FordXmlParser, ParamDesc
-from code_formatter import CodeBlock
-
-prefix_class_item = 'Declarative'
-invoke_type_connection = 'Direct'
-
-def defaultValue(param):
- if param.type == "Integer":
- return "0"
- elif param.type == "Float":
- return "0.0"
- elif param.type == "Boolean":
- return "false"
- elif param.enum:
- return "0"
-
-class Impl(FordXmlParser):
- def make_requests_classes_header(self, out):
- for interface_el in self.el_tree.findall('interface'):
- request_responses = self.find_request_response_pairs_by_provider(interface_el, "sdl")
- for (request, response) in request_responses:
- request_full_name = interface_el.get('name') + '_' +request.get('name')
- out.write('class ' + request_full_name + ': public HMIRequest {\n')
- with CodeBlock(out) as output:
- output.write('Q_OBJECT\n')
- out.write(' public:\n')
- with CodeBlock(out) as output:
- output.write(request_full_name + '(QJSValue hmi_callback, QDBusInterface *interface, QList<QVariant> args, QString name):\n')
- output.write(' HMIRequest(hmi_callback, interface, args, name) {}\n')
- out.write(' private:\n')
- with CodeBlock(out) as output:
- output.write('QJSValueList fillArgsList();\n};\n\n')
-
-
- def make_header_file(self, out):
- out.write("namespace requests {\n")
- out.write("class HMIRequest: public QObject {\n")
- with CodeBlock(out) as output:
- output.write('Q_OBJECT\n')
- out.write('public:\n')
- with CodeBlock(out) as output:
- output.write('HMIRequest(QJSValue hmi_callback, QDBusInterface *interface, QList<QVariant> args, QString name );\n')
- out.write('protected:\n')
- with CodeBlock(out) as output:
- output.write('virtual QJSValueList fillArgsList() = 0;\n')
- output.write('QDBusPendingCallWatcher *watcher_;\n')
- output.write('QJSValue hmi_callback_;\n\n')
- output.write('template<typename T>\n')
- output.write('QJSValue CreateQJSValue(T value) {\n')
- output.write(' return QJSValue(value);\n')
- output.write('}\n\n')
- output.write('template<typename T>\n')
- output.write('QJSValue CreateQJSValue(QList<T> value) {\n')
- with CodeBlock(output) as output:
- output.write('QJSValue array = hmi_callback_.engine()->newArray();\n')
- output.write('int i = 0;\n')
- output.write('foreach (T item, value) {\n')
- output.write(' QJSValue value = CreateQJSValue(item);\n')
- output.write(' array.setProperty(i, value);\n')
- output.write(' ++i;\n')
- output.write('}\n')
- output.write('return array;\n')
- output.write('}\n')
- out.write('private:\n')
- with CodeBlock(out) as output:
- output.write('QDBusInterface *interface_;\n')
- output.write('QList<QVariant> args_;\n')
- out.write('public slots:\n')
- with CodeBlock(out) as output:
- output.write('void invokeCallback();\n')
- out.write('};\n\n')
- output.write('template<>\n')
- output.write('QJSValue HMIRequest::CreateQJSValue(QStringList value);\n')
- for (interface_name, struct_name) in self.structs:
- out.write('template<>\n')
- out.write('QJSValue HMIRequest::CreateQJSValue(Common_' + struct_name + ' value);\n\n')
- impl.make_requests_classes_header(out)
- out.write("} // namespace requests\n")
-
-
- def qt_param_type(self, param):
- if not param.mandatory:
- param_copy = copy(param)
- param_copy.mandatory = True
- return "OptionalArgument< " + self.qt_param_type(param_copy) + " >"
- if param.array:
- param_copy = copy(param)
- param_copy.array = False
- if param.type == 'String':
- return "QStringList"
- return "QList< " + self.qt_param_type(param_copy) + " >"
- if param.type == 'Integer' or param.enum:
- return 'int'
- elif param.type == 'String':
- return 'QString'
- elif param.type == 'Boolean':
- return 'bool'
- elif param.type == 'Float':
- return 'double'
- elif param.struct:
- return "_".join(param.fulltype)
- return "xxx"
-
-
- def make_requests_methods_source(self, out):
- for interface_el in self.el_tree.findall('interface'):
- request_responses = self.find_request_response_pairs_by_provider(interface_el, "sdl")
- for (request, response) in request_responses:
- iface_name = interface_el.get('name')
- request_full_name = iface_name + '_' +request.get('name')
- out.write('QJSValueList ' + request_full_name + '::fillArgsList() {\n')
- out.write(' QDBusPendingReply< ')
- count = 0
- for param_el in response.findall('param'):
- param = self.make_param_desc(param_el, iface_name)
- out.write(self.qt_param_type(param))
- count += 1
- if count < len(response.findall('param')):
- out.write(',')
- out.write(' > reply = *watcher_;\n')
-
- with CodeBlock(out) as out:
- out.write('QJSValueList qjsValueList;\n\n')
- out.write('QJSValue param;\n\n')
- count = 0
- for param_el in response.findall('param'):
- if param_el.get('mandatory') == 'false':
- out.write('if (reply.argumentAt<' + str(count) + '>().presence) {\n')
- out.write(' param = CreateQJSValue(reply.argumentAt<' + str(count) + '>().val);\n')
- out.write('} else {\n')
- out.write(' param = QJSValue();\n')
- out.write('}\n')
- out.write('qjsValueList.append(param);\n')
- else:
- out.write('param = CreateQJSValue(reply.argumentAt<' + str(count) + '>());\n')
- out.write('qjsValueList.append(param);\n')
- count += 1
- out.write('return qjsValueList;\n')
- out.write('}\n\n')
-
-
- def make_source_file(self, out):
- out.write("namespace requests {\n")
- for interface_el in self.el_tree.findall('interface'):
- for struct_el in interface_el.findall('struct'):
- out.write('template<>\n')
- out.write('QJSValue HMIRequest::CreateQJSValue(Common_' + struct_el.get('name') + ' value){\n')
- with CodeBlock(out) as output:
- output.write('QJSValue object = hmi_callback_.engine()->newObject();\n')
- for param_el in struct_el.findall('param'):
- param_name = param_el.get('name')
- if param_el.get('mandatory') == 'true':
- with CodeBlock(out) as output:
- output.write('object.setProperty("' + param_name + '", CreateQJSValue(value.' + param_name + '));\n')
- elif param_el.get('mandatory') == 'false':
- with CodeBlock(out) as output:
- output.write('object.setProperty("' + param_name + '", value.' + param_name + '.presence ? CreateQJSValue(value.' + param_name + '.val) : QJSValue());\n')
- out.write('return object;\n')
- out.write('}\n\n')
-
-
- out.write('HMIRequest::HMIRequest(QJSValue hmi_callback, QDBusInterface *interface, QList<QVariant> args, QString name) :\n')
- out.write(' hmi_callback_(hmi_callback), interface_(interface), args_(args) {\n')
- with CodeBlock(out) as output:
- output.write('QDBusPendingCall pcall = interface->asyncCallWithArgumentList(name, args);\n')
- output.write('watcher_ = new QDBusPendingCallWatcher(pcall);\n')
- output.write('QObject::connect(watcher_, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(invokeCallback()));\n}\n\n')
- out.write('void HMIRequest::invokeCallback() {\n')
- with CodeBlock(out) as output:
- output.write('if (!hmi_callback_.isUndefined()) {\n')
- with CodeBlock(output) as output:
- output.write('QJSValueList qjsValueList;\n')
- output.write('qjsValueList = this->fillArgsList();\n')
- output.write('hmi_callback_.call(qjsValueList);\n')
- output.write('}\n')
- output.write('watcher_->deleteLater();\n')
- output.write('this->deleteLater();\n}\n\n')
- impl.make_requests_methods_source(out)
- out.write("} // namespace requests\n")
-
-
-arg_parser = ArgumentParser(description="Generator of Qt to QDbus C++ part")
-arg_parser.add_argument('--infile', required=True, help="full name of input file, e.g. applink/src/components/interfaces/QT_HMI_API.xml")
-arg_parser.add_argument('--version', required=False, help="Qt version 4.8.5 (default) or 5.1.0")
-arg_parser.add_argument('--outdir', required=True, help="path to directory where output files request_to_sdl.h, request_to_sdl.cc will be saved")
-args = arg_parser.parse_args()
-
-if args.version == "4.8.5":
- prefix_class_item = 'Declarative'
- invoke_type_connection = 'Direct'
-elif args.version == "5.1.0":
- prefix_class_item = 'Quick'
- invoke_type_connection = 'BlockingQueued'
-
-header_name = 'hmi_requests.h'
-source_name = 'hmi_requests.cc'
-
-in_tree = ElementTree.parse(args.infile)
-in_tree_root = in_tree.getroot()
-
-impl = Impl(in_tree_root, 'com.ford.sdl.hmi')
-
-header_out = open(args.outdir + '/' + header_name, "w")
-source_out = open(args.outdir + '/' + source_name, "w")
-
-header_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-header_out.write("""/**
- * @file hmi_requests.h
- * @brief Generated class that process requests from qtHMI
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2014, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-""")
-header_out.write("#ifndef SRC_COMPONENTS_QTHMI_QMLMODELQT5_HMIREQUESTS_\n");
-header_out.write("#define SRC_COMPONENTS_QTHMI_QMLMODELQT5_HMIREQUESTS_\n\n");
-header_out.write("#include <QObject>\n");
-header_out.write("#include <QJSValue>\n");
-header_out.write("#include <QDBusPendingCall>\n");
-header_out.write("#include <QDBusPendingCallWatcher>\n");
-header_out.write('#include <QDBusPendingReply>\n');
-header_out.write("#include <QDBusAbstractInterface>\n");
-header_out.write("#include <QDBusInterface>\n");
-header_out.write("#include <QJSEngine>\n");
-
-header_out.write('#include "qml_dbus.h"\n\n');
-
-impl.make_header_file(header_out)
-
-header_out.write("#endif // SRC_COMPONENTS_QTHMI_QMLMODELQT5_HMIREQUESTS_\n");
-
-source_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-source_out.write("""/**
- * @file hmi_requests.cc
- * @brief Generated class that process requests from qtHMI
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2014, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-""")
-source_out.write('#include "hmi_requests.h"\n\n')
-impl.make_source_file(source_out)
diff --git a/src/components/dbus/codegen/make_introspection_c.py b/src/components/dbus/codegen/make_introspection_c.py
deleted file mode 100755
index 22a53f308d..0000000000
--- a/src/components/dbus/codegen/make_introspection_c.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file make_introspection_c.py
-# @brief Converts introspection.xml to C-string
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2013, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from argparse import ArgumentParser
-from ford_xml_parser import FordXmlParser
-from ford_xml_parser import node_name
-from xml.etree import ElementTree
-from os import path
-from sys import argv
-
-class Impl(FordXmlParser):
- def convert_to_introspection(self, out_el_tree):
- for interface_el in self.el_tree.findall('interface'):
- el = self.create_introspection_iface_el(interface_el, 'sdl')
- if el is not None:
- out_el_tree.append(el)
-
-arg_parser = ArgumentParser(description='Converts introspection.xml to C-string')
-arg_parser.add_argument('--infile', required=True, help="Full name of input file, e.g. applink/src/components/interfaces/QT_HMI_API.xml")
-arg_parser.add_argument('--outdir', required=True, help="Path to directory where output file introspection_xml.cc will be saved")
-args = arg_parser.parse_args()
-
-if not path.isdir(args.outdir):
- makedirs(args.outdir)
-
-out_file = open(args.outdir + '/' + 'introspection_xml.cc', "w")
-
-in_tree = ElementTree.parse(args.infile)
-in_tree_root = in_tree.getroot()
-out_tree_root = ElementTree.Element('node', attrib={'name':node_name})
-
-impl = Impl(in_tree_root, 'com.ford.hmi.sdl')
-impl.convert_to_introspection(out_tree_root)
-
-introspection_string = '<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">'
-introspection_string += "\n"
-introspection_string += ElementTree.tostring(out_tree_root)
-
-out_file.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-out_file.write("""/**
- * @file instrospections_xml.cc
- * @brief D-Bus introspection XML as C-string
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2013, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-""")
-
-out_file.write("char introspection_xml[] = {")
-
-cnt = 0
-for char in introspection_string:
- if cnt % 12 == 0:
- out_file.write("\n ")
- else:
- out_file.write(" ")
- out_file.write("0x%02x," % ord(char))
- cnt = cnt + 1
-
-out_file.write(" 0x00\n")
-out_file.write("};")
-
diff --git a/src/components/dbus/codegen/make_message_descriptions.py b/src/components/dbus/codegen/make_message_descriptions.py
deleted file mode 100755
index 0079666392..0000000000
--- a/src/components/dbus/codegen/make_message_descriptions.py
+++ /dev/null
@@ -1,273 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file make_message_descriptions.py
-# @brief Generates HMI API message descriptions for D-Bus
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2013, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from argparse import ArgumentParser
-from xml.etree import ElementTree
-from copy import copy
-from ford_xml_parser import FordXmlParser
-from os import path
-from sys import argv
-
-namespace_name = 'ford_message_descriptions'
-namespace = namespace_name + '::'
-
-
-class Impl(FordXmlParser):
- def write_param_definition(self, param_var_name, param, out):
- if param.array:
- tmp_param = copy(param)
- tmp_param.array = False
- tmp_param.mandatory = True
- dbus_sig = self.convert_to_dbus_type(tmp_param)
- self.write_param_definition(param_var_name + '_array', tmp_param, out)
-
- if param.array: out.write('const ' + namespace + 'ArrayDescription ')
- elif param.struct: out.write('const ' + namespace + 'StructDescription ')
- else: out.write('const ' + namespace + 'ParameterDescription ')
-
- out.write(param_var_name + " = {\n")
-
- if param.struct or param.array:
- out.write(" {\n")
- shift = ' ' * 4
- else:
- shift = ' ' * 2
-
- out.write(shift + "\"" + param.name + "\",\n")
-
- if param.array:
- out.write(shift + namespace + "Array,\n")
- elif param.struct:
- out.write(shift + namespace + "Struct,\n")
- elif param.enum:
- out.write(shift + namespace + "Enum,\n")
- else:
- out.write(shift + namespace + param.type + ",\n")
-
- if param.mandatory:
- out.write(shift + "true\n")
- else:
- out.write(shift + "false\n")
-
- if param.struct or param.array:
- out.write(" },\n")
- if param.array:
- out.write(" (const " + namespace + "ParameterDescription*)&" + param_var_name + "_array,\n")
- out.write(" \"" + dbus_sig + "\"\n")
- elif param.struct:
- out.write(" Structs::" + param.fulltype[0] + "__" + param.fulltype[1] + "__parameters\n")
- out.write("};\n")
-
-
- def write_struct_params_declarations(self, out):
- out.write("struct Structs {\n");
- for (interface, name), params in self.structs.iteritems():
- params_var_name = interface + '__' + name + '__parameters'
- out.write(" static const " + namespace + "ParameterDescription* " + params_var_name + "[];\n")
- out.write("};\n\n")
-
-
- def write_enum_entries_declarations(self, out):
- out.write("struct Enums {\n");
- for interface, name in self.enums:
- entries_var_name = interface + '__' + name + '__entries'
- out.write(" static const " + namespace + "EnumDescription::Entry* " + entries_var_name + "[];\n")
- out.write("};\n\n")
-
-
- def write_parameters(self, params, out, name):
- n = 1
- for param in params:
- param_var_name = name + str(n)
- n = n + 1
- self.write_param_definition(param_var_name, param, out)
-
-
- def write_struct_params_definitions(self, out):
- for (interface, name), params in self.structs.iteritems():
- param_var_name = interface + '__' + name + '__parameter'
- self.write_parameters(params, out, param_var_name)
- params_var_name = 'Structs::' + interface + '__' + name + '__parameters'
- out.write("const " + namespace + "ParameterDescription* " + params_var_name + "[] = {\n")
- for n in range(1, len(params) + 1):
- name = param_var_name + str(n)
- out.write(" (const " + namespace + "ParameterDescription*)&" + name + ",\n")
- out.write( " NULL };\n\n")
-
-
- def write_enum_entries_definitions(self, out):
- for (interface, name), enum_el in self.enums.iteritems():
- n = 1
- for element_el in enum_el.findall('element'):
- entry_var_name = interface + '__' + name + '__entry' + str(n)
- value = element_el.get("value")
- if value is None:
- value = str(n)
- out.write(namespace + "EnumDescription::Entry " + entry_var_name + " = {\"" + element_el.get("name") + "\", " + value + "};\n")
- n = n + 1
-
- entries_var_name = "Enums::" + interface + '__' + name + '__entries'
- out.write("const " + namespace + "EnumDescription::Entry* " + entries_var_name + "[] = {\n")
- for n in range(1, len(enum_el.findall('element')) + 1):
- entry_var_name = interface + '__' + name + '__entry' + str(n)
- out.write(" &" + entry_var_name + ",\n")
- out.write(" NULL };\n\n")
-
-
- def write_message_definition(self, message_el, interface, out):
- name = message_el.get('name')
- messagetype = message_el.get('messagetype')
- params = list()
- for param_el in message_el.findall('param'):
- param_desc = self.make_param_desc(param_el, interface)
- params.append(param_desc)
- param_var_name = interface + '__' + name + '__' + messagetype + '__parameter'
- self.write_parameters(params, out, param_var_name)
-
- params_var_name = param_var_name + 's'
- out.write("const " + namespace + "ParameterDescription* " + params_var_name + "[] = {\n")
- for n in range(1, len(params) + 1):
- param_name = param_var_name + str(n)
- out.write(" (const " + namespace + "ParameterDescription*)&" + param_name + ",\n")
- out.write(" NULL };\n")
-
- message_desc_name = interface + '__' + name + '__' + messagetype
- out.write("const " + namespace + "MessageDescription " + message_desc_name + " = {\n")
- out.write(" \"" + interface + "\",\n")
- out.write(" \"" + name + "\",\n")
- out.write(" hmi_apis::messageType::" + messagetype + ",\n")
- out.write(" hmi_apis::FunctionID::" + interface + "_" + name + ",\n")
- out.write(" " + params_var_name + "\n")
- out.write("};\n\n")
-
-
- def write_message_definitions(self, out):
- for interface_el in self.el_tree.findall('interface'):
- interface = interface_el.get('name')
- message_els = interface_el.findall('function')
- for message_el in message_els:
- self.write_message_definition(message_el, interface, out)
-
-
- def make_message_descriptions(self, out):
- self.write_struct_params_declarations(out)
- #self.write_enum_entries_declarations(out)
- self.write_struct_params_definitions(out)
- #self.write_enum_entries_definitions(out)
- self.write_message_definitions(out)
-
-
- def make_message_array(self, out):
- out.write("const MessageDescription* message_descriptions[] = {\n")
- for interface_el in self.el_tree.findall('interface'):
- interface = interface_el.get('name')
- message_els = interface_el.findall('function')
- for message_el in message_els:
- name = message_el.get('name')
- messagetype = message_el.get('messagetype')
- message_desc_name = interface + '__' + name + '__' + messagetype
- out.write(" &" + message_desc_name + ",\n")
- out.write(" NULL\n")
- out.write("};\n")
-
-
-arg_parser = ArgumentParser(description="Generates HMI API message descriptions for D-Bus on SDL core side")
-arg_parser.add_argument('--infile', required=True, help="full name of input file, e.g. applink/src/components/interfaces/QT_HMI_API.xml")
-arg_parser.add_argument('--outdir', required=True, help="path to directory where output file message_descriptions.cc will be saved")
-args = arg_parser.parse_args()
-
-if not path.isdir(args.outdir):
- makedirs(args.outdir)
-
-outfile = 'message_descriptions.cc'
-
-in_tree = ElementTree.parse(args.infile)
-in_tree_root = in_tree.getroot()
-
-impl = Impl(in_tree_root)
-
-out = open(args.outdir + "/" + outfile, "w")
-
-out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-out.write("""/**
- * @file message_descriptions.cc
- * @brief Generated HMI API message descriptions for D-Bus
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2013, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-""")
-
-out.write("#include \"dbus/message_descriptions.h\"\n\n");
-out.write("namespace {\n\n");
-impl.make_message_descriptions(out)
-out.write("}\n\n");
-
-out.write("namespace " + namespace_name + " {\n\n");
-impl.make_message_array(out)
-out.write("}\n\n");
-
diff --git a/src/components/dbus/codegen/make_notifications_qml.py b/src/components/dbus/codegen/make_notifications_qml.py
deleted file mode 100755
index 3c173e8b4f..0000000000
--- a/src/components/dbus/codegen/make_notifications_qml.py
+++ /dev/null
@@ -1,387 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file make_qml_dbus_cpp.py
-# @brief Generator of QML to QDbus C++ part
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2014, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from argparse import ArgumentParser
-import os.path
-from sys import argv
-from xml.etree import ElementTree
-from copy import copy
-from ford_xml_parser import FordXmlParser, ParamDesc
-from code_formatter import CodeBlock
-
-class Notifications_qml(FordXmlParser):
- #Used for qt signal names, because qt signals cannot begin with a capital letter
- def first_letter_to_lower_case(self, s):
- if len(s) == 0:
- return s
- else:
- return s[0].lower() + s[1:]
-
- def make_header(self, out):
- out.write("class SdlProxy: public Item {\n")
- with CodeBlock(out) as out:
- out.write("Q_OBJECT\n")
- out.write("Q_DISABLE_COPY(SdlProxy)\n")
- out.write("public:\n")
- out.write("explicit SdlProxy(Item* parent = 0);\n")
- out.write("private:\n")
- out.write("QDBusInterface *sdlBasicCommunicationInterface;\n")
- out.write("signals:\n")
- for interface_el in self.el_tree.findall('interface'):
- iface_name = interface_el.get('name')
- notifications = self.find_notifications_by_provider(interface_el, "sdl")
- for notification_el in notifications:
- with CodeBlock(out) as out:
- out.write("void %s(" % self.first_letter_to_lower_case( notification_el.get("name")) )
- param_el_count = 1
- list_of_params = notification_el.findall("param")
- list_of_params_len = len(list_of_params)
- for param_el in list_of_params:
- param = self.make_param_desc(param_el, iface_name)
- out.write("QVariant %s" % param_el.get("name"))
- if param_el_count < list_of_params_len:
- out.write(", ")
- param_el_count += 1
- out.write(");\n")
- with CodeBlock(out) as out:
- out.write("private slots:\n")
- for interface_el in self.el_tree.findall('interface'):
- iface_name = interface_el.get('name')
- notifications = self.find_notifications_by_provider(interface_el, "sdl")
- for notification_el in notifications:
- with CodeBlock(out) as out:
- out.write("void slot_%s(" % notification_el.get("name"))
- param_el_count = 1
- list_of_params = notification_el.findall("param")
- list_of_params_len = len(list_of_params)
- for param_el in list_of_params:
- param = self.make_param_desc(param_el, iface_name)
- out.write("%s %s" % (self.qt_param_type(param), param_el.get("name")))
- if param_el_count < list_of_params_len:
- out.write(", ")
- param_el_count += 1
- out.write(");\n")
- out.write("};\n")
-
-
- def qt_param_type(self, param):
- if not param.mandatory:
- param_copy = copy(param)
- param_copy.mandatory = True
- return "OptionalArgument< " + self.qt_param_type(param_copy) + " >"
- if param.array:
- param_copy = copy(param)
- param_copy.array = False
- if param.type == 'String':
- return "QStringList"
- return "QList< " + self.qt_param_type(param_copy) + " >"
- if param.type == 'Integer' or param.enum:
- return 'int'
- elif param.type == 'String':
- return 'QString'
- elif param.type == 'Boolean':
- return 'bool'
- elif param.type == 'Float':
- return 'double'
- elif param.struct:
- return "_".join(param.fulltype)
- else:
- raise RuntimeError('Unknown type: ' + param.type)
-
-
- def qml_param_type(self, param):
- if not param.mandatory:
- return "QVariant"
- if param.array:
- return "QVariant"
- if param.type == 'Integer' or param.enum:
- return 'int'
- elif param.type == 'String':
- return 'QString'
- elif param.type == 'Boolean':
- return 'bool'
- elif param.type == 'Float':
- return 'double'
- elif param.struct:
- return "QVariant"
- else:
- raise RuntimeError('Unknown type: ' + param.type)
-
-
- def make_source(self, out):
- def qml_args(variable_name_needed):
- param_el_count = 1
- list_of_params = notification_el.findall("param")
- list_of_params_len = len(list_of_params)
- for param_el in list_of_params:
- param = self.make_param_desc(param_el, iface_name)
- if variable_name_needed:
- out.write("%s %s" % (self.qt_param_type(param), param_el.get("name")))
- else:
- out.write("%s" % self.qt_param_type(param))
- if param_el_count < list_of_params_len:
- out.write(", ")
- param_el_count += 1
- out.write("SdlProxy::SdlProxy(Item *parent): Item(parent) {\n")
- for interface_el in self.el_tree.findall('interface'):
- iface_name = interface_el.get('name')
- notifications = self.find_notifications_by_provider(interface_el, "sdl")
- for notification_el in notifications:
- notification_name = notification_el.get('name')
- with CodeBlock(out) as out:
- out.write("QDBusConnection::sessionBus().connect(\n")
- with CodeBlock(out) as out:
- out.write("\"com.ford.sdl.core\", \"/\", \"com.ford.sdl.core.%s\",\n" % iface_name)
- out.write("\"%s\", this, SLOT(slot_%s(" % (notification_name, notification_el.get("name")))
- qml_args(variable_name_needed = False)
- out.write(")));\n")
- out.write("}\n\n")
- for interface_el in self.el_tree.findall('interface'):
- iface_name = interface_el.get('name')
- notifications = self.find_notifications_by_provider(interface_el, "sdl")
- for notification_el in notifications:
- notific_full_name = interface_el.get("name") + "_" + notification_el.get("name")
- out.write("void SdlProxy::slot_%s(" % notification_el.get("name"))
- qml_args(variable_name_needed = True)
- out.write(") {\n")
- with CodeBlock(out) as out:
- out.write("LOG4CXX_TRACE(logger_, \"ENTER\");\n\n")
- for param_el in notification_el.findall("param"):
- param = self.make_param_desc(param_el, iface_name)
- tmp_param_name = param.name + "_qvariant"
- out.write("QVariant %s;\n" % tmp_param_name)
- out.write("%s = ValueToVariant(%s);\n" % (tmp_param_name, param.name))
- self.write_param_validation(param, param.name, "\nLOG4CXX_ERROR(logger_, \"%s in %s out of bounds\")" % (param.name, notific_full_name), out)
- out.write("\n")
- out.write("emit %s(" % self.first_letter_to_lower_case( notification_el.get("name")) )
- param_el_count = 1
- list_of_params = notification_el.findall("param")
- list_of_params_len = len(list_of_params)
- for param_el in list_of_params:
- param = self.make_param_desc(param_el, iface_name)
- out.write("%s" % param.name + "_qvariant")
- if param_el_count < list_of_params_len:
- out.write(", ")
- param_el_count += 1
- out.write(");\n")
- with CodeBlock(out) as out:
- out.write("LOG4CXX_TRACE(logger_, \"EXIT\");\n")
- out.write("}\n\n")
-
-
-
- def write_param_validation(self, param, param_name, fail_statement, out, level=0):
- if not param.mandatory and (param.restricted or param.restrictedArray or (param.struct and any(map(lambda x: x.restricted, self.structs[param.fulltype])))):
- out.write("if (%s.presence) {\n" % param_name)
- param_copy = copy(param)
- param_copy.mandatory = True
- with CodeBlock(out) as out:
- self.write_param_validation(param_copy, param_name + ".val", fail_statement, out, level+1)
- out.write("}\n")
- elif param.array:
- if param.minSize > 0:
- out.write("if ({0}.count() < {1}) {{".format(param_name, param.minSize))
- with CodeBlock(out) as out:
- out.write("{0};\n".format(fail_statement))
- out.write("}\n")
- if param.maxSize != None:
- out.write("if ({0}.count() > {1}) {{".format(param_name, param.maxSize))
- with CodeBlock(out) as out:
- out.write("{0};\n".format(fail_statement))
- out.write("}\n")
- if param.restricted:
- out.write('for ({0}::const_iterator it_{2} = {1}.begin(); it_{2} != {1}.end(); ++it_{2}) {{\n'.format(self.qt_param_type(param), param_name, level))
- with CodeBlock(out) as out:
- param_copy = copy(param)
- param_copy.array = False
- self.write_param_validation(param_copy, "(*it_{0})".format(level), fail_statement, out, level+1)
- out.write("}\n")
- elif param.struct:
- for p in self.structs[param.fulltype]:
- self.write_param_validation(p, "{0}.{1}".format(param_name, p.name), fail_statement, out, level+1)
- elif param.type == "Integer" or param.type == "Float":
- conditions = []
- if (param.minValue != None):
- conditions.append("(%s < %s)" % (param_name, param.minValue))
- if (param.maxValue != None):
- conditions.append("(%s > %s)" % (param_name, param.maxValue))
- if conditions:
- out.write('if (%s) {' % ' || '.join(conditions))
- with CodeBlock(out) as out:
- out.write('%s;\n' % fail_statement)
- out.write("}\n")
- elif param.type == "String":
- conditions = []
- if (param.minLength > 0):
- conditions.append("(%s.size() < %s)" % (param_name, param.minLength))
- if (param.maxLength > 0):
- conditions.append("(%s.size() > %s)" % (param_name, param.maxLength))
- if conditions:
- out.write('if (%s) {' % ' || '.join(conditions))
- with CodeBlock(out) as out:
- out.write('%s;\n' % (fail_statement))
- out.write("}\n")
-
-
-#QVarian name;
-#if (ttsName.presence) {
-
-
-
-arg_parser = ArgumentParser(description="Generator of classes which Qt to QDbus C++ part")
-arg_parser.add_argument('--infile', required=True, help="full name of input file, e.g. applink/src/components/interfaces/QT_HMI_API.xml")
-arg_parser.add_argument('--version', required=False, help="Qt version 4.8.5 (default) or 5.1.0")
-arg_parser.add_argument('--outdir', required=True, help="path to directory where output files request_to_sdl.h, request_to_sdl.cc will be saved")
-args = arg_parser.parse_args()
-
-
-if args.version == "4.8.5":
- prefix_class_item = 'Script'
- invoke_type_connection = 'Direct'
-elif args.version == "5.1.0":
- prefix_class_item = 'JS'
- invoke_type_connection = 'BlockingQueued'
-else:
- prefix_class_item = 'JS'
- invoke_type_connection = 'BlockingQueued'
-
-header_name = 'sdl_proxy.h'
-source_name = 'sdl_proxy.cc'
-
-in_tree = ElementTree.parse(args.infile)
-in_tree_root = in_tree.getroot()
-
-impl = Notifications_qml(in_tree_root, 'com.ford.sdl.hmi')
-
-header_out = open(args.outdir + '/' + header_name, "w")
-source_out = open(args.outdir + '/' + source_name, "w")
-
-header_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-header_out.write("""
-/*
- Copyright (c) 2014, Ford Motor Company
- 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 Ford Motor Company 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 HOLDER 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.
-*/
-""")
-header_out.write("#ifndef SRC_COMPONENTS_QT_HMI_QML_PLUGINS_DBUS_ADAPTER_SDL_PROXY_H_\n")
-header_out.write("#define SRC_COMPONENTS_QT_HMI_QML_PLUGINS_DBUS_ADAPTER_SDL_PROXY_H_\n\n")
-header_out.write("#include \"qml_dbus.h\"\n")
-header_out.write("#include \"qt_version.h\"\n\n")
-header_out.write("#include <QtCore/QVariant>\n")
-header_out.write("#include <QtDBus/QDBusInterface>\n")
-header_out.write("#if QT_4\n")
-header_out.write("#include <QtDeclarative/QDeclarativeItem>\n")
-header_out.write("typedef QDeclarativeItem Item;\n")
-header_out.write("#elif QT_5\n")
-header_out.write("#include <QtQuick/QQuickItem>\n")
-header_out.write("typedef QQuickItem Item;\n")
-header_out.write("#endif // QT_VERSION\n")
-
-impl.make_header(header_out)
-
-header_out.write("#endif // SRC_COMPONENTS_QT_HMI_QML_PLUGINS_DBUS_ADAPTER_REQUEST_TO_SDL_H_")
-
-
-source_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-source_out.write("""
-/*
- Copyright (c) 2014, Ford Motor Company
- 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 Ford Motor Company 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 HOLDER 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.
-*/
-
-""")
-
-source_out.write("#include \"sdl_proxy.h\"\n")
-source_out.write("#include \"utils/logger.h\"\n")
-source_out.write("CREATE_LOGGERPTR_GLOBAL(logger_, \"DBusPlugin\")\n\n")
-
-impl.make_source(source_out)
diff --git a/src/components/dbus/codegen/make_qml_dbus_cpp.py b/src/components/dbus/codegen/make_qml_dbus_cpp.py
deleted file mode 100755
index f40bc74df8..0000000000
--- a/src/components/dbus/codegen/make_qml_dbus_cpp.py
+++ /dev/null
@@ -1,736 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file make_qml_dbus_cpp.py
-# @brief Generator of QML to QDbus C++ part
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2013, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from argparse import ArgumentParser
-import os.path
-from sys import argv
-from xml.etree import ElementTree
-from copy import copy
-from ford_xml_parser import FordXmlParser, ParamDesc
-from code_formatter import CodeBlock
-
-prefix_class_item = 'Declarative'
-invoke_type_connection = 'Direct'
-
-def defaultValue(param):
- if param.type == "Integer":
- return "0"
- elif param.type == "Float":
- return "0.0"
- elif param.type == "Boolean":
- return "false"
- elif param.enum:
- return "0"
-
-class Impl(FordXmlParser):
- def make_dbus_type_declarations(self, out):
- for struct in self.structs.items():
- self.write_struct_declaration(struct, out)
-
- def make_dbus_metatype_declarations(self, out):
- for struct in self.structs.items():
- self.write_struct_metatype_declaration(struct, out)
-
-
- def write_struct_declaration(self, ((iface, name), params), out):
- struct_name = "{0}_{1}".format(iface, name)
- out.write("struct {0} {{\n".format(struct_name))
- with CodeBlock(out) as out:
- for param in params:
- out.write("{0} {1};\n".format(self.qt_param_type(param), param.name))
- out.write("{0}()\n".format(struct_name))
- initializersList = map(lambda x: "{0}({1})".format(x.name, defaultValue(x)), [p for p in params if p.type != "String" and not p.struct and not p.array])
- if initializersList:
- out.write(": " + ",\n ".join(initializersList))
-
- out.write("{ }\n")
-
- out.write("};\n")
- out.write('QDBusArgument& operator << (QDBusArgument&, const ' + struct_name + "&);\n")
- out.write('const QDBusArgument& operator >> (const QDBusArgument&, ' + struct_name + "&);\n")
- out.write('void PutArgToMap(QVariantMap& map, const char* name, const ' + struct_name + "& v);\n")
- out.write('QVariant ValueToVariant(const ' + struct_name + "& v);\n")
- out.write('QVariant ValueToVariant(const QList<' + struct_name + " >& v);\n")
- out.write('bool GetArgFromMap(const QVariantMap& map, const char* name, ' + struct_name + "& v);\n")
- out.write('bool VariantToValue(const QVariant& variant, ' + struct_name + "& v);\n")
- out.write('bool VariantToValue(const QVariant& variant, QList<' + struct_name + " >& v);\n")
-
-
- def write_struct_metatype_declaration(self, ((iface, name), params), out):
- struct_name = iface + '_' + name
- out.write('Q_DECLARE_METATYPE(' + struct_name + ")\n")
- out.write('Q_DECLARE_METATYPE(OptionalArgument<' + struct_name + ">)\n")
- out.write('Q_DECLARE_METATYPE(QList<' + struct_name + ">)\n")
- out.write('Q_DECLARE_METATYPE(OptionalArgument<QList<' + struct_name + "> >)\n\n")
-
-
- def make_dbus_type_definitions(self, out):
- for struct in self.structs.items():
- self.write_struct_definition(struct, out)
-
- def write_struct_definition(self, ((iface, name), params), out):
- struct_name = iface + '_' + name
-
- out.write('QDBusArgument& operator << (QDBusArgument& arg, const ' + struct_name + "& v) {\n")
- with CodeBlock(out) as out:
- out.write("arg.beginStructure();\n")
- for param in params:
- out.write("arg << v.{0};\n".format(param.name))
- out.write("arg.endStructure();\n")
- out.write("return arg;\n")
- out.write("}\n\n")
-
- out.write('const QDBusArgument& operator >> (const QDBusArgument& arg, ' + struct_name + "& v) {\n")
- with CodeBlock(out) as out:
- out.write("arg.beginStructure();\n")
- for param in params:
- out.write("arg >> v.{0};\n".format(param.name))
- out.write("arg.endStructure();\n")
- out.write("return arg;\n")
- out.write("}\n\n")
-
- out.write('QVariant ValueToVariant(const ' + struct_name + "& v) {\n")
- with CodeBlock(out) as out:
- out.write("QVariantMap map;\n")
- for param in params:
- out.write("""PutArgToMap(map, "{0}", v.{0});\n""".format(param.name))
- out.write("return QVariant::fromValue(map);\n")
- out.write("}\n\n")
-
- out.write('QVariant ValueToVariant(const QList<' + struct_name + ">& v) {\n")
- with CodeBlock(out) as out:
- out.write("QList<QVariant> ret;\n")
- out.write("for (QList<{0}>::const_iterator i = v.begin(); i != v.end(); ++i)\n".format(struct_name))
- with CodeBlock(out) as out:
- out.write("ret.append(ValueToVariant(*i));\n")
- out.write("return QVariant::fromValue(ret);\n")
- out.write("}\n\n")
-
- out.write('void PutArgToMap(QVariantMap& map, const char* name, const ' + struct_name + "& v) {\n")
- with CodeBlock(out) as out:
- out.write("map.insert(name, ValueToVariant(v));\n")
- out.write("}\n\n")
-
- out.write('bool VariantToValue(const QVariant& variant, ' + struct_name + "& v) {\n")
- with CodeBlock(out) as out:
- out.write("if (variant.type() != QVariant::Map) {\n")
- with CodeBlock(out) as out:
- out.write("""LOG4CXX_ERROR(logger_, "Input argument isn't a map");\n""")
- out.write("return false;\n")
- out.write("}\n")
- out.write("QVariantMap map = variant.toMap();\n")
- for param in params:
- out.write("if (!GetArgFromMap(map, \"" + param.name + "\", v." + param.name + ")) return false;\n")
- out.write("return true;\n")
- out.write("}\n\n")
-
- out.write('bool VariantToValue(const QVariant& variant, QList<' + struct_name + ">& v) {\n")
- with CodeBlock(out) as out:
- out.write("if (variant.type() != QVariant::List) {\n")
- with CodeBlock(out) as out:
- out.write("""LOG4CXX_ERROR(logger_, "Input argument isn't a list");\n""")
- out.write("return false;\n")
- out.write("}\n")
- out.write("QList<QVariant> list = variant.toList();\n")
- out.write("for (QList<QVariant>::const_iterator i = list.begin(); i != list.end(); ++i) {\n");
- with CodeBlock(out) as out:
- out.write(struct_name + " s;\n");
- out.write("if (!VariantToValue(*i, s)) return false;\n");
- out.write("v.append(s);\n");
- out.write("}\n")
- out.write("return true;\n")
- out.write("}\n\n")
-
- out.write('bool GetArgFromMap(const QVariantMap& map, const char* name, ' + struct_name + "& v) {\n")
- with CodeBlock(out) as out:
- out.write("QVariantMap::const_iterator it = map.find(name);\n")
- out.write("if (map.end() == it) {\n")
- with CodeBlock(out) as out:
- out.write("""LOG4CXX_WARN(logger_, "Argument '" << name << "' not found");\n""")
- out.write("return false;\n")
- out.write("}\n")
- out.write("if (it->type() != QVariant::Map) {\n")
- with CodeBlock(out) as out:
- out.write("""LOG4CXX_ERROR(logger_, "Argument '" << name << "' isn't a map");\n""")
- out.write("return false;\n")
- out.write("}\n")
- out.write("const QVariantMap& inmap = it->toMap();\n")
- for param in params:
- out.write("if (!GetArgFromMap(inmap, \"" + param.name + "\", v." + param.name + ")) return false;\n")
- out.write("return true;\n")
- out.write("}\n\n")
-
- def write_param_validation(self, param, param_name, fail_statement, out, level=0):
- if not param.mandatory and (param.restricted or param.restrictedArray or (param.struct and any(map(lambda x: x.restricted, self.structs[param.fulltype])))):
- out.write("if (%s.presence) {\n" % param_name)
- param_copy = copy(param)
- param_copy.mandatory = True
- with CodeBlock(out) as out:
- self.write_param_validation(param_copy, param_name + ".val", fail_statement, out, level+1)
- out.write("}\n")
- elif param.array:
- if param.minSize > 0:
- out.write("if ({0}.count() < {1}) {{ {2}; }}\n".format(param_name, param.minSize, fail_statement))
- if param.maxSize != None:
- out.write("if ({0}.count() > {1}) {{ {2}; }}\n".format(param_name, param.maxSize, fail_statement))
- if param.restricted:
- out.write('for ({0}::const_iterator it_{2} = {1}.begin(); it_{2} != {1}.end(); ++it_{2}) {{\n'.format(self.qt_param_type(param), param_name, level))
- with CodeBlock(out) as out:
- param_copy = copy(param)
- param_copy.array = False
- self.write_param_validation(param_copy, "(*it_{0})".format(level), fail_statement, out, level+1)
- out.write("}\n")
- elif param.struct:
- for p in self.structs[param.fulltype]:
- self.write_param_validation(p, "{0}.{1}".format(param_name, p.name), fail_statement, out, level+1)
- elif param.type == "Integer" or param.type == "Float":
- conditions = []
- if (param.minValue != None):
- conditions.append("(%s < %s)" % (param_name, param.minValue))
- if (param.maxValue != None):
- conditions.append("(%s > %s)" % (param_name, param.maxValue))
- if conditions:
- out.write('if (%s) { %s; }\n' % (' || '.join(conditions), fail_statement))
- elif param.type == "String":
- conditions = []
- if (param.minLength > 0):
- conditions.append("(%s.size() < %s)" % (param_name, param.minLength))
- if (param.maxLength > 0):
- conditions.append("(%s.size() > %s)" % (param_name, param.maxLength))
- if conditions:
- with CodeBlock(out) as out:
- out.write('if (%s) { %s;\n }\n' % (' || '.join(conditions), fail_statement))
-
- def qt_param_type(self, param):
- if not param.mandatory:
- param_copy = copy(param)
- param_copy.mandatory = True
- return "OptionalArgument< " + self.qt_param_type(param_copy) + " >"
- if param.array:
- param_copy = copy(param)
- param_copy.array = False
- if param.type == 'String':
- return "QStringList"
- return "QList< " + self.qt_param_type(param_copy) + " >"
- if param.type == 'Integer' or param.enum:
- return 'int'
- elif param.type == 'String':
- return 'QString'
- elif param.type == 'Boolean':
- return 'bool'
- elif param.type == 'Float':
- return 'double'
- elif param.struct:
- return "_".join(param.fulltype)
- return "xxx"
-
-
- def from_variant_func_name(self, param, interface):
- prefix = ''
- if not param.mandatory:
- param_copy = copy(param)
- param_copy.mandatory = True
- return 'opt_' + self.from_variant_func_name(param_copy, interface)
- if param.array:
- param_copy = copy(param)
- param_copy.array = False
- return 'arr_' + self.from_variant_func_name(param_copy, interface)
-
- if param.type in ['Integer', 'String', 'Boolean', 'Float']:
- param_type = param.type
- else:
- param_type = param.type.split('.')
- if len(param_type) > 1:
- param_type = (param_type[0], param_type[1])
- else:
- param_type = (interface, param_type[0])
- if param_type in self.structs:
- param_type = param_type[0] + '_' + param_type[1]
- elif param_type in self.enums:
- param_type = 'Integer'
- return param_type + '_from_variant'
-
-
- def make_method_signature(self, request, response, interface, add_classname):
- in_params = [self.make_param_desc(x, interface) for x in request.findall('param')]
- out_params = [self.make_param_desc(x, interface) for x in response.findall('param')]
-
- signature_len = len(''.join(map(lambda x: self.convert_to_dbus_type(x), in_params + out_params)))
- if signature_len > 255:
- raise RuntimeError("Too long signature of {0} method. Maximum valid length is 255, actual is {1}", request.get('name'), signature_len)
-
- return "int {0}{1} ({2}{3}const QDBusMessage& message, QString& userMessage_out{4}{5})".format(
- interface + "Adaptor::" if add_classname else "",
- request.get('name'),
- ", ".join(map(lambda x: "const {0}& {1}_in".format(self.qt_param_type(x), x.name), in_params)),
- ", " if in_params else "",
- ", " if out_params else "",
- ", ".join(map(lambda x: "{0}& {1}_out".format(self.qt_param_type(x), x.name), out_params)))
-
-
- def make_signal_signature(self, signal, interface, add_void):
- params = signal.findall('param')
- if add_void:
- retstr = 'void '
- else:
- retstr = ''
- retstr = retstr + signal.get('name') + '('
- params_num = len(params)
- for i in range(0, params_num):
- param_desc = self.make_param_desc(params[i], interface)
- param_type = self.qt_param_type(param_desc)
- retstr = retstr + param_type + ' ' + param_desc.name
- if i <> params_num - 1: retstr = retstr + ", "
- retstr = retstr + ')'
- return retstr
-
-
- def make_qml_signal_signature(self, signal, interface, name, short=False, add_classname=False):
- params = signal.findall('param')
- if short:
- retstr = ''
- else:
- retstr = 'void '
- if add_classname:
- retstr = retstr + interface + 'Adaptor::'
- retstr = retstr + name + '('
- params_num = len(params)
- for i in range(0, params_num):
- param_desc = self.make_param_desc(params[i], interface)
- if param_desc.struct or param_desc.array or not param_desc.mandatory: typ = 'QVariant'
- elif param_desc.type == 'Integer' or param_desc.enum: typ = 'int'
- elif param_desc.type == 'Boolean': typ = 'bool'
- elif param_desc.type == 'Float': typ = 'double'
- elif param_desc.type == 'String': typ = 'QString'
- else: typ = 'QVariant'
- retstr = retstr + typ
- if not short: retstr = retstr + ' ' + param_desc.name
- if i <> params_num - 1: retstr = retstr + ", "
- retstr = retstr + ')'
- return retstr
-
-
- def write_adaptor_declaration(self, interface_el, notifications, request_responses, out):
- global prefix_class_item
- def glue_strings(strings):
- ret = list()
- curstr = ''
- for str in strings:
- curstr = curstr + str
- if(str[-1] == '>'):
- ret.append(curstr)
- curstr = ''
- return ret
- ifacename = interface_el.get('name')
- out.write("class " + ifacename + "Adaptor : public QDBusAbstractAdaptor {\n");
- out.write(" Q_OBJECT\n");
- out.write(" Q_CLASSINFO(\"D-Bus Interface\", \"" + self.interface_path + '.' + ifacename + "\")\n");
- out.write(" Q_CLASSINFO(\"D-Bus Introspection\",\n");
- introspection_el = self.create_introspection_iface_el(interface_el, 'hmi')
- introspection = glue_strings(ElementTree.tostringlist(introspection_el))
- for str in introspection:
- str = str.replace('"', '\\"')
- out.write('"' + str + '"' + "\n")
- out.write(" )\n")
- out.write(" public:\n")
- out.write(" explicit " + ifacename + "Adaptor(QObject *parent = 0);\n")
- out.write(" void SetApi(Q%sItem*);\n" % prefix_class_item)
- out.write(" DBusController *dbusController;\n")
- out.write(" public slots:\n")
- for (request, response) in request_responses:
- signature = self.make_method_signature(request, response, ifacename, False)
- out.write(" " + signature + ";\n")
- out.write(" signals:\n")
- for n in notifications:
- signature = self.make_signal_signature(n, ifacename, True)
- out.write(" " + signature + ";\n")
- out.write(" private slots:\n")
- for n in notifications:
- signature = self.make_qml_signal_signature(n, ifacename, n.get('name') + '_qml', False)
- out.write(" " + signature + ";\n")
- out.write(" private:\n")
- out.write(" Q%sItem* api_;\n" % prefix_class_item)
- out.write("};\n\n");
-
- def write_adaptor_definition(self, interface_el, notifications, request_responses, out):
- global prefix_class_item
- iface_name = interface_el.get('name')
- classname = iface_name + 'Adaptor'
- out.write("{0}::{0}(QObject* parent) : QDBusAbstractAdaptor(parent) {{}}\n".format(classname))
-
- out.write("void {0}::SetApi(Q{1}Item* api) {{\n".format(classname, prefix_class_item))
- with CodeBlock(out) as out:
- out.write("api_ = api;\n")
- for n in notifications:
- signame = n.get('name')
- signame = signame[:1].lower() + signame[1:]
- slotname = n.get('name') + '_qml'
- sig_signature = self.make_qml_signal_signature(n, iface_name, signame, True)
- slot_signature = self.make_qml_signal_signature(n, iface_name, slotname, True)
- out.write("connect(api_, SIGNAL(" + sig_signature + "), this, SLOT(" + slot_signature + "));\n")
- out.write("LOG4CXX_TRACE(logger_, \"CONNECT SIGNALS: \" << __PRETTY_FUNCTION__ );\n")
- out.write("}\n\n")
-
- for (request,response) in request_responses:
- in_params = [ self.make_param_desc(x, iface_name) for x in request.findall('param') ]
- out_params = [ self.make_param_desc(x, iface_name) for x in response.findall('param') ]
-
- out.write("bool fill{0}{1}Reply(QDBusMessage& message, const QVariantMap& map) {{\n".format(classname, request.get('name')))
- with CodeBlock(out) as out:
- out.write("int retCode_out = 0;\n")
- out.write("GetArgFromMap(map, \"__retCode\", retCode_out);\n")
- out.write("QVariant retCode_arg = QVariant::fromValue(retCode_out);\n")
- out.write("message << retCode_arg;\n")
- out.write("QString userMessage_out;\n")
- out.write("GetArgFromMap(map, \"__message\", userMessage_out);\n")
- out.write("QVariant userMessage_arg = QVariant::fromValue(userMessage_out);\n")
- out.write("message << userMessage_arg;\n")
- for p in out_params:
- param_name = p.name
- param_type = self.qt_param_type(p)
- out.write("%s %s_out;\n" % (param_type, p.name))
- out.write("if (!GetArgFromMap(map, \"{0}\", {0}_out)) {{ return false; }}\n".format(p.name))
- self.write_param_validation(p, p.name + "_out", "return false", out)
- out.write("QVariant {0}_arg;\n".format(p.name))
- out.write("{0}_arg.setValue({0}_out);\n".format(p.name))
- out.write("message << {0}_arg;\n".format(p.name))
- out.write("LOG4CXX_DEBUG(logger_, \"Output arguments:\\n\" << QVariant(map));\n")
- out.write("LOG4CXX_TRACE(logger_, \"REPLY ASYNC: \" << __PRETTY_FUNCTION__ );\n")
- out.write("return true;\n")
- out.write("}\n\n")
-
- out.write("{0} {{\n".format(self.make_method_signature(request, response, iface_name, True)))
- with CodeBlock(out) as out:
- out.write("LOG4CXX_TRACE(logger_, \"ENTER: \" << __PRETTY_FUNCTION__ );\n")
- out.write("int ret = 0;\n")
- return_statement = "return ret;\n"
- out.write("QVariantMap in_arg;\n");
- out.write("QVariant out_arg_v;\n");
- for param in in_params:
- self.write_param_validation(param, param.name + "_in", "RaiseDbusError(this, InvalidData); return ret", out)
- out.write("PutArgToMap(in_arg, \"" + param.name + "\", " + param.name + "_in);\n")
- out.write("LOG4CXX_DEBUG(logger_, \"Input arguments:\\n\" << in_arg);\n")
- method_name = request.get('name')[:1].lower() + request.get('name')[1:]
-
- out.write("dbusController->message = &message;\n")
- out.write("dbusController->fill = &fill{0}{1}Reply;\n".format(classname, request.get("name")))
-
- out.write("""if (!QMetaObject::invokeMethod(api_, "{0}", Qt::{1}Connection, Q_RETURN_ARG(QVariant, out_arg_v), Q_ARG(QVariant, QVariant(in_arg)))) {{\n""".format(method_name, invoke_type_connection))
- with CodeBlock(out) as out:
- out.write("RaiseDbusError(this, InvalidData);\n")
- out.write("LOG4CXX_ERROR(logger_, \"Can't invoke method " + method_name +"\");\n ")
- out.write("return ret;\n")
- out.write("}\n")
-
- out.write("dbusController->message = NULL;\n")
- out.write("dbusController->fill = NULL;\n")
- out.write("if (message.isDelayedReply()) {\n")
- with CodeBlock(out) as out:
- out.write("return ret;\n")
- out.write("}\n")
-
- out.write("QVariantMap out_arg;\n")
- out.write("if (out_arg_v.type() == QVariant::Map) {\n")
- with CodeBlock(out) as out:
- out.write("out_arg = out_arg_v.toMap();\n")
- out.write("};\n")
-
- out.write("int err;\n")
- out.write("""if (GetArgFromMap(out_arg, "__errno", err)) { RaiseDbusError(this, err); return ret; }\n""")
-
- out.write("int async_uid;\n")
- out.write("if (GetArgFromMap(out_arg, \"__async_uid\", async_uid)) {\n")
- with CodeBlock(out) as out:
- out.write("message.setDelayedReply(true);\n")
- out.write("dbusController->addMessage(message, &fill%s%sReply, async_uid);\n" % (classname, request.get('name')))
- out.write("LOG4CXX_TRACE(logger_, \"EXIT ASYNC: \" << __PRETTY_FUNCTION__ );\n")
- out.write("return ret;\n");
- out.write("}\n\n")
-
- for param in out_params:
- out.write("if (!GetArgFromMap(out_arg, \"{0}\", {0}_out)) {{ RaiseDbusError(this, InvalidData); return ret; }}\n".format(param.name))
- self.write_param_validation(param, param.name + "_out", "RaiseDbusError(this, InvalidData); return ret", out)
-
- out.write("GetArgFromMap(out_arg, \"__retCode\", ret);\n")
- out.write("GetArgFromMap(out_arg, \"__message\", userMessage_out);\n")
- out.write("LOG4CXX_DEBUG(logger_, \"Output arguments:\\n\" << QVariant(out_arg));\n")
- out.write("LOG4CXX_TRACE(logger_, \"EXIT: \" << __PRETTY_FUNCTION__ );\n")
- out.write("return ret;\n")
- out.write("}\n\n")
-
- for n in notifications:
- slotname = n.get('name') + '_qml'
- slot_signature = self.make_qml_signal_signature(n, iface_name, slotname, False, True)
- out.write(slot_signature + " {\n")
- params = n.findall('param')
- out.write(" LOG4CXX_TRACE(logger_, \"EMIT SIGNAL: \" << __PRETTY_FUNCTION__ );\n")
- out.write(" LOG4CXX_DEBUG(logger_, \"Arguments:\\n{\"")
- for p in params[0:-1]:
- param = self.make_param_desc(p, iface_name)
- out.write(" << \" " + param.name + ":\" << " + param.name + " << \",\"")
- for p in params[-1:]: # last param without comma in end line
- p = params[-1]
- param = self.make_param_desc(p, iface_name)
- out.write(" << \" " + param.name + ":\" << " + param.name)
- out.write(" << \" }\");\n")
- for p in params:
- param = self.make_param_desc(p, iface_name)
- param_type = self.qt_param_type(param)
- param_name = 'p_' + param.name
- if param.mandatory:
- if param.array or (param.type not in ['Integer', 'String', 'Float', 'Boolean'] and not param.enum):
- out.write(' ' + param_type + ' ' + param_name + ";\n")
- out.write(' if (!VariantToValue(' + param.name + ', ' + param_name + ")) {\n")
- out.write(" LOG4CXX_ERROR(logger_, \"Can't convert variant to value\");\n")
- out.write(" return;}\n")
- else:
- out.write(' ' + param_type + ' ' + param_name + ";\n")
- out.write(' ' + param_name + '.presence = !' + param.name + ".isNull();\n")
- out.write(' if (' + param_name + ".presence) {\n")
- out.write(' if (!VariantToValue(' + param.name + ', ' + param_name + ".val)) {\n")
- out.write(" LOG4CXX_ERROR(logger_, \"Can't convert variant to value\");\n")
- out.write(" return;\n }\n")
- out.write(" }\n")
- out.write(' emit ' + n.get('name') + '(')
- for i in range(len(params)):
- param = self.make_param_desc(params[i], iface_name)
- basic_type = (param.type in ['Integer', 'String', 'Float', 'Boolean']) or param.enum
- if param.array or (not param.mandatory) or (not basic_type):
- param_name = 'p_' + param.name
- else:
- param_name = param.name
- out.write(param_name)
- if i != len(params) - 1: out.write(', ')
- out.write(");\n")
- out.write("}\n\n")
-
-
- def make_dbus_adaptor_declarations(self, out):
- for interface_el in self.el_tree.findall('interface'):
- notifications = self.find_notifications_by_provider(interface_el, "hmi")
- request_responses = self.find_request_response_pairs_by_provider(interface_el, "hmi")
- if len(notifications) > 0 or len(request_responses) > 0:
- self.write_adaptor_declaration(interface_el, notifications, request_responses, out)
-
-
- def make_dbus_adaptor_definitions(self, out):
- for interface_el in self.el_tree.findall('interface'):
- notifications = self.find_notifications_by_provider(interface_el, "hmi")
- request_responses = self.find_request_response_pairs_by_provider(interface_el, "hmi")
- if len(notifications) > 0 or len(request_responses) > 0:
- self.write_adaptor_definition(interface_el, notifications, request_responses, out)
-
-
- def make_dbus_register_metatypes_declaraion(self, out):
- out.write("void RegisterDbusMetatypes();\n")
-
-
- def make_dbus_register_metatypes_definition(self, out):
- out.write("void RegisterDbusMetatypes() {\n")
- for (iface, name) in self.structs:
- struct_name = iface + '_' + name
- out.write('qDBusRegisterMetaType<' + struct_name + ">();\n")
- out.write('qDBusRegisterMetaType<OptionalArgument<' + struct_name + "> >();\n")
- out.write('qDBusRegisterMetaType<QList<' + struct_name + "> >();\n")
- out.write('qDBusRegisterMetaType<OptionalArgument<QList<' + struct_name + "> > >();\n")
- out.write("}\n")
-
-
- def make_api_adaptors_class(self, out):
- global prefix_class_item
- out.write("struct ApiAdaptors {\n")
- interfaces = self.el_tree.findall('interface')
- def filt(iface):
- return self.find_notifications_by_provider(iface, "hmi") or self.find_request_response_pairs_by_provider(iface, "hmi")
- interfaces = filter(filt, interfaces)
- for interface_el in interfaces:
- name = interface_el.get('name') + 'Adaptor'
- out.write(" " + name + "* " + name + "_;\n")
- out.write(" ApiAdaptors() :\n")
- for i in range(len(interfaces)):
- name = interfaces[i].get('name') + 'Adaptor'
- out.write(" " + name + "_(NULL)")
- if i <> len(interfaces) - 1: out.write(',')
- out.write("\n")
- out.write(" {}\n")
- out.write(" void Init(QObject* p) {\n")
- for interface_el in interfaces:
- name = interface_el.get('name') + 'Adaptor'
- out.write(" " + name + "_ = new " + name + "(p);\n")
- out.write(" }\n")
- out.write(" void SetApi(QObject* p) {\n")
- for interface_el in interfaces:
- name = interface_el.get('name') + 'Adaptor'
- chname = interface_el.get('name')
- out.write(" " + name + ("_->SetApi(p->findChild<Q%sItem*>(\"" % prefix_class_item) + chname + "\"));\n")
- out.write(" }\n")
- out.write(" void SetDBusController(DBusController* dc) {\n")
- for interface_el in interfaces:
- name = interface_el.get('name') + 'Adaptor'
- chname = interface_el.get('name')
- out.write(" " + name + "_->dbusController = dc;\n")
- out.write(" }\n")
- out.write("};\n\n")
-
-
-
-arg_parser = ArgumentParser(description="Generator of Qt to QDbus C++ part")
-arg_parser.add_argument('--infile', required=True, help="full name of input file, e.g. applink/src/components/interfaces/QT_HMI_API.xml")
-arg_parser.add_argument('--version', required=False, help="Qt version 4.8.5 (default) or 5.1.0")
-arg_parser.add_argument('--outdir', required=True, help="path to directory where output files qml_dbus.cc, qml_dbus.h will be saved")
-args = arg_parser.parse_args()
-
-if args.version == "4.8.5":
- prefix_class_item = 'Declarative'
- invoke_type_connection = 'Direct'
-elif args.version == "5.1.0":
- prefix_class_item = 'Quick'
- invoke_type_connection = 'BlockingQueued'
-
-header_name = 'qml_dbus.h'
-source_name = 'qml_dbus.cc'
-
-in_tree = ElementTree.parse(args.infile)
-in_tree_root = in_tree.getroot()
-
-impl = Impl(in_tree_root, 'com.ford.sdl.hmi')
-
-header_out = open(args.outdir + '/' + header_name, "w")
-source_out = open(args.outdir + '/' + source_name, "w")
-
-header_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-header_out.write("""/**
- * @file qml_dbus.h
- * @brief Generated QDbus adaptors header file
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2013, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-""")
-header_out.write("#ifndef SRC_COMPONENTS_DBUS_QML_DBUS_H_\n");
-header_out.write("#define SRC_COMPONENTS_DBUS_QML_DBUS_H_\n\n");
-header_out.write("#include <QtDBus/QDBusArgument>\n");
-header_out.write("#include <QtDBus/QDBusMessage>\n");
-header_out.write("#include <QtDBus/QDBusConnection>\n");
-header_out.write("#include <QtDBus/QDBusAbstractAdaptor>\n");
-header_out.write("#include <QtDBus/QDBusMetaType>\n");
-header_out.write("#include <Qt%s/Q%sItem>\n" % (prefix_class_item, prefix_class_item));
-header_out.write("#include \"qml_dbus_common.h\"\n\n");
-header_out.write("#include \"dbus_controller.h\"\n\n");
-impl.make_dbus_type_declarations(header_out)
-impl.make_dbus_adaptor_declarations(header_out)
-impl.make_dbus_register_metatypes_declaraion(header_out)
-impl.make_api_adaptors_class(header_out)
-impl.make_dbus_metatype_declarations(header_out)
-header_out.write("#endif // #ifndef SRC_COMPONENTS_DBUS_QML_DBUS_H_\n");
-
-source_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-source_out.write("""/**
- * @file qml_dbus.cc
- * @brief Generated QDbus adaptors source file
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2013, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-""")
-source_out.write("#include \"" + header_name + "\"\n\n");
-source_out.write("#include \"utils/logger.h\"\n")
-source_out.write("#ifdef ENABLE_LOG\n")
-source_out.write("extern log4cxx::LoggerPtr logger_;\n")
-source_out.write("#endif // ENABLE_LOG\n\n")
-impl.make_dbus_type_definitions(source_out)
-impl.make_dbus_adaptor_definitions(source_out)
-impl.make_dbus_register_metatypes_definition(source_out)
diff --git a/src/components/dbus/codegen/make_qml_dbus_qml.py b/src/components/dbus/codegen/make_qml_dbus_qml.py
deleted file mode 100755
index 8d057dcda1..0000000000
--- a/src/components/dbus/codegen/make_qml_dbus_qml.py
+++ /dev/null
@@ -1,217 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file make_qml_dbus_qml.py
-# @brief Generator of QML to QDbus QML part
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2013, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from os import path
-from os import makedirs
-from sys import argv
-from argparse import ArgumentParser
-from xml.etree import ElementTree
-from copy import copy
-from ford_xml_parser import FordXmlParser
-
-namespace = 'dbus_qml'
-qt_quick_version = '1.1'
-type_variant_name = 'variant'
-
-class Impl(FordXmlParser):
- def write_function(self, ifacename, request, response, out):
- name = request.get('name')
- name = name[:1].lower() + name[1:]
- out.write(" function " + name + "(params) {\n")
- out.write(""" console.debug("{0}Proxy::{1}")\n""".format(ifacename, name))
- out.write(" try {\n")
- out.write(" if(\"{0}\" in sdl{1})\n".format(name, ifacename))
- out.write(" return sdl{0}.{1}(" .format(ifacename, name))
- params = request.findall('param')
- for i in range(len(params)):
- out.write('params.' + params[i].get('name'))
- if i <> len(params) - 1:
- out.write(', ')
- out.write(")\n")
- out.write(" else\n")
- out.write(""" return { "__errno": Common.Result.UNSUPPORTED_REQUEST }\n""")
- out.write(" } catch(err) {\n")
- out.write(""" return { "__errno": err }\n""")
- out.write(" }\n")
- out.write(" }\n\n")
-
-
- def write_signal_param(self, param, out):
- if param.array or param.struct or not param.mandatory: typ = type_variant_name
- elif param.type == 'Integer' or param.enum: typ = 'int'
- elif param.type == 'String': typ = 'string'
- elif param.type == 'Boolean': typ = 'bool'
- elif param.type == 'Float': typ = 'double'
- else: typ = type_variant_name
- out.write(typ + ' ' + param.name)
-
-
- def write_signal(self, ifacename, notification, out):
- name = notification.get('name')
- name = name[:1].lower() + name[1:]
- out.write(" signal " + name + "(")
- params = notification.findall('param')
- for i in range(len(params)):
- self.write_signal_param(self.make_param_desc(params[i], ifacename), out)
- if i <> len(params) - 1:
- out.write(', ')
- out.write(")\n")
- name = notification.get('name')
- out.write(""" on{1}: console.debug("emitted {0}:{1}")\n""".format(ifacename, name))
-
-
- def write_qml(self, iface, out):
- global qt_quick_version
- name = iface.get('name')
- out.write("import QtQuick %s\n" % qt_quick_version)
- out.write("""import "Common.js" as Common\n""")
- out.write("import \"..\"\n\n")
- out.write("Item {\n")
- out.write(" " + name + " {\n")
- out.write(" id: sdl" + name + "\n")
- out.write(" }\n")
-
- notifications = impl.find_notifications_by_provider(interface_el, "hmi")
- request_responses = impl.find_request_response_pairs_by_provider(interface_el, "hmi")
- for request, response in request_responses:
- self.write_function(name, request, response, out)
- for n in notifications:
- self.write_signal(name, n, out)
- out.write("}\n")
-
-
- def write_js_enum(self, enum, out):
- out.write("var " + enum.get('name') + " = {\n")
- lastval = -1
- elements = enum.findall('element')
- for i in range(len(elements)):
- element = elements[i]
- value = element.get('value')
- if value is None:
- value = lastval + 1
- else:
- value = int(value)
- lastval = value
- name = element.get('internal_name')
- if name is None:
- name = element.get('name')
- out.write(" " + name + ': ' + str(value))
- if len(elements) - 1 != i: out.write(',')
- out.write("\n")
- out.write("}\n\n")
-
-
-def write_header(out):
- out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
- out.write("""/**
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-""")
-
-arg_parser = ArgumentParser(description="Generator of Qt to QDbus QML part")
-arg_parser.add_argument('--infile', required=True, help="full name of input file, e.g. applink/src/components/interfaces/QT_HMI_API.xml")
-arg_parser.add_argument('--version', required=False, help="Qt version 4.8.5 (default) or 5.1.0")
-arg_parser.add_argument('--outdir', required=True, help="path to directory where output files with pattern name <intarface name>Proxy.qml will be saved, e.g. BasicCommunicationProxy.qml, ButtonsProxy.qml VRProxy.qml")
-args = arg_parser.parse_args()
-
-if args.version == "4.8.5":
- qt_quick_version = "1.1"
- type_variant_name = "variant"
-elif args.version == "5.1.0":
- qt_quick_version = "2.0"
- type_variant_name = "var"
-
-if not path.isdir(args.outdir):
- makedirs(args.outdir)
-
-in_tree = ElementTree.parse(args.infile)
-in_tree_root = in_tree.getroot()
-
-impl = Impl(in_tree_root)
-
-for interface_el in in_tree_root.findall('interface'):
- notifications = impl.find_notifications_by_provider(interface_el, "hmi")
- request_responses = impl.find_request_response_pairs_by_provider(interface_el, "hmi")
- if notifications or request_responses:
- filename = interface_el.get('name')+'Proxy.qml'
- outfile = open(args.outdir + '/' + filename, 'w')
- write_header(outfile)
- impl.write_qml(interface_el, outfile)
-
-enum_files = dict()
-for (iface, name), enum in impl.enums.items():
- if iface in enum_files:
- outfile = enum_files[iface]
- else:
- filename = iface+'.js'
- outfile = open(args.outdir + '/' + filename, 'w')
- write_header(outfile)
- outfile.write(".pragma library\n")
- enum_files[iface] = outfile
- impl.write_js_enum(enum, outfile)
-
-
diff --git a/src/components/dbus/codegen/make_qml_requests_cpp.py b/src/components/dbus/codegen/make_qml_requests_cpp.py
deleted file mode 100644
index 6674b8f5e2..0000000000
--- a/src/components/dbus/codegen/make_qml_requests_cpp.py
+++ /dev/null
@@ -1,253 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file make_qml_dbus_cpp.py
-# @brief Generator of QML to QDbus C++ part
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2014, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from argparse import ArgumentParser
-import os.path
-from sys import argv
-from xml.etree import ElementTree
-from copy import copy
-from ford_xml_parser import FordXmlParser, ParamDesc
-from code_formatter import CodeBlock
-
-prefix_class_item = 'Declarative'
-invoke_type_connection = 'Direct'
-
-def defaultValue(param):
- if param.type == "Integer":
- return "0"
- elif param.type == "Float":
- return "0.0"
- elif param.type == "Boolean":
- return "false"
- elif param.enum:
- return "0"
-
-class Impl(FordXmlParser):
-
-
- def args_for_function_definition(self, params, out):
- if len(params) == 0:
- out.write('QJSValue hmi_callback')
- return
- for param in params:
- out.write('QVariant ' + param.get('name') + ', ')
- out.write('QJSValue hmi_callback')
-
-
- def make_requests_for_header(self, out):
- for interface_el in self.el_tree.findall('interface'):
- request_responses = self.find_request_response_pairs_by_provider(interface_el, "sdl")
- for (request, response) in request_responses:
- all_params = list()
- for param_el in request.findall('param'):
- all_params.append(param_el)
- with CodeBlock(out) as output:
- output.write("Q_INVOLABKE void " + interface_el.get('name') + "_" +request.get('name') + "(")
- impl.args_for_function_definition(all_params, out)
- output.write(");\n")
-
-
- def make_header_file(self, out):
- out.write("class RequestToSDL : public QObject\n")
- out.write("{\n")
- out.write(" public:\n")
- with CodeBlock(out) as output:
- output.write("explicit RequestToSDL(QObject *parent = 0);\n")
- output.write("~RequestToSDL();\n")
- impl.make_requests_for_header(out)
- out.write(" private:\n")
- with CodeBlock(out) as output:
- for interface_el in self.el_tree.findall('interface'):
- output.write('QDBusInterface *' + interface_el.get('name') + ';\n')
- out.write("};\n")
-
-
- def make_requests_for_source(self, out):
- for interface_el in self.el_tree.findall('interface'):
- request_responses = self.find_request_response_pairs_by_provider(interface_el, "sdl")
- for (request, response) in request_responses:
- out.write('void RequestToSDL::' + request.get('name') + '(QString name, ')
- for param_el in request.findall('param'):
- out.write('QVariant ' + param_el.get('name') + ', ')
- out.write('QJSValue hmi_callback) {\n')
- with CodeBlock(out) as output:
- output.write('QList<QVariant> args;\n')
- for param_el in request.findall('param'):
- output.write('args << ' + param_el.get('name') + ';\n')
- output.write('new ' + interface_el.get('name') + '_' + request.get('name') + '(' + interface_el.get('name') + ', name, args, hmi_callback);\n}\n')
-
-
-
- def make_source_file(self, out):
- out.write('#include "request_to_sdl.h"\n')
- out.write('\n')
- out.write('RequestToSDL::RequestToSDL(QObject *parent) {\n')
- with CodeBlock(out) as output:
- output.write('QDBusConnection bus = QDBusConnection::sessionBus();\n')
- for interface_el in self.el_tree.findall('interface'):
- iface_name = interface_el.get('name')
- output.write(iface_name + ' = new QDBusInterface("com.ford.sdl.core", "/", "com.ford.sdl.core.' + iface_name + '", bus, this);\n')
- out.write('}\n\n')
- out.write('RequestToSDL::~RequestToSDL() {\n')
- with CodeBlock(out) as output:
- for interface_el in self.el_tree.findall('interface'):
- iface_name = interface_el.get('name')
- output.write(iface_name + '->deleteLater();\n')
- output.write('this->deleteLater();\n')
- out.write('}\n\n')
- impl.make_requests_for_source(out)
-
-
-
-
-
-arg_parser = ArgumentParser(description="Generator of Qt to QDbus C++ part")
-arg_parser.add_argument('--infile', required=True, help="full name of input file, e.g. applink/src/components/interfaces/QT_HMI_API.xml")
-arg_parser.add_argument('--version', required=False, help="Qt version 4.8.5 (default) or 5.1.0")
-arg_parser.add_argument('--outdir', required=True, help="path to directory where output files request_to_sdl.h, request_to_sdl.cc will be saved")
-args = arg_parser.parse_args()
-
-if args.version == "4.8.5":
- prefix_class_item = 'Declarative'
- invoke_type_connection = 'Direct'
-elif args.version == "5.1.0":
- prefix_class_item = 'Quick'
- invoke_type_connection = 'BlockingQueued'
-
-header_name = 'request_to_sdl.h'
-source_name = 'request_to_sdl.cc'
-
-in_tree = ElementTree.parse(args.infile)
-in_tree_root = in_tree.getroot()
-
-impl = Impl(in_tree_root, 'com.ford.sdl.hmi')
-
-header_out = open(args.outdir + '/' + header_name, "w")
-source_out = open(args.outdir + '/' + source_name, "w")
-
-header_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-header_out.write("""/**
- * @file request_to_sdl.h
- * @brief Generated class that process requests from qtHMI
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2013, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-""")
-header_out.write("#ifndef SRC_COMPONENTS_QTHMI_QMLMODELQT5_REQUESTTOSDL_\n");
-header_out.write("#define SRC_COMPONENTS_QTHMI_QMLMODELQT5_REQUESTTOSDL_\n\n");
-header_out.write("#include <QDBusConnection>\n");
-header_out.write("#include <QJSValue>\n");
-header_out.write("#include <QObject>\n");
-header_out.write("#include <QDBusInterface>\n");
-header_out.write('#include "hmi_requests.h"\n');
-
-impl.make_header_file(header_out)
-
-header_out.write("#endif SRC_COMPONENTS_QTHMI_QMLMODELQT5_REQUESTTOSDL_\n");
-
-
-source_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-source_out.write("""/**
- * @file request_to_sdl.cc
- * @brief Generated class that process requests from qtHMI
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2014, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-""")
-
-impl.make_source_file(source_out)
diff --git a/src/components/dbus/codegen/make_request_to_sdl.py b/src/components/dbus/codegen/make_request_to_sdl.py
deleted file mode 100755
index c8940f3eb7..0000000000
--- a/src/components/dbus/codegen/make_request_to_sdl.py
+++ /dev/null
@@ -1,335 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# @file make_qml_dbus_cpp.py
-# @brief Generator of QML to QDbus C++ part
-#
-# This file is a part of HMI D-Bus layer.
-#
-# Copyright (c) 2014, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-from argparse import ArgumentParser
-import os.path
-from sys import argv
-from xml.etree import ElementTree
-from copy import copy
-from ford_xml_parser import FordXmlParser, ParamDesc
-from code_formatter import CodeBlock
-
-class Impl(FordXmlParser):
-
- def args_for_function_definition(self, params, iface_name, out):
- for param_el in params:
- param = self.make_param_desc(param_el, iface_name)
- out.write('QVariant %s,' % (param.name))
- out.write('Q%sValue hmi_callback' % prefix_class_item)
-
- def make_requests_for_header(self, out):
- for interface_el in self.el_tree.findall('interface'):
- request_responses = self.find_request_response_pairs_by_provider(interface_el, "sdl")
- for (request, response) in request_responses:
- all_params = list()
- for param_el in request.findall('param'):
- all_params.append(param_el)
- with CodeBlock(out) as output:
- output.write("Q_INVOKABLE bool %s_%s(" % (interface_el.get('name'), request.get('name')))
- impl.args_for_function_definition(all_params, interface_el.get('name'), out)
- output.write(");\n")
-
-
- def make_header_file(self, out):
- out.write("class QDBusInterface;\n")
- out.write("class RequestToSDL : public QObject\n")
- out.write("{\n")
- out.write(' Q_OBJECT\n')
- out.write(" public:\n")
- with CodeBlock(out) as output:
- output.write("explicit RequestToSDL(QObject *parent = 0);\n")
- output.write("~RequestToSDL();\n")
- impl.make_requests_for_header(out)
- out.write(" private:\n")
- with CodeBlock(out) as output:
- for interface_el in self.el_tree.findall('interface'):
- output.write('QDBusInterface *%s;\n' % interface_el.get('name'))
- out.write("};\n")
-
-
- def qt_param_type(self, param):
- if not param.mandatory:
- param_copy = copy(param)
- param_copy.mandatory = True
- return "OptionalArgument< " + self.qt_param_type(param_copy) + " >"
- if param.array:
- param_copy = copy(param)
- param_copy.array = False
- if param.type == 'String':
- return "QStringList"
- return "QList< " + self.qt_param_type(param_copy) + " >"
- if param.type == 'Integer' or param.enum:
- return 'int'
- elif param.type == 'String':
- return 'QString'
- elif param.type == 'Boolean':
- return 'bool'
- elif param.type == 'Float':
- return 'double'
- elif param.struct:
- return "_".join(param.fulltype)
- else:
- raise RuntimeError('Unknown type: ' + param.type)
-
-
- def make_requests_for_source(self, out):
- for interface_el in self.el_tree.findall('interface'):
- request_responses = self.find_request_response_pairs_by_provider(interface_el, "sdl")
- for (request, response) in request_responses:
- request_name = request.get('name')
- iface_name = interface_el.get('name')
- request_full_name = iface_name + '_' + request_name
- out.write('bool RequestToSDL::' + request_full_name + '(')
- for param_el in request.findall('param'):
- out.write('QVariant %s, ' % (param_el.get('name')))
- out.write('Q%sValue hmi_callback) {\n' % prefix_class_item)
- with CodeBlock(out) as output:
- output.write('LOG4CXX_TRACE(logger_, "ENTER");\n')
- output.write('QList<QVariant> args;\n')
- for param_el in request.findall('param'):
- param = self.make_param_desc(param_el, iface_name)
- output.write('%s %s;\n' % (impl.qt_param_type(param), param.name + "_tmp"))
- output.write('if (VariantToValue(%s, %s)) {\n' % (param.name, param.name + '_tmp'))
- with CodeBlock(output) as out:
- self.write_param_validation(param, param.name + "_tmp",
- "\nLOG4CXX_ERROR(logger_, \"%s in %s out of bounds\");\nreturn false" % (param.name, request_full_name),
- out)
- out.write('args << QVariant::fromValue(%s);\n' % (param.name + '_tmp'))
- output.write('} else {\n')
- with CodeBlock(output) as out:
- out.write('LOG4CXX_ERROR(logger_, "%s in %s is NOT valid");\n' % (param.name, request_full_name))
- out.write('return false;\n')
- out.write('}\n')
- output.write('new requests::' + request_full_name + '(hmi_callback, ' + interface_el.get('name') + ' , args, '
- + '"' + request_name + '");\n')
- output.write('LOG4CXX_TRACE(logger_, "EXIT");\n')
- output.write('return true;\n')
- out.write('}\n\n')
-
-
- def write_param_validation(self, param, param_name, fail_statement, out, level=0):
- if not param.mandatory and (param.restricted or param.restrictedArray or (param.struct and any(map(lambda x: x.restricted, self.structs[param.fulltype])))):
- out.write("if (%s.presence) {\n" % param_name)
- param_copy = copy(param)
- param_copy.mandatory = True
- with CodeBlock(out) as out:
- self.write_param_validation(param_copy, param_name + ".val", fail_statement, out, level+1)
- out.write("}\n")
- elif param.array:
- if param.minSize > 0:
- out.write("if ({0}.count() < {1}) {{".format(param_name, param.minSize))
- with CodeBlock(out) as out:
- out.write("{0};\n".format(fail_statement))
- out.write("}\n")
- if param.maxSize != None:
- out.write("if ({0}.count() > {1}) {{".format(param_name, param.maxSize))
- with CodeBlock(out) as out:
- out.write("{0};\n".format(fail_statement))
- out.write("}\n")
- if param.restricted:
- out.write('for ({0}::const_iterator it_{2} = {1}.begin(); it_{2} != {1}.end(); ++it_{2}) {{\n'.format(self.qt_param_type(param), param_name, level))
- with CodeBlock(out) as out:
- param_copy = copy(param)
- param_copy.array = False
- self.write_param_validation(param_copy, "(*it_{0})".format(level), fail_statement, out, level+1)
- out.write("}\n")
- elif param.struct:
- for p in self.structs[param.fulltype]:
- self.write_param_validation(p, "{0}.{1}".format(param_name, p.name), fail_statement, out, level+1)
- elif param.type == "Integer" or param.type == "Float":
- conditions = []
- if (param.minValue != None):
- conditions.append("(%s < %s)" % (param_name, param.minValue))
- if (param.maxValue != None):
- conditions.append("(%s > %s)" % (param_name, param.maxValue))
- if conditions:
- out.write('if (%s) {' % ' || '.join(conditions))
- with CodeBlock(out) as out:
- out.write('%s;\n' % fail_statement)
- out.write("}\n")
- elif param.type == "String":
- conditions = []
- if (param.minLength > 0):
- conditions.append("(%s.size() < %s)" % (param_name, param.minLength))
- if (param.maxLength > 0):
- conditions.append("(%s.size() > %s)" % (param_name, param.maxLength))
- if conditions:
- out.write('if (%s) {' % ' || '.join(conditions))
- with CodeBlock(out) as out:
- out.write('%s;\n' % (fail_statement))
- out.write("}\n")
-
- def make_source_file(self, out):
- out.write('RequestToSDL::RequestToSDL(QObject *parent) {\n')
- with CodeBlock(out) as output:
- output.write('QDBusConnection bus = QDBusConnection::sessionBus();\n')
- for interface_el in self.el_tree.findall('interface'):
- iface_name = interface_el.get('name')
- output.write(iface_name + ' = new QDBusInterface("com.ford.sdl.core", "/", "com.ford.sdl.core.' + iface_name + '", bus, this);\n')
- out.write('}\n\n')
- out.write('RequestToSDL::~RequestToSDL() {\n')
- with CodeBlock(out) as output:
- for interface_el in self.el_tree.findall('interface'):
- iface_name = interface_el.get('name')
- output.write(iface_name + '->deleteLater();\n')
- output.write('this->deleteLater();\n')
- out.write('}\n\n')
- impl.make_requests_for_source(out)
-
-arg_parser = ArgumentParser(description="Generator of Qt to QDbus C++ part")
-arg_parser.add_argument('--infile', required=True, help="full name of input file, e.g. applink/src/components/interfaces/QT_HMI_API.xml")
-arg_parser.add_argument('--version', required=False, help="Qt version 4.8.5 (default) or 5.1.0")
-arg_parser.add_argument('--outdir', required=True, help="path to directory where output files request_to_sdl.h, request_to_sdl.cc will be saved")
-args = arg_parser.parse_args()
-
-
-if args.version == "4.8.5":
- prefix_class_item = 'Script'
- invoke_type_connection = 'Direct'
-elif args.version == "5.1.0":
- prefix_class_item = 'JS'
- invoke_type_connection = 'BlockingQueued'
-else:
- prefix_class_item = 'JS'
- invoke_type_connection = 'BlockingQueued'
-
-header_name = 'request_to_sdl.h'
-source_name = 'request_to_sdl.cc'
-
-in_tree = ElementTree.parse(args.infile)
-in_tree_root = in_tree.getroot()
-
-impl = Impl(in_tree_root, 'com.ford.sdl.hmi')
-
-header_out = open(args.outdir + '/' + header_name, "w")
-source_out = open(args.outdir + '/' + source_name, "w")
-
-header_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-header_out.write("""
-/*
- Copyright (c) 2014, Ford Motor Company
- 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 Ford Motor Company 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 HOLDER 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.
-*/
-""")
-header_out.write("#ifndef SRC_COMPONENTS_QT_HMI_QML_PLUGINS_DBUS_ADAPTER_REQUEST_TO_SDL_H_\n")
-header_out.write("#define SRC_COMPONENTS_QT_HMI_QML_PLUGINS_DBUS_ADAPTER_REQUEST_TO_SDL_H_\n\n")
-
-header_out.write("#include <QtCore/QObject>\n")
-header_out.write("#include <QtCore/QVariant>\n")
-header_out.write("#include <QtCore/QStringList>\n\n")
-header_out.write('#include "qml_dbus.h"\n\n')
-if args.version == "4.8.5":
- header_out.write("#include <QtScript/QScriptValue>\n")
-elif args.version == "5.1.0":
- header_out.write("#include <QtQml/QJSValue>\n")
-
-impl.make_header_file(header_out)
-header_out.write("#endif // SRC_COMPONENTS_QT_HMI_QML_PLUGINS_DBUS_ADAPTER_REQUEST_TO_SDL_H_")
-
-
-source_out.write("// Warning! This file is generated by '%s'. Edit at your own risk.\n" % argv[0])
-source_out.write("""
-/*
- Copyright (c) 2014, Ford Motor Company
- 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 Ford Motor Company 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 HOLDER 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.
-*/
-
-""")
-
-source_out.write('#include "request_to_sdl.h"\n')
-source_out.write("#include <QtDBus/QDBusConnection>\n")
-source_out.write("#include <QtDBus/QDBusInterface>\n")
-source_out.write('#include "hmi_requests.h"\n')
-source_out.write('#include "utils/logger.h"\n\n')
-source_out.write('CREATE_LOGGERPTR_GLOBAL(logger_, "DBusPlugin")\n\n')
-
-impl.make_source_file(source_out)
diff --git a/src/components/dbus/include/dbus/dbus_adapter.h b/src/components/dbus/include/dbus/dbus_adapter.h
deleted file mode 100644
index 42a2ac1140..0000000000
--- a/src/components/dbus/include/dbus/dbus_adapter.h
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Copyright (c) 2013-2014, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-#ifndef SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_ADAPTER_H_
-#define SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_ADAPTER_H_
-
-#include <string>
-#include "smart_objects/smart_object.h"
-#include "dbus/schema.h"
-#include "dbus/message_descriptions.h"
-
-struct DBusConnection;
-struct DBusMessage;
-struct DBusMessageIter;
-
-namespace dbus {
-
-/**
- * \brief class for work with DBus
- */
-class DBusAdapter {
- public:
- /**
- * \brief constructs DBus adapter
- * \param sdlServiceName core service name
- * \param sdlObjectPath core object path
- * \param hmiServiceName hmi service name
- */
- DBusAdapter(const std::string& sdlServiceName,
- const std::string& sdlObjectPath,
- const std::string& hmiServiceName,
- const std::string& hmiObjectPath);
-
- /**
- * \brief destructs DBus adapter
- */
- virtual ~DBusAdapter();
-
- /**
- * \brief inits service
- * \return true if success
- */
- bool Init();
-
- /**
- * \brief return schema messages for DBus
- * \return schema
- */
- const DBusSchema& get_schema() const;
-
- protected:
- /**
- * \brief calls method on HMI
- * \param id id message
- * \param func_id id function in Ford protocol
- * \param name pair interface and name of method for call
- * \param obj params for call
- */
- void MethodCall(uint id,
- const MessageId func_id,
- const MessageName& name,
- const smart_objects::SmartObject& obj);
-
- /**
- * \brief sends signal
- * \param id id message
- * \param func_id id function in Ford protocol
- * \param name pair interface and name of signal for call
- * \param obj params for signal
- */
- void Signal(const MessageId func_id,
- const MessageName& name,
- const smart_objects::SmartObject& obj);
-
- /**
- * \brief returns result of call method to HMI
- * \param id id message
- * \param obj params for return
- */
- void MethodReturn(uint id,
- const MessageId func_id,
- const MessageName& name,
- const smart_objects::SmartObject& obj);
-
- /**
- * \brief sends error on message from HMI
- * \param id id message
- * \param msg message from HMI
- * \param name name of error
- * \param description description of error
- */
- void Error(uint id, const std::string& name, const std::string& description);
-
- /**
- * \brief adds a match rule
- * \param rule string rule in the DBus specification
- */
- void AddMatch(const std::string& rule);
-
- /**
- * \brief processes incoming message from DBus if queue isn't empty
- * and fill obj
- * \param obj object for send to core
- * \return true if message processed
- */
- bool Process(smart_objects::SmartObject& obj);
-
- /**
- * \brief saves link D-Bus serial to Ford message id
- * \param serial D-Bus message serial
- * \param ids pair correlation id and Ford message id
- */
- inline void SaveRequestToHMI(uint32_t serial,
- const std::pair<uint, MessageId>& ids);
-
- /**
- * \brief gets Ford message id by serial
- * \param serial D-Bus message serial
- * \return pair correlation id and Ford message id
- */
- inline std::pair<uint, MessageId> GetRequestToHMI(uint32_t serial);
-
- /**
- * \brief saves link D-Bus serial to Ford message id
- * \param serial D-Bus message serial
- * \param request D-Bus message from HMI
- */
- inline void SaveRequestFromHMI(uint32_t serial, DBusMessage* request);
-
- /**
- * \brief gets D-Bus message id by serial
- * \param serial DBus message serial
- * \return D-Bus message from HMI
- */
- inline DBusMessage* GetRequestFromHMI(uint32_t serial);
-
- std::string sdl_service_name_;
- std::string sdl_object_path_;
- std::string hmi_service_name_;
- std::string hmi_object_path_;
- DBusConnection* conn_;
-
- private:
- /**
- * \brief schema messages and arguments for DBus
- */
- const DBusSchema* schema_;
-
- /**
- * \brief mapping serial message DBus on message id Ford protocol
- */
- std::map<uint32_t, std::pair<uint, MessageId> > requests_to_hmi_;
-
- /**
- * \brief mapping message id Ford protocol on message DBus
- */
- std::map<uint32_t, DBusMessage*> requests_from_hmi_;
-
- /**
- * \brief processes incoming call of method and fill obj
- * \param msg message from DBus
- * \param obj object for send to core
- * \return true if success
- */
- bool ProcessMethodCall(DBusMessage* msg, smart_objects::SmartObject& obj);
-
- /**
- * \brief processes incoming return of method and fill obj
- * \param msg message from DBus
- * \param obj object for send to core
- * \return true if success
- */
- bool ProcessMethodReturn(DBusMessage* msg, smart_objects::SmartObject& obj);
-
- /**
- * \brief processes incoming error and fill obj
- * \param msg message from DBus
- * \param obj object for send to core
- * \return true if success
- */
- bool ProcessError(DBusMessage* msg, smart_objects::SmartObject& obj);
-
- /**
- * \brief processes incoming signal and fill obj
- * \param msg message from DBus
- * \param obj object for send to core
- * \return true if success
- */
- bool ProcessSignal(DBusMessage* msg, smart_objects::SmartObject& obj);
-
- /**
- * \brief sets arguments to message
- * \param msg DBus message
- * \param rules list of rules for arguments
- * \param args map of arguments
- * \return true if success
- */
- bool SetArguments(DBusMessage* msg,
- const ListArgs& rules,
- const smart_objects::SmartObject& args);
-
- /**
- * \brief Sets one argument to message
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param param value of argument
- * \return true if success
- */
- bool SetOneArgument(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- const smart_objects::SmartObject& param);
-
- /**
- * \brief sets value for argument
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param param value of argument
- * \return true if success
- */
- bool SetValue(DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- const smart_objects::SmartObject& param);
-
- /**
- * \brief sets value for every element of argument
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param param array values of argument
- * \return true if success
- */
- bool SetArrayValue(DBusMessageIter* iter,
- const ford_message_descriptions::ArrayDescription* rules,
- const smart_objects::SmartObject& param);
-
- /**
- * \brief sets struct value for argument
- * \param iter DBus message iter
- * \param rules description for argument
- * \param param structure
- * \return true if success
- */
- bool SetStructValue(DBusMessageIter* iter,
- const ford_message_descriptions::StructDescription* rules,
- const smart_objects::SmartObject& param);
-
- /**
- * \brief sets optional value for argument.
- * Optional param is struct bool, value
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param param value of optional argument
- * \return true if success
- */
- bool SetOptionalValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- const smart_objects::SmartObject& param);
-
- /**
- * \brief gets arguments from message
- * \param iter DBus message iterator
- * \param code response code (output)
- * \param message response message (output)
- * \return true if success
- */
- bool GetHeader(DBusMessageIter* iter, int* code, std::string* message);
-
- /**
- * \brief gets arguments from message with header
- * \param iter DBus message iterator
- * \param rules list of rules for arguments
- * \param args map of arguments
- * \return true if success
- */
- bool GetArguments(DBusMessageIter* iter,
- const ListArgs& rules,
- smart_objects::SmartObject& args);
-
- /**
- * \brief gets one argument from message
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param args map of arguments
- * \return true if success
- */
- bool GetOneArgument(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- smart_objects::SmartObject& args);
-
- /**
- * \brief gets value for argument
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param param value of argument
- * \return true if success
- */
- bool GetValue(DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- smart_objects::SmartObject& param);
-
- /**
- * \brief gets value for every element of argument
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param param array values of argument
- * \return true if success
- */
- bool GetArrayValue(DBusMessageIter* iter,
- const ford_message_descriptions::ArrayDescription* rules,
- smart_objects::SmartObject& param);
-
- /**
- * \brief gets struct value for argument
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param param structure
- * \return true if success
- */
- bool GetStructValue(DBusMessageIter* iter,
- const ford_message_descriptions::StructDescription* rules,
- smart_objects::SmartObject& param);
-
- /**
- * \brief gets optional value for argument.
- * Optional param is struct bool, value
- * \param iter DBus message iterator
- * \param rules description for argument
- * \param param value of optional argument
- * \return true if success
- */
- bool GetOptionalValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- smart_objects::SmartObject& param);
-
- /**
- * \brief processes request on introspect
- * \param msg DBus message
- */
- void Introspect(DBusMessage* msg);
-};
-
-} // namespace dbus
-
-#endif // SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_ADAPTER_H_
diff --git a/src/components/dbus/include/dbus/dbus_message.h b/src/components/dbus/include/dbus/dbus_message.h
deleted file mode 100644
index 23e672d0fc..0000000000
--- a/src/components/dbus/include/dbus/dbus_message.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Copyright (c) 2014, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_H_
-#define SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_H_
-
-#include <stdint.h>
-#include <string>
-
-#include <dbus/dbus.h>
-
-namespace dbus {
-
-enum ContainerType {
- kArray = DBUS_TYPE_ARRAY,
- kStruct = DBUS_TYPE_STRUCT,
- kDictEntry = DBUS_TYPE_DICT_ENTRY
-};
-
-class MessageRefKeeper {
- public:
- MessageRefKeeper();
- MessageRefKeeper(DBusMessage* message);
- ~MessageRefKeeper();
- MessageRefKeeper(const MessageRefKeeper& other);
- MessageRefKeeper& operator=(MessageRefKeeper other);
- DBusMessage* get() const;
- DBusMessage* Pass();
- void swap(MessageRefKeeper& other);
-
- private:
- DBusMessage* raw_message_;
-};
-
-class MessageRef {
- public:
- MessageRef(DBusMessage* message);
- ~MessageRef();
- std::string GetInterface() const;
- std::string GetMember() const;
-
- protected:
- MessageRefKeeper raw_message_ref_;
- friend class MessageReader;
- friend class MessageWriter;
-};
-
-class MessageReader {
- public:
- // Main constructor
- MessageReader(const MessageRef& message);
- bool has_failed() const;
- bool IsAtLastElement() const;
- bool HasNext() const;
-
- // Type checkers
- bool NextIsInvalid() const;
- bool NextIsBool() const;
- bool NextIsByte() const;
- bool NextIsInt16() const;
- bool NextIsUint16() const;
- bool NextIsInt32() const;
- bool NextIsUint32() const;
- bool NextIsInt64() const;
- bool NextIsUint64() const;
- bool NextIsDouble() const;
- bool NextIsString() const;
- bool NextIsArray() const;
- bool NextIsStruct() const;
- bool NextIsDictEntry() const;
-
- // Readers
- bool TakeBool();
- uint8_t TakeByte();
- int16_t TakeInt16();
- uint16_t TakeUint16();
- int32_t TakeInt32();
- uint32_t TakeUint32();
- int64_t TakeInt64();
- uint64_t TakeUint64();
- double TakeDouble();
- std::string TakeString();
-
- MessageReader TakeArrayReader();
- MessageReader TakeStructReader();
- MessageReader TakeDictEntryReader();
-
- private:
- typedef int DataType;
- // Container reader constructor
- MessageReader(MessageReader* reader, DataType container_data_type);
- void MoveToNext();
- void MarkFailed();
- DataType NextValueType() const;
- void ReadNextValue(DataType type, void* value);
-
- private:
- // Fields
- MessageReader* parent_reader_;
- bool failed_;
- DBusMessageIter iterator_;
-};
-
-class MessageWriter {
- public:
- // Methods
- // Main appending constructor
- MessageWriter(const MessageRef& message);
- // Container writer constructor
- MessageWriter(MessageWriter* parent,
- ContainerType type,
- const char* array_signature);
- ~MessageWriter();
- void PutBool(bool value);
- void PutByte(uint8_t value);
- void PutInt16(int16_t value);
- void PutUint16(uint16_t value);
- void PutInt32(int32_t value);
- void PutUint32(uint32_t value);
- void PutInt64(int64_t value);
- void PutUint64(uint64_t value);
- void PutDouble(double value);
- void PutString(const std::string& value);
-
- private:
- typedef int DataType;
- // Main constructor
- void WriteAndCheck(DataType value_type, const void* value);
- void CloseWriter();
-
- private:
- // Fields
- bool has_opened_subcontainer_;
- MessageWriter* parent_writer_;
- DBusMessageIter iterator_;
-
- // Disallow copy and assign
- MessageWriter(const MessageWriter& other);
- MessageWriter& operator=(const MessageWriter& other);
-};
-
-MessageRef MethodCall(const char* bus_name,
- const char* path,
- const char* interface,
- const char* method);
-MessageRef Signal(const char* path, const char* interface, const char* name);
-} // namespace dbus
-
-#include "dbus/dbus_message_inl.h"
-
-#endif // SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_H_
diff --git a/src/components/dbus/include/dbus/dbus_message_controller.h b/src/components/dbus/include/dbus/dbus_message_controller.h
deleted file mode 100644
index a4a3718ce3..0000000000
--- a/src/components/dbus/include/dbus/dbus_message_controller.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_CONTROLLER_H_
-#define SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_CONTROLLER_H_
-
-#include <string>
-#include <map>
-#include "dbus/dbus_adapter.h"
-#include "smart_objects/smart_object.h"
-
-namespace dbus {
-
-class DBusMessageController : public DBusAdapter {
- public:
- /**
- * @brief constructs DBus message controller
- * @param sdlServiceName name of service SDL
- * @param sdlObjectPath path of object SDL
- * @param hmiServiceName name of service HMI
- * @param hmiObjectPath path of object HMI
- */
- DBusMessageController(const std::string& sdlServiceName,
- const std::string& sdlObjectPath,
- const std::string& hmiServiceName,
- const std::string& hmiObjectPath);
-
- /**
- * @brief destructs DBus message controller
- */
- virtual ~DBusMessageController();
-
- /**
- * @brief subscribes to the DBus signal.
- * @param interface name of interface in HMI
- * @param signal name of signal
- */
- void SubscribeTo(const std::string& interface, const std::string& signal);
-
- /**
- * @brief Method for receiving thread.
- */
- void* MethodForReceiverThread(void*);
-
- /**
- * @brief Main thread loop.
- */
- bool Run();
-
- /**
- * @brief Signal shutdown for thread loop.
- */
- void Shutdown();
-
- protected:
- /**
- * @brief sends message to core
- * @param obj
- */
- virtual void SendMessageToCore(const smart_objects::SmartObject& obj) = 0;
-
- private:
- bool shutdown_;
-};
-
-} // namespace dbus
-
-#endif // SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_CONTROLLER_H_
diff --git a/src/components/dbus/include/dbus/dbus_message_inl.h b/src/components/dbus/include/dbus/dbus_message_inl.h
deleted file mode 100644
index ba9bfaa78d..0000000000
--- a/src/components/dbus/include/dbus/dbus_message_inl.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/* Copyright (c) 2014, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_INL_H_
-#define SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_INL_H_
-
-#include "dbus/dbus_message.h"
-
-namespace dbus {
-// MessageReader
-inline bool MessageReader::has_failed() const {
- return failed_;
-}
-
-inline bool MessageReader::IsAtLastElement() const {
- DBusMessageIter* iter = const_cast<DBusMessageIter*>(&iterator_);
- return dbus_message_iter_has_next(iter) == 0;
-}
-
-inline bool MessageReader::HasNext() const {
- return !failed_ && NextValueType() != DBUS_TYPE_INVALID;
-}
-
-inline bool MessageReader::NextIsInvalid() const {
- return NextValueType() == DBUS_TYPE_INVALID;
-}
-
-inline bool MessageReader::NextIsBool() const {
- return NextValueType() == DBUS_TYPE_BOOLEAN;
-}
-
-inline bool MessageReader::NextIsByte() const {
- return NextValueType() == DBUS_TYPE_BYTE;
-}
-
-inline bool MessageReader::NextIsInt16() const {
- return NextValueType() == DBUS_TYPE_INT16;
-}
-
-inline bool MessageReader::NextIsUint16() const {
- return NextValueType() == DBUS_TYPE_UINT16;
-}
-
-inline bool MessageReader::NextIsInt32() const {
- return NextValueType() == DBUS_TYPE_INT32;
-}
-
-inline bool MessageReader::NextIsUint32() const {
- return NextValueType() == DBUS_TYPE_UINT32;
-}
-
-inline bool MessageReader::NextIsInt64() const {
- return NextValueType() == DBUS_TYPE_INT64;
-}
-
-inline bool MessageReader::NextIsUint64() const {
- return NextValueType() == DBUS_TYPE_UINT64;
-}
-
-inline bool MessageReader::NextIsDouble() const {
- return NextValueType() == DBUS_TYPE_DOUBLE;
-}
-
-inline bool MessageReader::NextIsString() const {
- return NextValueType() == DBUS_TYPE_STRING;
-}
-
-inline bool MessageReader::NextIsArray() const {
- return NextValueType() == DBUS_TYPE_ARRAY;
-}
-
-inline bool MessageReader::NextIsStruct() const {
- return NextValueType() == DBUS_TYPE_STRUCT;
-}
-
-inline bool MessageReader::TakeBool() {
- dbus_bool_t value = 0;
- ReadNextValue(DBUS_TYPE_BOOLEAN, &value);
- return value != 0;
-}
-
-inline uint8_t MessageReader::TakeByte() {
- uint8_t value = 0;
- ReadNextValue(DBUS_TYPE_BYTE, &value);
- return value;
-}
-
-inline int16_t MessageReader::TakeInt16() {
- int16_t value = 0;
- ReadNextValue(DBUS_TYPE_INT16, &value);
- return value;
-}
-
-inline uint16_t MessageReader::TakeUint16() {
- uint16_t value = 0;
- ReadNextValue(DBUS_TYPE_UINT16, &value);
- return value;
-}
-
-inline int32_t MessageReader::TakeInt32() {
- int32_t value = 0;
- ReadNextValue(DBUS_TYPE_INT32, &value);
- return value;
-}
-
-inline uint32_t MessageReader::TakeUint32() {
- uint32_t value = 0;
- ReadNextValue(DBUS_TYPE_UINT32, &value);
- return value;
-}
-
-inline int64_t MessageReader::TakeInt64() {
- int64_t value = 0;
- ReadNextValue(DBUS_TYPE_INT64, &value);
- return value;
-}
-
-inline uint64_t MessageReader::TakeUint64() {
- uint64_t value = 0;
- ReadNextValue(DBUS_TYPE_UINT64, &value);
- return value;
-}
-
-inline double MessageReader::TakeDouble() {
- double value = 0.;
- ReadNextValue(DBUS_TYPE_DOUBLE, &value);
- return value;
-}
-
-inline std::string MessageReader::TakeString() {
- const char* value = "";
- ReadNextValue(DBUS_TYPE_STRING, &value);
- return value;
-}
-
-inline MessageReader::DataType MessageReader::NextValueType() const {
- DBusMessageIter* iter = const_cast<DBusMessageIter*>(&iterator_);
- return failed_ ? DBUS_TYPE_INVALID : dbus_message_iter_get_arg_type(iter);
-}
-
-// Message writer methods
-inline void MessageWriter::PutBool(bool value) {
- dbus_bool_t dbus_value = value;
- WriteAndCheck(DBUS_TYPE_BOOLEAN, &dbus_value);
-}
-
-inline void MessageWriter::PutByte(uint8_t value) {
- WriteAndCheck(DBUS_TYPE_BYTE, &value);
-}
-
-inline void MessageWriter::PutInt16(int16_t value) {
- WriteAndCheck(DBUS_TYPE_INT16, &value);
-}
-
-inline void MessageWriter::PutUint16(uint16_t value) {
- WriteAndCheck(DBUS_TYPE_UINT16, &value);
-}
-
-inline void MessageWriter::PutInt32(int32_t value) {
- WriteAndCheck(DBUS_TYPE_INT32, &value);
-}
-
-inline void MessageWriter::PutUint32(uint32_t value) {
- WriteAndCheck(DBUS_TYPE_UINT32, &value);
-}
-
-inline void MessageWriter::PutInt64(int64_t value) {
- WriteAndCheck(DBUS_TYPE_INT64, &value);
-}
-
-inline void MessageWriter::PutUint64(uint64_t value) {
- WriteAndCheck(DBUS_TYPE_UINT64, &value);
-}
-
-inline void MessageWriter::PutDouble(double value) {
- WriteAndCheck(DBUS_TYPE_DOUBLE, &value);
-}
-
-inline void MessageWriter::PutString(const std::string& value) {
- const char* pointer = value.c_str();
- WriteAndCheck(DBUS_TYPE_STRING, &pointer);
-}
-
-} // namespace dbus
-
-#endif // SRC_COMPONENTS_DBUS_INCLUDE_DBUS_DBUS_MESSAGE_INL_H_
diff --git a/src/components/dbus/include/dbus/schema.h b/src/components/dbus/include/dbus/schema.h
deleted file mode 100644
index 3dfe49cc95..0000000000
--- a/src/components/dbus/include/dbus/schema.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-#ifndef SRC_COMPONENTS_DBUS_INCLUDE_DBUS_SCHEMA_H_
-#define SRC_COMPONENTS_DBUS_INCLUDE_DBUS_SCHEMA_H_
-
-#include <string>
-#include <vector>
-#include <utility>
-
-#include "dbus/message_descriptions.h"
-#include "interfaces/HMI_API.h"
-
-namespace dbus {
-
-using ford_message_descriptions::ParameterDescription;
-using ford_message_descriptions::MessageDescription;
-
-struct Description;
-
-typedef hmi_apis::FunctionID::eType MessageId;
-typedef hmi_apis::messageType::eType MessageType;
-typedef std::pair<std::string, std::string> MessageName; // interface, message
-typedef std::vector<const ParameterDescription*> ListArgs;
-typedef std::vector<const Description*> Messages;
-
-/**
- * \brief Wrapper class for message description
- */
-class DBusSchema {
- public:
- explicit DBusSchema(const MessageDescription** array);
-
- /**
- * \brief gets message name by message id
- * \param id id message
- * \return name message
- */
- MessageName getMessageName(MessageId id) const;
-
- /**
- * \brief gets message id by message name
- * \param name name message
- * \return id message
- */
- MessageId getMessageId(const MessageName& name) const;
-
- /**
- * \brief gets list rules for arguments
- * \param id id message
- * \param type type message
- * \return list rules
- */
- ListArgs getListArgs(MessageId id, MessageType type) const;
-
- /**
- * \brief gets list rules for arguments
- * @param name name message
- * @param type type message
- * @return list rules
- */
- ListArgs getListArgs(const MessageName& name, MessageType type) const;
-
- private:
- Messages msgs_;
-};
-
-} // namespace dbus
-
-#endif // SRC_COMPONENTS_DBUS_INCLUDE_DBUS_SCHEMA_H_
diff --git a/src/components/dbus/src/dbus_adapter.cc b/src/components/dbus/src/dbus_adapter.cc
deleted file mode 100644
index 33d05a728b..0000000000
--- a/src/components/dbus/src/dbus_adapter.cc
+++ /dev/null
@@ -1,937 +0,0 @@
-/*
- * Copyright (c) 2013-2014, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#include "dbus/dbus_adapter.h"
-#include <dbus/dbus.h>
-#include <sstream>
-#include "formatters/CSmartFactory.h"
-#include "utils/logger.h"
-#include "smart_objects/smart_object.h"
-#include "introspection_xml.cc"
-#include "message_descriptions.cc"
-
-using ford_message_descriptions::ParameterDescription;
-namespace sos = NsSmartDeviceLink::NsJSONHandler::strings;
-
-extern char introspection_xml[];
-
-namespace dbus {
-
-CREATE_LOGGERPTR_GLOBAL(logger_, "HMIMessageHandler")
-
-std::vector<std::string>& split(const std::string& s,
- char delim,
- std::vector<std::string>& elems) {
- std::stringstream ss(s);
- std::string item;
- while (std::getline(ss, item, delim)) {
- elems.push_back(item);
- }
- return elems;
-}
-
-DBusAdapter::DBusAdapter(const std::string& sdlServiceName,
- const std::string& sdlObjectPath,
- const std::string& hmiServiceName,
- const std::string& hmiObjectPath)
- : sdl_service_name_(sdlServiceName)
- , sdl_object_path_(sdlObjectPath)
- , hmi_service_name_(hmiServiceName)
- , hmi_object_path_(hmiObjectPath)
- , conn_(NULL)
- , schema_(new DBusSchema(ford_message_descriptions::message_descriptions)) {
-}
-
-DBusAdapter::~DBusAdapter() {
- dbus_shutdown();
- delete schema_;
-}
-
-bool DBusAdapter::Init() {
- DBusError err;
- int ret;
- dbus_error_init(&err);
- if (!dbus_threads_init_default()) {
- LOG4CXX_ERROR(logger_, "DBus: Can't initializes threads");
- return false;
- }
- conn_ = dbus_bus_get(DBUS_BUS_SESSION, &err);
- if (dbus_error_is_set(&err)) {
- LOG4CXX_ERROR(logger_, "DBus: Connection Error " << err.message);
- dbus_error_free(&err);
- return false;
- }
- ret = dbus_bus_request_name(
- conn_, sdl_service_name_.c_str(), DBUS_NAME_FLAG_DO_NOT_QUEUE, &err);
- if (ret == -1 || dbus_error_is_set(&err)) {
- LOG4CXX_ERROR(logger_, "DBus: Can't request name " << err.name);
- dbus_error_free(&err);
- return false;
- }
- if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
- LOG4CXX_ERROR(logger_,
- "DBus: Service '" << sdl_service_name_
- << "' is already running");
- return false;
- }
-
- LOG4CXX_INFO(logger_, "DBus: Success init dbus adaptor");
- return true;
-}
-
-bool DBusAdapter::Process(smart_objects::SmartObject& obj) {
- if (conn_ == NULL) {
- LOG4CXX_ERROR(logger_, "DBus: DBusAdaptor isn't initialized");
- return false;
- }
- DBusMessage* msg = dbus_connection_pop_message(conn_);
- if (msg != NULL) {
- switch (dbus_message_get_type(msg)) {
- case DBUS_MESSAGE_TYPE_METHOD_CALL:
- return ProcessMethodCall(msg, obj);
- case DBUS_MESSAGE_TYPE_METHOD_RETURN:
- return ProcessMethodReturn(msg, obj);
- case DBUS_MESSAGE_TYPE_ERROR:
- return ProcessError(msg, obj);
- case DBUS_MESSAGE_TYPE_SIGNAL:
- return ProcessSignal(msg, obj);
- default:
- return false;
- }
- } else {
- dbus_connection_read_write(conn_, 50);
- }
- return false;
-}
-
-void DBusAdapter::MethodReturn(uint id,
- const MessageId func_id,
- const MessageName& name,
- const smart_objects::SmartObject& obj) {
- LOG4CXX_DEBUG(logger_, "Method return " << name.first << "." << name.second);
- if (conn_ == NULL) {
- LOG4CXX_ERROR(logger_, "DBus: DBusAdaptor isn't init");
- return;
- }
-
- if (func_id == hmi_apis::FunctionID::INVALID_ENUM) {
- LOG4CXX_ERROR(logger_, "DBus: Invalid name method");
- return;
- }
-
- DBusMessage* msg = GetRequestFromHMI(id);
- if (!msg) {
- LOG4CXX_WARN(logger_, "DBus: request from HMI is not found");
- return;
- }
-
- DBusMessage* reply;
- reply = dbus_message_new_method_return(msg);
- if (NULL == reply) {
- LOG4CXX_WARN(logger_, "DBus: Failed call method (Message Null)");
- return;
- }
-
- const ListArgs& args =
- schema_->getListArgs(func_id, hmi_apis::messageType::response);
- if (!SetArguments(reply, args, obj)) {
- LOG4CXX_ERROR(logger_, "DBus: Failed call method (Signature is wrong)");
- dbus_message_unref(reply);
- dbus_message_unref(msg);
- return;
- }
-
- dbus_uint32_t serial;
- if (!dbus_connection_send(conn_, reply, &serial)) {
- LOG4CXX_ERROR(logger_, "DBus: Failed call method (Can't send message)");
- dbus_message_unref(reply);
- dbus_message_unref(msg);
- return;
- }
- dbus_connection_flush(conn_);
- dbus_message_unref(reply);
- dbus_message_unref(msg);
- LOG4CXX_INFO(logger_, "DBus: Success return method");
-}
-
-void DBusAdapter::Error(uint id,
- const std::string& name,
- const std::string& description) {
- LOG4CXX_DEBUG(logger_, "Error " << name << ": " << description);
- if (conn_ == NULL) {
- LOG4CXX_ERROR(logger_, "DBus: DBusAdaptor isn't init");
- return;
- }
-
- DBusMessage* msg = GetRequestFromHMI(id);
- if (!msg) {
- LOG4CXX_WARN(logger_, "DBus: request from HMI is not found");
- return;
- }
-
- DBusMessage* error;
- error = dbus_message_new_error(msg, name.c_str(), description.c_str());
- if (NULL == error) {
- LOG4CXX_WARN(logger_, "DBus: Failed call method (Message Null)");
- return;
- }
-
- dbus_uint32_t serial;
- if (!dbus_connection_send(conn_, error, &serial)) {
- LOG4CXX_ERROR(logger_, "DBus: Failed call method (Can't send message)");
- dbus_message_unref(error);
- dbus_message_unref(msg);
- return;
- }
- dbus_connection_flush(conn_);
- dbus_message_unref(error);
- dbus_message_unref(msg);
- LOG4CXX_INFO(logger_, "DBus: Success error");
-}
-
-void DBusAdapter::MethodCall(uint id,
- const MessageId func_id,
- const MessageName& name,
- const smart_objects::SmartObject& obj) {
- LOG4CXX_DEBUG(logger_, "Method call " << name.first << "." << name.second);
- if (conn_ == NULL) {
- LOG4CXX_ERROR(logger_, "DBus: DBusAdaptor isn't init");
- return;
- }
-
- if (func_id == hmi_apis::FunctionID::INVALID_ENUM) {
- LOG4CXX_ERROR(logger_, "DBus: Invalid name method");
- return;
- }
-
- DBusMessage* msg;
- msg = dbus_message_new_method_call(
- hmi_service_name_.c_str(),
- hmi_object_path_.c_str(),
- (hmi_service_name_ + "." + name.first).c_str(),
- name.second.c_str());
- if (NULL == msg) {
- LOG4CXX_WARN(logger_, "DBus: Failed call method (Message Null)");
- return;
- }
-
- const ListArgs& args =
- schema_->getListArgs(func_id, hmi_apis::messageType::request);
- if (!SetArguments(msg, args, obj)) {
- LOG4CXX_ERROR(logger_, "DBus: Failed call method (Signature is wrong)");
- dbus_message_unref(msg);
- return;
- }
-
- dbus_uint32_t serial;
- if (!dbus_connection_send(conn_, msg, &serial)) {
- LOG4CXX_ERROR(logger_, "DBus: Failed call method (Can't send message)");
- dbus_message_unref(msg);
- return;
- }
- SaveRequestToHMI(serial, std::make_pair(id, func_id));
- dbus_message_unref(msg);
- LOG4CXX_INFO(logger_, "DBus: Success call method");
-}
-
-void DBusAdapter::Signal(const MessageId func_id,
- const MessageName& name,
- const smart_objects::SmartObject& obj) {
- LOG4CXX_DEBUG(logger_, "Signal " << name.first << "." << name.second);
- if (conn_ == NULL) {
- LOG4CXX_ERROR(logger_, "DBus: DBusAdaptor isn't init");
- return;
- }
-
- if (func_id == hmi_apis::FunctionID::INVALID_ENUM) {
- LOG4CXX_ERROR(logger_, "DBus: Invalid name method");
- return;
- }
-
- DBusMessage* msg;
- msg = dbus_message_new_signal(sdl_object_path_.c_str(),
- (sdl_service_name_ + "." + name.first).c_str(),
- name.second.c_str());
- if (NULL == msg) {
- LOG4CXX_WARN(logger_, "DBus: Failed emit signal (Message Null)");
- return;
- }
-
- const ListArgs& args =
- schema_->getListArgs(func_id, hmi_apis::messageType::notification);
- if (!SetArguments(msg, args, obj)) {
- LOG4CXX_ERROR(logger_, "DBus: Failed call method (Signature is wrong)");
- dbus_message_unref(msg);
- return;
- }
-
- if (!dbus_connection_send(conn_, msg, NULL)) { // serial isn't required
- LOG4CXX_WARN(logger_, "DBus: Failed emit signal (Out Of Memory)");
- dbus_message_unref(msg);
- return;
- }
- dbus_message_unref(msg);
- LOG4CXX_INFO(logger_, "DBus: Success emit signal");
-}
-
-void DBusAdapter::AddMatch(const std::string& rule) {
- LOG4CXX_INFO(logger_, "Subscription: " << rule);
- dbus_bus_add_match(conn_, rule.c_str(), NULL);
-}
-
-bool DBusAdapter::ProcessMethodCall(DBusMessage* msg,
- smart_objects::SmartObject& obj) {
- std::string method = dbus_message_get_member(msg);
- std::string interface = dbus_message_get_interface(msg);
- LOG4CXX_INFO(logger_, "DBus: name of method " << interface << " " << method);
-
- if (interface == "org.freedesktop.DBus.Introspectable" &&
- method == "Introspect") {
- LOG4CXX_INFO(logger_, "DBus: INTROSPECT");
- Introspect(msg);
- return false;
- }
-
- std::vector<std::string> elems;
- split(interface, '.', elems);
- MessageName name(elems.back(), method);
- MessageId m_id = schema_->getMessageId(name);
- if (m_id == hmi_apis::FunctionID::INVALID_ENUM) {
- LOG4CXX_ERROR(logger_, "DBus: Invalid name method call from hmi");
- return false;
- }
-
- uint32_t serial = dbus_message_get_serial(msg);
- if (!serial) {
- LOG4CXX_ERROR(logger_, "DBus: Serial of request from HMI isn't defined");
- return false;
- }
-
- obj[sos::S_PARAMS][sos::S_CORRELATION_ID] = serial;
- obj[sos::S_PARAMS][sos::S_FUNCTION_ID] = m_id;
- obj[sos::S_PARAMS][sos::S_MESSAGE_TYPE] = hmi_apis::messageType::request;
- obj[sos::S_MSG_PARAMS] =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
-
- const ListArgs args =
- schema_->getListArgs(name, hmi_apis::messageType::request);
-
- DBusMessageIter iter;
- dbus_message_iter_init(msg, &iter);
- if (GetArguments(&iter, args, obj[sos::S_MSG_PARAMS])) {
- SaveRequestFromHMI(serial, msg);
- return true;
- }
- return false;
-}
-
-bool DBusAdapter::ProcessMethodReturn(DBusMessage* msg,
- smart_objects::SmartObject& obj) {
- LOG4CXX_AUTO_TRACE(logger_);
- dbus_uint32_t reply_serial = dbus_message_get_reply_serial(msg);
- std::pair<uint, MessageId> ids = GetRequestToHMI(reply_serial);
- if (ids.second == hmi_apis::FunctionID::INVALID_ENUM) {
- LOG4CXX_ERROR(logger_, "DBus: Invalid name method");
- return false;
- }
-
- obj[sos::S_MSG_PARAMS] =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
-
- ListArgs args =
- schema_->getListArgs(ids.second, hmi_apis::messageType::response);
- DBusMessageIter iter;
- dbus_message_iter_init(msg, &iter);
- int code = 0;
- std::string message;
- smart_objects::SmartObject description(smart_objects::SmartType_Map);
- bool ret = GetHeader(&iter, &code, &message) &&
- GetArguments(&iter, args, description);
-
- if (ret) {
- obj[sos::S_PARAMS][sos::S_CORRELATION_ID] = ids.first;
- obj[sos::S_PARAMS][sos::S_FUNCTION_ID] = ids.second;
- obj[sos::S_PARAMS][sos::S_MESSAGE_TYPE] = hmi_apis::messageType::response;
- obj[sos::S_PARAMS][sos::kCode] = code;
- obj[sos::S_PARAMS][sos::kMessage] = message;
- if (code != hmi_apis::Common_Result::SUCCESS) {
- MessageName name = schema_->getMessageName(ids.second);
- description["method"] = name.first + "." + name.second;
- obj[sos::S_PARAMS]["data"] = description;
- } else {
- obj[sos::S_MSG_PARAMS] = description;
- }
- }
-
- dbus_message_unref(msg);
- return ret;
-}
-
-bool DBusAdapter::ProcessError(DBusMessage* msg,
- smart_objects::SmartObject& obj) {
- dbus_uint32_t reply_serial = dbus_message_get_reply_serial(msg);
- std::pair<uint, MessageId> ids = GetRequestToHMI(reply_serial);
- if (ids.second == hmi_apis::FunctionID::INVALID_ENUM) {
- LOG4CXX_ERROR(logger_, "DBus: Invalid name method");
- return false;
- }
-
- const char* error_name;
- bool ret = false;
- if ((error_name = dbus_message_get_error_name(msg)) != NULL) {
- smart_objects::SmartObject name(smart_objects::SmartType_String);
- name = error_name;
- ford_message_descriptions::ParameterDescription rule = {
- "description", ford_message_descriptions::String, true};
- ListArgs args;
- args.push_back(&rule);
- smart_objects::SmartObject description(smart_objects::SmartType_Map);
- description[rule.name] =
- smart_objects::SmartObject(smart_objects::SmartType_String);
-
- DBusMessageIter iter;
- dbus_message_iter_init(msg, &iter);
- ret = GetArguments(&iter, args, description);
- MessageName method = schema_->getMessageName(ids.second);
-
- obj[sos::S_PARAMS][sos::S_CORRELATION_ID] = ids.first;
- obj[sos::S_PARAMS][sos::S_FUNCTION_ID] = ids.second;
- obj[sos::S_PARAMS][sos::S_MESSAGE_TYPE] =
- hmi_apis::messageType::error_response;
- obj[sos::S_PARAMS][sos::kCode] = name.asInt();
- obj[sos::S_PARAMS][sos::kMessage] = description[rule.name].asString();
- obj[sos::S_MSG_PARAMS] =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- obj[sos::S_PARAMS]["data"]["method"] = method.first + "." + method.second;
-
- LOG4CXX_WARN(logger_,
- "DBus: Call of method " << method.first << "." << method.second
- << " returned error " << name.asInt()
- << ": "
- << description[rule.name].asString());
- } else {
- LOG4CXX_ERROR(logger_, "DBus: Type message isn't error");
- }
-
- dbus_message_unref(msg);
- return ret;
-}
-
-bool DBusAdapter::ProcessSignal(DBusMessage* msg,
- smart_objects::SmartObject& obj) {
- std::string method = dbus_message_get_member(msg);
- std::string interface = dbus_message_get_interface(msg);
- LOG4CXX_INFO(logger_, "DBus: name of signal " << method);
-
- std::vector<std::string> elems;
- split(interface, '.', elems);
- MessageName name(elems.back(), method);
- MessageId m_id = schema_->getMessageId(name);
- if (m_id == hmi_apis::FunctionID::INVALID_ENUM) {
- LOG4CXX_ERROR(logger_, "DBus: Invalid name signal");
- return false;
- }
-
- obj[sos::S_PARAMS][sos::S_FUNCTION_ID] = m_id;
- obj[sos::S_PARAMS][sos::S_MESSAGE_TYPE] = hmi_apis::messageType::notification;
- obj[sos::S_MSG_PARAMS] =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
-
- const ListArgs args =
- schema_->getListArgs(name, hmi_apis::messageType::notification);
-
- DBusMessageIter iter;
- dbus_message_iter_init(msg, &iter);
- bool ret = GetArguments(&iter, args, obj[sos::S_MSG_PARAMS]);
- dbus_message_unref(msg);
- return ret;
-}
-
-bool DBusAdapter::SetArguments(DBusMessage* msg,
- const ListArgs& rules,
- const smart_objects::SmartObject& args) {
- DBusMessageIter iter;
- dbus_message_iter_init_append(msg, &iter);
- size_t size = rules.size();
- for (size_t i = 0; i < size; ++i) {
- const smart_objects::SmartObject& param = args.getElement(rules[i]->name);
- if (!SetOneArgument(&iter, rules[i], param)) {
- return false;
- }
- }
- return true;
-}
-
-bool DBusAdapter::SetOneArgument(DBusMessageIter* iter,
- const ParameterDescription* rules,
- const smart_objects::SmartObject& param) {
- if (rules->obligatory) {
- if (param.isValid()) {
- return SetValue(iter, rules, param);
- } else {
- LOG4CXX_WARN(logger_,
- "DBus: Argument '" << rules->name << "' is obligatory!");
- return false;
- }
- } else {
- return SetOptionalValue(iter, rules, param);
- }
-}
-
-bool DBusAdapter::SetValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- const smart_objects::SmartObject& param) {
- // LOG4CXX_DEBUG(logger_, "DBus: Set param " << rules->name << " = " <<
- // param.asString());
- int type = 0;
- void* value = 0;
- dbus_int32_t integerValue = 0;
- double floatValue = 0;
- dbus_bool_t booleanValue = false;
- std::string stringValue;
- const char* cStringValue;
- switch (rules->type) {
- case ford_message_descriptions::ParameterType::Array:
- return SetArrayValue(
- iter,
- reinterpret_cast<const ford_message_descriptions::ArrayDescription*>(
- rules),
- param);
- break;
- case ford_message_descriptions::ParameterType::Struct:
- return SetStructValue(
- iter,
- reinterpret_cast<const ford_message_descriptions::StructDescription*>(
- rules),
- param);
- break;
- case ford_message_descriptions::ParameterType::Enum:
- case ford_message_descriptions::ParameterType::Integer:
- type = DBUS_TYPE_INT32;
- integerValue = param.asInt();
- value = &integerValue;
- break;
- case ford_message_descriptions::ParameterType::Float:
- type = DBUS_TYPE_DOUBLE;
- floatValue = param.asDouble();
- value = &floatValue;
- break;
- case ford_message_descriptions::ParameterType::Boolean:
- type = DBUS_TYPE_BOOLEAN;
- booleanValue = param.asBool();
- value = &booleanValue;
- break;
- case ford_message_descriptions::ParameterType::String:
- type = DBUS_TYPE_STRING;
- stringValue = param.asString();
- cStringValue = stringValue.c_str();
- value = &cStringValue;
- break;
- default:
- LOG4CXX_ERROR(logger_, "DBus: Unknown type of argument");
- return false;
- }
- return dbus_message_iter_append_basic(iter, type, value);
-}
-
-bool DBusAdapter::SetOptionalValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- const smart_objects::SmartObject& param) {
- DBusMessageIter sub_iter;
- if (!dbus_message_iter_open_container(
- iter, DBUS_TYPE_STRUCT, NULL, &sub_iter)) {
- LOG4CXX_ERROR(
- logger_,
- "DBus: Can't open container type (STRUCT) for optional parameter");
- return false;
- }
-
- ford_message_descriptions::ParameterDescription flagRules = {
- "flag", ford_message_descriptions::Boolean, true};
- smart_objects::SmartObject flag(param.getType() !=
- smart_objects::SmartType_Invalid);
- if (!SetValue(&sub_iter, &flagRules, flag) ||
- !SetValue(&sub_iter, rules, param)) {
- return false;
- }
-
- if (!dbus_message_iter_close_container(iter, &sub_iter)) {
- LOG4CXX_ERROR(
- logger_,
- "DBus: Can't close container type (STRUCT) for optional parameter");
- return false;
- }
- return true;
-}
-
-bool DBusAdapter::SetArrayValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::ArrayDescription* rules,
- const smart_objects::SmartObject& param) {
- smart_objects::SmartType type = param.getType();
- if (type != smart_objects::SmartType_Array &&
- type != smart_objects::SmartType_Invalid) {
- LOG4CXX_ERROR(logger_, "DBus: SmartObject is not a map");
- return false;
- }
- DBusMessageIter sub_iter;
- if (!dbus_message_iter_open_container(
- iter, DBUS_TYPE_ARRAY, rules->element_dbus_signature, &sub_iter)) {
- LOG4CXX_ERROR(logger_, "DBus: Can't open container type (ARRAY)");
- return false;
- }
- size_t size = param.length();
- for (size_t i = 0; i < size; ++i) {
- if (!SetValue(&sub_iter, rules->element, param[i])) {
- return false;
- }
- }
- if (!dbus_message_iter_close_container(iter, &sub_iter)) {
- LOG4CXX_ERROR(logger_, "DBus: Can't close container type (ARRAY)");
- return false;
- }
- return true;
-}
-
-bool DBusAdapter::SetStructValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::StructDescription* rules,
- const smart_objects::SmartObject& structure) {
- smart_objects::SmartType type = structure.getType();
- if (type != smart_objects::SmartType_Map &&
- type != smart_objects::SmartType_Invalid) {
- LOG4CXX_ERROR(logger_, "DBus: SmartObject is not a map");
- return false;
- }
- DBusMessageIter sub_iter;
- if (!dbus_message_iter_open_container(
- iter, DBUS_TYPE_STRUCT, NULL, &sub_iter)) {
- LOG4CXX_ERROR(logger_, "DBus: Can't open container type (STRUCT)");
- return false;
- }
- const ParameterDescription** entry;
- entry = rules->parameters;
- while (*entry != NULL) {
- const smart_objects::SmartObject& param =
- structure.getElement((*entry)->name);
- if (!SetOneArgument(&sub_iter, *entry, param)) {
- return false;
- }
- entry++;
- }
- if (!dbus_message_iter_close_container(iter, &sub_iter)) {
- LOG4CXX_ERROR(logger_, "DBus: Can't close container type (STRUCT)");
- return false;
- }
- return true;
-}
-
-bool DBusAdapter::GetHeader(DBusMessageIter* iter,
- int* code,
- std::string* message) {
- // Get code of response
- dbus_int32_t intValue;
- int type = dbus_message_iter_get_arg_type(iter);
- if (type != DBUS_TYPE_INT32) {
- LOG4CXX_ERROR(logger_, "DBus: Unknown format of header");
- return false;
- }
- dbus_message_iter_get_basic(iter, &intValue);
- *code = intValue;
- LOG4CXX_DEBUG(logger_, "DBus: Code of response " << *code);
-
- dbus_message_iter_next(iter);
-
- // Get message of response
- type = dbus_message_iter_get_arg_type(iter);
- if (type != DBUS_TYPE_STRING) {
- LOG4CXX_ERROR(logger_, "DBus: Unknown format of header");
- return false;
- }
- const char* stringValue;
- dbus_message_iter_get_basic(iter, &stringValue);
- *message = stringValue;
- LOG4CXX_DEBUG(logger_, "DBus: message of response " << *message);
-
- dbus_message_iter_next(iter);
- return true;
-}
-
-bool DBusAdapter::GetArguments(DBusMessageIter* iter,
- const ListArgs& rules,
- smart_objects::SmartObject& args) {
- LOG4CXX_AUTO_TRACE(logger_);
-
- size_t size = rules.size();
- for (size_t i = 0; i < size; ++i) {
- if (!GetOneArgument(iter, rules[i], args)) {
- return false;
- }
- dbus_message_iter_next(iter);
- }
- return true;
-}
-
-const DBusSchema& DBusAdapter::get_schema() const {
- return *schema_;
-}
-
-bool DBusAdapter::GetOneArgument(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- smart_objects::SmartObject& args) {
- if (rules->obligatory) {
- return GetValue(iter, rules, args[rules->name]);
- } else {
- return GetOptionalValue(iter, rules, args);
- }
-}
-
-bool DBusAdapter::GetValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- smart_objects::SmartObject& param) {
- LOG4CXX_DEBUG(logger_, "DBus: Get param " << rules->name);
- int type = dbus_message_iter_get_arg_type(iter);
- switch (rules->type) {
- case ford_message_descriptions::ParameterType::Array:
- if (type == DBUS_TYPE_ARRAY) {
- return GetArrayValue(
- iter,
- // FIXME (dchmerev@luxoft.com): not portable, danger cast.
- reinterpret_cast<
- const ford_message_descriptions::ArrayDescription*>(rules),
- param);
- } else {
- LOG4CXX_ERROR(logger_, "DBus: Not expected type of argument");
- return false;
- }
- break;
- case ford_message_descriptions::ParameterType::Struct:
- if (type == DBUS_TYPE_STRUCT) {
- return GetStructValue(
- iter,
- reinterpret_cast<
- const ford_message_descriptions::StructDescription*>(rules),
- param);
- } else {
- LOG4CXX_ERROR(logger_, "DBus: Not expected type of argument");
- return false;
- }
- break;
- case ford_message_descriptions::ParameterType::Enum:
- case ford_message_descriptions::ParameterType::Integer:
- if (type == DBUS_TYPE_INT32) {
- dbus_int32_t integerValue;
- dbus_message_iter_get_basic(iter, &integerValue);
- smart_objects::SmartObject value(integerValue);
- param = value;
- LOG4CXX_DEBUG(logger_,
- "DBus: " << rules->name << " = " << integerValue);
- } else {
- LOG4CXX_ERROR(logger_, "DBus: Not expected type of argument");
- return false;
- }
- break;
- case ford_message_descriptions::ParameterType::Float:
- if (type == DBUS_TYPE_DOUBLE) {
- double floatValue;
- dbus_message_iter_get_basic(iter, &floatValue);
- smart_objects::SmartObject value(floatValue);
- param = value;
- LOG4CXX_DEBUG(logger_, "DBus: " << rules->name << " = " << floatValue);
- } else {
- LOG4CXX_ERROR(logger_, "DBus: Not expected type of argument");
- return false;
- }
- break;
- case ford_message_descriptions::ParameterType::Boolean:
- if (type == DBUS_TYPE_BOOLEAN) {
- dbus_bool_t booleanValue;
- dbus_message_iter_get_basic(iter, &booleanValue);
- smart_objects::SmartObject value(static_cast<bool>(booleanValue));
- param = value;
- LOG4CXX_DEBUG(logger_,
- "DBus: " << rules->name << " = " << std::boolalpha
- << booleanValue);
- } else {
- LOG4CXX_ERROR(logger_, "DBus: Not expected type of argument");
- return false;
- }
- break;
- case ford_message_descriptions::ParameterType::String:
- if (type == DBUS_TYPE_STRING) {
- const char* stringValue;
- dbus_message_iter_get_basic(iter, &stringValue);
- std::string strValue = stringValue;
- smart_objects::SmartObject value(strValue);
- param = value;
- LOG4CXX_DEBUG(logger_,
- "DBus: " << rules->name << " = \"" << strValue << "\"");
- } else {
- LOG4CXX_ERROR(logger_, "DBus: Not expected type of argument");
- return false;
- }
- break;
- default:
- LOG4CXX_ERROR(logger_, "DBus: Unknown type of argument");
- return false;
- }
- return true;
-}
-
-bool DBusAdapter::GetArrayValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::ArrayDescription* rules,
- smart_objects::SmartObject& param) {
- smart_objects::SmartObject array(smart_objects::SmartType_Array);
-
- int i = 0;
- DBusMessageIter sub_iter;
- dbus_message_iter_recurse(iter, &sub_iter);
- while (dbus_message_iter_get_arg_type(&sub_iter) != DBUS_TYPE_INVALID) {
- if (!GetValue(&sub_iter, rules->element, array[i])) {
- return false;
- }
- dbus_message_iter_next(&sub_iter);
- i++;
- }
- param = array;
- return true;
-}
-
-bool DBusAdapter::GetStructValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::StructDescription* rules,
- smart_objects::SmartObject& param) {
- DBusMessageIter sub_iter;
- dbus_message_iter_recurse(iter, &sub_iter);
- const ParameterDescription** entry;
- entry = rules->parameters;
- smart_objects::SmartObject structure(smart_objects::SmartType_Map);
- while (*entry != NULL) {
- if (!GetOneArgument(&sub_iter, *entry, structure)) {
- return false;
- }
- dbus_message_iter_next(&sub_iter);
- entry++;
- }
- param = structure;
- return true;
-}
-
-bool DBusAdapter::GetOptionalValue(
- DBusMessageIter* iter,
- const ford_message_descriptions::ParameterDescription* rules,
- smart_objects::SmartObject& param) {
- int type = dbus_message_iter_get_arg_type(iter);
- if (type != DBUS_TYPE_STRUCT) {
- LOG4CXX_WARN(
- logger_,
- "DBus: Not expected type of argument. It is not optional parameter.");
- return false;
- }
-
- DBusMessageIter sub_iter;
- dbus_message_iter_recurse(iter, &sub_iter);
- ford_message_descriptions::ParameterDescription flagRules = {
- "flag", ford_message_descriptions::Boolean, true};
- smart_objects::SmartObject flag;
- if (!GetValue(&sub_iter, &flagRules, flag)) {
- return false;
- }
- if (flag.asBool()) {
- dbus_message_iter_next(&sub_iter);
- return GetValue(&sub_iter, rules, param[rules->name]);
- } else {
- return true;
- }
-}
-
-std::pair<uint, MessageId> DBusAdapter::GetRequestToHMI(uint32_t serial) {
- std::map<uint32_t, std::pair<uint, MessageId> >::iterator it;
- it = requests_to_hmi_.find(serial);
- if (it != requests_to_hmi_.end()) {
- std::pair<uint, MessageId> ids = it->second;
- requests_to_hmi_.erase(it);
- return ids;
- }
- return std::make_pair(0, hmi_apis::FunctionID::INVALID_ENUM);
-}
-
-void DBusAdapter::SaveRequestToHMI(uint32_t serial,
- const std::pair<uint, MessageId>& ids) {
- requests_to_hmi_.insert(std::make_pair(serial, ids));
-}
-
-void DBusAdapter::Introspect(DBusMessage* msg) {
- DBusMessage* reply;
-
- dbus_uint32_t serial = dbus_message_get_serial(msg);
- reply = dbus_message_new_method_return(msg);
- if (!reply) {
- LOG4CXX_WARN(logger_, "DBus: Failed return method for introspection");
- return;
- }
-
- DBusMessageIter iter;
- dbus_message_iter_init_append(reply, &iter);
- char* value = introspection_xml;
- dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &value);
- dbus_connection_send(conn_, reply, &serial);
- dbus_connection_flush(conn_);
- dbus_message_unref(reply);
- dbus_message_unref(msg);
-}
-
-void DBusAdapter::SaveRequestFromHMI(uint32_t serial, DBusMessage* request) {
- LOG4CXX_DEBUG(logger_, "Save correlation id (serial id) : " << serial);
- LOG4CXX_DEBUG(logger_, "D-Bus message: " << request);
- requests_from_hmi_.insert(std::make_pair(serial, request));
-}
-
-DBusMessage* DBusAdapter::GetRequestFromHMI(uint32_t serial) {
- LOG4CXX_DEBUG(logger_, "Get correlation id (serial id) : " << serial);
- std::map<uint32_t, DBusMessage*>::iterator it;
- it = requests_from_hmi_.find(serial);
- if (it != requests_from_hmi_.end()) {
- DBusMessage* msg = it->second;
- requests_from_hmi_.erase(it);
- LOG4CXX_DEBUG(logger_, "D-Bus message: " << msg);
- return msg;
- }
- return 0;
-}
-
-} // namespace dbus
diff --git a/src/components/dbus/src/dbus_message.cc b/src/components/dbus/src/dbus_message.cc
deleted file mode 100644
index b8a55896ce..0000000000
--- a/src/components/dbus/src/dbus_message.cc
+++ /dev/null
@@ -1,217 +0,0 @@
-/* Copyright (c) 2014, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#include "dbus/dbus_message.h"
-
-#include <algorithm>
-#include <cassert>
-
-#include <dbus/dbus.h>
-
-namespace dbus {
-
-MessageRefKeeper::MessageRefKeeper() : raw_message_(NULL) {}
-
-MessageRefKeeper::MessageRefKeeper(DBusMessage* message)
- : raw_message_(message) {
- assert(raw_message_);
- dbus_message_ref(raw_message_);
-}
-
-MessageRefKeeper::~MessageRefKeeper() {
- if (raw_message_) {
- dbus_message_unref(raw_message_);
- }
-}
-
-MessageRefKeeper::MessageRefKeeper(const MessageRefKeeper& other)
- : raw_message_(other.raw_message_) {
- assert(raw_message_);
- dbus_message_ref(raw_message_);
-}
-
-MessageRefKeeper& MessageRefKeeper::operator=(MessageRefKeeper other) {
- other.swap(*this);
- return *this;
-}
-
-DBusMessage* MessageRefKeeper::get() const {
- return raw_message_;
-}
-
-DBusMessage* MessageRefKeeper::Pass() {
- DBusMessage* message = raw_message_;
- raw_message_ = NULL;
- return message;
-}
-
-void MessageRefKeeper::swap(MessageRefKeeper& other) {
- std::swap(raw_message_, other.raw_message_);
-}
-
-MessageRef::MessageRef(DBusMessage* message) : raw_message_ref_(message) {}
-
-MessageRef::~MessageRef() {}
-
-std::string MessageRef::GetInterface() const {
- return dbus_message_get_interface(raw_message_ref_.get());
-}
-
-std::string MessageRef::GetMember() const {
- return dbus_message_get_member(raw_message_ref_.get());
-}
-
-// Message writer
-MessageReader::MessageReader(const MessageRef& message)
- : parent_reader_(NULL), failed_(false) {
- dbus_bool_t success =
- dbus_message_iter_init(message.raw_message_ref_.get(), &iterator_);
- if (!success) {
- MarkFailed();
- }
-}
-
-MessageReader::MessageReader(MessageReader* reader,
- DataType container_data_type)
- : parent_reader_(reader), failed_(reader->has_failed()) {
- assert(parent_reader_);
- if (!failed_) {
- if (reader->NextValueType() != container_data_type) {
- MarkFailed();
- } else {
- dbus_message_iter_recurse(&reader->iterator_, &iterator_);
- reader->MoveToNext();
- }
- }
-}
-
-bool MessageReader::NextIsDictEntry() const {
- return NextValueType() == DBUS_TYPE_DICT_ENTRY;
-}
-
-MessageReader MessageReader::TakeArrayReader() {
- return MessageReader(this, DBUS_TYPE_ARRAY);
-}
-
-MessageReader MessageReader::TakeStructReader() {
- return MessageReader(this, DBUS_TYPE_STRUCT);
-}
-
-MessageReader MessageReader::TakeDictEntryReader() {
- return MessageReader(this, DBUS_TYPE_DICT_ENTRY);
-}
-
-void MessageReader::MoveToNext() {
- if (!HasNext()) {
- MarkFailed();
- }
- dbus_message_iter_next(&iterator_);
-}
-
-void MessageReader::MarkFailed() {
- if (!failed_) {
- failed_ = true;
- if (parent_reader_) {
- parent_reader_->MarkFailed();
- }
- }
-}
-
-void MessageReader::ReadNextValue(MessageReader::DataType type, void* value) {
- assert(value);
- if (NextValueType() != type) {
- MarkFailed();
- } else if (!failed_) {
- dbus_message_iter_get_basic(&iterator_, value);
- MoveToNext();
- }
-}
-
-// DbusMessageWriter
-MessageWriter::MessageWriter(const MessageRef& message)
- : has_opened_subcontainer_(false), parent_writer_(NULL) {
- dbus_message_iter_init_append(message.raw_message_ref_.get(), &iterator_);
-}
-
-MessageWriter::MessageWriter(MessageWriter* parent,
- ContainerType container_type,
- const char* array_signature)
- : has_opened_subcontainer_(false), parent_writer_(parent) {
- assert(parent_writer_);
- // Only array writers require array_signature
- assert((container_type == kArray && array_signature != NULL) ||
- (container_type != kArray && array_signature == NULL));
- assert(!parent_writer_->has_opened_subcontainer_);
- bool enough_memory = dbus_message_iter_open_container(
- &parent_writer_->iterator_, container_type, array_signature, &iterator_);
- assert(enough_memory);
- parent_writer_->has_opened_subcontainer_ = true;
-}
-
-MessageWriter::~MessageWriter() {
- assert(!has_opened_subcontainer_);
- if (parent_writer_ != NULL) {
- CloseWriter();
- }
-}
-
-void MessageWriter::WriteAndCheck(MessageWriter::DataType value_type,
- const void* value) {
- assert(!has_opened_subcontainer_);
- dbus_bool_t enough_memory =
- dbus_message_iter_append_basic(&iterator_, value_type, value);
- assert(enough_memory);
-}
-
-void MessageWriter::CloseWriter() {
- assert(parent_writer_);
- assert(parent_writer_->has_opened_subcontainer_);
- dbus_bool_t enough_memory =
- dbus_message_iter_close_container(&parent_writer_->iterator_, &iterator_);
- assert(enough_memory);
- parent_writer_->has_opened_subcontainer_ = false;
-}
-
-// Construction functions
-
-MessageRef MethodCall(const char* bus_name,
- const char* path,
- const char* interface,
- const char* method) {
- return MessageRef(
- dbus_message_new_method_call(bus_name, path, interface, method));
-}
-
-MessageRef Signal(const char* path, const char* interface, const char* name) {
- return MessageRef(dbus_message_new_signal(path, interface, name));
-}
-
-} // namespace dbus
diff --git a/src/components/dbus/src/dbus_message_controller.cc b/src/components/dbus/src/dbus_message_controller.cc
deleted file mode 100644
index 59f08d6695..0000000000
--- a/src/components/dbus/src/dbus_message_controller.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#include "dbus/dbus_message_controller.h"
-#include "formatters/CSmartFactory.h"
-
-namespace sos = NsSmartDeviceLink::NsJSONHandler::strings;
-
-namespace dbus {
-
-DBusMessageController::DBusMessageController(const std::string& sdlServiceName,
- const std::string& sdlObjectPath,
- const std::string& hmiServiceName,
- const std::string& hmiObjectPath)
- : DBusAdapter(sdlServiceName, sdlObjectPath, hmiServiceName, hmiObjectPath)
- , shutdown_(false) {}
-
-void DBusMessageController::SubscribeTo(const std::string& interface,
- const std::string& signal) {
- std::string rule = "type='signal'";
- rule.append(", sender='")
- .append(hmi_service_name_)
- .append("'")
- .append(", path='")
- .append(hmi_object_path_)
- .append("'")
- .append(", interface='")
- .append(hmi_service_name_)
- .append(".")
- .append(interface)
- .append("'")
- .append(", member='")
- .append(signal)
- .append("'");
- DBusAdapter::AddMatch(rule);
-}
-
-DBusMessageController::~DBusMessageController() {}
-
-void* DBusMessageController::MethodForReceiverThread(void*) {
- Run();
- return NULL;
-}
-
-bool DBusMessageController::Run() {
- while (!shutdown_) {
- smart_objects::SmartObject obj(smart_objects::SmartType_Map);
- obj[sos::S_PARAMS][sos::S_PROTOCOL_VERSION] = 2;
- obj[sos::S_PARAMS][sos::S_PROTOCOL_TYPE] = 1;
- if (DBusAdapter::Process(obj)) {
- SendMessageToCore(obj);
- }
- }
- return true;
-}
-
-void DBusMessageController::Shutdown() {
- shutdown_ = true;
-}
-
-} // namespace dbus
diff --git a/src/components/dbus/src/introspection_xml.cc b/src/components/dbus/src/introspection_xml.cc
deleted file mode 100644
index 210c232a4d..0000000000
--- a/src/components/dbus/src/introspection_xml.cc
+++ /dev/null
@@ -1,327 +0,0 @@
-// Warning! This file is generated by 'make_introspection_c.py'. Edit at your
-// own risk.
-/**
- * @file instrospections_xml.cc
- * @brief D-Bus introspection XML as C-string
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2013, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-char introspection_xml[] = {
- 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x6e, 0x6f,
- 0x64, 0x65, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d,
- 0x2f, 0x2f, 0x66, 0x72, 0x65, 0x65, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f,
- 0x70, 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, 0x44, 0x2d, 0x42, 0x55, 0x53,
- 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x49, 0x6e, 0x74, 0x72,
- 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e,
- 0x30, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70,
- 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64,
- 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73,
- 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x2f, 0x64, 0x62, 0x75,
- 0x73, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73,
- 0x70, 0x65, 0x63, 0x74, 0x2e, 0x64, 0x74, 0x64, 0x22, 0x3e, 0x0a, 0x3c,
- 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x2f,
- 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6f, 0x72, 0x64, 0x2f, 0x68, 0x6d, 0x69,
- 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6d, 0x2e, 0x66,
- 0x6f, 0x72, 0x64, 0x2e, 0x68, 0x6d, 0x69, 0x2e, 0x73, 0x64, 0x6c, 0x2e,
- 0x42, 0x61, 0x73, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x73, 0x69, 0x67,
- 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e,
- 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x53,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x49, 0x44, 0x22,
- 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e,
- 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69,
- 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f,
- 0x6e, 0x53, 0x44, 0x4c, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65,
- 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x52,
- 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x4e,
- 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22,
- 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e,
- 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61,
- 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61,
- 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x41, 0x70, 0x70, 0x52, 0x65, 0x67,
- 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x28, 0x73, 0x28, 0x62, 0x73, 0x29, 0x28, 0x62, 0x73,
- 0x29, 0x28, 0x73, 0x73, 0x28, 0x62, 0x69, 0x29, 0x28, 0x62, 0x62, 0x29,
- 0x29, 0x73, 0x28, 0x62, 0x61, 0x28, 0x73, 0x69, 0x29, 0x29, 0x28, 0x62,
- 0x61, 0x73, 0x29, 0x69, 0x69, 0x62, 0x28, 0x62, 0x61, 0x69, 0x29, 0x28,
- 0x62, 0x62, 0x29, 0x28, 0x62, 0x61, 0x69, 0x29, 0x29, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x74, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x28, 0x62, 0x61, 0x28, 0x73, 0x69, 0x29, 0x29, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x76, 0x72, 0x53, 0x79, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x73,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x61, 0x73,
- 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x56, 0x72,
- 0x47, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x73, 0x22, 0x20, 0x74, 0x79,
- 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29, 0x22, 0x20, 0x2f, 0x3e,
- 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70,
- 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c,
- 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67,
- 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e,
- 0x41, 0x70, 0x70, 0x55, 0x6e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
- 0x72, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
- 0x65, 0x64, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x61, 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
- 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x50, 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6e,
- 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x61, 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x65, 0x74, 0x68, 0x6f,
- 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
- 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x53, 0x44, 0x4c, 0x43, 0x6c,
- 0x6f, 0x73, 0x65, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x50,
- 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x73, 0x65,
- 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69,
- 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x20,
- 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22, 0x20,
- 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
- 0x22, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x20, 0x74,
- 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79,
- 0x70, 0x65, 0x3d, 0x22, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x79, 0x6e, 0x63,
- 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x79,
- 0x70, 0x65, 0x3d, 0x22, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65,
- 0x54, 0x79, 0x70, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65,
- 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f,
- 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x74,
- 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x3e, 0x3c, 0x69, 0x6e, 0x74, 0x65,
- 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6f, 0x72, 0x64, 0x2e, 0x68, 0x6d, 0x69,
- 0x2e, 0x73, 0x64, 0x6c, 0x2e, 0x55, 0x49, 0x22, 0x3e, 0x3c, 0x73, 0x69,
- 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f,
- 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74,
- 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
- 0x22, 0x61, 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67,
- 0x6e, 0x61, 0x6c, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
- 0x61, 0x63, 0x65, 0x3e, 0x3c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
- 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6d,
- 0x2e, 0x66, 0x6f, 0x72, 0x64, 0x2e, 0x68, 0x6d, 0x69, 0x2e, 0x73, 0x64,
- 0x6c, 0x2e, 0x53, 0x44, 0x4c, 0x22, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x68,
- 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x41, 0x63, 0x74,
- 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x22, 0x3e, 0x3c, 0x61,
- 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x61, 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
- 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75,
- 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74,
- 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69,
- 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74,
- 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x53, 0x44,
- 0x4c, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0x20, 0x74, 0x79,
- 0x70, 0x65, 0x3d, 0x22, 0x62, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d,
- 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x62, 0x28, 0x73, 0x73, 0x28, 0x62, 0x69, 0x29, 0x28,
- 0x62, 0x62, 0x29, 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d,
- 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x65, 0x64,
- 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x41, 0x70, 0x70, 0x50,
- 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
- 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d,
- 0x22, 0x62, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75,
- 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70,
- 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69,
- 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x62, 0x61, 0x28, 0x73, 0x69, 0x28, 0x62, 0x62, 0x29,
- 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75,
- 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x41,
- 0x70, 0x70, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x22, 0x20, 0x74,
- 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61,
- 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
- 0x22, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x20, 0x74,
- 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3e, 0x3c, 0x6d,
- 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x46, 0x72, 0x69, 0x65, 0x6e,
- 0x64, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3e,
- 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64,
- 0x65, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x73,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61,
- 0x67, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62,
- 0x69, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75,
- 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74,
- 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69,
- 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74,
- 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x65, 0x73, 0x73,
- 0x61, 0x67, 0x65, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x28, 0x62, 0x61, 0x28, 0x73, 0x28, 0x62, 0x73, 0x29, 0x28, 0x62, 0x73,
- 0x29, 0x28, 0x62, 0x73, 0x29, 0x28, 0x62, 0x73, 0x29, 0x28, 0x62, 0x73,
- 0x29, 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74,
- 0x68, 0x6f, 0x64, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73,
- 0x74, 0x4f, 0x66, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
- 0x6e, 0x73, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x49, 0x44, 0x22,
- 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x43, 0x6f, 0x64,
- 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20,
- 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
- 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x74,
- 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x28, 0x73, 0x69, 0x28, 0x62, 0x62,
- 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68,
- 0x6f, 0x64, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53,
- 0x44, 0x4c, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x43, 0x6f,
- 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3e, 0x3c, 0x6d,
- 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69,
- 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74,
- 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x43,
- 0x6f, 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f, 0x75, 0x74, 0x22,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20,
- 0x2f, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3e, 0x3c,
- 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
- 0x22, 0x47, 0x65, 0x74, 0x55, 0x52, 0x4c, 0x53, 0x22, 0x3e, 0x3c, 0x61,
- 0x72, 0x67, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x3d, 0x22, 0x69, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70,
- 0x65, 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67,
- 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22,
- 0x6f, 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x72,
- 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20,
- 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x6f,
- 0x75, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x75, 0x72,
- 0x6c, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62,
- 0x61, 0x28, 0x73, 0x28, 0x62, 0x73, 0x29, 0x29, 0x29, 0x22, 0x20, 0x2f,
- 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3e, 0x3c, 0x73,
- 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x4f, 0x6e, 0x41, 0x70, 0x70, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73,
- 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x3e,
- 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61,
- 0x70, 0x70, 0x49, 0x44, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
- 0x69, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61,
- 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x41, 0x70, 0x70, 0x50, 0x65, 0x72,
- 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x76, 0x6f,
- 0x6b, 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28,
- 0x62, 0x62, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20,
- 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x52, 0x65, 0x76,
- 0x6f, 0x6b, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28,
- 0x62, 0x61, 0x28, 0x73, 0x69, 0x28, 0x62, 0x62, 0x29, 0x29, 0x29, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x61, 0x70, 0x70, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73,
- 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74,
- 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61,
- 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70,
- 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64,
- 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x62, 0x29,
- 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d,
- 0x65, 0x3d, 0x22, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22,
- 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x69, 0x29, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x3d, 0x22, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70,
- 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x28, 0x62, 0x61,
- 0x69, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x53, 0x44, 0x4c, 0x43, 0x6f,
- 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x22,
- 0x3e, 0x3c, 0x61, 0x72, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
- 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65,
- 0x3d, 0x22, 0x28, 0x73, 0x73, 0x28, 0x62, 0x69, 0x29, 0x28, 0x62, 0x62,
- 0x29, 0x29, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e,
- 0x61, 0x6c, 0x3e, 0x3c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x3e, 0x3c, 0x61, 0x72,
- 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x22,
- 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x3e,
- 0x3c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x3e,
- 0x3c, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x3e, 0x00}; \ No newline at end of file
diff --git a/src/components/dbus/src/message_descriptions.cc b/src/components/dbus/src/message_descriptions.cc
deleted file mode 100644
index 1a5e499a7f..0000000000
--- a/src/components/dbus/src/message_descriptions.cc
+++ /dev/null
@@ -1,10424 +0,0 @@
-// Warning! This file is generated by 'make_message_descriptions.py'. Edit at
-// your own risk.
-/**
- * @file message_descriptions.cc
- * @brief Generated HMI API message descriptions for D-Bus
- *
- * This file is a part of HMI D-Bus layer.
- */
-// Copyright (c) 2013, Ford Motor Company
-// 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 Ford Motor Company 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 HOLDER 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.
-
-#include "dbus/message_descriptions.h"
-
-namespace {
-
-struct Structs {
- static const ford_message_descriptions::ParameterDescription*
- Common__Coordinate__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__DeviceInfo__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__UserFriendlyMessage__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__PermissionItem__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ServiceInfo__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__TextField__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ButtonCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__VehicleDataResult__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__TouchCoord__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__TouchEvent__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__PresetBankCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__Image__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__SoftButton__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__TTSChunk__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__HMIApplication__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__MenuParams__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__Choice__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__VrHelpItem__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__TimeFormat__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__TouchEventCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ImageResolution__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ScreenParams__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ImageField__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__VideoStreamingFormat__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__VideoConfig__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__DisplayCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__SoftButtonCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__HMICapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__AudioPassThruCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__TextFieldStruct__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__KeyboardProperties__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__Turn__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__VehicleType__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__GPSData__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__SingleTireStatus__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__DIDResult__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__HeadLampStatus__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__TireStatus__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__BeltStatus__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__BodyInformation__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__DeviceStatus__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ECallInfo__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__AirbagStatus__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__EmergencyEvent__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ClusterModeStatus__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__MyKey__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__RdsData__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__RadioControlData__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__RadioControlCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__Temperature__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ClimateControlData__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ClimateControlCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__ModuleData__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__DateTime__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__OASISAddress__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__LocationDetails__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__NavigationCapability__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__PhoneCapability__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__VideoStreamingCapability__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__SystemCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__RemoteControlCapabilities__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__Rectangle__parameters[];
- static const ford_message_descriptions::ParameterDescription*
- Common__HapticRect__parameters[];
-};
-
-const ford_message_descriptions::ParameterDescription
- Common__Coordinate__parameter1 = {
- "latitudeDegrees", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription
- Common__Coordinate__parameter2 = {
- "longitudeDegrees", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__Coordinate__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Coordinate__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Coordinate__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__DeviceInfo__parameter1 = {
- "name", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceInfo__parameter2 = {
- "id", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceInfo__parameter3 = {
- "transportType", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceInfo__parameter4 = {
- "isSDLAllowed", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__DeviceInfo__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceInfo__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceInfo__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceInfo__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceInfo__parameter4,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__UserFriendlyMessage__parameter1 = {
- "messageCode", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__UserFriendlyMessage__parameter2 = {
- "ttsString", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__UserFriendlyMessage__parameter3 = {
- "label", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__UserFriendlyMessage__parameter4 = {
- "line1", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__UserFriendlyMessage__parameter5 = {
- "line2", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__UserFriendlyMessage__parameter6 = {
- "textBody", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__UserFriendlyMessage__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__UserFriendlyMessage__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__UserFriendlyMessage__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__UserFriendlyMessage__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__UserFriendlyMessage__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__UserFriendlyMessage__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__UserFriendlyMessage__parameter6,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__PermissionItem__parameter1 = {
- "name", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__PermissionItem__parameter2 = {
- "id", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__PermissionItem__parameter3 = {
- "allowed", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__PermissionItem__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__PermissionItem__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__PermissionItem__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__PermissionItem__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ServiceInfo__parameter1 = {
- "url", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__ServiceInfo__parameter2 = {
- "policyAppId", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ServiceInfo__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ServiceInfo__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ServiceInfo__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__TextField__parameter1 = {
- "name", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__TextField__parameter2 = {
- "characterSet", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__TextField__parameter3 = {
- "width", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__TextField__parameter4 = {
- "rows", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__TextField__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TextField__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TextField__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TextField__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TextField__parameter4,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ButtonCapabilities__parameter1 = {
- "name", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__ButtonCapabilities__parameter2 = {
- "shortPressAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__ButtonCapabilities__parameter3 = {
- "longPressAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__ButtonCapabilities__parameter4 = {
- "upDownAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ButtonCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ButtonCapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ButtonCapabilities__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ButtonCapabilities__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ButtonCapabilities__parameter4,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__VehicleDataResult__parameter1 = {
- "dataType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__VehicleDataResult__parameter2 = {
- "resultCode", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__VehicleDataResult__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VehicleDataResult__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VehicleDataResult__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__TouchCoord__parameter1 = {
- "x", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__TouchCoord__parameter2 = {
- "y", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__TouchCoord__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchCoord__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchCoord__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__TouchEvent__parameter1 = {
- "id", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__TouchEvent__parameter2_array = {
- "ts", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ArrayDescription
- Common__TouchEvent__parameter2 = {
- {"ts", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchEvent__parameter2_array,
- "i"};
-const ford_message_descriptions::StructDescription
- Common__TouchEvent__parameter3_array = {
- {"c", ford_message_descriptions::Struct, true},
- Structs::Common__TouchCoord__parameters};
-const ford_message_descriptions::ArrayDescription
- Common__TouchEvent__parameter3 = {
- {"c", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchEvent__parameter3_array,
- "(ii)"};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__TouchEvent__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchEvent__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchEvent__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchEvent__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__PresetBankCapabilities__parameter1 = {
- "onScreenPresetsAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__PresetBankCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__PresetBankCapabilities__parameter1,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__Image__parameter1 = {
- "value", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__Image__parameter2 = {
- "imageType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__Image__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Image__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Image__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__SoftButton__parameter1 = {
- "type", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__SoftButton__parameter2 = {
- "text", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription
- Common__SoftButton__parameter3 = {
- {"image", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__SoftButton__parameter4 = {
- "isHighlighted", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__SoftButton__parameter5 = {
- "softButtonID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__SoftButton__parameter6 = {
- "systemAction", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__SoftButton__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButton__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButton__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButton__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButton__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButton__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButton__parameter6,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__TTSChunk__parameter1 = {
- "text", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__TTSChunk__parameter2 = {
- "type", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__TTSChunk__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TTSChunk__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TTSChunk__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter1 = {
- "appName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter2 = {
- "ngnMediaScreenAppName", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter3 = {
- "icon", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription
- Common__HMIApplication__parameter4 = {
- {"deviceInfo", ford_message_descriptions::Struct, true},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter5 = {
- "policyAppID", ford_message_descriptions::String, true};
-const ford_message_descriptions::StructDescription
- Common__HMIApplication__parameter6_array = {
- {"ttsName", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- Common__HMIApplication__parameter6 = {
- {"ttsName", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter6_array,
- "(si)"};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter7_array = {
- "vrSynonyms", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- Common__HMIApplication__parameter7 = {
- {"vrSynonyms", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter7_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter8 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter9 = {
- "hmiDisplayLanguageDesired", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter10 = {
- "isMediaApplication", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter11_array = {
- "appType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- Common__HMIApplication__parameter11 = {
- {"appType", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter11_array,
- "i"};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter12 = {
- "greyOut", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__HMIApplication__parameter13_array = {
- "requestType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- Common__HMIApplication__parameter13 = {
- {"requestType", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter13_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__HMIApplication__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMIApplication__parameter13,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__MenuParams__parameter1 = {
- "parentID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__MenuParams__parameter2 = {
- "position", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__MenuParams__parameter3 = {
- "menuName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__MenuParams__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__MenuParams__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__MenuParams__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__MenuParams__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__Choice__parameter1 = {
- "choiceID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__Choice__parameter2 = {
- "menuName", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription Common__Choice__parameter3 =
- {{"image", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__Choice__parameter4 = {
- "secondaryText", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__Choice__parameter5 = {
- "tertiaryText", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription Common__Choice__parameter6 =
- {{"secondaryImage", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__Choice__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Choice__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Choice__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Choice__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Choice__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Choice__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Choice__parameter6,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__VrHelpItem__parameter1 = {
- "text", ford_message_descriptions::String, true};
-const ford_message_descriptions::StructDescription
- Common__VrHelpItem__parameter2 = {
- {"image", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__VrHelpItem__parameter3 = {
- "position", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__VrHelpItem__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VrHelpItem__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VrHelpItem__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VrHelpItem__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__TimeFormat__parameter1 = {
- "hours", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__TimeFormat__parameter2 = {
- "minutes", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__TimeFormat__parameter3 = {
- "seconds", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__TimeFormat__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TimeFormat__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TimeFormat__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TimeFormat__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__TouchEventCapabilities__parameter1 = {
- "pressAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__TouchEventCapabilities__parameter2 = {
- "multiTouchAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__TouchEventCapabilities__parameter3 = {
- "doublePressAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__TouchEventCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchEventCapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchEventCapabilities__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TouchEventCapabilities__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ImageResolution__parameter1 = {
- "resolutionWidth", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__ImageResolution__parameter2 = {
- "resolutionHeight", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ImageResolution__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ImageResolution__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ImageResolution__parameter2,
- NULL};
-
-const ford_message_descriptions::StructDescription
- Common__ScreenParams__parameter1 = {
- {"resolution", ford_message_descriptions::Struct, true},
- Structs::Common__ImageResolution__parameters};
-const ford_message_descriptions::StructDescription
- Common__ScreenParams__parameter2 = {
- {"touchEventAvailable", ford_message_descriptions::Struct, false},
- Structs::Common__TouchEventCapabilities__parameters};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ScreenParams__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ScreenParams__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ScreenParams__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ImageField__parameter1 = {
- "name", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__ImageField__parameter2_array = {
- "imageTypeSupported", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- Common__ImageField__parameter2 = {
- {"imageTypeSupported", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ImageField__parameter2_array,
- "i"};
-const ford_message_descriptions::StructDescription
- Common__ImageField__parameter3 = {
- {"imageResolution", ford_message_descriptions::Struct, false},
- Structs::Common__ImageResolution__parameters};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ImageField__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ImageField__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ImageField__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ImageField__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__VideoStreamingFormat__parameter1 = {
- "protocol", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__VideoStreamingFormat__parameter2 = {
- "codec", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__VideoStreamingFormat__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoStreamingFormat__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoStreamingFormat__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__VideoConfig__parameter1 = {
- "protocol", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__VideoConfig__parameter2 = {
- "codec", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__VideoConfig__parameter3 = {
- "width", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__VideoConfig__parameter4 = {
- "height", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__VideoConfig__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoConfig__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoConfig__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoConfig__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoConfig__parameter4,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__DisplayCapabilities__parameter1 = {
- "displayType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::StructDescription
- Common__DisplayCapabilities__parameter2_array = {
- {"textFields", ford_message_descriptions::Struct, true},
- Structs::Common__TextField__parameters};
-const ford_message_descriptions::ArrayDescription
- Common__DisplayCapabilities__parameter2 = {
- {"textFields", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter2_array,
- "(iiii)"};
-const ford_message_descriptions::StructDescription
- Common__DisplayCapabilities__parameter3_array = {
- {"imageFields", ford_message_descriptions::Struct, true},
- Structs::Common__ImageField__parameters};
-const ford_message_descriptions::ArrayDescription
- Common__DisplayCapabilities__parameter3 = {
- {"imageFields", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter3_array,
- "(i(bai)(b(ii)))"};
-const ford_message_descriptions::ParameterDescription
- Common__DisplayCapabilities__parameter4_array = {
- "mediaClockFormats", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- Common__DisplayCapabilities__parameter4 = {
- {"mediaClockFormats", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter4_array,
- "i"};
-const ford_message_descriptions::ParameterDescription
- Common__DisplayCapabilities__parameter5_array = {
- "imageCapabilities", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- Common__DisplayCapabilities__parameter5 = {
- {"imageCapabilities", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter5_array,
- "i"};
-const ford_message_descriptions::ParameterDescription
- Common__DisplayCapabilities__parameter6 = {
- "graphicSupported", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__DisplayCapabilities__parameter7_array = {
- "templatesAvailable", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- Common__DisplayCapabilities__parameter7 = {
- {"templatesAvailable", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter7_array,
- "s"};
-const ford_message_descriptions::StructDescription
- Common__DisplayCapabilities__parameter8 = {
- {"screenParams", ford_message_descriptions::Struct, false},
- Structs::Common__ScreenParams__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__DisplayCapabilities__parameter9 = {
- "numCustomPresetsAvailable", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__DisplayCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DisplayCapabilities__parameter9,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__SoftButtonCapabilities__parameter1 = {
- "shortPressAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__SoftButtonCapabilities__parameter2 = {
- "longPressAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__SoftButtonCapabilities__parameter3 = {
- "upDownAvailable", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__SoftButtonCapabilities__parameter4 = {
- "imageSupported", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__SoftButtonCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButtonCapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButtonCapabilities__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButtonCapabilities__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SoftButtonCapabilities__parameter4,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__HMICapabilities__parameter1 = {
- "navigation", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__HMICapabilities__parameter2 = {
- "phoneCall", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__HMICapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMICapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HMICapabilities__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__AudioPassThruCapabilities__parameter1 = {
- "samplingRate", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__AudioPassThruCapabilities__parameter2 = {
- "bitsPerSample", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__AudioPassThruCapabilities__parameter3 = {
- "audioType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__AudioPassThruCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AudioPassThruCapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AudioPassThruCapabilities__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AudioPassThruCapabilities__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__TextFieldStruct__parameter1 = {
- "fieldName", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__TextFieldStruct__parameter2 = {
- "fieldText", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__TextFieldStruct__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TextFieldStruct__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TextFieldStruct__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__KeyboardProperties__parameter1 = {
- "language", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__KeyboardProperties__parameter2 = {
- "keyboardLayout", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__KeyboardProperties__parameter3 = {
- "keypressMode", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__KeyboardProperties__parameter4_array = {
- "limitedCharacterList", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- Common__KeyboardProperties__parameter4 = {
- {"limitedCharacterList", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__KeyboardProperties__parameter4_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- Common__KeyboardProperties__parameter5 = {
- "autoCompleteText", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__KeyboardProperties__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__KeyboardProperties__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__KeyboardProperties__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__KeyboardProperties__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__KeyboardProperties__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__KeyboardProperties__parameter5,
- NULL};
-
-const ford_message_descriptions::StructDescription Common__Turn__parameter1 = {
- {"navigationText", ford_message_descriptions::Struct, false},
- Structs::Common__TextFieldStruct__parameters};
-const ford_message_descriptions::StructDescription Common__Turn__parameter2 = {
- {"turnIcon", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__Turn__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Turn__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Turn__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__VehicleType__parameter1 = {
- "make", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__VehicleType__parameter2 = {
- "model", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__VehicleType__parameter3 = {
- "modelYear", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__VehicleType__parameter4 = {
- "trim", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__VehicleType__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VehicleType__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VehicleType__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VehicleType__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VehicleType__parameter4,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter1 = {
- "longitudeDegrees", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter2 = {
- "latitudeDegrees", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter3 = {
- "utcYear", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter4 = {
- "utcMonth", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter5 = {
- "utcDay", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter6 = {
- "utcHours", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter7 = {
- "utcMinutes", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter8 = {
- "utcSeconds", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter9 = {
- "compassDirection", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter10 = {
- "pdop", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter11 = {
- "hdop", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter12 = {
- "vdop", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter13 = {
- "actual", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter14 = {
- "satellites", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter15 = {
- "dimension", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter16 = {
- "altitude", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter17 = {
- "heading", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- Common__GPSData__parameter18 = {
- "speed", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__GPSData__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter15,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter16,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter17,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__GPSData__parameter18,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__SingleTireStatus__parameter1 = {
- "status", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__SingleTireStatus__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__SingleTireStatus__parameter1,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__DIDResult__parameter1 = {
- "resultCode", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__DIDResult__parameter2 = {
- "didLocation", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Common__DIDResult__parameter3 = {
- "data", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__DIDResult__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DIDResult__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DIDResult__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DIDResult__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__HeadLampStatus__parameter1 = {
- "lowBeamsOn", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__HeadLampStatus__parameter2 = {
- "highBeamsOn", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__HeadLampStatus__parameter3 = {
- "ambientLightSensorStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__HeadLampStatus__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HeadLampStatus__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HeadLampStatus__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HeadLampStatus__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__TireStatus__parameter1 = {
- "pressureTelltale", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::StructDescription
- Common__TireStatus__parameter2 = {
- {"leftFront", ford_message_descriptions::Struct, false},
- Structs::Common__SingleTireStatus__parameters};
-const ford_message_descriptions::StructDescription
- Common__TireStatus__parameter3 = {
- {"rightFront", ford_message_descriptions::Struct, false},
- Structs::Common__SingleTireStatus__parameters};
-const ford_message_descriptions::StructDescription
- Common__TireStatus__parameter4 = {
- {"leftRear", ford_message_descriptions::Struct, false},
- Structs::Common__SingleTireStatus__parameters};
-const ford_message_descriptions::StructDescription
- Common__TireStatus__parameter5 = {
- {"rightRear", ford_message_descriptions::Struct, false},
- Structs::Common__SingleTireStatus__parameters};
-const ford_message_descriptions::StructDescription
- Common__TireStatus__parameter6 = {
- {"innerLeftRear", ford_message_descriptions::Struct, false},
- Structs::Common__SingleTireStatus__parameters};
-const ford_message_descriptions::StructDescription
- Common__TireStatus__parameter7 = {
- {"innerRightRear", ford_message_descriptions::Struct, false},
- Structs::Common__SingleTireStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__TireStatus__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TireStatus__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TireStatus__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TireStatus__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TireStatus__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TireStatus__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TireStatus__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__TireStatus__parameter7,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter1 = {
- "driverBeltDeployed", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter2 = {
- "passengerBeltDeployed", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter3 = {
- "passengerBuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter4 = {
- "driverBuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter5 = {
- "leftRow2BuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter6 = {
- "passengerChildDetected", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter7 = {
- "rightRow2BuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter8 = {
- "middleRow2BuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter9 = {
- "middleRow3BuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter10 = {
- "leftRow3BuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter11 = {
- "rightRow3BuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter12 = {
- "leftRearInflatableBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter13 = {
- "rightRearInflatableBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter14 = {
- "middleRow1BeltDeployed", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__BeltStatus__parameter15 = {
- "middleRow1BuckleBelted", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__BeltStatus__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BeltStatus__parameter15,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__BodyInformation__parameter1 = {
- "parkBrakeActive", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__BodyInformation__parameter2 = {
- "ignitionStableStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__BodyInformation__parameter3 = {
- "ignitionStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__BodyInformation__parameter4 = {
- "driverDoorAjar", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__BodyInformation__parameter5 = {
- "passengerDoorAjar", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__BodyInformation__parameter6 = {
- "rearLeftDoorAjar", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__BodyInformation__parameter7 = {
- "rearRightDoorAjar", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__BodyInformation__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BodyInformation__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BodyInformation__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BodyInformation__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BodyInformation__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BodyInformation__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BodyInformation__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__BodyInformation__parameter7,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter1 = {
- "voiceRecOn", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter2 = {
- "btIconOn", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter3 = {
- "callActive", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter4 = {
- "phoneRoaming", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter5 = {
- "textMsgAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter6 = {
- "battLevelStatus", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter7 = {
- "stereoAudioOutputMuted", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter8 = {
- "monoAudioOutputMuted", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter9 = {
- "signalLevelStatus", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter10 = {
- "primaryAudioSource", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__DeviceStatus__parameter11 = {
- "eCallEventActive", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__DeviceStatus__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__DeviceStatus__parameter11,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ECallInfo__parameter1 = {
- "eCallNotificationStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__ECallInfo__parameter2 = {
- "auxECallNotificationStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__ECallInfo__parameter3 = {
- "eCallConfirmationStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ECallInfo__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ECallInfo__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ECallInfo__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ECallInfo__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__AirbagStatus__parameter1 = {
- "driverAirbagDeployed", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__AirbagStatus__parameter2 = {
- "driverSideAirbagDeployed", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__AirbagStatus__parameter3 = {
- "driverCurtainAirbagDeployed", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__AirbagStatus__parameter4 = {
- "passengerAirbagDeployed", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__AirbagStatus__parameter5 = {"passengerCurtainAirbagDeployed",
- ford_message_descriptions::Enum,
- true};
-const ford_message_descriptions::ParameterDescription
- Common__AirbagStatus__parameter6 = {
- "driverKneeAirbagDeployed", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__AirbagStatus__parameter7 = {
- "passengerSideAirbagDeployed", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__AirbagStatus__parameter8 = {
- "passengerKneeAirbagDeployed", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__AirbagStatus__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AirbagStatus__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AirbagStatus__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AirbagStatus__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AirbagStatus__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AirbagStatus__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AirbagStatus__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AirbagStatus__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__AirbagStatus__parameter8,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__EmergencyEvent__parameter1 = {
- "emergencyEventType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__EmergencyEvent__parameter2 = {
- "fuelCutoffStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__EmergencyEvent__parameter3 = {
- "rolloverEvent", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__EmergencyEvent__parameter4 = {
- "maximumChangeVelocity", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__EmergencyEvent__parameter5 = {
- "multipleEvents", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__EmergencyEvent__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__EmergencyEvent__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__EmergencyEvent__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__EmergencyEvent__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__EmergencyEvent__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__EmergencyEvent__parameter5,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ClusterModeStatus__parameter1 = {
- "powerModeActive", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Common__ClusterModeStatus__parameter2 = {
- "powerModeQualificationStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__ClusterModeStatus__parameter3 = {
- "carModeStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__ClusterModeStatus__parameter4 = {
- "powerModeStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ClusterModeStatus__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClusterModeStatus__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClusterModeStatus__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClusterModeStatus__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClusterModeStatus__parameter4,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__MyKey__parameter1 = {
- "e911Override", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__MyKey__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__MyKey__parameter1,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__RdsData__parameter1 = {
- "PS", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__RdsData__parameter2 = {
- "RT", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__RdsData__parameter3 = {
- "CT", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__RdsData__parameter4 = {
- "PI", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__RdsData__parameter5 = {
- "PTY", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__RdsData__parameter6 = {
- "TP", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RdsData__parameter7 = {
- "TA", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RdsData__parameter8 = {
- "REG", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__RdsData__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RdsData__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RdsData__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RdsData__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RdsData__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RdsData__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RdsData__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RdsData__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RdsData__parameter8,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter1 = {
- "frequencyInteger", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter2 = {
- "frequencyFraction", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter3 = {
- "band", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::StructDescription
- Common__RadioControlData__parameter4 = {
- {"rdsData", ford_message_descriptions::Struct, false},
- Structs::Common__RdsData__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter5 = {
- "availableHDs", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter6 = {
- "hdChannel", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter7 = {
- "signalStrength", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter8 = {
- "signalChangeThreshold", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter9 = {
- "radioEnable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlData__parameter10 = {
- "state", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__RadioControlData__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlData__parameter10,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter1 = {
- "moduleName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter2 = {
- "radioEnableAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter3 = {
- "radioBandAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter4 = {
- "radioFrequencyAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter5 = {
- "hdChannelAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter6 = {
- "rdsDataAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter7 = {
- "availableHDsAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter8 = {
- "stateAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter9 = {
- "signalStrengthAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__RadioControlCapabilities__parameter10 = {
- "signalChangeThresholdAvailable",
- ford_message_descriptions::Boolean,
- false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__RadioControlCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RadioControlCapabilities__parameter10,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__Temperature__parameter1 = {
- "unit", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Common__Temperature__parameter2 = {
- "value", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__Temperature__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Temperature__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Temperature__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlData__parameter1 = {
- "fanSpeed", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::StructDescription
- Common__ClimateControlData__parameter2 = {
- {"currentTemperature", ford_message_descriptions::Struct, false},
- Structs::Common__Temperature__parameters};
-const ford_message_descriptions::StructDescription
- Common__ClimateControlData__parameter3 = {
- {"desiredTemperature", ford_message_descriptions::Struct, false},
- Structs::Common__Temperature__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlData__parameter4 = {
- "acEnable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlData__parameter5 = {
- "circulateAirEnable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlData__parameter6 = {
- "autoModeEnable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlData__parameter7 = {
- "defrostZone", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlData__parameter8 = {
- "dualModeEnable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlData__parameter9 = {
- "acMaxEnable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlData__parameter10 = {
- "ventilationMode", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ClimateControlData__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlData__parameter10,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter1 = {
- "moduleName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter2 = {
- "currentTemperatureAvailable",
- ford_message_descriptions::Boolean,
- false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter3 = {
- "fanSpeedAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter4 = {
- "desiredTemperatureAvailable",
- ford_message_descriptions::Boolean,
- false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter5 = {
- "acEnableAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter6 = {
- "acMaxEnableAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter7 = {
- "circulateAirEnableAvailable",
- ford_message_descriptions::Boolean,
- false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter8 = {
- "autoModeEnableAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter9 = {
- "dualModeEnableAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter10 = {
- "defrostZoneAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter11_array = {
- "defrostZone", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- Common__ClimateControlCapabilities__parameter11 = {
- {"defrostZone", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter11_array,
- "i"};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter12 = {
- "ventilationModeAvailable", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__ClimateControlCapabilities__parameter13_array = {
- "ventilationMode", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- Common__ClimateControlCapabilities__parameter13 = {
- {"ventilationMode", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter13_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ClimateControlCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ClimateControlCapabilities__parameter13,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__ModuleData__parameter1 = {
- "moduleType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::StructDescription
- Common__ModuleData__parameter2 = {
- {"radioControlData", ford_message_descriptions::Struct, false},
- Structs::Common__RadioControlData__parameters};
-const ford_message_descriptions::StructDescription
- Common__ModuleData__parameter3 = {
- {"climateControlData", ford_message_descriptions::Struct, false},
- Structs::Common__ClimateControlData__parameters};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__ModuleData__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ModuleData__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ModuleData__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__ModuleData__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter1 = {
- "millisecond", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter2 = {
- "second", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter3 = {
- "minute", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter4 = {
- "hour", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter5 = {
- "day", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter6 = {
- "month", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter7 = {
- "year", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter8 = {
- "tz_hour", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Common__DateTime__parameter9 = {
- "tz_minute", ford_message_descriptions::Integer, false};
-/*const ford_message_descriptions::ParameterDescription*
- Structs::Common__DateTime__parameters[] = {
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter1,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter2,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter3,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter4,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter5,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter6,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter7,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter8,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__DateTime__parameter9,
- NULL };*/
-
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter1 = {
- "countryName", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter2 = {
- "countryCode", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter3 = {
- "postalCode", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter4 = {
- "administrativeArea", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter5 = {
- "subAdministrativeArea", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter6 = {
- "locality", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter7 = {
- "subLocality", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter8 = {
- "thoroughfare", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__OASISAddress__parameter9 = {
- "subThoroughfare", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__OASISAddress__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__OASISAddress__parameter9,
- NULL};
-
-const ford_message_descriptions::StructDescription
- Common__LocationDetails__parameter1 = {
- {"coordinate", ford_message_descriptions::Struct, false},
- Structs::Common__Coordinate__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__LocationDetails__parameter2 = {
- "locationName", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__LocationDetails__parameter3_array = {
- "addressLines", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- Common__LocationDetails__parameter3 = {
- {"addressLines", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__LocationDetails__parameter3_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- Common__LocationDetails__parameter4 = {
- "locationDescription", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Common__LocationDetails__parameter5 = {
- "phoneNumber", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription
- Common__LocationDetails__parameter6 = {
- {"locationImage", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::StructDescription
- Common__LocationDetails__parameter7 = {
- {"searchAddress", ford_message_descriptions::Struct, false},
- Structs::Common__OASISAddress__parameters};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__LocationDetails__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__LocationDetails__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__LocationDetails__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__LocationDetails__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__LocationDetails__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__LocationDetails__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__LocationDetails__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__LocationDetails__parameter7,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__NavigationCapability__parameter1 = {
- "sendLocationEnabled", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- Common__NavigationCapability__parameter2 = {
- "getWayPointsEnabled", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__NavigationCapability__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__NavigationCapability__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__NavigationCapability__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__PhoneCapability__parameter1 = {
- "dialNumberEnabled", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__PhoneCapability__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__PhoneCapability__parameter1,
- NULL};
-
-const ford_message_descriptions::StructDescription
- Common__VideoStreamingCapability__parameter1 = {
- {"preferredResolution", ford_message_descriptions::Struct, false},
- Structs::Common__ImageResolution__parameters};
-const ford_message_descriptions::ParameterDescription
- Common__VideoStreamingCapability__parameter2 = {
- "maxBitrate", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::StructDescription
- Common__VideoStreamingCapability__parameter3_array = {
- {"supportedFormats", ford_message_descriptions::Struct, true},
- Structs::Common__VideoStreamingFormat__parameters};
-const ford_message_descriptions::ArrayDescription
- Common__VideoStreamingCapability__parameter3 = {
- {"supportedFormats", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoStreamingCapability__parameter3_array,
- "(ii)"};
-const ford_message_descriptions::ParameterDescription
- Common__VideoStreamingCapability__parameter4 = {
- "hapticSpatialDataSupported",
- ford_message_descriptions::Boolean,
- false};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__VideoStreamingCapability__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoStreamingCapability__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoStreamingCapability__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoStreamingCapability__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__VideoStreamingCapability__parameter4,
- NULL};
-
-const ford_message_descriptions::StructDescription
- Common__SystemCapabilities__parameter1 = {
- {"navigationCapability", ford_message_descriptions::Struct, false},
- Structs::Common__NavigationCapability__parameters};
-const ford_message_descriptions::StructDescription
- Common__SystemCapabilities__parameter2 = {
- {"phoneCapability", ford_message_descriptions::Struct, false},
- Structs::Common__PhoneCapability__parameters};
-const ford_message_descriptions::StructDescription
- Common__SystemCapabilities__parameter3 = {
- {"videoStreamingCapability", ford_message_descriptions::Struct, false},
- Structs::Common__VideoStreamingCapability__parameters};
-/*const ford_message_descriptions::ParameterDescription*
- Structs::Common__SystemCapabilities__parameters[] = {
- (const
- ford_message_descriptions::ParameterDescription*)&Common__SystemCapabilities__parameter1,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__SystemCapabilities__parameter2,
- (const
- ford_message_descriptions::ParameterDescription*)&Common__SystemCapabilities__parameter3,
- NULL };*/
-
-const ford_message_descriptions::StructDescription
- Common__RemoteControlCapabilities__parameter1_array = {
- {"climateControlCapabilities", ford_message_descriptions::Struct, true},
- Structs::Common__ClimateControlCapabilities__parameters};
-const ford_message_descriptions::ArrayDescription
- Common__RemoteControlCapabilities__parameter1 = {
- {"climateControlCapabilities", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RemoteControlCapabilities__parameter1_array,
- "(s(bb)(bb)(bb)(bb)(bb)(bb)(bb)(bb)(bb)(bai)(bb)(bai))"};
-const ford_message_descriptions::StructDescription
- Common__RemoteControlCapabilities__parameter2_array = {
- {"radioControlCapabilities", ford_message_descriptions::Struct, true},
- Structs::Common__RadioControlCapabilities__parameters};
-const ford_message_descriptions::ArrayDescription
- Common__RemoteControlCapabilities__parameter2 = {
- {"radioControlCapabilities", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RemoteControlCapabilities__parameter2_array,
- "(s(bb)(bb)(bb)(bb)(bb)(bb)(bb)(bb)(bb))"};
-const ford_message_descriptions::StructDescription
- Common__RemoteControlCapabilities__parameter3_array = {
- {"buttonCapabilities", ford_message_descriptions::Struct, true},
- Structs::Common__ButtonCapabilities__parameters};
-const ford_message_descriptions::ArrayDescription
- Common__RemoteControlCapabilities__parameter3 = {
- {"buttonCapabilities", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RemoteControlCapabilities__parameter3_array,
- "(ibbb)"};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__RemoteControlCapabilities__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RemoteControlCapabilities__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RemoteControlCapabilities__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__RemoteControlCapabilities__parameter3,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__Rectangle__parameter1 = {
- "x", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription
- Common__Rectangle__parameter2 = {
- "y", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription
- Common__Rectangle__parameter3 = {
- "width", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription
- Common__Rectangle__parameter4 = {
- "height", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__Rectangle__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Rectangle__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Rectangle__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Rectangle__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__Rectangle__parameter4,
- NULL};
-
-const ford_message_descriptions::ParameterDescription
- Common__HapticRect__parameter1 = {
- "id", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::StructDescription
- Common__HapticRect__parameter2 = {
- {"rect", ford_message_descriptions::Struct, true},
- Structs::Common__Rectangle__parameters};
-const ford_message_descriptions::ParameterDescription*
- Structs::Common__HapticRect__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HapticRect__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Common__HapticRect__parameter2,
- NULL};
-
-const ford_message_descriptions::ParameterDescription*
- Buttons__GetCapabilities__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Buttons__GetCapabilities__request = {
- "Buttons",
- "GetCapabilities",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Buttons_GetCapabilities,
- Buttons__GetCapabilities__request__parameters};
-
-const ford_message_descriptions::StructDescription
- Buttons__GetCapabilities__response__parameter1_array = {
- {"capabilities", ford_message_descriptions::Struct, true},
- Structs::Common__ButtonCapabilities__parameters};
-const ford_message_descriptions::ArrayDescription
- Buttons__GetCapabilities__response__parameter1 = {
- {"capabilities", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__GetCapabilities__response__parameter1_array,
- "(ibbb)"};
-const ford_message_descriptions::StructDescription
- Buttons__GetCapabilities__response__parameter2 = {
- {"presetBankCapabilities", ford_message_descriptions::Struct, false},
- Structs::Common__PresetBankCapabilities__parameters};
-const ford_message_descriptions::ParameterDescription*
- Buttons__GetCapabilities__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__GetCapabilities__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__GetCapabilities__response__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- Buttons__GetCapabilities__response = {
- "Buttons",
- "GetCapabilities",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Buttons_GetCapabilities,
- Buttons__GetCapabilities__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonEvent__notification__parameter1 = {
- "name", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonEvent__notification__parameter2 = {
- "mode", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonEvent__notification__parameter3 = {
- "customButtonID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonEvent__notification__parameter4 = {
- "appID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- Buttons__OnButtonEvent__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonEvent__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonEvent__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonEvent__notification__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonEvent__notification__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription
- Buttons__OnButtonEvent__notification = {
- "Buttons",
- "OnButtonEvent",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::Buttons_OnButtonEvent,
- Buttons__OnButtonEvent__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonPress__notification__parameter1 = {
- "name", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonPress__notification__parameter2 = {
- "mode", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonPress__notification__parameter3 = {
- "customButtonID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonPress__notification__parameter4 = {
- "appID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- Buttons__OnButtonPress__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonPress__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonPress__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonPress__notification__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonPress__notification__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription
- Buttons__OnButtonPress__notification = {
- "Buttons",
- "OnButtonPress",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::Buttons_OnButtonPress,
- Buttons__OnButtonPress__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonSubscription__notification__parameter1 = {
- "name", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonSubscription__notification__parameter2 = {
- "isSubscribed", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- Buttons__OnButtonSubscription__notification__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Buttons__OnButtonSubscription__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonSubscription__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonSubscription__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Buttons__OnButtonSubscription__notification__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- Buttons__OnButtonSubscription__notification = {
- "Buttons",
- "OnButtonSubscription",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::Buttons_OnButtonSubscription,
- Buttons__OnButtonSubscription__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnReady__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnReady__notification = {
- "BasicCommunication",
- "OnReady",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnReady,
- BasicCommunication__OnReady__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnStartDeviceDiscovery__notification__parameters[] = {
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnStartDeviceDiscovery__notification = {
- "BasicCommunication",
- "OnStartDeviceDiscovery",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnStartDeviceDiscovery,
- BasicCommunication__OnStartDeviceDiscovery__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnUpdateDeviceList__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnUpdateDeviceList__notification = {
- "BasicCommunication",
- "OnUpdateDeviceList",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnUpdateDeviceList,
- BasicCommunication__OnUpdateDeviceList__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnPhoneCall__notification__parameter1 = {
- "isActive", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnPhoneCall__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnPhoneCall__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnPhoneCall__notification = {
- "BasicCommunication",
- "OnPhoneCall",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnPhoneCall,
- BasicCommunication__OnPhoneCall__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnEmergencyEvent__notification__parameter1 = {
- "enabled", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnEmergencyEvent__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnEmergencyEvent__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnEmergencyEvent__notification = {
- "BasicCommunication",
- "OnEmergencyEvent",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnEmergencyEvent,
- BasicCommunication__OnEmergencyEvent__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnResumeAudioSource__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnResumeAudioSource__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnResumeAudioSource__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnResumeAudioSource__notification = {
- "BasicCommunication",
- "OnResumeAudioSource",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnResumeAudioSource,
- BasicCommunication__OnResumeAudioSource__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnSDLPersistenceComplete__notification__parameters[] = {
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnSDLPersistenceComplete__notification = {
- "BasicCommunication",
- "OnSDLPersistenceComplete",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnSDLPersistenceComplete,
- BasicCommunication__OnSDLPersistenceComplete__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- BasicCommunication__UpdateAppList__request__parameter1_array = {
- {"applications", ford_message_descriptions::Struct, true},
- Structs::Common__HMIApplication__parameters};
-const ford_message_descriptions::ArrayDescription
- BasicCommunication__UpdateAppList__request__parameter1 = {
- {"applications", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__UpdateAppList__request__parameter1_array,
- "(s(bs)(bs)(ss(bi)(bb))s(ba(si))(bas)iib(bai)(bb)(bai))"};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__UpdateAppList__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__UpdateAppList__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__UpdateAppList__request = {
- "BasicCommunication",
- "UpdateAppList",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_UpdateAppList,
- BasicCommunication__UpdateAppList__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__UpdateAppList__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__UpdateAppList__response = {
- "BasicCommunication",
- "UpdateAppList",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_UpdateAppList,
- BasicCommunication__UpdateAppList__response__parameters};
-
-const ford_message_descriptions::StructDescription
- BasicCommunication__UpdateDeviceList__request__parameter1_array = {
- {"deviceList", ford_message_descriptions::Struct, true},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ArrayDescription
- BasicCommunication__UpdateDeviceList__request__parameter1 = {
- {"deviceList", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__UpdateDeviceList__request__parameter1_array,
- "(ss(bi)(bb))"};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__UpdateDeviceList__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__UpdateDeviceList__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__UpdateDeviceList__request = {
- "BasicCommunication",
- "UpdateDeviceList",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_UpdateDeviceList,
- BasicCommunication__UpdateDeviceList__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__UpdateDeviceList__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__UpdateDeviceList__response = {
- "BasicCommunication",
- "UpdateDeviceList",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_UpdateDeviceList,
- BasicCommunication__UpdateDeviceList__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnFileRemoved__notification__parameter1 = {
- "fileName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnFileRemoved__notification__parameter2 = {
- "fileType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnFileRemoved__notification__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnFileRemoved__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnFileRemoved__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnFileRemoved__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnFileRemoved__notification__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnFileRemoved__notification = {
- "BasicCommunication",
- "OnFileRemoved",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnFileRemoved,
- BasicCommunication__OnFileRemoved__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- BasicCommunication__AllowDeviceToConnect__request__parameter1 = {
- {"device", ford_message_descriptions::Struct, true},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__AllowDeviceToConnect__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__AllowDeviceToConnect__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__AllowDeviceToConnect__request = {
- "BasicCommunication",
- "AllowDeviceToConnect",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_AllowDeviceToConnect,
- BasicCommunication__AllowDeviceToConnect__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__AllowDeviceToConnect__response__parameter1 = {
- "allow", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__AllowDeviceToConnect__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__AllowDeviceToConnect__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__AllowDeviceToConnect__response = {
- "BasicCommunication",
- "AllowDeviceToConnect",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_AllowDeviceToConnect,
- BasicCommunication__AllowDeviceToConnect__response__parameters};
-
-const ford_message_descriptions::StructDescription
- BasicCommunication__OnDeviceChosen__notification__parameter1 = {
- {"deviceInfo", ford_message_descriptions::Struct, true},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnDeviceChosen__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnDeviceChosen__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnDeviceChosen__notification = {
- "BasicCommunication",
- "OnDeviceChosen",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnDeviceChosen,
- BasicCommunication__OnDeviceChosen__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- BasicCommunication__OnFindApplications__notification__parameter1 = {
- {"deviceInfo", ford_message_descriptions::Struct, false},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnFindApplications__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnFindApplications__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnFindApplications__notification = {
- "BasicCommunication",
- "OnFindApplications",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnFindApplications,
- BasicCommunication__OnFindApplications__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__ActivateApp__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__ActivateApp__request__parameter2 = {
- "priority", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__ActivateApp__request__parameter3 = {
- "level", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__ActivateApp__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__ActivateApp__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__ActivateApp__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__ActivateApp__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__ActivateApp__request = {
- "BasicCommunication",
- "ActivateApp",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_ActivateApp,
- BasicCommunication__ActivateApp__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__ActivateApp__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__ActivateApp__response = {
- "BasicCommunication",
- "ActivateApp",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_ActivateApp,
- BasicCommunication__ActivateApp__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnAppActivated__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnAppActivated__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppActivated__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnAppActivated__notification = {
- "BasicCommunication",
- "OnAppActivated",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnAppActivated,
- BasicCommunication__OnAppActivated__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnAppDeactivated__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnAppDeactivated__notification__parameter2 = {
- "reason", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnAppDeactivated__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppDeactivated__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppDeactivated__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnAppDeactivated__notification = {
- "BasicCommunication",
- "OnAppDeactivated",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnAppDeactivated,
- BasicCommunication__OnAppDeactivated__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- BasicCommunication__OnAppRegistered__notification__parameter1 = {
- {"application", ford_message_descriptions::Struct, true},
- Structs::Common__HMIApplication__parameters};
-const ford_message_descriptions::StructDescription
- BasicCommunication__OnAppRegistered__notification__parameter2_array = {
- {"ttsName", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- BasicCommunication__OnAppRegistered__notification__parameter2 = {
- {"ttsName", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppRegistered__notification__parameter2_array,
- "(si)"};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnAppRegistered__notification__parameter3_array = {
- "vrSynonyms", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- BasicCommunication__OnAppRegistered__notification__parameter3 = {
- {"vrSynonyms", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppRegistered__notification__parameter3_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnAppRegistered__notification__parameter4 = {
- "resumeVrGrammars", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnAppRegistered__notification__parameter5 = {
- "priority", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnAppRegistered__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppRegistered__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppRegistered__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppRegistered__notification__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppRegistered__notification__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppRegistered__notification__parameter5,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnAppRegistered__notification = {
- "BasicCommunication",
- "OnAppRegistered",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnAppRegistered,
- BasicCommunication__OnAppRegistered__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnAppUnregistered__notification__parameter1 = {
- "unexpectedDisconnect", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnAppUnregistered__notification__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnAppUnregistered__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppUnregistered__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnAppUnregistered__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnAppUnregistered__notification = {
- "BasicCommunication",
- "OnAppUnregistered",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnAppUnregistered,
- BasicCommunication__OnAppUnregistered__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnExitApplication__notification__parameter1 = {
- "reason", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnExitApplication__notification__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnExitApplication__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnExitApplication__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnExitApplication__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnExitApplication__notification = {
- "BasicCommunication",
- "OnExitApplication",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnExitApplication,
- BasicCommunication__OnExitApplication__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnExitAllApplications__notification__parameter1 = {
- "reason", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnExitAllApplications__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnExitAllApplications__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnExitAllApplications__notification = {
- "BasicCommunication",
- "OnExitAllApplications",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnExitAllApplications,
- BasicCommunication__OnExitAllApplications__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnAwakeSDL__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnAwakeSDL__notification = {
- "BasicCommunication",
- "OnAwakeSDL",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnAwakeSDL,
- BasicCommunication__OnAwakeSDL__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__MixingAudioSupported__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__MixingAudioSupported__request = {
- "BasicCommunication",
- "MixingAudioSupported",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_MixingAudioSupported,
- BasicCommunication__MixingAudioSupported__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__MixingAudioSupported__response__parameter1 = {
- "attenuatedSupported", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__MixingAudioSupported__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__MixingAudioSupported__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__MixingAudioSupported__response = {
- "BasicCommunication",
- "MixingAudioSupported",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_MixingAudioSupported,
- BasicCommunication__MixingAudioSupported__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__PlayTone__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__PlayTone__notification__parameter2 = {
- "methodName", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__PlayTone__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__PlayTone__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__PlayTone__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__PlayTone__notification = {
- "BasicCommunication",
- "PlayTone",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_PlayTone,
- BasicCommunication__PlayTone__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__DialNumber__request__parameter1 = {
- "number", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__DialNumber__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__DialNumber__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__DialNumber__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__DialNumber__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__DialNumber__request = {
- "BasicCommunication",
- "DialNumber",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_DialNumber,
- BasicCommunication__DialNumber__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__DialNumber__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__DialNumber__response = {
- "BasicCommunication",
- "DialNumber",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_DialNumber,
- BasicCommunication__DialNumber__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemRequest__notification__parameter1 = {
- "requestType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemRequest__notification__parameter2 = {
- "url", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemRequest__notification__parameter3 = {
- "fileType", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemRequest__notification__parameter4 = {
- "offset", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemRequest__notification__parameter5 = {
- "length", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemRequest__notification__parameter6 = {
- "timeout", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemRequest__notification__parameter7 = {
- "fileName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemRequest__notification__parameter8 = {
- "appID", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnSystemRequest__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemRequest__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemRequest__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemRequest__notification__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemRequest__notification__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemRequest__notification__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemRequest__notification__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemRequest__notification__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemRequest__notification__parameter8,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnSystemRequest__notification = {
- "BasicCommunication",
- "OnSystemRequest",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnSystemRequest,
- BasicCommunication__OnSystemRequest__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__SystemRequest__request__parameter1 = {
- "requestType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__SystemRequest__request__parameter2 = {
- "fileName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__SystemRequest__request__parameter3 = {
- "appID", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__SystemRequest__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__SystemRequest__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__SystemRequest__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__SystemRequest__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__SystemRequest__request = {
- "BasicCommunication",
- "SystemRequest",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_SystemRequest,
- BasicCommunication__SystemRequest__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__SystemRequest__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__SystemRequest__response = {
- "BasicCommunication",
- "SystemRequest",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_SystemRequest,
- BasicCommunication__SystemRequest__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__PolicyUpdate__request__parameter1 = {
- "file", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__PolicyUpdate__request__parameter2 = {
- "timeout", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__PolicyUpdate__request__parameter3_array = {
- "retry", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ArrayDescription
- BasicCommunication__PolicyUpdate__request__parameter3 = {
- {"retry", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__PolicyUpdate__request__parameter3_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__PolicyUpdate__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__PolicyUpdate__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__PolicyUpdate__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__PolicyUpdate__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__PolicyUpdate__request = {
- "BasicCommunication",
- "PolicyUpdate",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_PolicyUpdate,
- BasicCommunication__PolicyUpdate__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__PolicyUpdate__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__PolicyUpdate__response = {
- "BasicCommunication",
- "PolicyUpdate",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_PolicyUpdate,
- BasicCommunication__PolicyUpdate__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnSDLClose__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnSDLClose__notification = {
- "BasicCommunication",
- "OnSDLClose",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnSDLClose,
- BasicCommunication__OnSDLClose__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnPutFile__notification__parameter1 = {
- "offset", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnPutFile__notification__parameter2 = {
- "length", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnPutFile__notification__parameter3 = {
- "fileSize", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnPutFile__notification__parameter4 = {
- "FileName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnPutFile__notification__parameter5 = {
- "syncFileName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnPutFile__notification__parameter6 = {
- "fileType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnPutFile__notification__parameter7 = {
- "persistentFile", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnPutFile__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnPutFile__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnPutFile__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnPutFile__notification__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnPutFile__notification__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnPutFile__notification__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnPutFile__notification__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnPutFile__notification__parameter7,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnPutFile__notification = {
- "BasicCommunication",
- "OnPutFile",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnPutFile,
- BasicCommunication__OnPutFile__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__GetSystemInfo__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__GetSystemInfo__request = {
- "BasicCommunication",
- "GetSystemInfo",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_GetSystemInfo,
- BasicCommunication__GetSystemInfo__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__GetSystemInfo__response__parameter1 = {
- "ccpu_version", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__GetSystemInfo__response__parameter2 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__GetSystemInfo__response__parameter3 = {
- "wersCountryCode", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__GetSystemInfo__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__GetSystemInfo__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__GetSystemInfo__response__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__GetSystemInfo__response__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__GetSystemInfo__response = {
- "BasicCommunication",
- "GetSystemInfo",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_GetSystemInfo,
- BasicCommunication__GetSystemInfo__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnSystemInfoChanged__notification__parameter1 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnSystemInfoChanged__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnSystemInfoChanged__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnSystemInfoChanged__notification = {
- "BasicCommunication",
- "OnSystemInfoChanged",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnSystemInfoChanged,
- BasicCommunication__OnSystemInfoChanged__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnIgnitionCycleOver__notification__parameters[] = {
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnIgnitionCycleOver__notification = {
- "BasicCommunication",
- "OnIgnitionCycleOver",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnIgnitionCycleOver,
- BasicCommunication__OnIgnitionCycleOver__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__DecryptCertificate__request__parameter1 = {
- "fileName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__DecryptCertificate__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__DecryptCertificate__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__DecryptCertificate__request = {
- "BasicCommunication",
- "DecryptCertificate",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::BasicCommunication_DecryptCertificate,
- BasicCommunication__DecryptCertificate__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__DecryptCertificate__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__DecryptCertificate__response = {
- "BasicCommunication",
- "DecryptCertificate",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::BasicCommunication_DecryptCertificate,
- BasicCommunication__DecryptCertificate__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnEventChanged__notification__parameter1 = {
- "eventName", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- BasicCommunication__OnEventChanged__notification__parameter2 = {
- "isActive", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- BasicCommunication__OnEventChanged__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnEventChanged__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&BasicCommunication__OnEventChanged__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- BasicCommunication__OnEventChanged__notification = {
- "BasicCommunication",
- "OnEventChanged",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::BasicCommunication_OnEventChanged,
- BasicCommunication__OnEventChanged__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__IsReady__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription VR__IsReady__request = {
- "VR",
- "IsReady",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VR_IsReady,
- VR__IsReady__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__IsReady__response__parameter1 = {
- "available", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- VR__IsReady__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__IsReady__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription VR__IsReady__response = {
- "VR",
- "IsReady",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VR_IsReady,
- VR__IsReady__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__Started__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription VR__Started__notification =
- {"VR",
- "Started",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VR_Started,
- VR__Started__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__Stopped__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription VR__Stopped__notification =
- {"VR",
- "Stopped",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VR_Stopped,
- VR__Stopped__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__AddCommand__request__parameter1 = {
- "cmdID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VR__AddCommand__request__parameter2_array = {
- "vrCommands", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- VR__AddCommand__request__parameter2 = {
- {"vrCommands", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&VR__AddCommand__request__parameter2_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- VR__AddCommand__request__parameter3 = {
- "type", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- VR__AddCommand__request__parameter4 = {
- "grammarID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VR__AddCommand__request__parameter5 = {
- "appID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- VR__AddCommand__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__AddCommand__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__AddCommand__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__AddCommand__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__AddCommand__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__AddCommand__request__parameter5,
- NULL};
-const ford_message_descriptions::MessageDescription VR__AddCommand__request = {
- "VR",
- "AddCommand",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VR_AddCommand,
- VR__AddCommand__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__AddCommand__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription VR__AddCommand__response = {
- "VR",
- "AddCommand",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VR_AddCommand,
- VR__AddCommand__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__DeleteCommand__request__parameter1 = {
- "cmdID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VR__DeleteCommand__request__parameter2 = {
- "type", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- VR__DeleteCommand__request__parameter3 = {
- "grammarID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VR__DeleteCommand__request__parameter4 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VR__DeleteCommand__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__DeleteCommand__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__DeleteCommand__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__DeleteCommand__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__DeleteCommand__request__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription VR__DeleteCommand__request =
- {"VR",
- "DeleteCommand",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VR_DeleteCommand,
- VR__DeleteCommand__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__DeleteCommand__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VR__DeleteCommand__response = {"VR",
- "DeleteCommand",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VR_DeleteCommand,
- VR__DeleteCommand__response__parameters};
-
-const ford_message_descriptions::StructDescription
- VR__PerformInteraction__request__parameter1_array = {
- {"helpPrompt", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- VR__PerformInteraction__request__parameter1 = {
- {"helpPrompt", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter1_array,
- "(si)"};
-const ford_message_descriptions::StructDescription
- VR__PerformInteraction__request__parameter2_array = {
- {"initialPrompt", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- VR__PerformInteraction__request__parameter2 = {
- {"initialPrompt", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter2_array,
- "(si)"};
-const ford_message_descriptions::StructDescription
- VR__PerformInteraction__request__parameter3_array = {
- {"timeoutPrompt", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- VR__PerformInteraction__request__parameter3 = {
- {"timeoutPrompt", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter3_array,
- "(si)"};
-const ford_message_descriptions::ParameterDescription
- VR__PerformInteraction__request__parameter4 = {
- "timeout", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VR__PerformInteraction__request__parameter5_array = {
- "grammarID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ArrayDescription
- VR__PerformInteraction__request__parameter5 = {
- {"grammarID", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter5_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- VR__PerformInteraction__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__request__parameter5,
- NULL};
-const ford_message_descriptions::MessageDescription
- VR__PerformInteraction__request = {
- "VR",
- "PerformInteraction",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VR_PerformInteraction,
- VR__PerformInteraction__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__PerformInteraction__response__parameter1 = {
- "choiceID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- VR__PerformInteraction__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__PerformInteraction__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VR__PerformInteraction__response = {
- "VR",
- "PerformInteraction",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VR_PerformInteraction,
- VR__PerformInteraction__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__OnCommand__notification__parameter1 = {
- "cmdID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VR__OnCommand__notification__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VR__OnCommand__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__OnCommand__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__OnCommand__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- VR__OnCommand__notification = {"VR",
- "OnCommand",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VR_OnCommand,
- VR__OnCommand__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__ChangeRegistration__request__parameter1_array = {
- "vrSynonyms", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- VR__ChangeRegistration__request__parameter1 = {
- {"vrSynonyms", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&VR__ChangeRegistration__request__parameter1_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- VR__ChangeRegistration__request__parameter2 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- VR__ChangeRegistration__request__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VR__ChangeRegistration__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__ChangeRegistration__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__ChangeRegistration__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VR__ChangeRegistration__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- VR__ChangeRegistration__request = {
- "VR",
- "ChangeRegistration",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VR_ChangeRegistration,
- VR__ChangeRegistration__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__ChangeRegistration__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VR__ChangeRegistration__response = {
- "VR",
- "ChangeRegistration",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VR_ChangeRegistration,
- VR__ChangeRegistration__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__OnLanguageChange__notification__parameter1 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VR__OnLanguageChange__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__OnLanguageChange__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VR__OnLanguageChange__notification = {
- "VR",
- "OnLanguageChange",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VR_OnLanguageChange,
- VR__OnLanguageChange__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__GetSupportedLanguages__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VR__GetSupportedLanguages__request = {
- "VR",
- "GetSupportedLanguages",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VR_GetSupportedLanguages,
- VR__GetSupportedLanguages__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__GetSupportedLanguages__response__parameter1_array = {
- "languages", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- VR__GetSupportedLanguages__response__parameter1 = {
- {"languages", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&VR__GetSupportedLanguages__response__parameter1_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- VR__GetSupportedLanguages__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__GetSupportedLanguages__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VR__GetSupportedLanguages__response = {
- "VR",
- "GetSupportedLanguages",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VR_GetSupportedLanguages,
- VR__GetSupportedLanguages__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__GetLanguage__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription VR__GetLanguage__request = {
- "VR",
- "GetLanguage",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VR_GetLanguage,
- VR__GetLanguage__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__GetLanguage__response__parameter1 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VR__GetLanguage__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__GetLanguage__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription VR__GetLanguage__response =
- {"VR",
- "GetLanguage",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VR_GetLanguage,
- VR__GetLanguage__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VR__GetCapabilities__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VR__GetCapabilities__request = {"VR",
- "GetCapabilities",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VR_GetCapabilities,
- VR__GetCapabilities__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VR__GetCapabilities__response__parameter1_array = {
- "vrCapabilities", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- VR__GetCapabilities__response__parameter1 = {
- {"vrCapabilities", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&VR__GetCapabilities__response__parameter1_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- VR__GetCapabilities__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VR__GetCapabilities__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VR__GetCapabilities__response = {"VR",
- "GetCapabilities",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VR_GetCapabilities,
- VR__GetCapabilities__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__GetCapabilities__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- TTS__GetCapabilities__request = {"TTS",
- "GetCapabilities",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::TTS_GetCapabilities,
- TTS__GetCapabilities__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- TTS__GetCapabilities__response__parameter1_array = {
- "speechCapabilities", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- TTS__GetCapabilities__response__parameter1 = {
- {"speechCapabilities", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__GetCapabilities__response__parameter1_array,
- "i"};
-const ford_message_descriptions::ParameterDescription
- TTS__GetCapabilities__response__parameter2_array = {
- "prerecordedSpeechCapabilities", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- TTS__GetCapabilities__response__parameter2 = {
- {"prerecordedSpeechCapabilities",
- ford_message_descriptions::Array,
- true},
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__GetCapabilities__response__parameter2_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- TTS__GetCapabilities__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__GetCapabilities__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__GetCapabilities__response__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- TTS__GetCapabilities__response = {
- "TTS",
- "GetCapabilities",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::TTS_GetCapabilities,
- TTS__GetCapabilities__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__Started__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription TTS__Started__notification =
- {"TTS",
- "Started",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::TTS_Started,
- TTS__Started__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__Stopped__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription TTS__Stopped__notification =
- {"TTS",
- "Stopped",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::TTS_Stopped,
- TTS__Stopped__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__IsReady__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription TTS__IsReady__request = {
- "TTS",
- "IsReady",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::TTS_IsReady,
- TTS__IsReady__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- TTS__IsReady__response__parameter1 = {
- "available", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- TTS__IsReady__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__IsReady__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription TTS__IsReady__response = {
- "TTS",
- "IsReady",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::TTS_IsReady,
- TTS__IsReady__response__parameters};
-
-const ford_message_descriptions::StructDescription
- TTS__Speak__request__parameter1_array = {
- {"ttsChunks", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- TTS__Speak__request__parameter1 = {
- {"ttsChunks", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__Speak__request__parameter1_array,
- "(si)"};
-const ford_message_descriptions::ParameterDescription
- TTS__Speak__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- TTS__Speak__request__parameter3 = {
- "speakType", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- TTS__Speak__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__Speak__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__Speak__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__Speak__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription TTS__Speak__request = {
- "TTS",
- "Speak",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::TTS_Speak,
- TTS__Speak__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__Speak__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription TTS__Speak__response = {
- "TTS",
- "Speak",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::TTS_Speak,
- TTS__Speak__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__StopSpeaking__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription TTS__StopSpeaking__request =
- {"TTS",
- "StopSpeaking",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::TTS_StopSpeaking,
- TTS__StopSpeaking__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__StopSpeaking__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- TTS__StopSpeaking__response = {"TTS",
- "StopSpeaking",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::TTS_StopSpeaking,
- TTS__StopSpeaking__response__parameters};
-
-const ford_message_descriptions::StructDescription
- TTS__ChangeRegistration__request__parameter1_array = {
- {"ttsName", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- TTS__ChangeRegistration__request__parameter1 = {
- {"ttsName", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__ChangeRegistration__request__parameter1_array,
- "(si)"};
-const ford_message_descriptions::ParameterDescription
- TTS__ChangeRegistration__request__parameter2 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- TTS__ChangeRegistration__request__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- TTS__ChangeRegistration__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__ChangeRegistration__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__ChangeRegistration__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__ChangeRegistration__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- TTS__ChangeRegistration__request = {
- "TTS",
- "ChangeRegistration",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::TTS_ChangeRegistration,
- TTS__ChangeRegistration__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__ChangeRegistration__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- TTS__ChangeRegistration__response = {
- "TTS",
- "ChangeRegistration",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::TTS_ChangeRegistration,
- TTS__ChangeRegistration__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- TTS__OnLanguageChange__notification__parameter1 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- TTS__OnLanguageChange__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__OnLanguageChange__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- TTS__OnLanguageChange__notification = {
- "TTS",
- "OnLanguageChange",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::TTS_OnLanguageChange,
- TTS__OnLanguageChange__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__GetSupportedLanguages__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- TTS__GetSupportedLanguages__request = {
- "TTS",
- "GetSupportedLanguages",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::TTS_GetSupportedLanguages,
- TTS__GetSupportedLanguages__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- TTS__GetSupportedLanguages__response__parameter1_array = {
- "languages", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- TTS__GetSupportedLanguages__response__parameter1 = {
- {"languages", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__GetSupportedLanguages__response__parameter1_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- TTS__GetSupportedLanguages__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__GetSupportedLanguages__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- TTS__GetSupportedLanguages__response = {
- "TTS",
- "GetSupportedLanguages",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::TTS_GetSupportedLanguages,
- TTS__GetSupportedLanguages__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__GetLanguage__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription TTS__GetLanguage__request =
- {"TTS",
- "GetLanguage",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::TTS_GetLanguage,
- TTS__GetLanguage__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- TTS__GetLanguage__response__parameter1 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- TTS__GetLanguage__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__GetLanguage__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription TTS__GetLanguage__response =
- {"TTS",
- "GetLanguage",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::TTS_GetLanguage,
- TTS__GetLanguage__response__parameters};
-
-const ford_message_descriptions::StructDescription
- TTS__SetGlobalProperties__request__parameter1_array = {
- {"helpPrompt", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- TTS__SetGlobalProperties__request__parameter1 = {
- {"helpPrompt", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__SetGlobalProperties__request__parameter1_array,
- "(si)"};
-const ford_message_descriptions::StructDescription
- TTS__SetGlobalProperties__request__parameter2_array = {
- {"timeoutPrompt", ford_message_descriptions::Struct, true},
- Structs::Common__TTSChunk__parameters};
-const ford_message_descriptions::ArrayDescription
- TTS__SetGlobalProperties__request__parameter2 = {
- {"timeoutPrompt", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__SetGlobalProperties__request__parameter2_array,
- "(si)"};
-const ford_message_descriptions::ParameterDescription
- TTS__SetGlobalProperties__request__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- TTS__SetGlobalProperties__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__SetGlobalProperties__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__SetGlobalProperties__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__SetGlobalProperties__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- TTS__SetGlobalProperties__request = {
- "TTS",
- "SetGlobalProperties",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::TTS_SetGlobalProperties,
- TTS__SetGlobalProperties__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- TTS__SetGlobalProperties__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- TTS__SetGlobalProperties__response = {
- "TTS",
- "SetGlobalProperties",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::TTS_SetGlobalProperties,
- TTS__SetGlobalProperties__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- TTS__OnResetTimeout__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- TTS__OnResetTimeout__notification__parameter2 = {
- "methodName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- TTS__OnResetTimeout__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__OnResetTimeout__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&TTS__OnResetTimeout__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- TTS__OnResetTimeout__notification = {
- "TTS",
- "OnResetTimeout",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::TTS_OnResetTimeout,
- TTS__OnResetTimeout__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- UI__Alert__request__parameter1_array = {
- {"alertStrings", ford_message_descriptions::Struct, true},
- Structs::Common__TextFieldStruct__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__Alert__request__parameter1 = {
- {"alertStrings", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__request__parameter1_array,
- "(is)"};
-const ford_message_descriptions::ParameterDescription
- UI__Alert__request__parameter2 = {
- "duration", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::StructDescription
- UI__Alert__request__parameter3_array = {
- {"softButtons", ford_message_descriptions::Struct, true},
- Structs::Common__SoftButton__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__Alert__request__parameter3 = {
- {"softButtons", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__request__parameter3_array,
- "(i(bs)(b(si))(bb)ii)"};
-const ford_message_descriptions::ParameterDescription
- UI__Alert__request__parameter4 = {
- "progressIndicator", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- UI__Alert__request__parameter5 = {
- "alertType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- UI__Alert__request__parameter6 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__Alert__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__request__parameter6,
- NULL};
-const ford_message_descriptions::MessageDescription UI__Alert__request = {
- "UI",
- "Alert",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_Alert,
- UI__Alert__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__Alert__response__parameter1 = {
- "tryAgainTime", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- UI__Alert__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Alert__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription UI__Alert__response = {
- "UI",
- "Alert",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_Alert,
- UI__Alert__response__parameters};
-
-const ford_message_descriptions::StructDescription
- UI__Show__request__parameter1_array = {
- {"showStrings", ford_message_descriptions::Struct, true},
- Structs::Common__TextFieldStruct__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__Show__request__parameter1 = {
- {"showStrings", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter1_array,
- "(is)"};
-const ford_message_descriptions::ParameterDescription
- UI__Show__request__parameter2 = {
- "alignment", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::StructDescription
- UI__Show__request__parameter3 = {
- {"graphic", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::StructDescription
- UI__Show__request__parameter4 = {
- {"secondaryGraphic", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::StructDescription
- UI__Show__request__parameter5_array = {
- {"softButtons", ford_message_descriptions::Struct, true},
- Structs::Common__SoftButton__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__Show__request__parameter5 = {
- {"softButtons", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter5_array,
- "(i(bs)(b(si))(bb)ii)"};
-const ford_message_descriptions::ParameterDescription
- UI__Show__request__parameter6_array = {
- "customPresets", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- UI__Show__request__parameter6 = {
- {"customPresets", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter6_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- UI__Show__request__parameter7 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__Show__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Show__request__parameter7,
- NULL};
-const ford_message_descriptions::MessageDescription UI__Show__request = {
- "UI",
- "Show",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_Show,
- UI__Show__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__Show__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription UI__Show__response = {
- "UI",
- "Show",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_Show,
- UI__Show__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__AddCommand__request__parameter1 = {
- "cmdID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::StructDescription
- UI__AddCommand__request__parameter2 = {
- {"menuParams", ford_message_descriptions::Struct, false},
- Structs::Common__MenuParams__parameters};
-const ford_message_descriptions::StructDescription
- UI__AddCommand__request__parameter3 = {
- {"cmdIcon", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription
- UI__AddCommand__request__parameter4 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__AddCommand__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__AddCommand__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__AddCommand__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__AddCommand__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__AddCommand__request__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription UI__AddCommand__request = {
- "UI",
- "AddCommand",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_AddCommand,
- UI__AddCommand__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__AddCommand__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription UI__AddCommand__response = {
- "UI",
- "AddCommand",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_AddCommand,
- UI__AddCommand__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__DeleteCommand__request__parameter1 = {
- "cmdID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__DeleteCommand__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__DeleteCommand__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__DeleteCommand__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__DeleteCommand__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription UI__DeleteCommand__request =
- {"UI",
- "DeleteCommand",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_DeleteCommand,
- UI__DeleteCommand__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__DeleteCommand__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__DeleteCommand__response = {"UI",
- "DeleteCommand",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_DeleteCommand,
- UI__DeleteCommand__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__AddSubMenu__request__parameter1 = {
- "menuID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::StructDescription
- UI__AddSubMenu__request__parameter2 = {
- {"menuParams", ford_message_descriptions::Struct, true},
- Structs::Common__MenuParams__parameters};
-const ford_message_descriptions::ParameterDescription
- UI__AddSubMenu__request__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__AddSubMenu__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__AddSubMenu__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__AddSubMenu__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__AddSubMenu__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription UI__AddSubMenu__request = {
- "UI",
- "AddSubMenu",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_AddSubMenu,
- UI__AddSubMenu__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__AddSubMenu__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription UI__AddSubMenu__response = {
- "UI",
- "AddSubMenu",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_AddSubMenu,
- UI__AddSubMenu__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__DeleteSubMenu__request__parameter1 = {
- "menuID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__DeleteSubMenu__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__DeleteSubMenu__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__DeleteSubMenu__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__DeleteSubMenu__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription UI__DeleteSubMenu__request =
- {"UI",
- "DeleteSubMenu",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_DeleteSubMenu,
- UI__DeleteSubMenu__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__DeleteSubMenu__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__DeleteSubMenu__response = {"UI",
- "DeleteSubMenu",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_DeleteSubMenu,
- UI__DeleteSubMenu__response__parameters};
-
-const ford_message_descriptions::StructDescription
- UI__PerformInteraction__request__parameter1 = {
- {"initialText", ford_message_descriptions::Struct, false},
- Structs::Common__TextFieldStruct__parameters};
-const ford_message_descriptions::StructDescription
- UI__PerformInteraction__request__parameter2_array = {
- {"choiceSet", ford_message_descriptions::Struct, true},
- Structs::Common__Choice__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__PerformInteraction__request__parameter2 = {
- {"choiceSet", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter2_array,
- "(i(bs)(b(si))(bs)(bs)(b(si)))"};
-const ford_message_descriptions::ParameterDescription
- UI__PerformInteraction__request__parameter3 = {
- "vrHelpTitle", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription
- UI__PerformInteraction__request__parameter4_array = {
- {"vrHelp", ford_message_descriptions::Struct, true},
- Structs::Common__VrHelpItem__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__PerformInteraction__request__parameter4 = {
- {"vrHelp", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter4_array,
- "(s(b(si))i)"};
-const ford_message_descriptions::ParameterDescription
- UI__PerformInteraction__request__parameter5 = {
- "timeout", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__PerformInteraction__request__parameter6 = {
- "interactionLayout", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- UI__PerformInteraction__request__parameter7 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__PerformInteraction__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__request__parameter7,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__PerformInteraction__request = {
- "UI",
- "PerformInteraction",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_PerformInteraction,
- UI__PerformInteraction__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__PerformInteraction__response__parameter1 = {
- "choiceID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- UI__PerformInteraction__response__parameter2 = {
- "manualTextEntry", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- UI__PerformInteraction__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformInteraction__response__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__PerformInteraction__response = {
- "UI",
- "PerformInteraction",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_PerformInteraction,
- UI__PerformInteraction__response__parameters};
-
-const ford_message_descriptions::StructDescription
- UI__SetMediaClockTimer__request__parameter1 = {
- {"startTime", ford_message_descriptions::Struct, false},
- Structs::Common__TimeFormat__parameters};
-const ford_message_descriptions::StructDescription
- UI__SetMediaClockTimer__request__parameter2 = {
- {"endTime", ford_message_descriptions::Struct, false},
- Structs::Common__TimeFormat__parameters};
-const ford_message_descriptions::ParameterDescription
- UI__SetMediaClockTimer__request__parameter3 = {
- "updateMode", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- UI__SetMediaClockTimer__request__parameter4 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__SetMediaClockTimer__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetMediaClockTimer__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetMediaClockTimer__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetMediaClockTimer__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetMediaClockTimer__request__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__SetMediaClockTimer__request = {
- "UI",
- "SetMediaClockTimer",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_SetMediaClockTimer,
- UI__SetMediaClockTimer__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__SetMediaClockTimer__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__SetMediaClockTimer__response = {
- "UI",
- "SetMediaClockTimer",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_SetMediaClockTimer,
- UI__SetMediaClockTimer__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__SetGlobalProperties__request__parameter1 = {
- "vrHelpTitle", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription
- UI__SetGlobalProperties__request__parameter2_array = {
- {"vrHelp", ford_message_descriptions::Struct, true},
- Structs::Common__VrHelpItem__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__SetGlobalProperties__request__parameter2 = {
- {"vrHelp", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetGlobalProperties__request__parameter2_array,
- "(s(b(si))i)"};
-const ford_message_descriptions::ParameterDescription
- UI__SetGlobalProperties__request__parameter3 = {
- "menuTitle", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription
- UI__SetGlobalProperties__request__parameter4 = {
- {"menuIcon", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::StructDescription
- UI__SetGlobalProperties__request__parameter5 = {
- {"keyboardProperties", ford_message_descriptions::Struct, false},
- Structs::Common__KeyboardProperties__parameters};
-const ford_message_descriptions::ParameterDescription
- UI__SetGlobalProperties__request__parameter6 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__SetGlobalProperties__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetGlobalProperties__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetGlobalProperties__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetGlobalProperties__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetGlobalProperties__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetGlobalProperties__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetGlobalProperties__request__parameter6,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__SetGlobalProperties__request = {
- "UI",
- "SetGlobalProperties",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_SetGlobalProperties,
- UI__SetGlobalProperties__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__SetGlobalProperties__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__SetGlobalProperties__response = {
- "UI",
- "SetGlobalProperties",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_SetGlobalProperties,
- UI__SetGlobalProperties__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__OnCommand__notification__parameter1 = {
- "cmdID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__OnCommand__notification__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__OnCommand__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnCommand__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnCommand__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__OnCommand__notification = {"UI",
- "OnCommand",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::UI_OnCommand,
- UI__OnCommand__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__OnSystemContext__notification__parameter1 = {
- "systemContext", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- UI__OnSystemContext__notification__parameter2 = {
- "appID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- UI__OnSystemContext__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnSystemContext__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnSystemContext__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__OnSystemContext__notification = {
- "UI",
- "OnSystemContext",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::UI_OnSystemContext,
- UI__OnSystemContext__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__GetCapabilities__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__GetCapabilities__request = {"UI",
- "GetCapabilities",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_GetCapabilities,
- UI__GetCapabilities__request__parameters};
-
-const ford_message_descriptions::StructDescription
- UI__GetCapabilities__response__parameter1 = {
- {"displayCapabilities", ford_message_descriptions::Struct, true},
- Structs::Common__DisplayCapabilities__parameters};
-const ford_message_descriptions::StructDescription
- UI__GetCapabilities__response__parameter2 = {
- {"audioPassThruCapabilities", ford_message_descriptions::Struct, true},
- Structs::Common__AudioPassThruCapabilities__parameters};
-const ford_message_descriptions::ParameterDescription
- UI__GetCapabilities__response__parameter3 = {
- "hmiZoneCapabilities", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::StructDescription
- UI__GetCapabilities__response__parameter4_array = {
- {"softButtonCapabilities", ford_message_descriptions::Struct, true},
- Structs::Common__SoftButtonCapabilities__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__GetCapabilities__response__parameter4 = {
- {"softButtonCapabilities", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetCapabilities__response__parameter4_array,
- "(bbbb)"};
-const ford_message_descriptions::StructDescription
- UI__GetCapabilities__response__parameter5 = {
- {"hmiCapabilities", ford_message_descriptions::Struct, false},
- Structs::Common__HMICapabilities__parameters};
-const ford_message_descriptions::ParameterDescription*
- UI__GetCapabilities__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetCapabilities__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetCapabilities__response__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetCapabilities__response__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetCapabilities__response__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetCapabilities__response__parameter5,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__GetCapabilities__response = {"UI",
- "GetCapabilities",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_GetCapabilities,
- UI__GetCapabilities__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__ChangeRegistration__request__parameter1 = {
- "appName", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- UI__ChangeRegistration__request__parameter2 = {
- "ngnMediaScreenAppName", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- UI__ChangeRegistration__request__parameter3 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- UI__ChangeRegistration__request__parameter4_array = {
- "appHMIType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- UI__ChangeRegistration__request__parameter4 = {
- {"appHMIType", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ChangeRegistration__request__parameter4_array,
- "i"};
-const ford_message_descriptions::ParameterDescription
- UI__ChangeRegistration__request__parameter5 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__ChangeRegistration__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ChangeRegistration__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ChangeRegistration__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ChangeRegistration__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ChangeRegistration__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ChangeRegistration__request__parameter5,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__ChangeRegistration__request = {
- "UI",
- "ChangeRegistration",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_ChangeRegistration,
- UI__ChangeRegistration__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__ChangeRegistration__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__ChangeRegistration__response = {
- "UI",
- "ChangeRegistration",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_ChangeRegistration,
- UI__ChangeRegistration__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__OnLanguageChange__notification__parameter1 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- UI__OnLanguageChange__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnLanguageChange__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__OnLanguageChange__notification = {
- "UI",
- "OnLanguageChange",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::UI_OnLanguageChange,
- UI__OnLanguageChange__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__GetSupportedLanguages__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__GetSupportedLanguages__request = {
- "UI",
- "GetSupportedLanguages",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_GetSupportedLanguages,
- UI__GetSupportedLanguages__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__GetSupportedLanguages__response__parameter1_array = {
- "languages", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- UI__GetSupportedLanguages__response__parameter1 = {
- {"languages", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetSupportedLanguages__response__parameter1_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- UI__GetSupportedLanguages__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetSupportedLanguages__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__GetSupportedLanguages__response = {
- "UI",
- "GetSupportedLanguages",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_GetSupportedLanguages,
- UI__GetSupportedLanguages__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__GetLanguage__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription UI__GetLanguage__request = {
- "UI",
- "GetLanguage",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_GetLanguage,
- UI__GetLanguage__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__GetLanguage__response__parameter1 = {
- "language", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- UI__GetLanguage__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__GetLanguage__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription UI__GetLanguage__response =
- {"UI",
- "GetLanguage",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_GetLanguage,
- UI__GetLanguage__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__OnDriverDistraction__notification__parameter1 = {
- "state", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- UI__OnDriverDistraction__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnDriverDistraction__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__OnDriverDistraction__notification = {
- "UI",
- "OnDriverDistraction",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::UI_OnDriverDistraction,
- UI__OnDriverDistraction__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- UI__SetAppIcon__request__parameter1 = {
- {"syncFileName", ford_message_descriptions::Struct, true},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription
- UI__SetAppIcon__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__SetAppIcon__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetAppIcon__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetAppIcon__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription UI__SetAppIcon__request = {
- "UI",
- "SetAppIcon",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_SetAppIcon,
- UI__SetAppIcon__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__SetAppIcon__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription UI__SetAppIcon__response = {
- "UI",
- "SetAppIcon",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_SetAppIcon,
- UI__SetAppIcon__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__SetDisplayLayout__request__parameter1 = {
- "displayLayout", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- UI__SetDisplayLayout__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__SetDisplayLayout__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetDisplayLayout__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetDisplayLayout__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__SetDisplayLayout__request = {"UI",
- "SetDisplayLayout",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_SetDisplayLayout,
- UI__SetDisplayLayout__request__parameters};
-
-const ford_message_descriptions::StructDescription
- UI__SetDisplayLayout__response__parameter1 = {
- {"displayCapabilities", ford_message_descriptions::Struct, false},
- Structs::Common__DisplayCapabilities__parameters};
-const ford_message_descriptions::StructDescription
- UI__SetDisplayLayout__response__parameter2_array = {
- {"buttonCapabilities", ford_message_descriptions::Struct, true},
- Structs::Common__ButtonCapabilities__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__SetDisplayLayout__response__parameter2 = {
- {"buttonCapabilities", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetDisplayLayout__response__parameter2_array,
- "(ibbb)"};
-const ford_message_descriptions::StructDescription
- UI__SetDisplayLayout__response__parameter3_array = {
- {"softButtonCapabilities", ford_message_descriptions::Struct, true},
- Structs::Common__SoftButtonCapabilities__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__SetDisplayLayout__response__parameter3 = {
- {"softButtonCapabilities", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetDisplayLayout__response__parameter3_array,
- "(bbbb)"};
-const ford_message_descriptions::StructDescription
- UI__SetDisplayLayout__response__parameter4 = {
- {"presetBankCapabilities", ford_message_descriptions::Struct, false},
- Structs::Common__PresetBankCapabilities__parameters};
-const ford_message_descriptions::ParameterDescription*
- UI__SetDisplayLayout__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetDisplayLayout__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetDisplayLayout__response__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetDisplayLayout__response__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SetDisplayLayout__response__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__SetDisplayLayout__response = {
- "UI",
- "SetDisplayLayout",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_SetDisplayLayout,
- UI__SetDisplayLayout__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__ShowCustomForm__request__parameter1 = {
- "customFormID", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- UI__ShowCustomForm__request__parameter2 = {
- "parentFormID", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- UI__ShowCustomForm__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ShowCustomForm__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ShowCustomForm__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__ShowCustomForm__request = {"UI",
- "ShowCustomForm",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_ShowCustomForm,
- UI__ShowCustomForm__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__ShowCustomForm__response__parameter1 = {
- "info", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- UI__ShowCustomForm__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ShowCustomForm__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__ShowCustomForm__response = {"UI",
- "ShowCustomForm",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_ShowCustomForm,
- UI__ShowCustomForm__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__OnKeyboardInput__notification__parameter1 = {
- "event", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- UI__OnKeyboardInput__notification__parameter2 = {
- "data", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- UI__OnKeyboardInput__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnKeyboardInput__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnKeyboardInput__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__OnKeyboardInput__notification = {
- "UI",
- "OnKeyboardInput",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::UI_OnKeyboardInput,
- UI__OnKeyboardInput__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__OnTouchEvent__notification__parameter1 = {
- "type", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::StructDescription
- UI__OnTouchEvent__notification__parameter2_array = {
- {"event", ford_message_descriptions::Struct, true},
- Structs::Common__TouchEvent__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__OnTouchEvent__notification__parameter2 = {
- {"event", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnTouchEvent__notification__parameter2_array,
- "(iaia(ii))"};
-const ford_message_descriptions::ParameterDescription*
- UI__OnTouchEvent__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnTouchEvent__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnTouchEvent__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__OnTouchEvent__notification = {
- "UI",
- "OnTouchEvent",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::UI_OnTouchEvent,
- UI__OnTouchEvent__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__Slider__request__parameter1 = {
- "numTicks", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__Slider__request__parameter2 = {
- "position", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__Slider__request__parameter3 = {
- "sliderHeader", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- UI__Slider__request__parameter4_array = {
- "sliderFooter", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- UI__Slider__request__parameter4 = {
- {"sliderFooter", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Slider__request__parameter4_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- UI__Slider__request__parameter5 = {
- "timeout", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__Slider__request__parameter6 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__Slider__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Slider__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Slider__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Slider__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Slider__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Slider__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Slider__request__parameter6,
- NULL};
-const ford_message_descriptions::MessageDescription UI__Slider__request = {
- "UI",
- "Slider",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_Slider,
- UI__Slider__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__Slider__response__parameter1 = {
- "sliderPosition", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- UI__Slider__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__Slider__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription UI__Slider__response = {
- "UI",
- "Slider",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_Slider,
- UI__Slider__response__parameters};
-
-const ford_message_descriptions::StructDescription
- UI__ScrollableMessage__request__parameter1 = {
- {"messageText", ford_message_descriptions::Struct, true},
- Structs::Common__TextFieldStruct__parameters};
-const ford_message_descriptions::ParameterDescription
- UI__ScrollableMessage__request__parameter2 = {
- "timeout", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::StructDescription
- UI__ScrollableMessage__request__parameter3_array = {
- {"softButtons", ford_message_descriptions::Struct, true},
- Structs::Common__SoftButton__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__ScrollableMessage__request__parameter3 = {
- {"softButtons", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ScrollableMessage__request__parameter3_array,
- "(i(bs)(b(si))(bb)ii)"};
-const ford_message_descriptions::ParameterDescription
- UI__ScrollableMessage__request__parameter4 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__ScrollableMessage__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ScrollableMessage__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ScrollableMessage__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ScrollableMessage__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ScrollableMessage__request__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__ScrollableMessage__request = {
- "UI",
- "ScrollableMessage",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_ScrollableMessage,
- UI__ScrollableMessage__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__ScrollableMessage__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__ScrollableMessage__response = {
- "UI",
- "ScrollableMessage",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_ScrollableMessage,
- UI__ScrollableMessage__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__PerformAudioPassThru__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::StructDescription
- UI__PerformAudioPassThru__request__parameter2_array = {
- {"audioPassThruDisplayTexts", ford_message_descriptions::Struct, true},
- Structs::Common__TextFieldStruct__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__PerformAudioPassThru__request__parameter2 = {
- {"audioPassThruDisplayTexts", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformAudioPassThru__request__parameter2_array,
- "(is)"};
-const ford_message_descriptions::ParameterDescription
- UI__PerformAudioPassThru__request__parameter3 = {
- "maxDuration", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__PerformAudioPassThru__request__parameter4 = {
- "muteAudio", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- UI__PerformAudioPassThru__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformAudioPassThru__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformAudioPassThru__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformAudioPassThru__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__PerformAudioPassThru__request__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__PerformAudioPassThru__request = {
- "UI",
- "PerformAudioPassThru",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_PerformAudioPassThru,
- UI__PerformAudioPassThru__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__PerformAudioPassThru__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__PerformAudioPassThru__response = {
- "UI",
- "PerformAudioPassThru",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_PerformAudioPassThru,
- UI__PerformAudioPassThru__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__EndAudioPassThru__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__EndAudioPassThru__request = {"UI",
- "EndAudioPassThru",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_EndAudioPassThru,
- UI__EndAudioPassThru__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__EndAudioPassThru__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__EndAudioPassThru__response = {
- "UI",
- "EndAudioPassThru",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_EndAudioPassThru,
- UI__EndAudioPassThru__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__IsReady__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription UI__IsReady__request = {
- "UI",
- "IsReady",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_IsReady,
- UI__IsReady__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__IsReady__response__parameter1 = {
- "available", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- UI__IsReady__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__IsReady__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription UI__IsReady__response = {
- "UI",
- "IsReady",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_IsReady,
- UI__IsReady__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__ClosePopUp__request__parameter1 = {
- "methodName", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription*
- UI__ClosePopUp__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__ClosePopUp__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription UI__ClosePopUp__request = {
- "UI",
- "ClosePopUp",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_ClosePopUp,
- UI__ClosePopUp__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__ClosePopUp__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription UI__ClosePopUp__response = {
- "UI",
- "ClosePopUp",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_ClosePopUp,
- UI__ClosePopUp__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__OnResetTimeout__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- UI__OnResetTimeout__notification__parameter2 = {
- "methodName", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- UI__OnResetTimeout__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnResetTimeout__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnResetTimeout__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__OnResetTimeout__notification = {
- "UI",
- "OnResetTimeout",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::UI_OnResetTimeout,
- UI__OnResetTimeout__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__OnRecordStart__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- UI__OnRecordStart__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__OnRecordStart__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__OnRecordStart__notification = {
- "UI",
- "OnRecordStart",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::UI_OnRecordStart,
- UI__OnRecordStart__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- UI__SendHapticData__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::StructDescription
- UI__SendHapticData__request__parameter2_array = {
- {"hapticRectData", ford_message_descriptions::Struct, true},
- Structs::Common__HapticRect__parameters};
-const ford_message_descriptions::ArrayDescription
- UI__SendHapticData__request__parameter2 = {
- {"hapticRectData", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SendHapticData__request__parameter2_array,
- "(i(dddd))"};
-const ford_message_descriptions::ParameterDescription*
- UI__SendHapticData__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SendHapticData__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&UI__SendHapticData__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- UI__SendHapticData__request = {"UI",
- "SendHapticData",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::UI_SendHapticData,
- UI__SendHapticData__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- UI__SendHapticData__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- UI__SendHapticData__response = {"UI",
- "SendHapticData",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::UI_SendHapticData,
- UI__SendHapticData__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__IsReady__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__IsReady__request = {"Navigation",
- "IsReady",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_IsReady,
- Navigation__IsReady__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__IsReady__response__parameter1 = {
- "available", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__IsReady__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__IsReady__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__IsReady__response = {"Navigation",
- "IsReady",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_IsReady,
- Navigation__IsReady__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__SendLocation__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- Navigation__SendLocation__request__parameter2 = {
- "longitudeDegrees", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription
- Navigation__SendLocation__request__parameter3 = {
- "latitudeDegrees", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription
- Navigation__SendLocation__request__parameter4 = {
- "locationName", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Navigation__SendLocation__request__parameter5 = {
- "locationDescription", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- Navigation__SendLocation__request__parameter6_array = {
- "addressLines", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- Navigation__SendLocation__request__parameter6 = {
- {"addressLines", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter6_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- Navigation__SendLocation__request__parameter7 = {
- "phoneNumber", ford_message_descriptions::String, false};
-const ford_message_descriptions::StructDescription
- Navigation__SendLocation__request__parameter8 = {
- {"locationImage", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription*
- Navigation__SendLocation__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SendLocation__request__parameter8,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__SendLocation__request = {
- "Navigation",
- "SendLocation",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_SendLocation,
- Navigation__SendLocation__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__SendLocation__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__SendLocation__response = {
- "Navigation",
- "SendLocation",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_SendLocation,
- Navigation__SendLocation__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__DialNumber__request__parameter1 = {
- "number", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__DialNumber__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__DialNumber__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__DialNumber__request = {
- "Navigation",
- "DialNumber",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_DialNumber,
- Navigation__DialNumber__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__DialNumber__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__DialNumber__response = {
- "Navigation",
- "DialNumber",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_DialNumber,
- Navigation__DialNumber__response__parameters};
-
-const ford_message_descriptions::StructDescription
- Navigation__ShowConstantTBT__request__parameter1_array = {
- {"navigationTexts", ford_message_descriptions::Struct, true},
- Structs::Common__TextFieldStruct__parameters};
-const ford_message_descriptions::ArrayDescription
- Navigation__ShowConstantTBT__request__parameter1 = {
- {"navigationTexts", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter1_array,
- "(is)"};
-const ford_message_descriptions::StructDescription
- Navigation__ShowConstantTBT__request__parameter2 = {
- {"turnIcon", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::StructDescription
- Navigation__ShowConstantTBT__request__parameter3 = {
- {"nextTurnIcon", ford_message_descriptions::Struct, false},
- Structs::Common__Image__parameters};
-const ford_message_descriptions::ParameterDescription
- Navigation__ShowConstantTBT__request__parameter4 = {
- "distanceToManeuver", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription
- Navigation__ShowConstantTBT__request__parameter5 = {
- "distanceToManeuverScale", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription
- Navigation__ShowConstantTBT__request__parameter6 = {
- "maneuverComplete", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::StructDescription
- Navigation__ShowConstantTBT__request__parameter7_array = {
- {"softButtons", ford_message_descriptions::Struct, true},
- Structs::Common__SoftButton__parameters};
-const ford_message_descriptions::ArrayDescription
- Navigation__ShowConstantTBT__request__parameter7 = {
- {"softButtons", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter7_array,
- "(i(bs)(b(si))(bb)ii)"};
-const ford_message_descriptions::ParameterDescription
- Navigation__ShowConstantTBT__request__parameter8 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__ShowConstantTBT__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__ShowConstantTBT__request__parameter8,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__ShowConstantTBT__request = {
- "Navigation",
- "ShowConstantTBT",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_ShowConstantTBT,
- Navigation__ShowConstantTBT__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__ShowConstantTBT__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__ShowConstantTBT__response = {
- "Navigation",
- "ShowConstantTBT",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_ShowConstantTBT,
- Navigation__ShowConstantTBT__response__parameters};
-
-const ford_message_descriptions::StructDescription
- Navigation__AlertManeuver__request__parameter1_array = {
- {"softButtons", ford_message_descriptions::Struct, true},
- Structs::Common__SoftButton__parameters};
-const ford_message_descriptions::ArrayDescription
- Navigation__AlertManeuver__request__parameter1 = {
- {"softButtons", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__AlertManeuver__request__parameter1_array,
- "(i(bs)(b(si))(bb)ii)"};
-const ford_message_descriptions::ParameterDescription
- Navigation__AlertManeuver__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__AlertManeuver__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__AlertManeuver__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__AlertManeuver__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__AlertManeuver__request = {
- "Navigation",
- "AlertManeuver",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_AlertManeuver,
- Navigation__AlertManeuver__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__AlertManeuver__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__AlertManeuver__response = {
- "Navigation",
- "AlertManeuver",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_AlertManeuver,
- Navigation__AlertManeuver__response__parameters};
-
-const ford_message_descriptions::StructDescription
- Navigation__UpdateTurnList__request__parameter1_array = {
- {"turnList", ford_message_descriptions::Struct, true},
- Structs::Common__Turn__parameters};
-const ford_message_descriptions::ArrayDescription
- Navigation__UpdateTurnList__request__parameter1 = {
- {"turnList", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__UpdateTurnList__request__parameter1_array,
- "((b(is))(b(si)))"};
-const ford_message_descriptions::StructDescription
- Navigation__UpdateTurnList__request__parameter2_array = {
- {"softButtons", ford_message_descriptions::Struct, true},
- Structs::Common__SoftButton__parameters};
-const ford_message_descriptions::ArrayDescription
- Navigation__UpdateTurnList__request__parameter2 = {
- {"softButtons", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__UpdateTurnList__request__parameter2_array,
- "(i(bs)(b(si))(bb)ii)"};
-const ford_message_descriptions::ParameterDescription
- Navigation__UpdateTurnList__request__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__UpdateTurnList__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__UpdateTurnList__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__UpdateTurnList__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__UpdateTurnList__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__UpdateTurnList__request = {
- "Navigation",
- "UpdateTurnList",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_UpdateTurnList,
- Navigation__UpdateTurnList__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__UpdateTurnList__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__UpdateTurnList__response = {
- "Navigation",
- "UpdateTurnList",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_UpdateTurnList,
- Navigation__UpdateTurnList__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__OnTBTClientState__notification__parameter1 = {
- "state", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__OnTBTClientState__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__OnTBTClientState__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__OnTBTClientState__notification = {
- "Navigation",
- "OnTBTClientState",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::Navigation_OnTBTClientState,
- Navigation__OnTBTClientState__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- Navigation__SetVideoConfig__request__parameter1 = {
- {"config", ford_message_descriptions::Struct, true},
- Structs::Common__VideoConfig__parameters};
-const ford_message_descriptions::ParameterDescription
- Navigation__SetVideoConfig__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__SetVideoConfig__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SetVideoConfig__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SetVideoConfig__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__SetVideoConfig__request = {
- "Navigation",
- "SetVideoConfig",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_SetVideoConfig,
- Navigation__SetVideoConfig__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__SetVideoConfig__response__parameter1_array = {
- "rejectedParams", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- Navigation__SetVideoConfig__response__parameter1 = {
- {"rejectedParams", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SetVideoConfig__response__parameter1_array,
- "s"};
-const ford_message_descriptions::ParameterDescription*
- Navigation__SetVideoConfig__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__SetVideoConfig__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__SetVideoConfig__response = {
- "Navigation",
- "SetVideoConfig",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_SetVideoConfig,
- Navigation__SetVideoConfig__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__StartStream__request__parameter1 = {
- "url", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Navigation__StartStream__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__StartStream__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__StartStream__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__StartStream__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__StartStream__request = {
- "Navigation",
- "StartStream",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_StartStream,
- Navigation__StartStream__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__StartStream__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__StartStream__response = {
- "Navigation",
- "StartStream",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_StartStream,
- Navigation__StartStream__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__StopStream__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__StopStream__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__StopStream__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__StopStream__request = {
- "Navigation",
- "StopStream",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_StopStream,
- Navigation__StopStream__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__StopStream__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__StopStream__response = {
- "Navigation",
- "StopStream",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_StopStream,
- Navigation__StopStream__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__StartAudioStream__request__parameter1 = {
- "url", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription
- Navigation__StartAudioStream__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__StartAudioStream__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__StartAudioStream__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__StartAudioStream__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__StartAudioStream__request = {
- "Navigation",
- "StartAudioStream",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_StartAudioStream,
- Navigation__StartAudioStream__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__StartAudioStream__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__StartAudioStream__response = {
- "Navigation",
- "StartAudioStream",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_StartAudioStream,
- Navigation__StartAudioStream__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__StopAudioStream__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__StopAudioStream__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__StopAudioStream__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__StopAudioStream__request = {
- "Navigation",
- "StopAudioStream",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_StopAudioStream,
- Navigation__StopAudioStream__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__StopAudioStream__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__StopAudioStream__response = {
- "Navigation",
- "StopAudioStream",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_StopAudioStream,
- Navigation__StopAudioStream__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__OnAudioDataStreaming__notification__parameter1 = {
- "available", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__OnAudioDataStreaming__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__OnAudioDataStreaming__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__OnAudioDataStreaming__notification = {
- "Navigation",
- "OnAudioDataStreaming",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::Navigation_OnAudioDataStreaming,
- Navigation__OnAudioDataStreaming__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__OnVideoDataStreaming__notification__parameter1 = {
- "available", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__OnVideoDataStreaming__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__OnVideoDataStreaming__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__OnVideoDataStreaming__notification = {
- "Navigation",
- "OnVideoDataStreaming",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::Navigation_OnVideoDataStreaming,
- Navigation__OnVideoDataStreaming__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__GetWayPoints__request__parameter1 = {
- "wayPointType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- Navigation__GetWayPoints__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- Navigation__GetWayPoints__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__GetWayPoints__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__GetWayPoints__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__GetWayPoints__request = {
- "Navigation",
- "GetWayPoints",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_GetWayPoints,
- Navigation__GetWayPoints__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- Navigation__GetWayPoints__response__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::StructDescription
- Navigation__GetWayPoints__response__parameter2_array = {
- {"wayPoints", ford_message_descriptions::Struct, true},
- Structs::Common__LocationDetails__parameters};
-const ford_message_descriptions::ArrayDescription
- Navigation__GetWayPoints__response__parameter2 = {
- {"wayPoints", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__GetWayPoints__response__parameter2_array,
- "((b(dd))(bs)(bas)(bs)(bs)(b(si))(b((bs)(bs)(bs)(bs)(bs)(bs)(bs)(bs)("
- "bs))))"};
-const ford_message_descriptions::ParameterDescription*
- Navigation__GetWayPoints__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__GetWayPoints__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__GetWayPoints__response__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__GetWayPoints__response = {
- "Navigation",
- "GetWayPoints",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_GetWayPoints,
- Navigation__GetWayPoints__response__parameters};
-
-const ford_message_descriptions::StructDescription
- Navigation__OnWayPointChange__notification__parameter1_array = {
- {"wayPoints", ford_message_descriptions::Struct, true},
- Structs::Common__LocationDetails__parameters};
-const ford_message_descriptions::ArrayDescription
- Navigation__OnWayPointChange__notification__parameter1 = {
- {"wayPoints", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__OnWayPointChange__notification__parameter1_array,
- "((b(dd))(bs)(bas)(bs)(bs)(b(si))(b((bs)(bs)(bs)(bs)(bs)(bs)(bs)(bs)("
- "bs))))"};
-const ford_message_descriptions::ParameterDescription*
- Navigation__OnWayPointChange__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&Navigation__OnWayPointChange__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__OnWayPointChange__notification = {
- "Navigation",
- "OnWayPointChange",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::Navigation_OnWayPointChange,
- Navigation__OnWayPointChange__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__SubscribeWayPoints__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__SubscribeWayPoints__request = {
- "Navigation",
- "SubscribeWayPoints",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_SubscribeWayPoints,
- Navigation__SubscribeWayPoints__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__SubscribeWayPoints__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__SubscribeWayPoints__response = {
- "Navigation",
- "SubscribeWayPoints",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_SubscribeWayPoints,
- Navigation__SubscribeWayPoints__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__UnsubscribeWayPoints__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__UnsubscribeWayPoints__request = {
- "Navigation",
- "UnsubscribeWayPoints",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::Navigation_UnsubscribeWayPoints,
- Navigation__UnsubscribeWayPoints__request__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- Navigation__UnsubscribeWayPoints__response__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- Navigation__UnsubscribeWayPoints__response = {
- "Navigation",
- "UnsubscribeWayPoints",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::Navigation_UnsubscribeWayPoints,
- Navigation__UnsubscribeWayPoints__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__IsReady__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__IsReady__request = {"VehicleInfo",
- "IsReady",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_IsReady,
- VehicleInfo__IsReady__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__IsReady__response__parameter1 = {
- "available", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__IsReady__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__IsReady__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__IsReady__response = {
- "VehicleInfo",
- "IsReady",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_IsReady,
- VehicleInfo__IsReady__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetVehicleType__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetVehicleType__request = {
- "VehicleInfo",
- "GetVehicleType",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetVehicleType,
- VehicleInfo__GetVehicleType__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleType__response__parameter1 = {
- {"vehicleType", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleType__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetVehicleType__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleType__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetVehicleType__response = {
- "VehicleInfo",
- "GetVehicleType",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetVehicleType,
- VehicleInfo__GetVehicleType__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__ReadDID__request__parameter1 = {
- "ecuName", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__ReadDID__request__parameter2_array = {
- "didLocation", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ArrayDescription
- VehicleInfo__ReadDID__request__parameter2 = {
- {"didLocation", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__ReadDID__request__parameter2_array,
- "i"};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__ReadDID__request__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__ReadDID__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__ReadDID__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__ReadDID__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__ReadDID__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__ReadDID__request = {"VehicleInfo",
- "ReadDID",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_ReadDID,
- VehicleInfo__ReadDID__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__ReadDID__response__parameter1_array = {
- {"didResult", ford_message_descriptions::Struct, true},
- Structs::Common__DIDResult__parameters};
-const ford_message_descriptions::ArrayDescription
- VehicleInfo__ReadDID__response__parameter1 = {
- {"didResult", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__ReadDID__response__parameter1_array,
- "(ii(bs))"};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__ReadDID__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__ReadDID__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__ReadDID__response = {
- "VehicleInfo",
- "ReadDID",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_ReadDID,
- VehicleInfo__ReadDID__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetDTCs__request__parameter1 = {
- "ecuName", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetDTCs__request__parameter2 = {
- "dtcMask", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetDTCs__request__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetDTCs__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDTCs__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDTCs__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDTCs__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetDTCs__request = {"VehicleInfo",
- "GetDTCs",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetDTCs,
- VehicleInfo__GetDTCs__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetDTCs__response__parameter1 = {
- "ecuHeader", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetDTCs__response__parameter2_array = {
- "dtc", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- VehicleInfo__GetDTCs__response__parameter2 = {
- {"dtc", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDTCs__response__parameter2_array,
- "s"};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetDTCs__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDTCs__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDTCs__response__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetDTCs__response = {
- "VehicleInfo",
- "GetDTCs",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetDTCs,
- VehicleInfo__GetDTCs__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__DiagnosticMessage__request__parameter1 = {
- "targetID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__DiagnosticMessage__request__parameter2 = {
- "messageLength", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__DiagnosticMessage__request__parameter3_array = {
- "messageData", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ArrayDescription
- VehicleInfo__DiagnosticMessage__request__parameter3 = {
- {"messageData", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__DiagnosticMessage__request__parameter3_array,
- "i"};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__DiagnosticMessage__request__parameter4 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__DiagnosticMessage__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__DiagnosticMessage__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__DiagnosticMessage__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__DiagnosticMessage__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__DiagnosticMessage__request__parameter4,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__DiagnosticMessage__request = {
- "VehicleInfo",
- "DiagnosticMessage",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_DiagnosticMessage,
- VehicleInfo__DiagnosticMessage__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__DiagnosticMessage__response__parameter1_array = {
- "messageDataResult", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ArrayDescription
- VehicleInfo__DiagnosticMessage__response__parameter1 = {
- {"messageDataResult", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__DiagnosticMessage__response__parameter1_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__DiagnosticMessage__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__DiagnosticMessage__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__DiagnosticMessage__response = {
- "VehicleInfo",
- "DiagnosticMessage",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_DiagnosticMessage,
- VehicleInfo__DiagnosticMessage__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter1 = {
- "gps", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter2 = {
- "speed", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter3 = {
- "rpm", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter4 = {
- "fuelLevel", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter5 = {
- "fuelLevel_State", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter6 = {
- "instantFuelConsumption", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter7 = {
- "externalTemperature", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter8 = {
- "prndl", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter9 = {
- "tirePressure", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter10 = {
- "odometer", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter11 = {
- "beltStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter12 = {
- "bodyInformation", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter13 = {
- "deviceStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter14 = {
- "driverBraking", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter15 = {
- "wiperStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter16 = {
- "headLampStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter17 = {
- "engineTorque", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter18 = {
- "accPedalPosition", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter19 = {
- "steeringWheelAngle", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter20 = {
- "eCallInfo", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter21 = {
- "airbagStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter22 = {
- "emergencyEvent", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter23 = {
- "clusterModeStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVehicleData__request__parameter24 = {
- "myKey", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription* VehicleInfo__SubscribeVehicleData__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter15,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter16,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter17,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter18,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter19,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter20,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter21,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter22,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter23,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__request__parameter24,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeVehicleData__request = {
- "VehicleInfo",
- "SubscribeVehicleData",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeVehicleData,
- VehicleInfo__SubscribeVehicleData__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter1 = {
- {"gps", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter2 = {
- {"speed", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter3 = {
- {"rpm", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter4 = {
- {"fuelLevel", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter5 = {
- {"fuelLevel_State", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter6 = {
- {"instantFuelConsumption", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter7 = {
- {"externalTemperature", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter8 = {
- {"prndl", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter9 = {
- {"tirePressure", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter10 = {
- {"odometer", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter11 = {
- {"beltStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter12 = {
- {"bodyInformation", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter13 = {
- {"deviceStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter14 = {
- {"driverBraking", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter15 = {
- {"wiperStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter16 = {
- {"headLampStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter17 = {
- {"engineTorque", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter18 = {
- {"accPedalPosition", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter19 = {
- {"steeringWheelAngle", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter20 = {
- {"eCallInfo", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter21 = {
- {"airbagStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter22 = {
- {"emergencyEvent", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter23 = {
- {"clusterModes", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeVehicleData__response__parameter24 = {
- {"myKey", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription* VehicleInfo__SubscribeVehicleData__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter15,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter16,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter17,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter18,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter19,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter20,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter21,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter22,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter23,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVehicleData__response__parameter24,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeVehicleData__response = {
- "VehicleInfo",
- "SubscribeVehicleData",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeVehicleData,
- VehicleInfo__SubscribeVehicleData__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter2 = {
- "gps", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter3 = {
- "speed", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter4 = {
- "rpm", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter5 = {
- "fuelLevel", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter6 = {
- "fuelLevel_State", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter7 = {
- "instantFuelConsumption", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter8 = {
- "externalTemperature", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter9 = {
- "prndl", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter10 = {
- "tirePressure", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter11 = {
- "odometer", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter12 = {
- "beltStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter13 = {
- "bodyInformation", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter14 = {
- "deviceStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter15 = {
- "driverBraking", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter16 = {
- "wiperStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter17 = {
- "headLampStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter18 = {
- "engineTorque", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter19 = {
- "accPedalPosition", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter20 = {
- "steeringWheelAngle", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter21 = {
- "eCallInfo", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter22 = {
- "airbagStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter23 = {
- "emergencyEvent", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter24 = {
- "clusterModeStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVehicleData__request__parameter25 = {
- "myKey", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription* VehicleInfo__UnsubscribeVehicleData__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter15,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter16,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter17,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter18,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter19,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter20,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter21,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter22,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter23,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter24,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__request__parameter25,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeVehicleData__request = {
- "VehicleInfo",
- "UnsubscribeVehicleData",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeVehicleData,
- VehicleInfo__UnsubscribeVehicleData__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter1 = {
- {"gps", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter2 = {
- {"speed", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter3 = {
- {"rpm", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter4 = {
- {"fuelLevel", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter5 = {
- {"fuelLevel_State", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter6 = {
- {"instantFuelConsumption", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter7 = {
- {"externalTemperature", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter8 = {
- {"prndl", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter9 = {
- {"tirePressure", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter10 = {
- {"odometer", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter11 = {
- {"beltStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter12 = {
- {"bodyInformation", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter13 = {
- {"deviceStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter14 = {
- {"driverBraking", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter15 = {
- {"wiperStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter16 = {
- {"headLampStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter17 = {
- {"engineTorque", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter18 = {
- {"accPedalPosition", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter19 = {
- {"steeringWheelAngle", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter20 = {
- {"eCallInfo", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter21 = {
- {"airbagStatus", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter22 = {
- {"emergencyEvent", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter23 = {
- {"clusterModes", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeVehicleData__response__parameter24 = {
- {"myKey", ford_message_descriptions::Struct, false},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription* VehicleInfo__UnsubscribeVehicleData__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter15,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter16,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter17,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter18,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter19,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter20,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter21,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter22,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter23,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVehicleData__response__parameter24,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeVehicleData__response = {
- "VehicleInfo",
- "UnsubscribeVehicleData",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeVehicleData,
- VehicleInfo__UnsubscribeVehicleData__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter1 = {
- "gps", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter2 = {
- "speed", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter3 = {
- "rpm", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter4 = {
- "fuelLevel", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter5 = {
- "fuelLevel_State", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter6 = {
- "instantFuelConsumption", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter7 = {
- "externalTemperature", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter8 = {
- "vin", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter9 = {
- "prndl", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter10 = {
- "tirePressure", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter11 = {
- "odometer", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter12 = {
- "beltStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter13 = {
- "bodyInformation", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter14 = {
- "deviceStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter15 = {
- "driverBraking", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter16 = {
- "wiperStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter17 = {
- "headLampStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter18 = {
- "engineTorque", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter19 = {
- "accPedalPosition", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter20 = {
- "steeringWheelAngle", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter21 = {
- "eCallInfo", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter22 = {
- "airbagStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter23 = {
- "emergencyEvent", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter24 = {
- "clusterModeStatus", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__request__parameter25 = {
- "myKey", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription* VehicleInfo__GetVehicleData__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter15,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter16,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter17,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter18,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter19,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter20,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter21,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter22,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter23,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter24,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__request__parameter25,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetVehicleData__request = {
- "VehicleInfo",
- "GetVehicleData",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetVehicleData,
- VehicleInfo__GetVehicleData__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter1 = {
- {"gps", ford_message_descriptions::Struct, false},
- Structs::Common__GPSData__parameters};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter2 = {
- "speed", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter3 = {
- "rpm", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter4 = {
- "fuelLevel", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter5 = {
- "fuelLevel_State", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter6 = {
- "instantFuelConsumption", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter7 = {
- "externalTemperature", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter8 = {
- "vin", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter9 = {
- "prndl", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter10 = {
- {"tirePressure", ford_message_descriptions::Struct, false},
- Structs::Common__TireStatus__parameters};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter11 = {
- "odometer", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter12 = {
- {"beltStatus", ford_message_descriptions::Struct, false},
- Structs::Common__BeltStatus__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter13 = {
- {"bodyInformation", ford_message_descriptions::Struct, false},
- Structs::Common__BodyInformation__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter14 = {
- {"deviceStatus", ford_message_descriptions::Struct, false},
- Structs::Common__DeviceStatus__parameters};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter15 = {
- "driverBraking", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter16 = {
- "wiperStatus", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter17 = {
- {"headLampStatus", ford_message_descriptions::Struct, false},
- Structs::Common__HeadLampStatus__parameters};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter18 = {
- "engineTorque", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter19 = {
- "accPedalPosition", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVehicleData__response__parameter20 = {
- "steeringWheelAngle", ford_message_descriptions::Float, false};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter21 = {
- {"eCallInfo", ford_message_descriptions::Struct, false},
- Structs::Common__ECallInfo__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter22 = {
- {"airbagStatus", ford_message_descriptions::Struct, false},
- Structs::Common__AirbagStatus__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter23 = {
- {"emergencyEvent", ford_message_descriptions::Struct, false},
- Structs::Common__EmergencyEvent__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter24 = {
- {"clusterModeStatus", ford_message_descriptions::Struct, false},
- Structs::Common__ClusterModeStatus__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetVehicleData__response__parameter25 = {
- {"myKey", ford_message_descriptions::Struct, false},
- Structs::Common__MyKey__parameters};
-const ford_message_descriptions::ParameterDescription* VehicleInfo__GetVehicleData__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter15,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter16,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter17,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter18,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter19,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter20,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter21,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter22,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter23,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter24,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVehicleData__response__parameter25,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetVehicleData__response = {
- "VehicleInfo",
- "GetVehicleData",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetVehicleData,
- VehicleInfo__GetVehicleData__response__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter1 = {
- {"gps", ford_message_descriptions::Struct, false},
- Structs::Common__GPSData__parameters};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter2 = {
- "speed", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter3 = {
- "rpm", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter4 = {
- "fuelLevel", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter5 = {
- "fuelLevel_State", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter6 = {
- "instantFuelConsumption", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter7 = {
- "externalTemperature", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter8 = {
- "vin", ford_message_descriptions::String, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter9 = {
- "prndl", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter10 = {
- {"tirePressure", ford_message_descriptions::Struct, false},
- Structs::Common__TireStatus__parameters};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter11 = {
- "odometer", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter12 = {
- {"beltStatus", ford_message_descriptions::Struct, false},
- Structs::Common__BeltStatus__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter13 = {
- {"bodyInformation", ford_message_descriptions::Struct, false},
- Structs::Common__BodyInformation__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter14 = {
- {"deviceStatus", ford_message_descriptions::Struct, false},
- Structs::Common__DeviceStatus__parameters};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter15 = {
- "driverBraking", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter16 = {
- "wiperStatus", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter17 = {
- {"headLampStatus", ford_message_descriptions::Struct, false},
- Structs::Common__HeadLampStatus__parameters};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter18 = {
- "engineTorque", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter19 = {
- "accPedalPosition", ford_message_descriptions::Float, false};
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVehicleData__notification__parameter20 = {
- "steeringWheelAngle", ford_message_descriptions::Float, false};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter21 = {
- {"eCallInfo", ford_message_descriptions::Struct, false},
- Structs::Common__ECallInfo__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter22 = {
- {"airbagStatus", ford_message_descriptions::Struct, false},
- Structs::Common__AirbagStatus__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter23 = {
- {"emergencyEvent", ford_message_descriptions::Struct, false},
- Structs::Common__EmergencyEvent__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter24 = {
- {"clusterModeStatus", ford_message_descriptions::Struct, false},
- Structs::Common__ClusterModeStatus__parameters};
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnVehicleData__notification__parameter25 = {
- {"myKey", ford_message_descriptions::Struct, false},
- Structs::Common__MyKey__parameters};
-const ford_message_descriptions::ParameterDescription* VehicleInfo__OnVehicleData__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter8,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter9,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter10,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter11,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter12,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter13,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter14,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter15,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter16,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter17,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter18,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter19,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter20,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter21,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter22,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter23,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter24,
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVehicleData__notification__parameter25,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnVehicleData__notification = {
- "VehicleInfo",
- "OnVehicleData",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnVehicleData,
- VehicleInfo__OnVehicleData__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetGpsData__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetGpsData__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetGpsData__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetGpsData__request = {
- "VehicleInfo",
- "GetGpsData",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetGpsData,
- VehicleInfo__GetGpsData__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetGpsData__response__parameter1 = {
- {"gps", ford_message_descriptions::Struct, true},
- Structs::Common__GPSData__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetGpsData__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetGpsData__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetGpsData__response = {
- "VehicleInfo",
- "GetGpsData",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetGpsData,
- VehicleInfo__GetGpsData__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetSpeed__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetSpeed__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetSpeed__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetSpeed__request = {
- "VehicleInfo",
- "GetSpeed",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetSpeed,
- VehicleInfo__GetSpeed__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetSpeed__response__parameter1 = {
- "speed", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetSpeed__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetSpeed__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetSpeed__response = {
- "VehicleInfo",
- "GetSpeed",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetSpeed,
- VehicleInfo__GetSpeed__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetRpm__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetRpm__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetRpm__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetRpm__request = {"VehicleInfo",
- "GetRpm",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetRpm,
- VehicleInfo__GetRpm__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetRpm__response__parameter1 = {
- "rpm", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetRpm__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetRpm__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetRpm__response = {"VehicleInfo",
- "GetRpm",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetRpm,
- VehicleInfo__GetRpm__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetFuelLevel__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetFuelLevel__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetFuelLevel__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetFuelLevel__request = {
- "VehicleInfo",
- "GetFuelLevel",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevel,
- VehicleInfo__GetFuelLevel__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetFuelLevel__response__parameter1 = {
- "fuelLevel", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetFuelLevel__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetFuelLevel__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetFuelLevel__response = {
- "VehicleInfo",
- "GetFuelLevel",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevel,
- VehicleInfo__GetFuelLevel__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetFuelLevelState__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetFuelLevelState__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetFuelLevelState__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetFuelLevelState__request = {
- "VehicleInfo",
- "GetFuelLevelState",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevelState,
- VehicleInfo__GetFuelLevelState__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetFuelLevelState__response__parameter1 = {
- "fuelLevel_State", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetFuelLevelState__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetFuelLevelState__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetFuelLevelState__response = {
- "VehicleInfo",
- "GetFuelLevelState",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetFuelLevelState,
- VehicleInfo__GetFuelLevelState__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetInstantFuelConsumption__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetInstantFuelConsumption__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetInstantFuelConsumption__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetInstantFuelConsumption__request = {
- "VehicleInfo",
- "GetInstantFuelConsumption",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetInstantFuelConsumption,
- VehicleInfo__GetInstantFuelConsumption__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetInstantFuelConsumption__response__parameter1 = {
- "instantFuelConsumption", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetInstantFuelConsumption__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetInstantFuelConsumption__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetInstantFuelConsumption__response = {
- "VehicleInfo",
- "GetInstantFuelConsumption",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetInstantFuelConsumption,
- VehicleInfo__GetInstantFuelConsumption__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetExternalTemperature__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetExternalTemperature__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetExternalTemperature__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetExternalTemperature__request = {
- "VehicleInfo",
- "GetExternalTemperature",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetExternalTemperature,
- VehicleInfo__GetExternalTemperature__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetExternalTemperature__response__parameter1 = {
- "externalTemperature", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetExternalTemperature__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetExternalTemperature__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetExternalTemperature__response = {
- "VehicleInfo",
- "GetExternalTemperature",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetExternalTemperature,
- VehicleInfo__GetExternalTemperature__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVin__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetVin__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVin__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetVin__request = {"VehicleInfo",
- "GetVin",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetVin,
- VehicleInfo__GetVin__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetVin__response__parameter1 = {
- "vin", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetVin__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetVin__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetVin__response = {"VehicleInfo",
- "GetVin",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetVin,
- VehicleInfo__GetVin__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetPrndl__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetPrndl__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetPrndl__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetPrndl__request = {
- "VehicleInfo",
- "GetPrndl",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetPrndl,
- VehicleInfo__GetPrndl__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetPrndl__response__parameter1 = {
- "prndl", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetPrndl__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetPrndl__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetPrndl__response = {
- "VehicleInfo",
- "GetPrndl",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetPrndl,
- VehicleInfo__GetPrndl__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetTirePressure__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetTirePressure__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetTirePressure__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetTirePressure__request = {
- "VehicleInfo",
- "GetTirePressure",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetTirePressure,
- VehicleInfo__GetTirePressure__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetTirePressure__response__parameter1 = {
- {"tirePressure", ford_message_descriptions::Struct, true},
- Structs::Common__TireStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetTirePressure__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetTirePressure__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetTirePressure__response = {
- "VehicleInfo",
- "GetTirePressure",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetTirePressure,
- VehicleInfo__GetTirePressure__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetOdometer__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetOdometer__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetOdometer__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetOdometer__request = {
- "VehicleInfo",
- "GetOdometer",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetOdometer,
- VehicleInfo__GetOdometer__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetOdometer__response__parameter1 = {
- "odometer", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetOdometer__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetOdometer__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetOdometer__response = {
- "VehicleInfo",
- "GetOdometer",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetOdometer,
- VehicleInfo__GetOdometer__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetBeltStatus__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetBeltStatus__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetBeltStatus__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetBeltStatus__request = {
- "VehicleInfo",
- "GetBeltStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetBeltStatus,
- VehicleInfo__GetBeltStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetBeltStatus__response__parameter1 = {
- {"beltStatus", ford_message_descriptions::Struct, true},
- Structs::Common__BeltStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetBeltStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetBeltStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetBeltStatus__response = {
- "VehicleInfo",
- "GetBeltStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetBeltStatus,
- VehicleInfo__GetBeltStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetBodyInformation__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetBodyInformation__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetBodyInformation__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetBodyInformation__request = {
- "VehicleInfo",
- "GetBodyInformation",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetBodyInformation,
- VehicleInfo__GetBodyInformation__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetBodyInformation__response__parameter1 = {
- {"bodyInformation", ford_message_descriptions::Struct, true},
- Structs::Common__BodyInformation__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetBodyInformation__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetBodyInformation__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetBodyInformation__response = {
- "VehicleInfo",
- "GetBodyInformation",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetBodyInformation,
- VehicleInfo__GetBodyInformation__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetDeviceStatus__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetDeviceStatus__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDeviceStatus__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetDeviceStatus__request = {
- "VehicleInfo",
- "GetDeviceStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetDeviceStatus,
- VehicleInfo__GetDeviceStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetDeviceStatus__response__parameter1 = {
- {"deviceStatus", ford_message_descriptions::Struct, true},
- Structs::Common__DeviceStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetDeviceStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDeviceStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetDeviceStatus__response = {
- "VehicleInfo",
- "GetDeviceStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetDeviceStatus,
- VehicleInfo__GetDeviceStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetDriverBraking__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetDriverBraking__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDriverBraking__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetDriverBraking__request = {
- "VehicleInfo",
- "GetDriverBraking",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetDriverBraking,
- VehicleInfo__GetDriverBraking__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetDriverBraking__response__parameter1 = {
- "driverBraking", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetDriverBraking__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetDriverBraking__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetDriverBraking__response = {
- "VehicleInfo",
- "GetDriverBraking",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetDriverBraking,
- VehicleInfo__GetDriverBraking__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetWiperStatus__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetWiperStatus__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetWiperStatus__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetWiperStatus__request = {
- "VehicleInfo",
- "GetWiperStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetWiperStatus,
- VehicleInfo__GetWiperStatus__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetWiperStatus__response__parameter1 = {
- "wiperStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetWiperStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetWiperStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetWiperStatus__response = {
- "VehicleInfo",
- "GetWiperStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetWiperStatus,
- VehicleInfo__GetWiperStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetHeadLampStatus__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetHeadLampStatus__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetHeadLampStatus__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetHeadLampStatus__request = {
- "VehicleInfo",
- "GetHeadLampStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetHeadLampStatus,
- VehicleInfo__GetHeadLampStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetHeadLampStatus__response__parameter1 = {
- {"headLampStatus", ford_message_descriptions::Struct, true},
- Structs::Common__HeadLampStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetHeadLampStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetHeadLampStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetHeadLampStatus__response = {
- "VehicleInfo",
- "GetHeadLampStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetHeadLampStatus,
- VehicleInfo__GetHeadLampStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetEngineTorque__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetEngineTorque__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetEngineTorque__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetEngineTorque__request = {
- "VehicleInfo",
- "GetEngineTorque",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetEngineTorque,
- VehicleInfo__GetEngineTorque__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetEngineTorque__response__parameter1 = {
- "engineTorque", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetEngineTorque__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetEngineTorque__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetEngineTorque__response = {
- "VehicleInfo",
- "GetEngineTorque",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetEngineTorque,
- VehicleInfo__GetEngineTorque__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetAccPedalPosition__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetAccPedalPosition__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetAccPedalPosition__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetAccPedalPosition__request = {
- "VehicleInfo",
- "GetAccPedalPosition",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetAccPedalPosition,
- VehicleInfo__GetAccPedalPosition__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetAccPedalPosition__response__parameter1 = {
- "accPedalPosition", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetAccPedalPosition__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetAccPedalPosition__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetAccPedalPosition__response = {
- "VehicleInfo",
- "GetAccPedalPosition",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetAccPedalPosition,
- VehicleInfo__GetAccPedalPosition__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetSteeringWheelAngle__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetSteeringWheelAngle__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetSteeringWheelAngle__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetSteeringWheelAngle__request = {
- "VehicleInfo",
- "GetSteeringWheelAngle",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetSteeringWheelAngle,
- VehicleInfo__GetSteeringWheelAngle__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetSteeringWheelAngle__response__parameter1 = {
- "steeringWheelAngle", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetSteeringWheelAngle__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetSteeringWheelAngle__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetSteeringWheelAngle__response = {
- "VehicleInfo",
- "GetSteeringWheelAngle",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetSteeringWheelAngle,
- VehicleInfo__GetSteeringWheelAngle__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetECallInfo__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetECallInfo__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetECallInfo__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetECallInfo__request = {
- "VehicleInfo",
- "GetECallInfo",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetECallInfo,
- VehicleInfo__GetECallInfo__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetECallInfo__response__parameter1 = {
- {"eCallInfo", ford_message_descriptions::Struct, true},
- Structs::Common__ECallInfo__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetECallInfo__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetECallInfo__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetECallInfo__response = {
- "VehicleInfo",
- "GetECallInfo",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetECallInfo,
- VehicleInfo__GetECallInfo__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetAirbagStatus__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetAirbagStatus__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetAirbagStatus__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetAirbagStatus__request = {
- "VehicleInfo",
- "GetAirbagStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetAirbagStatus,
- VehicleInfo__GetAirbagStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetAirbagStatus__response__parameter1 = {
- {"airbagStatus", ford_message_descriptions::Struct, true},
- Structs::Common__AirbagStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetAirbagStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetAirbagStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetAirbagStatus__response = {
- "VehicleInfo",
- "GetAirbagStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetAirbagStatus,
- VehicleInfo__GetAirbagStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetEmergencyEvent__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetEmergencyEvent__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetEmergencyEvent__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetEmergencyEvent__request = {
- "VehicleInfo",
- "GetEmergencyEvent",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetEmergencyEvent,
- VehicleInfo__GetEmergencyEvent__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetEmergencyEvent__response__parameter1 = {
- {"emergencyEvent", ford_message_descriptions::Struct, true},
- Structs::Common__EmergencyEvent__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetEmergencyEvent__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetEmergencyEvent__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetEmergencyEvent__response = {
- "VehicleInfo",
- "GetEmergencyEvent",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetEmergencyEvent,
- VehicleInfo__GetEmergencyEvent__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetClusterModeStatus__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetClusterModeStatus__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetClusterModeStatus__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetClusterModeStatus__request = {
- "VehicleInfo",
- "GetClusterModeStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetClusterModeStatus,
- VehicleInfo__GetClusterModeStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetClusterModeStatus__response__parameter1 = {
- {"clusterModeStatus", ford_message_descriptions::Struct, true},
- Structs::Common__ClusterModeStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetClusterModeStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetClusterModeStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetClusterModeStatus__response = {
- "VehicleInfo",
- "GetClusterModeStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetClusterModeStatus,
- VehicleInfo__GetClusterModeStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__GetMyKey__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetMyKey__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetMyKey__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetMyKey__request = {
- "VehicleInfo",
- "GetMyKey",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_GetMyKey,
- VehicleInfo__GetMyKey__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__GetMyKey__response__parameter1 = {
- {"myKey", ford_message_descriptions::Struct, true},
- Structs::Common__MyKey__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__GetMyKey__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__GetMyKey__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__GetMyKey__response = {
- "VehicleInfo",
- "GetMyKey",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_GetMyKey,
- VehicleInfo__GetMyKey__response__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnGpsData__notification__parameter1 = {
- {"gps", ford_message_descriptions::Struct, true},
- Structs::Common__GPSData__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnGpsData__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnGpsData__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnGpsData__notification = {
- "VehicleInfo",
- "OnGpsData",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnGpsData,
- VehicleInfo__OnGpsData__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnSpeed__notification__parameter1 = {
- "speed", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnSpeed__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnSpeed__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnSpeed__notification = {
- "VehicleInfo",
- "OnSpeed",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnSpeed,
- VehicleInfo__OnSpeed__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnRpm__notification__parameter1 = {
- "rpm", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnRpm__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnRpm__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnRpm__notification = {
- "VehicleInfo",
- "OnRpm",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnRpm,
- VehicleInfo__OnRpm__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnFuelLevel__notification__parameter1 = {
- "fuelLevel", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnFuelLevel__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnFuelLevel__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnFuelLevel__notification = {
- "VehicleInfo",
- "OnFuelLevel",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnFuelLevel,
- VehicleInfo__OnFuelLevel__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnFuelLevelState__notification__parameter1 = {
- "fuelLevel_State", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnFuelLevelState__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnFuelLevelState__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnFuelLevelState__notification = {
- "VehicleInfo",
- "OnFuelLevelState",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnFuelLevelState,
- VehicleInfo__OnFuelLevelState__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnInstantFuelConsumption__notification__parameter1 = {
- "instantFuelConsumption", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnInstantFuelConsumption__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnInstantFuelConsumption__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnInstantFuelConsumption__notification = {
- "VehicleInfo",
- "OnInstantFuelConsumption",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnInstantFuelConsumption,
- VehicleInfo__OnInstantFuelConsumption__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnExternalTemperature__notification__parameter1 = {
- "externalTemperature", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnExternalTemperature__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnExternalTemperature__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnExternalTemperature__notification = {
- "VehicleInfo",
- "OnExternalTemperature",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnExternalTemperature,
- VehicleInfo__OnExternalTemperature__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnVin__notification__parameter1 = {
- "vin", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnVin__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnVin__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnVin__notification = {
- "VehicleInfo",
- "OnVin",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnVin,
- VehicleInfo__OnVin__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnPrndl__notification__parameter1 = {
- "prndl", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnPrndl__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnPrndl__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnPrndl__notification = {
- "VehicleInfo",
- "OnPrndl",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnPrndl,
- VehicleInfo__OnPrndl__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnTirePressure__notification__parameter1 = {
- {"tirePressure", ford_message_descriptions::Struct, true},
- Structs::Common__TireStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnTirePressure__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnTirePressure__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnTirePressure__notification = {
- "VehicleInfo",
- "OnTirePressure",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnTirePressure,
- VehicleInfo__OnTirePressure__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnOdometer__notification__parameter1 = {
- "odometer", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnOdometer__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnOdometer__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnOdometer__notification = {
- "VehicleInfo",
- "OnOdometer",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnOdometer,
- VehicleInfo__OnOdometer__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnBeltStatus__notification__parameter1 = {
- {"beltStatus", ford_message_descriptions::Struct, true},
- Structs::Common__BeltStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnBeltStatus__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnBeltStatus__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnBeltStatus__notification = {
- "VehicleInfo",
- "OnBeltStatus",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnBeltStatus,
- VehicleInfo__OnBeltStatus__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnBodyInformation__notification__parameter1 = {
- {"bodyInformation", ford_message_descriptions::Struct, true},
- Structs::Common__BodyInformation__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnBodyInformation__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnBodyInformation__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnBodyInformation__notification = {
- "VehicleInfo",
- "OnBodyInformation",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnBodyInformation,
- VehicleInfo__OnBodyInformation__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnDeviceStatus__notification__parameter1 = {
- {"deviceStatus", ford_message_descriptions::Struct, true},
- Structs::Common__DeviceStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnDeviceStatus__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnDeviceStatus__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnDeviceStatus__notification = {
- "VehicleInfo",
- "OnDeviceStatus",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnDeviceStatus,
- VehicleInfo__OnDeviceStatus__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnDriverBraking__notification__parameter1 = {
- "driverBraking", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnDriverBraking__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnDriverBraking__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnDriverBraking__notification = {
- "VehicleInfo",
- "OnDriverBraking",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnDriverBraking,
- VehicleInfo__OnDriverBraking__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnWiperStatus__notification__parameter1 = {
- "wiperStatus", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnWiperStatus__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnWiperStatus__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnWiperStatus__notification = {
- "VehicleInfo",
- "OnWiperStatus",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnWiperStatus,
- VehicleInfo__OnWiperStatus__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnHeadLampStatus__notification__parameter1 = {
- {"headLampStatus", ford_message_descriptions::Struct, true},
- Structs::Common__HeadLampStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnHeadLampStatus__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnHeadLampStatus__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnHeadLampStatus__notification = {
- "VehicleInfo",
- "OnHeadLampStatus",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnHeadLampStatus,
- VehicleInfo__OnHeadLampStatus__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnEngineTorque__notification__parameter1 = {
- "engineTorque", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnEngineTorque__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnEngineTorque__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnEngineTorque__notification = {
- "VehicleInfo",
- "OnEngineTorque",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnEngineTorque,
- VehicleInfo__OnEngineTorque__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnAccPedalPosition__notification__parameter1 = {
- "accPedalPosition", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnAccPedalPosition__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnAccPedalPosition__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnAccPedalPosition__notification = {
- "VehicleInfo",
- "OnAccPedalPosition",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnAccPedalPosition,
- VehicleInfo__OnAccPedalPosition__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__OnSteeringWheelAngle__notification__parameter1 = {
- "steeringWheelAngle", ford_message_descriptions::Float, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnSteeringWheelAngle__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnSteeringWheelAngle__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnSteeringWheelAngle__notification = {
- "VehicleInfo",
- "OnSteeringWheelAngle",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnSteeringWheelAngle,
- VehicleInfo__OnSteeringWheelAngle__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnECallInfo__notification__parameter1 = {
- {"eCallInfo", ford_message_descriptions::Struct, true},
- Structs::Common__ECallInfo__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnECallInfo__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnECallInfo__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnECallInfo__notification = {
- "VehicleInfo",
- "OnECallInfo",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnECallInfo,
- VehicleInfo__OnECallInfo__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnAirbagStatus__notification__parameter1 = {
- {"airbagStatus", ford_message_descriptions::Struct, true},
- Structs::Common__AirbagStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnAirbagStatus__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnAirbagStatus__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnAirbagStatus__notification = {
- "VehicleInfo",
- "OnAirbagStatus",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnAirbagStatus,
- VehicleInfo__OnAirbagStatus__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnEmergencyEvent__notification__parameter1 = {
- {"emergencyEvent", ford_message_descriptions::Struct, true},
- Structs::Common__EmergencyEvent__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnEmergencyEvent__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnEmergencyEvent__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnEmergencyEvent__notification = {
- "VehicleInfo",
- "OnEmergencyEvent",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnEmergencyEvent,
- VehicleInfo__OnEmergencyEvent__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnClusterModeStatus__notification__parameter1 = {
- {"clusterModeStatus", ford_message_descriptions::Struct, true},
- Structs::Common__ClusterModeStatus__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnClusterModeStatus__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnClusterModeStatus__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnClusterModeStatus__notification = {
- "VehicleInfo",
- "OnClusterModeStatus",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnClusterModeStatus,
- VehicleInfo__OnClusterModeStatus__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__OnMyKey__notification__parameter1 = {
- {"myKey", ford_message_descriptions::Struct, true},
- Structs::Common__MyKey__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__OnMyKey__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__OnMyKey__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__OnMyKey__notification = {
- "VehicleInfo",
- "OnMyKey",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::VehicleInfo_OnMyKey,
- VehicleInfo__OnMyKey__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeGps__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeGps__request = {
- "VehicleInfo",
- "SubscribeGps",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeGps,
- VehicleInfo__SubscribeGps__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeGps__response__parameter1 = {
- {"gps", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeGps__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeGps__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeGps__response = {
- "VehicleInfo",
- "SubscribeGps",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeGps,
- VehicleInfo__SubscribeGps__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeGps__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeGps__request = {
- "VehicleInfo",
- "UnsubscribeGps",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeGps,
- VehicleInfo__UnsubscribeGps__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeGps__response__parameter1 = {
- {"gps", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeGps__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeGps__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeGps__response = {
- "VehicleInfo",
- "UnsubscribeGps",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeGps,
- VehicleInfo__UnsubscribeGps__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeSpeed__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeSpeed__request = {
- "VehicleInfo",
- "SubscribeSpeed",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeSpeed,
- VehicleInfo__SubscribeSpeed__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeSpeed__response__parameter1 = {
- {"speed", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeSpeed__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeSpeed__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeSpeed__response = {
- "VehicleInfo",
- "SubscribeSpeed",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeSpeed,
- VehicleInfo__SubscribeSpeed__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeSpeed__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeSpeed__request = {
- "VehicleInfo",
- "UnsubscribeSpeed",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeSpeed,
- VehicleInfo__UnsubscribeSpeed__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeSpeed__response__parameter1 = {
- {"speed", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeSpeed__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeSpeed__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeSpeed__response = {
- "VehicleInfo",
- "UnsubscribeSpeed",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeSpeed,
- VehicleInfo__UnsubscribeSpeed__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeRpm__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeRpm__request = {
- "VehicleInfo",
- "SubscribeRpm",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeRpm,
- VehicleInfo__SubscribeRpm__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeRpm__response__parameter1 = {
- {"rpm", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeRpm__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeRpm__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeRpm__response = {
- "VehicleInfo",
- "SubscribeRpm",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeRpm,
- VehicleInfo__SubscribeRpm__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeRpm__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeRpm__request = {
- "VehicleInfo",
- "UnsubscribeRpm",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeRpm,
- VehicleInfo__UnsubscribeRpm__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeRpm__response__parameter1 = {
- {"rpm", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeRpm__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeRpm__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeRpm__response = {
- "VehicleInfo",
- "UnsubscribeRpm",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeRpm,
- VehicleInfo__UnsubscribeRpm__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeFuelLevel__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeFuelLevel__request = {
- "VehicleInfo",
- "SubscribeFuelLevel",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel,
- VehicleInfo__SubscribeFuelLevel__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeFuelLevel__response__parameter1 = {
- {"fuelLevel", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeFuelLevel__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeFuelLevel__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeFuelLevel__response = {
- "VehicleInfo",
- "SubscribeFuelLevel",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel,
- VehicleInfo__SubscribeFuelLevel__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeFuelLevel__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeFuelLevel__request = {
- "VehicleInfo",
- "UnsubscribeFuelLevel",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeFuelLevel,
- VehicleInfo__UnsubscribeFuelLevel__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeFuelLevel__response__parameter1 = {
- {"fuelLevel", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeFuelLevel__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeFuelLevel__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeFuelLevel__response = {
- "VehicleInfo",
- "UnsubscribeFuelLevel",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeFuelLevel,
- VehicleInfo__UnsubscribeFuelLevel__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeFuelLevel_State__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeFuelLevel_State__request = {
- "VehicleInfo",
- "SubscribeFuelLevel_State",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel_State,
- VehicleInfo__SubscribeFuelLevel_State__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeFuelLevel_State__response__parameter1 = {
- {"fuelLevel_State", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeFuelLevel_State__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeFuelLevel_State__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeFuelLevel_State__response = {
- "VehicleInfo",
- "SubscribeFuelLevel_State",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeFuelLevel_State,
- VehicleInfo__SubscribeFuelLevel_State__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeFuelLevel_State__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeFuelLevel_State__request = {
- "VehicleInfo",
- "UnsubscribeFuelLevel_State",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeFuelLevel_State,
- VehicleInfo__UnsubscribeFuelLevel_State__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeFuelLevel_State__response__parameter1 = {
- {"fuelLevel_State", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeFuelLevel_State__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeFuelLevel_State__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeFuelLevel_State__response = {
- "VehicleInfo",
- "UnsubscribeFuelLevel_State",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeFuelLevel_State,
- VehicleInfo__UnsubscribeFuelLevel_State__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeInstantFuelConsumption__request__parameters[] = {
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeInstantFuelConsumption__request = {
- "VehicleInfo",
- "SubscribeInstantFuelConsumption",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeInstantFuelConsumption,
- VehicleInfo__SubscribeInstantFuelConsumption__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeInstantFuelConsumption__response__parameter1 = {
- {"instantFuelConsumption", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeInstantFuelConsumption__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeInstantFuelConsumption__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeInstantFuelConsumption__response = {
- "VehicleInfo",
- "SubscribeInstantFuelConsumption",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeInstantFuelConsumption,
- VehicleInfo__SubscribeInstantFuelConsumption__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeInstantFuelConsumption__request__parameters[] = {
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeInstantFuelConsumption__request = {
- "VehicleInfo",
- "UnsubscribeInstantFuelConsumption",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeInstantFuelConsumption,
- VehicleInfo__UnsubscribeInstantFuelConsumption__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeInstantFuelConsumption__response__parameter1 = {
- {"instantFuelConsumption", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeInstantFuelConsumption__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeInstantFuelConsumption__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeInstantFuelConsumption__response = {
- "VehicleInfo",
- "UnsubscribeInstantFuelConsumption",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeInstantFuelConsumption,
- VehicleInfo__UnsubscribeInstantFuelConsumption__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeExternalTemperature__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeExternalTemperature__request = {
- "VehicleInfo",
- "SubscribeExternalTemperature",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeExternalTemperature,
- VehicleInfo__SubscribeExternalTemperature__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeExternalTemperature__response__parameter1 = {
- {"externalTemperature", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeExternalTemperature__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeExternalTemperature__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeExternalTemperature__response = {
- "VehicleInfo",
- "SubscribeExternalTemperature",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeExternalTemperature,
- VehicleInfo__SubscribeExternalTemperature__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeExternalTemperature__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeExternalTemperature__request = {
- "VehicleInfo",
- "UnsubscribeExternalTemperature",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeExternalTemperature,
- VehicleInfo__UnsubscribeExternalTemperature__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeExternalTemperature__response__parameter1 = {
- {"externalTemperature", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeExternalTemperature__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeExternalTemperature__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeExternalTemperature__response = {
- "VehicleInfo",
- "UnsubscribeExternalTemperature",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeExternalTemperature,
- VehicleInfo__UnsubscribeExternalTemperature__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribePrndl__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribePrndl__request = {
- "VehicleInfo",
- "SubscribePrndl",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribePrndl,
- VehicleInfo__SubscribePrndl__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribePrndl__response__parameter1 = {
- {"prndl", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribePrndl__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribePrndl__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribePrndl__response = {
- "VehicleInfo",
- "SubscribePrndl",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribePrndl,
- VehicleInfo__SubscribePrndl__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribePrndl__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribePrndl__request = {
- "VehicleInfo",
- "UnsubscribePrndl",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribePrndl,
- VehicleInfo__UnsubscribePrndl__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribePrndl__response__parameter1 = {
- {"prndl", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribePrndl__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribePrndl__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribePrndl__response = {
- "VehicleInfo",
- "UnsubscribePrndl",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribePrndl,
- VehicleInfo__UnsubscribePrndl__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeVin__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeVin__request = {
- "VehicleInfo",
- "SubscribeVin",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeVin,
- VehicleInfo__SubscribeVin__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__SubscribeVin__response__parameter1 = {
- "vin", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeVin__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeVin__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeVin__response = {
- "VehicleInfo",
- "SubscribeVin",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeVin,
- VehicleInfo__SubscribeVin__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeVin__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeVin__request = {
- "VehicleInfo",
- "UnsubscribeVin",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeVin,
- VehicleInfo__UnsubscribeVin__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- VehicleInfo__UnsubscribeVin__response__parameter1 = {
- "vin", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeVin__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeVin__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeVin__response = {
- "VehicleInfo",
- "UnsubscribeVin",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeVin,
- VehicleInfo__UnsubscribeVin__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeTirePressure__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeTirePressure__request = {
- "VehicleInfo",
- "SubscribeTirePressure",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeTirePressure,
- VehicleInfo__SubscribeTirePressure__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeTirePressure__response__parameter1 = {
- {"tirePressure", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeTirePressure__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeTirePressure__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeTirePressure__response = {
- "VehicleInfo",
- "SubscribeTirePressure",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeTirePressure,
- VehicleInfo__SubscribeTirePressure__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeTirePressure__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeTirePressure__request = {
- "VehicleInfo",
- "UnsubscribeTirePressure",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeTirePressure,
- VehicleInfo__UnsubscribeTirePressure__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeTirePressure__response__parameter1 = {
- {"tirePressure", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeTirePressure__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeTirePressure__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeTirePressure__response = {
- "VehicleInfo",
- "UnsubscribeTirePressure",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeTirePressure,
- VehicleInfo__UnsubscribeTirePressure__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeOdometer__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeOdometer__request = {
- "VehicleInfo",
- "SubscribeOdometer",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeOdometer,
- VehicleInfo__SubscribeOdometer__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeOdometer__response__parameter1 = {
- {"odometer", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeOdometer__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeOdometer__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeOdometer__response = {
- "VehicleInfo",
- "SubscribeOdometer",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeOdometer,
- VehicleInfo__SubscribeOdometer__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeOdometer__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeOdometer__request = {
- "VehicleInfo",
- "UnsubscribeOdometer",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeOdometer,
- VehicleInfo__UnsubscribeOdometer__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeOdometer__response__parameter1 = {
- {"odometer", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeOdometer__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeOdometer__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeOdometer__response = {
- "VehicleInfo",
- "UnsubscribeOdometer",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeOdometer,
- VehicleInfo__UnsubscribeOdometer__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeBeltStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeBeltStatus__request = {
- "VehicleInfo",
- "SubscribeBeltStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeBeltStatus,
- VehicleInfo__SubscribeBeltStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeBeltStatus__response__parameter1 = {
- {"beltStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeBeltStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeBeltStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeBeltStatus__response = {
- "VehicleInfo",
- "SubscribeBeltStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeBeltStatus,
- VehicleInfo__SubscribeBeltStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeBeltStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeBeltStatus__request = {
- "VehicleInfo",
- "UnsubscribeBeltStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeBeltStatus,
- VehicleInfo__UnsubscribeBeltStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeBeltStatus__response__parameter1 = {
- {"beltStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeBeltStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeBeltStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeBeltStatus__response = {
- "VehicleInfo",
- "UnsubscribeBeltStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeBeltStatus,
- VehicleInfo__UnsubscribeBeltStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeBodyInformation__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeBodyInformation__request = {
- "VehicleInfo",
- "SubscribeBodyInformation",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeBodyInformation,
- VehicleInfo__SubscribeBodyInformation__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeBodyInformation__response__parameter1 = {
- {"bodyInformation", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeBodyInformation__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeBodyInformation__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeBodyInformation__response = {
- "VehicleInfo",
- "SubscribeBodyInformation",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeBodyInformation,
- VehicleInfo__SubscribeBodyInformation__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeBodyInformation__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeBodyInformation__request = {
- "VehicleInfo",
- "UnsubscribeBodyInformation",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeBodyInformation,
- VehicleInfo__UnsubscribeBodyInformation__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeBodyInformation__response__parameter1 = {
- {"bodyInformation", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeBodyInformation__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeBodyInformation__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeBodyInformation__response = {
- "VehicleInfo",
- "UnsubscribeBodyInformation",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeBodyInformation,
- VehicleInfo__UnsubscribeBodyInformation__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeDeviceStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeDeviceStatus__request = {
- "VehicleInfo",
- "SubscribeDeviceStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeDeviceStatus,
- VehicleInfo__SubscribeDeviceStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeDeviceStatus__response__parameter1 = {
- {"deviceStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeDeviceStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeDeviceStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeDeviceStatus__response = {
- "VehicleInfo",
- "SubscribeDeviceStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeDeviceStatus,
- VehicleInfo__SubscribeDeviceStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeDeviceStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeDeviceStatus__request = {
- "VehicleInfo",
- "UnsubscribeDeviceStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeDeviceStatus,
- VehicleInfo__UnsubscribeDeviceStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeDeviceStatus__response__parameter1 = {
- {"deviceStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeDeviceStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeDeviceStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeDeviceStatus__response = {
- "VehicleInfo",
- "UnsubscribeDeviceStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeDeviceStatus,
- VehicleInfo__UnsubscribeDeviceStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeDriverBraking__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeDriverBraking__request = {
- "VehicleInfo",
- "SubscribeDriverBraking",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeDriverBraking,
- VehicleInfo__SubscribeDriverBraking__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeDriverBraking__response__parameter1 = {
- {"driverBraking", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeDriverBraking__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeDriverBraking__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeDriverBraking__response = {
- "VehicleInfo",
- "SubscribeDriverBraking",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeDriverBraking,
- VehicleInfo__SubscribeDriverBraking__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeDriverBraking__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeDriverBraking__request = {
- "VehicleInfo",
- "UnsubscribeDriverBraking",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeDriverBraking,
- VehicleInfo__UnsubscribeDriverBraking__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeDriverBraking__response__parameter1 = {
- {"driverBraking", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeDriverBraking__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeDriverBraking__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeDriverBraking__response = {
- "VehicleInfo",
- "UnsubscribeDriverBraking",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeDriverBraking,
- VehicleInfo__UnsubscribeDriverBraking__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeWiperStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeWiperStatus__request = {
- "VehicleInfo",
- "SubscribeWiperStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeWiperStatus,
- VehicleInfo__SubscribeWiperStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeWiperStatus__response__parameter1 = {
- {"wiperStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeWiperStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeWiperStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeWiperStatus__response = {
- "VehicleInfo",
- "SubscribeWiperStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeWiperStatus,
- VehicleInfo__SubscribeWiperStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeWiperStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeWiperStatus__request = {
- "VehicleInfo",
- "UnsubscribeWiperStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeWiperStatus,
- VehicleInfo__UnsubscribeWiperStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeWiperStatus__response__parameter1 = {
- {"wiperStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeWiperStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeWiperStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeWiperStatus__response = {
- "VehicleInfo",
- "UnsubscribeWiperStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeWiperStatus,
- VehicleInfo__UnsubscribeWiperStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeHeadLampStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeHeadLampStatus__request = {
- "VehicleInfo",
- "SubscribeHeadLampStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeHeadLampStatus,
- VehicleInfo__SubscribeHeadLampStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeHeadLampStatus__response__parameter1 = {
- {"headLampStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeHeadLampStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeHeadLampStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeHeadLampStatus__response = {
- "VehicleInfo",
- "SubscribeHeadLampStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeHeadLampStatus,
- VehicleInfo__SubscribeHeadLampStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeHeadLampStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeHeadLampStatus__request = {
- "VehicleInfo",
- "UnsubscribeHeadLampStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeHeadLampStatus,
- VehicleInfo__UnsubscribeHeadLampStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeHeadLampStatus__response__parameter1 = {
- {"headLampStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeHeadLampStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeHeadLampStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeHeadLampStatus__response = {
- "VehicleInfo",
- "UnsubscribeHeadLampStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeHeadLampStatus,
- VehicleInfo__UnsubscribeHeadLampStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeEngineTorque__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeEngineTorque__request = {
- "VehicleInfo",
- "SubscribeEngineTorque",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeEngineTorque,
- VehicleInfo__SubscribeEngineTorque__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeEngineTorque__response__parameter1 = {
- {"engineTorque", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeEngineTorque__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeEngineTorque__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeEngineTorque__response = {
- "VehicleInfo",
- "SubscribeEngineTorque",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeEngineTorque,
- VehicleInfo__SubscribeEngineTorque__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeEngineTorque__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeEngineTorque__request = {
- "VehicleInfo",
- "UnsubscribeEngineTorque",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeEngineTorque,
- VehicleInfo__UnsubscribeEngineTorque__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeEngineTorque__response__parameter1 = {
- {"engineTorque", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeEngineTorque__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeEngineTorque__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeEngineTorque__response = {
- "VehicleInfo",
- "UnsubscribeEngineTorque",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeEngineTorque,
- VehicleInfo__UnsubscribeEngineTorque__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeAccPedalPosition__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeAccPedalPosition__request = {
- "VehicleInfo",
- "SubscribeAccPedalPosition",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeAccPedalPosition,
- VehicleInfo__SubscribeAccPedalPosition__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeAccPedalPosition__response__parameter1 = {
- {"accPedalPosition", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeAccPedalPosition__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeAccPedalPosition__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeAccPedalPosition__response = {
- "VehicleInfo",
- "SubscribeAccPedalPosition",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeAccPedalPosition,
- VehicleInfo__SubscribeAccPedalPosition__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeAccPedalPosition__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeAccPedalPosition__request = {
- "VehicleInfo",
- "UnsubscribeAccPedalPosition",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeAccPedalPosition,
- VehicleInfo__UnsubscribeAccPedalPosition__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeAccPedalPosition__response__parameter1 = {
- {"accPedalPosition", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeAccPedalPosition__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeAccPedalPosition__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeAccPedalPosition__response = {
- "VehicleInfo",
- "UnsubscribeAccPedalPosition",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeAccPedalPosition,
- VehicleInfo__UnsubscribeAccPedalPosition__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeSteeringWheelAngle__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeSteeringWheelAngle__request = {
- "VehicleInfo",
- "SubscribeSteeringWheelAngle",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeSteeringWheelAngle,
- VehicleInfo__SubscribeSteeringWheelAngle__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeSteeringWheelAngle__response__parameter1 = {
- {"steeringWheelAngle", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeSteeringWheelAngle__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeSteeringWheelAngle__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeSteeringWheelAngle__response = {
- "VehicleInfo",
- "SubscribeSteeringWheelAngle",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeSteeringWheelAngle,
- VehicleInfo__SubscribeSteeringWheelAngle__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeSteeringWheelAngle__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeSteeringWheelAngle__request = {
- "VehicleInfo",
- "UnsubscribeSteeringWheelAngle",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeSteeringWheelAngle,
- VehicleInfo__UnsubscribeSteeringWheelAngle__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeSteeringWheelAngle__response__parameter1 = {
- {"steeringWheelAngle", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeSteeringWheelAngle__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeSteeringWheelAngle__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeSteeringWheelAngle__response = {
- "VehicleInfo",
- "UnsubscribeSteeringWheelAngle",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeSteeringWheelAngle,
- VehicleInfo__UnsubscribeSteeringWheelAngle__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeECallInfo__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeECallInfo__request = {
- "VehicleInfo",
- "SubscribeECallInfo",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeECallInfo,
- VehicleInfo__SubscribeECallInfo__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeECallInfo__response__parameter1 = {
- {"eCallInfo", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeECallInfo__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeECallInfo__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeECallInfo__response = {
- "VehicleInfo",
- "SubscribeECallInfo",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeECallInfo,
- VehicleInfo__SubscribeECallInfo__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeECallInfo__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeECallInfo__request = {
- "VehicleInfo",
- "UnsubscribeECallInfo",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeECallInfo,
- VehicleInfo__UnsubscribeECallInfo__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeECallInfo__response__parameter1 = {
- {"eCallInfo", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeECallInfo__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeECallInfo__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeECallInfo__response = {
- "VehicleInfo",
- "UnsubscribeECallInfo",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeECallInfo,
- VehicleInfo__UnsubscribeECallInfo__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeAirbagStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeAirbagStatus__request = {
- "VehicleInfo",
- "SubscribeAirbagStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeAirbagStatus,
- VehicleInfo__SubscribeAirbagStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeAirbagStatus__response__parameter1 = {
- {"airbagStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeAirbagStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeAirbagStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeAirbagStatus__response = {
- "VehicleInfo",
- "SubscribeAirbagStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeAirbagStatus,
- VehicleInfo__SubscribeAirbagStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeAirbagStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeAirbagStatus__request = {
- "VehicleInfo",
- "UnsubscribeAirbagStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeAirbagStatus,
- VehicleInfo__UnsubscribeAirbagStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeAirbagStatus__response__parameter1 = {
- {"airbagStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeAirbagStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeAirbagStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeAirbagStatus__response = {
- "VehicleInfo",
- "UnsubscribeAirbagStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeAirbagStatus,
- VehicleInfo__UnsubscribeAirbagStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeEmergencyEvent__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeEmergencyEvent__request = {
- "VehicleInfo",
- "SubscribeEmergencyEvent",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeEmergencyEvent,
- VehicleInfo__SubscribeEmergencyEvent__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeEmergencyEvent__response__parameter1 = {
- {"emergencyEvent", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeEmergencyEvent__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeEmergencyEvent__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeEmergencyEvent__response = {
- "VehicleInfo",
- "SubscribeEmergencyEvent",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeEmergencyEvent,
- VehicleInfo__SubscribeEmergencyEvent__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeEmergencyEvent__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeEmergencyEvent__request = {
- "VehicleInfo",
- "UnsubscribeEmergencyEvent",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeEmergencyEvent,
- VehicleInfo__UnsubscribeEmergencyEvent__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeEmergencyEvent__response__parameter1 = {
- {"emergencyEvent", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeEmergencyEvent__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeEmergencyEvent__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeEmergencyEvent__response = {
- "VehicleInfo",
- "UnsubscribeEmergencyEvent",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeEmergencyEvent,
- VehicleInfo__UnsubscribeEmergencyEvent__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeClusterModeStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeClusterModeStatus__request = {
- "VehicleInfo",
- "SubscribeClusterModeStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeClusterModeStatus,
- VehicleInfo__SubscribeClusterModeStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeClusterModeStatus__response__parameter1 = {
- {"clusterModeStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeClusterModeStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeClusterModeStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeClusterModeStatus__response = {
- "VehicleInfo",
- "SubscribeClusterModeStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeClusterModeStatus,
- VehicleInfo__SubscribeClusterModeStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeClusterModeStatus__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeClusterModeStatus__request = {
- "VehicleInfo",
- "UnsubscribeClusterModeStatus",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeClusterModeStatus,
- VehicleInfo__UnsubscribeClusterModeStatus__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeClusterModeStatus__response__parameter1 = {
- {"clusterModeStatus", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeClusterModeStatus__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeClusterModeStatus__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeClusterModeStatus__response = {
- "VehicleInfo",
- "UnsubscribeClusterModeStatus",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeClusterModeStatus,
- VehicleInfo__UnsubscribeClusterModeStatus__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeMyKey__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeMyKey__request = {
- "VehicleInfo",
- "SubscribeMyKey",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_SubscribeMyKey,
- VehicleInfo__SubscribeMyKey__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__SubscribeMyKey__response__parameter1 = {
- {"myKey", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__SubscribeMyKey__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__SubscribeMyKey__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__SubscribeMyKey__response = {
- "VehicleInfo",
- "SubscribeMyKey",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_SubscribeMyKey,
- VehicleInfo__SubscribeMyKey__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeMyKey__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeMyKey__request = {
- "VehicleInfo",
- "UnsubscribeMyKey",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeMyKey,
- VehicleInfo__UnsubscribeMyKey__request__parameters};
-
-const ford_message_descriptions::StructDescription
- VehicleInfo__UnsubscribeMyKey__response__parameter1 = {
- {"myKey", ford_message_descriptions::Struct, true},
- Structs::Common__VehicleDataResult__parameters};
-const ford_message_descriptions::ParameterDescription*
- VehicleInfo__UnsubscribeMyKey__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&VehicleInfo__UnsubscribeMyKey__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- VehicleInfo__UnsubscribeMyKey__response = {
- "VehicleInfo",
- "UnsubscribeMyKey",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::VehicleInfo_UnsubscribeMyKey,
- VehicleInfo__UnsubscribeMyKey__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__ActivateApp__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__ActivateApp__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription SDL__ActivateApp__request =
- {"SDL",
- "ActivateApp",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::SDL_ActivateApp,
- SDL__ActivateApp__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__ActivateApp__response__parameter1 = {
- "isSDLAllowed", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::StructDescription
- SDL__ActivateApp__response__parameter2 = {
- {"device", ford_message_descriptions::Struct, false},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ParameterDescription
- SDL__ActivateApp__response__parameter3 = {
- "isPermissionsConsentNeeded", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- SDL__ActivateApp__response__parameter4 = {
- "isAppPermissionsRevoked", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::StructDescription
- SDL__ActivateApp__response__parameter5_array = {
- {"appRevokedPermissions", ford_message_descriptions::Struct, true},
- Structs::Common__PermissionItem__parameters};
-const ford_message_descriptions::ArrayDescription
- SDL__ActivateApp__response__parameter5 = {
- {"appRevokedPermissions", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__response__parameter5_array,
- "(si(bb))"};
-const ford_message_descriptions::ParameterDescription
- SDL__ActivateApp__response__parameter6 = {
- "isAppRevoked", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- SDL__ActivateApp__response__parameter7 = {
- "priority", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- SDL__ActivateApp__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__response__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__response__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__response__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__response__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__response__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__ActivateApp__response__parameter7,
- NULL};
-const ford_message_descriptions::MessageDescription SDL__ActivateApp__response =
- {"SDL",
- "ActivateApp",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::SDL_ActivateApp,
- SDL__ActivateApp__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__GetUserFriendlyMessage__request__parameter1_array = {
- "messageCodes", ford_message_descriptions::String, true};
-const ford_message_descriptions::ArrayDescription
- SDL__GetUserFriendlyMessage__request__parameter1 = {
- {"messageCodes", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetUserFriendlyMessage__request__parameter1_array,
- "s"};
-const ford_message_descriptions::ParameterDescription
- SDL__GetUserFriendlyMessage__request__parameter2 = {
- "language", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- SDL__GetUserFriendlyMessage__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetUserFriendlyMessage__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetUserFriendlyMessage__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__GetUserFriendlyMessage__request = {
- "SDL",
- "GetUserFriendlyMessage",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::SDL_GetUserFriendlyMessage,
- SDL__GetUserFriendlyMessage__request__parameters};
-
-const ford_message_descriptions::StructDescription
- SDL__GetUserFriendlyMessage__response__parameter1_array = {
- {"messages", ford_message_descriptions::Struct, true},
- Structs::Common__UserFriendlyMessage__parameters};
-const ford_message_descriptions::ArrayDescription
- SDL__GetUserFriendlyMessage__response__parameter1 = {
- {"messages", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetUserFriendlyMessage__response__parameter1_array,
- "(s(bs)(bs)(bs)(bs)(bs))"};
-const ford_message_descriptions::ParameterDescription*
- SDL__GetUserFriendlyMessage__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetUserFriendlyMessage__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__GetUserFriendlyMessage__response = {
- "SDL",
- "GetUserFriendlyMessage",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::SDL_GetUserFriendlyMessage,
- SDL__GetUserFriendlyMessage__response__parameters};
-
-const ford_message_descriptions::StructDescription
- SDL__OnAllowSDLFunctionality__notification__parameter1 = {
- {"device", ford_message_descriptions::Struct, false},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAllowSDLFunctionality__notification__parameter2 = {
- "allowed", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAllowSDLFunctionality__notification__parameter3 = {
- "source", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__OnAllowSDLFunctionality__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAllowSDLFunctionality__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAllowSDLFunctionality__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAllowSDLFunctionality__notification__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnAllowSDLFunctionality__notification = {
- "SDL",
- "OnAllowSDLFunctionality",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnAllowSDLFunctionality,
- SDL__OnAllowSDLFunctionality__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__OnReceivedPolicyUpdate__notification__parameter1 = {
- "policyfile", ford_message_descriptions::String, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__OnReceivedPolicyUpdate__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnReceivedPolicyUpdate__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnReceivedPolicyUpdate__notification = {
- "SDL",
- "OnReceivedPolicyUpdate",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnReceivedPolicyUpdate,
- SDL__OnReceivedPolicyUpdate__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- SDL__OnPolicyUpdate__notification__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnPolicyUpdate__notification = {
- "SDL",
- "OnPolicyUpdate",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnPolicyUpdate,
- SDL__OnPolicyUpdate__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__GetListOfPermissions__request__parameter1 = {
- "appID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::ParameterDescription*
- SDL__GetListOfPermissions__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetListOfPermissions__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__GetListOfPermissions__request = {
- "SDL",
- "GetListOfPermissions",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::SDL_GetListOfPermissions,
- SDL__GetListOfPermissions__request__parameters};
-
-const ford_message_descriptions::StructDescription
- SDL__GetListOfPermissions__response__parameter1_array = {
- {"allowedFunctions", ford_message_descriptions::Struct, true},
- Structs::Common__PermissionItem__parameters};
-const ford_message_descriptions::ArrayDescription
- SDL__GetListOfPermissions__response__parameter1 = {
- {"allowedFunctions", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetListOfPermissions__response__parameter1_array,
- "(si(bb))"};
-const ford_message_descriptions::ParameterDescription*
- SDL__GetListOfPermissions__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetListOfPermissions__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__GetListOfPermissions__response = {
- "SDL",
- "GetListOfPermissions",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::SDL_GetListOfPermissions,
- SDL__GetListOfPermissions__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionConsent__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, false};
-const ford_message_descriptions::StructDescription
- SDL__OnAppPermissionConsent__notification__parameter2_array = {
- {"consentedFunctions", ford_message_descriptions::Struct, true},
- Structs::Common__PermissionItem__parameters};
-const ford_message_descriptions::ArrayDescription
- SDL__OnAppPermissionConsent__notification__parameter2 = {
- {"consentedFunctions", ford_message_descriptions::Array, true},
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionConsent__notification__parameter2_array,
- "(si(bb))"};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionConsent__notification__parameter3 = {
- "source", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__OnAppPermissionConsent__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionConsent__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionConsent__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionConsent__notification__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnAppPermissionConsent__notification = {
- "SDL",
- "OnAppPermissionConsent",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnAppPermissionConsent,
- SDL__OnAppPermissionConsent__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionChanged__notification__parameter1 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionChanged__notification__parameter2 = {
- "isAppPermissionsRevoked", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::StructDescription
- SDL__OnAppPermissionChanged__notification__parameter3_array = {
- {"appRevokedPermissions", ford_message_descriptions::Struct, true},
- Structs::Common__PermissionItem__parameters};
-const ford_message_descriptions::ArrayDescription
- SDL__OnAppPermissionChanged__notification__parameter3 = {
- {"appRevokedPermissions", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter3_array,
- "(si(bb))"};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionChanged__notification__parameter4 = {
- "appRevoked", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionChanged__notification__parameter5 = {
- "appPermissionsConsentNeeded",
- ford_message_descriptions::Boolean,
- false};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionChanged__notification__parameter6 = {
- "appUnauthorized", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionChanged__notification__parameter7 = {
- "priority", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription
- SDL__OnAppPermissionChanged__notification__parameter8_array = {
- "requestType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ArrayDescription
- SDL__OnAppPermissionChanged__notification__parameter8 = {
- {"requestType", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter8_array,
- "i"};
-const ford_message_descriptions::ParameterDescription*
- SDL__OnAppPermissionChanged__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter3,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter4,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter5,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter6,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter7,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnAppPermissionChanged__notification__parameter8,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnAppPermissionChanged__notification = {
- "SDL",
- "OnAppPermissionChanged",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnAppPermissionChanged,
- SDL__OnAppPermissionChanged__notification__parameters};
-
-const ford_message_descriptions::StructDescription
- SDL__OnSDLConsentNeeded__notification__parameter1 = {
- {"device", ford_message_descriptions::Struct, true},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ParameterDescription*
- SDL__OnSDLConsentNeeded__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnSDLConsentNeeded__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnSDLConsentNeeded__notification = {
- "SDL",
- "OnSDLConsentNeeded",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnSDLConsentNeeded,
- SDL__OnSDLConsentNeeded__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- SDL__UpdateSDL__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription SDL__UpdateSDL__request = {
- "SDL",
- "UpdateSDL",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::SDL_UpdateSDL,
- SDL__UpdateSDL__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__UpdateSDL__response__parameter1 = {
- "result", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__UpdateSDL__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__UpdateSDL__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription SDL__UpdateSDL__response = {
- "SDL",
- "UpdateSDL",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::SDL_UpdateSDL,
- SDL__UpdateSDL__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- SDL__GetStatusUpdate__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- SDL__GetStatusUpdate__request = {"SDL",
- "GetStatusUpdate",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::SDL_GetStatusUpdate,
- SDL__GetStatusUpdate__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__GetStatusUpdate__response__parameter1 = {
- "status", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__GetStatusUpdate__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetStatusUpdate__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__GetStatusUpdate__response = {
- "SDL",
- "GetStatusUpdate",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::SDL_GetStatusUpdate,
- SDL__GetStatusUpdate__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__OnStatusUpdate__notification__parameter1 = {
- "status", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__OnStatusUpdate__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnStatusUpdate__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnStatusUpdate__notification = {
- "SDL",
- "OnStatusUpdate",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnStatusUpdate,
- SDL__OnStatusUpdate__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__OnSystemError__notification__parameter1 = {
- "error", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__OnSystemError__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnSystemError__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnSystemError__notification = {
- "SDL",
- "OnSystemError",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnSystemError,
- SDL__OnSystemError__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__AddStatisticsInfo__notification__parameter1 = {
- "statisticType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__AddStatisticsInfo__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__AddStatisticsInfo__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__AddStatisticsInfo__notification = {
- "SDL",
- "AddStatisticsInfo",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_AddStatisticsInfo,
- SDL__AddStatisticsInfo__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__GetURLS__request__parameter1 = {
- "service", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- SDL__GetURLS__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetURLS__request__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription SDL__GetURLS__request = {
- "SDL",
- "GetURLS",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::SDL_GetURLS,
- SDL__GetURLS__request__parameters};
-
-const ford_message_descriptions::StructDescription
- SDL__GetURLS__response__parameter1_array = {
- {"urls", ford_message_descriptions::Struct, true},
- Structs::Common__ServiceInfo__parameters};
-const ford_message_descriptions::ArrayDescription
- SDL__GetURLS__response__parameter1 = {
- {"urls", ford_message_descriptions::Array, false},
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetURLS__response__parameter1_array,
- "(s(bs))"};
-const ford_message_descriptions::ParameterDescription*
- SDL__GetURLS__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__GetURLS__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription SDL__GetURLS__response = {
- "SDL",
- "GetURLS",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::SDL_GetURLS,
- SDL__GetURLS__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- SDL__OnDeviceStateChanged__notification__parameter1 = {
- "deviceState", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- SDL__OnDeviceStateChanged__notification__parameter2 = {
- "deviceInternalId", ford_message_descriptions::String, true};
-const ford_message_descriptions::StructDescription
- SDL__OnDeviceStateChanged__notification__parameter3 = {
- {"deviceId", ford_message_descriptions::Struct, false},
- Structs::Common__DeviceInfo__parameters};
-const ford_message_descriptions::ParameterDescription*
- SDL__OnDeviceStateChanged__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnDeviceStateChanged__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnDeviceStateChanged__notification__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&SDL__OnDeviceStateChanged__notification__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- SDL__OnDeviceStateChanged__notification = {
- "SDL",
- "OnDeviceStateChanged",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::SDL_OnDeviceStateChanged,
- SDL__OnDeviceStateChanged__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- RC__IsReady__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription RC__IsReady__request = {
- "RC",
- "IsReady",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::RC_IsReady,
- RC__IsReady__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- RC__IsReady__response__parameter1 = {
- "available", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- RC__IsReady__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__IsReady__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription RC__IsReady__response = {
- "RC",
- "IsReady",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::RC_IsReady,
- RC__IsReady__response__parameters};
-
-const ford_message_descriptions::ParameterDescription*
- RC__GetCapabilities__request__parameters[] = {NULL};
-const ford_message_descriptions::MessageDescription
- RC__GetCapabilities__request = {"RC",
- "GetCapabilities",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::RC_GetCapabilities,
- RC__GetCapabilities__request__parameters};
-
-const ford_message_descriptions::StructDescription
- RC__GetCapabilities__response__parameter1 = {
- {"remoteControlCapability", ford_message_descriptions::Struct, false},
- Structs::Common__RemoteControlCapabilities__parameters};
-const ford_message_descriptions::ParameterDescription*
- RC__GetCapabilities__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetCapabilities__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__GetCapabilities__response = {"RC",
- "GetCapabilities",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::RC_GetCapabilities,
- RC__GetCapabilities__response__parameters};
-
-const ford_message_descriptions::StructDescription
- RC__SetInteriorVehicleData__request__parameter1 = {
- {"moduleData", ford_message_descriptions::Struct, true},
- Structs::Common__ModuleData__parameters};
-const ford_message_descriptions::ParameterDescription
- RC__SetInteriorVehicleData__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- RC__SetInteriorVehicleData__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__SetInteriorVehicleData__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&RC__SetInteriorVehicleData__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__SetInteriorVehicleData__request = {
- "RC",
- "SetInteriorVehicleData",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::RC_SetInteriorVehicleData,
- RC__SetInteriorVehicleData__request__parameters};
-
-const ford_message_descriptions::StructDescription
- RC__SetInteriorVehicleData__response__parameter1 = {
- {"moduleData", ford_message_descriptions::Struct, true},
- Structs::Common__ModuleData__parameters};
-const ford_message_descriptions::ParameterDescription*
- RC__SetInteriorVehicleData__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__SetInteriorVehicleData__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__SetInteriorVehicleData__response = {
- "RC",
- "SetInteriorVehicleData",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::RC_SetInteriorVehicleData,
- RC__SetInteriorVehicleData__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- RC__GetInteriorVehicleData__request__parameter1 = {
- "moduleType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- RC__GetInteriorVehicleData__request__parameter2 = {
- "subscribe", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- RC__GetInteriorVehicleData__request__parameter3 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- RC__GetInteriorVehicleData__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetInteriorVehicleData__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetInteriorVehicleData__request__parameter2,
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetInteriorVehicleData__request__parameter3,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__GetInteriorVehicleData__request = {
- "RC",
- "GetInteriorVehicleData",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::RC_GetInteriorVehicleData,
- RC__GetInteriorVehicleData__request__parameters};
-
-const ford_message_descriptions::StructDescription
- RC__GetInteriorVehicleData__response__parameter1 = {
- {"moduleData", ford_message_descriptions::Struct, true},
- Structs::Common__ModuleData__parameters};
-const ford_message_descriptions::ParameterDescription
- RC__GetInteriorVehicleData__response__parameter2 = {
- "isSubscribed", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription*
- RC__GetInteriorVehicleData__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetInteriorVehicleData__response__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetInteriorVehicleData__response__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__GetInteriorVehicleData__response = {
- "RC",
- "GetInteriorVehicleData",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::RC_GetInteriorVehicleData,
- RC__GetInteriorVehicleData__response__parameters};
-
-const ford_message_descriptions::ParameterDescription
- RC__GetInteriorVehicleDataConsent__request__parameter1 = {
- "moduleType", ford_message_descriptions::Enum, true};
-const ford_message_descriptions::ParameterDescription
- RC__GetInteriorVehicleDataConsent__request__parameter2 = {
- "appID", ford_message_descriptions::Integer, true};
-const ford_message_descriptions::ParameterDescription*
- RC__GetInteriorVehicleDataConsent__request__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetInteriorVehicleDataConsent__request__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetInteriorVehicleDataConsent__request__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__GetInteriorVehicleDataConsent__request = {
- "RC",
- "GetInteriorVehicleDataConsent",
- hmi_apis::messageType::request,
- hmi_apis::FunctionID::RC_GetInteriorVehicleDataConsent,
- RC__GetInteriorVehicleDataConsent__request__parameters};
-
-const ford_message_descriptions::ParameterDescription
- RC__GetInteriorVehicleDataConsent__response__parameter1 = {
- "allowed", ford_message_descriptions::Boolean, true};
-const ford_message_descriptions::ParameterDescription*
- RC__GetInteriorVehicleDataConsent__response__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__GetInteriorVehicleDataConsent__response__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__GetInteriorVehicleDataConsent__response = {
- "RC",
- "GetInteriorVehicleDataConsent",
- hmi_apis::messageType::response,
- hmi_apis::FunctionID::RC_GetInteriorVehicleDataConsent,
- RC__GetInteriorVehicleDataConsent__response__parameters};
-
-const ford_message_descriptions::StructDescription
- RC__OnInteriorVehicleData__notification__parameter1 = {
- {"moduleData", ford_message_descriptions::Struct, true},
- Structs::Common__ModuleData__parameters};
-const ford_message_descriptions::ParameterDescription*
- RC__OnInteriorVehicleData__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__OnInteriorVehicleData__notification__parameter1,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__OnInteriorVehicleData__notification = {
- "RC",
- "OnInteriorVehicleData",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::RC_OnInteriorVehicleData,
- RC__OnInteriorVehicleData__notification__parameters};
-
-const ford_message_descriptions::ParameterDescription
- RC__OnRemoteControlSettings__notification__parameter1 = {
- "allowed", ford_message_descriptions::Boolean, false};
-const ford_message_descriptions::ParameterDescription
- RC__OnRemoteControlSettings__notification__parameter2 = {
- "accessMode", ford_message_descriptions::Enum, false};
-const ford_message_descriptions::ParameterDescription*
- RC__OnRemoteControlSettings__notification__parameters[] = {
- (const ford_message_descriptions::
- ParameterDescription*)&RC__OnRemoteControlSettings__notification__parameter1,
- (const ford_message_descriptions::
- ParameterDescription*)&RC__OnRemoteControlSettings__notification__parameter2,
- NULL};
-const ford_message_descriptions::MessageDescription
- RC__OnRemoteControlSettings__notification = {
- "RC",
- "OnRemoteControlSettings",
- hmi_apis::messageType::notification,
- hmi_apis::FunctionID::RC_OnRemoteControlSettings,
- RC__OnRemoteControlSettings__notification__parameters};
-}
-
-namespace ford_message_descriptions {
-
-const MessageDescription* message_descriptions[] = {
- &Buttons__GetCapabilities__request,
- &Buttons__GetCapabilities__response,
- &Buttons__OnButtonEvent__notification,
- &Buttons__OnButtonPress__notification,
- &Buttons__OnButtonSubscription__notification,
- &BasicCommunication__OnReady__notification,
- &BasicCommunication__OnStartDeviceDiscovery__notification,
- &BasicCommunication__OnUpdateDeviceList__notification,
- &BasicCommunication__OnPhoneCall__notification,
- &BasicCommunication__OnEmergencyEvent__notification,
- &BasicCommunication__OnResumeAudioSource__notification,
- &BasicCommunication__OnSDLPersistenceComplete__notification,
- &BasicCommunication__UpdateAppList__request,
- &BasicCommunication__UpdateAppList__response,
- &BasicCommunication__UpdateDeviceList__request,
- &BasicCommunication__UpdateDeviceList__response,
- &BasicCommunication__OnFileRemoved__notification,
- &BasicCommunication__AllowDeviceToConnect__request,
- &BasicCommunication__AllowDeviceToConnect__response,
- &BasicCommunication__OnDeviceChosen__notification,
- &BasicCommunication__OnFindApplications__notification,
- &BasicCommunication__ActivateApp__request,
- &BasicCommunication__ActivateApp__response,
- &BasicCommunication__OnAppActivated__notification,
- &BasicCommunication__OnAppDeactivated__notification,
- &BasicCommunication__OnAppRegistered__notification,
- &BasicCommunication__OnAppUnregistered__notification,
- &BasicCommunication__OnExitApplication__notification,
- &BasicCommunication__OnExitAllApplications__notification,
- &BasicCommunication__OnAwakeSDL__notification,
- &BasicCommunication__MixingAudioSupported__request,
- &BasicCommunication__MixingAudioSupported__response,
- &BasicCommunication__PlayTone__notification,
- &BasicCommunication__DialNumber__request,
- &BasicCommunication__DialNumber__response,
- &BasicCommunication__OnSystemRequest__notification,
- &BasicCommunication__SystemRequest__request,
- &BasicCommunication__SystemRequest__response,
- &BasicCommunication__PolicyUpdate__request,
- &BasicCommunication__PolicyUpdate__response,
- &BasicCommunication__OnSDLClose__notification,
- &BasicCommunication__OnPutFile__notification,
- &BasicCommunication__GetSystemInfo__request,
- &BasicCommunication__GetSystemInfo__response,
- &BasicCommunication__OnSystemInfoChanged__notification,
- &BasicCommunication__OnIgnitionCycleOver__notification,
- &BasicCommunication__DecryptCertificate__request,
- &BasicCommunication__DecryptCertificate__response,
- &BasicCommunication__OnEventChanged__notification,
- &VR__IsReady__request,
- &VR__IsReady__response,
- &VR__Started__notification,
- &VR__Stopped__notification,
- &VR__AddCommand__request,
- &VR__AddCommand__response,
- &VR__DeleteCommand__request,
- &VR__DeleteCommand__response,
- &VR__PerformInteraction__request,
- &VR__PerformInteraction__response,
- &VR__OnCommand__notification,
- &VR__ChangeRegistration__request,
- &VR__ChangeRegistration__response,
- &VR__OnLanguageChange__notification,
- &VR__GetSupportedLanguages__request,
- &VR__GetSupportedLanguages__response,
- &VR__GetLanguage__request,
- &VR__GetLanguage__response,
- &VR__GetCapabilities__request,
- &VR__GetCapabilities__response,
- &TTS__GetCapabilities__request,
- &TTS__GetCapabilities__response,
- &TTS__Started__notification,
- &TTS__Stopped__notification,
- &TTS__IsReady__request,
- &TTS__IsReady__response,
- &TTS__Speak__request,
- &TTS__Speak__response,
- &TTS__StopSpeaking__request,
- &TTS__StopSpeaking__response,
- &TTS__ChangeRegistration__request,
- &TTS__ChangeRegistration__response,
- &TTS__OnLanguageChange__notification,
- &TTS__GetSupportedLanguages__request,
- &TTS__GetSupportedLanguages__response,
- &TTS__GetLanguage__request,
- &TTS__GetLanguage__response,
- &TTS__SetGlobalProperties__request,
- &TTS__SetGlobalProperties__response,
- &TTS__OnResetTimeout__notification,
- &UI__Alert__request,
- &UI__Alert__response,
- &UI__Show__request,
- &UI__Show__response,
- &UI__AddCommand__request,
- &UI__AddCommand__response,
- &UI__DeleteCommand__request,
- &UI__DeleteCommand__response,
- &UI__AddSubMenu__request,
- &UI__AddSubMenu__response,
- &UI__DeleteSubMenu__request,
- &UI__DeleteSubMenu__response,
- &UI__PerformInteraction__request,
- &UI__PerformInteraction__response,
- &UI__SetMediaClockTimer__request,
- &UI__SetMediaClockTimer__response,
- &UI__SetGlobalProperties__request,
- &UI__SetGlobalProperties__response,
- &UI__OnCommand__notification,
- &UI__OnSystemContext__notification,
- &UI__GetCapabilities__request,
- &UI__GetCapabilities__response,
- &UI__ChangeRegistration__request,
- &UI__ChangeRegistration__response,
- &UI__OnLanguageChange__notification,
- &UI__GetSupportedLanguages__request,
- &UI__GetSupportedLanguages__response,
- &UI__GetLanguage__request,
- &UI__GetLanguage__response,
- &UI__OnDriverDistraction__notification,
- &UI__SetAppIcon__request,
- &UI__SetAppIcon__response,
- &UI__SetDisplayLayout__request,
- &UI__SetDisplayLayout__response,
- &UI__ShowCustomForm__request,
- &UI__ShowCustomForm__response,
- &UI__OnKeyboardInput__notification,
- &UI__OnTouchEvent__notification,
- &UI__Slider__request,
- &UI__Slider__response,
- &UI__ScrollableMessage__request,
- &UI__ScrollableMessage__response,
- &UI__PerformAudioPassThru__request,
- &UI__PerformAudioPassThru__response,
- &UI__EndAudioPassThru__request,
- &UI__EndAudioPassThru__response,
- &UI__IsReady__request,
- &UI__IsReady__response,
- &UI__ClosePopUp__request,
- &UI__ClosePopUp__response,
- &UI__OnResetTimeout__notification,
- &UI__OnRecordStart__notification,
- &UI__SendHapticData__request,
- &UI__SendHapticData__response,
- &Navigation__IsReady__request,
- &Navigation__IsReady__response,
- &Navigation__SendLocation__request,
- &Navigation__SendLocation__response,
- &Navigation__DialNumber__request,
- &Navigation__DialNumber__response,
- &Navigation__ShowConstantTBT__request,
- &Navigation__ShowConstantTBT__response,
- &Navigation__AlertManeuver__request,
- &Navigation__AlertManeuver__response,
- &Navigation__UpdateTurnList__request,
- &Navigation__UpdateTurnList__response,
- &Navigation__OnTBTClientState__notification,
- &Navigation__SetVideoConfig__request,
- &Navigation__SetVideoConfig__response,
- &Navigation__StartStream__request,
- &Navigation__StartStream__response,
- &Navigation__StopStream__request,
- &Navigation__StopStream__response,
- &Navigation__StartAudioStream__request,
- &Navigation__StartAudioStream__response,
- &Navigation__StopAudioStream__request,
- &Navigation__StopAudioStream__response,
- &Navigation__OnAudioDataStreaming__notification,
- &Navigation__OnVideoDataStreaming__notification,
- &Navigation__GetWayPoints__request,
- &Navigation__GetWayPoints__response,
- &Navigation__OnWayPointChange__notification,
- &Navigation__SubscribeWayPoints__request,
- &Navigation__SubscribeWayPoints__response,
- &Navigation__UnsubscribeWayPoints__request,
- &Navigation__UnsubscribeWayPoints__response,
- &VehicleInfo__IsReady__request,
- &VehicleInfo__IsReady__response,
- &VehicleInfo__GetVehicleType__request,
- &VehicleInfo__GetVehicleType__response,
- &VehicleInfo__ReadDID__request,
- &VehicleInfo__ReadDID__response,
- &VehicleInfo__GetDTCs__request,
- &VehicleInfo__GetDTCs__response,
- &VehicleInfo__DiagnosticMessage__request,
- &VehicleInfo__DiagnosticMessage__response,
- &VehicleInfo__SubscribeVehicleData__request,
- &VehicleInfo__SubscribeVehicleData__response,
- &VehicleInfo__UnsubscribeVehicleData__request,
- &VehicleInfo__UnsubscribeVehicleData__response,
- &VehicleInfo__GetVehicleData__request,
- &VehicleInfo__GetVehicleData__response,
- &VehicleInfo__OnVehicleData__notification,
- &VehicleInfo__GetGpsData__request,
- &VehicleInfo__GetGpsData__response,
- &VehicleInfo__GetSpeed__request,
- &VehicleInfo__GetSpeed__response,
- &VehicleInfo__GetRpm__request,
- &VehicleInfo__GetRpm__response,
- &VehicleInfo__GetFuelLevel__request,
- &VehicleInfo__GetFuelLevel__response,
- &VehicleInfo__GetFuelLevelState__request,
- &VehicleInfo__GetFuelLevelState__response,
- &VehicleInfo__GetInstantFuelConsumption__request,
- &VehicleInfo__GetInstantFuelConsumption__response,
- &VehicleInfo__GetExternalTemperature__request,
- &VehicleInfo__GetExternalTemperature__response,
- &VehicleInfo__GetVin__request,
- &VehicleInfo__GetVin__response,
- &VehicleInfo__GetPrndl__request,
- &VehicleInfo__GetPrndl__response,
- &VehicleInfo__GetTirePressure__request,
- &VehicleInfo__GetTirePressure__response,
- &VehicleInfo__GetOdometer__request,
- &VehicleInfo__GetOdometer__response,
- &VehicleInfo__GetBeltStatus__request,
- &VehicleInfo__GetBeltStatus__response,
- &VehicleInfo__GetBodyInformation__request,
- &VehicleInfo__GetBodyInformation__response,
- &VehicleInfo__GetDeviceStatus__request,
- &VehicleInfo__GetDeviceStatus__response,
- &VehicleInfo__GetDriverBraking__request,
- &VehicleInfo__GetDriverBraking__response,
- &VehicleInfo__GetWiperStatus__request,
- &VehicleInfo__GetWiperStatus__response,
- &VehicleInfo__GetHeadLampStatus__request,
- &VehicleInfo__GetHeadLampStatus__response,
- &VehicleInfo__GetEngineTorque__request,
- &VehicleInfo__GetEngineTorque__response,
- &VehicleInfo__GetAccPedalPosition__request,
- &VehicleInfo__GetAccPedalPosition__response,
- &VehicleInfo__GetSteeringWheelAngle__request,
- &VehicleInfo__GetSteeringWheelAngle__response,
- &VehicleInfo__GetECallInfo__request,
- &VehicleInfo__GetECallInfo__response,
- &VehicleInfo__GetAirbagStatus__request,
- &VehicleInfo__GetAirbagStatus__response,
- &VehicleInfo__GetEmergencyEvent__request,
- &VehicleInfo__GetEmergencyEvent__response,
- &VehicleInfo__GetClusterModeStatus__request,
- &VehicleInfo__GetClusterModeStatus__response,
- &VehicleInfo__GetMyKey__request,
- &VehicleInfo__GetMyKey__response,
- &VehicleInfo__OnGpsData__notification,
- &VehicleInfo__OnSpeed__notification,
- &VehicleInfo__OnRpm__notification,
- &VehicleInfo__OnFuelLevel__notification,
- &VehicleInfo__OnFuelLevelState__notification,
- &VehicleInfo__OnInstantFuelConsumption__notification,
- &VehicleInfo__OnExternalTemperature__notification,
- &VehicleInfo__OnVin__notification,
- &VehicleInfo__OnPrndl__notification,
- &VehicleInfo__OnTirePressure__notification,
- &VehicleInfo__OnOdometer__notification,
- &VehicleInfo__OnBeltStatus__notification,
- &VehicleInfo__OnBodyInformation__notification,
- &VehicleInfo__OnDeviceStatus__notification,
- &VehicleInfo__OnDriverBraking__notification,
- &VehicleInfo__OnWiperStatus__notification,
- &VehicleInfo__OnHeadLampStatus__notification,
- &VehicleInfo__OnEngineTorque__notification,
- &VehicleInfo__OnAccPedalPosition__notification,
- &VehicleInfo__OnSteeringWheelAngle__notification,
- &VehicleInfo__OnECallInfo__notification,
- &VehicleInfo__OnAirbagStatus__notification,
- &VehicleInfo__OnEmergencyEvent__notification,
- &VehicleInfo__OnClusterModeStatus__notification,
- &VehicleInfo__OnMyKey__notification,
- &VehicleInfo__SubscribeGps__request,
- &VehicleInfo__SubscribeGps__response,
- &VehicleInfo__UnsubscribeGps__request,
- &VehicleInfo__UnsubscribeGps__response,
- &VehicleInfo__SubscribeSpeed__request,
- &VehicleInfo__SubscribeSpeed__response,
- &VehicleInfo__UnsubscribeSpeed__request,
- &VehicleInfo__UnsubscribeSpeed__response,
- &VehicleInfo__SubscribeRpm__request,
- &VehicleInfo__SubscribeRpm__response,
- &VehicleInfo__UnsubscribeRpm__request,
- &VehicleInfo__UnsubscribeRpm__response,
- &VehicleInfo__SubscribeFuelLevel__request,
- &VehicleInfo__SubscribeFuelLevel__response,
- &VehicleInfo__UnsubscribeFuelLevel__request,
- &VehicleInfo__UnsubscribeFuelLevel__response,
- &VehicleInfo__SubscribeFuelLevel_State__request,
- &VehicleInfo__SubscribeFuelLevel_State__response,
- &VehicleInfo__UnsubscribeFuelLevel_State__request,
- &VehicleInfo__UnsubscribeFuelLevel_State__response,
- &VehicleInfo__SubscribeInstantFuelConsumption__request,
- &VehicleInfo__SubscribeInstantFuelConsumption__response,
- &VehicleInfo__UnsubscribeInstantFuelConsumption__request,
- &VehicleInfo__UnsubscribeInstantFuelConsumption__response,
- &VehicleInfo__SubscribeExternalTemperature__request,
- &VehicleInfo__SubscribeExternalTemperature__response,
- &VehicleInfo__UnsubscribeExternalTemperature__request,
- &VehicleInfo__UnsubscribeExternalTemperature__response,
- &VehicleInfo__SubscribePrndl__request,
- &VehicleInfo__SubscribePrndl__response,
- &VehicleInfo__UnsubscribePrndl__request,
- &VehicleInfo__UnsubscribePrndl__response,
- &VehicleInfo__SubscribeVin__request,
- &VehicleInfo__SubscribeVin__response,
- &VehicleInfo__UnsubscribeVin__request,
- &VehicleInfo__UnsubscribeVin__response,
- &VehicleInfo__SubscribeTirePressure__request,
- &VehicleInfo__SubscribeTirePressure__response,
- &VehicleInfo__UnsubscribeTirePressure__request,
- &VehicleInfo__UnsubscribeTirePressure__response,
- &VehicleInfo__SubscribeOdometer__request,
- &VehicleInfo__SubscribeOdometer__response,
- &VehicleInfo__UnsubscribeOdometer__request,
- &VehicleInfo__UnsubscribeOdometer__response,
- &VehicleInfo__SubscribeBeltStatus__request,
- &VehicleInfo__SubscribeBeltStatus__response,
- &VehicleInfo__UnsubscribeBeltStatus__request,
- &VehicleInfo__UnsubscribeBeltStatus__response,
- &VehicleInfo__SubscribeBodyInformation__request,
- &VehicleInfo__SubscribeBodyInformation__response,
- &VehicleInfo__UnsubscribeBodyInformation__request,
- &VehicleInfo__UnsubscribeBodyInformation__response,
- &VehicleInfo__SubscribeDeviceStatus__request,
- &VehicleInfo__SubscribeDeviceStatus__response,
- &VehicleInfo__UnsubscribeDeviceStatus__request,
- &VehicleInfo__UnsubscribeDeviceStatus__response,
- &VehicleInfo__SubscribeDriverBraking__request,
- &VehicleInfo__SubscribeDriverBraking__response,
- &VehicleInfo__UnsubscribeDriverBraking__request,
- &VehicleInfo__UnsubscribeDriverBraking__response,
- &VehicleInfo__SubscribeWiperStatus__request,
- &VehicleInfo__SubscribeWiperStatus__response,
- &VehicleInfo__UnsubscribeWiperStatus__request,
- &VehicleInfo__UnsubscribeWiperStatus__response,
- &VehicleInfo__SubscribeHeadLampStatus__request,
- &VehicleInfo__SubscribeHeadLampStatus__response,
- &VehicleInfo__UnsubscribeHeadLampStatus__request,
- &VehicleInfo__UnsubscribeHeadLampStatus__response,
- &VehicleInfo__SubscribeEngineTorque__request,
- &VehicleInfo__SubscribeEngineTorque__response,
- &VehicleInfo__UnsubscribeEngineTorque__request,
- &VehicleInfo__UnsubscribeEngineTorque__response,
- &VehicleInfo__SubscribeAccPedalPosition__request,
- &VehicleInfo__SubscribeAccPedalPosition__response,
- &VehicleInfo__UnsubscribeAccPedalPosition__request,
- &VehicleInfo__UnsubscribeAccPedalPosition__response,
- &VehicleInfo__SubscribeSteeringWheelAngle__request,
- &VehicleInfo__SubscribeSteeringWheelAngle__response,
- &VehicleInfo__UnsubscribeSteeringWheelAngle__request,
- &VehicleInfo__UnsubscribeSteeringWheelAngle__response,
- &VehicleInfo__SubscribeECallInfo__request,
- &VehicleInfo__SubscribeECallInfo__response,
- &VehicleInfo__UnsubscribeECallInfo__request,
- &VehicleInfo__UnsubscribeECallInfo__response,
- &VehicleInfo__SubscribeAirbagStatus__request,
- &VehicleInfo__SubscribeAirbagStatus__response,
- &VehicleInfo__UnsubscribeAirbagStatus__request,
- &VehicleInfo__UnsubscribeAirbagStatus__response,
- &VehicleInfo__SubscribeEmergencyEvent__request,
- &VehicleInfo__SubscribeEmergencyEvent__response,
- &VehicleInfo__UnsubscribeEmergencyEvent__request,
- &VehicleInfo__UnsubscribeEmergencyEvent__response,
- &VehicleInfo__SubscribeClusterModeStatus__request,
- &VehicleInfo__SubscribeClusterModeStatus__response,
- &VehicleInfo__UnsubscribeClusterModeStatus__request,
- &VehicleInfo__UnsubscribeClusterModeStatus__response,
- &VehicleInfo__SubscribeMyKey__request,
- &VehicleInfo__SubscribeMyKey__response,
- &VehicleInfo__UnsubscribeMyKey__request,
- &VehicleInfo__UnsubscribeMyKey__response,
- &SDL__ActivateApp__request,
- &SDL__ActivateApp__response,
- &SDL__GetUserFriendlyMessage__request,
- &SDL__GetUserFriendlyMessage__response,
- &SDL__OnAllowSDLFunctionality__notification,
- &SDL__OnReceivedPolicyUpdate__notification,
- &SDL__OnPolicyUpdate__notification,
- &SDL__GetListOfPermissions__request,
- &SDL__GetListOfPermissions__response,
- &SDL__OnAppPermissionConsent__notification,
- &SDL__OnAppPermissionChanged__notification,
- &SDL__OnSDLConsentNeeded__notification,
- &SDL__UpdateSDL__request,
- &SDL__UpdateSDL__response,
- &SDL__GetStatusUpdate__request,
- &SDL__GetStatusUpdate__response,
- &SDL__OnStatusUpdate__notification,
- &SDL__OnSystemError__notification,
- &SDL__AddStatisticsInfo__notification,
- &SDL__GetURLS__request,
- &SDL__GetURLS__response,
- &SDL__OnDeviceStateChanged__notification,
- &RC__IsReady__request,
- &RC__IsReady__response,
- &RC__GetCapabilities__request,
- &RC__GetCapabilities__response,
- &RC__SetInteriorVehicleData__request,
- &RC__SetInteriorVehicleData__response,
- &RC__GetInteriorVehicleData__request,
- &RC__GetInteriorVehicleData__response,
- &RC__GetInteriorVehicleDataConsent__request,
- &RC__GetInteriorVehicleDataConsent__response,
- &RC__OnInteriorVehicleData__notification,
- &RC__OnRemoteControlSettings__notification,
- NULL};
-}
diff --git a/src/components/dbus/src/schema.cc b/src/components/dbus/src/schema.cc
deleted file mode 100644
index 3107d9ce6c..0000000000
--- a/src/components/dbus/src/schema.cc
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-#include "dbus/schema.h"
-
-#include <algorithm>
-#include <functional>
-
-namespace dbus {
-
-struct Description {
- MessageId id;
- MessageName name;
- MessageType type;
- ListArgs args;
-};
-
-struct IsId : public std::unary_function<const Description*, bool> {
- explicit IsId(MessageId id) : id_(id) {}
- bool operator()(const Description* desc) {
- return desc->id == id_;
- }
-
- private:
- MessageId id_;
-};
-
-struct IsName : public std::unary_function<const Description*, bool> {
- explicit IsName(const MessageName& name) : name_(name) {}
- bool operator()(const Description* desc) {
- return desc->name == name_;
- }
-
- private:
- MessageName name_;
-};
-
-struct IsIdType : public std::unary_function<const Description*, bool> {
- explicit IsIdType(const MessageId& id, const MessageType& type)
- : id_(id), type_(type) {}
- bool operator()(const Description* desc) {
- return desc->id == id_ && desc->type == type_;
- }
-
- private:
- MessageId id_;
- MessageType type_;
-};
-
-struct IsNameType : public std::unary_function<const Description*, bool> {
- explicit IsNameType(const MessageName& name, const MessageType& type)
- : name_(name), type_(type) {}
- bool operator()(const Description* desc) {
- return desc->name == name_ && desc->type == type_;
- }
-
- private:
- MessageName name_;
- MessageType type_;
-};
-
-DBusSchema::DBusSchema(const MessageDescription** array) {
- const MessageDescription** msg = array;
- while (*msg != NULL) {
- Description* desc = new Description();
- desc->id = (*msg)->function_id;
- desc->name = std::make_pair((*msg)->interface, (*msg)->name);
- desc->type = (*msg)->message_type;
- const ParameterDescription** param;
- param = (*msg)->parameters;
- while (*param != NULL) {
- desc->args.push_back(*param);
- param++;
- }
- msgs_.push_back(desc);
- msg++;
- }
-}
-
-MessageName DBusSchema::getMessageName(MessageId id) const {
- Messages::const_iterator it =
- std::find_if(msgs_.begin(), msgs_.end(), IsId(id));
- if (msgs_.end() != it) {
- return (*it)->name;
- }
- return MessageName();
-}
-
-MessageId DBusSchema::getMessageId(const MessageName& name) const {
- Messages::const_iterator it =
- std::find_if(msgs_.begin(), msgs_.end(), IsName(name));
- if (msgs_.end() != it) {
- return (*it)->id;
- }
- return hmi_apis::FunctionID::eType::INVALID_ENUM;
-}
-
-ListArgs DBusSchema::getListArgs(MessageId id, MessageType type) const {
- Messages::const_iterator it =
- std::find_if(msgs_.begin(), msgs_.end(), IsIdType(id, type));
- if (msgs_.end() != it) {
- return (*it)->args;
- }
- return ListArgs();
-}
-
-ListArgs DBusSchema::getListArgs(const MessageName& name,
- MessageType type) const {
- Messages::const_iterator it =
- std::find_if(msgs_.begin(), msgs_.end(), IsNameType(name, type));
- if (msgs_.end() != it) {
- return (*it)->args;
- }
- return ListArgs();
-}
-
-} // namespace dbus_schema
diff --git a/src/components/dbus/test/CMakeLists.txt b/src/components/dbus/test/CMakeLists.txt
deleted file mode 100644
index 914bd2ca84..0000000000
--- a/src/components/dbus/test/CMakeLists.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2014, Ford Motor Company
-# 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 Ford Motor Company 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 HOLDER 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.
-
-include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
-
-include_directories (
- ${GMOCK_INCLUDE_DIRECTORY}
- ${COMPONENTS_DIR}/dbus/include/
- ${COMPONENTS_DIR}/dbus/test/include/
-)
-
-#FIXME: exclude some tests
-set (EXCLUDE_PATHS
- dbus_message_controller_test.cc
-)
-
-collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" ${EXCLUDE_PATHS})
-
-set (LIBRARIES
- gmock
- DBus
- formatters
- SmartObjects
-)
-
-create_test(test_DBus_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/components/dbus/test/dbus_message_controller_test.cc b/src/components/dbus/test/dbus_message_controller_test.cc
deleted file mode 100644
index c06e144f9b..0000000000
--- a/src/components/dbus/test/dbus_message_controller_test.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * \file test_dbus_adapter.cc
- * \brief
- *
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#include <pthread.h>
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-#include "dbus/mock_dbus_message_controller.h"
-#include "dbus/mock_subscriber.h"
-
-using ::testing::_;
-
-namespace test {
-namespace components {
-namespace dbus {
-
-ACTION_P(SignalTest, test) {
- if (test->thread_id != pthread_self()) {
- pthread_mutex_lock(&test->test_mutex);
- pthread_cond_signal(&test->test_cond);
- pthread_mutex_unlock(&test->test_mutex);
- } else {
- test->one_thread = true;
- }
-}
-
-class DBusMessageControllerTest : public ::testing::Test {
- public:
- volatile bool one_thread;
- pthread_t thread_id;
- static pthread_mutex_t test_mutex;
- static pthread_cond_t test_cond;
-
- protected:
- MockDBusMessageController* controller_;
- MockSubscriber* subscriber_;
-
- static void SetUpTestCase() {}
-
- static void TearDownTestCase() {}
-
- virtual void SetUp() {
- const std::string kService = "sdl.core.test_api";
- const std::string kPath = "/dbus_test";
- controller_ = new MockDBusMessageController(kService, kPath);
- subscriber_ = new MockSubscriber(kService, kPath);
- ASSERT_TRUE(controller_->Init());
- ASSERT_TRUE(subscriber_->Start());
- }
-
- void TearDown() OVERRIDE {
- delete controller_;
- delete subscriber_;
- }
-
- bool waitCond(int seconds) {
- if (one_thread)
- return true;
- timespec elapsed;
- clock_gettime(CLOCK_REALTIME, &elapsed);
- elapsed.tv_sec += seconds;
- return pthread_cond_timedwait(&test_cond, &test_mutex, &elapsed) !=
- ETIMEDOUT;
- }
-};
-
-pthread_mutex_t DBusMessageControllerTest::test_mutex;
-pthread_cond_t DBusMessageControllerTest::test_cond;
-
-TEST_F(DBusMessageControllerTest, Receive) {
- std::string text = "Test message for call method DBus";
- EXPECT_CALL(*controller_, Recv(text)).Times(1).WillOnce(SignalTest(this));
- subscriber_->Send(text);
- EXPECT_TRUE(waitCond(1));
-}
-
-TEST_F(DBusMessageControllerTest, DISABLED_Send) {
- const std::string kText = "Test message for signal DBus";
- // EXPECT_CALL(*subscriber_, Receive(kText)).Times(1);
- controller_->Send(kText);
-}
-
-} // namespace dbus
-} // namespace components
-} // namespace test
diff --git a/src/components/dbus/test/include/dbus/mock_dbus_message_controller.h b/src/components/dbus/test/include/dbus/mock_dbus_message_controller.h
deleted file mode 100644
index 30410a6c7e..0000000000
--- a/src/components/dbus/test/include/dbus/mock_dbus_message_controller.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-* Copyright (c) 2014, Ford Motor Company
-* 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 Ford Motor Company 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 HOLDER 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.
-*/
-
-#ifndef SRC_COMPONENTS_DBUS_TEST_INCLUDE_DBUS_MOCK_DBUS_MESSAGE_CONTROLLER_H_
-#define SRC_COMPONENTS_DBUS_TEST_INCLUDE_DBUS_MOCK_DBUS_MESSAGE_CONTROLLER_H_
-
-#include <pthread.h>
-#include "dbus/dbus_message_controller.h"
-
-namespace test {
-namespace components {
-namespace dbus_test {
-
-class MockDBusMessageController : public ::dbus::DBusMessageController {
- public:
- MOCK_METHOD1(Recv, void(std::string&));
-
- MockDBusMessageController(const std::string& serviceName,
- const std::string& path)
- : DBusMessageController(serviceName, path), thread_() {}
-
- virtual void processResponse(std::string method, Json::Value& root) {}
- virtual void processRequest(Json::Value& root) {}
- virtual void processNotification(Json::Value& root) {}
-
- bool Init() {
- return ::hmi_message_handler::DBusMessageController::Init() &&
- pthread_create(&thread_, 0, &Run, this) == 0;
- }
-
- private:
- pthread_t thread_;
- static void* Run(void* data) {
- if (NULL != data) {
- static_cast<MockDBusMessageController*>(data)
- ->MethodForReceiverThread(nullptr);
- }
- return 0;
- }
-};
-
-} // namespace dbus_test
-} // namespace components
-} // namespace test
-
-#endif // SRC_COMPONENTS_DBUS_TEST_INCLUDE_DBUS_MOCK_DBUS_MESSAGE_CONTROLLER_H_
diff --git a/src/components/dbus/test/include/dbus/mock_subscriber.h b/src/components/dbus/test/include/dbus/mock_subscriber.h
deleted file mode 100644
index b2a369e371..0000000000
--- a/src/components/dbus/test/include/dbus/mock_subscriber.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-* Copyright (c) 2014, Ford Motor Company
-* 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 Ford Motor Company 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 HOLDER 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.
-*/
-
-#ifndef SRC_COMPONENTS_DBUS_TEST_INCLUDE_DBUS_MOCK_SUBSCRIBER_H_
-#define SRC_COMPONENTS_DBUS_TEST_INCLUDE_DBUS_MOCK_SUBSCRIBER_H_
-
-#include <string>
-
-struct DBusConnection;
-
-namespace test {
-namespace components {
-namespace dbus {
-
-class MockSubscriber {
- public:
- MockSubscriber(const std::string nameService, const std::string path);
- virtual ~MockSubscriber();
- virtual void Receive();
- bool Start();
- void Send(const std::string& message);
-
- private:
- std::string nameService_;
- std::string path_;
- DBusConnection* conn_;
-};
-
-} // namespace dbus
-} // namespace components
-} // namespace test
-
-#endif // SRC_COMPONENTS_DBUS_TEST_INCLUDE_DBUS_MOCK_SUBSCRIBER_H_
diff --git a/src/components/dbus/test/mock_subscriber.cc b/src/components/dbus/test/mock_subscriber.cc
deleted file mode 100644
index 2c5dccaa50..0000000000
--- a/src/components/dbus/test/mock_subscriber.cc
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
-* Copyright (c) 2014, Ford Motor Company
-* 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 Ford Motor Company 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 HOLDER 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.
-*/
-
-#include "dbus/dbus.h"
-#include "dbus/mock_subscriber.h"
-
-namespace test {
-namespace components {
-namespace dbus {
-
-MockSubscriber::MockSubscriber(const std::string nameService,
- const std::string path)
- : nameService_(nameService), path_(path), conn_(NULL) {}
-
-MockSubscriber::~MockSubscriber() {}
-
-void MockSubscriber::Receive() {}
-
-bool MockSubscriber::Start() {
- DBusError err;
- dbus_error_init(&err);
- conn_ = dbus_bus_get(DBUS_BUS_SESSION, &err);
- if (dbus_error_is_set(&err)) {
- dbus_error_free(&err);
- return false;
- }
-
- std::string rule = "type='signal',interface='" + nameService_ + "'";
- dbus_bus_add_match(conn_, rule.c_str(), &err);
- dbus_connection_flush(conn_);
- if (dbus_error_is_set(&err)) {
- dbus_error_free(&err);
- return false;
- }
- return true;
-}
-
-void MockSubscriber::Send(const std::string& message) {}
-
-} // namespace dbus
-} // namespace components
-} // namespace test
diff --git a/src/components/dbus/test/schema_test.cc b/src/components/dbus/test/schema_test.cc
deleted file mode 100644
index 37831279b9..0000000000
--- a/src/components/dbus/test/schema_test.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * \file test_schema.cc
- * \brief
- *
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#include <gtest/gtest.h>
-#include "dbus/schema.h"
-
-using dbus::DBusSchema;
-using dbus::MessageId;
-using dbus::MessageName;
-using dbus::MessageType;
-using dbus::ListArgs;
-using ford_message_descriptions::ParameterDescription;
-
-namespace test {
-namespace components {
-namespace dbus {
-
-class DBusSchemaTest : public ::testing::Test {
- protected:
- static void SetUpTestCase() {
- schema_ = new DBusSchema(ford_message_descriptions::message_descriptions);
- }
-
- static void TearDownTestCase() {
- delete schema_;
- }
-
- static const DBusSchema* schema_;
- static const int test_negative_value = -3;
-};
-
-const DBusSchema* DBusSchemaTest::schema_ = 0;
-
-TEST_F(DBusSchemaTest, GetName) {
- const MessageId kId = hmi_apis::FunctionID::Buttons_GetCapabilities;
- const MessageName kExpName("Buttons", "GetCapabilities");
- MessageName name = schema_->getMessageName(kId);
- EXPECT_EQ(kExpName, name);
-
- const MessageId kIdWrong = static_cast<const MessageId>(test_negative_value);
- const MessageName kExpNameWrong("", "");
- name = schema_->getMessageName(kIdWrong);
- EXPECT_EQ(kExpNameWrong, name);
-}
-
-TEST_F(DBusSchemaTest, GetId) {
- const MessageName kName("Buttons", "GetCapabilities");
- const MessageId kExpId = hmi_apis::FunctionID::Buttons_GetCapabilities;
- MessageId id = schema_->getMessageId(kName);
- EXPECT_EQ(kExpId, id);
-
- const MessageName kNameWrong("TestInterface", "TestMessage");
- const MessageId kExpIdWrong = hmi_apis::FunctionID::INVALID_ENUM;
- id = schema_->getMessageId(kNameWrong);
- EXPECT_EQ(kExpIdWrong, id);
-}
-
-TEST_F(DBusSchemaTest, GetListArg) {
- const MessageName kName("Buttons", "GetCapabilities");
- const MessageType kType = hmi_apis::messageType::response;
- const MessageId kId = hmi_apis::FunctionID::Buttons_GetCapabilities;
- ListArgs argsName = schema_->getListArgs(kName, kType);
- const ParameterDescription** params =
- ford_message_descriptions::message_descriptions[1]->parameters;
- EXPECT_EQ(params[0], argsName[0]);
- EXPECT_EQ(params[1], argsName[1]);
-
- ListArgs argsId = schema_->getListArgs(kId, kType);
- EXPECT_EQ(params[0], argsId[0]);
- EXPECT_EQ(params[1], argsId[1]);
-
- const MessageId kIdWrong = static_cast<const MessageId>(test_negative_value);
- const MessageName kNameWrong("TestInterface", "TestMessage");
- const MessageType kTypeWrong =
- static_cast<const MessageType>(test_negative_value);
- const ListArgs kExpListWrong;
- argsName = schema_->getListArgs(kNameWrong, kTypeWrong);
- EXPECT_EQ(kExpListWrong, argsName);
-
- argsId = schema_->getListArgs(kIdWrong, kTypeWrong);
- EXPECT_EQ(kExpListWrong, argsId);
-}
-
-} // namespace dbus
-} // namespace components
-} // namespace test
diff --git a/src/components/hmi_message_handler/CMakeLists.txt b/src/components/hmi_message_handler/CMakeLists.txt
index 9fb233b446..8fafee1ac5 100644
--- a/src/components/hmi_message_handler/CMakeLists.txt
+++ b/src/components/hmi_message_handler/CMakeLists.txt
@@ -43,7 +43,6 @@ include_directories (
${MESSAGE_BROKER_INCLUDE_DIRECTORY}
${COMPONENTS_DIR}
${CMAKE_BINARY_DIR}/src/components/
- ${COMPONENTS_DIR}/dbus/include/
${CMAKE_SOURCE_DIR}/
${LOG4CXX_INCLUDE_DIRECTORY}
${COMPONENTS_DIR}/hmi_message_handler/include
@@ -56,14 +55,6 @@ set(PATHS
${CMAKE_CURRENT_SOURCE_DIR}/src
)
-if (HMIADAPTER STREQUAL "dbus")
- set(EXCLUDE_PATHS messagebroker_adapter.cc)
- set(DBUS_ADAPTER DBus)
-else()
- set(EXCLUDE_PATHS dbus_message_adapter.cc)
- set(DBUS_ADAPTER)
-endif ()
-
list(APPEND EXCLUDE_PATHS
mqueue_adapter.cc
)
@@ -72,7 +63,6 @@ collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
set(LIBRARIES
Utils
- ${DBUS_ADAPTER}
${RTLIB}
)
diff --git a/src/components/hmi_message_handler/include/hmi_message_handler/dbus_message_adapter.h b/src/components/hmi_message_handler/include/hmi_message_handler/dbus_message_adapter.h
deleted file mode 100644
index beb7a9ad1d..0000000000
--- a/src/components/hmi_message_handler/include/hmi_message_handler/dbus_message_adapter.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_HMI_MESSAGE_HANDLER_INCLUDE_HMI_MESSAGE_HANDLER_DBUS_MESSAGE_ADAPTER_H_
-#define SRC_COMPONENTS_HMI_MESSAGE_HANDLER_INCLUDE_HMI_MESSAGE_HANDLER_DBUS_MESSAGE_ADAPTER_H_
-
-#include <string>
-#include "hmi_message_handler/hmi_message_adapter_impl.h"
-#include "dbus/dbus_message_controller.h"
-#include "smart_objects/smart_object.h"
-
-namespace hmi_message_handler {
-
-/**
- * \brief adapter for DBus
- */
-class DBusMessageAdapter : public HMIMessageAdapterImpl,
- public dbus::DBusMessageController {
- public:
- typedef utils::SharedPtr<application_manager::Message> MessageSharedPointer;
- explicit DBusMessageAdapter(HMIMessageHandler* hmi_msg_handler);
- ~DBusMessageAdapter();
- void SendMessageToHMI(MessageSharedPointer message);
-
- /**
- * \brief subscribes to signals
- */
- void SubscribeTo();
-
- private:
- static const std::string SDL_SERVICE_NAME;
- static const std::string SDL_OBJECT_PATH;
- static const std::string HMI_SERVICE_NAME;
- static const std::string HMI_OBJECT_PATH;
-
- /**
- * \brief sends request to HMI
- * \param obj request
- */
- void Request(const smart_objects::SmartObject& obj);
-
- /**
- * \brief sends notification to HMI
- * \param obj notification
- */
- void Notification(const smart_objects::SmartObject& obj);
-
- /**
- * \brief sends response to HMI
- * \param obj response
- */
- void Response(const smart_objects::SmartObject& obj);
-
- /**
- * \brief sends error response to HMI
- * \param obj error
- */
- void ErrorResponse(const smart_objects::SmartObject& obj);
-
- /**
- * \brief sends message to core
- * \param obj
- */
- void SendMessageToCore(const smart_objects::SmartObject& obj);
-};
-
-} // namespace hmi_message_handler
-
-#endif // SRC_COMPONENTS_HMI_MESSAGE_HANDLER_INCLUDE_HMI_MESSAGE_HANDLER_DBUS_MESSAGE_ADAPTER_H_
diff --git a/src/components/hmi_message_handler/src/dbus_message_adapter.cc b/src/components/hmi_message_handler/src/dbus_message_adapter.cc
deleted file mode 100644
index 5b0b11e557..0000000000
--- a/src/components/hmi_message_handler/src/dbus_message_adapter.cc
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#include "hmi_message_handler/dbus_message_adapter.h"
-#include <sstream>
-#include "utils/logger.h"
-#include "formatters/CSmartFactory.h"
-#include "smart_objects/smart_object.h"
-
-namespace sos = NsSmartDeviceLink::NsJSONHandler::strings;
-
-namespace hmi_message_handler {
-
-CREATE_LOGGERPTR_GLOBAL(logger_, "HMIMessageHandler")
-
-const std::string DBusMessageAdapter::SDL_SERVICE_NAME = "com.ford.sdl.core";
-const std::string DBusMessageAdapter::SDL_OBJECT_PATH = "/";
-const std::string DBusMessageAdapter::HMI_SERVICE_NAME = "com.ford.sdl.hmi";
-const std::string DBusMessageAdapter::HMI_OBJECT_PATH = "/";
-
-std::vector<std::string>& split(const std::string& s,
- char delim,
- std::vector<std::string>& elems) {
- std::stringstream ss(s);
- std::string item;
- while (std::getline(ss, item, delim)) {
- elems.push_back(item);
- }
- return elems;
-}
-
-DBusMessageAdapter::DBusMessageAdapter(HMIMessageHandler* hmi_msg_handler)
- : HMIMessageAdapterImpl(hmi_msg_handler)
- , DBusMessageController(SDL_SERVICE_NAME,
- SDL_OBJECT_PATH,
- HMI_SERVICE_NAME,
- HMI_OBJECT_PATH) {
- LOG4CXX_INFO(logger_, "Created DBusMessageAdapter");
-}
-
-DBusMessageAdapter::~DBusMessageAdapter() {}
-
-void DBusMessageAdapter::SendMessageToHMI(MessageSharedPointer message) {
- LOG4CXX_INFO(logger_, "DBusMessageAdapter::sendMessageToHMI");
-
- const smart_objects::SmartObject& smart = message->smart_object();
- switch (smart[sos::S_PARAMS][sos::S_MESSAGE_TYPE].asInt()) {
- case hmi_apis::messageType::request:
- Request(smart);
- break;
- case hmi_apis::messageType::notification:
- Notification(smart);
- break;
- case hmi_apis::messageType::response:
- Response(smart);
- break;
- case hmi_apis::messageType::error_response:
- ErrorResponse(smart);
- break;
- case hmi_apis::messageType::INVALID_ENUM:
- default:
- LOG4CXX_WARN(logger_, "Message type is invalid");
- }
-}
-
-void DBusMessageAdapter::SubscribeTo() {
- LOG4CXX_INFO(logger_, "DBusMessageAdapter::subscribeTo");
- DBusMessageController::SubscribeTo("Buttons", "OnButtonEvent");
- DBusMessageController::SubscribeTo("Buttons", "OnButtonPress");
- DBusMessageController::SubscribeTo("UI", "OnCommand");
- DBusMessageController::SubscribeTo("UI", "OnDriverDistraction");
- DBusMessageController::SubscribeTo("UI", "OnSystemContext");
- DBusMessageController::SubscribeTo("UI", "OnLanguageChange");
- DBusMessageController::SubscribeTo("UI", "OnKeyboardInput");
- DBusMessageController::SubscribeTo("UI", "OnTouchEvent");
- DBusMessageController::SubscribeTo("UI", "OnResetTimeout");
- DBusMessageController::SubscribeTo("TTS", "OnResetTimeout");
- DBusMessageController::SubscribeTo("VR", "Started");
- DBusMessageController::SubscribeTo("VR", "Stopped");
- DBusMessageController::SubscribeTo("VR", "OnCommand");
- DBusMessageController::SubscribeTo("VR", "OnLanguageChange");
- DBusMessageController::SubscribeTo("BasicCommunication", "OnReady");
- DBusMessageController::SubscribeTo("BasicCommunication", "OnAppDeactivated");
- DBusMessageController::SubscribeTo("BasicCommunication",
- "OnStartDeviceDiscovery");
- DBusMessageController::SubscribeTo("BasicCommunication",
- "OnUpdateDeviceList");
- DBusMessageController::SubscribeTo("BasicCommunication",
- "OnFindApplications");
- DBusMessageController::SubscribeTo("BasicCommunication", "OnAppActivated");
- DBusMessageController::SubscribeTo("BasicCommunication", "OnExitApplication");
- DBusMessageController::SubscribeTo("BasicCommunication",
- "OnExitAllApplications");
- DBusMessageController::SubscribeTo("BasicCommunication", "OnDeviceChosen");
- DBusMessageController::SubscribeTo("BasicCommunication",
- "OnIgnitionCycleOver");
- DBusMessageController::SubscribeTo("BasicCommunication", "OnSystemRequest");
- DBusMessageController::SubscribeTo("BasicCommunication",
- "OnSystemInfoChanged");
- DBusMessageController::SubscribeTo("TTS", "Started");
- DBusMessageController::SubscribeTo("TTS", "Stopped");
- DBusMessageController::SubscribeTo("TTS", "OnLanguageChange");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnGpsData");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnSpeed");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnRpm");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnFuelLevel");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnFuelLevelState");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnInstantFuelConsumption");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnExternalTemperature");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnVin");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnPrndl");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnTirePressure");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnOdometer");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnBeltStatus");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnBodyInformation");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnDeviceStatus");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnDriverBraking");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnWiperStatus");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnHeadLampStatus");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnEngineTorque");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnAccPedalPosition");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnSteeringWheelAngle");
- DBusMessageController::SubscribeTo("VehicleInfo", "OnMyKey");
- DBusMessageController::SubscribeTo("Navigation", "OnTBTClientState");
- DBusMessageController::SubscribeTo("Navigation", "OnWayPointChange");
- DBusMessageController::SubscribeTo("SDL", "OnAllowSDLFunctionality");
- DBusMessageController::SubscribeTo("SDL", "OnReceivedPolicyUpdate");
- DBusMessageController::SubscribeTo("SDL", "OnPolicyUpdate");
- DBusMessageController::SubscribeTo("SDL", "OnAppPermissionConsent");
- DBusMessageController::SubscribeTo("SDL", "OnSystemError");
- DBusMessageController::SubscribeTo("SDL", "AddStatisticsInfo");
- DBusMessageController::SubscribeTo("SDL", "OnDeviceStateChanged");
-
- LOG4CXX_INFO(logger_, "Subscribed to notifications.");
-}
-
-void DBusMessageAdapter::SendMessageToCore(
- const smart_objects::SmartObject& obj) {
- LOG4CXX_AUTO_TRACE(logger_);
-
- if (!handler()) {
- LOG4CXX_WARN(logger_, "DBusMessageAdapter hasn't handler");
- return;
- }
-
- MessageSharedPointer message = new application_manager::Message(
- protocol_handler::MessagePriority::kDefault); // todo: ykazakov constant
- // is a temp solution to
- // finish
- // merge
- // MessagePriority::FromServiceType(message.servicetype)
- // shall be used instead
- message->set_protocol_version(
- protocol_handler::MajorProtocolVersion::PROTOCOL_VERSION_HMI);
- message->set_smart_object(obj);
- handler()->OnMessageReceived(message);
- LOG4CXX_INFO(logger_, "Successfully sent to observer");
-}
-
-void DBusMessageAdapter::Request(const smart_objects::SmartObject& obj) {
- LOG4CXX_AUTO_TRACE(logger_);
- dbus::MessageId func_id = static_cast<dbus::MessageId>(
- obj[sos::S_PARAMS][sos::S_FUNCTION_ID].asInt());
- dbus::MessageName name = get_schema().getMessageName(func_id);
- uint id = obj[sos::S_PARAMS][sos::S_CORRELATION_ID].asInt();
- MethodCall(id, func_id, name, obj[sos::S_MSG_PARAMS]);
-}
-
-void DBusMessageAdapter::Notification(const smart_objects::SmartObject& obj) {
- LOG4CXX_AUTO_TRACE(logger_);
- dbus::MessageId func_id = static_cast<dbus::MessageId>(
- obj[sos::S_PARAMS][sos::S_FUNCTION_ID].asInt());
- dbus::MessageName name = get_schema().getMessageName(func_id);
- Signal(func_id, name, obj[sos::S_MSG_PARAMS]);
-}
-
-void DBusMessageAdapter::Response(const smart_objects::SmartObject& obj) {
- LOG4CXX_AUTO_TRACE(logger_);
- dbus::MessageId func_id = static_cast<dbus::MessageId>(
- obj[sos::S_PARAMS][sos::S_FUNCTION_ID].asInt());
- dbus::MessageName name = get_schema().getMessageName(func_id);
- uint id = obj[sos::S_PARAMS][sos::S_CORRELATION_ID].asInt();
- MethodReturn(id, func_id, name, obj[sos::S_MSG_PARAMS]);
-}
-
-void DBusMessageAdapter::ErrorResponse(const smart_objects::SmartObject& obj) {
- LOG4CXX_DEBUG(logger_, "Error");
- std::string error = obj[sos::S_PARAMS][sos::kCode].asString();
- std::string description = obj[sos::S_PARAMS][sos::kMessage].asString();
- uint id = obj[sos::S_PARAMS][sos::S_CORRELATION_ID].asInt();
- Error(id, error, description);
-}
-
-} // namespace hmi_message_handler
diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h
index 0888e1fc90..f514168c53 100644
--- a/src/components/include/application_manager/application_manager.h
+++ b/src/components/include/application_manager/application_manager.h
@@ -263,6 +263,14 @@ class ApplicationManager {
const utils::SharedPtr<Application> app) = 0;
/**
+ * @brief Checks if driver distraction state is valid, creates message
+ * which is sent to the application if allowed, otherwise it is added
+ * to a list of postponed messages.
+ * @param application contains registered application.
+ */
+ virtual void SendDriverDistractionState(ApplicationSharedPtr application) = 0;
+
+ /**
* DEPRECATED
* @brief Checks if Application is subscribed for way points
* @param Application AppID
@@ -322,6 +330,19 @@ class ApplicationManager {
virtual mobile_api::HMILevel::eType GetDefaultHmiLevel(
ApplicationConstSharedPtr application) const = 0;
+
+ /**
+ * @brief Checks if required transport for resumption is available
+ *
+ * The required transport can be configured through smartDeviceLink.ini file.
+ *
+ * @param application an instance of the app to check
+ * @return true if the app is connected through one of the required
+ * transports, false otherwise
+ */
+ virtual bool CheckResumptionRequiredTransportAvailable(
+ ApplicationConstSharedPtr application) const = 0;
+
/**
* @brief hmi_capabilities return capabilities of hmi
* @return capabilities of hmi
diff --git a/src/components/include/application_manager/application_manager_settings.h b/src/components/include/application_manager/application_manager_settings.h
index e745a831c6..8f9d7496c8 100644
--- a/src/components/include/application_manager/application_manager_settings.h
+++ b/src/components/include/application_manager/application_manager_settings.h
@@ -38,6 +38,8 @@
#include <stdint.h>
#include <string>
+#include <map>
+#include <vector>
namespace application_manager {
class ApplicationManagerSettings : public RequestControlerSettings,
@@ -87,6 +89,13 @@ class ApplicationManagerSettings : public RequestControlerSettings,
virtual const uint32_t& app_resuming_timeout() const = 0;
virtual uint16_t attempts_to_open_resumption_db() const = 0;
virtual uint16_t open_attempt_timeout_ms_resumption_db() const = 0;
+ virtual const std::map<std::string, std::vector<std::string> >&
+ transport_required_for_resumption_map() const = 0;
+ virtual const std::string& navigation_lowbandwidth_resumption_level()
+ const = 0;
+ virtual const std::string& projection_lowbandwidth_resumption_level()
+ const = 0;
+ virtual const std::string& media_lowbandwidth_resumption_level() const = 0;
virtual void set_config_file_name(const std::string& fileName) = 0;
virtual const std::pair<uint32_t, int32_t>& start_stream_retry_amount()
const = 0;
diff --git a/src/components/include/connection_handler/connection_handler.h b/src/components/include/connection_handler/connection_handler.h
index 352f886aed..bfaacf5fc1 100644
--- a/src/components/include/connection_handler/connection_handler.h
+++ b/src/components/include/connection_handler/connection_handler.h
@@ -40,6 +40,7 @@
#include "connection_handler/connection.h"
#include "connection_handler/devices_discovery_starter.h"
#include "utils/macro.h"
+#include "utils/data_accessor.h"
/**
* \namespace connection_handler
@@ -51,6 +52,14 @@ enum CloseSessionReason { kCommon = 0, kFlood, kMalformed, kUnauthorizedApp };
class ConnectionHandlerObserver;
+// The SessionConnectionMap keeps track of the primary and secondary transports
+// associated with a session ID
+typedef struct {
+ transport_manager::ConnectionUID primary_transport;
+ transport_manager::ConnectionUID secondary_transport;
+} SessionTransports;
+typedef std::map<uint8_t, SessionTransports> SessionConnectionMap;
+
/**
* \class ConnectionHandler
* \brief SmartDeviceLink ConnectionHandler interface class
@@ -202,6 +211,43 @@ class ConnectionHandler {
virtual DevicesDiscoveryStarter& get_device_discovery_starter() = 0;
/**
+ * \brief Add a session. This is meant to be called from Connection class.
+ * \param primary_transport_id the primary connection ID to associate with the
+ * newly created session
+ * \return new session id, or 0 if failed
+ **/
+ virtual uint32_t AddSession(
+ const transport_manager::ConnectionUID primary_transport_id) = 0;
+
+ /**
+ * \brief Remove a session. This is meant to be called from Connection class.
+ * \param session_id ID of the session to remove
+ * \return true if successful, false otherwise
+ **/
+ virtual bool RemoveSession(uint8_t session_id) = 0;
+
+ virtual DataAccessor<SessionConnectionMap> session_connection_map() = 0;
+
+ /**
+ * \brief Associate a secondary transport ID with a session
+ * \param session_id the session ID
+ * \param connection_id the new secondary connection ID to associate with the
+ * session
+ * \return the SessionTransports (newly) associated with the session
+ **/
+ virtual SessionTransports SetSecondaryTransportID(
+ uint8_t session_id,
+ transport_manager::ConnectionUID secondary_transport_id) = 0;
+
+ /**
+ * \brief Retrieve the session transports associated with a session
+ * \param session_id the session ID
+ * \return the SessionTransports associated with the session
+ **/
+ virtual const SessionTransports GetSessionTransports(
+ uint8_t session_id) const = 0;
+
+ /**
* \brief Invoked when observer's OnServiceStartedCallback is completed
* \param session_key the key of started session passed to
* OnServiceStartedCallback().
@@ -217,6 +263,28 @@ class ConnectionHandler {
bool result,
std::vector<std::string>& rejected_params) = 0;
+ /**
+ * \brief Called when secondary transport with given session ID is established
+ * \param primary_connection_handle Set to identifier of primary connection
+ * \param secondary_connection_handle Identifier of secondary connection
+ * \param session_id session ID taken from Register Secondary Transport frame
+ * \return true if successful
+ **/
+ virtual bool OnSecondaryTransportStarted(
+ transport_manager::ConnectionUID& primary_connection_handle,
+ const transport_manager::ConnectionUID secondary_connection_handle,
+ const uint8_t session_id) = 0;
+
+ /**
+ * \brief Called when secondary transport shuts down
+ * \param primary_connection_handle Identifier of primary connection
+ * \param secondary_connection_handle Identifier of secondary connection
+ * transport
+ **/
+ virtual void OnSecondaryTransportEnded(
+ const transport_manager::ConnectionUID primary_connection_handle,
+ const transport_manager::ConnectionUID secondary_connection_handle) = 0;
+
protected:
/**
* \brief Destructor
diff --git a/src/components/include/connection_handler/connection_handler_observer.h b/src/components/include/connection_handler/connection_handler_observer.h
index b4c04c17c9..2f4ee94449 100644
--- a/src/components/include/connection_handler/connection_handler_observer.h
+++ b/src/components/include/connection_handler/connection_handler_observer.h
@@ -157,6 +157,23 @@ class ConnectionHandlerObserver {
virtual security_manager::SSLContext::HandshakeContext GetHandshakeContext(
uint32_t key) const = 0;
#endif // ENABLE_SECURITY
+
+ /**
+ * \brief Called when secondary transport for a particular app is started.
+ * \param device_handle Device identifier on which the secondary transport is
+ * started.
+ * \param session_key session ID representing the app
+ */
+ virtual void OnSecondaryTransportStartedCallback(
+ const connection_handler::DeviceHandle device_handle,
+ const int32_t session_key) = 0;
+
+ /**
+ * \brief Called when secondary transport for a particular app is terminated.
+ * \param session_key session ID representing the app
+ */
+ virtual void OnSecondaryTransportEndedCallback(const int32_t session_key) = 0;
+
protected:
/**
* \brief Destructor
diff --git a/src/components/include/protocol/bson_object_keys.h b/src/components/include/protocol/bson_object_keys.h
index 6f80aeec2b..56bd5cebd6 100644
--- a/src/components/include/protocol/bson_object_keys.h
+++ b/src/components/include/protocol/bson_object_keys.h
@@ -42,6 +42,12 @@ extern const char* height;
extern const char* width;
extern const char* video_protocol;
extern const char* video_codec;
+extern const char* secondary_transports;
+extern const char* audio_service_transports;
+extern const char* video_service_transports;
+extern const char* tcp_ip_address;
+extern const char* tcp_port;
+extern const char* reason;
} // namespace strings
diff --git a/src/components/include/protocol/common.h b/src/components/include/protocol/common.h
index 00d57a9bf5..1c95020a96 100644
--- a/src/components/include/protocol/common.h
+++ b/src/components/include/protocol/common.h
@@ -167,6 +167,22 @@ enum {
*/
FRAME_DATA_END_SERVICE_NACK = 0x06,
/**
+ *\brief Register Secondary Transport frame
+ */
+ FRAME_DATA_REGISTER_SECONDARY_TRANSPORT = 0x07,
+ /**
+ *\brief Register Secondary Transport acknowledgement frame
+ */
+ FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_ACK = 0x08,
+ /**
+ *\brief Register Secondary Transport not acknowledgement frame
+ */
+ FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_NACK = 0x09,
+ /**
+ *\brief Transport Event Update frame
+ */
+ FRAME_DATA_TRANSPORT_EVENT_UPDATE = 0xFD,
+ /**
*\brief Service data ACK frame
*/
FRAME_DATA_SERVICE_DATA_ACK = 0xFE,
diff --git a/src/components/include/protocol_handler/protocol_handler.h b/src/components/include/protocol_handler/protocol_handler.h
index 1da8d61e52..bb79964b12 100644
--- a/src/components/include/protocol_handler/protocol_handler.h
+++ b/src/components/include/protocol_handler/protocol_handler.h
@@ -100,7 +100,15 @@ class ProtocolHandler {
*/
virtual void SendEndSession(int32_t connection_id, uint8_t session_id) = 0;
- virtual void SendEndService(int32_t connection_id,
+ /**
+ * \brief Sends ending session to mobile application
+ * \param primary_connection_id Identifier of connection within which
+ * service exists
+ * \param connection_id Identifier of the actual transport for the service
+ * \param session_id ID of session to be ended
+ */
+ virtual void SendEndService(int32_t primary_connection_id,
+ int32_t connection_id,
uint8_t session_id,
uint8_t service_type) = 0;
diff --git a/src/components/include/protocol_handler/protocol_handler_settings.h b/src/components/include/protocol_handler/protocol_handler_settings.h
index e1107cb2a9..c4f9bb6420 100644
--- a/src/components/include/protocol_handler/protocol_handler_settings.h
+++ b/src/components/include/protocol_handler/protocol_handler_settings.h
@@ -51,6 +51,28 @@ class ProtocolHandlerSettings {
*/
virtual const std::vector<int>& force_unprotected_service() const = 0;
#endif // ENABLE_SECURITY
+
+ /**
+ * @brief Returns true multiple transports is enabled
+ */
+ virtual const bool multiple_transports_enabled() const = 0;
+
+ /**
+ * @brief Returns list of secondary transports available
+ * for the named primary transport
+ */
+ virtual const std::vector<std::string>& secondary_transports_for_bluetooth()
+ const = 0;
+ virtual const std::vector<std::string>& secondary_transports_for_usb()
+ const = 0;
+ virtual const std::vector<std::string>& secondary_transports_for_wifi()
+ const = 0;
+
+ /**
+ * @brief Returns list of allowed transports for the named service
+ */
+ virtual const std::vector<std::string>& audio_service_transports() const = 0;
+ virtual const std::vector<std::string>& video_service_transports() const = 0;
};
} // namespace protocol_handler
#endif // SRC_COMPONENTS_INCLUDE_PROTOCOL_HANDLER_PROTOCOL_HANDLER_SETTINGS_H_
diff --git a/src/components/include/protocol_handler/session_observer.h b/src/components/include/protocol_handler/session_observer.h
index 7a5dcf287c..d50b1e694e 100644
--- a/src/components/include/protocol_handler/session_observer.h
+++ b/src/components/include/protocol_handler/session_observer.h
@@ -59,6 +59,7 @@ enum { HASH_ID_NOT_SUPPORTED = 0, HASH_ID_WRONG = 0xFFFF0000 };
* @brief Struct with data containing attributes of starting session
**/
struct SessionContext {
+ transport_manager::ConnectionUID primary_connection_id_;
transport_manager::ConnectionUID connection_id_;
uint8_t initial_session_id_;
uint8_t new_session_id_;
@@ -71,7 +72,8 @@ struct SessionContext {
* @brief Constructor
*/
SessionContext()
- : connection_id_(0)
+ : primary_connection_id_(0)
+ , connection_id_(0)
, initial_session_id_(0)
, new_session_id_(0)
, service_type_(protocol_handler::kInvalidServiceType)
@@ -81,6 +83,8 @@ struct SessionContext {
/**
* @brief Constructor
+ * @param primary_connection_id Connection identifier of the primary
+ * connection in which the session is started
* @param connection_id_ Connection identifier within which session is
* started.
* @param session_id Session ID specified to OnSessionStartedCallback()
@@ -91,13 +95,15 @@ struct SessionContext {
* @param is_protected Whether service will be protected
* @param is_new_service Whether service was already established
**/
- SessionContext(transport_manager::ConnectionUID connection_id,
+ SessionContext(transport_manager::ConnectionUID primary_connection_id,
+ transport_manager::ConnectionUID connection_id,
uint8_t session_id,
uint8_t new_session_id,
protocol_handler::ServiceType service_type,
uint32_t hash_id,
const bool is_protected)
- : connection_id_(connection_id)
+ : primary_connection_id_(primary_connection_id)
+ , connection_id_(connection_id)
, initial_session_id_(session_id)
, new_session_id_(new_session_id)
, service_type_(service_type)
@@ -205,6 +211,24 @@ class SessionObserver {
virtual void OnMalformedMessageCallback(const uint32_t& connection_key) = 0;
/**
+ * @brief Converts connection handle to transport type string used in
+ * smartDeviceLink.ini file, e.g. "TCP_WIFI"
+ * @param connection_handle A connection identifier
+ * @return string representation of the transport of the device
+ */
+ virtual const std::string TransportTypeProfileStringFromConnHandle(
+ transport_manager::ConnectionUID connection_handle) const = 0;
+
+ /**
+ * @brief Converts device handle to transport type string used in
+ * smartDeviceLink.ini file, e.g. "TCP_WIFI"
+ * @param device_handle A device handle
+ * @return string representation of the transport of the device
+ */
+ virtual const std::string TransportTypeProfileStringFromDeviceHandle(
+ transport_manager::DeviceHandle device_handle) const = 0;
+
+ /**
* \brief Creates unique identifier of session (can be used as hash)
* from given connection identifier
* within which session exists and session number.
diff --git a/src/components/include/test/application_manager/mock_application_manager.h b/src/components/include/test/application_manager/mock_application_manager.h
index 09957dbde0..79f601d75d 100644
--- a/src/components/include/test/application_manager/mock_application_manager.h
+++ b/src/components/include/test/application_manager/mock_application_manager.h
@@ -122,6 +122,8 @@ class MockApplicationManager : public application_manager::ApplicationManager {
MOCK_METHOD1(
SendHMIStatusNotification,
void(const utils::SharedPtr<application_manager::Application> app));
+ MOCK_METHOD1(SendDriverDistractionState,
+ void(application_manager::ApplicationSharedPtr app));
MOCK_METHOD1(RemoveHMIFakeParameters,
void(application_manager::commands::MessageSharedPtr& message));
MOCK_CONST_METHOD1(
@@ -131,6 +133,9 @@ class MockApplicationManager : public application_manager::ApplicationManager {
MOCK_METHOD0(hmi_capabilities, application_manager::HMICapabilities&());
MOCK_CONST_METHOD0(hmi_capabilities,
const application_manager::HMICapabilities&());
+ MOCK_CONST_METHOD1(
+ CheckResumptionRequiredTransportAvailable,
+ bool(application_manager::ApplicationConstSharedPtr application));
MOCK_METHOD2(ProcessQueryApp,
void(const smart_objects::SmartObject& sm_object,
const uint32_t connection_key));
diff --git a/src/components/include/test/application_manager/mock_application_manager_settings.h b/src/components/include/test/application_manager/mock_application_manager_settings.h
index 25cf994566..735539156a 100644
--- a/src/components/include/test/application_manager/mock_application_manager_settings.h
+++ b/src/components/include/test/application_manager/mock_application_manager_settings.h
@@ -95,6 +95,13 @@ class MockApplicationManagerSettings
MOCK_CONST_METHOD0(app_resuming_timeout, const uint32_t&());
MOCK_CONST_METHOD0(attempts_to_open_resumption_db, uint16_t());
MOCK_CONST_METHOD0(open_attempt_timeout_ms_resumption_db, uint16_t());
+ MOCK_CONST_METHOD0(transport_required_for_resumption_map,
+ std::map<std::string, std::vector<std::string> >&());
+ MOCK_CONST_METHOD0(navigation_lowbandwidth_resumption_level,
+ const std::string&());
+ MOCK_CONST_METHOD0(projection_lowbandwidth_resumption_level,
+ const std::string&());
+ MOCK_CONST_METHOD0(media_lowbandwidth_resumption_level, const std::string&());
MOCK_METHOD1(set_config_file_name, void(const std::string& fileName));
// The following line won't really compile, as the return
// type has multiple template arguments. To fix it, use a
diff --git a/src/components/include/test/connection_handler/mock_connection_handler.h b/src/components/include/test/connection_handler/mock_connection_handler.h
index f1416c999e..2de3a0f9a7 100644
--- a/src/components/include/test/connection_handler/mock_connection_handler.h
+++ b/src/components/include/test/connection_handler/mock_connection_handler.h
@@ -51,6 +51,7 @@ using connection_handler::ConnectionHandle;
using connection_handler::DeviceHandle;
using connection_handler::CloseSessionReason;
using connection_handler::DevicesDiscoveryStarter;
+using connection_handler::SessionTransports;
class MockConnectionHandler : public connection_handler::ConnectionHandler {
public:
@@ -84,13 +85,6 @@ class MockConnectionHandler : public connection_handler::ConnectionHandler {
void(uint32_t connection_key, uint8_t session_id));
MOCK_METHOD2(BindProtocolVersionWithSession,
void(uint32_t connection_key, uint8_t protocol_version));
-
- // DEPRECATED
- MOCK_CONST_METHOD4(GetDataOnSessionKey,
- int32_t(uint32_t key,
- uint32_t* app_id,
- std::list<int32_t>* sessions_list,
- uint32_t* device_id));
MOCK_CONST_METHOD4(GetDataOnSessionKey,
int32_t(uint32_t key,
uint32_t* app_id,
@@ -103,10 +97,31 @@ class MockConnectionHandler : public connection_handler::ConnectionHandler {
MOCK_METHOD0(get_device_discovery_starter, DevicesDiscoveryStarter&());
MOCK_CONST_METHOD1(GetConnectedDevicesMAC,
void(std::vector<std::string>& macs));
+ MOCK_METHOD1(
+ AddSession,
+ uint32_t(const transport_manager::ConnectionUID primary_transport_id));
+ MOCK_METHOD1(RemoveSession, bool(uint8_t session_id));
+ MOCK_METHOD0(session_connection_map,
+ DataAccessor<connection_handler::SessionConnectionMap>());
+ MOCK_METHOD2(SetSecondaryTransportID,
+ SessionTransports(
+ uint8_t session_id,
+ transport_manager::ConnectionUID secondary_transport_id));
+ MOCK_CONST_METHOD1(GetSessionTransports,
+ const SessionTransports(uint8_t session_id));
MOCK_METHOD3(NotifyServiceStartedResult,
void(uint32_t session_key,
bool result,
std::vector<std::string>& rejected_params));
+ MOCK_METHOD3(
+ OnSecondaryTransportStarted,
+ bool(transport_manager::ConnectionUID& primary_connection_handle,
+ const transport_manager::ConnectionUID secondary_connection_handle,
+ const uint8_t session_id));
+ MOCK_METHOD2(
+ OnSecondaryTransportEnded,
+ void(const transport_manager::ConnectionUID primary_connection_handle,
+ const transport_manager::ConnectionUID secondary_connection_handle));
};
} // namespace connection_handler_test
diff --git a/src/components/include/test/connection_handler/mock_connection_handler_observer.h b/src/components/include/test/connection_handler/mock_connection_handler_observer.h
index a96498028d..ede08a9a4a 100644
--- a/src/components/include/test/connection_handler/mock_connection_handler_observer.h
+++ b/src/components/include/test/connection_handler/mock_connection_handler_observer.h
@@ -74,6 +74,11 @@ class MockConnectionHandlerObserver
const connection_handler::Device& device_to));
MOCK_METHOD1(OnDeviceSwitchingFinish, void(const std::string& device_uid));
MOCK_CONST_METHOD1(CheckAppIsNavi, bool(const uint32_t app_id));
+ MOCK_METHOD2(OnSecondaryTransportStartedCallback,
+ void(const connection_handler::DeviceHandle device_handle,
+ const int32_t session_key));
+ MOCK_METHOD1(OnSecondaryTransportEndedCallback,
+ void(const int32_t session_key));
};
} // namespace connection_handler_test
diff --git a/src/components/include/test/protocol_handler/mock_protocol_handler.h b/src/components/include/test/protocol_handler/mock_protocol_handler.h
index e667911944..13c0264cb8 100644
--- a/src/components/include/test/protocol_handler/mock_protocol_handler.h
+++ b/src/components/include/test/protocol_handler/mock_protocol_handler.h
@@ -55,8 +55,9 @@ class MockProtocolHandler : public ::protocol_handler::ProtocolHandler {
void(uint32_t connection_key, int32_t number_of_frames));
MOCK_METHOD2(SendHeartBeat, void(int32_t connection_id, uint8_t session_id));
MOCK_METHOD2(SendEndSession, void(int32_t connection_id, uint8_t session_id));
- MOCK_METHOD3(SendEndService,
- void(int32_t connection_id,
+ MOCK_METHOD4(SendEndService,
+ void(int32_t primary_connection_id,
+ int32_t connection_id,
uint8_t session_id,
uint8_t service_type));
MOCK_CONST_METHOD0(get_settings,
diff --git a/src/components/include/test/protocol_handler/mock_protocol_handler_settings.h b/src/components/include/test/protocol_handler/mock_protocol_handler_settings.h
index 8ddeded889..2ed9c47e9d 100644
--- a/src/components/include/test/protocol_handler/mock_protocol_handler_settings.h
+++ b/src/components/include/test/protocol_handler/mock_protocol_handler_settings.h
@@ -60,6 +60,17 @@ class MockProtocolHandlerSettings
MOCK_CONST_METHOD0(force_protected_service, const std::vector<int>&());
MOCK_CONST_METHOD0(force_unprotected_service, const std::vector<int>&());
#endif
+ MOCK_CONST_METHOD0(multiple_transports_enabled, const bool());
+ MOCK_CONST_METHOD0(secondary_transports_for_bluetooth,
+ const std::vector<std::string>&());
+ MOCK_CONST_METHOD0(secondary_transports_for_usb,
+ const std::vector<std::string>&());
+ MOCK_CONST_METHOD0(secondary_transports_for_wifi,
+ const std::vector<std::string>&());
+ MOCK_CONST_METHOD0(audio_service_transports,
+ const std::vector<std::string>&());
+ MOCK_CONST_METHOD0(video_service_transports,
+ const std::vector<std::string>&());
};
} // namespace protocol_handler_test
diff --git a/src/components/include/test/protocol_handler/mock_session_observer.h b/src/components/include/test/protocol_handler/mock_session_observer.h
index ae32f35948..c0612ce137 100644
--- a/src/components/include/test/protocol_handler/mock_session_observer.h
+++ b/src/components/include/test/protocol_handler/mock_session_observer.h
@@ -76,6 +76,12 @@ class MockSessionObserver : public ::protocol_handler::SessionObserver {
void(const uint32_t& connection_key));
MOCK_METHOD1(OnMalformedMessageCallback,
void(const uint32_t& connection_key));
+ MOCK_CONST_METHOD1(
+ TransportTypeProfileStringFromConnHandle,
+ const std::string(transport_manager::ConnectionUID connection_handle));
+ MOCK_CONST_METHOD1(
+ TransportTypeProfileStringFromDeviceHandle,
+ const std::string(transport_manager::DeviceHandle device_handle));
MOCK_CONST_METHOD2(
KeyFromPair,
uint32_t(transport_manager::ConnectionUID connection_handle,
@@ -89,11 +95,6 @@ class MockSessionObserver : public ::protocol_handler::SessionObserver {
uint32_t* app_id,
std::list<int32_t>* sessions_list,
transport_manager::DeviceHandle* device_id));
- DEPRECATED MOCK_CONST_METHOD4(GetDataOnSessionKey,
- int32_t(uint32_t key,
- uint32_t* app_id,
- std::list<int32_t>* sessions_list,
- uint32_t* device_id));
MOCK_CONST_METHOD5(GetDataOnDeviceID,
int32_t(transport_manager::DeviceHandle device_handle,
diff --git a/src/components/include/test/transport_manager/mock_transport_manager_listener.h b/src/components/include/test/transport_manager/mock_transport_manager_listener.h
index f4c4fdcf68..133dabe732 100644
--- a/src/components/include/test/transport_manager/mock_transport_manager_listener.h
+++ b/src/components/include/test/transport_manager/mock_transport_manager_listener.h
@@ -85,6 +85,8 @@ class MockTransportManagerListener : public TransportManagerListener {
void(const DeviceUID& device_uid_from,
const DeviceUID& device_uid_to));
MOCK_METHOD1(OnDeviceSwitchingFinish, void(const DeviceUID& device_uid));
+ MOCK_METHOD1(OnTransportConfigUpdated,
+ void(const std::map<std::string, std::string>& configs));
};
} // namespace transport_manager_test
diff --git a/src/components/include/test/transport_manager/mock_transport_manager_settings.h b/src/components/include/test/transport_manager/mock_transport_manager_settings.h
index 88112df003..3e7c8f36f7 100644
--- a/src/components/include/test/transport_manager/mock_transport_manager_settings.h
+++ b/src/components/include/test/transport_manager/mock_transport_manager_settings.h
@@ -61,6 +61,8 @@ class MockTransportManagerSettings
MOCK_CONST_METHOD0(iap_hub_connection_wait_timeout, uint32_t());
MOCK_CONST_METHOD0(app_transport_change_timer, uint32_t());
MOCK_CONST_METHOD0(app_transport_change_timer_addition, uint32_t());
+ MOCK_CONST_METHOD0(transport_manager_tcp_adapter_network_interface,
+ std::string&());
};
} // namespace transport_manager_test
diff --git a/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h b/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h
index c37c41d4f8..eff0abdcd3 100644
--- a/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h
+++ b/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h
@@ -103,6 +103,8 @@ class MockTransportAdapter
void(const ::transport_manager::DeviceUID& device_handle));
MOCK_CONST_METHOD0(GetSwitchableDevices,
transport_manager::SwitchableDevices());
+ MOCK_CONST_METHOD0(GetTransportConfiguration,
+ transport_manager::transport_adapter::TransportConfig());
#ifdef TELEMETRY_MONITOR
MOCK_METHOD0(GetTelemetryObserver,
::transport_manager::TMTelemetryObserver*());
diff --git a/src/components/include/transport_manager/transport_adapter/transport_adapter.h b/src/components/include/transport_manager/transport_adapter/transport_adapter.h
index 7f6d347535..c00adb33b8 100644
--- a/src/components/include/transport_manager/transport_adapter/transport_adapter.h
+++ b/src/components/include/transport_manager/transport_adapter/transport_adapter.h
@@ -5,6 +5,9 @@
* Copyright (c) 2016, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -16,7 +19,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -70,6 +73,9 @@ enum DeviceType {
IOS_BT,
IOS_USB,
TCP,
+ IOS_USB_HOST_MODE,
+ IOS_USB_DEVICE_MODE,
+ IOS_CARPLAY_WIRELESS, // running on iAP over Carplay wireless transport
UNKNOWN
};
@@ -86,6 +92,18 @@ typedef std::map<DeviceUID, DeviceSptr> DeviceMap;
*/
typedef std::list<TransportAdapterListener*> TransportAdapterListenerList;
+/**
+ * @brief Type definition for transport's configuration information
+ */
+typedef std::map<std::string, std::string> TransportConfig;
+
+/**
+ * @brief TransportConfig keys
+ */
+extern const char* tc_enabled;
+extern const char* tc_tcp_port;
+extern const char* tc_tcp_ip_address;
+
class TransportAdapter {
public:
/**
@@ -312,6 +330,12 @@ class TransportAdapter {
virtual void DeviceSwitched(const DeviceUID& device_handle) = 0;
virtual SwitchableDevices GetSwitchableDevices() const = 0;
+
+ /**
+ * @brief Returns the transport's configuration information
+ */
+ virtual TransportConfig GetTransportConfiguration() const = 0;
+
#ifdef TELEMETRY_MONITOR
/**
* @brief Return Time metric observer
diff --git a/src/components/include/transport_manager/transport_adapter/transport_adapter_event.h b/src/components/include/transport_manager/transport_adapter/transport_adapter_event.h
index 18f4ccb2d1..5d55960943 100644
--- a/src/components/include/transport_manager/transport_adapter/transport_adapter_event.h
+++ b/src/components/include/transport_manager/transport_adapter/transport_adapter_event.h
@@ -2,6 +2,9 @@
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -57,7 +60,8 @@ enum class EventTypeEnum {
ON_RECEIVED_FAIL,
ON_COMMUNICATION_ERROR,
ON_UNEXPECTED_DISCONNECT,
- ON_TRANSPORT_SWITCH_REQUESTED
+ ON_TRANSPORT_SWITCH_REQUESTED,
+ ON_TRANSPORT_CONFIG_UPDATED
};
class TransportAdapterEvent {
diff --git a/src/components/include/transport_manager/transport_manager_listener.h b/src/components/include/transport_manager/transport_manager_listener.h
index d336eade45..0d02bfd8c7 100644
--- a/src/components/include/transport_manager/transport_manager_listener.h
+++ b/src/components/include/transport_manager/transport_manager_listener.h
@@ -2,6 +2,9 @@
* Copyright (c) 2014, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -33,6 +36,7 @@
#ifndef SRC_COMPONENTS_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_LISTENER_H_
#define SRC_COMPONENTS_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_LISTENER_H_
+#include <map>
#include <vector>
#include "transport_manager/common.h"
#include "transport_manager/info.h"
@@ -193,6 +197,14 @@ class TransportManagerListener {
virtual void OnTMMessageSendFailed(
const DataSendError& error,
const ::protocol_handler::RawMessagePtr message) = 0;
+
+ /**
+ * @brief Notifies that configuration of a transport has been updated.
+ *
+ * @param configs pairs of key and value that represent configuration.
+ */
+ virtual void OnTransportConfigUpdated(
+ const std::map<std::string, std::string>& configs) = 0;
};
} // namespace transport_manager
#endif // SRC_COMPONENTS_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_LISTENER_H_
diff --git a/src/components/include/transport_manager/transport_manager_listener_empty.h b/src/components/include/transport_manager/transport_manager_listener_empty.h
index ca6c573a06..a255256290 100644
--- a/src/components/include/transport_manager/transport_manager_listener_empty.h
+++ b/src/components/include/transport_manager/transport_manager_listener_empty.h
@@ -2,6 +2,9 @@
* Copyright (c) 2014, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -187,6 +190,14 @@ class TransportManagerListenerEmpty : public TransportManagerListener {
void OnTMMessageSendFailed(
const DataSendError& error,
const ::protocol_handler::RawMessagePtr message) OVERRIDE {}
+
+ /**
+ * @brief Notifies that configuration of a transport has been updated.
+ *
+ * @param configs pairs of key and value that represent configuration.
+ */
+ void OnTransportConfigUpdated(
+ const std::map<std::string, std::string>& configs) OVERRIDE {}
};
} // namespace transport_manager
#endif // SRC_COMPONENTS_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_LISTENER_EMPTY_H_
diff --git a/src/components/include/transport_manager/transport_manager_settings.h b/src/components/include/transport_manager/transport_manager_settings.h
index feb3fa2c02..3912bbe747 100644
--- a/src/components/include/transport_manager/transport_manager_settings.h
+++ b/src/components/include/transport_manager/transport_manager_settings.h
@@ -63,6 +63,12 @@ class TransportManagerSettings : public TransportManagerMMESettings {
* the transport change timeout value.
*/
virtual uint32_t app_transport_change_timer_addition() const = 0;
+
+ /**
+ * @brief Returns the network interface name for TCP transport adapter
+ */
+ virtual const std::string& transport_manager_tcp_adapter_network_interface()
+ const = 0;
};
} // namespace transport_manager
#endif // SRC_COMPONENTS_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_SETTINGS_H_
diff --git a/src/components/include/utils/data_accessor.h b/src/components/include/utils/data_accessor.h
index 645886592c..6d0fb0ed68 100644
--- a/src/components/include/utils/data_accessor.h
+++ b/src/components/include/utils/data_accessor.h
@@ -36,7 +36,7 @@
#include "utils/lock.h"
#include "utils/shared_ptr.h"
-// This class is for thread-safe access to data
+// This class is for thread-safe const access to data
template <class T>
class DataAccessor {
public:
diff --git a/src/components/interfaces/CMakeLists.txt b/src/components/interfaces/CMakeLists.txt
index 1ea481f11a..660cbd661d 100644
--- a/src/components/interfaces/CMakeLists.txt
+++ b/src/components/interfaces/CMakeLists.txt
@@ -44,31 +44,8 @@ add_library(v4_protocol_v1_2_no_extra ${CMAKE_CURRENT_BINARY_DIR}/v4_protocol_v1
generate_interface("MOBILE_API.xml" "mobile_apis" "sdlrpcv2")
add_library(MOBILE_API ${CMAKE_CURRENT_BINARY_DIR}/MOBILE_API_schema.cc)
-if(HMI_JSON_API)
- generate_interface("HMI_API.xml" "hmi_apis" "jsonrpc")
- add_library(HMI_API ${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc)
-endif()
-
-if(HMI_DBUS_API)
- generate_interface("QT_HMI_API.xml" "hmi_apis" "jsonrpc")
-
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API.h"
- COMMAND sed "-e" "s/QT_HMI_API/HMI_API/g" "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API.h" > "${CMAKE_CURRENT_BINARY_DIR}/HMI_API.h"
- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API.h"
- )
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.h"
- COMMAND sed "-e" "s/QT_HMI_API/HMI_API/g" "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.h" > "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.h"
- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.h"
- )
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc"
- COMMAND sed "-e" "s/QT_HMI_API/HMI_API/g" "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.cc" > "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc"
- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/QT_HMI_API_schema.cc" "${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.h" "${CMAKE_CURRENT_BINARY_DIR}/HMI_API.h")
-
- add_library(HMI_API ${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc)
-endif()
+generate_interface("HMI_API.xml" "hmi_apis" "jsonrpc")
+add_library(HMI_API ${CMAKE_CURRENT_BINARY_DIR}/HMI_API_schema.cc)
target_link_libraries(v4_protocol_v1_2_no_extra Utils)
target_link_libraries(MOBILE_API Utils)
diff --git a/src/components/interfaces/HMI_API.xml b/src/components/interfaces/HMI_API.xml
index f08709bb2b..378649ec0b 100644
--- a/src/components/interfaces/HMI_API.xml
+++ b/src/components/interfaces/HMI_API.xml
@@ -730,6 +730,33 @@
</enum>
<!--IVI part-->
+<enum name="ElectronicParkBrakeStatus">
+ <element name="CLOSED">
+ <description>
+ Park brake actuators have been fully applied.
+ </description>
+ </element>
+ <element name="TRANSITION">
+ <description>
+ Park brake actuators are transitioning to either Apply/Closed or Release/Open state.
+ </description>
+ </element>
+ <element name="OPEN">
+ <description>
+ Park brake actuators are released.
+ </description>
+ </element>
+ <element name="DRIVE_ACTIVE">
+ <description>
+ When driver pulls the Electronic Park Brake switch while driving "at speed".
+ </description>
+ </element>
+ <element name="FAULT">
+ <description>
+ When system has a fault or is under maintenance.
+ </description>
+ </element>
+</enum>
<enum name="FuelType">
<element name="GASOLINE" />
<element name="DIESEL" />
@@ -1042,6 +1069,7 @@
<element name="VEHICLEDATA_STEERINGWHEEL" />
<element name="VEHICLEDATA_FUELRANGE" />
<element name="VEHICLEDATA_ENGINEOILLIFE" />
+ <element name="VEHICLEDATA_ELECTRONICPARKBRAKESTATUS" />
</enum>
<enum name="WiperStatus">
@@ -1454,21 +1482,21 @@
<element name="UPDATING" />
<element name="UPDATE_NEEDED"/>
</enum>
-
+
<enum name="SystemError">
<element name="SYNC_REBOOTED"/>
<element name="SYNC_OUT_OF_MEMMORY" />
</enum>
-
+
<enum name="StatisticsType">
<element name="iAPP_BUFFER_FULL"/>
</enum>
-
+
<enum name="ConsentSource">
<element name="GUI"/>
<element name="VUI" />
</enum>
-
+
<enum name="DeviceState">
<element name="UNKNOWN"/>
<element name="UNPAIRED"/>
@@ -1481,7 +1509,7 @@
<param name="line2" type="String" mandatory="false"/>
<param name="textBody" type="String" mandatory="false"/>
</struct>
-
+
<struct name="PermissionItem">
<param name="name" type="String" mandatory="true">
<description>Code of message of user-friendly text about functional group to be allowed/disallowed</description>
@@ -1492,7 +1520,7 @@
<param name="allowed" type="Boolean" mandatory="false">
<description>Specifies whether functionality was allowed/disallowed. If ommited - no information about User Consent is yet found for app.</description>
</param>
- </struct>
+ </struct>
<struct name="ServiceInfo">
<param name="url" type="String" mandatory="true">
<description>Get URL based on service type.</description>
@@ -1524,7 +1552,133 @@
<enum name="ModuleType">
<element name="CLIMATE"/>
<element name="RADIO"/>
- </enum>
+ <element name="SEAT"/>
+</enum>
+
+ <enum name="MassageZone">
+ <description>List possible zones of a multi-contour massage seat.</description>
+ <element name="LUMBAR">
+ <description>The back of a multi-contour massage seat. or SEAT_BACK</description>
+ </element>
+ <element name="SEAT_CUSHION">
+ <description>The bottom a multi-contour massage seat. or SEAT_BOTTOM </description>
+ </element>
+ </enum>
+
+ <enum name="MassageMode">
+ <description>List possible modes of a massage zone.</description>
+ <element name="OFF"/>
+ <element name="LOW"/>
+ <element name="HIGH"/>
+ </enum>
+
+ <struct name="MassageModeData">
+ <description>Specify the mode of a massage zone.</description>
+ <param name="massageZone" type="MassageZone" mandatory="true"></param>
+ <param name="massageMode" type="MassageMode" mandatory="true"></param>
+ </struct>
+
+ <enum name="MassageCushion">
+ <description>List possible cushions of a multi-contour massage seat.</description>
+ <element name="TOP_LUMBAR"/>
+ <element name="MIDDLE_LUMBAR"/>
+ <element name="BOTTOM_LUMBAR"/>
+ <element name="BACK_BOLSTERS"/>
+ <element name="SEAT_BOLSTERS"/>
+ </enum>
+
+ <struct name="MassageCushionFirmness">
+ <description>The intensity or firmness of a cushion.</description>
+ <param name="cushion" type="MassageCushion" mandatory="true"></param>
+ <param name="firmness" type="Integer" minvalue="0" maxvalue="100" mandatory="true"></param>
+ </struct>
+
+ <enum name="SeatMemoryActionType">
+ <element name="SAVE">
+ <description>Save current seat postions and settings to seat memory.</description>
+ </element>
+ <element name="RESTORE">
+ <description>Restore / apply the seat memory settings to the current seat. </description>
+ </element>
+ <element name="NONE">
+ <description>No action to be performed.</description>
+ </element>
+ </enum>
+
+ <struct name="SeatMemoryAction">
+ <param name="id" type="Integer" minvalue="1" maxvalue="10" mandatory="true"/>
+ <param name="label" type="String" maxlength="100" mandatory="false"/>
+ <param name="action" type="SeatMemoryActionType" mandatory="true"/>
+ </struct>
+
+ <enum name="SupportedSeat">
+ <description>List possible seats that is a remote controllable seat.</description>
+ <element name="DRIVER"/>
+ <element name="FRONT_PASSENGER"/>
+ </enum>
+
+ <struct name="SeatControlData">
+ <description>Seat control data corresponds to "SEAT" ModuleType. </description>
+ <param name="id" type="SupportedSeat" mandatory="true"></param>
+
+ <param name="heatingEnabled" type="Boolean" mandatory="false"></param>
+ <param name="coolingEnabled" type="Boolean" mandatory="false"></param>
+ <param name="heatingLevel" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="coolingLevel" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+
+ <param name="horizontalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="verticalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="frontVerticalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="backVerticalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="backTiltAngle" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+
+ <param name="headSupportHorizontalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="headSupportVerticalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+
+ <param name="massageEnabled" type="Boolean" mandatory="false"></param>
+ <param name="massageMode" type="MassageModeData" minsize="1" maxsize="2" array="true" mandatory="false"></param>
+ <param name="massageCushionFirmness" type="MassageCushionFirmness" minsize="1" maxsize="5" array="true" mandatory="false"></param>
+ <param name="memory" type="SeatMemoryAction" mandatory="false"></param>
+ </struct>
+
+ <struct name="SeatControlCapabilities">
+ <param name="moduleName" type="String" maxlength="100" mandatory="true">
+ <description>
+ The short friendly name of the light control module.
+ It should not be used to identify a module by mobile application.
+ </description>
+ </param>
+ <param name="heatingEnabledAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="coolingEnabledAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="heatingLevelAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="coolingLevelAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="horizontalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="verticalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="frontVerticalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="backVerticalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="backTiltAngleAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="headSupportHorizontalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="headSupportVerticalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="massageEnabledAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="massageModeAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="massageCushionFirmnessAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="memoryAvailable" type="Boolean" mandatory="false">
+ </param>
+ </struct>
<enum name="RadioBand">
<element name="AM"/>
@@ -1792,6 +1946,8 @@
</param>
<param name="climateControlData" type="Common.ClimateControlData" mandatory="false">
</param>
+ <param name="seatControlData" type="SeatControlData" mandatory="false">
+ </param>
</struct>
<enum name="RCAccessMode">
@@ -1974,6 +2130,9 @@
<param name="deviceInfo" type="Common.DeviceInfo" mandatory="true">
<description>The ID, serial number, transport type the named-app's-device is connected over to HU.</description>
</param>
+ <param name="secondaryDeviceInfo" type="Common.DeviceInfo" mandatory="false">
+ <description>The ID, serial number, transport type that are acquired through Secondary Transport.</description>
+ </param>
<param name="policyAppID" type="String" maxlength="50" minlength="1" mandatory="true">
<description>Policy ID(=the appID the application registers with) of registered application.</description>
</param>
@@ -2025,7 +2184,7 @@
</description>
</param>
<param name="dayColorScheme" type="Common.TemplateColorScheme" mandatory="false"></param>
- <param name="nightColorScheme" type="Common.TemplateColorScheme" mandatory="false"></param>
+ <param name="nightColorScheme" type="Common.TemplateColorScheme" mandatory="false"></param>
</struct>
<struct name="MenuParams">
@@ -2619,7 +2778,7 @@
<struct name="DateTime">
<param name="millisecond" type="Integer" minvalue="0" maxvalue="999" mandatory="false">
- <description>Milliseconds </description>
+ <description>Milliseconds </description>
</param>
<param name="second" type="Integer" minvalue="0" maxvalue="60" mandatory="false">
<description>Seconds part of time</description>
@@ -2757,6 +2916,11 @@
<param name="buttonCapabilities" type="ButtonCapabilities" mandatory="false" minsize="1" maxsize="100" array="true" >
<description>If included, the platform supports RC button controls with the included button names.</description >
</param>
+ <param name="seatControlCapabilities" type="SeatControlCapabilities" mandatory="false" minsize="1" maxsize="100" array="true">
+ <description>
+ If included, the platform supports seat controls.
+ </description >
+ </param>
</struct>
<struct name="Rectangle">
@@ -3819,7 +3983,7 @@
<description>ID of application related to this RPC.</description>
</param>
<param name="dayColorScheme" type="Common.TemplateColorScheme" mandatory="false"></param>
- <param name="nightColorScheme" type="Common.TemplateColorScheme" mandatory="false"></param>
+ <param name="nightColorScheme" type="Common.TemplateColorScheme" mandatory="false"></param>
</function>
<function name="SetDisplayLayout" messagetype="response">
<param name="displayCapabilities" type="Common.DisplayCapabilities" mandatory="false">
@@ -4014,7 +4178,7 @@
</function>
</interface>
-<interface name="Navigation" version="1.5.0" date="2017-08-15">
+<interface name="Navigation" version="1.5.0" date="2017-08-15">
<function name="IsReady" messagetype="request">
<description>Method is invoked at system startup. Response must provide the information about presence of UI Navigation module and its readiness to cooperate with SDL.</description>
@@ -4393,6 +4557,9 @@
<param name="engineOilLife" type="Boolean" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Boolean" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="Boolean" mandatory="false">
<description>Emergency Call notification and confirmation data</description>
@@ -4478,6 +4645,9 @@
<param name="engineOilLife" type="Common.VehicleDataResult" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Common.VehicleDataResult" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="Common.VehicleDataResult" mandatory="false">
<description>Emergency Call notification and confirmation data</description>
@@ -4569,6 +4739,9 @@
<param name="engineOilLife" type="Boolean" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Boolean" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="Boolean" mandatory="false">
<description>Emergency Call notification and confirmation data</description>
@@ -4654,6 +4827,9 @@
<param name="engineOilLife" type="Common.VehicleDataResult" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Common.VehicleDataResult" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="Common.VehicleDataResult" mandatory="false">
<description>Emergency Call notification and confirmation data</description>
@@ -4743,6 +4919,9 @@
<param name="engineOilLife" type="Boolean" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Boolean" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
<param name="eCallInfo" type="Boolean" mandatory="false">
<description>Emergency Call notification and confirmation data</description>
</param>
@@ -4829,6 +5008,9 @@
<param name="engineOilLife" type="Float" minvalue="0" maxvalue="100" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Common.ElectronicParkBrakeStatus" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
<param name="eCallInfo" type="Common.ECallInfo" mandatory="false">
<description>Emergency Call notification and confirmation data</description>
</param>
@@ -4866,7 +5048,7 @@
<description>The instantaneous fuel consumption in microlitres</description>
</param>
<param name="fuelRange" type="Common.FuelRange" minsize="0" maxsize="100" array="true" mandatory="false">
- <description>The estimate range in KM the vehicle can travel based on fuel level and consumption</description>
+ <description>The estimate range in KM the vehicle can travel based on fuel level and consumption</description>
</param>
<param name="externalTemperature" type="Float" minvalue="-40" maxvalue="100" mandatory="false">
<description>The external temperature in degrees celsius</description>
@@ -4889,6 +5071,9 @@
<param name="beltStatus" type="Common.BeltStatus" mandatory="false">
<description>The status of the seat belts</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Common.ElectronicParkBrakeStatus" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
<param name="bodyInformation" type="Common.BodyInformation" mandatory="false">
<description>The body information including power modes</description>
</param>
@@ -5193,5 +5378,19 @@
<description>The remote control access mode specified by the driver via HMI.</description>
</param>
</function>
+
+<function name="OnRCStatus" messagetype="notification">
+ <description>Issued by SDL to notify HMI about remote control status change on SDL</description>
+ <param name="appID" type="Integer" mandatory="true">
+ <description>ID of selected application.</description>
+ </param>
+ <param name="allocatedModules" type="Common.ModuleData" minsize="0" maxsize="100" array="true" mandatory="true">
+ <description>Contains a list (zero or more) of module types that are allocated to the application.</description>
+ </param>
+ <param name="freeModules" type="Common.ModuleData" minsize="0" maxsize="100" array="true" mandatory="true">
+ <description>Contains a list (zero or more) of module types that are free to access for the application.</description>
+ </param>
+</function>
+
</interface>
</interfaces>
diff --git a/src/components/interfaces/MOBILE_API.xml b/src/components/interfaces/MOBILE_API.xml
index 4e4b096c1d..2766bb48d0 100644
--- a/src/components/interfaces/MOBILE_API.xml
+++ b/src/components/interfaces/MOBILE_API.xml
@@ -526,6 +526,7 @@
<element name="VEHICLEDATA_STEERINGWHEEL" />
<element name="VEHICLEDATA_FUELRANGE" />
<element name="VEHICLEDATA_ENGINEOILLIFE" />
+ <element name="VEHICLEDATA_ELECTRONICPARKBRAKESTATUS" />
</enum>
<enum name="ButtonName">
@@ -1130,6 +1131,34 @@
</element>
</enum>
+ <enum name="ElectronicParkBrakeStatus">
+ <element name="CLOSED">
+ <description>
+ Park brake actuators have been fully applied.
+ </description>
+ </element>
+ <element name="TRANSITION">
+ <description>
+ Park brake actuators are transitioning to either Apply/Closed or Release/Open state.
+ </description>
+ </element>
+ <element name="OPEN">
+ <description>
+ Park brake actuators are released.
+ </description>
+ </element>
+ <element name="DRIVE_ACTIVE">
+ <description>
+ When driver pulls the Electronic Park Brake switch while driving "at speed".
+ </description>
+ </element>
+ <element name="FAULT">
+ <description>
+ When system has a fault or is under maintenance.
+ </description>
+ </element>
+ </enum>
+
<enum name="FuelType">
<element name="GASOLINE" />
<element name="DIESEL" />
@@ -1340,6 +1369,7 @@
<enum name="ModuleType">
<element name="CLIMATE"/>
<element name="RADIO"/>
+ <element name="SEAT"/>
</enum>
<enum name="DefrostZone">
@@ -2465,7 +2495,8 @@
<element name="OnHashChangeID" value="32782" hexvalue="800E" />
<element name="OnInteriorVehicleDataID" value="32783" hexvalue="800F" />
<element name="OnWayPointChangeID" value="32784" hexvalue="8010" />
-
+ <element name="OnRCStatusID" value="32785" hexvalue="8011" />
+
<!--
Ford Specific Request / Response RPCs
Range = 0x 0001 0000 - 0x 0001 7FFF
@@ -2644,7 +2675,132 @@
</struct>
<!---Remote control -->
-
+
+ <enum name="MassageZone">
+ <description>List possible zones of a multi-contour massage seat.</description>
+ <element name="LUMBAR">
+ <description>The back of a multi-contour massage seat. or SEAT_BACK</description>
+ </element>
+ <element name="SEAT_CUSHION">
+ <description>The bottom a multi-contour massage seat. or SEAT_BOTTOM </description>
+ </element>
+ </enum>
+
+ <enum name="MassageMode">
+ <description>List possible modes of a massage zone.</description>
+ <element name="OFF"/>
+ <element name="LOW"/>
+ <element name="HIGH"/>
+ </enum>
+
+ <struct name="MassageModeData">
+ <description>Specify the mode of a massage zone.</description>
+ <param name="massageZone" type="MassageZone" mandatory="true"></param>
+ <param name="massageMode" type="MassageMode" mandatory="true"></param>
+ </struct>
+
+ <enum name="MassageCushion">
+ <description>List possible cushions of a multi-contour massage seat.</description>
+ <element name="TOP_LUMBAR"/>
+ <element name="MIDDLE_LUMBAR"/>
+ <element name="BOTTOM_LUMBAR"/>
+ <element name="BACK_BOLSTERS"/>
+ <element name="SEAT_BOLSTERS"/>
+ </enum>
+
+ <struct name="MassageCushionFirmness">
+ <description>The intensity or firmness of a cushion.</description>
+ <param name="cushion" type="MassageCushion" mandatory="true"></param>
+ <param name="firmness" type="Integer" minvalue="0" maxvalue="100" mandatory="true"></param>
+ </struct>
+
+ <enum name="SeatMemoryActionType">
+ <element name="SAVE">
+ <description>Save current seat postions and settings to seat memory.</description>
+ </element>
+ <element name="RESTORE">
+ <description>Restore / apply the seat memory settings to the current seat. </description>
+ </element>
+ <element name="NONE">
+ <description>No action to be performed.</description>
+ </element>
+ </enum>
+
+ <struct name="SeatMemoryAction">
+ <param name="id" type="Integer" minvalue="1" maxvalue="10" mandatory="true"/>
+ <param name="label" type="String" maxlength="100" mandatory="false"/>
+ <param name="action" type="SeatMemoryActionType" mandatory="true"/>
+ </struct>
+
+ <enum name="SupportedSeat">
+ <description>List possible seats that is a remote controllable seat.</description>
+ <element name="DRIVER"/>
+ <element name="FRONT_PASSENGER"/>
+ </enum>
+
+ <struct name="SeatControlData">
+ <description>Seat control data corresponds to "SEAT" ModuleType. </description>
+ <param name="id" type="SupportedSeat" mandatory="true"></param>
+
+ <param name="heatingEnabled" type="Boolean" mandatory="false"></param>
+ <param name="coolingEnabled" type="Boolean" mandatory="false"></param>
+ <param name="heatingLevel" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="coolingLevel" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+
+ <param name="horizontalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="verticalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="frontVerticalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="backVerticalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="backTiltAngle" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+
+ <param name="headSupportHorizontalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+ <param name="headSupportVerticalPosition" type="Integer" minvalue="0" maxvalue="100" mandatory="false"></param>
+
+ <param name="massageEnabled" type="Boolean" mandatory="false"></param>
+ <param name="massageMode" type="MassageModeData" minsize="1" maxsize="2" array="true" mandatory="false"></param>
+ <param name="massageCushionFirmness" type="MassageCushionFirmness" minsize="1" maxsize="5" array="true" mandatory="false"></param>
+ <param name="memory" type="SeatMemoryAction" mandatory="false"></param>
+ </struct>
+
+ <struct name="SeatControlCapabilities">
+ <param name="moduleName" type="String" maxlength="100" mandatory="true">
+ <description>
+ The short friendly name of the light control module.
+ It should not be used to identify a module by mobile application.
+ </description>
+ </param>
+ <param name="heatingEnabledAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="coolingEnabledAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="heatingLevelAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="coolingLevelAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="horizontalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="verticalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="frontVerticalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="backVerticalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="backTiltAngleAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="headSupportHorizontalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="headSupportVerticalPositionAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="massageEnabledAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="massageModeAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="massageCushionFirmnessAvailable" type="Boolean" mandatory="false">
+ </param>
+ <param name="memoryAvailable" type="Boolean" mandatory="false">
+ </param>
+ </struct>
+
<struct name="Temperature">
<param name="unit" type="TemperatureUnit" mandatory="true">
<description>Temperature Unit</description>
@@ -2733,16 +2889,6 @@
</param>
</struct>
- <struct name="ModuleData">
- <description>The moduleType indicates which type of data should be changed and identifies which data object exists in this struct. For example, if the moduleType is CLIMATE then a "climateControlData" should exist</description>
- <param name="moduleType" type="ModuleType" mandatory="true">
- </param>
- <param name="radioControlData" type="RadioControlData" mandatory="false">
- </param>
- <param name="climateControlData" type="ClimateControlData" mandatory="false">
- </param>
- </struct>
-
<struct name="RadioControlCapabilities">
<description>Contains information about a radio control module's capabilities.</description>
<!-- need an ID in the future -->
@@ -2881,6 +3027,18 @@
</param>
</struct>
+ <struct name="ModuleData">
+ <description>The moduleType indicates which type of data should be changed and identifies which data object exists in this struct. For example, if the moduleType is CLIMATE then a "climateControlData" should exist</description>
+ <param name="moduleType" type="ModuleType" mandatory="true">
+ </param>
+ <param name="radioControlData" type="RadioControlData" mandatory="false">
+ </param>
+ <param name="climateControlData" type="ClimateControlData" mandatory="false">
+ </param>
+ <param name="seatControlData" type="SeatControlData" mandatory="false">
+ </param>
+ </struct>
+
<struct name="RemoteControlCapabilities">
<param name="climateControlCapabilities" type="ClimateControlCapabilities" mandatory="false" minsize="1" maxsize="100" array="true">
<description>If included, the platform supports RC climate controls. For this baseline version, maxsize=1. i.e. only one climate control module is supported.</description >
@@ -2891,6 +3049,11 @@
<param name="buttonCapabilities" type="ButtonCapabilities" mandatory="false" minsize="1" maxsize="100" array="true" >
<description>If included, the platform supports RC button controls with the included button names.</description >
</param>
+ <param name="seatControlCapabilities" type="SeatControlCapabilities" mandatory="false" minsize="1" maxsize="100" array="true">
+ <description>
+ If included, the platform supports seat controls.
+ </description >
+ </param>
</struct>
<!-- End of RC -->
@@ -4239,6 +4402,10 @@
<param name="engineOilLife" type="Boolean" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Boolean" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
+
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="Boolean" mandatory="false">
@@ -4351,6 +4518,10 @@
<param name="engineOilLife" type="VehicleDataResult" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="VehicleDataResult" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
+
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="VehicleDataResult" mandatory="false">
@@ -4441,6 +4612,10 @@
<param name="engineOilLife" type="Boolean" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Boolean" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
+
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="Boolean" mandatory="false">
@@ -4551,6 +4726,10 @@
<param name="engineOilLife" type="VehicleDataResult" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="VehicleDataResult" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
+
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="VehicleDataResult" mandatory="false">
@@ -4644,6 +4823,10 @@
<param name="engineOilLife" type="Boolean" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="Boolean" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
+
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="Boolean" mandatory="false">
@@ -4758,6 +4941,10 @@
<param name="engineOilLife" type="Float" minvalue="0" maxvalue="100" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="ElectronicParkBrakeStatus" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
+
<!-- Ford Specific Data Items -->
<param name="eCallInfo" type="ECallInfo" mandatory="false">
@@ -6000,6 +6187,10 @@
<param name="engineOilLife" type="Float" minvalue="0" maxvalue="100" mandatory="false">
<description>The estimated percentage of remaining oil life of the engine.</description>
</param>
+ <param name="electronicParkBrakeStatus" type="ElectronicParkBrakeStatus" mandatory="false">
+ <description>The status of the park brake as provided by Electric Park Brake (EPB) system.</description>
+ </param>
+
<!-- Ford Specific Vehicle Data -->
<param name="eCallInfo" type="ECallInfo" mandatory="false">
@@ -6151,6 +6342,21 @@
<param name="moduleData" type="ModuleData" mandatory="true">
</param>
</function>
+
+ <function name="OnRCStatus" functionID="OnRCStatusID" messagetype="notification">
+ <description>Issued by SDL to notify the application about remote control status change on SDL</description>
+ <param name="allowed" type="Boolean" mandatory="false">
+ <description>
+ If "true" - RC is allowed; if "false" - RC is disallowed.
+ </description>
+ </param>
+ <param name="allocatedModules" type="ModuleData" minsize="0" maxsize="100" array="true" mandatory="true">
+ <description>Contains a list (zero or more) of module types that are allocated to the application.</description>
+ </param>
+ <param name="freeModules" type="ModuleData" minsize="0" maxsize="100" array="true" mandatory="true">
+ <description>Contains a list (zero or more) of module types that are free to access for the application.</description>
+ </param>
+ </function>
<!-- ~~~~~~~~~~~~~~~~~~ -->
<!-- Ford Specific APIs -->
diff --git a/src/components/interfaces/QT_HMI_API.xml b/src/components/interfaces/QT_HMI_API.xml
deleted file mode 100644
index 0c86d4eea3..0000000000
--- a/src/components/interfaces/QT_HMI_API.xml
+++ /dev/null
@@ -1,5517 +0,0 @@
-<!--
- * Copyright (c) 2013, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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. -->
-
-<!--
- * DEPRECATED, use HMI_API instead. This API is used with the DBus adapter,
- * which will be removed or refactored to use HMI_API in the next major release
--->
-<interfaces name="SmartDeviceLink HMI API">
- <interface name="Common" version="1.1" date="2013-10-02">
- <enum name="Result">
- <element name="SUCCESS" value="0"/>
- <element name="UNSUPPORTED_REQUEST" value="1"/>
- <element name="UNSUPPORTED_RESOURCE" value="2"/>
- <element name="DISALLOWED" value="3"/>
- <element name="REJECTED" value="4"/>
- <element name="ABORTED" value="5"/>
- <element name="IGNORED" value="6"/>
- <element name="RETRY" value="7"/>
- <element name="IN_USE" value="8"/>
- <element name="DATA_NOT_AVAILABLE" value="9"/>
- <element name="TIMED_OUT" value="10"/>
- <element name="INVALID_DATA" value="11"/>
- <element name="CHAR_LIMIT_EXCEEDED" value="12"/>
- <element name="INVALID_ID" value="13"/>
- <element name="DUPLICATE_NAME" value="14"/>
- <element name="APPLICATION_NOT_REGISTERED" value="15"/>
- <element name="WRONG_LANGUAGE" value="16"/>
- <element name="OUT_OF_MEMORY" value="17"/>
- <element name="TOO_MANY_PENDING_REQUESTS" value="18"/>
- <element name="NO_APPS_REGISTERED" value="19"/>
- <element name="NO_DEVICES_CONNECTED" value="20"/>
- <element name="WARNINGS" value="21"/>
- <element name="GENERIC_ERROR" value="22"/>
- <element name="USER_DISALLOWED" value="23"/>
- <element name="TRUNCATED_DATA" value="24"/>
- <element name="SAVED" value="25"/>
- <element name="READ_ONLY" value="26"/>
- </enum>
- <enum name="TransportType">
- <description>
- Lists of the transport types used for device connection to HU.
- </description>
- <element name="BLUETOOTH"/>
- <element name="USB_IOS"/>
- <element name="USB_AOA"/>
- <element name="WIFI"/>
- </enum>
- <enum name="ButtonName">
- <description>Defines the hard (physical) and soft (touchscreen) buttons available from SYNC</description>
- <element name="OK"/>
- <element name="SEEKLEFT"/>
- <element name="SEEKRIGHT"/>
- <element name="TUNEUP"/>
- <element name="TUNEDOWN"/>
- <element name="PRESET_0"/>
- <element name="PRESET_1"/>
- <element name="PRESET_2"/>
- <element name="PRESET_3"/>
- <element name="PRESET_4"/>
- <element name="PRESET_5"/>
- <element name="PRESET_6"/>
- <element name="PRESET_7"/>
- <element name="PRESET_8"/>
- <element name="PRESET_9"/>
- <element name="CUSTOM_BUTTON"/>
- <element name="SEARCH"/>
- </enum>
- <enum name="ButtonEventMode">
- <element name="BUTTONUP">
- <description>A button has been released up</description>
- </element>
- <element name="BUTTONDOWN">
- <description>A button has been pressed down</description>
- </element>
- </enum>
- <enum name="ButtonPressMode">
- <element name="LONG">
- <description>A button was released, after it was pressed for a long time. Actual timing is defined by head unit and may vary</description>
- </element>
- <element name="SHORT">
- <description>A button was released, after it was pressed for a short time. Actual timing is defined by head unit and may vary</description>
- </element>
- </enum>
- <enum name="Language">
- <element name="EN-US" internal_name="EN_US">
- <description>English - US</description>
- </element>
- <element name="ES-MX" internal_name="ES_MX">
- <description>Spanish - Mexico</description>
- </element>
- <element name="FR-CA" internal_name="FR_CA">
- <description>French - Canada</description>
- </element>
- <element name="DE-DE" internal_name="DE_DE">
- <description>German - Germany</description>
- </element>
- <element name="ES-ES" internal_name="ES_ES">
- <description>Spanish - Spain</description>
- </element>
- <element name="EN-GB" internal_name="EN_GB">
- <description>English - GB</description>
- </element>
- <element name="RU-RU" internal_name="RU_RU">
- <description>Russian - Russia</description>
- </element>
- <element name="TR-TR" internal_name="TR_TR">
- <description>Turkish - Turkey</description>
- </element>
- <element name="PL-PL" internal_name="PL_PL">
- <description>Polish - Poland</description>
- </element>
- <element name="FR-FR" internal_name="FR_FR">
- <description>French - France</description>
- </element>
- <element name="IT-IT" internal_name="IT_IT">
- <description>Italian - Italy</description>
- </element>
- <element name="SV-SE" internal_name="SV_SE">
- <description>Swedish - Sweden</description>
- </element>
- <element name="PT-PT" internal_name="PT_PT">
- <description>Portuguese - Portugal</description>
- </element>
- <element name="NL-NL" internal_name="NL_NL">
- <description>Dutch (Standard) - Netherlands</description>
- </element>
- <element name="EN-AU" internal_name="EN_AU">
- <description>English - Australia</description>
- </element>
- <element name="ZH-CN" internal_name="ZH_CN">
- <description>Mandarin - China</description>
- </element>
- <element name="ZH-TW" internal_name="ZH_TW">
- <description>Mandarin - Taiwan</description>
- </element>
- <element name="JA-JP" internal_name="JA_JP">
- <description>Japanese - Japan</description>
- </element>
- <element name="AR-SA" internal_name="AR_SA">
- <description>Arabic - Saudi Arabia</description>
- </element>
- <element name="KO-KR" internal_name="KO_KR">
- <description>Korean - South Korea</description>
- </element>
- <element name="PT-BR" internal_name="PT_BR">
- <description>Portuguese - Brazil</description>
- </element>
- <element name="CS-CZ" internal_name="CS_CZ">
- <description>Czech - Czech Republic</description>
- </element>
- <element name="DA-DK" internal_name="DA_DK">
- <description>Danish - Denmark</description>
- </element>
- <element name="NO-NO" internal_name="NO_NO">
- <description>Norwegian - Norway</description>
- </element>
- <element name="NL-BE" internal_name="NL_BE">
- <description>Dutch (Flemish) - Belgium</description>
- </element>
- <element name="EL-GR" internal_name="EL_GR">
- <description>Greek - Greece</description>
- </element>
- <element name="HU-HU" internal_name="HU_HU">
- <description>Hungarian - Hungary</description>
- </element>
- <element name="FI-FI" internal_name="FI_FI">
- <description>Finnish - Finland</description>
- </element>
- <element name="SK-SK" internal_name="SK_SK">
- <description>Slovak - Slovakia</description>
- </element>
- <element name="EN-IN" internal_name="EN_IN">
- <description>English - India</description>
- </element>
- <element name="TH-TH" internal_name="TH_TH">
- <description>Thai - Thailand</description>
- </element>
- <element name="EN-SA" internal_name="EN_SA">
- <description>English - Middle East</description>
- </element>
- <element name="HE-IL" internal_name="HE_IL">
- <description>Hebrew - Israel</description>
- </element>
- <element name="RO-RO" internal_name="RO_RO">
- <description>Romanian - Romania</description>
- </element>
- <element name="UK-UA" internal_name="UK_UA">
- <description>Ukrainian - Ukraine</description>
- </element>
- <element name="ID-ID" internal_name="ID_ID">
- <description>Indonesian - Indonesia</description>
- </element>
- <element name="VI-VN" internal_name="VI_VN">
- <description>Vietnamese - Vietnam</description>
- </element>
- <element name="MS-MY" internal_name="MS_MY">
- <description>Malay - Malaysia</description>
- </element>
- <element name="HI-IN" internal_name="HI_IN">
- <description>Hindi - India</description>
- </element>
- </enum>
- <enum name="SoftButtonType">
- <description>Contains information about the SoftButton capabilities.</description>
- <element name="TEXT" internal_name="SBT_TEXT"/>
- <element name="IMAGE" internal_name="SBT_IMAGE"/>
- <element name="BOTH" internal_name="SBT_BOTH"/>
- </enum>
- <enum name="SystemAction">
- <description>Enumeration that describes system actions that can be triggered.</description>
- <element name="DEFAULT_ACTION">
- <description>Default action occurs. Standard behavior (e.g. SoftButton clears overlay).</description>
- </element>
- <element name="STEAL_FOCUS">
- <description>The calling app's dialog or related event should clear and the app should be brought into HMI_FULL.</description>
- </element>
- <element name="KEEP_CONTEXT">
- <description>Current system context is maintained. An overlay is persisted even though a SoftButton has been pressed and the notification sent.</description>
- </element>
- </enum>
- <enum name="AppHMIType">
- <description>Enumeration listing possible app types.</description>
- <element name="DEFAULT"/>
- <element name="COMMUNICATION"/>
- <element name="MEDIA"/>
- <element name="MESSAGING"/>
- <element name="NAVIGATION"/>
- <element name="INFORMATION"/>
- <element name="SOCIAL"/>
- <element name="BACKGROUND_PROCESS"/>
- <element name="TESTING"/>
- <element name="SYSTEM"/>
- </enum>
- <enum name="WayPointType">
- <description>Describes what kind of waypoint is requested/provided.</description>
- <element name="ALL" />
- <element name="DESTINATION" />
- </enum>
-
- <struct name="Coordinate">
- <param name="latitudeDegrees" minvalue="-90" maxvalue="90" type="Float" mandatory="true">
- <description>Latitude of the location.</description>
- </param>
- <param name="longitudeDegrees" minvalue="-180" maxvalue="180" type="Float" mandatory="true">
- <description>Longitude of the location.</description>
- </param>
- </struct>
- <enum name="LayoutMode">
- <description>For touchscreen interactions, the mode of how the choices are presented.</description>
- <element name="ICON_ONLY"/>
- <description>This mode causes the interaction to display the previous set of choices as icons.</description>
- <element name="ICON_WITH_SEARCH"/>
- <description>This mode causes the interaction to display the previous set of choices as icons along with a search field in the HMI.</description>
- <element name="LIST_ONLY"/>
- <description>This mode causes the interaction to display the previous set of choices as a list.</description>
- <element name="LIST_WITH_SEARCH"/>
- <description>This mode causes the interaction to display the previous set of choices as a list along with a search field in the HMI.</description>
- <element name="KEYBOARD"/>
- <description>This mode causes the interaction to immediately display a keyboard entry through the HMI.</description>
- </enum>
- <enum name="DeactivateReason">
- <description>Specifies the functionality the User has switched to.</description>
- <element name="AUDIO">
- <description>Navigated to audio(radio, etc)</description>
- </element>
- <element name="PHONECALL">
- <description>Navigated to make a call.</description>
- </element>
- <element name="NAVIGATIONMAP">
- <description>Navigated to navigation screen.</description>
- </element>
- <element name="PHONEMENU">
- <description>Navigated to phone menu.</description>
- </element>
- <element name="SYNCSETTINGS">
- <description>Navigated to settings menu.</description>
- </element>
- <element name="GENERAL">
- <description>Other screens navigation apart from other mobile app.</description>
- </element>
- </enum>
- <enum name="ClockUpdateMode">
- <description>Describes how the media clock timer should behave on the platform</description>
- <element name="COUNTUP"/>
- <description>Starts the media clock timer counting upwards, as in time elapsed.</description>
- <element name="COUNTDOWN"/>
- <description>Starts the media clock timer counting downwards, as in time remaining.</description>
- <element name="PAUSE"/>
- <description>Pauses the media clock timer</description>
- <element name="RESUME"/>
- <description>Resume the media clock timer</description>
- <element name="CLEAR"/>
- <description>Clears the media clock timer (previously done through Show-&gt;mediaClock)</description>
- </enum>
- <enum name="SystemContext">
- <description>Enumeration that describes possible contexts the application might be in on HU.</description>
- <description>Communicated to whichever app is in HMI FULL, except Alert.</description>
- <element name="MAIN" internal_name="SYSCTXT_MAIN">
- <description>The app's persistent display (whether media/non-media/navigation) is fully visible onscreen.</description>
- <description> There is currently no user interaction (user-initiated or app-initiated) with the head-unit</description>
- </element>
- <element name="VRSESSION" internal_name="SYSCTXT_VRSESSION">
- <description>The system is currently in a VR session (with whatever dedicated VR screen being overlaid onscreen).</description>
- </element>
- <element name="MENU" internal_name="SYSCTXT_MENU">
- <description>The system is currently displaying a system or in-App menu onscreen.</description>
- </element>
- <element name="HMI_OBSCURED" internal_name="SYSCTXT_HMI_OBSCURED">
- <description>The app's display HMI is currently obscuring with either a system or other app's overlay (except of Alert element).</description>
- </element>
- <element name="ALERT" internal_name="SYSCTXT_ALERT">
- <description>Broadcast only to whichever app has an alert currently being displayed.</description>
- </element>
- </enum>
- <enum name="HmiZoneCapabilities">
- <description>Contains information about the HMI zone capabilities.</description>
- <description>For future use.</description>
- <element name="FRONT"/>
- <element name="BACK"/>
- </enum>
- <enum name="SpeechCapabilities">
- <description>Contains information about the TTS capabilities.</description>
- <element name="TEXT" internal_name="SC_TEXT"/>
- <element name="SAPI_PHONEMES"/>
- <element name="LHPLUS_PHONEMES"/>
- <element name="PRE_RECORDED"/>
- <element name="SILENCE"/>
- </enum>
- <enum name="VrCapabilities">
- <description>Contains information about the VR capabilities.</description>
- <element name="TEXT" internal_name="VR_TEXT"/>
- </enum>
- <enum name="PrerecordedSpeech">
- <description>Contains a list of prerecorded speech items present on the platform.</description>
- <element name="HELP_JINGLE"/>
- <element name="INITIAL_JINGLE"/>
- <element name="LISTEN_JINGLE"/>
- <element name="POSITIVE_JINGLE"/>
- <element name="NEGATIVE_JINGLE"/>
- </enum>
- <enum name="TBTState">
- <description>Enumeration that describes possible states of turn-by-turn client or SmartDeviceLink app.</description>
- <element name="ROUTE_UPDATE_REQUEST"/>
- <element name="ROUTE_ACCEPTED"/>
- <element name="ROUTE_REFUSED"/>
- <element name="ROUTE_CANCELLED"/>
- <element name="ETA_REQUEST"/>
- <element name="NEXT_TURN_REQUEST"/>
- <element name="ROUTE_STATUS_REQUEST"/>
- <element name="ROUTE_SUMMARY_REQUEST"/>
- <element name="TRIP_STATUS_REQUEST"/>
- <element name="ROUTE_UPDATE_REQUEST_TIMEOUT"/>
- </enum>
- <enum name="ApplicationsCloseReason">
- <description>Describes the reasons for exiting all of applications.</description>
- <element name="IGNITION_OFF"/>
- <element name="MASTER_RESET"/>
- <element name="FACTORY_DEFAULTS"/>
- <element name="SUSPEND"/>
- </enum>
- <enum name="DisplayType">
- <description>The possible types of HU display.</description>
- <element name="CID">
- <description> A 2-line x 20 character "dot matrix" display </description>
- </element>
- <element name="TYPE2">
- <description> 1 line older radio head unit.</description>
- </element>
- <element name="TYPE5">
- <description> Old radio head unit.</description>
- </element>
- <element name="NGN">
- <description> Next Generation Navigation display.</description>
- </element>
- <element name="GEN2_8_DMA">
- <description> GEN-2, 8 inch display.</description>
- </element>
- <element name="GEN2_6_DMA">
- <description> GEN-2, 6 inch display.</description>
- </element>
- <element name="MFD3">
- <description> 3 inch GEN1.1 display </description>
- </element>
- <element name="MFD4">
- <description> 4 inch GEN1.1 display </description>
- </element>
- <element name="MFD5">
- <description> 5 inch GEN1.1 display </description>
- </element>
- <element name="GEN3_8_INCH"/>
- </enum>
- <enum name="ImageType">
- <description>Contains information about the type of image.</description>
- <element name="STATIC"/>
- <element name="DYNAMIC"/>
- </enum>
- <enum name="ApplicationExitReason">
- <element name="DRIVER_DISTRACTION_VIOLATION">
- <description>By getting this value, SDL puts the named app to NONE HMILevel</description>
- </element>
- <element name="USER_EXIT">
- <description>By getting this value, SDL puts the named app to NONE HMILevel</description>
- </element>
- <element name="UNAUTHORIZED_TRANSPORT_REGISTRATION">
- <description>By getting this value, SDL unregisters the named application</description>
- </element>
- <element name="UNSUPPORTED_HMI_RESOURCE">
- <description>By getting this value, SDL unregisters the named application</description>
- </element>
- </enum>
- <enum name="TextFieldName">
- <element name="mainField1">
- <description>The first line of first set of main fields of the persistent display; applies to "Show"</description>
- </element>
- <element name="mainField2">
- <description>The second line of first set of main fields of the persistent display; applies to "Show"</description>
- </element>
- <element name="mainField3">
- <description>The first line of second set of main fields of persistent display; applies to "Show"</description>
- </element>
- <element name="mainField4">
- <description>The second line of second set of main fields of the persistent display; applies to "Show"</description>
- </element>
- <element name="statusBar">
- <description>The status bar on NGN; applies to "Show"</description>
- </element>
- <element name="mediaClock">
- <description>Text value for MediaClock field; applies to "Show"</description>
- </element>
- <element name="mediaTrack">
- <description>The track field of NGN and GEN1.1 MFD displays. This field is only available for media applications; applies to "Show"</description>
- </element>
- <element name="alertText1">
- <description>The first line of the alert text field; applies to "Alert"</description>
- </element>
- <element name="alertText2">
- <description>The second line of the alert text field; applies to "Alert"</description>
- </element>
- <element name="alertText3">
- <description>The third line of the alert text field; applies to "Alert"</description>
- </element>
- <element name="scrollableMessageBody">
- <description>Long form body of text that can include newlines and tabs; applies to "ScrollableMessage"</description>
- </element>
- <element name="initialInteractionText">
- <description> First line suggestion for a user response (in the case of VR enabled interaction</description>
- </element>
- <element name="navigationText1">
- <description> First line of navigation text</description>
- </element>
- <element name="navigationText2">
- <description> Second line of navigation text</description>
- </element>
- <element name="ETA">
- <description> Estimated Time of Arrival time for navigation</description>
- </element>
- <element name="totalDistance">
- <description> Total distance to destination for navigation</description>
- </element>
- <element name="audioPassThruDisplayText1">
- <description> First line of text for audio pass thru</description>
- </element>
- <element name="audioPassThruDisplayText2">
- <description> Second line of text for audio pass thru</description>
- </element>
- <element name="sliderHeader">
- <description> Header text for slider</description>
- </element>
- <element name="sliderFooter">
- <description> Footer text for slider</description>
- </element>
- <element name="menuName">
- <description> Primary text for Choice</description>
- </element>
- <element name="secondaryText">
- <description> Secondary text for Choice</description>
- </element>
- <element name="tertiaryText">
- <description> Tertiary text for Choice</description>
- </element>
- <element name="menuTitle">
- <description> Optional text to label an app menu button (for certain touchscreen platforms).</description>
- </element>
- <element name="timeToDestination"/>
- <element name="navigationText">
- <description>Navigation text for UpdateTurnList.</description>
- </element>
- <element name="notificationText">
- <description>Text of notification to be displayed on screen.</description>
- </element>
- <element name="locationName">
- <description> Optional name / title of intended location for SendLocation.</description>
- </element>
- <element name="locationDescription">
- <description> Optional description of intended location / establishment (if applicable) for SendLocation.</description>
- </element>
- <element name="addressLines">
- <description> Optional location address (if applicable) for SendLocation.</description>
- </element>
- <element name="phoneNumber">
- <description> Optional hone number of intended location / establishment (if applicable) for SendLocation.</description>
- </element>
- <!-- TO DO to be removed -->
- <element name="turnText"/>
- </enum>
- <enum name="MetadataType">
- <element name="mediaTitle">
- <description>The data in this field contains the title of the currently playing audio track.</description>
- </element>
- <element name="mediaArtist">
- <description>The data in this field contains the artist or creator of the currently playing audio track.</description>
- </element>
- <element name="mediaAlbum">
- <description>The data in this field contains the album title of the currently playing audio track.</description>
- </element>
- <element name="mediaYear">
- <description>The data in this field contains the creation year of the currently playing audio track.</description>
- </element>
- <element name="mediaGenre">
- <description>The data in this field contains the genre of the currently playing audio track.</description>
- </element>
- <element name="mediaStation">
- <description>The data in this field contains the name of the current source for the media.</description>
- </element>
- <element name="rating">
- <description>The data in this field is a rating.</description>
- </element>
- <element name="currentTemperature">
- <description>The data in this field is the current temperature.</description>
- </element>
- <element name="maximumTemperature">
- <description>The data in this field is the maximum temperature for the day.</description>
- </element>
- <element name="minimumTemperature">
- <description>The data in this field is the minimum temperature for the day.</description>
- </element>
- <element name="weatherTerm">
- <description>The data in this field describes the current weather (ex. cloudy, clear, etc.).</description>
- </element>
- <element name="humidity">
- <description>The data in this field describes the current humidity value.</description>
- </element>
- </enum>
- <enum name="ImageFieldName">
- <element name="softButtonImage">
- <description>The image field for SoftButton</description>
- </element>
- <element name="choiceImage">
- <description>The first image field for Choice</description>
- </element>
- <element name="choiceSecondaryImage">
- <description>The secondary image field for Choice</description>
- </element>
- <element name="vrHelpItem">
- <description>The image field for vrHelpItem</description>
- </element>
- <element name="turnIcon">
- <description>The image field for Turn</description>
- </element>
- <element name="menuIcon">
- <description>The image field for the menu icon in SetGlobalProperties</description>
- </element>
- <element name="cmdIcon">
- <description>The image field for AddCommand</description>
- </element>
- <element name="appIcon">
- <description>The image field for the app icon (set by setAppIcon)</description>
- </element>
- <element name="graphic">
- <description>The image field for Show</description>
- </element>
- <element name="showConstantTBTIcon">
- <description>The primary image field for ShowConstantTBT</description>
- </element>
- <element name="showConstantTBTNextTurnIcon">
- <description>The secondary image field for ShowConstantTBT</description>
- </element>
- <element name="locationImage">
- <description>The optional image of a destination / location</description>
- </element>
- </enum>
- <enum name="TextAlignment">
- <description>The list of possible alignments, left, right, or centered</description>
- <element name="LEFT_ALIGNED"/>
- <element name="RIGHT_ALIGNED"/>
- <element name="CENTERED"/>
- </enum>
- <enum name="DriverDistractionState">
- <description>Enumeration that describes possible states of driver distraction.</description>
- <element name="DD_ON"/>
- <element name="DD_OFF"/>
- </enum>
- <enum name="MediaClockFormat">
- <element name="CLOCK1">
- <description>
- minutesFieldWidth = 2;minutesFieldMax = 19;secondsFieldWidth = 2;secondsFieldMax = 99;maxHours = 19;maxMinutes = 59;maxSeconds = 59;
- Is used for Type II, NGN and CID head units.
- </description>
- </element>
- <element name="CLOCK2">
- <description>
- minutesFieldWidth = 3;minutesFieldMax = 199;secondsFieldWidth = 2;secondsFieldMax = 99;maxHours = 59;maxMinutes = 59;maxSeconds = 59;
- Is used for Type V head units.
- </description>
- </element>
- <element name="CLOCK3">
- <description>
- minutesFieldWidth = 2;minutesFieldMax = 59;secondsFieldWidth = 2;secondsFieldMax = 59;maxHours = 9;maxMinutes = 59;maxSeconds = 59;
- Is used for GEN1.1 (i.e. MFD3/4/5) head units.
- </description>
- </element>
- <element name="CLOCKTEXT1">
- <description>
- 5 characters possible
- Format: 1|sp c :|sp c c
- 1|sp : digit "1" or space
- c : character out of following character set: sp|0-9|[letters
- :|sp : colon or space
- Is used for Type II head unit
- </description>
- </element>
- <element name="CLOCKTEXT2">
- <description>
- 5 chars possible
- Format: 1|sp c :|sp c c
- 1|sp : digit "1" or space
- c : character out of following character set: sp|0-9|[letters
- :|sp : colon or space
- Is used for CID and NGN head unit
- </description>
- </element>
- <element name="CLOCKTEXT3">
- <description>
- 6 chars possible
- Format: 1|sp c c :|sp c c
- 1|sp : digit "1" or space
- c : character out of following character set: sp|0-9|[letters
- :|sp : colon or space
- Is used for Type V head unit
- </description>
- </element>
- <element name="CLOCKTEXT4">
- <description>
- 6 chars possible
- Format: c :|sp c c : c c
- :|sp : colon or space
- c : character out of following character set: sp|0-9|[letters].
- Is used for GEN1.1 (i.e. MFD3/4/5) head units
- </description>
- </element>
- </enum>
- <enum name="VRCommandType">
- <element name="Choice">
- <description>Type that expound that current AddCommand should be pocessed as choise for initiated PerformInteraction request for current active on HMI.</description>
- </element>
- <element name="Command">
- <description>Type that expound that current AddCommand should be pocessed as common command for current application on HMI.</description>
- </element>
- </enum>
- <!--IVI part-->
- <enum name="ComponentVolumeStatus">
- <description>The volume status of a vehicle component.</description>
- <element name="UNKNOWN" internal_name="CVS_UNKNOWN">
- <description> The data is unknown.</description>
- </element>
- <element name="NORMAL" internal_name="CVS_NORMAL">
- <description> The volume is normal.</description>
- </element>
- <element name="LOW" internal_name="CVS_LOW">
- <description> The volume is low.</description>
- </element>
- <element name="FAULT" internal_name="CVS_FAULT">
- <description> The module/sensor is currently faulted. </description>
- </element>
- <element name="ALERT" internal_name="CVS_ALERT">
- <description> The component`s volume is in critical level.</description>
- </element>
- <element name="NOT_SUPPORTED" internal_name="CVS_NOT_SUPPORTED">
- <description> The data is not supported.</description>
- </element>
- </enum>
- <enum name="PRNDL">
- <description>The selected gear.</description>
- <element name="PARK">
- <description>Parking</description>
- </element>
- <element name="REVERSE">
- <description>Reverse gear</description>
- </element>
- <element name="NEUTRAL">
- <description>No gear</description>
- </element>
- <element name="DRIVE">
- </element>
- <element name="SPORT">
- <description>Drive Sport mode</description>
- </element>
- <element name="LOWGEAR">
- <description>1st gear hold</description>
- </element>
- <element name="FIRST">
- </element>
- <element name="SECOND">
- </element>
- <element name="THIRD">
- </element>
- <element name="FOURTH">
- </element>
- <element name="FIFTH">
- </element>
- <element name="SIXTH">
- </element>
- <element name="SEVENTH">
- </element>
- <element name="EIGHTH">
- </element>
- <element name="FAULT">
- </element>
- </enum>
- <enum name="VehicleDataEventStatus">
- <description>Reflects the status of a vehicle data event; e.g. a seat belt event status.</description>
- <element name="NO_EVENT" internal_name="VDES_NO_EVENT">
- <description> The system does not have the adequate information to send valid YES or NO states.</description>
- </element>
- <element name="NO" internal_name="VDES_NO">
- <description> The requested event is in NO state.</description>
- </element>
- <element name="YES" internal_name="VDES_YES">
- <description> The requested event is in YES state.</description>
- </element>
- <element name="NOT_SUPPORTED" internal_name="VDES_NOT_SUPPORTED">
- <description> The requested data is not supported </description>
- </element>
- <element name="FAULT" internal_name="VDES_FAULT">
- <description> The module/sensor is currently faulted.</description>
- </element>
- </enum>
- <enum name="VehicleDataStatus">
- <description>Reflects the status of a binary vehicle data item.</description>
- <element name="NO_DATA_EXISTS" internal_name="VDS_NO_DATA_EXISTS">
- </element>
- <element name="OFF" internal_name="VDS_OFF">
- </element>
- <element name="ON" internal_name="VDS_ON">
- </element>
- </enum>
- <enum name="IgnitionStableStatus">
- <description>Reflects the ignition switch stability.</description>
- <element name="IGNITION_SWITCH_NOT_STABLE">
- </element>
- <element name="IGNITION_SWITCH_STABLE">
- </element>
- <element name="MISSING_FROM_TRANSMITTER">
- <description> Either the data is not accessible or the sensor is broken.</description>
- </element>
- </enum>
- <enum name="IgnitionStatus">
- <description>Reflects the status of ignition.</description>
- <element name="UNKNOWN" internal_name="IS_UNKNOWN">
- <description> The information is not acceptable. </description>
- </element>
- <element name="OFF" internal_name="IS_OFF">
- <description> The ignition is off.</description>
- </element>
- <element name="ACCESSORY" internal_name="IS_ACCESSORY">
- <description> The accessories are active (power windows, audio, display, etc.).</description>
- </element>
- <element name="RUN" internal_name="IS_RUN">
- <description> Ignition is active.</description>
- </element>
- <element name="START" internal_name="IS_START">
- <description> Starter is switched.</description>
- </element>
- <element name="INVALID" internal_name="IS_INVALID">
- <description> The data is provided, but there is some sort of fault or problem.</description>
- </element>
- </enum>
- <enum name="DeviceLevelStatus">
- <description>Reflects the reported component status of the connected device, if reported.</description>
- <element name="ZERO_LEVEL_BARS">
- </element>
- <element name="ONE_LEVEL_BARS">
- </element>
- <element name="TWO_LEVEL_BARS">
- </element>
- <element name="THREE_LEVEL_BARS">
- </element>
- <element name="FOUR_LEVEL_BARS">
- </element>
- <element name="NOT_PROVIDED">
- </element>
- </enum>
- <enum name="PrimaryAudioSource">
- <description>Reflects the current primary audio source (if selected).</description>
- <element name="NO_SOURCE_SELECTED">
- </element>
- <element name="USB">
- </element>
- <element name="USB2">
- </element>
- <element name="BLUETOOTH_STEREO_BTST">
- </element>
- <element name="LINE_IN">
- </element>
- <element name="IPOD">
- </element>
- <element name="MOBILE_APP">
- </element>
- </enum>
- <enum name="CompassDirection">
- <description>The list of potential compass directions</description>
- <element name="NORTH">
- </element>
- <element name="NORTHWEST">
- </element>
- <element name="WEST">
- </element>
- <element name="SOUTHWEST">
- </element>
- <element name="SOUTH">
- </element>
- <element name="SOUTHEAST">
- </element>
- <element name="EAST">
- </element>
- <element name="NORTHEAST">
- </element>
- </enum>
- <enum name="Dimension">
- <description>The supported dimensions of the GPS</description>
- <element name="NO_FIX" internal_name="Dimension_NO_FIX">
- <description>No GPS at all</description>
- </element>
- <element name="2D" internal_name="Dimension_2D">
- <description>Longitude and lattitude</description>
- </element>
- <element name="3D" internal_name="Dimension_3D">
- <description>Longitude and lattitude and altitude</description>
- </element>
- </enum>
- <enum name="TouchType">
- <element name="BEGIN"/>
- <element name="MOVE"/>
- <element name="END"/>
- </enum>
- <enum name="WarningLightStatus">
- <description>Reflects the status of a cluster instrument warning light.</description>
- <element name="OFF" internal_name="WLS_OFF">
- </element>
- <element name="ON" internal_name="WLS_ON">
- </element>
- <element name="FLASH" internal_name="WLS_FLASH">
- </element>
- <element name="NOT_USED" internal_name="WLS_NOT_USED">
- </element>
- </enum>
- <enum name="VehicleDataResultCode">
- <description>Enumeration that describes possible result codes of a vehicle data entry request.</description>
- <element name="SUCCESS" internal_name="VDRC_SUCCESS"/>
- <element name="TRUNCATED_DATA" internal_name="VDRC_TRUNCATED_DATA"/>
- <element name="DISALLOWED" internal_name="VDRC_DISALLOWED"/>
- <element name="USER_DISALLOWED" internal_name="VDRC_USER_DISALLOWED"/>
- <element name="INVALID_ID" internal_name="VDRC_INVALID_ID"/>
- <element name="VEHICLE_DATA_NOT_AVAILABLE" internal_name="VDRC_DATA_NOT_AVAILABLE"/>
- <element name="DATA_ALREADY_SUBSCRIBED" internal_name="VDRC_DATA_ALREADY_SUBSCRIBED"/>
- <element name="DATA_NOT_SUBSCRIBED" internal_name="VDRC_DATA_NOT_SUBSCRIBED"/>
- <element name="IGNORED" internal_name="VDRC_IGNORED"/>
- </enum>
- <enum name="VehicleDataType">
- <description>Defines the data types that can be published and subscribed to.</description>
- <element name="VEHICLEDATA_GPS">
- <description>Notifies GPSData may be subscribed</description>
- </element>
- <element name="VEHICLEDATA_SPEED"/>
- <element name="VEHICLEDATA_RPM"/>
- <element name="VEHICLEDATA_FUELLEVEL"/>
- <element name="VEHICLEDATA_FUELLEVEL_STATE"/>
- <element name="VEHICLEDATA_FUELCONSUMPTION"/>
- <element name="VEHICLEDATA_EXTERNTEMP"/>
- <element name="VEHICLEDATA_VIN"/>
- <element name="VEHICLEDATA_PRNDL"/>
- <element name="VEHICLEDATA_TIREPRESSURE"/>
- <element name="VEHICLEDATA_ODOMETER"/>
- <element name="VEHICLEDATA_BELTSTATUS"/>
- <element name="VEHICLEDATA_BODYINFO"/>
- <element name="VEHICLEDATA_DEVICESTATUS"/>
- <element name="VEHICLEDATA_ECALLINFO"/>
- <element name="VEHICLEDATA_AIRBAGSTATUS"/>
- <element name="VEHICLEDATA_EMERGENCYEVENT"/>
- <element name="VEHICLEDATA_CLUSTERMODESTATUS"/>
- <element name="VEHICLEDATA_MYKEY"/>
- <element name="VEHICLEDATA_BRAKING"/>
- <element name="VEHICLEDATA_WIPERSTATUS"/>
- <element name="VEHICLEDATA_HEADLAMPSTATUS"/>
- <element name="VEHICLEDATA_BATTVOLTAGE"/>
- <element name="VEHICLEDATA_ENGINETORQUE"/>
- <element name="VEHICLEDATA_ACCPEDAL"/>
- <element name="VEHICLEDATA_STEERINGWHEEL"/>
- </enum>
- <enum name="WiperStatus">
- <description>Reflects the status of the wipers.</description>
- <element name="OFF">
- <description> The wipers are off.</description>
- </element>
- <element name="AUTO_OFF">
- <description> The wipers are automatically off </description>
- </element>
- <element name="OFF_MOVING">
- <description> Means that though set to off, somehow the wipers have been engaged (physically moved enough to engage a wiping motion).</description>
- </element>
- <element name="MAN_INT_OFF">
- <description> The wipers are manually off after having been working.</description>
- </element>
- <element name="MAN_INT_ON">
- <description> The wipers are manually on.</description>
- </element>
- <element name="MAN_LOW">
- <description> The wipers are manually set to low speed.</description>
- </element>
- <element name="MAN_HIGH">
- <description> The wipers are manually set to high speed.</description>
- </element>
- <element name="MAN_FLICK">
- <description> The wipers are manually set for doing a flick.</description>
- </element>
- <element name="WASH">
- <description> The wipers are set to use the water from vehicle washer bottle for cleaning the windscreen.</description>
- </element>
- <element name="AUTO_LOW">
- <description> The wipers are automatically set to low speed.</description>
- </element>
- <element name="AUTO_HIGH">
- <description> The wipers are automatically set to high speed.</description>
- </element>
- <element name="COURTESYWIPE">
- <description> This is for when a user has just initiated a WASH and several seconds later a secondary wipe is automatically initiated to clear remaining fluid.</description>
- </element>
- <element name="AUTO_ADJUST">
- <description> This is set as the user moves between possible automatic wiper speeds.</description>
- </element>
- <element name="STALLED">
- <description> The wiper is stalled to its place. </description>
- </element>
- <element name="NO_DATA_EXISTS">
- <description> The sensor / module cannot provide any information for wiper.</description>
- </element>
- </enum>
- <enum name="SamplingRate">
- <description>Describes different sampling options for PerformAudioPassThru.</description>
- <element name="8KHZ" internal_name="RATE_8KHZ"/>
- <element name="16KHZ" internal_name="RATE_16KHZ"/>
- <element name="22KHZ" internal_name="RATE_22KHZ"/>
- <element name="44KHZ" internal_name="RATE_44KHZ"/>
- </enum>
- <enum name="BitsPerSample">
- <description>Describes different quality options for PerformAudioPassThru.</description>
- <element name="8_BIT" internal_name="RATE_8_BIT"/>
- <element name="16_BIT" internal_name="RATE_16_BIT"/>
- </enum>
- <enum name="AudioType">
- <description>Describes different audio type options for PerformAudioPassThru.</description>
- <element name="PCM"/>
- </enum>
- <enum name="KeyboardLayout">
- <description>Enumeration listing possible keyboard layouts.</description>
- <element name="QWERTY"/>
- <element name="QWERTZ"/>
- <element name="AZERTY"/>
- </enum>
- <enum name="KeyboardEvent">
- <description>Enumeration listing possible keyboard events.</description>
- <element name="KEYPRESS"/>
- <element name="ENTRY_SUBMITTED"/>
- <element name="ENTRY_VOICE"/>
- <element name="ENTRY_CANCELLED"/>
- <element name="ENTRY_ABORTED"/>
- </enum>
- <enum name="KeypressMode">
- <description>Enumeration listing possible keyboard events.</description>
- <element name="SINGLE_KEYPRESS">
- <description>Each keypress is individually sent as the user presses the keyboard keys.</description>
- </element>
- <element name="QUEUE_KEYPRESSES">
- <description>The keypresses are queued and a string is eventually sent once the user chooses to submit their entry.</description>
- </element>
- <element name="RESEND_CURRENT_ENTRY">
- <description>The keypresses are queue and a string is sent each time the user presses a keyboard key; the string contains the entire current entry.</description>
- </element>
- </enum>
- <enum name="AmbientLightStatus">
- <description>Reflects the status of the ambient light sensor.</description>
- <element name="NIGHT"/>
- <element name="TWILIGHT_1"/>
- <element name="TWILIGHT_2"/>
- <element name="TWILIGHT_3"/>
- <element name="TWILIGHT_4"/>
- <element name="DAY"/>
- <element name="UNKNOWN"/>
- <element name="INVALID"/>
- </enum>
- <enum name="FileType">
- <description>Enumeration listing possible file types.</description>
- <element name="GRAPHIC_BMP"/>
- <element name="GRAPHIC_JPEG"/>
- <element name="GRAPHIC_PNG"/>
- <element name="AUDIO_WAVE"/>
- <element name="AUDIO_MP3"/>
- <element name="AUDIO_AAC"/>
- <element name="BINARY"/>
- <element name="JSON"/>
- </enum>
- <enum name="RequestType">
- <description>Enumeration listing possible asynchronous requests.</description>
- <element name="HTTP"/>
- <element name="FILE_RESUME"/>
- <element name="AUTH_REQUEST"/>
- <element name="AUTH_CHALLENGE"/>
- <element name="AUTH_ACK"/>
- <element name="PROPRIETARY"/>
- <element name="QUERY_APPS"/>
- <element name="LAUNCH_APP"/>
- <element name="LOCK_SCREEN_ICON_URL"/>
- <element name="TRAFFIC_MESSAGE_CHANNEL"/>
- <element name="DRIVER_PROFILE"/>
- <element name="VOICE_SEARCH"/>
- <element name="NAVIGATION"/>
- <element name="PHONE"/>
- <element name="CLIMATE"/>
- <element name="SETTINGS"/>
- <element name="VEHICLE_DIAGNOSTICS"/>
- <element name="EMERGENCY"/>
- <element name="MEDIA"/>
- <element name="FOTA"/>
- </enum>
- <enum name="ECallConfirmationStatus">
- <description>Reflects the status of the eCall Notification.</description>
- <element name="NORMAL" internal_name="ECCS_NORMAL">
- </element>
- <element name="CALL_IN_PROGRESS" internal_name="ECCS_CALL_IN_PROGRESS">
- </element>
- <element name="CALL_CANCELLED" internal_name="ECCS_CALL_CANCELLED">
- </element>
- <element name="CALL_COMPLETED">
- </element>
- <element name="CALL_UNSUCCESSFUL" internal_name="ECCS_CALL_UNSUCCESSFUL">
- </element>
- <element name="ECALL_CONFIGURED_OFF" internal_name="ECCS_ECALL_CONFIGURED_OFF">
- </element>
- <element name="CALL_COMPLETE_DTMF_TIMEOUT" internal_name="ECCS_CALL_COMPLETE_DTMF_TIMEOUT">
- </element>
- </enum>
- <enum name="VehicleDataNotificationStatus">
- <description>Reflects the status of a vehicle data notification.</description>
- <element name="NOT_SUPPORTED" internal_name="VDNS_NOT_SUPPORTED">
- </element>
- <element name="NORMAL" internal_name="VDNS_NORMAL">
- </element>
- <element name="ACTIVE" internal_name="VDNS_ACTIVE">
- </element>
- <element name="NOT_USED" internal_name="VDNS_NOT_USED">
- </element>
- </enum>
- <enum name="EmergencyEventType">
- <description>Reflects the emergency event status of the vehicle.</description>
- <element name="NO_EVENT" internal_name="EET_NO_EVENT">
- </element>
- <element name="FRONTAL" internal_name="EET_FRONTAL">
- </element>
- <element name="SIDE" internal_name="EET_SIDE">
- </element>
- <element name="REAR" internal_name="EET_REAR">
- </element>
- <element name="ROLLOVER" internal_name="EET_ROLLOVER">
- </element>
- <element name="NOT_SUPPORTED" internal_name="EET_NOT_SUPPORTED">
- </element>
- <element name="FAULT" internal_name="EET_FAULT">
- </element>
- </enum>
- <enum name="FuelCutoffStatus">
- <description>Reflects the status of the RCM fuel cutoff.</description>
- <element name="TERMINATE_FUEL" internal_name="FCS_TERMINATE_FUEL">
- </element>
- <element name="NORMAL_OPERATION" internal_name="FCS_NORMAL_OPERATION">
- </element>
- <element name="FAULT" internal_name="FCS_FAULT">
- </element>
- </enum>
- <enum name="PowerModeQualificationStatus">
- <description>Reflects the status of the current power mode qualification.</description>
- <element name="POWER_MODE_UNDEFINED">
- </element>
- <element name="POWER_MODE_EVALUATION_IN_PROGRESS">
- </element>
- <element name="NOT_DEFINED">
- </element>
- <element name="POWER_MODE_OK">
- </element>
- </enum>
- <enum name="CarModeStatus">
- <description>Reflects the status of the current car mode.</description>
- <element name="NORMAL" internal_name="CMS_NORMAL">
- </element>
- <element name="FACTORY" internal_name="CMS_FACTORY">
- </element>
- <element name="TRANSPORT" internal_name="CMS_TRANSPORT">
- </element>
- <element name="CRASH" internal_name="CMS_CRASH">
- </element>
- </enum>
- <enum name="PowerModeStatus">
- <description>Reflects the status of the current power mode.</description>
- <element name="KEY_OUT">
- </element>
- <element name="KEY_RECENTLY_OUT">
- </element>
- <element name="KEY_APPROVED_0">
- </element>
- <element name="POST_ACCESORY_0">
- </element>
- <element name="ACCESORY_1">
- </element>
- <element name="POST_IGNITION_1">
- </element>
- <element name="IGNITION_ON_2">
- </element>
- <element name="RUNNING_2">
- </element>
- <element name="CRANK_3">
- </element>
- </enum>
- <enum name="CharacterSet">
- <description>The list of potential character sets</description>
- <element name="TYPE2SET">
- <description>See [@TODO: create file ref]</description>
- </element>
- <element name="TYPE5SET">
- <description>See [@TODO: create file ref]</description>
- </element>
- <element name="CID1SET">
- <description>See [@TODO: create file ref]</description>
- </element>
- <element name="CID2SET">
- <description>See [@TODO: create file ref]</description>
- </element>
- </enum>
- <!-- End of IVI part-->
- <enum name="AppPriority">
- <element name="EMERGENCY"/>
- <element name="NAVIGATION"/>
- <element name="VOICE_COMMUNICATION"/>
- <element name="COMMUNICATION"/>
- <element name="NORMAL"/>
- <element name="NONE"/>
- </enum>
-<enum name="MethodName">
- <description>Defines the type of the request which causes text-to-speech prompt</description>
- <element name="ALERT"/>
- <element name="SPEAK"/>
- <element name="AUDIO_PASS_THRU"/>
- <element name="ALERT_MANEUVER"/>
-</enum>
-
-<enum name="AlertType">
-<description>Defines the type of the request which causes text-to-speech prompt</description>
-<element name="UI"/>
-<element name="BOTH"/>
-</enum>
-
-<enum name="HMILevel">
- <element name="FULL"/>
- <element name="LIMITED"/>
- <element name="BACKGROUND"/>
- <element name="NONE"/>
-</enum>
-
-<enum name="EventTypes">
- <description>Reflects the current active event</description>
- <element name="AUDIO_SOURCE">
- <description>Navigated to audio(radio, etc)</description>
- </element>
- <element name="EMBEDDED_NAVI">
- <description>Navigated to navigation screen</description>
- </element>
- <element name="PHONE_CALL">
- <description>Phone call is active</description>
- </element>
- <element name="EMERGENCY_EVENT">
- <description>Active emergency event, active parking event</description>
- </element>
- <element name="DEACTIVATE_HMI">
- <description> GAL/DIO is active </description>
- </element>
-</enum>
-
-<enum name="VideoStreamingProtocol">
- <description>Enum for each type of video streaming protocol type.</description>
- <element name="RAW">
- <description>
- Raw stream bytes that contains no timestamp data and is the lowest supported video streaming
- </description>
- </element>
- <element name="RTP">
- <description>
- RTP facilitates the transfer of real-time data. Information provided by this protocol include
- timestamps (for synchronization), sequence numbers (for packet loss and reordering detection)
- and the payload format which indicates the encoded format of the data.
- </description>
- </element>
- <element name="RTSP">
- <description>
- The transmission of streaming data itself is not a task of RTSP. Most RTSP servers use the
- Real-time Transport Protocol (RTP) in conjunction with Real-time Control Protocol (RTCP)
- for media stream delivery. However, some vendors implement proprietary transport protocols.
- </description>
- </element>
- <element name="RTMP">
- <description>
- Real-Time Messaging Protocol (RTMP) was initially a proprietary protocol developed by
- Macromedia for streaming audio, video and data over the Internet, between a Flash player
- and a server. Macromedia is now owned by Adobe, which has released an incomplete version
- of the specification of the protocol for public use.
- </description>
- </element>
- <element name="WEBM">
- <description>
- The WebM container is based on a profile of Matroska. WebM initially supported VP8 video and
- Vorbis audio streams. In 2013 it was updated to accommodate VP9 video and Opus audio.
- </description>
- </element>
-</enum>
-
-<enum name="VideoStreamingCodec">
- <description>Enum for each type of video streaming codec.</description>
- <element name="H264">
- <description>
- A block-oriented motion-compensation-based video compression standard.
- As of 2014 it is one of the most commonly used formats for the recording, compression, and
- distribution of video content.
- </description>
- </element>
- <element name="H265">
- <description>
- High Efficiency Video Coding (HEVC), also known as H.265 and MPEG-H Part 2, is a video
- compression standard, one of several potential successors to the widely used AVC (H.264 or
- MPEG-4 Part 10). In comparison to AVC, HEVC offers about double the data compression ratio
- at the same level of video quality, or substantially improved video quality at the same
- bit rate. It supports resolutions up to 8192x4320, including 8K UHD.
- </description>
- </element>
- <element name="Theora">
- <description>
- Theora is derived from the formerly proprietary VP3 codec, released into the public domain
- by On2 Technologies. It is broadly comparable in design and bitrate efficiency to
- MPEG-4 Part 2, early versions of Windows Media Video, and RealVideo while lacking some of
- the features present in some of these other codecs. It is comparable in open standards
- philosophy to the BBC's Dirac codec.
- </description>
- </element>
- <element name="VP8">
- <description>
- VP8 can be multiplexed into the Matroska-based container format WebM along with Vorbis and
- Opus audio. The image format WebP is based on VP8's intra-frame coding. VP8's direct
- successor, VP9, and the emerging royalty-free internet video format AV1 from the Alliance for
- Open Media (AOMedia) are based on VP8.
- </description>
- </element>
- <element name="VP9">
- <description>
- Similar to VP8, but VP9 is customized for video resolutions beyond high-definition video (UHD)
- and also enables lossless compression.
- </description>
- </element>
-</enum>
-
- <!-- Policies -->
- <enum name="UpdateResult">
- <element name="UP_TO_DATE"/>
- <element name="UPDATING"/>
- <element name="UPDATE_NEEDED"/>
- </enum>
- <enum name="SystemError">
- <element name="SYNC_REBOOTED"/>
- <element name="SYNC_OUT_OF_MEMMORY"/>
- </enum>
- <enum name="StatisticsType">
- <element name="iAPP_BUFFER_FULL"/>
- </enum>
- <enum name="ConsentSource">
- <element name="GUI"/>
- <element name="VUI"/>
- </enum>
- <enum name="DeviceState">
- <element name="UNKNOWN"/>
- <element name="UNPAIRED"/>
- </enum>
- <struct name="DeviceInfo">
- <param name="name" type="String" mandatory="true">
- <description>The name of the device connected.</description>
- </param>
- <param name="id" type="String" mandatory="true">
- <description>The ID of the device connected</description>
- </param>
- <param name="transportType" type="Common.TransportType" mandatory="false">
- <description>The transport type the named-app's-device is connected over HU(BlueTooth, USB or WiFi). It must be provided in OnAppRegistered and in UpdateDeviceList</description>
- </param>
- <param name="isSDLAllowed" type="Boolean" mandatory="false">
- <description>Sent by SDL in UpdateDeviceList. &#8217;true&#8217; &#8211; if device is allowed for PolicyTable Exchange; &#8216;false&#8217; &#8211; if device is NOT allowed for PolicyTable Exchange </description>
- </param>
- </struct>
- <struct name="UserFriendlyMessage" scope="internal">
- <param name="messageCode" type="String" mandatory="true"/>
- <param name="ttsString" type="String" mandatory="false"/>
- <param name="label" type="String" mandatory="false"/>
- <param name="line1" type="String" mandatory="false"/>
- <param name="line2" type="String" mandatory="false"/>
- <param name="textBody" type="String" mandatory="false"/>
- </struct>
- <struct name="PermissionItem">
- <param name="name" type="String" mandatory="true">
- <description>Code of message of user-friendly text about functional group to be allowed/disallowed</description>
- </param>
- <param name="id" type="Integer" mandatory="true">
- <description>Id of corresponding functional group, needed by SDL.</description>
- </param>
- <param name="allowed" type="Boolean" mandatory="false">
- <description>Specifies whether functionality was allowed/disallowed. If ommited - no information about User Consent is yet found for app.</description>
- </param>
- </struct>
- <struct name="ServiceInfo">
- <param name="url" type="String" mandatory="true">
- <description>Get URL based on service type.</description>
- </param>
- <param name="policyAppId" type="String" mandatory="false">
- <description>Used if URL needed are specific for application.</description>
- </param>
- </struct>
- <!-- End of Policies -->
- <struct name="TextField">
- <param name="name" type="Common.TextFieldName" mandatory="true">
- <description>The name that identifies the field. See TextFieldName.</description>
- </param>
- <param name="characterSet" type="Common.CharacterSet" mandatory="true">
- <description>The character set that is supported in this field. See CharacterSet.</description>
- </param>
- <param name="width" type="Integer" minvalue="1" maxvalue="500" mandatory="true">
- <description>The number of characters in one row of this field.</description>
- </param>
- <param name="rows" type="Integer" minvalue="1" maxvalue="8" mandatory="true">
- <description>The number of rows of this field.</description>
- </param>
- </struct>
- <struct name="ButtonCapabilities">
- <description>Contains the information about capabilities of a button.</description>
- <param name="name" type="Common.ButtonName" mandatory="true">
- <description>The name of the Button from the ButtonName enum</description>
- </param>
- <param name="shortPressAvailable" type="Boolean" mandatory="true">
- <description>The button supports a short press. Whenever the button is pressed short, onButtonPressed(SHORT) should be invoked.</description>
- </param>
- <param name="longPressAvailable" type="Boolean" mandatory="true">
- <description>The button supports a LONG press. Whenever the button is pressed long, onButtonPressed(LONG) should be invoked.</description>
- </param>
- <param name="upDownAvailable" type="Boolean" mandatory="true">
- <description>The button supports "button down" and "button up". Whenever the button is pressed, onButtonEvent(DOWN) should be invoked. Whenever the button is released, onButtonEvent(UP) should be invoked.</description>
- </param>
- </struct>
- <struct name="VehicleDataResult">
- <description>Individual published data request result</description>
- <param name="dataType" type="Common.VehicleDataType" mandatory="true">
- <description>Defined published data element type.</description>
- </param>
- <param name="resultCode" type="Common.VehicleDataResultCode" mandatory="true">
- <description>Published data result code.</description>
- </param>
- </struct>
- <struct name="TouchCoord">
- <param name="x" type="Integer" mandatory="true" minvalue="0" maxvalue="10000">
- <description>The x coordinate of the touch.</description>
- </param>
- <param name="y" type="Integer" mandatory="true" minvalue="0" maxvalue="10000">
- <description>The y coordinate of the touch.</description>
- </param>
- </struct>
- <struct name="TouchEvent">
- <param name="id" type="Integer" mandatory="true" minvalue="0" maxvalue="9">
- <description>
- A touch's unique identifier. The application can track the current touch events by id.
- If a touch event has type begin, the id should be added to the set of touches.
- If a touch event has type end, the id should be removed from the set of touches.
- </description>
- </param>
- <param name="ts" type="Integer" mandatory="true" array="true" minvalue="0" maxvalue="2147483647" minsize="1" maxsize="1000">
- <description>
- The time that the touch was recorded. This number can the time since the beginning of the session or something else as long as the units are in milliseconds.
- The timestamp is used to determined the rate of change of position of a touch.
- The application also uses the time to verify whether two touches, with different ids, are part of a single action by the user.
- If there is only a single timestamp in this array, it is the same for every coordinate in the coordinates array.
- </description>
- </param>
- <param name="c" type="Common.TouchCoord" mandatory="true" array="true" minsize="1" maxsize="1000">
- </param>
- </struct>
- <struct name="PresetBankCapabilities">
- <description>Contains information about on-screen preset capabilities (whether the HW preset buttons could be duplicated with onscreen buttons).</description>
- <param name="onScreenPresetsAvailable" type="Boolean" mandatory="true">
- <description>Must be true if onscreen custom presets are available.</description>
- </param>
- </struct>
- <struct name="Image">
- <param name="value" maxlength="65535" type="String" mandatory="true">
- <description>The path to the dynamic image stored on HU or the static binary image itself.</description>
- </param>
- <param name="imageType" type="Common.ImageType" mandatory="true">
- <description>Describes, whether it is a static or dynamic image.</description>
- </param>
- </struct>
- <struct name="SoftButton">
- <param name="type" type="Common.SoftButtonType" mandatory="true">
- <description>Describes, whether text, icon or both text and image should be displayed on the soft button. See softButtonType</description>
- </param>
- <param name="text" maxlength="500" type="String" mandatory="false">
- <description>Optional text to be displayed (if defined as TEXT or BOTH)</description>
- </param>
- <param name="image" type="Common.Image" mandatory="false">
- <description>Optional image struct for SoftButton (if defined as IMAGE or BOTH)</description>
- </param>
- <param name="isHighlighted" type="Boolean" mandatory="false">
- <description>If true, must be highlighted</description>
- <description>If false, must be not</description>
- </param>
- <param name="softButtonID" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>Value which must be returned via OnButtonPress / OnButtonEvent</description>
- </param>
- <param name="systemAction" type="Common.SystemAction" mandatory="true">
- <description>Parameter indicates whether clicking a SoftButton must call a specific system action. See SystemAction</description>
- </param>
- </struct>
- <struct name="TTSChunk">
- <description>A TTS chunk, that consists of the text/phonemes to be spoken</description>
- <param name="text" type="String" mandatory="true" maxlength="500">
- <description>The text or phonemes to be spoken.</description>
- </param>
- <param name="type" type="Common.SpeechCapabilities" mandatory="true">
- <description>Describes, whether it is text or a specific phoneme set. See SpeechCapabilities.</description>
- </param>
- </struct>
- <struct name="HMIApplication">
- <description>Data type containing information about application needed by HMI.</description>
- <param name="appName" type="String" maxlength="100" mandatory="true">
- <description>The mobile application name, e.g. "Ford Drive Green".</description>
- </param>
- <param name="ngnMediaScreenAppName" type="String" maxlength="100" mandatory="false">
- <description>Provides an abbreviated version of the app name (if needed), that may be displayed on the NGN media screen.</description>
- <description>If not provided, the appName should be used instead (and may be truncated if too long)</description>
- </param>
- <param name="icon" type="String" mandatory="false">
- <description>Path to application icon stored on HU.</description>
- </param>
- <param name="deviceInfo" type="Common.DeviceInfo" mandatory="true">
- <description>The ID, serial number, transport type the named-app's-device is connected over to HU.</description>
- </param>
- <param name="policyAppID" type="String" maxlength="50" minlength="1" mandatory="true">
- <description>Policy ID(=the appID the application registers with) of registered application.</description>
- </param>
- <param name="ttsName" type="Common.TTSChunk" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- TTS string for VR recognition of the mobile application name, e.g. "Ford Drive Green".
- Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.
- May not be empty.
- May not start with a new line character.
- Not unique value
- </description>
- </param>
- <param name="vrSynonyms" type="String" maxlength="40" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- Defines an additional voice recognition command.
- Must not interfere with any name of previously registered applications(SDL makes check).
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>Unique (during ignition cycle) id of the application. To be used in all RPCs sent by both HU system and SDL</description>
- </param>
- <param name="hmiDisplayLanguageDesired" type="Common.Language" mandatory="true">
- <description>The language the application intends to use on HU </description>
- </param>
- <param name="isMediaApplication" type="Boolean" mandatory="true">
- <description>Indicates whether it is a media or a non-media application.</description>
- </param>
- <param name="appType" type="Common.AppHMIType" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>List of all applicable app types stating which classifications to be given to the app.</description>
- <description>e.g. for platforms like GEN2, this determines which "corner(s)" the app can populate.</description>
- </param>
- <param name="greyOut" type="Boolean" mandatory="false">
- <description>Indicates whether application should be dimmed on the screen.</description>
- <description>Applicable only for apps received through QueryApps and still not registered.</description>
- </param>
- <param name="requestType" type="Common.RequestType" minsize="0" maxsize="100" array="true" mandatory="false">
- <description>The list of SystemRequest's RequestTypes allowed by policies for the named application</description>
- <description>(the app's SystemRequest sent with RequestType out of this list will get 'disallowed' response from SDL).</description>
- <description>If SDL sends an empty array - any RequestType is allowed for this app.</description>
- <description>If SDL omits this parameter - none RequestType is allowed for this app</description>
- <description>(either this is a pre-registered app or such is dictated by policies).</description>
- </param>
- </struct>
- <struct name="MenuParams">
- <param name="parentID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="false">
- <description>unique ID of the sub menu, the command must be added to.</description>
- <description>If not provided, the command must be added to the top level of the in application menu.</description>
- </param>
- <param name="position" type="Integer" minvalue="0" maxvalue="1000" mandatory="false">
- <description>Position within the items that are at the top level of the in application menu.</description>
- <description>0 should insert at the front.</description>
- <description>1 should insert at the second position.</description>
- <description>if position is greater than or equal to the number of items on the top level, the the sub menu/command should be appended to the end.</description>
- <description>If this param is omitted the entry should be added at the end.</description>
- </param>
- <param name="menuName" type="String" maxlength="500" mandatory="true">
- <description>The name of the sub menu/command.</description>
- </param>
- </struct>
- <struct name="Choice">
- <description>A choice is an option given to the user which can be selected either by menu, or through voice recognition system.</description>
- <param name="choiceID" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description> The unique within the concerned application identifier for this choice </description>
- </param>
- <param name="menuName" type="String" maxlength="500" mandatory="false">
- <description> The name of the choice </description>
- </param>
- <param name="image" type="Common.Image" mandatory="false">
- <description> The image for representing the choice </description>
- </param>
- <param name="secondaryText" maxlength="500" type="String" mandatory="false">
- <description>Optional secondary text to display; e.g. address of POI in a search result entry</description>
- </param>
- <param name="tertiaryText" maxlength="500" type="String" mandatory="false">
- <description>Optional tertiary text to display; e.g. distance to POI for a search result entry</description>
- </param>
- <param name="secondaryImage" type="Image" mandatory="false">
- <description>Optional secondary image struct for choice</description>
- </param>
- </struct>
- <struct name="VrHelpItem">
- <param name="text" maxlength="500" type="String" mandatory="true">
- <description>Text to display for VR Help item</description>
- </param>
- <param name="image" type="Common.Image" mandatory="false">
- <description>Image struct for VR Help item</description>
- </param>
- <param name="position" type="Integer" minvalue="1" maxvalue="100" mandatory="true">
- <description>Position to display item in VR Help list</description>
- </param>
- </struct>
- <struct name="TimeFormat">
- <param name="hours" type="Integer" minvalue="0" maxvalue="59" mandatory="true">
- <description>The hour of the media clock.</description>
- <description>Some units only support a max of 19 hours. If out of range, it should be rejected.</description>
- </param>
- <param name="minutes" type="Integer" minvalue="0" maxvalue="59" mandatory="true"/>
- <param name="seconds" type="Integer" minvalue="0" maxvalue="59" mandatory="true"/>
- </struct>
- <struct name="TouchEventCapabilities">
- <param name="pressAvailable" type="Boolean" mandatory="true">
- </param>
- <param name="multiTouchAvailable" type="Boolean" mandatory="true">
- </param>
- <param name="doublePressAvailable" type="Boolean" mandatory="true">
- </param>
- </struct>
- <struct name="ImageResolution">
- <param name="resolutionWidth" type="Integer" minvalue="1" maxvalue="10000" mandatory="true">
- <description>The image resolution width.</description>
- </param>
- <param name="resolutionHeight" type="Integer" minvalue="1" maxvalue="10000" mandatory="true">
- <description>The image resolution height.</description>
- </param>
- </struct>
- <struct name="ScreenParams">
- <param name="resolution" type="Common.ImageResolution" mandatory="true">
- <description>The resolution of the prescribed screen area.</description>
- </param>
- <param name="touchEventAvailable" type="Common.TouchEventCapabilities" mandatory="false">
- <description>Types of screen touch events available in screen area.</description>
- </param>
- </struct>
- <struct name="ImageField">
- <param name="name" type="Common.ImageFieldName" mandatory="true">
- <description>The name that identifies the field. See ImageFieldName.</description>
- </param>
- <param name="imageTypeSupported" type="Common.FileType" maxsize="100" array="true" mandatory="false" minsize="1">
- <description>The image types that are supported in this field. See FileType.</description>
- </param>
- <param name="imageResolution" type="Common.ImageResolution" mandatory="false">
- <description>The image resolution of this field.</description>
- </param>
- </struct>
- <struct name="VideoStreamingFormat">
- <description>Video streaming formats and their specifications.</description>
- <param name="protocol" type="Common.VideoStreamingProtocol" mandatory="true">
- <description>Protocol type, see VideoStreamingProtocol</description>
- </param>
- <param name="codec" type="Common.VideoStreamingCodec" mandatory="true">
- <description>Codec type, see VideoStreamingCodec</description>
- </param>
- </struct>
-
- <struct name="VideoConfig">
- <description>Configuration of a video stream.</description>
- <param name="protocol" type="Common.VideoStreamingProtocol" mandatory="false">
- <description>The video protocol configuration</description>
- </param>
- <param name="codec" type="Common.VideoStreamingCodec" mandatory="false">
- <description>The video codec configuration</description>
- </param>
- <param name="width" type="Integer" mandatory="false">
- <description>Width of the video stream, in pixels.</description>
- </param>
- <param name="height" type="Integer" mandatory="false">
- <description>Height of the video stream, in pixels.</description>
- </param>
- </struct>
- <struct name="DisplayCapabilities">
- <description>Contains information about the display capabilities.</description>
- <param name="displayType" type="Common.DisplayType" mandatory="true">
- <description>The type of the display. See DisplayType</description>
- </param>
- <param name="textFields" type="Common.TextField" minsize="0" maxsize="100" array="true" mandatory="true">
- <description>A set of all fields for text displaying supported by HU. See TextFieldName.</description>
- <description>If there are no textfields supported, the empty array must be returned</description>
- </param>
- <param name="imageFields" type="Common.ImageField" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>A set of all fields that support images. See ImageField</description>
- </param>
- <param name="mediaClockFormats" type="Common.MediaClockFormat" minsize="0" maxsize="100" array="true" mandatory="true">
- <description>A set of all supported formats of the media clock. See MediaClockFormat</description>
- </param>
- <param name="imageCapabilities" type="Common.ImageType" array="true" minsize="0" maxsize="2" mandatory="false">
- </param>
- <param name="graphicSupported" type="Boolean" mandatory="true">
- <description>The display's persistent screen supports referencing a static or dynamic image.</description>
- </param>
- <param name="templatesAvailable" type="String" minsize="0" maxsize="100" maxlength="100" array="true" mandatory="true">
- <description>A set of all predefined persistent display templates available on headunit. To be referenced in SetDisplayLayout.</description>
- </param>
- <param name="screenParams" type="Common.ScreenParams" mandatory="false">
- <description>A set of all parameters related to a prescribed screen area (e.g. for video / touch input).</description>
- </param>
- <param name="numCustomPresetsAvailable" type="Integer" minvalue="1" maxvalue="100" mandatory="false">
- <description>The number of on-screen custom presets available (if any); otherwise omitted.</description>
- </param>
- </struct>
- <struct name="SoftButtonCapabilities">
- <description>Contains information about a SoftButton's capabilities.</description>
- <param name="shortPressAvailable" type="Boolean" mandatory="true">
- <description>The button supports a short press.</description>
- <description>Whenever the button is pressed short, onButtonPressed( SHORT) must be invoked.</description>
- </param>
- <param name="longPressAvailable" type="Boolean" mandatory="true">
- <description>The button supports a LONG press.</description>
- <description>Whenever the button is pressed long, onButtonPressed( LONG) must be invoked.</description>
- </param>
- <param name="upDownAvailable" type="Boolean" mandatory="true">
- <description>The button supports "button down" and "button up".</description>
- <description>Whenever the button is pressed, onButtonEvent( DOWN) must be invoked.</description>
- <description>Whenever the button is released, onButtonEvent( UP) must be invoked.</description>
- </param>
- <param name="imageSupported" type="Boolean" mandatory="true">
- <description>Must be true if the button supports referencing a static or dynamic image.</description>
- </param>
- </struct>
- <struct name="HMICapabilities">
- <param name="navigation" type="Boolean" mandatory="false">
- <description>Availability of build in Nav. True: Available, False: Not Available</description>
- </param>
- <param name="phoneCall" type="Boolean" mandatory="false">
- <description>Availability of build in phone. True: Available, False: Not Available</description>
- </param>
- </struct>
- <struct name="AudioPassThruCapabilities">
- <description>
- Describes different audio type configurations for PerformAudioPassThru.
- e.g. 8kHz,8-bit,PCM
- </description>
- <param name="samplingRate" type="Common.SamplingRate" mandatory="true"/>
- <param name="bitsPerSample" type="Common.BitsPerSample" mandatory="true"/>
- <param name="audioType" type="Common.AudioType" mandatory="true"/>
- </struct>
- <struct name="TextFieldStruct">
- <param name="fieldName" type="Common.TextFieldName" mandatory="true">
- <description>The name of the field for displaying the text.</description>
- </param>
- <param name="fieldText" type="String" maxlength="500" mandatory="true">
- <description>The text itself.</description>
- </param>
- </struct>
- <struct name="KeyboardProperties">
- <description>Configuration of on-screen keyboard (if available).</description>
- <param name="language" type="Common.Language" mandatory="false">
- <description>The keyboard language.</description>
- </param>
- <param name="keyboardLayout" type="Common.KeyboardLayout" mandatory="false">
- <description>Desired keyboard layout.</description>
- </param>
- <param name="keypressMode" type="Common.KeypressMode" mandatory="false">
- <description>
- Desired keypress mode.
- If omitted, this value will be set to RESEND_CURRENT_ENTRY.
- </description>
- </param>
- <param name="limitedCharacterList" type="String" maxlength="1" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>Array of keyboard characters to enable.</description>
- <description>All omitted characters will be greyed out (disabled) on the keyboard.</description>
- <description>If omitted, the entire keyboard will be enabled.</description>
- </param>
- <param name="autoCompleteText" type="String" maxlength="1000" mandatory="false">
- <description>Allows an app to prepopulate the text field with a suggested or completed entry as the user types</description>
- </param>
- </struct>
- <struct name="Turn">
- <param name="navigationText" type="Common.TextFieldStruct" mandatory="false">
- <description>Uses navigationText from TextFieldStruct.</description>
- </param>
- <param name="turnIcon" type="Common.Image" mandatory="false">
- </param>
- </struct>
- <struct name="VehicleType">
- <param name="make" type="String" maxlength="500" mandatory="false">
- <description>Make of the vehicle</description>
- <description>e.g. Ford</description>
- </param>
- <param name="model" type="String" maxlength="500" mandatory="false">
- <description>Model of the vehicle</description>
- <description>e.g. Fiesta</description>
- </param>
- <param name="modelYear" type="String" maxlength="500" mandatory="false">
- <description>Model Year of the vehicle</description>
- <description>e.g. 2013</description>
- </param>
- <param name="trim" type="String" maxlength="500" mandatory="false">
- <description>Trim of the vehicle</description>
- <description>e.g. SE</description>
- </param>
- </struct>
- <!--IVI part-->
- <struct name="GPSData">
- <description>Struct with the GPS data.</description>
- <param name="longitudeDegrees" type="Float" minvalue="-180" maxvalue="180" mandatory="false">
- </param>
- <param name="latitudeDegrees" type="Float" minvalue="-90" maxvalue="90" mandatory="false">
- </param>
- <param name="utcYear" type="Integer" minvalue="2010" maxvalue="2100" mandatory="false">
- <description>The current UTC year.</description>
- </param>
- <param name="utcMonth" type="Integer" minvalue="1" maxvalue="12" mandatory="false">
- <description>The current UTC month.</description>
- </param>
- <param name="utcDay" type="Integer" minvalue="1" maxvalue="31" mandatory="false">
- <description>The current UTC day.</description>
- </param>
- <param name="utcHours" type="Integer" minvalue="0" maxvalue="23" mandatory="false">
- <description>The current UTC hour.</description>
- </param>
- <param name="utcMinutes" type="Integer" minvalue="0" maxvalue="59" mandatory="false">
- <description>The current UTC minute.</description>
- </param>
- <param name="utcSeconds" type="Integer" minvalue="0" maxvalue="59" mandatory="false">
- <description>The current UTC second.</description>
- </param>
- <param name="compassDirection" type="Common.CompassDirection" mandatory="false">
- <description>See CompassDirection.</description>
- </param>
- <param name="pdop" type="Float" minvalue="0" maxvalue="10" mandatory="false">
- <description>PDOP.</description>
- </param>
- <param name="hdop" type="Float" minvalue="0" maxvalue="10" mandatory="false">
- <description>HDOP.</description>
- </param>
- <param name="vdop" type="Float" minvalue="0" maxvalue="10" mandatory="false">
- <description>VDOP.</description>
- </param>
- <param name="actual" type="Boolean" mandatory="false">
- <description>
- True, if actual.
- False, if infered.
- </description>
- </param>
- <param name="satellites" type="Integer" minvalue="0" maxvalue="31" mandatory="false">
- <description>Number of satellites in view</description>
- </param>
- <param name="dimension" type="Common.Dimension" mandatory="false">
- <description>See Dimension</description>
- </param>
- <param name="altitude" type="Float" minvalue="-10000" maxvalue="10000" mandatory="false">
- <description>Altitude in meters</description>
- </param>
- <param name="heading" type="Float" minvalue="0" maxvalue="359.99" mandatory="false">
- <description>The heading. North is 0. Resolution is 0.01</description>
- </param>
- <param name="speed" type="Float" minvalue="0" maxvalue="500" mandatory="false">
- <description>The speed in KPH</description>
- </param>
- </struct>
- <struct name="SingleTireStatus">
- <param name="status" type="Common.ComponentVolumeStatus" mandatory="true">
- <description>The status of component volume. See ComponentVolumeStatus.</description>
- </param>
- </struct>
- <struct name="DIDResult">
- <description>Individual requested DID result and data</description>
- <param name="resultCode" type="Common.VehicleDataResultCode" mandatory="true">
- <description>Individual DID result code.</description>
- </param>
- <param name="didLocation" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>Location of raw data (the address from ReadDID request)</description>
- </param>
- <param name="data" type="String" maxlength="5000" mandatory="false">
- <description>Raw DID-based data returned for requested element.</description>
- </param>
- </struct>
- <struct name="HeadLampStatus">
- <param name="lowBeamsOn" type="Boolean" mandatory="true">
- <description>Status of the low beam lamps.</description>
- </param>
- <param name="highBeamsOn" type="Boolean" mandatory="true">
- <description>Status of the high beam lamps.</description>
- </param>
- <param name="ambientLightSensorStatus" type="Common.AmbientLightStatus" mandatory="true">
- <description>Status of the ambient light sensor.</description>
- </param>
- </struct>
- <struct name="TireStatus">
- <description>The status and pressure of the tires.</description>
- <param name="pressureTelltale" type="Common.WarningLightStatus" mandatory="false">
- <description>Status of the Tire Pressure Telltale. See WarningLightStatus.</description>
- </param>
- <param name="leftFront" type="Common.SingleTireStatus" mandatory="false">
- <description>The status of the left front tire.</description>
- </param>
- <param name="rightFront" type="Common.SingleTireStatus" mandatory="false">
- <description>The status of the right front tire.</description>
- </param>
- <param name="leftRear" type="Common.SingleTireStatus" mandatory="false">
- <description>The status of the left rear tire.</description>
- </param>
- <param name="rightRear" type="Common.SingleTireStatus" mandatory="false">
- <description>The status of the right rear tire.</description>
- </param>
- <param name="innerLeftRear" type="Common.SingleTireStatus" mandatory="false">
- <description>The status of the inner left rear.</description>
- </param>
- <param name="innerRightRear" type="Common.SingleTireStatus" mandatory="false">
- <description>The status of the inner right rear.</description>
- </param>
- </struct>
- <struct name="BeltStatus">
- <param name="driverBeltDeployed" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="passengerBeltDeployed" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="passengerBuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="driverBuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="leftRow2BuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="passengerChildDetected" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="rightRow2BuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="middleRow2BuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="middleRow3BuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="leftRow3BuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="rightRow3BuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="leftRearInflatableBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="rightRearInflatableBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="middleRow1BeltDeployed" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- <param name="middleRow1BuckleBelted" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>See VehicleDataEventStatus.</description>
- </param>
- </struct>
- <struct name="BodyInformation">
- <param name="parkBrakeActive" type="Boolean" mandatory="true">
- <description>Must be true if the park brake is active</description>
- </param>
- <param name="ignitionStableStatus" type="Common.IgnitionStableStatus" mandatory="true">
- <description>Information about the ignition switch. See IgnitionStableStatus.</description>
- </param>
- <param name="ignitionStatus" type="Common.IgnitionStatus" mandatory="true">
- <description>The status of the ignition. See IgnitionStatus.</description>
- </param>
- <param name="driverDoorAjar" type="Boolean" mandatory="false">
- <description>References signal "DrStatDrv_B_Actl".</description>
- </param>
- <param name="passengerDoorAjar" type="Boolean" mandatory="false">
- <description>References signal "DrStatPsngr_B_Actl".</description>
- </param>
- <param name="rearLeftDoorAjar" type="Boolean" mandatory="false">
- <description>References signal "DrStatRl_B_Actl".</description>
- </param>
- <param name="rearRightDoorAjar" type="Boolean" mandatory="false">
- <description>References signal "DrStatRr_B_Actl".</description>
- </param>
- </struct>
- <struct name="DeviceStatus">
- <param name="voiceRecOn" type="Boolean" mandatory="false">
- <description>Must be true if the voice recording is on.</description>
- </param>
- <param name="btIconOn" type="Boolean" mandatory="false">
- <description>Must be true if Bluetooth icon is displayed.</description>
- </param>
- <param name="callActive" type="Boolean" mandatory="false">
- <description>Must be true if there is an active call..</description>
- </param>
- <param name="phoneRoaming" type="Boolean" mandatory="false">
- <description>Must be true if ther is a phone roaming.</description>
- </param>
- <param name="textMsgAvailable" type="Boolean" mandatory="false">
- <description>Must be true if the text message is available.</description>
- </param>
- <param name="battLevelStatus" type="Common.DeviceLevelStatus" mandatory="false">
- <description>Device battery level status. See DeviceLevelStatus.</description>
- </param>
- <param name="stereoAudioOutputMuted" type="Boolean" mandatory="false">
- <description>Must be true if stereo audio output is muted.</description>
- </param>
- <param name="monoAudioOutputMuted" type="Boolean" mandatory="false">
- <description>Must be true if mono audio output is muted.</description>
- </param>
- <param name="signalLevelStatus" type="Common.DeviceLevelStatus" mandatory="false">
- <description>Device signal level status. See DeviceLevelStatus.</description>
- </param>
- <param name="primaryAudioSource" type="Common.PrimaryAudioSource" mandatory="false">
- <description>See PrimaryAudioSource.</description>
- </param>
- <param name="eCallEventActive" type="Boolean" mandatory="false">
- <description>Must be true if emergency call event is active.</description>
- </param>
- </struct>
- <struct name="ECallInfo">
- <param name="eCallNotificationStatus" type="Common.VehicleDataNotificationStatus" mandatory="true">
- <description>References signal "eCallNotification_4A". See VehicleDataNotificationStatus.</description>
- </param>
- <param name="auxECallNotificationStatus" type="Common.VehicleDataNotificationStatus" mandatory="true">
- <description>References signal "eCallNotification". See VehicleDataNotificationStatus.</description>
- </param>
- <param name="eCallConfirmationStatus" type="Common.ECallConfirmationStatus" mandatory="true">
- <description>References signal "eCallConfirmation". See ECallConfirmationStatus.</description>
- </param>
- </struct>
- <struct name="AirbagStatus">
- <param name="driverAirbagDeployed" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsDrvBag_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="driverSideAirbagDeployed" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsDrvSideBag_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="driverCurtainAirbagDeployed" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsDrvCrtnBag_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="passengerAirbagDeployed" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsPasBag_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="passengerCurtainAirbagDeployed" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsPasCrtnBag_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="driverKneeAirbagDeployed" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsKneeDrvBag_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="passengerSideAirbagDeployed" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsPasSideBag_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="passengerKneeAirbagDeployed" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsKneePasBag_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- </struct>
- <struct name="EmergencyEvent">
- <param name="emergencyEventType" type="Common.EmergencyEventType" mandatory="true">
- <description>References signal "VedsEvntType_D_Ltchd". See EmergencyEventType.</description>
- </param>
- <param name="fuelCutoffStatus" type="Common.FuelCutoffStatus" mandatory="true">
- <description>References signal "RCM_FuelCutoff". See FuelCutoffStatus.</description>
- </param>
- <param name="rolloverEvent" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsEvntRoll_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="maximumChangeVelocity" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsMaxDeltaV_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- <param name="multipleEvents" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>References signal "VedsMultiEvnt_D_Ltchd". See VehicleDataEventStatus.</description>
- </param>
- </struct>
- <struct name="ClusterModeStatus">
- <param name="powerModeActive" type="Boolean" mandatory="true">
- <description>References signal "PowerMode_UB".</description>
- </param>
- <param name="powerModeQualificationStatus" type="Common.PowerModeQualificationStatus" mandatory="true">
- <description>References signal "PowerModeQF". See PowerModeQualificationStatus.</description>
- </param>
- <param name="carModeStatus" type="Common.CarModeStatus" mandatory="true">
- <description>References signal "CarMode". See CarMode.</description>
- </param>
- <param name="powerModeStatus" type="Common.PowerModeStatus" mandatory="true">
- <description>References signal "PowerMode". See PowerMode.</description>
- </param>
- </struct>
- <struct name="MyKey">
- <param name="e911Override" type="Common.VehicleDataStatus" mandatory="true">
- <description>Indicates whether e911 override is on. See VehicleDataStatus.</description>
- </param>
- </struct>
- <!--end of IVI part-->
- <!-- Remote Control -->
- <enum name="ModuleType">
- <element name="CLIMATE"/>
- <element name="RADIO"/>
- </enum>
-
- <enum name="RadioBand">
- <element name="AM"/>
- <element name="FM"/>
- <element name="XM"/>
- </enum>
-
- <struct name="RdsData">
- <param name="PS" type="String" minlength="0" maxlength="8" mandatory="false">
- <description>Program Service Name</description>
- </param>
- <param name="RT" type="String" minlength="0" maxlength="64" mandatory="false">
- <description>Radio Text</description>
- </param>
- <param name="CT" type="String" minlength="24" maxlength="24" mandatory="false">
- <description>The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD</description>
- </param>
- <param name="PI" type="String" minlength="0" maxlength="6" mandatory="false">
- <description>Program Identification - the call sign for the radio station</description>
- </param>
- <param name="PTY" type="Integer" minvalue="0" maxvalue="31" mandatory="false">
- <description>The program type - The region should be used to differentiate between EU and North America program types</description>
- </param>
- <param name="TP" type="Boolean" mandatory="false">
- <description>Traffic Program Identification - Identifies a station that offers traffic</description>
- </param>
- <param name="TA" type="Boolean" mandatory="false">
- <description>Traffic Announcement Identification - Indicates an ongoing traffic announcement</description>
- </param>
- <param name="REG" type="String" mandatory="false">
- <description>Region</description>
- </param>
- </struct>
-
- <enum name="RadioState">
- <element name="ACQUIRING"/>
- <element name="ACQUIRED"/>
- <element name="MULTICAST"/>
- <element name="NOT_FOUND"/>
- </enum>
-
- <struct name="RadioControlData">
- <param name="frequencyInteger" type="Integer" minvalue="0" maxvalue="1710" mandatory="false">
- <description>The integer part of the frequency ie for 101.7 this value should be 101</description>
- </param>
- <param name="frequencyFraction" type="Integer" minvalue="0" maxvalue="9" mandatory="false">
- <description>The fractional part of the frequency for 101.7 is 7</description>
- </param>
- <param name="band" type="Common.RadioBand" mandatory="false">
- </param>
- <param name="rdsData" type="Common.RdsData" mandatory="false">
- </param>
- <param name="availableHDs" type="Integer" minvalue="1" maxvalue="3" mandatory="false">
- <description>number of HD sub-channels if available</description>
- </param>
- <param name="hdChannel" type="Integer" minvalue="1" maxvalue="3" mandatory="false">
- <description>Current HD sub-channel if available</description>
- </param>
- <param name="signalStrength" type="Integer" minvalue="0" maxvalue="100" mandatory="false">
- </param>
- <param name="signalChangeThreshold" type="Integer" minvalue="0" maxvalue="100" mandatory="false">
- <description>If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency</description>
- </param>
- <param name="radioEnable" type="Boolean" mandatory="false">
- <description> True if the radio is on, false is the radio is off</description>
- </param>
- <param name="state" type="Common.RadioState" mandatory="false">
- </param>
- </struct>
-
- <struct name="RadioControlCapabilities">
- <description>Contains information about a radio control module's capabilities.</description>
- <param name="moduleName" type="String" maxlength="100" mandatory="true" >
- <description>The short name or a short description of the radio control module.</description>
- </param>
- <param name="radioEnableAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of enable/disable radio.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="radioBandAvailable" type="Boolean" mandatory="false" >
- <description>
- Availability of the control of radio band.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="radioFrequencyAvailable" type="Boolean" mandatory="false" >
- <description>
- Availability of the control of radio frequency.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="hdChannelAvailable" type="Boolean" mandatory="false" >
- <description>
- Availability of the control of HD radio channel.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="rdsDataAvailable" type="Boolean" mandatory="false" >
- <description>
- Availability of the getting Radio Data System (RDS) data.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="availableHDsAvailable" type="Boolean" mandatory="false" >
- <description>
- Availability of the getting the number of available HD channels.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="stateAvailable" type="Boolean" mandatory="false" >
- <description>
- Availability of the getting the Radio state.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="signalStrengthAvailable" type="Boolean" mandatory="false" >
- <description>
- Availability of the getting the signal strength.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="signalChangeThresholdAvailable" type="Boolean" mandatory="false" >
- <description>
- Availability of the getting the signal Change Threshold.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- </struct>
-
- <enum name="DefrostZone">
- <element name="FRONT"/>
- <element name="REAR"/>
- <element name="ALL"/>
- <element name="NONE"/>
- </enum>
-
- <enum name="VentilationMode">
- <element name="UPPER"/>
- <element name="LOWER"/>
- <element name="BOTH"/>
- <element name="NONE"/>
- </enum>
-
- <enum name="TemperatureUnit">
- <element name="FAHRENHEIT"/>
- <element name="CELSIUS"/>
- </enum>
-
- <struct name="Temperature">
- <param name="unit" type="TemperatureUnit" mandatory="true" >
- <description>Temperature Unit</description>
- </param>
- <param name="value" type="Float" mandatory="true" >
- <description>Temperature Value in TemperatureUnit specified unit. Range depends on OEM and is not checked by SDL.</description>
- </param>
- </struct>
-
- <struct name="ClimateControlData">
- <param name="fanSpeed" type="Integer" minvalue="0" maxvalue="100" mandatory="false">
- </param>
- <param name="currentTemperature" type="Common.Temperature" mandatory="false">
- </param>
- <param name="desiredTemperature" type="Common.Temperature" mandatory="false">
- </param>
- <param name="acEnable" type="Boolean" mandatory="false">
- </param>
- <param name="circulateAirEnable" type="Boolean" mandatory="false">
- </param>
- <param name="autoModeEnable" type="Boolean" mandatory="false">
- </param>
- <param name="defrostZone" type="DefrostZone" mandatory="false">
- </param>
- <param name="dualModeEnable" type="Boolean" mandatory="false">
- </param>
- <param name="acMaxEnable" type="Boolean" mandatory="false">
- </param>
- <param name="ventilationMode" type="Common.VentilationMode" mandatory="false">
- </param>
- </struct>
-
- <struct name="ClimateControlCapabilities">
- <description>Contains information about a climate control module's capabilities.</description>
- <param name="moduleName" type="String" maxlength="100" mandatory="true" >
- <description>The short name or a short description of the climate control module.</description>
- </param>
- <param name="currentTemperatureAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the reading of current temperature.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="fanSpeedAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of fan speed.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="desiredTemperatureAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of desired temperature.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="acEnableAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of turn on/off AC.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="acMaxEnableAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of enable/disable air conditioning is ON on the maximum level.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="circulateAirEnableAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of enable/disable circulate Air mode.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="autoModeEnableAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of enable/disable auto mode.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="dualModeEnableAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of enable/disable dual mode.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="defrostZoneAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of defrost zones.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="defrostZone" type="Common.DefrostZone" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- A set of all defrost zones that are controllable.
- </description>
- </param>
- <param name="ventilationModeAvailable" type="Boolean" mandatory="false">
- <description>
- Availability of the control of air ventilation mode.
- True: Available, False: Not Available, Not present: Not Available.
- </description>
- </param>
- <param name="ventilationMode" type="Common.VentilationMode" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- A set of all ventilation modes that are controllable.
- </description>
- </param>
- </struct>
-
- <struct name="ModuleData">
- <description>The moduleType indicates which type of data should be changed and identifies which data object exists in this struct. For example, if the moduleType is CLIMATE then a "climateControlData" should exist</description>
- <param name="moduleType" type="Common.ModuleType" mandatory="true" >
- </param>
- <param name="radioControlData" type="Common.RadioControlData" mandatory="false">
- </param>
- <param name="climateControlData" type="Common.ClimateControlData" mandatory="false">
- </param>
- </struct>
-
- <enum name="RCAccessMode">
- <description>Enumeration that describes possible remote control access mode the application might be in on HU.</description>
- <element name="AUTO_ALLOW"/>
- <element name="AUTO_DENY"/>
- <element name="ASK_DRIVER"/>
- </enum>
-<struct name="DateTime">
- <param name="millisecond" type="Integer" minvalue="0" maxvalue="999" mandatory="false">
- <description>Milliseconds </description>
- </param>
- <param name="second" type="Integer" minvalue="0" maxvalue="60" mandatory="false">
- <description>Seconds part of time</description>
- </param>
- <param name="minute" type="Integer" minvalue="0" maxvalue="59" mandatory="false">
- <description>Minutes part of time</description>
- </param>
- <param name="hour" type="Integer" minvalue="0" maxvalue="23" mandatory="false">
- <description>Hours part of time. Note that this structure accepts time only in 24 Hr format</description>
- </param>
- <param name="day" type="Integer" minvalue="1" maxvalue="31" mandatory="false">
- <description>Day of the month</description>
- </param>
- <param name="month" type="Integer" minvalue="1" maxvalue="12" mandatory="false">
- <description>Month of the year</description>
- </param>
- <param name="year" type="Integer" maxvalue="4095" mandatory="false">
- <description>The year in YYYY format</description>
- </param>
- <param name="tz_hour" type="Integer" minvalue="-12" maxvalue="14" defvalue="0" mandatory="false">
- <description>Time zone offset in Hours wrt UTC.</description>
- </param>
- <param name="tz_minute" type="Integer" minvalue="0" maxvalue="59" defvalue="0" mandatory="false">
- <description>Time zone offset in Min wrt UTC.</description>
- </param>
-</struct>
-
-<struct name="OASISAddress">
- <param name="countryName" minlength="0" maxlength="200" type="String" mandatory="false">
- <description>Name of the country (localized)</description>
- </param>
- <param name="countryCode" minlength="0" maxlength="50" type="String" mandatory="false">
- <description>Name of country (ISO 3166-2)</description>
- </param>
- <param name="postalCode" minlength="0" maxlength="16" type="String" mandatory="false">
- <description>(PLZ, ZIP, PIN, CAP etc.)</description>
- </param>
- <param name="administrativeArea" minlength="0" maxlength="200" type="String" mandatory="false">
- <description>Portion of country (e.g. state)</description>
- </param>
- <param name="subAdministrativeArea" minlength="0" maxlength="200" type="String" mandatory="false">
- <description>Portion of e.g. state (e.g. county)</description>
- </param>
- <param name="locality" minlength="0" maxlength="200" type="String" mandatory="false">
- <description>Hypernym for e.g. city/village</description>
- </param>
- <param name="subLocality" minlength="0" maxlength="200" type="String" mandatory="false">
- <description>Hypernym for e.g. district</description>
- </param>
- <param name="thoroughfare" minlength="0" maxlength="200" type="String" mandatory="false">
- <description>Hypernym for street, road etc.</description>
- </param>
- <param name="subThoroughfare" minlength="0" maxlength="200" type="String" mandatory="false">
- <description>Portion of thoroughfare e.g. house number</description>
- </param>
-</struct>
-
- <struct name="LocationDetails">
- <param name="coordinate" type="Coordinate" mandatory="false">
- <description>Latitude/Longitude of the location.</description>
- </param>
- <param name="locationName" type="String" maxlength="500" mandatory="false">
- <description>Name of location.</description>
- </param>
- <param name="addressLines" type="String" maxlength="500" minsize="0" maxsize="4" array="true" mandatory="false">
- <description>Location address for display purposes only</description>
- </param>
- <param name="locationDescription" type="String" maxlength="500" mandatory="false">
- <description>Description intended location / establishment (if applicable)</description>
- </param>
- <param name="phoneNumber" type="String" maxlength="500" mandatory="false">
- <description>Phone number of location / establishment.</description>
- </param>
- <param name="locationImage" type="Image" mandatory="false">
- <description>Image / icon of intended location.</description>
- </param>
- <param name="searchAddress" type="OASISAddress" mandatory="false">
- <description>Address to be used by navigation engines for search</description>
- </param>
- </struct>
-
- <struct name="NavigationCapability">
- <description>Extended capabilities for an onboard navigation system</description>
- <param name="sendLocationEnabled" type="Boolean" mandatory="false">
- <description>If the module has the ability to add locations to the onboard nav</description>
- </param>
- <param name="getWayPointsEnabled" type="Boolean" mandatory="false">
- <description>If the module has the ability to return way points from onboard nav</description>
- </param>
- </struct>
-
- <struct name="PhoneCapability">
- <description>Extended capabilities of the module's phone feature</description>
- <param name="dialNumberEnabled" type="Boolean" mandatory="false">
- <description>If the module has the abiulity to perform dial number</description>
- </param>
- </struct>
-
- <struct name="VideoStreamingCapability">
- <description>Contains information about this system's video streaming capabilities.</description>
- <param name="preferredResolution" type="Common.ImageResolution" mandatory="false">
- <description>The preferred resolution of a video stream for decoding and rendering on HMI.</description>
- </param>
- <param name="maxBitrate" type="Integer" minvalue="0" maxvalue="2147483647" mandatory="false">
- <description>The maximum bitrate of video stream that is supported, in kbps.</description>
- </param>
- <param name="supportedFormats" type="Common.VideoStreamingFormat" array="true" mandatory="false">
- <description>
- Detailed information on each format supported by this system, in its preferred order
- (i.e. the first element in the array is most preferable to the system).
- Each object will contain a VideoStreamingFormat that describes what can be expected.
- </description>
- </param>
- <param name="hapticSpatialDataSupported" type="Boolean" mandatory="false">
- <description>True if the system can utilize the haptic spatial data from the source being streamed. </description>
- </param>
- </struct>
-
- <struct name="SystemCapabilities">
- <param name="navigationCapability" type="NavigationCapability" mandatory="false">
- </param>
- <param name="phoneCapability" type="PhoneCapability" mandatory="false">
- </param>
- <param name="videoStreamingCapability" type="VideoStreamingCapability" mandatory="false">
- </param>
- </struct>
-
- <struct name="RemoteControlCapabilities">
- <param name="climateControlCapabilities" type="ClimateControlCapabilities" mandatory="false" minsize="1" maxsize="100" array="true">
- <description>If included, the platform supports RC climate controls. For this baseline version, maxsize=1. i.e. only one climate control module is supported.</description >
- </param>
- <param name="radioControlCapabilities" type="RadioControlCapabilities" mandatory="false" minsize="1" maxsize="100" array="true">
- <description>If included, the platform supports RC radio controls. For this baseline version, maxsize=1. i.e. only one climate control module is supported.</description >
- </param>
- <param name="buttonCapabilities" type="ButtonCapabilities" mandatory="false" minsize="1" maxsize="100" array="true" >
- <description>If included, the platform supports RC button controls with the included button names.</description >
- </param>
- </struct>
-
- <struct name="Rectangle">
- <param name="x" type="Float" mandatory="true">
- <description>The X-coordinate of the user control</description>
- </param>
- <param name="y" type="Float" mandatory="true">
- <description>The Y-coordinate of the user control</description>
- </param>
- <param name="width" type="Float" mandatory="true">
- <description>The width of the user control's bounding rectangle</description>
- </param>
- <param name="height" type="Float" mandatory="true">
- <description>The height of the user control's bounding rectangle</description>
- </param>
- </struct>
-
- <struct name="HapticRect">
- <description>Defines haptic rectangle data for each user control object for video streaming application</description>
- <param name="id" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="true">
- <description>A user control spatial identifier</description>
- </param>
- <param name="rect" type="Common.Rectangle" mandatory="true">
- <description>The position of the haptic rectangle to be highlighted. The center of this rectangle will be "touched" when a press occurs.</description>
- </param>
- </struct>
- </interface>
- <interface name="Buttons" version="1.0" date="2013-04-12">
- <function name="GetCapabilities" messagetype="request" provider="hmi">
- <description>Method is invoked at system start-up. SDL requests the information about all supported hardware buttons and their capabilities</description>
- </function>
- <function name="GetCapabilities" messagetype="response">
- <param name="capabilities" type="Common.ButtonCapabilities" array="true" minsize="1" maxsize="100" mandatory="true">
- <description>Response must provide the names of available buttons and their capabilities.See ButtonCapabilities</description>
- </param>
- <param name="presetBankCapabilities" type="Common.PresetBankCapabilities" mandatory="false">
- <description>Must be returned if the platform supports custom on-screen Presets</description>
- </param>
- </function>
- <function name="OnButtonEvent" messagetype="notification" provider="hmi">
- <description>HU system must notify about every UP/DOWN event for buttons</description>
- <param name="name" type="Common.ButtonName" mandatory="true"/>
- <param name="mode" type="Common.ButtonEventMode" mandatory="true">
- <description>Indicates whether this is an UP or DOWN event.</description>
- </param>
- <param name="customButtonID" type="Integer" mandatory="false" minvalue="0" maxvalue="65536">
- <description>Must be provided if ButtonName is CUSTOM_BUTTON, this references the integer ID passed by a custom button. (e.g. softButtonName)</description>
- </param>
- <param name="appID" type="Integer" mandatory="false">
- <description>
- In case the ButtonName is CUSTOM_BUTTON, HMI must include appID parameters to OnButtonPress notification sent to SDL.
- Otherwise, if appID is not sent together with CUSTOM_BUTTON, this notification will be ignored by SDL.
- </description>
- </param>
- </function>
- <function name="OnButtonPress" messagetype="notification" provider="hmi">
- <param name="name" type="Common.ButtonName" mandatory="true"/>
- <param name="mode" type="Common.ButtonPressMode" mandatory="true">
- <description>Indicates whether this is a LONG or SHORT button press event.</description>
- </param>
- <param name="customButtonID" type="Integer" mandatory="false" minvalue="0" maxvalue="65536">
- <description>Must be returned if ButtonName is CUSTOM_BUTTON, this references the string passed by a custom button. (e.g. softButtonName)</description>
- </param>
- <param name="appID" type="Integer" mandatory="false">
- <description>
- In case the ButtonName is CUSTOM_BUTTON, HMI must include appID parameters to OnButtonPress notification sent to SDL.
- Otherwise, if appID is not sent together with CUSTOM_BUTTON, this notification will be ignored by SDL.
- </description>
- </param>
- </function>
- <function name="OnButtonSubscription" messagetype="notification">
- <description>
- Sender: SDL-&gt;HMI. Purpose: to notify about button subscription state is changed for the named application
- </description>
- <param name="name" type="Common.ButtonName" mandatory="true"/>
- <param name="isSubscribed" type="Boolean" mandatory="true">
- <description>
- Defines whether the named button has status of 'subscribed' or 'unsubscribed':
- If "true" - the named button is subscribed.
- If "false" - the named button is unsubscribed.
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>
- The ID of application that relates to this button-subscription status change.
- </description>
- </param>
- </function>
- </interface>
- <interface name="BasicCommunication" version="1.0" date="2013-04-12">
- <function name="OnReady" messagetype="notification" provider="hmi">
- <description>HMI must notify SDL about its readiness to start communication. In fact, this has to be the first message between SDL and HMI.</description>
- </function>
- <function name="OnStartDeviceDiscovery" messagetype="notification" provider="hmi">
- <description>Initiated by HMI user for getting the list of connected devices.</description>
- </function>
- <function name="OnUpdateDeviceList" messagetype="notification" provider="hmi">
- <description>Notification from HMI to SDL sent when HMI requires update of device list (i.e. when user clicks 'Change Device' button)</description>
- </function>
- <function name="OnPhoneCall" messagetype="notification">
- <description>Sender: HMI-&gt;SDL. When: upon phone-call event started or ended</description>
- <param name="isActive" type="Boolean" mandatory="true">
- <description>Must be 'true' - when the phone call is started on HMI. Must be 'false' when the phone call is ended on HMI</description>
- </param>
- </function>
- <function name="OnEmergencyEvent" messagetype="notification">
- <description>
- "Sender: HMI-&gt;SDL. Conditions: when HMI enters the mode of "911 Assist", or other rear view camera,
- or something else in the future. Purpose: for SDL to change the audioStreamingState of the related apps to
- NOT_AUDIBLE when "enabled:true" and back to AUDIBLE when "enabled:false""
- </description>
- <param name="enabled" type="Boolean" mandatory="true">
- </param>
- </function>
- <function name="OnResumeAudioSource" messagetype="notification" provider="sdl">
- <description>This method must be invoked by SDL to update audio state.</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>The ID of app to be resumed audio source.</description>
- </param>
- </function>
- <function name="OnSDLPersistenceComplete" messagetype="notification" provider="sdl">
- </function>
- <function name="UpdateAppList" messagetype="request" provider="hmi">
- <description>Issued by SDL to notify HMI about new applications registered.</description>
- <param name="applications" type="Common.HMIApplication" mandatory="true" array="true" minsize="0" maxsize="100"/>
- </function>
- <function name="UpdateAppList" messagetype="response">
- </function>
- <function name="UpdateDeviceList" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLink to HMI to change device list.</description>
- <param name="deviceList" type="Common.DeviceInfo" mandatory="true" array="true" minsize="0" maxsize="100">
- <description>The array of names/IDs of connected devices</description>
- </param>
- </function>
- <function name="UpdateDeviceList" messagetype="response">
- </function>
- <function name="OnFileRemoved" messagetype="notification" provider="sdl">
- <description>Notifies HMI in case some application file has been removed</description>
- <param name="fileName" type="String" minlength="1" maxlength="30" mandatory="true">
- <description>The name of the removed file</description>
- </param>
- <param name="fileType" type="Common.FileType" mandatory="true">
- <description>The file type. See FileType.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application.</description>
- </param>
- </function>
- <function name="AllowDeviceToConnect" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLink to HMI to get the permissions of new device connection.</description>
- <param name="device" type="Common.DeviceInfo" mandatory="true"/>
- </function>
- <function name="AllowDeviceToConnect" messagetype="response">
- <param name="allow" type="Boolean" mandatory="true"/>
- </function>
- <function name="OnDeviceChosen" messagetype="notification" provider="hmi">
- <description>Notification must be initiated by HMI on user selecting device in the list of devices.</description>
- <param name="deviceInfo" type="Common.DeviceInfo" mandatory="true">
- <description>The name and ID of the device chosen</description>
- </param>
- </function>
- <function name="OnFindApplications" messagetype="notification" provider="hmi">
- <description>This method must be invoked by HMI to get list of registered apps.</description>
- <param name="deviceInfo" type="Common.DeviceInfo" mandatory="false">
- <description>The name and ID of the device the list of registered applications is required for.</description>
- </param>
- </function>
- <function name="ActivateApp" messagetype="request" provider="hmi">
- <description>Request from SDL to HMI to bring specified application to front on UI e.g make it HMI status 'FULL'.</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of deactivated application.</description>
- </param>
- <param name="priority" type="Common.AppPriority" mandatory="false">
- <description>Send to HMI so that it can coordinate order of requests/notifications correspondingly.</description>
- </param>
- <param name="level" type="Common.HMILevel" mandatory="false">
- <description>If level for application is to be changed to something else then FULL then this parameter should be used.</description>
- </param>
- </function>
- <function name="ActivateApp" messagetype="response">
- </function>
- <function name="OnAppActivated" messagetype="notification" provider="hmi">
- <description>Must be sent by HU system when the user clicks on app in the list of registered apps or on soft button with 'STEAL_FOCUS' action.</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of selected application.</description>
- </param>
- </function>
- <function name="OnAppDeactivated" messagetype="notification" provider="hmi">
- <description>Must be sent by HU system when the user switches to any functionality which is not other mobile application.</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of deactivated application.</description>
- </param>
- <param name="reason" type="Common.DeactivateReason" mandatory="true">
- <description>Specifies the functionality the user has switched to.</description>
- </param>
- </function>
- <function name="OnAppRegistered" messagetype="notification" provider="sdl">
- <description>Issued by SDL to notify HMI about new application registered.</description>
- <param name="application" type="Common.HMIApplication" mandatory="true">
- <description>The information about application registered. See HMIApplication. </description>
- </param>
- <param name="ttsName" type="Common.TTSChunk" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- TTS string for VR recognition of the mobile application name, e.g. "Ford Drive Green".
- Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.
- May not be empty.
- May not start with a new line character.
- Not unique value
- </description>
- </param>
- <param name="vrSynonyms" type="String" maxlength="40" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- Defines an additional voice recognition command.
- Must not interfere with any name of previously registered applications(SDL makes check).
- </description>
- </param>
- <param name="resumeVrGrammars" type="Boolean" mandatory="false">
- <description>The flag if VR grammars resume is required</description>
- </param>
- <param name="priority" type="Common.AppPriority" mandatory="false">
- <description>Send to HMI so that it can coordinate order of requests/notifications correspondingly.</description>
- </param>
- </function>
- <function name="OnAppUnregistered" messagetype="notification" provider="sdl">
- <description>
- Issued by SDL to notify HMI about application unregistered.
- Application then to be removed from application list; all data connected with application has to be cleared up.
- </description>
- <param name="unexpectedDisconnect" type="Boolean" mandatory="true">
- <description>
- SDL sends 'true' in case the connection is unexpectedly lost.
- SDL sends 'false' in case the mobile app is unregistered gracefully (via appropriate RPC)
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application unregistered</description>
- </param>
- </function>
- <function name="OnExitApplication" messagetype="notification" provider="hmi">
- <description>Must be sent by HMI when the User chooses to exit the application..</description>
- <param name="reason" type="Common.ApplicationExitReason" mandatory="true">
- <description>Specifies reason of moving the app to NONE</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application to be exited.</description>
- </param>
- </function>
- <function name="OnExitAllApplications" messagetype="notification" provider="hmi">
- <description>Sent by HMI to SDL to close all registered applications.</description>
- <param name="reason" type="Common.ApplicationsCloseReason" mandatory="true">
- <description>Specifies reason for exiting all apllications.</description>
- </param>
- </function>
- <function name="OnAwakeSDL" messagetype="notification">
- <description>
- Sender: HMI-&gt;SDL. Must be sent to return SDL to normal operation after 'Suspend' or 'LowVoltage' events
- </description>
- </function>
- <function name="MixingAudioSupported" messagetype="request" provider="hmi">
- <description>Request from SDL to HMI to find out if the last one supports mixing audio (i.e. recording TTS command and playing audio).</description>
- </function>
- <function name="MixingAudioSupported" messagetype="response">
- <description>If no response received SDL supposes that mixing audio is not supported</description>
- <param name="attenuatedSupported" type="Boolean" mandatory="true">
- <description>Must be true if supported</description>
- </param>
- </function>
- <function name="PlayTone" messagetype="notification" provider="sdl">
- <description>Sent by SDL to HMI to notify that the tone should be played.</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application that invoked this notification</description>
- </param>
- <param name="methodName" type="Common.MethodName" mandatory="true">
- <description>Defines the name of app's request that initiates playing a tone</description>
- </param>
- </function>
- <function name="DialNumber" messagetype="request">
- <description>Request from SDL to call a specific number.</description>
- <param name="number" type="String" maxlength="40" mandatory="true">
- <description>The number to dial. Only the character + and numbers are allowed.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="DialNumber" messagetype="response">
- </function>
- <!-- Policies -->
- <!-- SyncP RPC-->
- <function name="OnSystemRequest" messagetype="notification" provider="hmi">
- <description>
- An asynchronous request from the system for specific data from the device or the cloud or response to a request from the device or cloud
- Binary data can be included in hybrid part of message for some requests (such as Authentication request responses)
- </description>
- <param name="requestType" type="Common.RequestType" mandatory="true">
- <description>The type of system request.</description>
- </param>
- <param name="url" type="String" maxlength="1000" minlength="1" mandatory="false">
- <description>Optional array of URL(s) for HTTP requests.</description>
- </param>
- <param name="fileType" type="Common.FileType" mandatory="false">
- <description>Optional file type (meant for HTTP file requests).</description>
- </param>
- <param name="offset" type="Integer" minvalue="0" maxvalue="100000000000" mandatory="false">
- <description>Optional offset in bytes for resuming partial data chunks</description>
- </param>
- <param name="length" type="Integer" minvalue="0" maxvalue="100000000000" mandatory="false">
- <description>Optional length in bytes for resuming partial data chunks</description>
- </param>
- <param name="timeout" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="false">
- </param>
- <param name="fileName" type="String" maxlength="255" minlength="1" mandatory="true">
- <description>File reference name.</description>
- </param>
- <param name="appID" type="String" maxlength="50" minlength="1" mandatory="false">
- <description>ID of application that requested this RPC.</description>
- </param>
- </function>
- <function name="SystemRequest" messagetype="request" provider="hmi">
- <description>An asynchronous request from the device; binary data can be included in hybrid part of message for some requests (such as Authentication requests)</description>
- <param name="requestType" type="Common.RequestType" mandatory="true">
- <description>The type of system request.</description>
- </param>
- <param name="fileName" type="String" maxlength="255" minlength="1" mandatory="true">
- <description>The path to file.</description>
- </param>
- <param name="appID" type="String" maxlength="50" minlength="1" mandatory="false">
- <description>ID of application that requested this RPC.</description>
- </param>
- </function>
- <function name="SystemRequest" messagetype="response">
- </function>
- <function name="PolicyUpdate" messagetype="request" provider="hmi">
- <description>
- From: SDL
- To: SYNCP Manager
- Asks SYNCP Manager to send given Policy Table snapshot to the backend
- </description>
- <param name="file" type="String" minlength="1" maxlength="255" mandatory="true">
- <description>
- Location of policy table snapshot
- </description>
- </param>
- <param name="timeout" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>
- Send attempt timeout in seconds
- </description>
- </param>
- <param name="retry" type="Integer" minvalue="0" maxvalue="65535" array="true" minsize="1" maxsize="5" mandatory="true">
- <description>
- Array of delays to wait after failed atempts
- </description>
- </param>
- </function>
- <function name="PolicyUpdate" messagetype="response">
- </function>
- <!-- End of SyncP RPC-->
- <function name="OnSDLClose" messagetype="notification" provider="sdl">
- <description>SDL must notify HMI about finish working application</description>
- </function>
- <function name="OnPutFile" messagetype="notification" provider="sdl">
- <description>
- Notification, that comes to HMI when mobile sents file with systemFile flag
- </description>
- <param name="offset" type="Integer" minvalue="0" maxvalue="100000000000" mandatory="false">
- <description>Optional offset in bytes for resuming partial data chunks</description>
- </param>
- <param name="length" type="Integer" minvalue="0" maxvalue="100000000000" mandatory="false">
- <description>Optional length in bytes for resuming partial data chunks</description>
- </param>
- <param name="fileSize" type="Integer" minvalue="0" maxvalue="100000000000" mandatory="false">
- <description>Full Size of file. sends in first OnPutFile notification if file is splited
- into many PutFiles
- </description>
- </param>
- <param name="FileName" type="String" maxlength="255" mandatory="true">
- <description>File reference name.</description>
- </param>
- <param name="syncFileName" type="String" maxlength="255" mandatory="true">
- <description>File reference name.</description>
- </param>
- <param name="fileType" type="Common.FileType" mandatory="true">
- <description>Selected file type.</description>
- </param>
- <param name="persistentFile" type="Boolean" defvalue="false" mandatory="false">
- <description>
- Indicates if the file is meant to persist between sessions / ignition cycles.
- If set to TRUE, then the system will aim to persist this file through session / cycles.
- While files with this designation will have priority over others, they are subject to deletion by the system at any time.
- In the event of automatic deletion by the system, the app will receive a rejection and have to resend the file.
- If omitted, the value will be set to false.
- </description>
- </param>
- </function>
- <!-- Policies -->
- <function name="GetSystemInfo" messagetype="request" provider="hmi">
- <description>Request from SDL to HMI to obtain information about head unit system.</description>
- </function>
- <function name="GetSystemInfo" messagetype="response">
- <param name="ccpu_version" type="String" maxlength="500" mandatory="true">
- <description>Software version of the module</description>
- </param>
- <param name="language" type="Common.Language" mandatory="true">
- <description>ISO 639-1 combined with ISO 3166 alpha-2 country code (i.e. en-us)</description>
- </param>
- <param name="wersCountryCode" type="String" maxlength="500" mandatory="true">
- <description>Country code from the Ford system WERS (i.e.WAEGB).</description>
- </param>
- </function>
- <function name="OnSystemInfoChanged" messagetype="notification" provider="hmi">
- <description>Issued by system to SDL to notify that some system param has changed. Currently applied for Sync Language.</description>
- <param name="language" type="Common.Language" mandatory="true"/>
- </function>
- <function name="OnIgnitionCycleOver" messagetype="notification" provider="hmi">
- <description>Notification from system to SDL to let it know that ignition cycle is over.</description>
- </function>
- <function name="DecryptCertificate" messagetype="request">
- <description>Sender: SDL-&gt;HMI. Purpose: to decrypt the certificate received via the Updated Policy Table. </description>
- <param name="fileName" type="String" maxlength="255" minlength="1" mandatory="true">
- <description>The path to the file with the encrypted certificate from the PolicyTable.</description>
- </param>
- </function>
- <function name="DecryptCertificate" messagetype="response">
- <description>SUCCESS - in case the certificate is decrypted and placed to the same file from request.</description>
- </function>
- <function name="OnEventChanged" messagetype="notification">
- <description>Sender: HMI->SDL. When event is become active</description>
- <param name="eventName" type="Common.EventTypes" mandatory="true">
- <description>Specifies the types of active events.</description>
- </param>
- <param name="isActive" type="Boolean" mandatory="true">
- <description>Must be 'true' - when the event is started on HMI. Must be 'false' when the event is ended on HMI</description>
- </param>
- </function>
- <!-- End of Policies -->
- </interface>
- <interface name="VR" version="1.0" date="2013-04-17">
- <function name="IsReady" messagetype="request" provider="hmi">
- <description>Method is invoked at system startup. Response provides information about presence of VR module and its readiness to cooperate with SDL.</description>
- </function>
- <function name="IsReady" messagetype="response">
- <param name="available" type="Boolean" mandatory="true">
- <description>Must be true if VR is present and ready to communicate with SDL.</description>
- </param>
- </function>
- <function name="Started" messagetype="notification" provider="hmi">
- <description>Must be initiated by VR module to let SDL know that VR session has started.</description>
- </function>
- <function name="Stopped" messagetype="notification" provider="hmi">
- <description>Must be initiated by VR module to let SDL know that VR session has stopped.</description>
- </function>
- <function name="AddCommand" messagetype="request" provider="hmi">
- <description>Request from SDL to add a command(string with associated id) to VR.</description>
- <param name="cmdID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="true">
- <description>ID of a command (further to be used in OnCommand notification).</description>
- </param>
- <param name="vrCommands" type="String" mandatory="true" maxlength="99" minsize="1" maxsize="100" array="true">
- <description>List of strings to be used as VR commands.</description>
- </param>
- <param name="type" type="Common.VRCommandType" mandatory="true">
- <description>Type of added command. See VRCommandType.</description>
- </param>
- <param name="grammarID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="true">
- <description>
- ID of the specific grammar, whether top-level or choice set.
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="false">
- <description>ID of application that requested this RPC.</description>
- </param>
- </function>
- <function name="AddCommand" messagetype="response">
- </function>
- <function name="DeleteCommand" messagetype="request" provider="hmi">
- <description>Request from SDL to delete a command from VR.</description>
- <param name="cmdID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="true">
- <description>Id of a command (list of strings), previously sent by AddCommand.</description>
- </param>
- <param name="type" type="Common.VRCommandType" mandatory="true">
- <description>Type of added command. See VRCommandType.</description>
- </param>
- <param name="grammarID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="true">
- <description>ID of the specific grammar.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that requested this RPC.</description>
- </param>
- </function>
- <function name="DeleteCommand" messagetype="response">
- </function>
- <function name="PerformInteraction" messagetype="request" provider="hmi">
- <description>
- Sets some properties for the application initiated request.
- </description>
- <param name="helpPrompt" type="Common.TTSChunk" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- The help prompt. An array of text chunks of type TTSChunk. See TTSChunk. The array must have at least one item.
- </description>
- </param>
- <param name="initialPrompt" type="Common.TTSChunk" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- This is the intial prompt spoken to the user at the start of an interaction. An array of text chunks of type TTSChunk. See TTSChunk. The array must have at least one item.
- </description>
- </param>
- <param name="timeoutPrompt" type="Common.TTSChunk" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- Help text for a wait timeout. An array of text chunks of type TTSChunk. See TTSChunk. The array must have at least one item.
- </description>
- </param>
- <param name="timeout" type="Integer" mandatory="true">
- <description>Timeout initiate timeoutPrompt</description>
- </param>
- <param name="grammarID" type="Integer" minvalue="0" maxvalue="2000000000" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- IDs of the specific compiled grammars for this voice interaction.
- </description>
- </param>
- </function>
- <function name="PerformInteraction" messagetype="response">
- <param name="choiceID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="false">
- <description>
- ID of the choice that was selected in response to PerformInteraction.
- </description>
- </param>
- </function>
- <function name="OnCommand" messagetype="notification" provider="hmi">
- <description>Notifies SDL about command trigerred via VR</description>
- <param name="cmdID" type="Integer" mandatory="true" minvalue="0" maxvalue="2000000000">
- <description>ID of of the command (list of strings)</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="ChangeRegistration" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLink to HMI to change language of VR.</description>
- <param name="vrSynonyms" type="String" maxlength="40" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- Request new VR synonyms registration
- Defines an additional voice recognition command.
- Must not interfere with any name of previously registered applications(SDL makes check).
- </description>
- </param>
- <param name="language" type="Common.Language" mandatory="true">
- <description>The language application wants to switch to.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="ChangeRegistration" messagetype="response">
- </function>
- <function name="OnLanguageChange" messagetype="notification" provider="hmi">
- <description>Notification from HMI to SmartDeviceLink about change of language.</description>
- <param name="language" type="Common.Language" mandatory="true">
- <description>Language VR has switched to.</description>
- </param>
- </function>
- <function name="GetSupportedLanguages" messagetype="request" provider="hmi">
- <description>Method is invoked at system start-up. Response must provide the information about VR supported languages.</description>
- </function>
- <function name="GetSupportedLanguages" messagetype="response">
- <param name="languages" type="Common.Language" mandatory="true" array="true" minsize="1" maxsize="100">
- <description>List of languages supported in VR.</description>
- </param>
- </function>
- <function name="GetLanguage" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLink to HMI to get currently active VR language</description>
- </function>
- <function name="GetLanguage" messagetype="response">
- <param name="language" type="Common.Language" mandatory="true"/>
- </function>
- <function name="GetCapabilities" messagetype="request" provider="hmi">
- <description>Method is invoked at system startup by SDL to request information about VR capabilities of HMI.</description>
- </function>
- <function name="GetCapabilities" messagetype="response">
- <param name="vrCapabilities" type="Common.VrCapabilities" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>Types of input recognized by VR module.</description>
- </param>
- </function>
- </interface>
- <interface name="TTS" version="1.0" date="2013-04-18">
- <description>RPCs for communication between TTS and SDL.</description>
- <function name="GetCapabilities" messagetype="request" provider="hmi">
- <description>Method is invoked at system start-up. SDL requests the information about all supported hardware and their capabilities</description>
- </function>
- <function name="GetCapabilities" messagetype="response">
- <param name="speechCapabilities" type="Common.SpeechCapabilities" minsize="1" maxsize="5" array="true" mandatory="true">
- <description>See SpeechCapabilities</description>
- </param>
- <param name="prerecordedSpeechCapabilities" type="Common.PrerecordedSpeech" minsize="1" maxsize="5" array="true" mandatory="true">
- <description>See PrerecordedSpeech</description>
- </param>
- </function>
- <function name="Started" messagetype="notification" provider="hmi">
- <description>Must be initiated by TTS module to let SDL know that TTS session has started.</description>
- </function>
- <function name="Stopped" messagetype="notification" provider="hmi">
- <description>Must be initiated by TTS module to let SDL know that TTS session has stopped.</description>
- </function>
- <function name="IsReady" messagetype="request" provider="hmi">
- <description>Method is invoked at system start-up. Response must provide the information about presence of TTS module and its readiness to cooperate with SDL.</description>
- </function>
- <function name="IsReady" messagetype="response">
- <param name="available" type="Boolean" mandatory="true">
- <description>Must be true if TTS is present and ready to communicate with SDL.</description>
- </param>
- </function>
- <function name="Speak" messagetype="request" provider="hmi">
- <description>RPC from SDL to TTS for speaking the text.</description>
- <param name="ttsChunks" type="Common.TTSChunk" mandatory="true" array="true" minsize="1" maxsize="100">
- <description>List of strings to be spoken.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that requested this RPC.</description>
- </param>
- <param name="speakType" type="Common.MethodName" mandatory="false">
- <description>Defines the type of the request which causes text-to-speech</description>
- </param>
- </function>
- <function name="Speak" messagetype="response">
- <description>Provides information about success of operation.</description>
- </function>
- <function name="StopSpeaking" messagetype="request" provider="hmi">
- <description>Initiated by SDL to stop speaking the text.</description>
- </function>
- <function name="StopSpeaking" messagetype="response">
- </function>
- <function name="ChangeRegistration" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLink to HMI to change language of TTS.</description>
- <param name="ttsName" type="Common.TTSChunk" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- Request new ttsName registration
- TTS string for VR recognition of the mobile application name, e.g. "Ford Drive Green".
- Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.
- May not be empty.
- May not start with a new line character.
- Not unique value (SDL makes all the checks)
- </description>
- </param>
- <param name="language" type="Common.Language" mandatory="true">
- <description>The language application wants to switch to.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="ChangeRegistration" messagetype="response">
- </function>
- <function name="OnLanguageChange" messagetype="notification" provider="hmi">
- <description>Notification from HMI to SmartDeviceLink about change of language.</description>
- <param name="language" type="Common.Language" mandatory="true">
- <description>Language TTS has switched to.</description>
- </param>
- </function>
- <function name="GetSupportedLanguages" messagetype="request" provider="hmi">
- <description>Method is invoked at system start-up by SDL. Response must provide the information about TTS supported languages.</description>
- </function>
- <function name="GetSupportedLanguages" messagetype="response">
- <param name="languages" type="Common.Language" mandatory="true" array="true" minsize="1" maxsize="100">
- <description>List of languages supported in TTS.</description>
- </param>
- </function>
- <function name="GetLanguage" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLink to HMI to get currently active TTS language</description>
- </function>
- <function name="GetLanguage" messagetype="response">
- <param name="language" type="Common.Language" mandatory="true"/>
- </function>
- <function name="SetGlobalProperties" messagetype="request" provider="hmi">
- <description>Sets some properties for the application initiated request.</description>
- <param name="helpPrompt" type="Common.TTSChunk" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- The help prompt.
- An array of text chunks of type TTSChunk. See TTSChunk.
- The array must have at least one item.
- </description>
- </param>
- <param name="timeoutPrompt" type="Common.TTSChunk" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- Help text for a wait timeout.
- An array of text chunks of type TTSChunk. See TTSChunk.
- The array must have at least one item.
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="SetGlobalProperties" messagetype="response">
- </function>
- <function name="OnResetTimeout" messagetype="notification">
- <description>
- Sender: HMI-&gt;SDL. HMI must send this notification every 10 sec. in case the 'methodName'
- results long processing on HMI
- </description>
- <param name="appID" type="Integer" mandatory="true">
- <description>Id of application that concerns the 'methodName'.</description>
- </param>
- <param name="methodName" type="String" mandatory="true">
- <description>The name of the method, the renew of timeout is required for</description>
- </param>
- </function>
- </interface>
- <interface name="UI" version="1.0" date="2013-04-16">
- <function name="Alert" messagetype="request" provider="hmi">
- <description>Request from SDL to show an alert message on the display.</description>
- <param name="alertStrings" type="Common.TextFieldStruct" mandatory="true" array="true" minsize="0" maxsize="3">
- <description>Array of lines of alert text fields. See TextFieldStruct. Uses alertText1, alertText2, alertText3.</description>
- </param>
- <param name="duration" type="Integer" mandatory="true" minvalue="3000" maxvalue="10000">
- <description>Timeout in milliseconds.</description>
- </param>
- <param name="softButtons" type="Common.SoftButton" mandatory="false" minsize="0" maxsize="4" array="true">
- <description>App defined SoftButtons</description>
- </param>
- <param name="progressIndicator" type="Boolean" mandatory="false">
- <description>If supported on the given platform, the alert GUI will include some sort of animation indicating that loading of a feature is progressing. e.g. a spinning wheel or hourglass, etc.</description>
- </param>
- <param name="alertType" type="Common.AlertType" mandatory="true">
- <description>Defines if only UI or BOTH portions of the Alert request are being sent to HMI Side</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="Alert" messagetype="response">
- <param name="tryAgainTime" type="Integer" mandatory="false" minvalue="0" maxvalue="2000000000">
- <description>Amount of time (in milliseconds) that SDL must wait before resending an alert. Must be provided if another system event or overlay currently has a higher priority than this alert.</description>
- </param>
- </function>
- <function name="Show" messagetype="request" provider="hmi">
- <param name="showStrings" type="Common.TextFieldStruct" mandatory="true" array="true" minsize="0" maxsize="7">
- <description>Array of lines of show text fields. See TextFieldStruct. Uses mainField1, mainField2, mainField3, mainField4. If some field is not set, the corresponding text should stay unchanged. If field's text is empty "", the field must be cleared.
- mainField1: The text that should be displayed in a single or upper display line.
- mainField2: The text that should be displayed on the second display line.
- mainField3: The text that should be displayed on the second "page" first display line.
- mainField4: The text that should be displayed on the second "page" second display line.
- statusBar: statusBar.
- mediaClock: Text value for MediaClock field.
- mediaTrack: The text that should be displayed in the track field. This field is only valid for media applications on NGN type ACMs.
- </description>
- </param>
- <param name="alignment" type="Common.TextAlignment" mandatory="false">
- <description>Specifies how mainField1 and mainField2 texts should be aligned on the display.</description>
- <description>If omitted, texts must be centered</description>
- </param>
- <param name="graphic" type="Common.Image" mandatory="false">
- <description>Path to optional dynamic image or the static binary image itself. See Image. If omitted, the displayed graphic should not change.</description>
- </param>
- <param name="secondaryGraphic" type="Common.Image" mandatory="false">
- <description>
- Image struct determining whether static or dynamic secondary image to display in app.
- If omitted on supported displays, the displayed secondary graphic shall not change.
- </description>
- </param>
- <param name="softButtons" type="Common.SoftButton" minsize="0" maxsize="8" array="true" mandatory="false">
- <description>App defined SoftButtons.</description>
- <description>If omitted, the currently displayed SoftButton values should not change.</description>
- </param>
- <param name="customPresets" type="String" maxlength="500" minsize="0" maxsize="10" array="true" mandatory="false">
- <description>App labeled on-screen presets (i.e. GEN3 media presets or dynamic search suggestions).</description>
- <description>If omitted on supported displays, the presets will be shown as not defined.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>Id of application related to this RPC.</description>
- </param>
- </function>
- <function name="Show" messagetype="response">
- </function>
- <function name="AddCommand" messagetype="request" provider="hmi">
- <description>Request from SDL to add a command to the application menu.</description>
- <param name="cmdID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="true">
- <description>ID of the command to be added.</description>
- </param>
- <param name="menuParams" type="Common.MenuParams" mandatory="false">
- <description>Optional sub value containing parameters of the command (position, name, etc.). See MenuParams. If omitted the command should be added to the end of the list of commands.</description>
- </param>
- <param name="cmdIcon" type="Common.Image" mandatory="false">
- <description>Image to be displayed for representing the command. See Image.</description>
- <description>If omitted, no (or the default if applicable) icon should be displayed.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="AddCommand" messagetype="response">
- </function>
- <function name="DeleteCommand" messagetype="request" provider="hmi">
- <description>Request from SDL to delete a command from the in-application menu with the specified command id.</description>
- <param name="cmdID" type="Integer" mandatory="true" minvalue="0" maxvalue="2000000000">
- <description>cmdId previously sent via AddCommand request - id of the command to be deleted.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="DeleteCommand" messagetype="response">
- </function>
- <function name="AddSubMenu" messagetype="request" provider="hmi">
- <description>Request from SDL to add a sub menu to the in-application menu.</description>
- <param name="menuID" type="Integer" minvalue="1" maxvalue="2000000000" mandatory="true">
- <description>ID of the sub menu to be added. Unique for the application.</description>
- </param>
- <param name="menuParams" type="Common.MenuParams" mandatory="true">
- <description>Position and name of menu to be added. 'parent' field is omitted for this RPC. </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that requested this RPC.</description>
- </param>
- </function>
- <function name="AddSubMenu" messagetype="response">
- </function>
- <function name="DeleteSubMenu" messagetype="request" provider="hmi">
- <description>Request from SDL to delete a submenu from the in-application menu.</description>
- <param name="menuID" type="Integer" minvalue="1" maxvalue="2000000000" mandatory="true">
- <description>The "menuID" of the sub-menu to be deleted. (See addSubMenu.menuID)</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="DeleteSubMenu" messagetype="response">
- </function>
- <function name="PerformInteraction" messagetype="request" provider="hmi">
- <description>Request from SDL for triggering an interaction (e.g. "Permit GPS?" - Yes, no, Always Allow).</description>
- <param name="initialText" type="Common.TextFieldStruct" mandatory="false">
- <description>Uses initialInteractionText. See TextFieldStruct.</description>
- </param>
- <param name="choiceSet" type="Common.Choice" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>The list of choices to be used for the interaction with the user</description>
- </param>
- <param name="vrHelpTitle" type="String" maxlength="500" mandatory="false">
- <description>VR Help Title text.</description>
- <description>If omitted on supported displays, the default HU system help title should be used.</description>
- </param>
- <param name="vrHelp" type="Common.VrHelpItem" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>VR Help Items. If omitted on supported displays, the default HU system generated help items should be used.</description>
- </param>
- <param name="timeout" type="Integer" minvalue="5000" maxvalue="100000" defvalue="10000" mandatory="true">
- <description>Timeout in milliseconds.</description>
- </param>
- <param name="interactionLayout" type="Common.LayoutMode" mandatory="false">
- <description>See LayoutMode.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="PerformInteraction" messagetype="response">
- <param name="choiceID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="false">
- <description>ID of the choice that was selected in response to PerformInteraction.</description>
- </param>
- <param name="manualTextEntry" type="String" minlength="0" maxlength="500" mandatory="false">
- <description>
- Manually entered text selection, e.g. through keyboard
- Can be returned in lieu of choiceID, depending on trigger source
- </description>
- </param>
- </function>
- <function name="SetMediaClockTimer" messagetype="request" provider="hmi">
- <description>Sets the initial media clock value and automatic update method.</description>
- <param name="startTime" type="Common.TimeFormat" mandatory="false">
- <description>startTime should be ignored for "PAUSE", "RESUME", and "CLEAR"</description>
- </param>
- <param name="endTime" type="Common.TimeFormat" mandatory="false">
- <description>
- See TimeFormat.
- endTime can be provided for "COUNTUP" and "COUNTDOWN"; to be used to calculate any visual progress bar (if not provided, this feature is ignored)
- If endTime is greater then startTime for COUNTDOWN or less than startTime for COUNTUP, then the request will return an INVALID_DATA.
- endTime will be ignored for "PAUSE", "RESUME", and "CLEAR"
- </description>
- </param>
- <param name="updateMode" type="Common.ClockUpdateMode" mandatory="true">
- <description>The update method of the media clock.</description>
- <description>In case of pause, resume, or clear, the start time value is ignored and shall be left out. For resume, the time continues with the same value as it was when paused.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that requested this RPC.</description>
- </param>
- </function>
- <function name="SetMediaClockTimer" messagetype="response">
- </function>
- <function name="SetGlobalProperties" messagetype="request" provider="hmi">
- <description>Request from SDL to set some properties for VR help.</description>
- <param name="vrHelpTitle" type="String" maxlength="500" mandatory="false">
- <description>VR Help Title text.</description>
- <description>If omitted on supported displays, the default HU system help title should be used.</description>
- </param>
- <param name="vrHelp" type="Common.VrHelpItem" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>VR Help Items. If omitted on supported displays, the default HU system generated help items should be used.</description>
- </param>
- <param name="menuTitle" maxlength="500" type="String" mandatory="false">
- <description>Optional text to label an app menu button (for certain touchscreen platforms).</description>
- </param>
- <param name="menuIcon" type="Common.Image" mandatory="false">
- <description>&gt;Optional icon to draw on an app menu button (for certain touchscreen platforms).</description>
- </param>
- <param name="keyboardProperties" type="Common.KeyboardProperties" mandatory="false">
- <description>On-screen keybaord configuration (if available).</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="SetGlobalProperties" messagetype="response">
- </function>
- <function name="OnCommand" messagetype="notification" provider="hmi">
- <description>Notification must be initiated by HMI on user choosing menu item.</description>
- <param name="cmdID" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="true">
- <description>Command ID, which is related to a specific menu entry (previously sent with AddCommand).</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that is related to this RPC.</description>
- </param>
- </function>
- <function name="OnSystemContext" messagetype="notification" provider="hmi">
- <description>
- Notification must be initiated by HMI when the user changes the context of application: goes to menu (in-application menu or system menu);
- switches to VR; pop-up appears on screen etc.
- </description>
- <param name="systemContext" type="Common.SystemContext" mandatory="true">
- <description>The context the application is brought into.</description>
- </param>
- <param name="appID" type="Integer" mandatory="false">
- <description>ID of application that is related to this RPC.</description>
- </param>
- </function>
- <function name="GetCapabilities" messagetype="request" provider="hmi">
- <description>Method is invoked at system startup by SDL to request information about UI capabilities of HMI.</description>
- </function>
- <function name="GetCapabilities" messagetype="response">
- <param name="displayCapabilities" type="Common.DisplayCapabilities" mandatory="true">
- <description>Information about the capabilities of the display: its type, text field supported, etc. See DisplayCapabilities. </description>
- </param>
- <param name="audioPassThruCapabilities" type="Common.AudioPassThruCapabilities" mandatory="true"/>
- <param name="hmiZoneCapabilities" type="Common.HmiZoneCapabilities" mandatory="true"/>
- <param name="softButtonCapabilities" type="Common.SoftButtonCapabilities" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>Must be returned if the platform supports on-screen SoftButtons.</description>
- </param>
- <param name="hmiCapabilities" type="Common.HMICapabilities" mandatory="false">
- <description>Specifies the HMI&#8217;s capabilities. See HMICapabilities.</description>
- </param>
- </function>
- <function name="ChangeRegistration" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLink to HMI to change language for app.</description>
- <param name="appName" type="String" maxlength="100" mandatory="false">
- <description>
- Request new app name registration
- Needs to be unique over all applications.
- May not be empty. May not start with a new line character.
- May not interfere with any name or synonym of any registered applications.
- Applications with the same name will be rejected. (SDL makes all the checks)
- </description>
- </param>
- <param name="ngnMediaScreenAppName" type="String" maxlength="100" mandatory="false">
- <description>Request new app short name registration</description>
- </param>
- <param name="language" type="Common.Language" mandatory="true">
- <description>The language application wants to switch to.</description>
- </param>
- <param name="appHMIType" type="Common.AppHMIType" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>
- Sent when app's requested-during-registration AppHMIType is changed to different one due to Policies update. Contains the updated list of all allowed app's AppHMITypes.
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="ChangeRegistration" messagetype="response">
- </function>
- <function name="OnLanguageChange" messagetype="notification" provider="hmi">
- <description>Notification from HMI to SmartDeviceLink about change of language.</description>
- <param name="language" type="Common.Language" mandatory="true">
- <description>Language UI has switched to.</description>
- </param>
- </function>
- <function name="GetSupportedLanguages" messagetype="request" provider="hmi">
- <description>Method should be invoked at system startup. Response provides information about UI supported languages.</description>
- </function>
- <function name="GetSupportedLanguages" messagetype="response">
- <param name="languages" type="Common.Language" mandatory="true" array="true" minsize="1" maxsize="100">
- <description>List of languages supported in UI.</description>
- </param>
- </function>
- <function name="GetLanguage" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLink to HMI to get currently active UI language</description>
- </function>
- <function name="GetLanguage" messagetype="response">
- <param name="language" type="Common.Language" mandatory="true"/>
- </function>
- <function name="OnDriverDistraction" messagetype="notification" provider="hmi">
- <description>Notification must be sent from HMI to SDL when driver distraction state is changed. Driver distraction rules are defined by the platform.</description>
- <param name="state" type="Common.DriverDistractionState" mandatory="true">
- <description>See DriverDistractionState. </description>
- </param>
- </function>
- <function name="SetAppIcon" messagetype="request" provider="hmi">
- <description>Used to set existing local file on SYNC as the app's icon.</description>
- <param name="syncFileName" type="Common.Image" mandatory="true">
- <description>Either the path to the dynamic image stored on HY or the static binary image itself. See Image</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="SetAppIcon" messagetype="response">
- </function>
- <function name="SetDisplayLayout" messagetype="request" provider="hmi">
- <param name="displayLayout" type="String" maxlength="500" mandatory="true">
- <description>
- Predefined or dynamically created screen layout.
- Currently only predefined screen layouts are defined.
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="SetDisplayLayout" messagetype="response">
- <param name="displayCapabilities" type="Common.DisplayCapabilities" mandatory="false">
- <description>See DisplayCapabilities</description>
- </param>
- <param name="buttonCapabilities" type="Common.ButtonCapabilities" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>See ButtonCapabilities</description>
- </param>
- <param name="softButtonCapabilities" type="Common.SoftButtonCapabilities" minsize="1" maxsize="100" array="true" mandatory="false">
- <description>If returned, the platform supports on-screen SoftButtons; see SoftButtonCapabilities.</description>
- </param>
- <param name="presetBankCapabilities" type="Common.PresetBankCapabilities" mandatory="false">
- <description>If returned, the platform supports custom on-screen Presets; see PresetBankCapabilities.</description>
- </param>
- </function>
- <function name="ShowCustomForm" messagetype="request" provider="hmi">
- <description>Used to show a custom form; it can be a parent or child screen. If no parent screen is designated, it is set as a parent screen.</description>
- <param name="customFormID" type="String" maxlength="500" mandatory="true">
- <description>
- Predefined or dynamically created screen layout.
- Currently only predefined forms are defined.
- Predefined layouts include:
- "DEFAULT" - Default media / non-media screen
- "ONSCREEN_PRESETS" - Custom root media screen containing app-defined onscreen presets.
- "KEYBOARD_SEARCH" - Custom template containing app-configured on-screen keyboard with active search updating; user also can trigger voice search.
- "NAV_FULLSCREEN_MAP" - Custom root template screen containing full screen map with navigation controls.
- "NAV_POI_MENU" - Custom template containing app-defined POI options.
- "NAV_SEARCH_RESULTS" - Custom template containing a list of app-defined search results
- "NAV_POI_INFO" - Custom template containing app-defined POI information (and potentially map data).
- </description>
- </param>
- <param name="parentFormID" type="String" maxlength="500" defvalue="DEFAULT" mandatory="false">
- <description>
- Parent screen of predefined form to display.
- Currently only predefined forms are defined.
- If not provided, then set to "DEFAULT".
- Predefined layouts include:
- "DEFAULT" - Default media / non-media screen
- "ONSCREEN_PRESETS" - Custom root media screen containing app-defined onscreen presets.
- "NAV_FULLSCREEN_MAP" - Custom template containing full screen map with navigation controls.
- </description>
- </param>
- </function>
- <function name="ShowCustomForm" messagetype="response">
- <param name="info" type="String" maxlength="1000" mandatory="false" platform="documentation">
- <description>Provides additional human readable info regarding the result.</description>
- </param>
- </function>
- <function name="OnKeyboardInput" messagetype="notification" provider="hmi">
- <description>On-screen keyboard event.</description>
- <description>Can be full string or individual keypresses depending on keyboard mode.</description>
- <param name="event" type="Common.KeyboardEvent" mandatory="true">
- <description>On-screen keyboard input data.</description>
- </param>
- <param name="data" type="String" minlength="0" maxlength="500" mandatory="false">
- <description>On-screen keyboard input data.</description>
- <description>For dynamic keypress events, this will be the current compounded string of entry text.</description>
- <description>For entry submission events, this will be the full text entry (this will always return regardless of the mode).</description>
- <description>For entry cancelled and entry aborted events, this data param will be omitted.</description>
- </param>
- </function>
- <function name="OnTouchEvent" messagetype="notification" provider="hmi">
- <description>Notifies about touch events on the screen's prescribed area</description>
- <param name="type" type="Common.TouchType" mandatory="true">
- <description>The type of touch event.</description>
- </param>
- <param name="event" type="Common.TouchEvent" mandatory="true" minsize="1" maxsize="10" array="true">
- <description>List of all individual touches involved in this event.</description>
- </param>
- </function>
- <function name="Slider" messagetype="request" provider="hmi">
- <description>Creates a full screen or pop-up overlay (depending on platform) with a single user controlled slider.</description>
- <param name="numTicks" type="Integer" minvalue="2" maxvalue="26" mandatory="true">
- <description>Number of selectable items on a horizontal axis</description>
- </param>
- <param name="position" type="Integer" minvalue="1" maxvalue="26" mandatory="true">
- <description>Initial position of slider control (cannot exceed numTicks)</description>
- </param>
- <param name="sliderHeader" type="String" maxlength="500" mandatory="true">
- <description>Text header to be displayed.</description>
- </param>
- <param name="sliderFooter" type="String" maxlength="500" minsize="1" maxsize="26" array="true" mandatory="false">
- <description>Text footer to be displayed (meant to display min/max threshold descriptors).</description>
- <description>For a static text footer, only one footer string shall be provided in the array.</description>
- <description>For a dynamic text footer, the number of footer text string in the array must match the numTicks value.</description>
- <description>For a dynamic text footer, text array string should correlate with potential slider position index.</description>
- <description>If omitted on supported displays, no footer text shall be displayed.</description>
- </param>
- <param name="timeout" type="Integer" minvalue="1000" maxvalue="65535" mandatory="true">
- <description>Timeout. The slider should be displayed until the defined amount of time has elapsed. </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that concerns this RPC.</description>
- </param>
- </function>
- <function name="Slider" messagetype="response">
- <param name="sliderPosition" type="Integer" minvalue="1" maxvalue="26" mandatory="false">
- <description>Current slider position. Must be returned when the user has clicked the &#8216;Save&#8217; or &#8216;Canceled&#8217; button or by the timeout </description>
- </param>
- </function>
- <function name="ScrollableMessage" messagetype="request" provider="hmi">
- <description>Creates a full screen overlay containing a large block of formatted text that can be scrolled with up to 8 SoftButtons defined</description>
- <param name="messageText" type="Common.TextFieldStruct" mandatory="true">
- <description>Body of text that can include newlines and tabs. Uses scrollableMessageBody.</description>
- </param>
- <param name="timeout" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>Timeout in milliseconds. The message should be displayed until the time defined is up.</description>
- </param>
- <param name="softButtons" type="Common.SoftButton" minsize="0" maxsize="8" array="true" mandatory="false">
- <description>App defined SoftButtons.</description>
- <description>If omitted on supported displays, only the system defined "Close" SoftButton should be displayed.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="ScrollableMessage" messagetype="response">
- </function>
- <function name="PerformAudioPassThru" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- <param name="audioPassThruDisplayTexts" type="Common.TextFieldStruct" mandatory="true" minsize="0" maxsize="2" array="true">
- <description>Uses
- audioPassThruDisplayText1: First line of text displayed during audio capture.
- audioPassThruDisplayText2: Second line of text displayed during audio capture.</description>
- </param>
- <param name="maxDuration" type="Integer" minvalue="1" maxvalue="1000000" mandatory="true">
- <description>The maximum duration of audio recording in milliseconds. If not provided, the recording should be performed until EndAudioPassThru arrives.</description>
- </param>
- <param name="muteAudio" type="Boolean" mandatory="true">
- <description>
- Defines if the current audio source should be muted during the APT session. If not, the audio source will play without interruption.
- If omitted, the value is set to true.
- </description>
- </param>
- </function>
- <function name="PerformAudioPassThru" messagetype="response">
- </function>
- <function name="EndAudioPassThru" messagetype="request" provider="hmi">
- <description>Request is sent by SDL to stop the audio capturing.</description>
- </function>
- <function name="EndAudioPassThru" messagetype="response">
- </function>
- <function name="IsReady" messagetype="request" provider="hmi">
- <description>Method is invoked at system startup. Response provides information about presence of UI module and its readiness to cooperate with SDL.</description>
- </function>
- <function name="IsReady" messagetype="response">
- <param name="available" type="Boolean" mandatory="true">
- <description>Must be true if UI is present and ready to communicate with SDL.</description>
- </param>
- </function>
- <function name="ClosePopUp" messagetype="request" provider="hmi">
- <description>Initiated by SDL to close currently active pop-up on HMI.</description>
- <param name="methodName" type="String" mandatory="false">
- <description>Method to be closed</description>
- </param>
- </function>
- <function name="ClosePopUp" messagetype="response">
- <description>Provides the result of operation.</description>
- </function>
- <function name="OnResetTimeout" messagetype="notification" provider="hmi">
- <description>HMI must provide SDL with notifications specific to the current Turn-By-Turn client status on the module</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>Id of application that invoked notifcation.</description>
- </param>
- <param name="methodName" type="String" mandatory="true">
- <description>Currently used method name on which was triggered action</description>
- </param>
- </function>
- <function name="OnRecordStart" messagetype="notification" provider="sdl">
- <description>Issued by SDL to notify HMI about capturing mic data should be started</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="SendHapticData" messagetype="request">
- <description>Send the UI spatial data from MOBILE. This data will be utilized by the HMI to determine how and when haptic events should occur</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>Internal ID of the application that requested this RPC.</description>
- </param>
- <param name="hapticRectData" type="Common.HapticRect" minsize="0" maxsize="1000" mandatory="false" array="true">
- <description>
- Array of rectangle data structures that represent the locations of all user controls present on the HMI.
- This data should be updated if/when the application presents a new screen.
- When a request is sent, if successful, it will replace all rectangle data previously sent through RPC.
- Avoidance of doubt, when an empty hapticRectData, it will be clear all rectangle data previously sent through RPC.
- </description>
- </param>
- </function>
- <function name="SendHapticData" messagetype="response">
- </function>
- </interface>
- <interface name="Navigation" version="1.0" date="2013-05-22">
- <function name="IsReady" messagetype="request" provider="hmi">
- <description>Method is invoked at system startup. Response must provide the information about presence of UI Navigation module and its readiness to cooperate with SDL.</description>
- </function>
- <function name="IsReady" messagetype="response">
- <param name="available" type="Boolean" mandatory="true">
- <description>Must be true if Navigation is present and ready to communicate with SDL.</description>
- </param>
- </function>
- <function name="SendLocation" messagetype="request">
- <description>That allows the app to send a destination to the embedded nav system.</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- <param name="longitudeDegrees" type="Float" minvalue="-180" maxvalue="180" mandatory="true">
- </param>
- <param name="latitudeDegrees" type="Float" minvalue="-90" maxvalue="90" mandatory="true">
- </param>
- <param name="locationName" type="String" maxlength="500" mandatory="false">
- <description> Name / title of intended location </description>
- </param>
- <param name="locationDescription" type="String" maxlength="500" mandatory="false">
- <description> Description intended location / establishment (if applicable) </description>
- </param>
- <param name="addressLines" type="String" maxlength="500" minsize="0" maxsize="4" array="true" mandatory="false">
- <description> Location address (if applicable) </description>
- </param>
- <param name="phoneNumber" type="String" maxlength="500" mandatory="false">
- <description> Phone number of intended location / establishment (if applicable) </description>
- </param>
- <param name="locationImage" type="Common.Image" mandatory="false">
- <description> Image / icon of intended location (if applicable and supported) </description>
- </param>
- </function>
- <function name="SendLocation" messagetype="response">
- </function>
-
- <function name="DialNumber" functionID="DialNumberID" messagetype="request">
- <description>Dials a phone number and switches to phone application.</description>
- <param name="number" type="String" maxlength="40" mandatory="true">
- <description>Phone number is a string, which can be up to 40 chars.</description>
- </param>
- </function>
-
- <function name="DialNumber" functionID="DialNumberID" messagetype="response">
- </function>
-
- <function name="ShowConstantTBT" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLinkCore to HMI to show info about navigation.</description>
- <param name="navigationTexts" type="Common.TextFieldStruct" mandatory="true" array="true" minsize="0" maxsize="5">
- <description>See TextFieldStruct. Uses:
- navigationText1
- navigationText2
- ETA
- totalDistance
- timeToDestination.
- </description>
- </param>
- <param name="turnIcon" type="Common.Image" mandatory="false">
- </param>
- <param name="nextTurnIcon" type="Common.Image" mandatory="false">
- </param>
- <param name="distanceToManeuver" type="Float" minvalue="0" maxvalue="1000000000" mandatory="true">
- <description>Fraction of distance till next maneuver (from previous maneuver).</description>
- <description>May be used to calculate progress bar.</description>
- </param>
- <param name="distanceToManeuverScale" type="Float" minvalue="0" maxvalue="1000000000" mandatory="true">
- <description>Fraction of distance till next maneuver (starting from when AlertManeuver is triggered).</description>
- <description>May be used to calculate progress bar.</description>
- </param>
- <param name="maneuverComplete" type="Boolean" mandatory="false">
- <description>If and when a maneuver has completed while an AlertManeuver is active, SDL will send this value set to TRUE in order to clear the AlertManeuver overlay.</description>
- <description>If omitted the value should be assumed as FALSE.</description>
- </param>
- <param name="softButtons" type="Common.SoftButton" minsize="0" maxsize="3" array="true" mandatory="false">
- <description>Three dynamic SoftButtons available</description>
- <description>If omitted on supported displays, the currently displayed SoftButton values will not change.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="ShowConstantTBT" messagetype="response">
- </function>
- <function name="AlertManeuver" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLinkCore to HMI to announce navigation maneuver</description>
- <param name="softButtons" type="Common.SoftButton" minsize="0" maxsize="3" array="true" mandatory="false">
- <description>If omitted, only the system defined "Close" SoftButton should be displayed.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application requested this RPC.</description>
- </param>
- </function>
- <function name="AlertManeuver" messagetype="response">
- </function>
- <function name="UpdateTurnList" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLinkCore to HMI to update turn list.</description>
- <param name="turnList" type="Common.Turn" minsize="1" maxsize="100" array="true" mandatory="false">
- </param>
- <param name="softButtons" type="Common.SoftButton" minsize="0" maxsize="1" array="true" mandatory="false">
- <description>If omitted, app-defined SoftButton should be left blank.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="UpdateTurnList" messagetype="response">
- </function>
- <function name="OnTBTClientState" messagetype="notification" provider="hmi">
- <description>HMI must provide SDL with notifications specific to the current Turn-By-Turn client status on the module</description>
- <param name="state" type="Common.TBTState" mandatory="true">
- <description>Current State of TBT client</description>
- </param>
- </function>
- <function name="SetVideoConfig" messagetype="request">
- <description>Request from SDL to HMI to ask whether HMI accepts a video stream with given configuration.</description>
- <param name="config" type="Common.VideoConfig" mandatory="true">
- <description>Configuration of a video stream.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="SetVideoConfig" messagetype="response">
- <description>
- Response from HMI to SDL whether the configuration is accepted.
- In a negative response, a list of rejected parameters are supplied.
- </description>
- <param name="rejectedParams" type="String" array="true" minsize="1" maxsize="1000" mandatory="false">
- <description>
- List of params of VideoConfig struct which are not accepted by HMI, e.g. "protocol" and "codec".
- This param exists only when the response is negative.
- </description>
- </param>
- </function>
- <function name="StartStream" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLinkCore to HMI to start playing video streaming.</description>
- <param name="url" type="String" minlength="21" maxlength="500" mandatory="true">
- <description>URL that HMI start playing.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="StartStream" messagetype="response">
- </function>
- <function name="StopStream" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLinkCore to HMI to stop playing video streaming.</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="StopStream" messagetype="response">
- </function>
- <function name="StartAudioStream" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLinkCore to HMI to start playing audio streaming.</description>
- <param name="url" type="String" minlength="21" maxlength="500" mandatory="true">
- <description>URL that HMI start playing.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="StartAudioStream" messagetype="response">
- </function>
- <function name="StopAudioStream" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLinkCore to HMI to stop playing audio streaming.</description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="StopAudioStream" messagetype="response">
- </function>
- <function name="OnAudioDataStreaming" messagetype="notification">
- <description>Sender: SDL-&gt;HMI. Purpose: notify about raw audio data presence over the URL provided via StartAudioStream SDL's request.</description>
- <param name="available" type="Boolean" mandatory="true">
- <description>If "true" - audio data started. If "false" - audio data stopped.</description>
- </param>
- </function>
- <function name="OnVideoDataStreaming" messagetype="notification">
- <description>Sender: SDL-&gt;HMI. Purpose: notify about raw video data presence over the URL provided via StartStream SDL's request.</description>
- <param name="available" type="Boolean" mandatory="true">
- <description>If "true" - video data started. If "false" - video data stopped.</description>
- </param>
- </function>
- <function name="GetWayPoints" functionID="GetWayPointsID" messagetype="request">
- <description>Request for getting waypoint/destination data.</description>
- <param name="wayPointType" type="Common.WayPointType" mandatory="true">
- <description>To request for either the destination only or for all waypoints including destination</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application.</description>
- </param>
- </function>
- <function name="GetWayPoints" functionID="GetWayPointsID" messagetype="response">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application.</description>
- </param>
- <param name="wayPoints" type="Common.LocationDetails" mandatory="false" array="true" minsize="1" maxsize="10">
- <description>See LocationDetails</description>
- </param>
- </function>
- <function name="OnWayPointChange" functionID="OnWayPointChangeID" messagetype="notification">
- <description>Notification which provides the entire LocationDetails when there is a change to any waypoints or destination.</description>
- <param name="wayPoints" type="Common.LocationDetails" mandatory="true" array="true" minsize="1" maxsize="10">
- <description>See LocationDetails</description>
- </param>
- </function>
-
- <function name="SubscribeWayPoints" functionID="SubscribeWayPointsID" messagetype="request">
- <description>To subscribe in getting changes for Waypoints/destinations</description>
- </function>
-
- <function name="SubscribeWayPoints" functionID="SubscribeWayPointsID" messagetype="response">
- </function>
-
- <function name="UnsubscribeWayPoints" functionID="UnsubscribeWayPointsID" messagetype="request">
- <description>Request to unsubscribe from WayPoints and Destination</description>
- </function>
-
- <function name="UnsubscribeWayPoints" functionID="UnsubscribeWayPointsID" messagetype="response">
- </function>
- </interface>
-
- <interface name="VehicleInfo" version="1.0" date="2013-04-21">
- <function name="IsReady" messagetype="request" provider="hmi">
- <description>Method is invoked at system startup. Response should provide information about presence of any of vehicle information modules (ECU, GPS, etc) and their readiness to cooperate with SDL.</description>
- </function>
- <function name="IsReady" messagetype="response">
- <param name="available" type="Boolean" mandatory="true">
- <description>Must be true if vehicle data modules are present and ready to communicate with SDL.</description>
- </param>
- </function>
- <function name="GetVehicleType" messagetype="request" provider="hmi">
- <description>Request from SmartDeviceLinkCore to HMI to get info about the vehicle (type, model, etc.).</description>
- </function>
- <function name="GetVehicleType" messagetype="response">
- <param name="vehicleType" type="Common.VehicleType" mandatory="true"/>
- </function>
- <function name="ReadDID" messagetype="request" provider="hmi">
- <description>Request from SDL for vehicle data reading.</description>
- <param name="ecuName" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>Name of ECU.</description>
- </param>
- <param name="didLocation" type="Integer" minvalue="0" maxvalue="65535" minsize="1" maxsize="1000" array="true" mandatory="true">
- <description>Get raw data from vehicle data DID location(s).</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application related to this RPC.</description>
- </param>
- </function>
- <function name="ReadDID" messagetype="response">
- <param name="didResult" type="Common.DIDResult" minsize="0" maxsize="1000" array="true" mandatory="false">
- <description>Array of requested DID results (with data if available).</description>
- </param>
- </function>
- <function name="GetDTCs" messagetype="request" provider="hmi">
- <description>Vehicle module diagnostic trouble code request.</description>
- <param name="ecuName" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>Name of ECU.</description>
- </param>
- <param name="dtcMask" type="Integer" minvalue="0" maxvalue="255" mandatory="false">
- <description>DTC Mask Byte to be sent in diagnostic request to module .</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that requested this RPC.</description>
- </param>
- </function>
- <function name="GetDTCs" messagetype="response">
- <param name="ecuHeader" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>2 byte ECU Header for DTC response (as defined in VHR_Layout_Specification_DTCs.pdf)</description>
- </param>
- <param name="dtc" type="String" mandatory="false" minsize="1" maxsize="15" maxlength="10" array="true">
- <description>
- Array of all reported DTCs on module. Each DTC is represented with 4 bytes:
- 3 bytes for data
- 1 byte for status
- </description>
- </param>
- </function>
- <function name="DiagnosticMessage" messagetype="request" provider="hmi">
- <description>Non periodic vehicle diagnostic request</description>
- <param name="targetID" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>Name of target ECU.</description>
- </param>
- <param name="messageLength" type="Integer" minvalue="0" maxvalue="65535" mandatory="true">
- <description>Length of message (in bytes).</description>
- </param>
- <param name="messageData" type="Integer" minvalue="0" maxvalue="255" minsize="1" maxsize="65535" array="true" mandatory="true">
- <description>
- Array of bytes comprising CAN message.
- </description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that requested this RPC.</description>
- </param>
- </function>
- <function name="DiagnosticMessage" messagetype="response">
- <param name="messageDataResult" type="Integer" minvalue="0" maxvalue="255" minsize="1" maxsize="65535" array="true" mandatory="true">
- <description>
- Array of bytes comprising CAN message result.
- </description>
- </param>
- </function>
- <function name="SubscribeVehicleData" messagetype="request">
- <description>
- Subscribes for specific published data items.
- The data will be only sent if it has changed.
- The application will be notified by the onVehicleData notification whenever new data is available.
- To unsubscribe the notifications, use unsubscribe with the same subscriptionType.
- </description>
- <param name="gps" type="Boolean" mandatory="false">
- <description>See GPSData</description>
- </param>
- <param name="speed" type="Boolean" mandatory="false">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- <param name="rpm" type="Boolean" mandatory="false">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- <param name="fuelLevel" type="Boolean" mandatory="false">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- <param name="fuelLevel_State" type="Boolean" mandatory="false">
- <description>The fuel level state</description>
- </param>
- <param name="instantFuelConsumption" type="Boolean" mandatory="false">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- <param name="externalTemperature" type="Boolean" mandatory="false">
- <description>The external temperature in degrees celsius</description>
- </param>
- <param name="prndl" type="Boolean" mandatory="false">
- <description>See PRNDL</description>
- </param>
- <param name="tirePressure" type="Boolean" mandatory="false">
- <description>See TireStatus</description>
- </param>
- <param name="odometer" type="Boolean" mandatory="false">
- <description>Odometer in km</description>
- </param>
- <param name="beltStatus" type="Boolean" mandatory="false">
- <description>The status of the seat belts</description>
- </param>
- <param name="bodyInformation" type="Boolean" mandatory="false">
- <description>The body information including power modes</description>
- </param>
- <param name="deviceStatus" type="Boolean" mandatory="false">
- <description>The device status including signal and battery strength</description>
- </param>
- <param name="driverBraking" type="Boolean" mandatory="false">
- <description>The status of the brake pedal</description>
- </param>
- <param name="wiperStatus" type="Boolean" mandatory="false">
- <description>The status of the wipers</description>
- </param>
- <param name="headLampStatus" type="Boolean" mandatory="false">
- <description>Status of the head lamps</description>
- </param>
- <param name="engineTorque" type="Boolean" mandatory="false">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- <param name="accPedalPosition" type="Boolean" mandatory="false">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- <param name="steeringWheelAngle" type="Boolean" mandatory="false">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- <!-- Ford Specific Data Items -->
- <param name="eCallInfo" type="Boolean" mandatory="false">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- <param name="airbagStatus" type="Boolean" mandatory="false">
- <description>The status of the air bags</description>
- </param>
- <param name="emergencyEvent" type="Boolean" mandatory="false">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- <param name="clusterModeStatus" type="Boolean" mandatory="false">
- <description>The status modes of the cluster</description>
- </param>
- <param name="myKey" type="Boolean" mandatory="false">
- <description>Information related to the MyKey feature</description>
- </param>
- <!-- / Ford Specific Data Items -->
- </function>
- <function name="SubscribeVehicleData" messagetype="response">
- <param name="gps" type="Common.VehicleDataResult" mandatory="false">
- <description>See GPSData</description>
- </param>
- <param name="speed" type="Common.VehicleDataResult" mandatory="false">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- <param name="rpm" type="Common.VehicleDataResult" mandatory="false">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- <param name="fuelLevel" type="Common.VehicleDataResult" mandatory="false">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- <param name="fuelLevel_State" type="Common.VehicleDataResult" mandatory="false">
- <description>The fuel level state</description>
- </param>
- <param name="instantFuelConsumption" type="Common.VehicleDataResult" mandatory="false">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- <param name="externalTemperature" type="Common.VehicleDataResult" mandatory="false">
- <description>The external temperature in degrees celsius.</description>
- </param>
- <param name="prndl" type="Common.VehicleDataResult" mandatory="false">
- <description>See PRNDL</description>
- </param>
- <param name="tirePressure" type="Common.VehicleDataResult" mandatory="false">
- <description>See TireStatus</description>
- </param>
- <param name="odometer" type="Common.VehicleDataResult" mandatory="false">
- <description>Odometer in km</description>
- </param>
- <param name="beltStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>The status of the seat belts</description>
- </param>
- <param name="bodyInformation" type="Common.VehicleDataResult" mandatory="false">
- <description>The body information including power modes</description>
- </param>
- <param name="deviceStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>The device status including signal and battery strength</description>
- </param>
- <param name="driverBraking" type="Common.VehicleDataResult" mandatory="false">
- <description>The status of the brake pedal</description>
- </param>
- <param name="wiperStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>The status of the wipers</description>
- </param>
- <param name="headLampStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>Status of the head lamps</description>
- </param>
- <param name="engineTorque" type="Common.VehicleDataResult" mandatory="false">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- <param name="accPedalPosition" type="Common.VehicleDataResult" mandatory="false">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- <param name="steeringWheelAngle" type="Common.VehicleDataResult" mandatory="false">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- <!-- Ford Specific Data Items -->
- <param name="eCallInfo" type="Common.VehicleDataResult" mandatory="false">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- <param name="airbagStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>The status of the air bags</description>
- </param>
- <param name="emergencyEvent" type="Common.VehicleDataResult" mandatory="false">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- <param name="clusterModes" type="Common.VehicleDataResult" mandatory="false">
- <description>The status modes of the cluster</description>
- </param>
- <param name="myKey" type="Common.VehicleDataResult" mandatory="false">
- <description>Information related to the MyKey feature</description>
- </param>
- <!-- / Ford Specific Data Items -->
- </function>
- <function name="UnsubscribeVehicleData" messagetype="request">
- <description>
- This function is used to unsubscribe the notifications from the subscribeVehicleData function.
- </description>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application that requested this RPC.</description>
- </param>
- <param name="gps" type="Boolean" mandatory="false">
- <description>See GPSData</description>
- </param>
- <param name="speed" type="Boolean" mandatory="false">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- <param name="rpm" type="Boolean" mandatory="false">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- <param name="fuelLevel" type="Boolean" mandatory="false">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- <param name="fuelLevel_State" type="Boolean" mandatory="false">
- <description>The fuel level state</description>
- </param>
- <param name="instantFuelConsumption" type="Boolean" mandatory="false">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- <param name="externalTemperature" type="Boolean" mandatory="false">
- <description>The external temperature in degrees celsius.</description>
- </param>
- <param name="prndl" type="Boolean" mandatory="false">
- <description>See PRNDL</description>
- </param>
- <param name="tirePressure" type="Boolean" mandatory="false">
- <description>See TireStatus</description>
- </param>
- <param name="odometer" type="Boolean" mandatory="false">
- <description>Odometer in km</description>
- </param>
- <param name="beltStatus" type="Boolean" mandatory="false">
- <description>The status of the seat belts</description>
- </param>
- <param name="bodyInformation" type="Boolean" mandatory="false">
- <description>The body information including power modes</description>
- </param>
- <param name="deviceStatus" type="Boolean" mandatory="false">
- <description>The device status including signal and battery strength</description>
- </param>
- <param name="driverBraking" type="Boolean" mandatory="false">
- <description>The status of the brake pedal</description>
- </param>
- <param name="wiperStatus" type="Boolean" mandatory="false">
- <description>The status of the wipers</description>
- </param>
- <param name="headLampStatus" type="Boolean" mandatory="false">
- <description>Status of the head lamps</description>
- </param>
- <param name="engineTorque" type="Boolean" mandatory="false">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- <param name="accPedalPosition" type="Boolean" mandatory="false">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- <param name="steeringWheelAngle" type="Boolean" mandatory="false">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- <!-- Ford Specific Data Items -->
- <param name="eCallInfo" type="Boolean" mandatory="false">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- <param name="airbagStatus" type="Boolean" mandatory="false">
- <description>The status of the air bags</description>
- </param>
- <param name="emergencyEvent" type="Boolean" mandatory="false">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- <param name="clusterModeStatus" type="Boolean" mandatory="false">
- <description>The status modes of the cluster</description>
- </param>
- <param name="myKey" type="Boolean" mandatory="false">
- <description>Information related to the MyKey feature</description>
- </param>
- <!-- / Ford Specific Data Items -->
- </function>
- <function name="UnsubscribeVehicleData" messagetype="response">
- <param name="gps" type="Common.VehicleDataResult" mandatory="false">
- <description>See GPSData</description>
- </param>
- <param name="speed" type="Common.VehicleDataResult" mandatory="false">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- <param name="rpm" type="Common.VehicleDataResult" mandatory="false">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- <param name="fuelLevel" type="Common.VehicleDataResult" mandatory="false">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- <param name="fuelLevel_State" type="Common.VehicleDataResult" mandatory="false">
- <description>The fuel level state</description>
- </param>
- <param name="instantFuelConsumption" type="Common.VehicleDataResult" mandatory="false">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- <param name="externalTemperature" type="Common.VehicleDataResult" mandatory="false">
- <description>The external temperature in degrees celsius</description>
- </param>
- <param name="prndl" type="Common.VehicleDataResult" mandatory="false">
- <description>See PRNDL</description>
- </param>
- <param name="tirePressure" type="Common.VehicleDataResult" mandatory="false">
- <description>See TireStatus</description>
- </param>
- <param name="odometer" type="Common.VehicleDataResult" mandatory="false">
- <description>Odometer in km</description>
- </param>
- <param name="beltStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>The status of the seat belts</description>
- </param>
- <param name="bodyInformation" type="Common.VehicleDataResult" mandatory="false">
- <description>The body information including power modes</description>
- </param>
- <param name="deviceStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>The device status including signal and battery strength</description>
- </param>
- <param name="driverBraking" type="Common.VehicleDataResult" mandatory="false">
- <description>The status of the brake pedal</description>
- </param>
- <param name="wiperStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>The status of the wipers</description>
- </param>
- <param name="headLampStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>Status of the head lamps</description>
- </param>
- <param name="engineTorque" type="Common.VehicleDataResult" mandatory="false">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- <param name="accPedalPosition" type="Common.VehicleDataResult" mandatory="false">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- <param name="steeringWheelAngle" type="Common.VehicleDataResult" mandatory="false">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- <!-- Ford Specific Data Items -->
- <param name="eCallInfo" type="Common.VehicleDataResult" mandatory="false">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- <param name="airbagStatus" type="Common.VehicleDataResult" mandatory="false">
- <description>The status of the air bags</description>
- </param>
- <param name="emergencyEvent" type="Common.VehicleDataResult" mandatory="false">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- <param name="clusterModes" type="Common.VehicleDataResult" mandatory="false">
- <description>The status modes of the cluster</description>
- </param>
- <param name="myKey" type="Common.VehicleDataResult" mandatory="false">
- <description>Information related to the MyKey feature</description>
- </param>
- <!-- / Ford Specific Data Items -->
- </function>
- <function name="GetVehicleData" messagetype="request">
- <description>Non periodic vehicle data read request.</description>
- <param name="gps" type="Boolean" mandatory="false">
- <description>See GPSData</description>
- </param>
- <param name="speed" type="Boolean" mandatory="false">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- <param name="rpm" type="Boolean" mandatory="false">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- <param name="fuelLevel" type="Boolean" mandatory="false">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- <param name="fuelLevel_State" type="Boolean" mandatory="false">
- <description>The fuel level state</description>
- </param>
- <param name="instantFuelConsumption" type="Boolean" mandatory="false">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- <param name="externalTemperature" type="Boolean" mandatory="false">
- <description>The external temperature in degrees celsius</description>
- </param>
- <param name="vin" type="Boolean" mandatory="false">
- <description>Vehicle identification number</description>
- </param>
- <param name="prndl" type="Boolean" mandatory="false">
- <description>See PRNDL</description>
- </param>
- <param name="tirePressure" type="Boolean" mandatory="false">
- <description>See TireStatus</description>
- </param>
- <param name="odometer" type="Boolean" mandatory="false">
- <description>Odometer in km</description>
- </param>
- <param name="beltStatus" type="Boolean" mandatory="false">
- <description>The status of the seat belts</description>
- </param>
- <param name="bodyInformation" type="Boolean" mandatory="false">
- <description>The body information including ignition status and internal temp</description>
- </param>
- <param name="deviceStatus" type="Boolean" mandatory="false">
- <description>The device status including signal and battery strength</description>
- </param>
- <param name="driverBraking" type="Boolean" mandatory="false">
- <description>The status of the brake pedal</description>
- </param>
- <param name="wiperStatus" type="Boolean" mandatory="false">
- <description>The status of the wipers</description>
- </param>
- <param name="headLampStatus" type="Boolean" mandatory="false">
- <description>Status of the head lamps</description>
- </param>
- <param name="engineTorque" type="Boolean" mandatory="false">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- <param name="accPedalPosition" type="Boolean" mandatory="false">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- <param name="steeringWheelAngle" type="Boolean" mandatory="false">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- <param name="eCallInfo" type="Boolean" mandatory="false">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- <param name="airbagStatus" type="Boolean" mandatory="false">
- <description>The status of the air bags</description>
- </param>
- <param name="emergencyEvent" type="Boolean" mandatory="false">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- <param name="clusterModeStatus" type="Boolean" mandatory="false">
- <description>The status modes of the cluster</description>
- </param>
- <param name="myKey" type="Boolean" mandatory="false">
- <description>Information related to the MyKey feature</description>
- </param>
- </function>
- <function name="GetVehicleData" messagetype="response">
- <param name="gps" type="Common.GPSData" mandatory="false">
- <description>See GPSData</description>
- </param>
- <param name="speed" type="Float" minvalue="0" maxvalue="700" mandatory="false">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- <param name="rpm" type="Integer" minvalue="0" maxvalue="20000" mandatory="false">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- <param name="fuelLevel" type="Float" minvalue="-6" maxvalue="106" mandatory="false">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- <param name="fuelLevel_State" type="Common.ComponentVolumeStatus" mandatory="false">
- <description>The fuel level state</description>
- </param>
- <param name="instantFuelConsumption" type="Float" minvalue="0" maxvalue="25575" mandatory="false">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- <param name="externalTemperature" type="Float" minvalue="-40" maxvalue="100" mandatory="false">
- <description>The external temperature in degrees celsius</description>
- </param>
- <param name="vin" type="String" maxlength="17" mandatory="false">
- <description>Vehicle identification number</description>
- </param>
- <param name="prndl" type="Common.PRNDL" mandatory="false">
- <description>See PRNDL</description>
- </param>
- <param name="tirePressure" type="Common.TireStatus" mandatory="false">
- <description>See TireStatus</description>
- </param>
- <param name="odometer" type="Integer" minvalue="0" maxvalue="17000000" mandatory="false">
- <description>Odometer in km</description>
- </param>
- <param name="beltStatus" type="Common.BeltStatus" mandatory="false">
- <description>The status of the seat belts</description>
- </param>
- <param name="bodyInformation" type="Common.BodyInformation" mandatory="false">
- <description>The body information including power modes</description>
- </param>
- <param name="deviceStatus" type="Common.DeviceStatus" mandatory="false">
- <description>The device status including signal and battery strength</description>
- </param>
- <param name="driverBraking" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>The status of the brake pedal</description>
- </param>
- <param name="wiperStatus" type="Common.WiperStatus" mandatory="false">
- <description>The status of the wipers</description>
- </param>
- <param name="headLampStatus" type="Common.HeadLampStatus" mandatory="false">
- <description>Status of the head lamps</description>
- </param>
- <param name="engineTorque" type="Float" minvalue="-1000" maxvalue="2000" mandatory="false">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- <param name="accPedalPosition" type="Float" minvalue="0" maxvalue="100" mandatory="false">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- <param name="steeringWheelAngle" type="Float" minvalue="-2000" maxvalue="2000" mandatory="false">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- <param name="eCallInfo" type="Common.ECallInfo" mandatory="false">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- <param name="airbagStatus" type="Common.AirbagStatus" mandatory="false">
- <description>The status of the air bags</description>
- </param>
- <param name="emergencyEvent" type="Common.EmergencyEvent" mandatory="false">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- <param name="clusterModeStatus" type="Common.ClusterModeStatus" mandatory="false">
- <description>The status modes of the cluster</description>
- </param>
- <param name="myKey" type="Common.MyKey" mandatory="false">
- <description>Information related to the MyKey feature</description>
- </param>
- </function>
- <function name="OnVehicleData" messagetype="notification">
- <description>Callback for the periodic and non periodic vehicle data read function.</description>
- <param name="gps" type="Common.GPSData" mandatory="false">
- <description>See GPSData</description>
- </param>
- <param name="speed" type="Float" minvalue="0" maxvalue="700" mandatory="false">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- <param name="rpm" type="Integer" minvalue="0" maxvalue="20000" mandatory="false">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- <param name="fuelLevel" type="Float" minvalue="-6" maxvalue="106" mandatory="false">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- <param name="fuelLevel_State" type="Common.ComponentVolumeStatus" mandatory="false">
- <description>The fuel level state</description>
- </param>
- <param name="instantFuelConsumption" type="Float" minvalue="0" maxvalue="25575" mandatory="false">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- <param name="externalTemperature" type="Float" minvalue="-40" maxvalue="100" mandatory="false">
- <description>The external temperature in degrees celsius</description>
- </param>
- <param name="vin" type="String" maxlength="17" mandatory="false">
- <description>Vehicle identification number.</description>
- </param>
- <param name="prndl" type="Common.PRNDL" mandatory="false">
- <description>See PRNDL</description>
- </param>
- <param name="tirePressure" type="Common.TireStatus" mandatory="false">
- <description>See TireStatus</description>
- </param>
- <param name="odometer" type="Integer" minvalue="0" maxvalue="17000000" mandatory="false">
- <description>Odometer in km</description>
- </param>
- <param name="beltStatus" type="Common.BeltStatus" mandatory="false">
- <description>The status of the seat belts</description>
- </param>
- <param name="bodyInformation" type="Common.BodyInformation" mandatory="false">
- <description>The body information including power modes</description>
- </param>
- <param name="deviceStatus" type="Common.DeviceStatus" mandatory="false">
- <description>The device status including signal and battery strength</description>
- </param>
- <param name="driverBraking" type="Common.VehicleDataEventStatus" mandatory="false">
- <description>The status of the brake pedal</description>
- </param>
- <param name="wiperStatus" type="Common.WiperStatus" mandatory="false">
- <description>The status of the wipers</description>
- </param>
- <param name="headLampStatus" type="Common.HeadLampStatus" mandatory="false">
- <description>Status of the head lamps</description>
- </param>
- <param name="engineTorque" type="Float" minvalue="-1000" maxvalue="2000" mandatory="false">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- <param name="accPedalPosition" type="Float" minvalue="0" maxvalue="100" mandatory="false">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- <param name="steeringWheelAngle" type="Float" minvalue="-2000" maxvalue="2000" mandatory="false">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- <param name="eCallInfo" type="Common.ECallInfo" mandatory="false">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- <param name="airbagStatus" type="Common.AirbagStatus" mandatory="false">
- <description>The status of the air bags</description>
- </param>
- <param name="emergencyEvent" type="Common.EmergencyEvent" mandatory="false">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- <param name="clusterModeStatus" type="Common.ClusterModeStatus" mandatory="false">
- <description>The status modes of the cluster</description>
- </param>
- <param name="myKey" type="Common.MyKey" mandatory="false">
- <description>Information related to the MyKey feature</description>
- </param>
- </function>
- <!--Qt HMI version of GetVehicleData-->
- <function name="GetGpsData" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetGpsData" messagetype="response">
- <param name="gps" type="Common.GPSData" mandatory="true">
- <description>See GPSData</description>
- </param>
- </function>
- <function name="GetSpeed" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetSpeed" messagetype="response">
- <param name="speed" type="Float" minvalue="0" maxvalue="700" mandatory="true">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- </function>
- <function name="GetRpm" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetRpm" messagetype="response">
- <param name="rpm" type="Integer" minvalue="0" maxvalue="20000" mandatory="true">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- </function>
- <function name="GetFuelLevel" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetFuelLevel" messagetype="response">
- <param name="fuelLevel" type="Float" minvalue="-6" maxvalue="106" mandatory="true">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- </function>
- <function name="GetFuelLevelState" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetFuelLevelState" messagetype="response">
- <param name="fuelLevel_State" type="Common.ComponentVolumeStatus" mandatory="true">
- <description>The fuel level state</description>
- </param>
- </function>
- <function name="GetInstantFuelConsumption" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetInstantFuelConsumption" messagetype="response">
- <param name="instantFuelConsumption" type="Float" minvalue="0" maxvalue="25575" mandatory="true">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- </function>
- <function name="GetExternalTemperature" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetExternalTemperature" messagetype="response">
- <param name="externalTemperature" type="Float" minvalue="-40" maxvalue="100" mandatory="true">
- <description>The external temperature in degrees celsius</description>
- </param>
- </function>
- <function name="GetVin" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetVin" messagetype="response">
- <param name="vin" type="String" maxlength="17" mandatory="true">
- <description>Vehicle identification number</description>
- </param>
- </function>
- <function name="GetPrndl" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetPrndl" messagetype="response">
- <param name="prndl" type="Common.PRNDL" mandatory="true">
- <description>See PRNDL</description>
- </param>
- </function>
- <function name="GetTirePressure" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetTirePressure" messagetype="response">
- <param name="tirePressure" type="Common.TireStatus" mandatory="true">
- <description>See TireStatus</description>
- </param>
- </function>
- <function name="GetOdometer" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetOdometer" messagetype="response">
- <param name="odometer" type="Integer" minvalue="0" maxvalue="17000000" mandatory="true">
- <description>Odometer in km</description>
- </param>
- </function>
- <function name="GetBeltStatus" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetBeltStatus" messagetype="response">
- <param name="beltStatus" type="Common.BeltStatus" mandatory="true">
- <description>The status of the seat belts</description>
- </param>
- </function>
- <function name="GetBodyInformation" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetBodyInformation" messagetype="response">
- <param name="bodyInformation" type="Common.BodyInformation" mandatory="true">
- <description>The body information including power modes</description>
- </param>
- </function>
- <function name="GetDeviceStatus" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetDeviceStatus" messagetype="response">
- <param name="deviceStatus" type="Common.DeviceStatus" mandatory="true">
- <description>The device status including signal and battery strength</description>
- </param>
- </function>
- <function name="GetDriverBraking" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetDriverBraking" messagetype="response">
- <param name="driverBraking" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>The status of the brake pedal</description>
- </param>
- </function>
- <function name="GetWiperStatus" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetWiperStatus" messagetype="response">
- <param name="wiperStatus" type="Common.WiperStatus" mandatory="true">
- <description>The status of the wipers</description>
- </param>
- </function>
- <function name="GetHeadLampStatus" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetHeadLampStatus" messagetype="response">
- <param name="headLampStatus" type="Common.HeadLampStatus" mandatory="true">
- <description>Status of the head lamps</description>
- </param>
- </function>
- <function name="GetEngineTorque" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetEngineTorque" messagetype="response">
- <param name="engineTorque" type="Float" minvalue="-1000" maxvalue="2000" mandatory="true">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- </function>
- <function name="GetAccPedalPosition" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetAccPedalPosition" messagetype="response">
- <param name="accPedalPosition" type="Float" minvalue="0" maxvalue="100" mandatory="true">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- </function>
- <function name="GetSteeringWheelAngle" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetSteeringWheelAngle" messagetype="response">
- <param name="steeringWheelAngle" type="Float" minvalue="-2000" maxvalue="2000" mandatory="true">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- </function>
- <function name="GetECallInfo" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetECallInfo" messagetype="response">
- <param name="eCallInfo" type="Common.ECallInfo" mandatory="true">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- </function>
- <function name="GetAirbagStatus" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetAirbagStatus" messagetype="response">
- <param name="airbagStatus" type="Common.AirbagStatus" mandatory="true">
- <description>The status of the air bags</description>
- </param>
- </function>
- <function name="GetEmergencyEvent" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetEmergencyEvent" messagetype="response">
- <param name="emergencyEvent" type="Common.EmergencyEvent" mandatory="true">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- </function>
- <function name="GetClusterModeStatus" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetClusterModeStatus" messagetype="response">
- <param name="clusterModeStatus" type="Common.ClusterModeStatus" mandatory="true">
- <description>The status modes of the cluster</description>
- </param>
- </function>
- <function name="GetMyKey" messagetype="request" provider="hmi">
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of application requested this RPC.</description>
- </param>
- </function>
- <function name="GetMyKey" messagetype="response">
- <param name="myKey" type="Common.MyKey" mandatory="true">
- <description>Information related to the MyKey feature</description>
- </param>
- </function>
- <!--end Qt HMI version of GetVehicleData-->
- <!--Qt HMI version of OnVehicleData-->
- <function name="OnGpsData" messagetype="notification" provider="hmi">
- <param name="gps" type="Common.GPSData" mandatory="true">
- <description>See GPSData</description>
- </param>
- </function>
- <function name="OnSpeed" messagetype="notification" provider="hmi">
- <param name="speed" type="Float" minvalue="0" maxvalue="700" mandatory="true">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- </function>
- <function name="OnRpm" messagetype="notification" provider="hmi">
- <param name="rpm" type="Integer" minvalue="0" maxvalue="20000" mandatory="true">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- </function>
- <function name="OnFuelLevel" messagetype="notification" provider="hmi">
- <param name="fuelLevel" type="Float" minvalue="-6" maxvalue="106" mandatory="true">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- </function>
- <function name="OnFuelLevelState" messagetype="notification" provider="hmi">
- <param name="fuelLevel_State" type="Common.ComponentVolumeStatus" mandatory="true">
- <description>The fuel level state</description>
- </param>
- </function>
- <function name="OnInstantFuelConsumption" messagetype="notification" provider="hmi">
- <param name="instantFuelConsumption" type="Float" minvalue="0" maxvalue="25575" mandatory="true">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- </function>
- <function name="OnExternalTemperature" messagetype="notification" provider="hmi">
- <param name="externalTemperature" type="Float" minvalue="-40" maxvalue="100" mandatory="true">
- <description>The external temperature in degrees celsius</description>
- </param>
- </function>
- <function name="OnVin" messagetype="notification" provider="hmi">
- <param name="vin" type="String" maxlength="17" mandatory="true">
- <description>Vehicle identification number.</description>
- </param>
- </function>
- <function name="OnPrndl" messagetype="notification" provider="hmi">
- <param name="prndl" type="Common.PRNDL" mandatory="true">
- <description>See PRNDL</description>
- </param>
- </function>
- <function name="OnTirePressure" messagetype="notification" provider="hmi">
- <param name="tirePressure" type="Common.TireStatus" mandatory="true">
- <description>See TireStatus</description>
- </param>
- </function>
- <function name="OnOdometer" messagetype="notification" provider="hmi">
- <param name="odometer" type="Integer" minvalue="0" maxvalue="17000000" mandatory="true">
- <description>Odometer in km</description>
- </param>
- </function>
- <function name="OnBeltStatus" messagetype="notification" provider="hmi">
- <param name="beltStatus" type="Common.BeltStatus" mandatory="true">
- <description>The status of the seat belts</description>
- </param>
- </function>
- <function name="OnBodyInformation" messagetype="notification" provider="hmi">
- <param name="bodyInformation" type="Common.BodyInformation" mandatory="true">
- <description>The body information including power modes</description>
- </param>
- </function>
- <function name="OnDeviceStatus" messagetype="notification" provider="hmi">
- <param name="deviceStatus" type="Common.DeviceStatus" mandatory="true">
- <description>The device status including signal and battery strength</description>
- </param>
- </function>
- <function name="OnDriverBraking" messagetype="notification" provider="hmi">
- <param name="driverBraking" type="Common.VehicleDataEventStatus" mandatory="true">
- <description>The status of the brake pedal</description>
- </param>
- </function>
- <function name="OnWiperStatus" messagetype="notification" provider="hmi">
- <param name="wiperStatus" type="Common.WiperStatus" mandatory="true">
- <description>The status of the wipers</description>
- </param>
- </function>
- <function name="OnHeadLampStatus" messagetype="notification" provider="hmi">
- <param name="headLampStatus" type="Common.HeadLampStatus" mandatory="true">
- <description>Status of the head lamps</description>
- </param>
- </function>
- <function name="OnEngineTorque" messagetype="notification" provider="hmi">
- <param name="engineTorque" type="Float" minvalue="-1000" maxvalue="2000" mandatory="true">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- </function>
- <function name="OnAccPedalPosition" messagetype="notification" provider="hmi">
- <param name="accPedalPosition" type="Float" minvalue="0" maxvalue="100" mandatory="true">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- </function>
- <function name="OnSteeringWheelAngle" messagetype="notification" provider="hmi">
- <param name="steeringWheelAngle" type="Float" minvalue="-2000" maxvalue="2000" mandatory="true">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- </function>
- <function name="OnECallInfo" messagetype="notification" provider="hmi">
- <param name="eCallInfo" type="Common.ECallInfo" mandatory="true">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- </function>
- <function name="OnAirbagStatus" messagetype="notification" provider="hmi">
- <param name="airbagStatus" type="Common.AirbagStatus" mandatory="true">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- </function>
- <function name="OnEmergencyEvent" messagetype="notification" provider="hmi">
- <param name="emergencyEvent" type="Common.EmergencyEvent" mandatory="true">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- </function>
- <function name="OnClusterModeStatus" messagetype="notification" provider="hmi">
- <param name="clusterModeStatus" type="Common.ClusterModeStatus" mandatory="true">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- </function>
- <function name="OnMyKey" messagetype="notification" provider="hmi">
- <param name="myKey" type="Common.MyKey" mandatory="true">
- <description>Information related to the MyKey feature</description>
- </param>
- </function>
- <!--end Qt HMI version of OnVehicleData-->
- <!--Qt HMI version of SubscribeVehicleData/UnsubscribeVehicleData-->
- <function name="SubscribeGps" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeGps" messagetype="response">
- <param name="gps" type="Common.VehicleDataResult" mandatory="true">
- <description>See GPSData</description>
- </param>
- </function>
- <function name="UnsubscribeGps" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeGps" messagetype="response">
- <param name="gps" type="Common.VehicleDataResult" mandatory="true">
- <description>See GPSData</description>
- </param>
- </function>
- <function name="SubscribeSpeed" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeSpeed" messagetype="response">
- <param name="speed" type="Common.VehicleDataResult" mandatory="true">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- </function>
- <function name="UnsubscribeSpeed" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeSpeed" messagetype="response">
- <param name="speed" type="Common.VehicleDataResult" mandatory="true">
- <description>The vehicle speed in kilometers per hour</description>
- </param>
- </function>
- <function name="SubscribeRpm" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeRpm" messagetype="response">
- <param name="rpm" type="Common.VehicleDataResult" mandatory="true">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- </function>
- <function name="UnsubscribeRpm" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeRpm" messagetype="response">
- <param name="rpm" type="Common.VehicleDataResult" mandatory="true">
- <description>The number of revolutions per minute of the engine</description>
- </param>
- </function>
- <function name="SubscribeFuelLevel" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeFuelLevel" messagetype="response">
- <param name="fuelLevel" type="Common.VehicleDataResult" mandatory="true">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- </function>
- <function name="UnsubscribeFuelLevel" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeFuelLevel" messagetype="response">
- <param name="fuelLevel" type="Common.VehicleDataResult" mandatory="true">
- <description>The fuel level in the tank (percentage)</description>
- </param>
- </function>
- <function name="SubscribeFuelLevel_State" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeFuelLevel_State" messagetype="response">
- <param name="fuelLevel_State" type="Common.VehicleDataResult" mandatory="true">
- <description>The fuel level state</description>
- </param>
- </function>
- <function name="UnsubscribeFuelLevel_State" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeFuelLevel_State" messagetype="response">
- <param name="fuelLevel_State" type="Common.VehicleDataResult" mandatory="true">
- <description>The fuel level state</description>
- </param>
- </function>
- <function name="SubscribeInstantFuelConsumption" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeInstantFuelConsumption" messagetype="response">
- <param name="instantFuelConsumption" type="Common.VehicleDataResult" mandatory="true">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- </function>
- <function name="UnsubscribeInstantFuelConsumption" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeInstantFuelConsumption" messagetype="response">
- <param name="instantFuelConsumption" type="Common.VehicleDataResult" mandatory="true">
- <description>The instantaneous fuel consumption in microlitres</description>
- </param>
- </function>
- <function name="SubscribeExternalTemperature" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeExternalTemperature" messagetype="response">
- <param name="externalTemperature" type="Common.VehicleDataResult" mandatory="true">
- <description>The external temperature in degrees celsius</description>
- </param>
- </function>
- <function name="UnsubscribeExternalTemperature" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeExternalTemperature" messagetype="response">
- <param name="externalTemperature" type="Common.VehicleDataResult" mandatory="true">
- <description>The external temperature in degrees celsius</description>
- </param>
- </function>
- <function name="SubscribePrndl" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribePrndl" messagetype="response">
- <param name="prndl" type="Common.VehicleDataResult" mandatory="true">
- <description>See PRNDL</description>
- </param>
- </function>
- <function name="UnsubscribePrndl" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribePrndl" messagetype="response">
- <param name="prndl" type="Common.VehicleDataResult" mandatory="true">
- <description>See PRNDL</description>
- </param>
- </function>
- <function name="SubscribeVin" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeVin" messagetype="response">
- <param name="vin" type="String" maxlength="17" mandatory="true">
- <description>Vehicle identification number</description>
- </param>
- </function>
- <function name="UnsubscribeVin" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeVin" messagetype="response">
- <param name="vin" type="String" maxlength="17" mandatory="true">
- <description>Vehicle identification number</description>
- </param>
- </function>
- <function name="SubscribeTirePressure" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeTirePressure" messagetype="response">
- <param name="tirePressure" type="Common.VehicleDataResult" mandatory="true">
- <description>See TireStatus</description>
- </param>
- </function>
- <function name="UnsubscribeTirePressure" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeTirePressure" messagetype="response">
- <param name="tirePressure" type="Common.VehicleDataResult" mandatory="true">
- <description>See TireStatus</description>
- </param>
- </function>
- <function name="SubscribeOdometer" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeOdometer" messagetype="response">
- <param name="odometer" type="Common.VehicleDataResult" mandatory="true">
- <description>Odometer in km</description>
- </param>
- </function>
- <function name="UnsubscribeOdometer" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeOdometer" messagetype="response">
- <param name="odometer" type="Common.VehicleDataResult" mandatory="true">
- <description>Odometer in km</description>
- </param>
- </function>
- <function name="SubscribeBeltStatus" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeBeltStatus" messagetype="response">
- <param name="beltStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The status of the seat belts</description>
- </param>
- </function>
- <function name="UnsubscribeBeltStatus" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeBeltStatus" messagetype="response">
- <param name="beltStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The status of the seat belts</description>
- </param>
- </function>
- <function name="SubscribeBodyInformation" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeBodyInformation" messagetype="response">
- <param name="bodyInformation" type="Common.VehicleDataResult" mandatory="true">
- <description>The body information including power modes</description>
- </param>
- </function>
- <function name="UnsubscribeBodyInformation" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeBodyInformation" messagetype="response">
- <param name="bodyInformation" type="Common.VehicleDataResult" mandatory="true">
- <description>The body information including power modes</description>
- </param>
- </function>
- <function name="SubscribeDeviceStatus" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeDeviceStatus" messagetype="response">
- <param name="deviceStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The device status including signal and battery strength</description>
- </param>
- </function>
- <function name="UnsubscribeDeviceStatus" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeDeviceStatus" messagetype="response">
- <param name="deviceStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The device status including signal and battery strength</description>
- </param>
- </function>
- <function name="SubscribeDriverBraking" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeDriverBraking" messagetype="response">
- <param name="driverBraking" type="Common.VehicleDataResult" mandatory="true">
- <description>The status of the brake pedal</description>
- </param>
- </function>
- <function name="UnsubscribeDriverBraking" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeDriverBraking" messagetype="response">
- <param name="driverBraking" type="Common.VehicleDataResult" mandatory="true">
- <description>The status of the brake pedal</description>
- </param>
- </function>
- <function name="SubscribeWiperStatus" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeWiperStatus" messagetype="response">
- <param name="wiperStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The status of the wipers</description>
- </param>
- </function>
- <function name="UnsubscribeWiperStatus" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeWiperStatus" messagetype="response">
- <param name="wiperStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The status of the wipers</description>
- </param>
- </function>
- <function name="SubscribeHeadLampStatus" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeHeadLampStatus" messagetype="response">
- <param name="headLampStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>Status of the head lamps</description>
- </param>
- </function>
- <function name="UnsubscribeHeadLampStatus" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeHeadLampStatus" messagetype="response">
- <param name="headLampStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>Status of the head lamps</description>
- </param>
- </function>
- <function name="SubscribeEngineTorque" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeEngineTorque" messagetype="response">
- <param name="engineTorque" type="Common.VehicleDataResult" mandatory="true">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- </function>
- <function name="UnsubscribeEngineTorque" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeEngineTorque" messagetype="response">
- <param name="engineTorque" type="Common.VehicleDataResult" mandatory="true">
- <description>Torque value for engine (in Nm) on non-diesel variants</description>
- </param>
- </function>
- <function name="SubscribeAccPedalPosition" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeAccPedalPosition" messagetype="response">
- <param name="accPedalPosition" type="Common.VehicleDataResult" mandatory="true">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- </function>
- <function name="UnsubscribeAccPedalPosition" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeAccPedalPosition" messagetype="response">
- <param name="accPedalPosition" type="Common.VehicleDataResult" mandatory="true">
- <description>Accelerator pedal position (percentage depressed)</description>
- </param>
- </function>
- <function name="SubscribeSteeringWheelAngle" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeSteeringWheelAngle" messagetype="response">
- <param name="steeringWheelAngle" type="Common.VehicleDataResult" mandatory="true">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- </function>
- <function name="UnsubscribeSteeringWheelAngle" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeSteeringWheelAngle" messagetype="response">
- <param name="steeringWheelAngle" type="Common.VehicleDataResult" mandatory="true">
- <description>Current angle of the steering wheel (in deg)</description>
- </param>
- </function>
- <function name="SubscribeECallInfo" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeECallInfo" messagetype="response">
- <param name="eCallInfo" type="Common.VehicleDataResult" mandatory="true">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- </function>
- <function name="UnsubscribeECallInfo" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeECallInfo" messagetype="response">
- <param name="eCallInfo" type="Common.VehicleDataResult" mandatory="true">
- <description>Emergency Call notification and confirmation data</description>
- </param>
- </function>
- <function name="SubscribeAirbagStatus" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeAirbagStatus" messagetype="response">
- <param name="airbagStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The status of the air bags</description>
- </param>
- </function>
- <function name="UnsubscribeAirbagStatus" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeAirbagStatus" messagetype="response">
- <param name="airbagStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The status of the air bags</description>
- </param>
- </function>
- <function name="SubscribeEmergencyEvent" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeEmergencyEvent" messagetype="response">
- <param name="emergencyEvent" type="Common.VehicleDataResult" mandatory="true">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- </function>
- <function name="UnsubscribeEmergencyEvent" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeEmergencyEvent" messagetype="response">
- <param name="emergencyEvent" type="Common.VehicleDataResult" mandatory="true">
- <description>Information related to an emergency event (and if it occurred)</description>
- </param>
- </function>
- <function name="SubscribeClusterModeStatus" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeClusterModeStatus" messagetype="response">
- <param name="clusterModeStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The status modes of the cluster</description>
- </param>
- </function>
- <function name="UnsubscribeClusterModeStatus" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeClusterModeStatus" messagetype="response">
- <param name="clusterModeStatus" type="Common.VehicleDataResult" mandatory="true">
- <description>The status modes of the cluster</description>
- </param>
- </function>
- <function name="SubscribeMyKey" messagetype="request" provider="hmi">
- </function>
- <function name="SubscribeMyKey" messagetype="response">
- <param name="myKey" type="Common.VehicleDataResult" mandatory="true">
- <description>Information related to the MyKey feature</description>
- </param>
- </function>
- <function name="UnsubscribeMyKey" messagetype="request" provider="hmi">
- </function>
- <function name="UnsubscribeMyKey" messagetype="response">
- <param name="myKey" type="Common.VehicleDataResult" mandatory="true">
- <description>Information related to the MyKey feature</description>
- </param>
- </function>
- <!--end Qt HMI version of SubscribeVehicleData/UnsubscribeVehicleData-->
- </interface>
- <!-- Policies -->
- <interface name="SDL" version="1.0" date="2014-03-12">
- <function name="ActivateApp" messagetype="request" provider="sdl">
- <param name="appID" type="Integer" mandatory="true">
- </param>
- </function>
- <function name="ActivateApp" messagetype="response">
- <param name="isSDLAllowed" type="Boolean" mandatory="true" scope="internal"/>
- <param name="device" type="Common.DeviceInfo" mandatory="false" scope="internal">
- <description>If isSDLAllowed is false, consent for sending PT through specified device is required.</description>
- </param>
- <param name="isPermissionsConsentNeeded" type="Boolean" mandatory="true"/>
- <param name="isAppPermissionsRevoked" type="Boolean" mandatory="true"/>
- <param name="appRevokedPermissions" type="Common.PermissionItem" array="true" minsize="1" maxsize="100" mandatory="false">
- <description>If app permissions were reduced (isAppPermissionsRevoked == true), then this array specifies list of removed permissions. </description>
- </param>
- <param name="isAppRevoked" type="Boolean" mandatory="true"/>
- <param name="priority" type="Common.AppPriority" mandatory="false">
- <description>Send to HMI so that it can coordinate order of requests/notifications correspondingly.</description>
- </param>
- </function>
- <function name="GetUserFriendlyMessage" messagetype="request" scope="internal" provider="sdl">
- <description>Request from HMI to SDL to get user friendly messages for UI/TTS info boxes/texts (i.e. for help/dialogs etc) from Policy Table.</description>
- <param name="messageCodes" type="String" array="true" minsize="1" maxsize="100" maxlength="500" mandatory="true">
- <description>Id of message to be received according to Policy Table i.e. StatusNeeded, Notifications, DrivingCharacteristics etc.</description>
- </param>
- <param name="language" type="Common.Language" mandatory="false">
- <description>Optional parameter if HMI wants message in some other language then its current one already known to SDL.</description>
- </param>
- </function>
- <function name="GetUserFriendlyMessage" messagetype="response">
- <param name="messages" type="Common.UserFriendlyMessage" array="true" minsize="1" maxsize="100" mandatory="false">
- <description>If no message was found in PT for specified message code and for HMI current or specified language, this parameter will be omitted.</description>
- </param>
- </function>
- <function name="OnAllowSDLFunctionality" messagetype="notification" provider="hmi">
- <description>Initiated by HMI. Notifies about user/HMI allowing SDL functionality or disallowing access to all mobile apps. Needed if HMI has additional ways of asking user about this (i.e. Settings etc)</description>
- <param name="device" type="Common.DeviceInfo" mandatory="false">
- <description>If no device is specified permission counts for SDL functionality in general.</description>
- </param>
- <param name="allowed" type="Boolean" mandatory="true">
- <description>Must be true if allowed</description>
- </param>
- <param name="source" type="Common.ConsentSource" mandatory="true"/>
- </function>
- <!-- SyncP RPC-->
- <function name="OnReceivedPolicyUpdate" messagetype="notification" provider="hmi">
- <description>
- From: SYNCP Manager
- To: SDL
- Notification sent to SDL when SYNCP Manager receives and decrypts updated policy table
- </description>
- <param name="policyfile" type="String" minlength="1" maxlength="255" mandatory="true">
- <description>Location of decrypted policy table Json file on target</description>
- </param>
- </function>
- <function name="OnPolicyUpdate" messagetype="notification" provider="hmi">
- <description>
- From: SYNCP Manager
- To: SDL
- Notifies SDL to supply a new "PolicyUpdate" request with more recent snapshot data
- </description>
- </function>
- <!-- End of SyncP RPC-->
- <function name="GetListOfPermissions" messagetype="request" provider="sdl">
- <description>Request from HMI to SDL to get list of permissions for app. If no app specified - list of permissions for all apps.</description>
- <param name="appID" type="Integer" mandatory="false"/>
- </function>
- <function name="GetListOfPermissions" messagetype="response">
- <param name="allowedFunctions" type="Common.PermissionItem" mandatory="true" array="true" minsize="0" maxsize="100">
- <description>If no permissions were specified for application the array will come empty.</description>
- </param>
- </function>
- <function name="OnAppPermissionConsent" messagetype="notification" provider="hmi">
- <description>Initiated by HMI for specifying the allowance for the application to perform some functionality. Duplicates functionality of the request, needed if HMI has specific ways to allow/disallow functionality (i.e.Setting Menu)</description>
- <param name="appID" type="Integer" mandatory="false">
- <description>Information about the application. See HMIApplication. If omitted - allow/disallow all applications </description>
- </param>
- <param name="consentedFunctions" type="Common.PermissionItem" mandatory="true" array="true" minsize="1" maxsize="100">
- </param>
- <param name="source" type="Common.ConsentSource" mandatory="true"/>
- </function>
- <function name="OnAppPermissionChanged" messagetype="notification" provider="sdl">
- <description>Notification from SDL to HMI. Occurs when app permissions were reduced. If no permission specified means that app was dissallowed and has to be unregitstered.</description>
- <param name="appID" type="Integer" mandatory="true"/>
- <param name="isAppPermissionsRevoked" type="Boolean" mandatory="false"/>
- <param name="appRevokedPermissions" type="Common.PermissionItem" array="true" minsize="1" maxsize="100" mandatory="false">
- <description>If app permissions were reduced (isAppPermissionsRevoked == true), then this array specifies list of removed permissions. </description>
- </param>
- <param name="appRevoked" type="Boolean" mandatory="false">
- <description>If present then specified application was prohibited to used with Sync.</description>
- </param>
- <param name="appPermissionsConsentNeeded" type="Boolean" mandatory="false">
- <description>If present specifies that permissions were added to application that require User Consent, then HMI can send GetListOfPermissions request to obtain list of permissions.</description>
- </param>
- <param name="appUnauthorized" type="Boolean" mandatory="false">
- <description>When present and set to true (should be if present) then this means that application was not authorized (nickname check failed.)</description>
- </param>
- <param name="priority" type="Common.AppPriority" mandatory="false">
- <description>Send to HMI so that it can coordinate order of requests/notifications correspondingly.</description>
- </param>
- <param name="requestType" type="Common.RequestType" minsize="0" maxsize="100" array="true" mandatory="false">
- <description>The list of SystemRequest's RequestTypes allowed by policies for the named application (the app's SystemRequest sent with RequestType out of this list will get 'disallowed' response from SDL).
- If SDL sends an empty array - any RequestType is allowed for this app.
- If SDL omits this parameter - nothing is changed for RequestType in the policies
- </description>
- </param>
- </function>
- <function name="OnSDLConsentNeeded" messagetype="notification" provider="sdl">
- <description>Send from SDL to HMI to notify that data consent is needed for device either because PT update or Retry strategy.</description>
- <param name="device" type="Common.DeviceInfo" mandatory="true"/>
- </function>
- <function name="UpdateSDL" messagetype="request" provider="sdl">
- <description>Request from HMI to SDL to start update of Policy Table.</description>
- </function>
- <function name="UpdateSDL" messagetype="response">
- <description>Specify result: no update needed, update was successful/unsuccessful etc</description>
- <param name="result" type="Common.UpdateResult" mandatory="true"/>
- </function>
- <function name="GetStatusUpdate" messagetype="request" provider="sdl">
- <description>Request from HMI to SDL to find out current status of PT exchange process.</description>
- </function>
- <function name="GetStatusUpdate" messagetype="response">
- <param name="status" type="Common.UpdateResult" mandatory="true"/>
- </function>
- <function name="OnStatusUpdate" messagetype="notification" provider="sdl">
- <description>Notification from SDL to HMI when current status of PT exchange changed (i.e. it Succeded or Failed etc)</description>
- <param name="status" type="Common.UpdateResult" mandatory="true"/>
- </function>
- <function name="OnSystemError" messagetype="notification" provider="hmi">
- <param name="error" type="Common.SystemError" mandatory="true"/>
- </function>
- <function name="AddStatisticsInfo" messagetype="notification" provider="hmi">
- <description>Sent by system to record statiscs and error counts. Increases statistics specified by statisticType by one.</description>
- <param name="statisticType" type="Common.StatisticsType" mandatory="true"/>
- </function>
- <function name="GetURLS" messagetype="request" scope="internal" provider="sdl">
- <description>Sent by system to SDL to get list of URL for specified service type and optionally policy's application id.</description>
- <param name="service" type="Integer" minvalue="0" maxvalue="100" mandatory="true"/>
- </function>
- <function name="GetURLS" messagetype="response" scope="internal">
- <param name="urls" type="Common.ServiceInfo" array="true" mandatory="false" minsize="1" maxsize="100"/>
- </function>
- <function name="OnDeviceStateChanged" messagetype="notification" scope="internal" provider="hmi">
- <param name="deviceState" type="Common.DeviceState" mandatory="true"/>
- <param name="deviceInternalId" type="String" mandatory="true" minlength="0" maxlength="500"/>
- <param name="deviceId" type="Common.DeviceInfo" mandatory="false"/>
- </function>
- </interface>
-<interface name="RC" version="1.1.0" date="2017-07-18">
- <function name="IsReady" messagetype="request">
- <description>Method is invoked at system startup. Response should provide information about presence of any of remote controllable module and its readiness to cooperate with SDL.</description>
- </function>
- <function name="IsReady" messagetype="response">
- <param name="available" type="Boolean" mandatory="true">
- <description>Must be true if vehicle RC modules are present and ready to communicate with SDL.</description>
- </param>
- </function>
-
- <function name="GetCapabilities" messagetype="request">
- <description>Method is invoked at system startup by SDL to request information about Remote Control capabilities of HMI.</description>
- </function>
- <function name="GetCapabilities" messagetype="response">
- <param name="remoteControlCapability" type="Common.RemoteControlCapabilities" mandatory="false">
- <description>See RemoteControlCapabilities, all available RC modules and buttons shall be returned.</description>
- </param>
- </function>
-
- <function name="SetInteriorVehicleData" functionID="SetInteriorVehicleDataID" messagetype="request">
- <param name="moduleData" type="Common.ModuleData" mandatory="true" >
- <description>The module type and data to set</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>Internal SDL-assigned ID of the related application</description>
- </param>
- </function>
-
- <function name="SetInteriorVehicleData" messagetype="response">
- <description>Used to set the values of one zone and one data type within that zone</description>
- <param name="moduleData" type="Common.ModuleData" mandatory="true" >
- </param>
- </function>
-
-<function name="GetInteriorVehicleData" messagetype="request">
- <param name="moduleType" type="Common.ModuleType" mandatory="true" >
- <description>The module data to retrieve from the vehicle for that type</description>
- </param>
- <param name="subscribe" type="Boolean" mandatory="false" defvalue="false">
- <description>If subscribe is true, the head unit will send onInteriorVehicleData notifications for the module type</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>Internal SDL-assigned ID of the related application</description>
- </param>
-</function>
-
-<function name="GetInteriorVehicleData" messagetype="response">
- <param name="moduleData" type="Common.ModuleData" mandatory="true" >
- </param>
- <param name="isSubscribed" type="Boolean" mandatory="false" >
- <description>Is a conditional-mandatory parameter: must be returned in case "subscribe" parameter was present in the related request.
- if "true" - the "moduleType" from request is successfully subscribed and the head unit will send onInteriorVehicleData notifications for the moduleDescription.
- if "false" - the "moduleType" from request is either unsubscribed or failed to subscribe.</description>
- </param>
-</function>
-
-<function name="GetInteriorVehicleDataConsent" messagetype="request">
- <description>Sender: SDL->HMI. </description>
- <description>HMI is expected to display a permission prompt to the driver showing the RC module and app details (for example, app's name).
- The driver is expected to have an ability to grant or deny the permission.</description>
- <param name="moduleType" type="Common.ModuleType" mandatory="true">
- <description>The module type that the app requests to control.</description>
- </param>
- <param name="appID" type="Integer" mandatory="true">
- <description>ID of the application that triggers the permission prompt.</description>
- </param>
- </function>
- <function name="GetInteriorVehicleDataConsent" messagetype="response">
- <param name="allowed" type="Boolean" mandatory="true">
- <description>"true" - if the driver grants the permission for controlling to the named app;
- "false" - in case the driver denies the permission for controlling to the named app.</description>
- </param>
-</function>
-
-<function name="OnInteriorVehicleData" messagetype="notification">
- <param name="moduleData" type="Common.ModuleData" mandatory="true" >
- </param>
-</function>
-
-<function name="OnRemoteControlSettings" messagetype="notification">
- <description>Sender: vehicle -> RSDL. Notification about remote-control settings changed. Sent after User`s choice through HMI.</description>
- <param name="allowed" type="Boolean" mandatory="false" >
- <description>If "true" - RC is allowed; if "false" - RC is disallowed.</description>
- </param>
- <param name="accessMode" type="Common.RCAccessMode" mandatory="false" >
- <description>The remote control access mode specified by the driver via HMI.</description>
- </param>
-</function>
-</interface>
-</interfaces> \ No newline at end of file
diff --git a/src/components/policy/policy_external/.gitignore b/src/components/policy/policy_external/.gitignore
index d67909069a..d6052d61da 100644
--- a/src/components/policy/policy_external/.gitignore
+++ b/src/components/policy/policy_external/.gitignore
@@ -29,8 +29,6 @@ src/appMain/hmi_link
src/appMain/smartDeviceLinkCore
test/components/application_manager/policies_manager/test_policies_table
test/components/application_manager/test_formatters_commands
-test/components/dbus/test_DBusAdapter
-test/components/dbus/test_DBusSchema
test/components/protocol_handler/test_ProtocolHandler
test/components/request_watchdog/test_RequestWatchdog
test/components/smart_objects/SchemaItem/test_SmartObject_AlwaysFalseSchemaItemTest
diff --git a/src/components/policy/policy_external/include/policy/policy_table/enums.h b/src/components/policy/policy_external/include/policy/policy_table/enums.h
index 2804166f17..d13c545a94 100644
--- a/src/components/policy/policy_external/include/policy/policy_table/enums.h
+++ b/src/components/policy/policy_external/include/policy/policy_table/enums.h
@@ -78,6 +78,7 @@ enum Parameter {
P_VIN,
P_ACCPEDALPOSITION,
P_BELTSTATUS,
+ P_ELECTRONICPARKBRAKESTATUS,
P_DRIVERBRAKING,
P_PRNDL,
P_RPM,
@@ -166,10 +167,7 @@ bool IsValidEnum(Input val);
const char* EnumToJsonString(Input val);
bool EnumFromJsonString(const std::string& literal, Input* result);
-enum ModuleType {
- MT_CLIMATE,
- MT_RADIO,
-};
+enum ModuleType { MT_CLIMATE, MT_RADIO, MT_SEAT };
bool IsValidEnum(ModuleType val);
const char* EnumToJsonString(ModuleType val);
bool EnumFromJsonString(const std::string& literal, ModuleType* result);
diff --git a/src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml b/src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml
index 401a5dcb9f..7979a0f2ba 100644
--- a/src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml
+++ b/src/components/policy/policy_external/include/policy/policy_table_interface_ext.xml
@@ -38,6 +38,7 @@
<element name="vin" />
<element name="accPedalPosition" />
<element name="beltStatus" />
+ <element name="electronicParkBrakeStatus" />
<element name="driverBraking" />
<element name="prndl" />
<element name="rpm" />
diff --git a/src/components/policy/policy_external/src/policy_table/enums.cc b/src/components/policy/policy_external/src/policy_table/enums.cc
index cb724e93b1..58bae43000 100644
--- a/src/components/policy/policy_external/src/policy_table/enums.cc
+++ b/src/components/policy/policy_external/src/policy_table/enums.cc
@@ -142,6 +142,8 @@ bool IsValidEnum(Parameter val) {
return true;
case P_BELTSTATUS:
return true;
+ case P_ELECTRONICPARKBRAKESTATUS:
+ return true;
case P_DRIVERBRAKING:
return true;
case P_PRNDL:
@@ -235,6 +237,8 @@ const char* EnumToJsonString(Parameter val) {
return "accPedalPosition";
case P_BELTSTATUS:
return "beltStatus";
+ case P_ELECTRONICPARKBRAKESTATUS:
+ return "electronicParkBrakeStatus";
case P_DRIVERBRAKING:
return "driverBraking";
case P_PRNDL:
@@ -343,6 +347,9 @@ bool EnumFromJsonString(const std::string& literal, Parameter* result) {
} else if ("beltStatus" == literal) {
*result = P_BELTSTATUS;
return true;
+ } else if ("electronicParkBrakeStatus" == literal) {
+ *result = P_ELECTRONICPARKBRAKESTATUS;
+ return true;
} else if ("driverBraking" == literal) {
*result = P_DRIVERBRAKING;
return true;
@@ -764,6 +771,8 @@ bool IsValidEnum(ModuleType val) {
return true;
case MT_RADIO:
return true;
+ case MT_SEAT:
+ return true;
default:
return false;
}
@@ -774,6 +783,8 @@ const char* EnumToJsonString(ModuleType val) {
return "CLIMATE";
case MT_RADIO:
return "RADIO";
+ case MT_SEAT:
+ return "SEAT";
default:
return "";
}
@@ -786,6 +797,9 @@ bool EnumFromJsonString(const std::string& literal, ModuleType* result) {
} else if ("RADIO" == literal) {
*result = MT_RADIO;
return true;
+ } else if ("SEAT" == literal) {
+ *result = MT_SEAT;
+ return true;
} else {
return false;
}
diff --git a/src/components/policy/policy_external/test/json/PTU.json b/src/components/policy/policy_external/test/json/PTU.json
index 5209030eec..4cd71d6004 100644
--- a/src/components/policy/policy_external/test/json/PTU.json
+++ b/src/components/policy/policy_external/test/json/PTU.json
@@ -403,6 +403,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -419,6 +420,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -435,6 +437,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -451,6 +454,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/PTU2.json b/src/components/policy/policy_external/test/json/PTU2.json
index 30746123d4..9c9436144e 100644
--- a/src/components/policy/policy_external/test/json/PTU2.json
+++ b/src/components/policy/policy_external/test/json/PTU2.json
@@ -403,6 +403,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -419,6 +420,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -435,6 +437,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -451,6 +454,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/PTU3.json b/src/components/policy/policy_external/test/json/PTU3.json
index f3bd615c73..279051e7bf 100644
--- a/src/components/policy/policy_external/test/json/PTU3.json
+++ b/src/components/policy/policy_external/test/json/PTU3.json
@@ -403,6 +403,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -419,6 +420,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -435,6 +437,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -451,6 +454,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/PTU_with_empty_requestType_array.json b/src/components/policy/policy_external/test/json/PTU_with_empty_requestType_array.json
index 6db3836e4a..08027f2786 100644
--- a/src/components/policy/policy_external/test/json/PTU_with_empty_requestType_array.json
+++ b/src/components/policy/policy_external/test/json/PTU_with_empty_requestType_array.json
@@ -1438,6 +1438,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1450,6 +1451,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1462,6 +1464,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1474,6 +1477,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/PTU_with_invalid_requestType_between_correct.json b/src/components/policy/policy_external/test/json/PTU_with_invalid_requestType_between_correct.json
index 22f7bd2930..a88bcfbd08 100644
--- a/src/components/policy/policy_external/test/json/PTU_with_invalid_requestType_between_correct.json
+++ b/src/components/policy/policy_external/test/json/PTU_with_invalid_requestType_between_correct.json
@@ -1441,6 +1441,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1453,6 +1454,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1465,6 +1467,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1477,6 +1480,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/PTU_with_one_invalid_requestType.json b/src/components/policy/policy_external/test/json/PTU_with_one_invalid_requestType.json
index 83a2b308bb..250bfb21f2 100644
--- a/src/components/policy/policy_external/test/json/PTU_with_one_invalid_requestType.json
+++ b/src/components/policy/policy_external/test/json/PTU_with_one_invalid_requestType.json
@@ -1438,6 +1438,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1450,6 +1451,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1462,6 +1464,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1474,6 +1477,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/PTU_without_requestType_field.json b/src/components/policy/policy_external/test/json/PTU_without_requestType_field.json
index 8509935752..85910c098c 100644
--- a/src/components/policy/policy_external/test/json/PTU_without_requestType_field.json
+++ b/src/components/policy/policy_external/test/json/PTU_without_requestType_field.json
@@ -1437,6 +1437,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1449,6 +1450,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1461,6 +1463,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1473,6 +1476,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_reqestType_between_valid.json b/src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_reqestType_between_valid.json
index 4d99dfbc35..1c1b04ca2b 100644
--- a/src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_reqestType_between_valid.json
+++ b/src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_reqestType_between_valid.json
@@ -296,6 +296,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -308,6 +309,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -320,6 +322,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -332,6 +335,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_requestType.json b/src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_requestType.json
index aeed9655e1..51690d7b8e 100644
--- a/src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_requestType.json
+++ b/src/components/policy/policy_external/test/json/preloadedPT_with_invalid_default_requestType.json
@@ -296,6 +296,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -308,6 +309,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -320,6 +322,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -332,6 +335,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/preloadedPT_with_several_invalid_default_requestTypes.json b/src/components/policy/policy_external/test/json/preloadedPT_with_several_invalid_default_requestTypes.json
index 2e99c6c8ee..cfa6c4010c 100644
--- a/src/components/policy/policy_external/test/json/preloadedPT_with_several_invalid_default_requestTypes.json
+++ b/src/components/policy/policy_external/test/json/preloadedPT_with_several_invalid_default_requestTypes.json
@@ -296,6 +296,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -308,6 +309,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -320,6 +322,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -332,6 +335,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/ptu2_requestType.json b/src/components/policy/policy_external/test/json/ptu2_requestType.json
index 9a6ad3720d..d7177f2251 100644
--- a/src/components/policy/policy_external/test/json/ptu2_requestType.json
+++ b/src/components/policy/policy_external/test/json/ptu2_requestType.json
@@ -415,6 +415,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -431,6 +432,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -447,6 +449,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -463,6 +466,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/ptu_requestType.json b/src/components/policy/policy_external/test/json/ptu_requestType.json
index 87fcf17aee..6a531dd2ad 100644
--- a/src/components/policy/policy_external/test/json/ptu_requestType.json
+++ b/src/components/policy/policy_external/test/json/ptu_requestType.json
@@ -414,6 +414,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -430,6 +431,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -446,6 +448,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -462,6 +465,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_preloaded_pt.json b/src/components/policy/policy_external/test/json/sdl_preloaded_pt.json
index 7f5436b5b6..59e3f947c3 100644
--- a/src/components/policy/policy_external/test/json/sdl_preloaded_pt.json
+++ b/src/components/policy/policy_external/test/json/sdl_preloaded_pt.json
@@ -297,6 +297,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -309,6 +310,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -321,6 +323,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -333,6 +336,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_preloaded_pt1.json b/src/components/policy/policy_external/test/json/sdl_preloaded_pt1.json
index 37e0476683..a4491fd449 100644
--- a/src/components/policy/policy_external/test/json/sdl_preloaded_pt1.json
+++ b/src/components/policy/policy_external/test/json/sdl_preloaded_pt1.json
@@ -2051,6 +2051,7 @@
[
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -2065,6 +2066,7 @@
[
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -2079,6 +2081,7 @@
[
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -2093,6 +2096,7 @@
[
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_preloaded_pt_send_location.json b/src/components/policy/policy_external/test/json/sdl_preloaded_pt_send_location.json
index 2a503ab4a1..83c4ccf15c 100644
--- a/src/components/policy/policy_external/test/json/sdl_preloaded_pt_send_location.json
+++ b/src/components/policy/policy_external/test/json/sdl_preloaded_pt_send_location.json
@@ -415,6 +415,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -431,6 +432,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -447,6 +449,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -463,6 +466,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_pt_first_update.json b/src/components/policy/policy_external/test/json/sdl_pt_first_update.json
index d28f70379c..7b882c6ceb 100644
--- a/src/components/policy/policy_external/test/json/sdl_pt_first_update.json
+++ b/src/components/policy/policy_external/test/json/sdl_pt_first_update.json
@@ -1431,6 +1431,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1443,6 +1444,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1455,6 +1457,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1467,6 +1470,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_pt_second_update.json b/src/components/policy/policy_external/test/json/sdl_pt_second_update.json
index 7bf287671e..7d90275328 100644
--- a/src/components/policy/policy_external/test/json/sdl_pt_second_update.json
+++ b/src/components/policy/policy_external/test/json/sdl_pt_second_update.json
@@ -1431,6 +1431,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1443,6 +1444,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1455,6 +1457,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1467,6 +1470,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_pt_update.json b/src/components/policy/policy_external/test/json/sdl_pt_update.json
index 6b130c8f60..807b0eb312 100644
--- a/src/components/policy/policy_external/test/json/sdl_pt_update.json
+++ b/src/components/policy/policy_external/test/json/sdl_pt_update.json
@@ -1431,6 +1431,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1443,6 +1444,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1455,6 +1457,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1467,6 +1470,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_have_params.json b/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_have_params.json
index be177335fe..3d0a004dbe 100644
--- a/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_have_params.json
+++ b/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_have_params.json
@@ -414,6 +414,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -430,6 +431,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -446,6 +448,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -462,6 +465,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1.json b/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1.json
index 58e3f2fad3..6a36f1f9c5 100644
--- a/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1.json
+++ b/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1.json
@@ -414,6 +414,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -430,6 +431,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -446,6 +448,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -462,6 +465,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1_omitted_in2.json b/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1_omitted_in2.json
index 4b10f8c80b..3303d56844 100644
--- a/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1_omitted_in2.json
+++ b/src/components/policy/policy_external/test/json/sdl_update_pt_2_groups_no_params_in1_omitted_in2.json
@@ -414,6 +414,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -430,6 +431,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -446,6 +448,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -462,6 +465,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_update_pt_send_location.json b/src/components/policy/policy_external/test/json/sdl_update_pt_send_location.json
index 7728b69a0b..e7a33ba2c0 100644
--- a/src/components/policy/policy_external/test/json/sdl_update_pt_send_location.json
+++ b/src/components/policy/policy_external/test/json/sdl_update_pt_send_location.json
@@ -414,6 +414,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -430,6 +431,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -446,6 +448,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -462,6 +465,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_all_params.json b/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_all_params.json
index aaa7664d06..08739f9d6a 100644
--- a/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_all_params.json
+++ b/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_all_params.json
@@ -414,6 +414,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -430,6 +431,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -446,6 +448,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -462,6 +465,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_no_params.json b/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_no_params.json
index 079892677d..21396b8cac 100644
--- a/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_no_params.json
+++ b/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_no_params.json
@@ -414,6 +414,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -430,6 +431,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -446,6 +448,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -462,6 +465,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_some_params.json b/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_some_params.json
index 82048d21e6..5aa467a23c 100644
--- a/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_some_params.json
+++ b/src/components/policy/policy_external/test/json/sdl_update_pt_send_location_some_params.json
@@ -414,6 +414,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -430,6 +431,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -446,6 +448,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -462,6 +465,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/json/valid_sdl_pt_update.json b/src/components/policy/policy_external/test/json/valid_sdl_pt_update.json
index 81521a2e0b..5827ab287a 100644
--- a/src/components/policy/policy_external/test/json/valid_sdl_pt_update.json
+++ b/src/components/policy/policy_external/test/json/valid_sdl_pt_update.json
@@ -1431,6 +1431,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1443,6 +1444,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1455,6 +1457,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1467,6 +1470,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_external/test/sql_pt_representation_test.cc b/src/components/policy/policy_external/test/sql_pt_representation_test.cc
index 0b0831eaad..a5589cc904 100644
--- a/src/components/policy/policy_external/test/sql_pt_representation_test.cc
+++ b/src/components/policy/policy_external/test/sql_pt_representation_test.cc
@@ -81,14 +81,14 @@ class SQLPTRepresentationTest : public SQLPTRepresentation,
static const std::string kDatabaseName;
static utils::dbms::SQLQuery* query_wrapper_;
// Gtest can show message that this object doesn't destroyed
- static std::auto_ptr<policy_handler_test::MockPolicySettings>
+ static std::unique_ptr<policy_handler_test::MockPolicySettings>
policy_settings_;
static void SetUpTestCase() {
const std::string kAppStorageFolder = "storage_SQLPTRepresentationTest";
reps = new SQLPTRepresentation(in_memory_);
ASSERT_TRUE(reps != NULL);
- policy_settings_ = std::auto_ptr<policy_handler_test::MockPolicySettings>(
+ policy_settings_ = std::unique_ptr<policy_handler_test::MockPolicySettings>(
new policy_handler_test::MockPolicySettings());
ON_CALL(*policy_settings_, app_storage_folder())
.WillByDefault(ReturnRef(kAppStorageFolder));
@@ -348,7 +348,7 @@ SQLPTRepresentation* SQLPTRepresentationTest::reps = 0;
utils::dbms::SQLQuery* SQLPTRepresentationTest::query_wrapper_ = 0;
const std::string SQLPTRepresentationTest::kDatabaseName = ":memory:";
const bool SQLPTRepresentationTest::in_memory_ = true;
-std::auto_ptr<policy_handler_test::MockPolicySettings>
+std::unique_ptr<policy_handler_test::MockPolicySettings>
SQLPTRepresentationTest::policy_settings_;
class SQLPTRepresentationTest2 : public ::testing::Test {
diff --git a/src/components/policy/policy_regular/include/policy/policy_table/enums.h b/src/components/policy/policy_regular/include/policy/policy_table/enums.h
index 050ab63973..8d81a742e4 100644
--- a/src/components/policy/policy_regular/include/policy/policy_table/enums.h
+++ b/src/components/policy/policy_regular/include/policy/policy_table/enums.h
@@ -78,6 +78,7 @@ enum Parameter {
P_VIN,
P_ACCPEDALPOSITION,
P_BELTSTATUS,
+ P_ELECTRONICPARKBRAKESTATUS,
P_DRIVERBRAKING,
P_PRNDL,
P_RPM,
@@ -152,10 +153,7 @@ bool IsValidEnum(Input val);
const char* EnumToJsonString(Input val);
bool EnumFromJsonString(const std::string& literal, Input* result);
-enum ModuleType {
- MT_CLIMATE,
- MT_RADIO,
-};
+enum ModuleType { MT_CLIMATE, MT_RADIO, MT_SEAT };
bool IsValidEnum(ModuleType val);
const char* EnumToJsonString(ModuleType val);
bool EnumFromJsonString(const std::string& literal, ModuleType* result);
diff --git a/src/components/policy/policy_regular/policy_table_interface_ext.xml b/src/components/policy/policy_regular/policy_table_interface_ext.xml
index 742ed547a8..393a419139 100644
--- a/src/components/policy/policy_regular/policy_table_interface_ext.xml
+++ b/src/components/policy/policy_regular/policy_table_interface_ext.xml
@@ -39,6 +39,7 @@
<element name="vin" />
<element name="accPedalPosition" />
<element name="beltStatus" />
+ <element name="electronicParkBrakeStatus" />
<element name="driverBraking" />
<element name="prndl" />
<element name="rpm" />
diff --git a/src/components/policy/policy_regular/src/policy_table/enums.cc b/src/components/policy/policy_regular/src/policy_table/enums.cc
index e05ed8f064..2f5ba69ad7 100644
--- a/src/components/policy/policy_regular/src/policy_table/enums.cc
+++ b/src/components/policy/policy_regular/src/policy_table/enums.cc
@@ -143,6 +143,8 @@ bool IsValidEnum(Parameter val) {
return true;
case P_BELTSTATUS:
return true;
+ case P_ELECTRONICPARKBRAKESTATUS:
+ return true;
case P_DRIVERBRAKING:
return true;
case P_PRNDL:
@@ -207,6 +209,8 @@ const char* EnumToJsonString(Parameter val) {
return "accPedalPosition";
case P_BELTSTATUS:
return "beltStatus";
+ case P_ELECTRONICPARKBRAKESTATUS:
+ return "electronicParkBrakeStatus";
case P_DRIVERBRAKING:
return "driverBraking";
case P_PRNDL:
@@ -287,6 +291,9 @@ bool EnumFromJsonString(const std::string& literal, Parameter* result) {
} else if ("beltStatus" == literal) {
*result = P_BELTSTATUS;
return true;
+ } else if ("electronicParkBrakeStatus" == literal) {
+ *result = P_ELECTRONICPARKBRAKESTATUS;
+ return true;
} else if ("driverBraking" == literal) {
*result = P_DRIVERBRAKING;
return true;
@@ -634,6 +641,8 @@ bool IsValidEnum(ModuleType val) {
return true;
case MT_RADIO:
return true;
+ case MT_SEAT:
+ return true;
default:
return false;
}
@@ -644,6 +653,8 @@ const char* EnumToJsonString(ModuleType val) {
return "CLIMATE";
case MT_RADIO:
return "RADIO";
+ case MT_SEAT:
+ return "SEAT";
default:
return "";
}
@@ -656,6 +667,9 @@ bool EnumFromJsonString(const std::string& literal, ModuleType* result) {
} else if ("RADIO" == literal) {
*result = MT_RADIO;
return true;
+ } else if ("SEAT" == literal) {
+ *result = MT_SEAT;
+ return true;
} else {
return false;
}
diff --git a/src/components/policy/policy_regular/test/PTU.json b/src/components/policy/policy_regular/test/PTU.json
index f53ceb735b..2f4735dd66 100644
--- a/src/components/policy/policy_regular/test/PTU.json
+++ b/src/components/policy/policy_regular/test/PTU.json
@@ -296,6 +296,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -308,6 +309,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -320,6 +322,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -332,6 +335,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/PTU2.json b/src/components/policy/policy_regular/test/PTU2.json
index 6f24ee97f6..806ab8bcc0 100644
--- a/src/components/policy/policy_regular/test/PTU2.json
+++ b/src/components/policy/policy_regular/test/PTU2.json
@@ -296,6 +296,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -308,6 +309,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -320,6 +322,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -332,6 +335,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/PTU3.json b/src/components/policy/policy_regular/test/PTU3.json
index e1aaa953c5..28396be29a 100644
--- a/src/components/policy/policy_regular/test/PTU3.json
+++ b/src/components/policy/policy_regular/test/PTU3.json
@@ -296,6 +296,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -308,6 +309,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -320,6 +322,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -332,6 +335,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/PTU4.json b/src/components/policy/policy_regular/test/PTU4.json
index dad00de53e..4592e228df 100644
--- a/src/components/policy/policy_regular/test/PTU4.json
+++ b/src/components/policy/policy_regular/test/PTU4.json
@@ -296,6 +296,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -308,6 +309,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -320,6 +322,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -332,6 +335,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/ptu2_requestType.json b/src/components/policy/policy_regular/test/ptu2_requestType.json
index 1f23adda1c..2a05a94f8b 100644
--- a/src/components/policy/policy_regular/test/ptu2_requestType.json
+++ b/src/components/policy/policy_regular/test/ptu2_requestType.json
@@ -416,6 +416,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -432,6 +433,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -448,6 +450,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -464,6 +467,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/ptu_requestType.json b/src/components/policy/policy_regular/test/ptu_requestType.json
index 998ab7f5d4..b0d9117568 100644
--- a/src/components/policy/policy_regular/test/ptu_requestType.json
+++ b/src/components/policy/policy_regular/test/ptu_requestType.json
@@ -416,6 +416,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -432,6 +433,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -448,6 +450,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -464,6 +467,7 @@
"parameters": [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/sdl_preloaded_pt.json b/src/components/policy/policy_regular/test/sdl_preloaded_pt.json
index 7f5436b5b6..59e3f947c3 100644
--- a/src/components/policy/policy_regular/test/sdl_preloaded_pt.json
+++ b/src/components/policy/policy_regular/test/sdl_preloaded_pt.json
@@ -297,6 +297,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -309,6 +310,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -321,6 +323,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -333,6 +336,7 @@
"LIMITED"],
"parameters": ["accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/sdl_pt_first_update.json b/src/components/policy/policy_regular/test/sdl_pt_first_update.json
index d28f70379c..7b882c6ceb 100644
--- a/src/components/policy/policy_regular/test/sdl_pt_first_update.json
+++ b/src/components/policy/policy_regular/test/sdl_pt_first_update.json
@@ -1431,6 +1431,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1443,6 +1444,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1455,6 +1457,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1467,6 +1470,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/sdl_pt_second_update.json b/src/components/policy/policy_regular/test/sdl_pt_second_update.json
index 7bf287671e..7d90275328 100644
--- a/src/components/policy/policy_regular/test/sdl_pt_second_update.json
+++ b/src/components/policy/policy_regular/test/sdl_pt_second_update.json
@@ -1431,6 +1431,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1443,6 +1444,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1455,6 +1457,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1467,6 +1470,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/sdl_pt_update.json b/src/components/policy/policy_regular/test/sdl_pt_update.json
index cb9f9bddf6..909e4d5238 100644
--- a/src/components/policy/policy_regular/test/sdl_pt_update.json
+++ b/src/components/policy/policy_regular/test/sdl_pt_update.json
@@ -1433,6 +1433,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1445,6 +1446,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1457,6 +1459,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1469,6 +1472,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/policy/policy_regular/test/sql_pt_representation_test.cc b/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
index a5f3741331..40dae10a4f 100644
--- a/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
+++ b/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
@@ -78,12 +78,12 @@ class SQLPTRepresentationTest : public SQLPTRepresentation,
static const std::string kDatabaseName;
static const std::string kAppStorageFolder;
// Gtest can show message that this object doesn't destroyed
- std::auto_ptr<NiceMock<MockPolicySettings> > policy_settings_;
+ std::unique_ptr<NiceMock<MockPolicySettings> > policy_settings_;
void SetUp() OVERRIDE {
file_system::CreateDirectory(kAppStorageFolder);
reps = new SQLPTRepresentation;
- policy_settings_ = std::auto_ptr<NiceMock<MockPolicySettings> >(
+ policy_settings_ = std::unique_ptr<NiceMock<MockPolicySettings> >(
new NiceMock<MockPolicySettings>());
ON_CALL(*policy_settings_, app_storage_folder())
.WillByDefault(ReturnRef(kAppStorageFolder));
diff --git a/src/components/policy/policy_regular/test/valid_sdl_pt_update.json b/src/components/policy/policy_regular/test/valid_sdl_pt_update.json
index 81521a2e0b..5827ab287a 100644
--- a/src/components/policy/policy_regular/test/valid_sdl_pt_update.json
+++ b/src/components/policy/policy_regular/test/valid_sdl_pt_update.json
@@ -1431,6 +1431,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1443,6 +1444,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1455,6 +1457,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
@@ -1467,6 +1470,7 @@
"parameters" : [
"accPedalPosition",
"beltStatus",
+ "electronicParkBrakeStatus",
"driverBraking",
"myKey",
"prndl",
diff --git a/src/components/protocol/src/bson_object_keys.cc b/src/components/protocol/src/bson_object_keys.cc
index fb225b1461..11160d7082 100644
--- a/src/components/protocol/src/bson_object_keys.cc
+++ b/src/components/protocol/src/bson_object_keys.cc
@@ -12,6 +12,12 @@ const char* height = "height";
const char* width = "width";
const char* video_protocol = "videoProtocol";
const char* video_codec = "videoCodec";
+const char* secondary_transports = "secondaryTransports";
+const char* audio_service_transports = "audioServiceTransports";
+const char* video_service_transports = "videoServiceTransports";
+const char* tcp_ip_address = "tcpIpAddress";
+const char* tcp_port = "tcpPort";
+const char* reason = "reason";
} // namespace strings
diff --git a/src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h b/src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h
index 99f03b1c04..fb685f33d3 100644
--- a/src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h
+++ b/src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h
@@ -44,6 +44,7 @@
#include "utils/threads/message_loop_thread.h"
#include "utils/shared_ptr.h"
#include "utils/messagemeter.h"
+#include "utils/custom_string.h"
#include "protocol_handler/protocol_handler.h"
#include "protocol_handler/protocol_packet.h"
@@ -55,6 +56,7 @@
#include "transport_manager/common.h"
#include "transport_manager/transport_manager.h"
#include "transport_manager/transport_manager_listener_empty.h"
+#include "transport_manager/transport_adapter/transport_adapter.h"
#include "connection_handler/connection_handler.h"
#include "application_manager/policies/policy_handler_observer.h"
@@ -131,6 +133,30 @@ typedef threads::MessageLoopThread<
utils::PrioritizedQueue<RawFordMessageFromMobile> > FromMobileQueue;
typedef threads::MessageLoopThread<
utils::PrioritizedQueue<RawFordMessageToMobile> > ToMobileQueue;
+
+// Type to allow easy mapping between a device type and transport
+// characteristics
+typedef enum {
+ TT_NONE = -1,
+ TT_USB = 0,
+ TT_BLUETOOTH = 1,
+ TT_WIFI = 2
+} TransportType;
+
+struct TransportDescription {
+ TransportDescription(const TransportType transport_type,
+ const bool ios_transport,
+ const bool android_transport)
+ : transport_type_(transport_type)
+ , ios_transport_(ios_transport)
+ , android_transport_(android_transport) {}
+
+ TransportType transport_type_;
+ bool ios_transport_;
+ bool android_transport_;
+};
+
+typedef std::map<std::string, TransportDescription> TransportTypes;
} // namespace impl
/**
@@ -231,7 +257,15 @@ class ProtocolHandlerImpl
*/
void SendEndSession(int32_t connection_id, uint8_t session_id);
- void SendEndService(int32_t connection_id,
+ /**
+ * \brief Sends ending session to mobile application
+ * \param primary_connection_id Identifier of connection within which
+ * service exists
+ * \param connection_id Identifier of the actual transport for the service
+ * \param session_id ID of session to be ended
+ */
+ void SendEndService(int32_t primary_connection_id,
+ int32_t connection_id,
uint8_t session_id,
uint8_t service_type);
@@ -422,10 +456,19 @@ class ProtocolHandlerImpl
const impl::ToMobileQueue& get_to_mobile_queue() const {
return raw_ford_messages_to_mobile_;
}
+
+ void set_tcp_config(bool tcp_enabled,
+ std::string tcp_address,
+ std::string tcp_port) {
+ tcp_enabled_ = tcp_enabled;
+ tcp_ip_address_ = tcp_address;
+ tcp_port_ = tcp_port;
+ }
#endif
private:
- void SendEndServicePrivate(int32_t connection_id,
+ void SendEndServicePrivate(int32_t primary_connection_id,
+ int32_t connection_id,
uint8_t session_id,
uint8_t service_type);
@@ -436,6 +479,28 @@ class ProtocolHandlerImpl
uint8_t session_id,
uint32_t message_id);
+ /*
+ * Prepare and send TransportUpdateEvent message
+ */
+ void SendTransportUpdateEvent(ConnectionID connection_id, uint8_t session_id);
+
+ /*
+ * Prepare and send RegisterSecondaryTransportAck message
+ */
+ RESULT_CODE SendRegisterSecondaryTransportAck(
+ ConnectionID connection_id,
+ ConnectionID primary_transport_connection_id,
+ uint8_t session_id);
+
+ /*
+ * Prepare and send RegisterSecondaryTransportNAck message
+ */
+ RESULT_CODE SendRegisterSecondaryTransportNAck(
+ ConnectionID connection_id,
+ ConnectionID primary_transport_connection_id,
+ uint8_t session_id,
+ BsonObject* reason = NULL);
+
/**
* @brief Notifies about receiving message from TM.
*
@@ -474,6 +539,19 @@ class ProtocolHandlerImpl
void OnConnectionClosed(
const transport_manager::ConnectionUID connection_id) OVERRIDE;
+ void OnUnexpectedDisconnect(
+ const transport_manager::ConnectionUID connection_id,
+ const transport_manager::CommunicationError& error) OVERRIDE;
+
+ /**
+ * @brief Notifies that configuration of a transport has been updated.
+ *
+ * @param configs pairs of key and value that represent configuration.
+ */
+ void OnTransportConfigUpdated(
+ const transport_manager::transport_adapter::TransportConfig& configs)
+ OVERRIDE;
+
/**
* @brief Notifies subscribers about message
* received from mobile device.
@@ -575,6 +653,9 @@ class ProtocolHandlerImpl
RESULT_CODE HandleControlMessageStartSession(const ProtocolFramePtr packet);
+ RESULT_CODE HandleControlMessageRegisterSecondaryTransport(
+ const ProtocolFramePtr packet);
+
RESULT_CODE HandleControlMessageHeartBeat(const ProtocolPacket& packet);
void PopValideAndExpirateMultiframes();
@@ -603,6 +684,32 @@ class ProtocolHandlerImpl
*/
uint8_t SupportedSDLProtocolVersion() const;
+ const impl::TransportDescription GetTransportTypeFromConnectionType(
+ const std::string& device_type) const;
+
+ const bool ParseSecondaryTransportConfiguration(
+ const ConnectionID connection_id,
+ std::vector<std::string>& secondaryTransports,
+ std::vector<int32_t>& audioServiceTransports,
+ std::vector<int32_t>& videoServiceTransports) const;
+
+ void GenerateSecondaryTransportsForStartSessionAck(
+ const std::vector<std::string>& secondary_transport_types,
+ bool device_is_ios,
+ bool device_is_android,
+ std::vector<std::string>& secondaryTransports) const;
+
+ void GenerateServiceTransportsForStartSessionAck(
+ bool secondary_enabled,
+ const std::vector<std::string>& service_transports,
+ const std::string& primary_connection_type,
+ const impl::TransportType primary_transport_type,
+ const std::vector<std::string>& secondary_transport_types,
+ std::vector<int32_t>& serviceTransports) const;
+
+ const std::string TransportTypeFromTransport(
+ const utils::custom_string::CustomString& transport) const;
+
const ProtocolHandlerSettings& settings_;
/**
@@ -689,6 +796,10 @@ class ProtocolHandlerImpl
sync_primitives::Lock start_session_frame_map_lock_;
StartSessionFrameMap start_session_frame_map_;
+ bool tcp_enabled_;
+ std::string tcp_port_;
+ std::string tcp_ip_address_;
+
#ifdef TELEMETRY_MONITOR
PHTelemetryObserver* metric_observer_;
#endif // TELEMETRY_MONITOR
diff --git a/src/components/protocol_handler/include/protocol_handler/protocol_packet.h b/src/components/protocol_handler/include/protocol_handler/protocol_packet.h
index b6c05d4c46..d3e3ec5809 100644
--- a/src/components/protocol_handler/include/protocol_handler/protocol_packet.h
+++ b/src/components/protocol_handler/include/protocol_handler/protocol_packet.h
@@ -332,6 +332,11 @@ class ProtocolPacket {
ConnectionID connection_id() const;
/**
+ * \brief Setter of Connection Identifier
+ */
+ void set_connection_id(ConnectionID connection_id);
+
+ /**
* \brief Getter for data payload size
*/
uint32_t payload_size() const;
diff --git a/src/components/protocol_handler/src/protocol_handler_impl.cc b/src/components/protocol_handler/src/protocol_handler_impl.cc
index 636932f449..6548f86c6a 100644
--- a/src/components/protocol_handler/src/protocol_handler_impl.cc
+++ b/src/components/protocol_handler/src/protocol_handler_impl.cc
@@ -31,6 +31,7 @@
*/
#include "protocol_handler/protocol_handler_impl.h"
+#include <arpa/inet.h> // for INET6_ADDRSTRLEN
#include <memory.h>
#include <algorithm> // std::find
#include <bson_object.h>
@@ -60,7 +61,8 @@ std::string ConvertPacketDataToString(const uint8_t* data,
const size_t kStackSize = 65536;
-ProtocolPacket::ProtocolVersion defaultProtocolVersion(5, 0, 0);
+ProtocolPacket::ProtocolVersion defaultProtocolVersion(5, 1, 0);
+ProtocolPacket::ProtocolVersion minMultipleTransportsVersion(5, 1, 0);
ProtocolHandlerImpl::ProtocolHandlerImpl(
const ProtocolHandlerSettings& settings,
@@ -84,6 +86,7 @@ ProtocolHandlerImpl::ProtocolHandlerImpl(
"PH ToMobile", this, threads::ThreadOptions(kStackSize))
, start_session_frame_map_lock_()
, start_session_frame_map_()
+ , tcp_enabled_(false)
#ifdef TELEMETRY_MONITOR
, metric_observer_(NULL)
#endif // TELEMETRY_MONITOR
@@ -242,6 +245,8 @@ void ProtocolHandlerImpl::SendStartSessionAck(
BsonObject& params) {
LOG4CXX_AUTO_TRACE(logger_);
+ bool send_transport_update_event = false;
+
uint8_t ack_protocol_version = SupportedSDLProtocolVersion();
const bool proxy_supports_v5_protocol =
@@ -317,6 +322,91 @@ void ProtocolHandlerImpl::SendStartSessionAck(
"Protocol version parameter was written to bson params: "
<< protocol_ver_written << "; Value: "
<< bson_object_get_string(&params, strings::protocol_version));
+
+ LOG4CXX_INFO(logger_,
+ "Protocol Version String " << protocolVersionString);
+
+ std::vector<std::string> secondaryTransports;
+ std::vector<int32_t> audioServiceTransports;
+ std::vector<int32_t> videoServiceTransports;
+ if (*minVersion >= minMultipleTransportsVersion) {
+ if (ParseSecondaryTransportConfiguration(connection_id,
+ secondaryTransports,
+ audioServiceTransports,
+ videoServiceTransports)) {
+ LOG4CXX_DEBUG(logger_, "Multiple transports are enabled.");
+ BsonArray secondaryTransportsArr;
+ bson_array_initialize(&secondaryTransportsArr,
+ secondaryTransports.size());
+ for (unsigned int i = 0; i < secondaryTransports.size(); i++) {
+ char secondaryTransport[255];
+ strncpy(secondaryTransport,
+ secondaryTransports[i].c_str(),
+ sizeof(secondaryTransport));
+ secondaryTransport[sizeof(secondaryTransport) - 1] = '\0';
+ LOG4CXX_DEBUG(
+ logger_,
+ "Adding "
+ << secondaryTransport
+ << " to secondaryTransports parameter of StartSessionAck");
+ bson_array_add_string(&secondaryTransportsArr, secondaryTransport);
+ }
+ bson_object_put_array(
+ &params, strings::secondary_transports, &secondaryTransportsArr);
+
+ BsonArray audioServiceTransportsArr;
+ bson_array_initialize(&audioServiceTransportsArr,
+ audioServiceTransports.size());
+ for (unsigned int i = 0; i < audioServiceTransports.size(); i++) {
+ LOG4CXX_DEBUG(logger_,
+ "Adding " << audioServiceTransports[i]
+ << " to audioServiceTransports parameter "
+ "of StartSessionAck");
+ bson_array_add_int32(&audioServiceTransportsArr,
+ audioServiceTransports[i]);
+ }
+ bson_object_put_array(&params,
+ strings::audio_service_transports,
+ &audioServiceTransportsArr);
+
+ BsonArray videoServiceTransportsArr;
+ bson_array_initialize(&videoServiceTransportsArr,
+ videoServiceTransports.size());
+ for (unsigned int i = 0; i < videoServiceTransports.size(); i++) {
+ LOG4CXX_DEBUG(logger_,
+ "Adding " << videoServiceTransports[i]
+ << " to videoServiceTransports parameter "
+ "of StartSessionAck");
+ bson_array_add_int32(&videoServiceTransportsArr,
+ videoServiceTransports[i]);
+ }
+ bson_object_put_array(&params,
+ strings::video_service_transports,
+ &videoServiceTransportsArr);
+
+ if (settings_.multiple_transports_enabled()) {
+ send_transport_update_event = true;
+ } else {
+ LOG4CXX_DEBUG(
+ logger_,
+ "Multiple transports feature is disabled by configuration");
+ // In this case, we must remember that this session will never have
+ // a secondary transport.
+ connection_handler_.SetSecondaryTransportID(session_id,
+ kDisabledSecondary);
+ }
+ } else {
+ LOG4CXX_WARN(
+ logger_,
+ "Failed to set up secondary transport and service type params");
+ connection_handler_.SetSecondaryTransportID(session_id,
+ kDisabledSecondary);
+ }
+ } else {
+ LOG4CXX_INFO(logger_, "Older protocol version. No multiple transports");
+ connection_handler_.SetSecondaryTransportID(session_id,
+ kDisabledSecondary);
+ }
}
uint8_t* payloadBytes = bson_object_to_bytes(&params);
ptr->set_data(payloadBytes, bson_object_size(&params));
@@ -334,6 +424,16 @@ void ProtocolHandlerImpl::SendStartSessionAck(
<< static_cast<int32_t>(service_type) << " session_id "
<< static_cast<int32_t>(session_id) << " protection "
<< (protection ? "ON" : "OFF"));
+
+ if (send_transport_update_event) {
+ // Wait until the StartService ACK has been processed for sending.
+ // The TransportUpdateEvent has a higher priority, being that it's
+ // a SERVICE_TYPE_CONTROL message. (The ACK is SERVICE_TYPE_RPC.)
+ LOG4CXX_DEBUG(logger_, "Waiting for the MessageToMobile queue to be empty");
+ raw_ford_messages_to_mobile_.WaitDumpQueue();
+ LOG4CXX_DEBUG(logger_, "Sending the TransportUpdate event");
+ SendTransportUpdateEvent(connection_id, session_id);
+ }
}
void ProtocolHandlerImpl::SendStartSessionNAck(ConnectionID connection_id,
@@ -491,14 +591,18 @@ void ProtocolHandlerImpl::SendEndSessionAck(ConnectionID connection_id,
<< static_cast<int32_t>(session_id));
}
-void ProtocolHandlerImpl::SendEndServicePrivate(int32_t connection_id,
+void ProtocolHandlerImpl::SendEndServicePrivate(int32_t primary_connection_id,
+ int32_t connection_id,
uint8_t session_id,
uint8_t service_type) {
LOG4CXX_AUTO_TRACE(logger_);
uint8_t protocol_version;
if (session_observer_.ProtocolVersionUsed(
- connection_id, session_id, protocol_version)) {
+ primary_connection_id, session_id, protocol_version)) {
+ LOG4CXX_TRACE(logger_,
+ "SendEndServicePrivate using protocol version "
+ << static_cast<int32_t>(protocol_version));
ProtocolFramePtr ptr(
new protocol_handler::ProtocolPacket(connection_id,
protocol_version,
@@ -513,25 +617,31 @@ void ProtocolHandlerImpl::SendEndServicePrivate(int32_t connection_id,
raw_ford_messages_to_mobile_.PostMessage(
impl::RawFordMessageToMobile(ptr, false));
LOG4CXX_DEBUG(logger_,
- "SendEndSession() for connection "
- << connection_id << " for service_type " << service_type
+ "SendEndServicePrivate() for connection "
+ << primary_connection_id << " for service_type "
+ << static_cast<int>(service_type)
+ << " service connection " << connection_id
<< " session_id " << static_cast<int32_t>(session_id));
} else {
LOG4CXX_WARN(
logger_,
- "SendEndSession is failed connection or session does not exist");
+ "SendEndServicePrivate is failed connection or session does not exist");
}
}
void ProtocolHandlerImpl::SendEndSession(int32_t connection_id,
uint8_t session_id) {
- SendEndServicePrivate(connection_id, session_id, SERVICE_TYPE_RPC);
+ // A session is always associated with a primary connection ID
+ SendEndServicePrivate(
+ connection_id, connection_id, session_id, SERVICE_TYPE_RPC);
}
-void ProtocolHandlerImpl::SendEndService(int32_t connection_id,
+void ProtocolHandlerImpl::SendEndService(int32_t primary_connection_id,
+ int32_t connection_id,
uint8_t session_id,
uint8_t service_type) {
- SendEndServicePrivate(connection_id, session_id, service_type);
+ SendEndServicePrivate(
+ primary_connection_id, connection_id, session_id, service_type);
}
RESULT_CODE ProtocolHandlerImpl::SendHeartBeatAck(ConnectionID connection_id,
@@ -563,6 +673,139 @@ RESULT_CODE ProtocolHandlerImpl::SendHeartBeatAck(ConnectionID connection_id,
return RESULT_FAIL;
}
+void ProtocolHandlerImpl::SendTransportUpdateEvent(ConnectionID connection_id,
+ uint8_t session_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ uint8_t protocol_version;
+ if (session_observer_.ProtocolVersionUsed(
+ connection_id, session_id, protocol_version)) {
+ ProtocolFramePtr ptr(
+ new protocol_handler::ProtocolPacket(connection_id,
+ protocol_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_CONTROL,
+ SERVICE_TYPE_CONTROL,
+ FRAME_DATA_TRANSPORT_EVENT_UPDATE,
+ session_id,
+ 0,
+ message_counters_[session_id]++));
+
+ BsonObject payload_obj;
+ bson_object_initialize_default(&payload_obj);
+
+ int32_t tcp_port = atoi(tcp_port_.c_str());
+ char tcp_ip_address[INET6_ADDRSTRLEN + 1];
+ if (tcp_enabled_ && (tcp_port != 0)) {
+ strncpy(tcp_ip_address, tcp_ip_address_.c_str(), INET6_ADDRSTRLEN);
+ tcp_ip_address[INET6_ADDRSTRLEN] = '\0';
+ bson_object_put_string(
+ &payload_obj, strings::tcp_ip_address, tcp_ip_address);
+ bson_object_put_int32(&payload_obj, strings::tcp_port, tcp_port);
+ } else {
+ tcp_ip_address[0] = '\0';
+ bson_object_put_string(
+ &payload_obj, strings::tcp_ip_address, tcp_ip_address);
+ // omit TCP port number
+ }
+ LOG4CXX_INFO(logger_,
+ "SendTransportUpdateEvent IP address: "
+ << tcp_ip_address << " Port: " << tcp_port);
+
+ uint8_t* payloadBytes = bson_object_to_bytes(&payload_obj);
+ ptr->set_data(payloadBytes, bson_object_size(&payload_obj));
+ free(payloadBytes);
+ bson_object_deinitialize(&payload_obj);
+
+ raw_ford_messages_to_mobile_.PostMessage(
+ impl::RawFordMessageToMobile(ptr, false));
+
+ LOG4CXX_DEBUG(logger_,
+ "SendTransportUpdateEvent() for connection "
+ << connection_id << " for session "
+ << static_cast<int32_t>(session_id));
+ } else {
+ LOG4CXX_WARN(logger_,
+ "SendTransportUpdateEvent is failed connection or session "
+ "does not exist");
+ }
+}
+
+RESULT_CODE ProtocolHandlerImpl::SendRegisterSecondaryTransportAck(
+ ConnectionID connection_id,
+ ConnectionID primary_transport_connection_id,
+ uint8_t session_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // acquire the protocol version from primary transport
+ uint8_t protocol_version;
+ if (session_observer_.ProtocolVersionUsed(
+ primary_transport_connection_id, session_id, protocol_version)) {
+ ProtocolFramePtr ptr(new protocol_handler::ProtocolPacket(
+ connection_id,
+ protocol_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_CONTROL,
+ SERVICE_TYPE_CONTROL,
+ FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_ACK,
+ session_id,
+ 0u,
+ 2));
+
+ raw_ford_messages_to_mobile_.PostMessage(
+ impl::RawFordMessageToMobile(ptr, false));
+ return RESULT_OK;
+ }
+ LOG4CXX_WARN(logger_,
+ "RegisterSecondaryTransportAck is failed connection or session "
+ "does not exist");
+ return RESULT_FAIL;
+}
+
+RESULT_CODE ProtocolHandlerImpl::SendRegisterSecondaryTransportNAck(
+ ConnectionID connection_id,
+ ConnectionID primary_transport_connection_id,
+ uint8_t session_id,
+ BsonObject* reason) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // If mobile sends an invalid session ID and we cannot find out the Connection
+ // ID of primary transport, then we use version 5. (The multiple-transports
+ // feature is added in 5.1.0.)
+ uint8_t protocol_version = PROTOCOL_VERSION_5;
+ if (primary_transport_connection_id > 0) {
+ // acquire the protocol version from primary transport
+ if (!session_observer_.ProtocolVersionUsed(
+ primary_transport_connection_id, session_id, protocol_version)) {
+ LOG4CXX_WARN(logger_,
+ "Failed to acquire protocol version for "
+ "RegisterSecondaryTransportNAck");
+ return RESULT_FAIL;
+ }
+ }
+
+ ProtocolFramePtr ptr(new protocol_handler::ProtocolPacket(
+ connection_id,
+ protocol_version,
+ PROTECTION_OFF,
+ FRAME_TYPE_CONTROL,
+ SERVICE_TYPE_CONTROL,
+ FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_NACK,
+ session_id,
+ 0u,
+ 2));
+
+ if (reason) {
+ uint8_t* payloadBytes = bson_object_to_bytes(reason);
+ ptr->set_data(payloadBytes, bson_object_size(reason));
+ free(payloadBytes);
+ }
+
+ raw_ford_messages_to_mobile_.PostMessage(
+ impl::RawFordMessageToMobile(ptr, false));
+ return RESULT_OK;
+}
+
void ProtocolHandlerImpl::SendHeartBeat(int32_t connection_id,
uint8_t session_id) {
LOG4CXX_AUTO_TRACE(logger_);
@@ -857,6 +1100,12 @@ void ProtocolHandlerImpl::OnConnectionClosed(
multiframe_builder_.RemoveConnection(connection_id);
}
+void ProtocolHandlerImpl::OnUnexpectedDisconnect(
+ const transport_manager::ConnectionUID connection_id,
+ const transport_manager::CommunicationError& error) {
+ OnConnectionClosed(connection_id);
+}
+
void ProtocolHandlerImpl::NotifyOnFailedHandshake() {
LOG4CXX_AUTO_TRACE(logger_);
#ifdef ENABLE_SECURITY
@@ -864,6 +1113,72 @@ void ProtocolHandlerImpl::NotifyOnFailedHandshake() {
#endif // ENABLE_SECURITY
}
+void ProtocolHandlerImpl::OnTransportConfigUpdated(
+ const transport_manager::transport_adapter::TransportConfig& configs) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ transport_manager::transport_adapter::TransportConfig::const_iterator it =
+ configs.find(transport_manager::transport_adapter::tc_enabled);
+ if (configs.end() == it) {
+ LOG4CXX_WARN(logger_, "No enabled field in OnTransportConfigUpdated");
+ return;
+ }
+
+ bool tcp_enabled = (0 == strcmp("true", it->second.c_str()));
+ std::string tcp_port;
+
+ if (tcp_enabled) {
+ it = configs.find(transport_manager::transport_adapter::tc_tcp_port);
+ if (configs.end() == it) {
+ LOG4CXX_WARN(logger_, "No port field in OnTransportConfigUpdated");
+ return;
+ }
+ tcp_port = it->second;
+
+ it = configs.find(transport_manager::transport_adapter::tc_tcp_ip_address);
+ if (configs.end() == it) {
+ LOG4CXX_WARN(logger_, "No IP address field in OnTransportConfigUpdated");
+ return;
+ }
+ tcp_enabled_ = true;
+ tcp_port_ = tcp_port;
+ tcp_ip_address_ = it->second;
+ } else {
+ tcp_enabled_ = false;
+ tcp_port_.clear();
+ tcp_ip_address_.clear();
+ }
+
+ LOG4CXX_INFO(logger_,
+ "OnTransportConfigUpdated: new config enabled is "
+ << tcp_enabled_ << ". Port is " << tcp_port_
+ << ". IP Address is " << tcp_ip_address_);
+
+ // Walk the SessionConnection map and find all sessions that need a
+ // TransportUpdate Event. Sessions flagged with kDisabledSecondary in their
+ // secondary transport are ineligible for secondary transport, and
+ // therefore don't get this event.
+ DataAccessor<connection_handler::SessionConnectionMap>
+ session_connection_map_accessor =
+ connection_handler_.session_connection_map();
+ const connection_handler::SessionConnectionMap& session_connection_map =
+ session_connection_map_accessor.GetData();
+ connection_handler::SessionConnectionMap::const_iterator itr =
+ session_connection_map.begin();
+ while (itr != session_connection_map.end()) {
+ const connection_handler::SessionTransports st = itr->second;
+ LOG4CXX_INFO(logger_,
+ "OnTransportConfigUpdated found session "
+ << itr->first << " with primary connection "
+ << st.primary_transport << " and secondary connection "
+ << st.secondary_transport);
+ if (st.secondary_transport != kDisabledSecondary) {
+ SendTransportUpdateEvent(st.primary_transport, itr->first);
+ }
+ itr++;
+ }
+}
+
RESULT_CODE ProtocolHandlerImpl::SendFrame(const ProtocolFramePtr packet) {
LOG4CXX_AUTO_TRACE(logger_);
if (!packet) {
@@ -1048,6 +1363,13 @@ RESULT_CODE ProtocolHandlerImpl::HandleSingleFrameMessage(
<< packet->data_size() << "; message "
<< ConvertPacketDataToString(packet->data(), packet->data_size()));
+ // Replace a potential secondary transport ID in the packet with the primary
+ // transport ID
+ const connection_handler::SessionTransports st =
+ connection_handler_.GetSessionTransports(packet->session_id());
+ if (st.primary_transport != 0) {
+ packet->set_connection_id(st.primary_transport);
+ }
const uint32_t connection_key = session_observer_.KeyFromPair(
packet->connection_id(), packet->session_id());
@@ -1080,6 +1402,14 @@ RESULT_CODE ProtocolHandlerImpl::HandleMultiFrameMessage(
const ProtocolFramePtr packet) {
LOG4CXX_AUTO_TRACE(logger_);
+ // Replace a potential secondary transport ID in the packet with the primary
+ // transport ID
+ const connection_handler::SessionTransports st =
+ connection_handler_.GetSessionTransports(packet->session_id());
+ if (st.primary_transport != 0) {
+ packet->set_connection_id(st.primary_transport);
+ }
+
if (multiframe_builder_.AddFrame(packet) != RESULT_OK) {
LOG4CXX_WARN(logger_, "Frame assembling issue");
}
@@ -1117,6 +1447,10 @@ RESULT_CODE ProtocolHandlerImpl::HandleControlMessage(
<< packet->connection_id());
return RESULT_OK;
}
+ case FRAME_DATA_REGISTER_SECONDARY_TRANSPORT: {
+ LOG4CXX_TRACE(logger_, "FrameData: RegisterSecondaryTransport");
+ return HandleControlMessageRegisterSecondaryTransport(packet);
+ }
default:
LOG4CXX_WARN(logger_,
"Control message of type "
@@ -1401,6 +1735,11 @@ RESULT_CODE ProtocolHandlerImpl::HandleControlMessageStartSession(
const ConnectionID connection_id = packet->connection_id();
const uint8_t session_id = packet->session_id();
+ LOG4CXX_INFO(logger_,
+ "StartSession ID " << static_cast<int>(session_id)
+ << " and Connection ID "
+ << static_cast<int>(connection_id));
+
{
sync_primitives::AutoLock auto_lock(start_session_frame_map_lock_);
start_session_frame_map_[std::make_pair(connection_id, session_id)] =
@@ -1414,6 +1753,50 @@ RESULT_CODE ProtocolHandlerImpl::HandleControlMessageStartSession(
return RESULT_OK;
}
+RESULT_CODE ProtocolHandlerImpl::HandleControlMessageRegisterSecondaryTransport(
+ const ProtocolFramePtr packet) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ const uint8_t session_id = packet->session_id();
+ const ConnectionID connection_id = packet->connection_id();
+ ConnectionID primary_connection_id = 0;
+
+ LOG4CXX_INFO(logger_,
+ "RegisterSecondaryTransport ID "
+ << static_cast<int>(session_id) << " and Connection ID "
+ << static_cast<int>(connection_id));
+
+ if (connection_handler_.OnSecondaryTransportStarted(
+ primary_connection_id, connection_id, session_id)) {
+ SendRegisterSecondaryTransportAck(
+ connection_id, primary_connection_id, session_id);
+ } else {
+ char reason[256];
+ BsonObject registerSecondaryTransportNackObj;
+ bson_object_initialize_default(&registerSecondaryTransportNackObj);
+ if (0 == session_id) {
+ strncpy(reason,
+ "RegisterSecondaryTransport MUST include a non-zero session ID",
+ 255);
+ } else if (primary_connection_id == 0) {
+ strncpy(reason, "RegisterSecondaryTransport session ID not found", 255);
+ } else {
+ strncpy(
+ reason,
+ "RegisterSecondaryTransport session ID has already been registered",
+ 255);
+ }
+ bson_object_put_string(
+ &registerSecondaryTransportNackObj, strings::reason, reason);
+ SendRegisterSecondaryTransportNAck(connection_id,
+ primary_connection_id,
+ session_id,
+ &registerSecondaryTransportNackObj);
+ bson_object_deinitialize(&registerSecondaryTransportNackObj);
+ }
+
+ return RESULT_OK;
+}
+
void ProtocolHandlerImpl::NotifySessionStartedResult(
int32_t connection_id,
uint8_t session_id,
@@ -1423,6 +1806,7 @@ void ProtocolHandlerImpl::NotifySessionStartedResult(
std::vector<std::string>& rejected_params) {
LOG4CXX_AUTO_TRACE(logger_);
protocol_handler::SessionContext context(connection_id,
+ connection_id,
session_id,
generated_session_id,
ServiceType::kInvalidServiceType,
@@ -1989,4 +2373,241 @@ uint8_t ProtocolHandlerImpl::SupportedSDLProtocolVersion() const {
LOG4CXX_AUTO_TRACE(logger_);
return get_settings().max_supported_protocol_version();
}
+
+const impl::TransportTypes transportTypes = {
+ std::make_pair(
+ std::string("AOA_USB"),
+ impl::TransportDescription(impl::TransportType::TT_USB, false, true)),
+ std::make_pair(std::string("SPP_BLUETOOTH"),
+ impl::TransportDescription(
+ impl::TransportType::TT_BLUETOOTH, false, true)),
+ std::make_pair(std::string("IAP_BLUETOOTH"),
+ impl::TransportDescription(
+ impl::TransportType::TT_BLUETOOTH, true, false)),
+ std::make_pair(
+ std::string("IAP_USB"),
+ impl::TransportDescription(impl::TransportType::TT_USB, true, false)),
+ std::make_pair(
+ std::string("TCP_WIFI"),
+ impl::TransportDescription(impl::TransportType::TT_WIFI, true, true)),
+ std::make_pair(
+ std::string("IAP_USB_HOST_MODE"),
+ impl::TransportDescription(impl::TransportType::TT_USB, true, false)),
+ std::make_pair(
+ std::string("IAP_USB_DEVICE_MODE"),
+ impl::TransportDescription(impl::TransportType::TT_USB, true, false)),
+ std::make_pair(
+ std::string("IAP_CARPLAY"),
+ impl::TransportDescription(impl::TransportType::TT_WIFI, true, false))};
+
+const impl::TransportDescription
+ProtocolHandlerImpl::GetTransportTypeFromConnectionType(
+ const std::string& connection_type) const {
+ impl::TransportDescription result =
+ impl::TransportDescription(impl::TransportType::TT_NONE, false, false);
+ impl::TransportTypes::const_iterator it =
+ transportTypes.find(connection_type);
+ if (it != transportTypes.end()) {
+ result = it->second;
+ } else {
+ LOG4CXX_ERROR(logger_, "Unknown connection type " << connection_type);
+ }
+
+ return result;
+}
+
+const bool ProtocolHandlerImpl::ParseSecondaryTransportConfiguration(
+ const ConnectionID connection_id,
+ std::vector<std::string>& secondaryTransports,
+ std::vector<int32_t>& audioServiceTransports,
+ std::vector<int32_t>& videoServiceTransports) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+ std::vector<std::string> secondary_transport_types;
+
+ // First discover what the connection type of the primary transport is
+ // and look up the allowed secondary transports for that primary transport
+ const std::string connection_type =
+ session_observer_.TransportTypeProfileStringFromConnHandle(connection_id);
+ const impl::TransportDescription td =
+ GetTransportTypeFromConnectionType(connection_type);
+ if (settings_.multiple_transports_enabled()) {
+ if (td.transport_type_ == impl::TransportType::TT_USB) {
+ secondary_transport_types = settings_.secondary_transports_for_usb();
+ } else if (td.transport_type_ == impl::TransportType::TT_BLUETOOTH) {
+ secondary_transport_types =
+ settings_.secondary_transports_for_bluetooth();
+ } else if (td.transport_type_ == impl::TransportType::TT_WIFI) {
+ secondary_transport_types = settings_.secondary_transports_for_wifi();
+ } else {
+ LOG4CXX_ERROR(
+ logger_,
+ "Bad or unknown device type in ParseSecondaryTransportConfiguration");
+ return false;
+ }
+ }
+ // note: even if settings_.multiple_transports_enabled() is false, we still
+ // send out an empty "secondaryTransports" parameter, along with
+ // "videoServiceTransports" and "audioServiceTransports" params which are
+ // useful without secondary transport.
+
+ // Then, generate the "secondaryTransports" array for the StartSession ACK
+ GenerateSecondaryTransportsForStartSessionAck(secondary_transport_types,
+ td.ios_transport_,
+ td.android_transport_,
+ secondaryTransports);
+
+ // Next, figure out which connections audio or video services are allowed on
+ GenerateServiceTransportsForStartSessionAck(
+ settings_.multiple_transports_enabled(),
+ settings_.audio_service_transports(),
+ connection_type,
+ td.transport_type_,
+ secondary_transport_types,
+ audioServiceTransports);
+
+ GenerateServiceTransportsForStartSessionAck(
+ settings_.multiple_transports_enabled(),
+ settings_.video_service_transports(),
+ connection_type,
+ td.transport_type_,
+ secondary_transport_types,
+ videoServiceTransports);
+
+ return true;
+}
+
+void ProtocolHandlerImpl::GenerateSecondaryTransportsForStartSessionAck(
+ const std::vector<std::string>& secondary_transport_types,
+ bool device_is_ios,
+ bool device_is_android,
+ std::vector<std::string>& secondaryTransports) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // Parse the "secondary_transport_types" vector (which comes from
+ // smartDeviceLink.ini). For each entry in the vector, add an
+ // appropriate string to the secondaryTransports
+ std::vector<std::string>::const_iterator it =
+ secondary_transport_types.begin();
+ while (it != secondary_transport_types.end()) {
+ const utils::custom_string::CustomString transport_type(*it);
+ if (transport_type.CompareIgnoreCase("USB")) {
+ if (device_is_ios) {
+ LOG4CXX_TRACE(
+ logger_,
+ "Adding IAP_USB to secondaryTransports for StartSessionAck");
+ secondaryTransports.push_back("IAP_USB");
+ }
+ if (device_is_android) {
+ LOG4CXX_TRACE(
+ logger_,
+ "Adding AOA_USB to secondaryTransports for StartSessionAck");
+ secondaryTransports.push_back("AOA_USB");
+ }
+ } else if (transport_type.CompareIgnoreCase("Bluetooth")) {
+ if (device_is_ios) {
+ LOG4CXX_TRACE(
+ logger_,
+ "Adding IAP_BLUETOOTH to secondaryTransports for StartSessionAck");
+ secondaryTransports.push_back("IAP_BLUETOOTH");
+ }
+ if (device_is_android) {
+ LOG4CXX_TRACE(
+ logger_,
+ "Adding SPP_BLUETOOTH to secondaryTransports for StartSessionAck");
+ secondaryTransports.push_back("SPP_BLUETOOTH");
+ }
+ }
+ if (transport_type.CompareIgnoreCase("WiFi")) {
+ LOG4CXX_TRACE(
+ logger_,
+ "Adding TCP_WIFI to secondaryTransports for StartSessionAck");
+ secondaryTransports.push_back("TCP_WIFI");
+ }
+
+ it++;
+ }
+}
+
+void ProtocolHandlerImpl::GenerateServiceTransportsForStartSessionAck(
+ bool secondary_enabled,
+ const std::vector<std::string>& service_transports,
+ const std::string& primary_connection_type,
+ const impl::TransportType primary_transport_type,
+ const std::vector<std::string>& secondary_transport_types,
+ std::vector<int32_t>& serviceTransports) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (service_transports.size() == 0) {
+ if (secondary_enabled && !secondary_transport_types.empty()) {
+ LOG4CXX_TRACE(logger_,
+ "Empty Service Transports. Allowing service to run on both "
+ "connections");
+ serviceTransports.push_back(1);
+ serviceTransports.push_back(2);
+ } else {
+ serviceTransports.push_back(1);
+ }
+ } else {
+ bool fPrimaryAdded = false;
+ bool fSecondaryAdded = false;
+ std::vector<std::string>::const_iterator it = service_transports.begin();
+ for (; it != service_transports.end(); it++) {
+ const utils::custom_string::CustomString transport(*it);
+ LOG4CXX_TRACE(logger_,
+ "Service Allowed to run on " << transport.c_str()
+ << " transport");
+
+ if (!fPrimaryAdded &&
+ (transport.CompareIgnoreCase(primary_connection_type.c_str()) ||
+ (transport.CompareIgnoreCase("IAP_USB") &&
+ primary_transport_type == impl::TransportType::TT_USB))) {
+ LOG4CXX_TRACE(logger_, "Service allowed on primary transport");
+ serviceTransports.push_back(1);
+ fPrimaryAdded = true;
+ }
+
+ if (!fSecondaryAdded) {
+ const utils::custom_string::CustomString transport_type(
+ TransportTypeFromTransport(transport));
+ std::vector<std::string>::const_iterator found =
+ std::find_if(secondary_transport_types.begin(),
+ secondary_transport_types.end(),
+ [&](const std::string& secondary_transport_type) {
+ return transport_type.CompareIgnoreCase(
+ secondary_transport_type.c_str());
+ });
+ if (found != secondary_transport_types.end()) {
+ LOG4CXX_TRACE(logger_, "Service allowed on secondary transport");
+ serviceTransports.push_back(2);
+ fSecondaryAdded = true;
+ }
+ }
+
+ if (fPrimaryAdded && fSecondaryAdded) {
+ break;
+ }
+ }
+ }
+}
+
+const std::string ProtocolHandlerImpl::TransportTypeFromTransport(
+ const utils::custom_string::CustomString& transport) const {
+ std::string transport_type;
+
+ if (transport.CompareIgnoreCase("IAP_BLUETOOTH") ||
+ transport.CompareIgnoreCase("SPP_BLUETOOTH")) {
+ transport_type = "Bluetooth";
+ } else if (transport.CompareIgnoreCase("IAP_USB") ||
+ transport.CompareIgnoreCase("AOA_USB") ||
+ transport.CompareIgnoreCase("IAP_USB_HOST_MODE") ||
+ transport.CompareIgnoreCase("IAP_USB_DEVICE_MODE")) {
+ transport_type = "USB";
+ } else if (transport.CompareIgnoreCase("TCP_WIFI") ||
+ transport.CompareIgnoreCase("IAP_CARPLAY")) {
+ transport_type = "WiFi";
+ }
+
+ return transport_type;
+}
+
} // namespace protocol_handler
diff --git a/src/components/protocol_handler/src/protocol_packet.cc b/src/components/protocol_handler/src/protocol_packet.cc
index a490916c99..3cd9e7f781 100644
--- a/src/components/protocol_handler/src/protocol_packet.cc
+++ b/src/components/protocol_handler/src/protocol_packet.cc
@@ -304,8 +304,8 @@ RESULT_CODE ProtocolPacket::ProtocolHeaderValidator::validate(
// Check frame info for each frame type
// Frame type shall be 0x00 (Control), 0x01 (Single), 0x02 (First), 0x03
// (Consecutive)
- // For Control frames Frame info value shall be from 0x00 to 0x06 or 0xFE(Data
- // Ack), 0xFF(HB Ack)
+ // For Control frames Frame info value shall be from 0x00 to 0x09 or
+ // 0xFD(Transport Event Update), 0xFE(Data Ack), 0xFF(HB Ack)
// For Single and First frames Frame info value shall be equal 0x00
switch (header.frameType) {
case FRAME_TYPE_CONTROL: {
@@ -317,6 +317,10 @@ RESULT_CODE ProtocolPacket::ProtocolHeaderValidator::validate(
case FRAME_DATA_END_SERVICE:
case FRAME_DATA_END_SERVICE_ACK:
case FRAME_DATA_END_SERVICE_NACK:
+ case FRAME_DATA_REGISTER_SECONDARY_TRANSPORT:
+ case FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_ACK:
+ case FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_NACK:
+ case FRAME_DATA_TRANSPORT_EVENT_UPDATE:
case FRAME_DATA_SERVICE_DATA_ACK:
case FRAME_DATA_HEART_BEAT_ACK:
break;
@@ -642,6 +646,10 @@ ConnectionID ProtocolPacket::connection_id() const {
return connection_id_;
}
+void ProtocolPacket::set_connection_id(ConnectionID connection_id) {
+ connection_id_ = connection_id;
+}
+
uint32_t ProtocolPacket::payload_size() const {
return payload_size_;
}
diff --git a/src/components/protocol_handler/test/incoming_data_handler_test.cc b/src/components/protocol_handler/test/incoming_data_handler_test.cc
index d0a311583c..393579927c 100644
--- a/src/components/protocol_handler/test/incoming_data_handler_test.cc
+++ b/src/components/protocol_handler/test/incoming_data_handler_test.cc
@@ -393,13 +393,13 @@ TEST_F(IncomingDataHandlerTest, MalformedPacket_FrameType) {
}
}
-// For Control frames Frame info value shall be from 0x00 to 0x06 or 0xFE(Data
-// Ack), 0xFF(HB Ack)
+// For Control frames Frame info value shall be from 0x00 to 0x09 or 0xFD
+// (Transport Update Event), 0xFE(Data Ack), 0xFF(HB Ack)
TEST_F(IncomingDataHandlerTest, MalformedPacket_ControlFrame) {
FrameList malformed_packets;
std::vector<uint8_t> malformed_frame_data;
- for (uint8_t frame_type = FRAME_DATA_END_SERVICE_NACK + 1;
- frame_type < FRAME_DATA_SERVICE_DATA_ACK;
+ for (uint8_t frame_type = FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_NACK + 1;
+ frame_type < FRAME_DATA_TRANSPORT_EVENT_UPDATE;
++frame_type) {
malformed_frame_data.push_back(frame_type);
}
diff --git a/src/components/protocol_handler/test/protocol_handler_tm_test.cc b/src/components/protocol_handler/test/protocol_handler_tm_test.cc
index 0cb8e155d0..2e06cd702e 100644
--- a/src/components/protocol_handler/test/protocol_handler_tm_test.cc
+++ b/src/components/protocol_handler/test/protocol_handler_tm_test.cc
@@ -41,6 +41,7 @@
#include "protocol_handler/mock_protocol_handler_settings.h"
#include "protocol_handler/mock_session_observer.h"
#include "connection_handler/mock_connection_handler.h"
+#include "connection_handler/connection_handler_impl.h"
#ifdef ENABLE_SECURITY
#include "security_manager/mock_security_manager.h"
#include "security_manager/mock_ssl_context.h"
@@ -51,6 +52,15 @@
#include "utils/test_async_waiter.h"
#include <bson_object.h>
+namespace transport_manager {
+namespace transport_adapter {
+// taken from transport_adapter_impl.cc
+const char* tc_enabled = "enabled";
+const char* tc_tcp_port = "tcp_port";
+const char* tc_tcp_ip_address = "tcp_ip_address";
+}
+}
+
namespace test {
namespace components {
namespace protocol_handler_test {
@@ -88,6 +98,10 @@ using protocol_handler::FRAME_DATA_SERVICE_DATA_ACK;
using protocol_handler::FRAME_DATA_SINGLE;
using protocol_handler::FRAME_DATA_FIRST;
using protocol_handler::FRAME_DATA_LAST_CONSECUTIVE;
+using protocol_handler::FRAME_DATA_REGISTER_SECONDARY_TRANSPORT;
+using protocol_handler::FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_ACK;
+using protocol_handler::FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_NACK;
+using protocol_handler::FRAME_DATA_TRANSPORT_EVENT_UPDATE;
using protocol_handler::kRpc;
using protocol_handler::kControl;
using protocol_handler::kAudio;
@@ -108,10 +122,12 @@ using ContextCreationStrategy =
using connection_handler::DeviceHandle;
// Google Testing Framework Entities
using ::testing::Return;
+using ::testing::ReturnRef;
using ::testing::ReturnRefOfCopy;
using ::testing::ReturnNull;
using ::testing::An;
using ::testing::AnyOf;
+using ::testing::AtLeast;
using ::testing::ByRef;
using ::testing::DoAll;
using ::testing::SaveArg;
@@ -190,6 +206,9 @@ class ProtocolHandlerImplTest : public ::testing::Test {
.
// Return false to avoid call KeepConnectionAlive
WillRepeatedly(Return(false));
+
+ session_connection_map_lock_ptr_ =
+ std::make_shared<sync_primitives::Lock>();
}
void TearDown() OVERRIDE {
@@ -216,6 +235,7 @@ class ProtocolHandlerImplTest : public ::testing::Test {
const uint32_t hash_id,
const bool protection_flag) {
return protocol_handler::SessionContext(connection_id,
+ connection_id,
initial_session_id,
new_session_id,
service_type,
@@ -320,10 +340,11 @@ class ProtocolHandlerImplTest : public ::testing::Test {
uint8_t service_type,
uint8_t sessionId,
uint32_t frame_data,
+ uint8_t protocol_version = PROTOCOL_VERSION_3,
uint32_t dataSize = 0u,
const uint8_t* data = NULL) {
SendTMMessage(connection_id,
- PROTOCOL_VERSION_3,
+ protocol_version,
protection,
FRAME_TYPE_CONTROL,
service_type,
@@ -334,6 +355,18 @@ class ProtocolHandlerImplTest : public ::testing::Test {
data);
}
+ void VerifySecondaryTransportParamsInStartSessionAck(
+ bool config_multiple_transports_enabled,
+ const std::vector<std::string>& config_secondary_transports_for_usb,
+ const std::vector<std::string>& config_secondary_transports_for_bluetooth,
+ const std::vector<std::string>& config_secondary_transports_for_wifi,
+ const std::vector<std::string>& config_audio_service_transports,
+ const std::vector<std::string>& config_video_service_transports,
+ const std::string& connection_type_string,
+ const std::vector<std::string>& expected_transport_strings,
+ const std::vector<int32_t>& expected_audio_service_transports,
+ const std::vector<int32_t>& expected_video_service_transports);
+
testing::NiceMock<MockProtocolHandlerSettings> protocol_handler_settings_mock;
::utils::SharedPtr<ProtocolHandlerImpl> protocol_handler_impl;
TransportManagerListener* tm_listener;
@@ -360,6 +393,10 @@ class ProtocolHandlerImplTest : public ::testing::Test {
std::vector<int> force_unprotected_services;
#endif // ENABLE_SECURITY
std::vector<std::string> empty_rejected_param_;
+ // Used by OnTransportConfigUpdated() tests. The lifetime of these objects
+ // should be longer than that of a test case.
+ connection_handler::SessionConnectionMap session_connection_map_;
+ std::shared_ptr<sync_primitives::Lock> session_connection_map_lock_ptr_;
};
#ifdef ENABLE_SECURITY
@@ -1485,6 +1522,1131 @@ TEST_F(ProtocolHandlerImplTest,
}
#endif // ENABLE_SECURITY
+void ProtocolHandlerImplTest::VerifySecondaryTransportParamsInStartSessionAck(
+ bool config_multiple_transports_enabled,
+ const std::vector<std::string>& config_secondary_transports_for_usb,
+ const std::vector<std::string>& config_secondary_transports_for_bluetooth,
+ const std::vector<std::string>& config_secondary_transports_for_wifi,
+ const std::vector<std::string>& config_audio_service_transports,
+ const std::vector<std::string>& config_video_service_transports,
+ const std::string& connection_type_string,
+ const std::vector<std::string>& expected_transport_strings,
+ const std::vector<int32_t>& expected_audio_service_transports,
+ const std::vector<int32_t>& expected_video_service_transports) {
+ const size_t maximum_rpc_payload_size = 1500;
+ EXPECT_CALL(protocol_handler_settings_mock, maximum_rpc_payload_size())
+ .WillRepeatedly(Return(maximum_rpc_payload_size));
+ InitProtocolHandlerImpl(0u, 0u);
+
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+
+ const uint8_t input_protocol_version = 5;
+ const uint32_t hash_id = 123456;
+ ProtocolPacket::ProtocolVersion full_version(5, 1, 0);
+ char full_version_string[] = "5.1.0";
+
+ // configuration setup
+ EXPECT_CALL(protocol_handler_settings_mock, max_supported_protocol_version())
+ .WillRepeatedly(Return(PROTOCOL_VERSION_5));
+ EXPECT_CALL(protocol_handler_settings_mock, multiple_transports_enabled())
+ .WillRepeatedly(Return(config_multiple_transports_enabled));
+ EXPECT_CALL(protocol_handler_settings_mock, secondary_transports_for_usb())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_usb));
+ EXPECT_CALL(protocol_handler_settings_mock,
+ secondary_transports_for_bluetooth())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_bluetooth));
+ EXPECT_CALL(protocol_handler_settings_mock, secondary_transports_for_wifi())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_wifi));
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(config_audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(config_video_service_transports));
+
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillRepeatedly(Return(connection_type_string));
+
+ // Prepare expected BSON parameters. When we add another param in Start
+ // Service ACK frame in future, it should be also added here.
+ BsonObject expected_obj;
+ bson_object_initialize_default(&expected_obj);
+ // mtu
+ bson_object_put_int64(&expected_obj,
+ protocol_handler::strings::mtu,
+ static_cast<int64_t>(maximum_rpc_payload_size));
+ // hashId
+ bson_object_put_int32(&expected_obj,
+ protocol_handler::strings::hash_id,
+ static_cast<int32_t>(hash_id));
+ // protocolVersion
+ bson_object_put_string(&expected_obj,
+ protocol_handler::strings::protocol_version,
+ full_version_string);
+ // secondaryTransports
+ BsonArray secondary_transports;
+ bson_array_initialize(&secondary_transports,
+ expected_transport_strings.size());
+ for (std::vector<std::string>::const_iterator it =
+ expected_transport_strings.begin();
+ it != expected_transport_strings.end();
+ ++it) {
+ // note: if there is no transport allowed, we can either make the array
+ // empty, or completely omit the array. (The spec allows both cases.) In
+ // this test case we make the array empty.
+ bson_array_add_string(&secondary_transports,
+ const_cast<char*>(it->c_str()));
+ }
+ bson_object_put_array(&expected_obj,
+ protocol_handler::strings::secondary_transports,
+ &secondary_transports);
+ // audioServiceTransports
+ BsonArray audio_service_transports;
+ if (expected_audio_service_transports.size() > 0) {
+ bson_array_initialize(&audio_service_transports,
+ expected_audio_service_transports.size());
+ for (std::vector<int32_t>::const_iterator it =
+ expected_audio_service_transports.begin();
+ it != expected_audio_service_transports.end();
+ ++it) {
+ bson_array_add_int32(&audio_service_transports, *it);
+ }
+ bson_object_put_array(&expected_obj,
+ protocol_handler::strings::audio_service_transports,
+ &audio_service_transports);
+ }
+ // videoServiceTransports
+ BsonArray video_service_transports;
+ if (expected_video_service_transports.size() > 0) {
+ bson_array_initialize(&video_service_transports,
+ expected_video_service_transports.size());
+ for (std::vector<int32_t>::const_iterator it =
+ expected_video_service_transports.begin();
+ it != expected_video_service_transports.end();
+ ++it) {
+ bson_array_add_int32(&video_service_transports, *it);
+ }
+ bson_object_put_array(&expected_obj,
+ protocol_handler::strings::video_service_transports,
+ &video_service_transports);
+ }
+
+ std::vector<uint8_t> expected_param =
+ CreateVectorFromBsonObject(&expected_obj);
+
+ bson_object_deinitialize(&expected_obj);
+
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK,
+ PROTECTION_OFF,
+ connection_id,
+ Eq(expected_param))))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+#ifdef ENABLE_SECURITY
+ AddSecurityManager();
+
+ EXPECT_CALL(session_observer_mock, KeyFromPair(connection_id, session_id))
+ .WillOnce(Return(connection_key));
+
+ EXPECT_CALL(session_observer_mock, GetSSLContext(connection_key, kRpc))
+ .WillOnce(ReturnNull());
+#endif // ENABLE_SECURITY
+
+ protocol_handler_impl->SendStartSessionAck(connection_id,
+ session_id,
+ input_protocol_version,
+ hash_id,
+ protocol_handler::SERVICE_TYPE_RPC,
+ false /* protection */,
+ full_version);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ StartSessionAck_SecondaryTransportParams_Enabled) {
+ // config allows secondary transport only when connected through Bluetooth,
+ // and the secondary is Wi-Fi
+ std::vector<std::string> secondary_transports_for_usb; // empty
+ std::vector<std::string> secondary_transports_for_bluetooth;
+ secondary_transports_for_bluetooth.push_back("WiFi");
+ std::vector<std::string> secondary_transports_for_wifi; // empty
+ // config allows video and audio services to run on all transports except
+ // Bluetooth
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("IAP_USB");
+ audio_service_transports.push_back("IAP_USB_HOST_MODE");
+ audio_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ audio_service_transports.push_back("IAP_CARPLAY");
+ audio_service_transports.push_back("AOA_USB");
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("IAP_USB");
+ video_service_transports.push_back("IAP_USB_HOST_MODE");
+ video_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ video_service_transports.push_back("IAP_CARPLAY");
+ video_service_transports.push_back("AOA_USB");
+ video_service_transports.push_back("TCP_WIFI");
+
+ // assume the device is Android and is connected through Bluetooth SPP
+ std::string connection_type_string("SPP_BLUETOOTH");
+
+ // Core should specify WiFi for secondary transport, and should allow video
+ // and audio services only on secondary transport
+ std::vector<std::string> expected_transport_strings;
+ expected_transport_strings.push_back("TCP_WIFI");
+ std::vector<int32_t> expected_audio_service_transports;
+ expected_audio_service_transports.push_back(2);
+ std::vector<int32_t> expected_video_service_transports;
+ expected_video_service_transports.push_back(2);
+
+ // A TransportUpdateEvent is also issued after Start Service ACK. We don't
+ // check it in this test case.
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(Return(false));
+
+ VerifySecondaryTransportParamsInStartSessionAck(
+ true,
+ secondary_transports_for_usb,
+ secondary_transports_for_bluetooth,
+ secondary_transports_for_wifi,
+ audio_service_transports,
+ video_service_transports,
+ connection_type_string,
+ expected_transport_strings,
+ expected_audio_service_transports,
+ expected_video_service_transports);
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ StartSessionAck_SecondaryTransportParams_NoSecondaryTransport) {
+ // config allows secondary transport only when connected through Bluetooth,
+ // and the secondary is Wi-Fi
+ std::vector<std::string> secondary_transports_for_usb; // empty
+ std::vector<std::string> secondary_transports_for_bluetooth;
+ secondary_transports_for_bluetooth.push_back("WiFi");
+ std::vector<std::string> secondary_transports_for_wifi; // empty
+ // config allows video and audio services to run on all transports except
+ // Bluetooth
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("IAP_USB");
+ audio_service_transports.push_back("IAP_USB_HOST_MODE");
+ audio_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ audio_service_transports.push_back("IAP_CARPLAY");
+ audio_service_transports.push_back("AOA_USB");
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("IAP_USB");
+ video_service_transports.push_back("IAP_USB_HOST_MODE");
+ video_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ video_service_transports.push_back("IAP_CARPLAY");
+ video_service_transports.push_back("AOA_USB");
+ video_service_transports.push_back("TCP_WIFI");
+
+ // assume the device is iOS and is connected through iAP over USB
+ std::string connection_type_string("IAP_USB");
+
+ // Core should not offer any secondary transport. It will allow both video
+ // and audio services on primary transport.
+ std::vector<std::string> expected_transport_strings; // empty
+ std::vector<int32_t> expected_audio_service_transports;
+ expected_audio_service_transports.push_back(1);
+ std::vector<int32_t> expected_video_service_transports;
+ expected_video_service_transports.push_back(1);
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(Return(false));
+
+ VerifySecondaryTransportParamsInStartSessionAck(
+ true,
+ secondary_transports_for_usb,
+ secondary_transports_for_bluetooth,
+ secondary_transports_for_wifi,
+ audio_service_transports,
+ video_service_transports,
+ connection_type_string,
+ expected_transport_strings,
+ expected_audio_service_transports,
+ expected_video_service_transports);
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ StartSessionAck_SecondaryTransportParams_MultipleSecondaryTransports) {
+ // config allows secondary transport only when connected through Bluetooth,
+ // and the secondary is Wi-Fi and USB
+ std::vector<std::string> secondary_transports_for_usb; // empty
+ std::vector<std::string> secondary_transports_for_bluetooth;
+ secondary_transports_for_bluetooth.push_back("WiFi");
+ secondary_transports_for_bluetooth.push_back("USB");
+ std::vector<std::string> secondary_transports_for_wifi; // empty
+ // config allows video and audio services to run on all transports except
+ // Bluetooth
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("IAP_USB");
+ audio_service_transports.push_back("IAP_USB_HOST_MODE");
+ audio_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ audio_service_transports.push_back("IAP_CARPLAY");
+ audio_service_transports.push_back("AOA_USB");
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("IAP_USB");
+ video_service_transports.push_back("IAP_USB_HOST_MODE");
+ video_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ video_service_transports.push_back("IAP_CARPLAY");
+ video_service_transports.push_back("AOA_USB");
+ video_service_transports.push_back("TCP_WIFI");
+
+ // assume the device is iOS and is connected through iAP over Bluetooth
+ std::string connection_type_string("IAP_BLUETOOTH");
+
+ // Core should offer both Wi-Fi and USB for secondary transport. Since the
+ // device is iOS, Core should specify "IAP_USB".
+ std::vector<std::string> expected_transport_strings;
+ expected_transport_strings.push_back("TCP_WIFI");
+ expected_transport_strings.push_back("IAP_USB");
+ std::vector<int32_t> expected_audio_service_transports;
+ expected_audio_service_transports.push_back(2);
+ std::vector<int32_t> expected_video_service_transports;
+ expected_video_service_transports.push_back(2);
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(Return(false));
+
+ VerifySecondaryTransportParamsInStartSessionAck(
+ true,
+ secondary_transports_for_usb,
+ secondary_transports_for_bluetooth,
+ secondary_transports_for_wifi,
+ audio_service_transports,
+ video_service_transports,
+ connection_type_string,
+ expected_transport_strings,
+ expected_audio_service_transports,
+ expected_video_service_transports);
+}
+
+TEST_F(
+ ProtocolHandlerImplTest,
+ StartSessionAck_SecondaryTransportParams_ServiceAllowedOnBothTransports) {
+ std::vector<std::string> secondary_transports_for_usb;
+ secondary_transports_for_usb.push_back("WiFi");
+ std::vector<std::string> secondary_transports_for_bluetooth;
+ secondary_transports_for_bluetooth.push_back("USB");
+ std::vector<std::string> secondary_transports_for_wifi; // empty
+ // config allows video service to run on Wi-Fi transports only, and audio
+ // service to run on all transports
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("IAP_BLUETOOTH");
+ audio_service_transports.push_back("IAP_USB");
+ audio_service_transports.push_back("IAP_USB_HOST_MODE");
+ audio_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ audio_service_transports.push_back("IAP_CARPLAY");
+ audio_service_transports.push_back("SPP_BLUETOOTH");
+ audio_service_transports.push_back("AOA_USB");
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("IAP_CARPLAY");
+ video_service_transports.push_back("TCP_WIFI");
+
+ // assume the device is Android and is connected through AOA
+ std::string connection_type_string("AOA_USB");
+
+ // Core should offer Wi-Fi for secondary transport. It should allow audio
+ // service to run on both primary and secondary, while video service to run
+ // on secondary only. Since the list specifies AOA_USB then TCP_WIFI, the
+ // priority is primary > secondary.
+ std::vector<std::string> expected_transport_strings;
+ expected_transport_strings.push_back("TCP_WIFI");
+ std::vector<int32_t> expected_audio_service_transports;
+ expected_audio_service_transports.push_back(1); // primary preferred
+ expected_audio_service_transports.push_back(2);
+ std::vector<int32_t> expected_video_service_transports;
+ expected_video_service_transports.push_back(2);
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(Return(false));
+
+ VerifySecondaryTransportParamsInStartSessionAck(
+ true,
+ secondary_transports_for_usb,
+ secondary_transports_for_bluetooth,
+ secondary_transports_for_wifi,
+ audio_service_transports,
+ video_service_transports,
+ connection_type_string,
+ expected_transport_strings,
+ expected_audio_service_transports,
+ expected_video_service_transports);
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ StartSessionAck_SecondaryTransportParams_SecondaryDisabled) {
+ std::vector<std::string> secondary_transports_for_usb; // empty
+ std::vector<std::string> secondary_transports_for_bluetooth; // empty
+ std::vector<std::string> secondary_transports_for_wifi; // empty
+ // config allows video and audio services to run on all transports
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("IAP_BLUETOOTH");
+ audio_service_transports.push_back("IAP_USB");
+ audio_service_transports.push_back("IAP_USB_HOST_MODE");
+ audio_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ audio_service_transports.push_back("IAP_CARPLAY");
+ audio_service_transports.push_back("SPP_BLUETOOTH");
+ audio_service_transports.push_back("AOA_USB");
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("IAP_BLUETOOTH");
+ video_service_transports.push_back("IAP_USB");
+ video_service_transports.push_back("IAP_USB_HOST_MODE");
+ video_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ video_service_transports.push_back("IAP_CARPLAY");
+ video_service_transports.push_back("SPP_BLUETOOTH");
+ video_service_transports.push_back("AOA_USB");
+ video_service_transports.push_back("TCP_WIFI");
+
+ // assume the device is iOS and is connected through iAP over Bluetooth
+ std::string connection_type_string("IAP_BLUETOOTH");
+
+ // Core should not offer any secondary transport. It should still send
+ // the video/audio service transport lists.
+ std::vector<std::string> expected_transport_strings; // empty
+ std::vector<int32_t> expected_audio_service_transports;
+ expected_audio_service_transports.push_back(1);
+ std::vector<int32_t> expected_video_service_transports;
+ expected_video_service_transports.push_back(1);
+
+ connection_handler::SessionTransports dummy_st = {0, 0};
+ EXPECT_CALL(connection_handler_mock,
+ SetSecondaryTransportID(_, kDisabledSecondary))
+ .WillOnce(Return(dummy_st));
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(Return(false));
+
+ VerifySecondaryTransportParamsInStartSessionAck(
+ false, /* disabled */
+ secondary_transports_for_usb,
+ secondary_transports_for_bluetooth,
+ secondary_transports_for_wifi,
+ audio_service_transports,
+ video_service_transports,
+ connection_type_string,
+ expected_transport_strings,
+ expected_audio_service_transports,
+ expected_video_service_transports);
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ StartSessionAck_SecondaryTransportParams_ServicesMapEmpty) {
+ std::vector<std::string> secondary_transports_for_usb; // empty
+ std::vector<std::string> secondary_transports_for_bluetooth;
+ secondary_transports_for_bluetooth.push_back("USB");
+ std::vector<std::string> secondary_transports_for_wifi;
+ secondary_transports_for_wifi.push_back("USB");
+ // config does not specify video and audio services
+ std::vector<std::string> audio_service_transports; // empty
+ std::vector<std::string> video_service_transports; // empty
+
+ // assume the device is connected through Wi-Fi (so not sure if it's iOS or
+ // Android)
+ std::string connection_type_string("TCP_WIFI");
+
+ // Core should offer USB transport for secondary transport. (Since the OS type
+ // is unknown, it will offer both IAP_USB and AOA_USB.) Also, it should allow
+ // video/audio services on all transports.
+ std::vector<std::string> expected_transport_strings;
+ expected_transport_strings.push_back("IAP_USB");
+ expected_transport_strings.push_back("AOA_USB");
+ std::vector<int32_t> expected_audio_service_transports;
+ expected_audio_service_transports.push_back(1);
+ expected_audio_service_transports.push_back(2);
+ std::vector<int32_t> expected_video_service_transports;
+ expected_video_service_transports.push_back(1);
+ expected_video_service_transports.push_back(2);
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(Return(false));
+
+ VerifySecondaryTransportParamsInStartSessionAck(
+ true,
+ secondary_transports_for_usb,
+ secondary_transports_for_bluetooth,
+ secondary_transports_for_wifi,
+ audio_service_transports,
+ video_service_transports,
+ connection_type_string,
+ expected_transport_strings,
+ expected_audio_service_transports,
+ expected_video_service_transports);
+}
+
+TEST_F(
+ ProtocolHandlerImplTest,
+ StartSessionAck_SecondaryTransportParams_SecondaryDisabled_ServicesMapEmpty) {
+ std::vector<std::string> secondary_transports_for_usb; // empty
+ std::vector<std::string> secondary_transports_for_bluetooth; // empty
+ std::vector<std::string> secondary_transports_for_wifi; // empty
+ // config does not specify video and audio services
+ std::vector<std::string> audio_service_transports; // empty
+ std::vector<std::string> video_service_transports; // empty
+
+ std::string connection_type_string("IAP_BLUETOOTH");
+
+ // Core should not offer any secondary transport. It should still send
+ // the video/audio service transport lists.
+ std::vector<std::string> expected_transport_strings; // empty
+ std::vector<int32_t> expected_audio_service_transports;
+ expected_audio_service_transports.push_back(1);
+ std::vector<int32_t> expected_video_service_transports;
+ expected_video_service_transports.push_back(1);
+
+ connection_handler::SessionTransports dummy_st = {0, 0};
+ EXPECT_CALL(connection_handler_mock,
+ SetSecondaryTransportID(_, kDisabledSecondary))
+ .WillOnce(Return(dummy_st));
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(Return(false));
+
+ VerifySecondaryTransportParamsInStartSessionAck(
+ false, /* disabled */
+ secondary_transports_for_usb,
+ secondary_transports_for_bluetooth,
+ secondary_transports_for_wifi,
+ audio_service_transports,
+ video_service_transports,
+ connection_type_string,
+ expected_transport_strings,
+ expected_audio_service_transports,
+ expected_video_service_transports);
+}
+
+// Secondary transport param should not be included for apps with v5.0.0
+TEST_F(ProtocolHandlerImplTest,
+ StartSessionAck_Unprotected_NoSecondaryTransportParamsForV5) {
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+
+ const uint8_t input_protocol_version = 5;
+ const uint32_t hash_id = 123456;
+ ProtocolPacket::ProtocolVersion full_version(5, 0, 0);
+ char full_version_string[] = "5.0.0";
+
+ const size_t maximum_rpc_payload_size = 1500;
+ EXPECT_CALL(protocol_handler_settings_mock, maximum_rpc_payload_size())
+ .WillRepeatedly(Return(maximum_rpc_payload_size));
+ InitProtocolHandlerImpl(0u, 0u);
+
+ // configuration
+ std::vector<std::string> config_secondary_transports_for_usb; // empty
+ std::vector<std::string> config_secondary_transports_for_bluetooth;
+ config_secondary_transports_for_bluetooth.push_back("USB");
+ std::vector<std::string> config_secondary_transports_for_wifi;
+ config_secondary_transports_for_wifi.push_back("USB");
+
+ // assume the device is iOS and is connected through iAP over Bluetooth
+ std::string connection_type_string("IAP_BLUETOOTH");
+
+ // configuration setup
+ EXPECT_CALL(protocol_handler_settings_mock, max_supported_protocol_version())
+ .WillRepeatedly(Return(PROTOCOL_VERSION_5));
+ EXPECT_CALL(protocol_handler_settings_mock, multiple_transports_enabled())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(protocol_handler_settings_mock, secondary_transports_for_usb())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_usb));
+ EXPECT_CALL(protocol_handler_settings_mock,
+ secondary_transports_for_bluetooth())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_bluetooth));
+ EXPECT_CALL(protocol_handler_settings_mock, secondary_transports_for_wifi())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_wifi));
+
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillRepeatedly(Return(connection_type_string));
+
+ // BSON params should not include any of "secondaryTransports",
+ // "audioServiceTransports" and "videoServiceTransports" since v5.0.0 app
+ // does not understand them
+ BsonObject expected_obj;
+ bson_object_initialize_default(&expected_obj);
+ // mtu
+ bson_object_put_int64(&expected_obj,
+ protocol_handler::strings::mtu,
+ static_cast<int64_t>(maximum_rpc_payload_size));
+ // hashId
+ bson_object_put_int32(&expected_obj,
+ protocol_handler::strings::hash_id,
+ static_cast<int32_t>(hash_id));
+ // protocolVersion
+ bson_object_put_string(&expected_obj,
+ protocol_handler::strings::protocol_version,
+ full_version_string);
+
+ std::vector<uint8_t> expected_param =
+ CreateVectorFromBsonObject(&expected_obj);
+
+ bson_object_deinitialize(&expected_obj);
+
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_START_SERVICE_ACK,
+ PROTECTION_OFF,
+ connection_id,
+ Eq(expected_param))))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ connection_handler::SessionTransports dummy_st = {0, 0};
+ EXPECT_CALL(connection_handler_mock,
+ SetSecondaryTransportID(_, kDisabledSecondary))
+ .WillOnce(Return(dummy_st));
+
+ // Since the protocol version is less than 5.1.0, Core should not issue
+ // TransportEventUpdate frame. Enable ProtocolVersionUsed() call and verify
+ // that transport_manager_mock will NOT receive another SendMessageToDevice()
+ // call.
+ ON_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillByDefault(Return(true));
+
+#ifdef ENABLE_SECURITY
+ AddSecurityManager();
+
+ EXPECT_CALL(session_observer_mock, KeyFromPair(connection_id, session_id))
+ .WillOnce(Return(connection_key));
+
+ EXPECT_CALL(session_observer_mock, GetSSLContext(connection_key, kRpc))
+ .WillOnce(ReturnNull());
+#endif // ENABLE_SECURITY
+
+ protocol_handler_impl->SendStartSessionAck(connection_id,
+ session_id,
+ input_protocol_version,
+ hash_id,
+ protocol_handler::SERVICE_TYPE_RPC,
+ false /* protection */,
+ full_version);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
+TEST_F(ProtocolHandlerImplTest, StartSessionAck_PrimaryTransportUSBHostMode) {
+ // config allows secondary transport only when connected through Bluetooth,
+ // and the secondary is Wi-Fi
+ std::vector<std::string> secondary_transports_for_usb;
+ secondary_transports_for_usb.push_back("WiFi");
+ std::vector<std::string> secondary_transports_for_bluetooth; // empty
+ std::vector<std::string> secondary_transports_for_wifi; // empty
+ // config allows video and audio services to run on all transports except
+ // Bluetooth
+ std::vector<std::string> audio_service_transports;
+ audio_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ audio_service_transports.push_back("IAP_CARPLAY");
+ audio_service_transports.push_back("AOA_USB");
+ audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> video_service_transports;
+ video_service_transports.push_back("IAP_USB");
+ video_service_transports.push_back("IAP_CARPLAY");
+ video_service_transports.push_back("AOA_USB");
+ video_service_transports.push_back("TCP_WIFI");
+
+ // assume the device is IOS and is connected through USB Host Mode
+ std::string connection_type_string("IAP_USB_HOST_MODE");
+
+ // Core should specify WiFi for secondary transport, and should allow video
+ // services on both transports, and audio only on secondary transport
+ std::vector<std::string> expected_transport_strings;
+ expected_transport_strings.push_back("TCP_WIFI");
+ std::vector<int32_t> expected_audio_service_transports;
+ expected_audio_service_transports.push_back(2);
+ std::vector<int32_t> expected_video_service_transports;
+ expected_video_service_transports.push_back(1);
+ expected_video_service_transports.push_back(2);
+
+ // A TransportUpdateEvent is also issued after Start Service ACK. We don't
+ // check it in this test case.
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(Return(false));
+
+ VerifySecondaryTransportParamsInStartSessionAck(
+ true,
+ secondary_transports_for_usb,
+ secondary_transports_for_bluetooth,
+ secondary_transports_for_wifi,
+ audio_service_transports,
+ video_service_transports,
+ connection_type_string,
+ expected_transport_strings,
+ expected_audio_service_transports,
+ expected_video_service_transports);
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ TransportEventUpdate_afterVersionNegotiation_TCPEnabled) {
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+
+ const uint8_t input_protocol_version = 5;
+ const uint32_t hash_id = 123456;
+ ProtocolPacket::ProtocolVersion full_version(5, 1, 0);
+
+ const size_t maximum_rpc_payload_size = 1500;
+ EXPECT_CALL(protocol_handler_settings_mock, maximum_rpc_payload_size())
+ .WillRepeatedly(Return(maximum_rpc_payload_size));
+ InitProtocolHandlerImpl(0u, 0u);
+
+ // TCP configuration setup
+ bool tcp_enabled = true;
+ char tcp_address[] = "192.168.1.1";
+ int32_t tcp_port = 12345;
+ std::string tcp_port_str = "12345";
+ protocol_handler_impl->set_tcp_config(
+ tcp_enabled, std::string(tcp_address), tcp_port_str);
+
+ // configuration setup
+ std::vector<std::string> config_secondary_transports_for_usb; // empty
+ std::vector<std::string> config_secondary_transports_for_bluetooth;
+ config_secondary_transports_for_bluetooth.push_back("WiFi");
+ std::vector<std::string> config_secondary_transports_for_wifi; // empty
+ std::vector<std::string> config_audio_service_transports;
+ config_audio_service_transports.push_back("IAP_USB");
+ config_audio_service_transports.push_back("IAP_USB_HOST_MODE");
+ config_audio_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ config_audio_service_transports.push_back("IAP_CARPLAY");
+ config_audio_service_transports.push_back("AOA_USB");
+ config_audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> config_video_service_transports;
+ config_video_service_transports.push_back("IAP_USB");
+ config_video_service_transports.push_back("IAP_USB_HOST_MODE");
+ config_video_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ config_video_service_transports.push_back("IAP_CARPLAY");
+ config_video_service_transports.push_back("AOA_USB");
+ config_video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, max_supported_protocol_version())
+ .WillRepeatedly(Return(PROTOCOL_VERSION_5));
+ EXPECT_CALL(protocol_handler_settings_mock, multiple_transports_enabled())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(protocol_handler_settings_mock, secondary_transports_for_usb())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_usb));
+ EXPECT_CALL(protocol_handler_settings_mock,
+ secondary_transports_for_bluetooth())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_bluetooth));
+ EXPECT_CALL(protocol_handler_settings_mock, secondary_transports_for_wifi())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_wifi));
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(config_audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(config_video_service_transports));
+
+ // assume the device is iOS and is connected through iAP over Bluetooth
+ std::string connection_type_string("IAP_BLUETOOTH");
+
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillRepeatedly(Return(connection_type_string));
+
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ControlMessage(
+ FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF, connection_id, _)))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(
+ DoAll(SetArgReferee<2>(PROTOCOL_VERSION_5), Return(true)));
+
+ BsonObject expected_obj;
+ bson_object_initialize_default(&expected_obj);
+ // IP address
+ bson_object_put_string(
+ &expected_obj, protocol_handler::strings::tcp_ip_address, tcp_address);
+ // TCP port number
+ bson_object_put_int32(
+ &expected_obj, protocol_handler::strings::tcp_port, tcp_port);
+
+ std::vector<uint8_t> expected_param =
+ CreateVectorFromBsonObject(&expected_obj);
+
+ bson_object_deinitialize(&expected_obj);
+
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_TRANSPORT_EVENT_UPDATE,
+ PROTECTION_OFF,
+ connection_id,
+ Eq(expected_param))))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+#ifdef ENABLE_SECURITY
+ AddSecurityManager();
+
+ EXPECT_CALL(session_observer_mock, KeyFromPair(connection_id, session_id))
+ .WillOnce(Return(connection_key));
+
+ EXPECT_CALL(session_observer_mock, GetSSLContext(connection_key, kRpc))
+ .WillOnce(ReturnNull());
+#endif // ENABLE_SECURITY
+
+ protocol_handler_impl->SendStartSessionAck(connection_id,
+ session_id,
+ input_protocol_version,
+ hash_id,
+ protocol_handler::SERVICE_TYPE_RPC,
+ false /* protection */,
+ full_version);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ TransportEventUpdate_afterVersionNegotiation_TCPDisabled) {
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+
+ const uint8_t input_protocol_version = 5;
+ const uint32_t hash_id = 123456;
+ ProtocolPacket::ProtocolVersion full_version(5, 1, 0);
+
+ const size_t maximum_rpc_payload_size = 1500;
+ EXPECT_CALL(protocol_handler_settings_mock, maximum_rpc_payload_size())
+ .WillRepeatedly(Return(maximum_rpc_payload_size));
+ InitProtocolHandlerImpl(0u, 0u);
+
+ // TCP configuration setup
+ bool tcp_enabled = false;
+ char tcp_address[] = "192.168.2.3";
+ std::string tcp_port_str = "12345";
+ protocol_handler_impl->set_tcp_config(
+ tcp_enabled, std::string(tcp_address), tcp_port_str);
+
+ std::vector<std::string> config_secondary_transports_for_usb; // empty
+ std::vector<std::string> config_secondary_transports_for_bluetooth;
+ config_secondary_transports_for_bluetooth.push_back("WiFi");
+ std::vector<std::string> config_secondary_transports_for_wifi; // empty
+ std::vector<std::string> config_audio_service_transports;
+ config_audio_service_transports.push_back("IAP_USB");
+ config_audio_service_transports.push_back("IAP_USB_HOST_MODE");
+ config_audio_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ config_audio_service_transports.push_back("IAP_CARPLAY");
+ config_audio_service_transports.push_back("AOA_USB");
+ config_audio_service_transports.push_back("TCP_WIFI");
+ std::vector<std::string> config_video_service_transports;
+ config_video_service_transports.push_back("IAP_USB");
+ config_video_service_transports.push_back("IAP_USB_HOST_MODE");
+ config_video_service_transports.push_back("IAP_USB_DEVICE_MODE");
+ config_video_service_transports.push_back("IAP_CARPLAY");
+ config_video_service_transports.push_back("AOA_USB");
+ config_video_service_transports.push_back("TCP_WIFI");
+
+ EXPECT_CALL(protocol_handler_settings_mock, max_supported_protocol_version())
+ .WillRepeatedly(Return(PROTOCOL_VERSION_5));
+ EXPECT_CALL(protocol_handler_settings_mock, multiple_transports_enabled())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(protocol_handler_settings_mock, secondary_transports_for_usb())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_usb));
+ EXPECT_CALL(protocol_handler_settings_mock,
+ secondary_transports_for_bluetooth())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_bluetooth));
+ EXPECT_CALL(protocol_handler_settings_mock, secondary_transports_for_wifi())
+ .Times(AtLeast(0))
+ .WillRepeatedly(ReturnRef(config_secondary_transports_for_wifi));
+ EXPECT_CALL(protocol_handler_settings_mock, audio_service_transports())
+ .WillOnce(ReturnRef(config_audio_service_transports));
+ EXPECT_CALL(protocol_handler_settings_mock, video_service_transports())
+ .WillOnce(ReturnRef(config_video_service_transports));
+
+ // assume the device is iOS and is connected through iAP over Bluetooth
+ std::string connection_type_string("IAP_BLUETOOTH");
+
+ EXPECT_CALL(session_observer_mock,
+ TransportTypeProfileStringFromConnHandle(connection_id))
+ .WillRepeatedly(Return(connection_type_string));
+
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ControlMessage(
+ FRAME_DATA_START_SERVICE_ACK, PROTECTION_OFF, connection_id, _)))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(
+ DoAll(SetArgReferee<2>(PROTOCOL_VERSION_5), Return(true)));
+
+ BsonObject expected_obj;
+ bson_object_initialize_default(&expected_obj);
+ // IP address
+ char empty_ip_address[] = "";
+ bson_object_put_string(&expected_obj,
+ protocol_handler::strings::tcp_ip_address,
+ empty_ip_address);
+ // TCP port number should be omitted
+
+ std::vector<uint8_t> expected_param =
+ CreateVectorFromBsonObject(&expected_obj);
+
+ bson_object_deinitialize(&expected_obj);
+
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_TRANSPORT_EVENT_UPDATE,
+ PROTECTION_OFF,
+ connection_id,
+ Eq(expected_param))))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+#ifdef ENABLE_SECURITY
+ AddSecurityManager();
+
+ EXPECT_CALL(session_observer_mock, KeyFromPair(connection_id, session_id))
+ .WillOnce(Return(connection_key));
+
+ EXPECT_CALL(session_observer_mock, GetSSLContext(connection_key, kRpc))
+ .WillOnce(ReturnNull());
+#endif // ENABLE_SECURITY
+
+ protocol_handler_impl->SendStartSessionAck(connection_id,
+ session_id,
+ input_protocol_version,
+ hash_id,
+ protocol_handler::SERVICE_TYPE_RPC,
+ false /* protection */,
+ full_version);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ OnTransportConfigUpdated_TransportEventUpdate_TCPEnabled) {
+ using connection_handler::SessionConnectionMap;
+ using connection_handler::SessionTransports;
+
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+
+ char tcp_address[] = "172.16.2.3";
+ int32_t tcp_port = 23456;
+ std::string tcp_port_str = "23456";
+
+ transport_manager::transport_adapter::TransportConfig configs;
+ configs[transport_manager::transport_adapter::tc_enabled] =
+ std::string("true");
+ configs[transport_manager::transport_adapter::tc_tcp_port] = tcp_port_str;
+ configs[transport_manager::transport_adapter::tc_tcp_ip_address] =
+ std::string(tcp_address);
+
+ transport_manager::ConnectionUID device1_primary_connection_id = 100;
+ transport_manager::ConnectionUID device2_primary_connection_id = 101;
+ transport_manager::ConnectionUID device2_secondary_connection_id = 150;
+
+ SessionTransports st1 = {device1_primary_connection_id, kDisabledSecondary};
+ SessionTransports st2 = {device2_primary_connection_id,
+ device2_secondary_connection_id};
+ session_connection_map_[0x11] = st1;
+ session_connection_map_[0x22] = st2;
+
+ EXPECT_CALL(connection_handler_mock, session_connection_map())
+ .WillOnce(Return(DataAccessor<SessionConnectionMap>(
+ session_connection_map_, session_connection_map_lock_ptr_)));
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(
+ DoAll(SetArgReferee<2>(PROTOCOL_VERSION_5), Return(true)));
+
+ BsonObject expected_obj;
+ bson_object_initialize_default(&expected_obj);
+ // IP address
+ bson_object_put_string(
+ &expected_obj, protocol_handler::strings::tcp_ip_address, tcp_address);
+ // TCP port number
+ bson_object_put_int32(
+ &expected_obj, protocol_handler::strings::tcp_port, tcp_port);
+
+ std::vector<uint8_t> expected_param =
+ CreateVectorFromBsonObject(&expected_obj);
+
+ bson_object_deinitialize(&expected_obj);
+
+ // since device 1 doesn't support secondary transport feature,
+ // TransportEvetUpdate should be delivered only to device 2
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_TRANSPORT_EVENT_UPDATE,
+ PROTECTION_OFF,
+ device2_primary_connection_id,
+ Eq(expected_param))))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ tm_listener->OnTransportConfigUpdated(configs);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
+TEST_F(ProtocolHandlerImplTest,
+ OnTransportConfigUpdated_TransportEventUpdate_TCPDisabled) {
+ using connection_handler::SessionConnectionMap;
+ using connection_handler::SessionTransports;
+
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+
+ char tcp_address[] = "172.16.2.3";
+ std::string tcp_port_str = "23456";
+
+ transport_manager::transport_adapter::TransportConfig configs;
+ configs[transport_manager::transport_adapter::tc_enabled] =
+ std::string("false");
+ configs[transport_manager::transport_adapter::tc_tcp_port] = tcp_port_str;
+ configs[transport_manager::transport_adapter::tc_tcp_ip_address] =
+ std::string(tcp_address);
+
+ transport_manager::ConnectionUID device1_primary_connection_id = 100;
+ transport_manager::ConnectionUID device1_secondary_connection_id = 150;
+ transport_manager::ConnectionUID device2_primary_connection_id = 101;
+ transport_manager::ConnectionUID device3_primary_connection_id = 102;
+ transport_manager::ConnectionUID device3_secondary_connection_id = 151;
+
+ SessionTransports st1 = {device1_primary_connection_id,
+ device1_secondary_connection_id};
+ SessionTransports st2 = {device2_primary_connection_id, kDisabledSecondary};
+ SessionTransports st3 = {device3_primary_connection_id,
+ device3_secondary_connection_id};
+ session_connection_map_[0x11] = st1;
+ session_connection_map_[0x22] = st2;
+ session_connection_map_[0x33] = st3;
+
+ EXPECT_CALL(connection_handler_mock, session_connection_map())
+ .WillOnce(Return(DataAccessor<SessionConnectionMap>(
+ session_connection_map_, session_connection_map_lock_ptr_)));
+
+ EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _))
+ .WillRepeatedly(
+ DoAll(SetArgReferee<2>(PROTOCOL_VERSION_5), Return(true)));
+
+ BsonObject expected_obj;
+ bson_object_initialize_default(&expected_obj);
+ // IP address
+ char empty_ip_address[] = "";
+ bson_object_put_string(&expected_obj,
+ protocol_handler::strings::tcp_ip_address,
+ empty_ip_address);
+ // TCP port number should be omitted
+
+ std::vector<uint8_t> expected_param =
+ CreateVectorFromBsonObject(&expected_obj);
+
+ bson_object_deinitialize(&expected_obj);
+
+ // both device 1 and device 3 should receive TransportEventUpdate frames
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_TRANSPORT_EVENT_UPDATE,
+ PROTECTION_OFF,
+ device1_primary_connection_id,
+ Eq(expected_param))))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+ EXPECT_CALL(
+ transport_manager_mock,
+ SendMessageToDevice(ControlMessage(FRAME_DATA_TRANSPORT_EVENT_UPDATE,
+ PROTECTION_OFF,
+ device3_primary_connection_id,
+ Eq(expected_param))))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ tm_listener->OnTransportConfigUpdated(configs);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
+TEST_F(ProtocolHandlerImplTest, RegisterSecondaryTransport_SUCCESS) {
+ AddConnection();
+
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+
+ transport_manager::ConnectionUID primary_connection_id = 123;
+
+ EXPECT_CALL(session_observer_mock,
+ ProtocolVersionUsed(primary_connection_id, _, _))
+ .WillRepeatedly(
+ DoAll(SetArgReferee<2>(PROTOCOL_VERSION_5), Return(true)));
+
+ EXPECT_CALL(connection_handler_mock,
+ OnSecondaryTransportStarted(_, connection_id, session_id))
+ .WillOnce(DoAll(SetArgReferee<0>(primary_connection_id), Return(true)));
+
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_ACK,
+ PROTECTION_OFF,
+ connection_id,
+ _)))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ SendControlMessage(PROTECTION_OFF,
+ kControl,
+ session_id,
+ FRAME_DATA_REGISTER_SECONDARY_TRANSPORT,
+ PROTOCOL_VERSION_5);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
+TEST_F(ProtocolHandlerImplTest, RegisterSecondaryTransport_FAILURE) {
+ AddConnection();
+
+ TestAsyncWaiter waiter;
+ uint32_t times = 0;
+
+ transport_manager::ConnectionUID primary_connection_id = 123;
+
+ EXPECT_CALL(session_observer_mock,
+ ProtocolVersionUsed(primary_connection_id, _, _))
+ .WillRepeatedly(
+ DoAll(SetArgReferee<2>(PROTOCOL_VERSION_5), Return(true)));
+
+ // check the behavior when OnSecondaryTransportStarted() returns false
+ EXPECT_CALL(connection_handler_mock,
+ OnSecondaryTransportStarted(_, connection_id, session_id))
+ .WillOnce(DoAll(SetArgReferee<0>(primary_connection_id), Return(false)));
+
+ EXPECT_CALL(transport_manager_mock,
+ SendMessageToDevice(
+ ControlMessage(FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_NACK,
+ PROTECTION_OFF,
+ connection_id,
+ _)))
+ .WillOnce(DoAll(NotifyTestAsyncWaiter(&waiter), Return(E_SUCCESS)));
+ times++;
+
+ SendControlMessage(PROTECTION_OFF,
+ kControl,
+ session_id,
+ FRAME_DATA_REGISTER_SECONDARY_TRANSPORT,
+ PROTOCOL_VERSION_5);
+
+ EXPECT_TRUE(waiter.WaitFor(times, kAsyncExpectationsTimeout));
+}
+
TEST_F(ProtocolHandlerImplTest, DISABLED_FloodVerification) {
const size_t period_msec = 10000;
const size_t max_messages = 1000;
@@ -1990,7 +3152,8 @@ TEST_F(ProtocolHandlerImplTest,
times++;
// Act
- protocol_handler_impl->SendEndService(connection_id, session_id, kControl);
+ protocol_handler_impl->SendEndService(
+ connection_id, connection_id, session_id, kControl);
EXPECT_TRUE(waiter->WaitFor(times, kAsyncExpectationsTimeout));
}
diff --git a/src/components/protocol_handler/test/protocol_header_validator_test.cc b/src/components/protocol_handler/test/protocol_header_validator_test.cc
index e42ba96251..5554bfd280 100644
--- a/src/components/protocol_handler/test/protocol_header_validator_test.cc
+++ b/src/components/protocol_handler/test/protocol_header_validator_test.cc
@@ -230,12 +230,12 @@ TEST_F(ProtocolHeaderValidatorTest, Malformed_FrameType) {
}
}
-// For Control frames Frame info value shall be from 0x00 to 0x06 or 0xFE(Data
-// Ack), 0xFF(HB Ack)
+// For Control frames Frame info value shall be from 0x00 to 0x09 or 0xFD
+// (Transport Update Event), 0xFE(Data Ack), 0xFF(HB Ack)
TEST_F(ProtocolHeaderValidatorTest, Malformed_ControlFrame) {
std::vector<uint8_t> malformed_frame_data;
- for (uint8_t frame_type = FRAME_DATA_END_SERVICE_NACK + 1;
- frame_type < FRAME_DATA_SERVICE_DATA_ACK;
+ for (uint8_t frame_type = FRAME_DATA_REGISTER_SECONDARY_TRANSPORT_NACK + 1;
+ frame_type < FRAME_DATA_TRANSPORT_EVENT_UPDATE;
++frame_type) {
malformed_frame_data.push_back(frame_type);
}
diff --git a/src/components/rpc_base/include/rpc_base/rpc_base.h b/src/components/rpc_base/include/rpc_base/rpc_base.h
index 6792f47732..10b494465c 100644
--- a/src/components/rpc_base/include/rpc_base/rpc_base.h
+++ b/src/components/rpc_base/include/rpc_base/rpc_base.h
@@ -42,11 +42,6 @@ namespace Json {
class Value;
} // namespace Json
-namespace dbus {
-class MessageReader;
-class MessageWriter;
-} // namespace dbus
-
namespace rpc {
class ValidationReport;
@@ -173,12 +168,10 @@ class Boolean : public PrimitiveType {
Boolean();
explicit Boolean(bool value);
explicit Boolean(const Json::Value* value);
- explicit Boolean(dbus::MessageReader* reader);
Boolean(const Json::Value* value, bool def_value);
Boolean& operator=(bool new_val);
operator bool() const;
Json::Value ToJsonValue() const;
- void ToDbusWriter(dbus::MessageWriter* writer) const;
private:
// Fields
@@ -197,7 +190,6 @@ class Integer : public PrimitiveType {
explicit Integer(IntType value);
Integer(const Integer& value);
explicit Integer(const Json::Value* value);
- explicit Integer(dbus::MessageReader* reader);
Integer(const Json::Value* value, IntType def_value);
Integer& operator=(IntType new_val);
Integer& operator=(const Integer& new_val);
@@ -205,7 +197,6 @@ class Integer : public PrimitiveType {
Integer& operator+=(int value);
operator IntType() const;
Json::Value ToJsonValue() const;
- void ToDbusWriter(dbus::MessageWriter* writer) const;
private:
IntType value_;
@@ -219,12 +210,10 @@ class Float : public PrimitiveType {
Float();
explicit Float(double value);
explicit Float(const Json::Value* value);
- explicit Float(dbus::MessageReader* reader);
Float(const Json::Value* value, double def_value);
Float& operator=(double new_val);
operator double() const;
Json::Value ToJsonValue() const;
- void ToDbusWriter(dbus::MessageWriter* writer) const;
private:
double value_;
@@ -239,7 +228,6 @@ class String : public PrimitiveType {
explicit String(const std::string& value);
explicit String(const char* value);
explicit String(const Json::Value* value);
- explicit String(dbus::MessageReader* reader);
String(const Json::Value* value, const std::string& def_value);
bool operator<(const String& new_val) const;
String& operator=(const std::string& new_val);
@@ -247,7 +235,6 @@ class String : public PrimitiveType {
bool operator==(const String& rhs) const;
operator const std::string&() const;
Json::Value ToJsonValue() const;
- void ToDbusWriter(dbus::MessageWriter* writer) const;
private:
std::string value_;
@@ -265,12 +252,10 @@ class Enum : public PrimitiveType {
Enum();
explicit Enum(EnumType value);
explicit Enum(const Json::Value* value);
- explicit Enum(dbus::MessageReader* reader);
Enum(const Json::Value* value, EnumType def_value);
Enum& operator=(const EnumType& new_val);
operator EnumType() const;
Json::Value ToJsonValue() const;
- void ToDbusWriter(dbus::MessageWriter* writer) const;
private:
// Fields
@@ -289,7 +274,6 @@ class Array : public std::vector<T>, public CompositeType {
// Need const and non-const versions to beat all-type accepting constructor
explicit Array(Json::Value* value);
explicit Array(const Json::Value* value);
- explicit Array(dbus::MessageReader* reader);
template <typename U>
explicit Array(const U& value);
template <typename U>
@@ -298,7 +282,6 @@ class Array : public std::vector<T>, public CompositeType {
template <typename U>
void push_back(const U& value);
Json::Value ToJsonValue() const;
- void ToDbusWriter(dbus::MessageWriter* writer) const;
virtual bool is_valid() const;
bool is_initialized() const;
@@ -320,7 +303,6 @@ class Map : public std::map<std::string, T>, public CompositeType {
// Need const and non-const versions to beat all-type accepting constructor
explicit Map(Json::Value* value);
explicit Map(const Json::Value* value);
- explicit Map(dbus::MessageReader* reader);
template <typename U>
explicit Map(const U& value);
template <typename U>
@@ -329,7 +311,6 @@ class Map : public std::map<std::string, T>, public CompositeType {
template <typename U>
void insert(const std::pair<std::string, U>& value);
Json::Value ToJsonValue() const;
- void ToDbusWriter(dbus::MessageWriter* writer) const;
bool is_valid() const;
bool is_initialized() const;
@@ -343,7 +324,6 @@ class Nullable : public T {
public:
// Methods
Nullable();
- explicit Nullable(dbus::MessageReader* reader);
// Need const and non-const versions to beat all-type accepting constructor
explicit Nullable(Json::Value* value);
explicit Nullable(const Json::Value* value);
@@ -370,7 +350,6 @@ class Stringifyable : public T {
public:
// Methods
Stringifyable();
- explicit Stringifyable(dbus::MessageReader* reader);
// Need const and non-const versions to beat all-type accepting constructor
explicit Stringifyable(Json::Value* value);
explicit Stringifyable(const Json::Value* value);
@@ -398,15 +377,12 @@ class Optional {
public:
// Methods
Optional();
- explicit Optional(dbus::MessageReader* reader);
template <typename U>
explicit Optional(const U& value);
template <typename U>
Optional(const Json::Value* value, const U& def_value);
Json::Value ToJsonValue() const;
- void ToDbusWriter(dbus::MessageWriter* writer) const;
-
// Pointer semantics
T& operator*();
const T& operator*() const;
diff --git a/src/components/rpc_base/include/rpc_base/rpc_base_dbus_inl.h b/src/components/rpc_base/include/rpc_base/rpc_base_dbus_inl.h
deleted file mode 100644
index aae1a34ac2..0000000000
--- a/src/components/rpc_base/include/rpc_base/rpc_base_dbus_inl.h
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
- * Copyright (c) 2014, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#ifndef SRC_COMPONENTS_RPC_BASE_INCLUDE_RPC_BASE_RPC_BASE_DBUS_INL_H_
-#define SRC_COMPONENTS_RPC_BASE_INCLUDE_RPC_BASE_RPC_BASE_DBUS_INL_H_
-
-#include "dbus/dbus_message.h"
-#include "json/value.h"
-#include "rpc_base/rpc_base.h"
-
-namespace rpc {
-
-// static
-inline PrimitiveType::ValueState PrimitiveType::InitHelper(bool is_next) {
- return is_next ? kValid : kInvalid;
-}
-
-// static
-inline CompositeType::InitializationState CompositeType::InitHelper(
- bool is_next) {
- return is_next ? kInitialized : kUninitialized;
-}
-
-namespace impl {
-
-// Helper functions to statically map int types to appropriate
-// MessageReader functions
-
-// Non-specialized versions doesn't have implementation
-
-// Tells if next element of reader is of type T
-template <typename T>
-inline bool NextIs(const dbus::MessageReader& reader);
-// Takes next element of type T from reader
-template <typename T>
-inline T Take(dbus::MessageReader* reader);
-
-template <>
-inline bool NextIs<int8_t>(const dbus::MessageReader& reader) {
- return reader.NextIsByte();
-}
-
-template <>
-inline int8_t Take<int8_t>(dbus::MessageReader* reader) {
- return static_cast<int8_t>(reader->TakeByte());
-}
-
-inline void Put(int8_t val, dbus::MessageWriter* writer) {
- writer->PutByte(static_cast<uint8_t>(val));
-}
-
-template <>
-inline bool NextIs<uint8_t>(const dbus::MessageReader& reader) {
- return reader.NextIsByte();
-}
-
-template <>
-inline uint8_t Take<uint8_t>(dbus::MessageReader* reader) {
- return reader->TakeByte();
-}
-
-inline void Put(uint8_t val, dbus::MessageWriter* writer) {
- writer->PutByte(val);
-}
-
-template <>
-inline bool NextIs<int16_t>(const dbus::MessageReader& reader) {
- return reader.NextIsInt16();
-}
-
-template <>
-inline int16_t Take<int16_t>(dbus::MessageReader* reader) {
- return reader->TakeInt16();
-}
-
-inline void Put(int16_t val, dbus::MessageWriter* writer) {
- writer->PutInt16(val);
-}
-
-template <>
-inline bool NextIs<uint16_t>(const dbus::MessageReader& reader) {
- return reader.NextIsUint16();
-}
-
-template <>
-inline uint16_t Take<uint16_t>(dbus::MessageReader* reader) {
- return reader->TakeUint16();
-}
-
-inline void Put(uint16_t val, dbus::MessageWriter* writer) {
- writer->PutUint16(val);
-}
-
-template <>
-inline bool NextIs<int32_t>(const dbus::MessageReader& reader) {
- return reader.NextIsInt32();
-}
-
-template <>
-inline int32_t Take<int32_t>(dbus::MessageReader* reader) {
- return reader->TakeInt32();
-}
-
-inline void Put(int32_t val, dbus::MessageWriter* writer) {
- writer->PutInt32(val);
-}
-
-template <>
-inline bool NextIs<uint32_t>(const dbus::MessageReader& reader) {
- return reader.NextIsUint32();
-}
-
-template <>
-inline uint32_t Take<uint32_t>(dbus::MessageReader* reader) {
- return reader->TakeUint32();
-}
-
-inline void Put(uint32_t val, dbus::MessageWriter* writer) {
- writer->PutUint32(val);
-}
-
-template <>
-inline bool NextIs<int64_t>(const dbus::MessageReader& reader) {
- return reader.NextIsInt64();
-}
-
-template <>
-inline int64_t Take<int64_t>(dbus::MessageReader* reader) {
- return reader->TakeInt64();
-}
-
-inline void Put(int64_t val, dbus::MessageWriter* writer) {
- writer->PutInt64(val);
-}
-
-template <>
-inline bool NextIs<uint64_t>(const dbus::MessageReader& reader) {
- return reader.NextIsUint64();
-}
-
-template <>
-inline uint64_t Take<uint64_t>(dbus::MessageReader* reader) {
- return reader->TakeUint64();
-}
-
-inline void Put(uint64_t val, dbus::MessageWriter* writer) {
- writer->PutUint64(val);
-}
-
-template <>
-inline std::string Take<std::string>(dbus::MessageReader* reader) {
- return reader->TakeString();
-}
-
-inline void Put(const std::string val, dbus::MessageWriter* writer) {
- writer->PutString(val);
-}
-
-// Type to DBus type id mappers
-template <typename T>
-char DbusTypeCode();
-template <>
-inline char DbusTypeCode<bool>() {
- return DBUS_TYPE_BOOLEAN;
-}
-// There is no dbus type for signed byte, map to unsigned
-template <>
-inline char DbusTypeCode<int8_t>() {
- return DBUS_TYPE_BYTE;
-}
-template <>
-inline char DbusTypeCode<uint8_t>() {
- return DBUS_TYPE_BYTE;
-}
-template <>
-inline char DbusTypeCode<int16_t>() {
- return DBUS_TYPE_INT16;
-}
-template <>
-inline char DbusTypeCode<uint16_t>() {
- return DBUS_TYPE_UINT16;
-}
-template <>
-inline char DbusTypeCode<int32_t>() {
- return DBUS_TYPE_INT32;
-}
-template <>
-inline char DbusTypeCode<uint32_t>() {
- return DBUS_TYPE_UINT32;
-}
-template <>
-inline char DbusTypeCode<int64_t>() {
- return DBUS_TYPE_INT64;
-}
-template <>
-inline char DbusTypeCode<uint64_t>() {
- return DBUS_TYPE_UINT64;
-}
-template <>
-inline char DbusTypeCode<double>() {
- return DBUS_TYPE_DOUBLE;
-}
-template <>
-inline char DbusTypeCode<std::string>() {
- return DBUS_TYPE_STRING;
-}
-template <>
-inline char DbusTypeCode<const std::string>() {
- return DBUS_TYPE_STRING;
-}
-
-// Non-specialized template supposes there is static
-// void GetDbusSignature(std::string*) method in T
-template <typename T>
-struct DbusSignatureHelper {
- static void DbusSignature(std::string* signature) {
- T::GetDbusSignature(signature);
- }
-};
-
-template <>
-struct DbusSignatureHelper<Boolean> {
- static void DbusSignature(std::string* signature) {
- (*signature) += rpc::impl::DbusTypeCode<bool>();
- }
-};
-
-template <typename T, T minval, T maxval>
-struct DbusSignatureHelper<Integer<T, minval, maxval> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += rpc::impl::DbusTypeCode<T>();
- }
-};
-
-template <int64_t minnum, int64_t maxnum, int64_t minden, int64_t maxden>
-struct DbusSignatureHelper<Float<minnum, maxnum, minden, maxden> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += rpc::impl::DbusTypeCode<double>();
- }
-};
-
-template <typename T>
-struct DbusSignatureHelper<Enum<T> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += rpc::impl::DbusTypeCode<int32_t>();
- }
-};
-
-template <size_t minlen, size_t maxlen>
-struct DbusSignatureHelper<String<minlen, maxlen> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += rpc::impl::DbusTypeCode<std::string>();
- }
-};
-
-template <typename K, typename V>
-struct DbusSignatureHelper<std::pair<K, V> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += DBUS_DICT_ENTRY_BEGIN_CHAR;
- (*signature) += rpc::impl::DbusTypeCode<K>();
- rpc::impl::DbusSignatureHelper<V>::DbusSignature(signature);
- (*signature) += DBUS_DICT_ENTRY_END_CHAR;
- }
-};
-
-template <typename T, size_t minsize, size_t maxsize>
-struct DbusSignatureHelper<Array<T, minsize, maxsize> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += DBUS_TYPE_ARRAY;
- rpc::impl::DbusSignatureHelper<T>::DbusSignature(signature);
- }
-};
-
-template <typename T, size_t minsize, size_t maxsize>
-struct DbusSignatureHelper<Map<T, minsize, maxsize> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += DBUS_TYPE_ARRAY;
- rpc::impl::DbusSignatureHelper<typename Map<T, minsize, maxsize>::
- value_type>::DbusSignature(signature);
- }
-};
-
-template <typename T>
-struct DbusSignatureHelper<Optional<T> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += DBUS_STRUCT_BEGIN_CHAR;
- (*signature) += rpc::impl::DbusTypeCode<bool>();
- rpc::impl::DbusSignatureHelper<T>::DbusSignature(signature);
- (*signature) += DBUS_STRUCT_END_CHAR;
- }
-};
-
-template <typename T>
-struct DbusSignatureHelper<Nullable<T> > {
- static void DbusSignature(std::string* signature) {
- (*signature) += DBUS_STRUCT_BEGIN_CHAR;
- (*signature) += rpc::impl::DbusTypeCode<bool>();
- rpc::impl::DbusSignatureHelper<T>::DbusSignature(signature);
- (*signature) += DBUS_STRUCT_END_CHAR;
- }
-};
-
-// Helper Optional type initialization functipon
-template <typename T>
-T TakeOptional(dbus::MessageReader* reader) {
- dbus::MessageReader struct_reader = reader->TakeStructReader();
- bool available = struct_reader.TakeBool();
- T value(&struct_reader);
- return available ? value : T();
-}
-
-// Helper Nullable type initialization functipon
-template <typename T>
-bool TakeNullable(dbus::MessageReader* reader) {
- dbus::MessageReader struct_reader = reader->TakeStructReader();
- bool is_null = struct_reader.TakeBool();
- return is_null;
-}
-
-} // namespace impl
-
-// Helper function that outputs dbus signature for type T
-template <typename T>
-void DbusSignature(std::string* signature) {
- impl::DbusSignatureHelper<T>::DbusSignature(signature);
-}
-
-// Type constructors
-inline Boolean::Boolean(dbus::MessageReader* reader)
- : PrimitiveType(InitHelper(reader->NextIsBool()))
- , value_(reader->TakeBool()) {}
-
-template <typename T, T minval, T maxval>
-inline Integer<T, minval, maxval>::Integer(dbus::MessageReader* reader)
- : PrimitiveType(InitHelper(impl::NextIs<IntType>(*reader)))
- , value_(impl::Take<IntType>(reader)) {
- if (is_valid()) {
- value_state_ = range_.Includes(value_) ? kValid : kInvalid;
- }
-}
-
-template <int64_t minnum, int64_t maxnum, int64_t minden, int64_t maxden>
-inline Float<minnum, maxnum, minden, maxden>::Float(dbus::MessageReader* reader)
- : PrimitiveType(InitHelper(reader->NextIsDouble()))
- , value_(reader->TakeDouble()) {
- if (is_valid()) {
- value_state_ = range_.Includes(value_) ? kValid : kInvalid;
- }
-}
-
-template <size_t minlen, size_t maxlen>
-inline String<minlen, maxlen>::String(dbus::MessageReader* reader)
- : PrimitiveType(InitHelper(reader->NextIsString()))
- , value_(reader->TakeString()) {
- if (is_valid()) {
- value_state_ = length_range_.Includes(value_.length()) ? kValid : kInvalid;
- }
-}
-
-template <typename T>
-inline Enum<T>::Enum(dbus::MessageReader* reader)
- : PrimitiveType(InitHelper(reader->NextIsInt32()))
- , value_(EnumType(reader->TakeInt32())) {
- if (is_valid()) {
- value_state_ = IsValidEnum(value_) ? kValid : kInvalid;
- }
-}
-
-template <typename T, size_t minsize, size_t maxsize>
-inline Array<T, minsize, maxsize>::Array(dbus::MessageReader* reader)
- : CompositeType(InitHelper(reader->NextIsArray())) {
- dbus::MessageReader array_reader = reader->TakeArrayReader();
- if (array_reader.has_failed()) {
- push_back(T());
- } else {
- while (array_reader.HasNext()) {
- push_back(T(&array_reader));
- }
- }
-}
-
-template <typename T, size_t minsize, size_t maxsize>
-inline Map<T, minsize, maxsize>::Map(dbus::MessageReader* reader)
- : CompositeType(InitHelper(reader->NextIsStruct())) {
- // Map key-value pairs are serialized into array
- dbus::MessageReader array_reader = reader->TakeArrayReader();
- if (array_reader.has_failed()) {
- this->insert(typename MapType::value_type("", T()));
- } else {
- while (array_reader.HasNext()) {
- dbus::MessageReader dictvalue_reader = array_reader.TakeDictEntryReader();
- typename MapType::key_type key =
- impl::Take<typename MapType::key_type>(&dictvalue_reader);
- this->insert(typename MapType::value_type(key, T(&dictvalue_reader)));
- }
- }
-}
-
-template <typename T>
-inline Nullable<T>::Nullable(dbus::MessageReader* reader)
- : T(reader), marked_null_(impl::TakeNullable<T>(reader)) {}
-
-template <typename T>
-inline Optional<T>::Optional(dbus::MessageReader* reader)
- : value_(impl::TakeOptional<T>(reader)) {}
-
-// MessageWriter serializers
-inline void Boolean::ToDbusWriter(dbus::MessageWriter* writer) const {
- writer->PutBool(value_);
-}
-
-template <typename T, T minval, T maxval>
-inline void Integer<T, minval, maxval>::ToDbusWriter(
- dbus::MessageWriter* writer) const {
- impl::Put(value_, writer);
-}
-
-template <int64_t minnum, int64_t maxnum, int64_t minden, int64_t maxden>
-inline void Float<minnum, maxnum, minden, maxden>::ToDbusWriter(
- dbus::MessageWriter* writer) const {
- writer->PutDouble(value_);
-}
-
-template <size_t minlen, size_t maxlen>
-inline void String<minlen, maxlen>::ToDbusWriter(
- dbus::MessageWriter* writer) const {
- writer->PutString(value_);
-}
-
-template <typename T>
-inline void Enum<T>::ToDbusWriter(dbus::MessageWriter* writer) const {
- writer->PutInt32(static_cast<int32_t>(value_));
-}
-
-template <typename T, size_t minsize, size_t maxsize>
-inline void Array<T, minsize, maxsize>::ToDbusWriter(
- dbus::MessageWriter* writer) const {
- std::string array_signature;
- DbusSignature<typename ArrayType::value_type>(&array_signature);
- dbus::MessageWriter array_writer(
- writer, dbus::kArray, array_signature.c_str());
- for (typename ArrayType::const_iterator i = this->begin(); i != this->end();
- ++i) {
- i->ToDbusWriter(&array_writer);
- }
-}
-
-template <typename T, size_t minsize, size_t maxsize>
-inline void Map<T, minsize, maxsize>::ToDbusWriter(
- dbus::MessageWriter* writer) const {
- std::string array_signature;
- DbusSignature<typename MapType::value_type>(&array_signature);
- dbus::MessageWriter array_writer(
- writer, dbus::kArray, array_signature.c_str());
- for (typename MapType::const_iterator i = this->begin(); i != this->end();
- ++i) {
- dbus::MessageWriter dictentry_writer(&array_writer, dbus::kDictEntry, NULL);
- impl::Put(i->first, &dictentry_writer);
- i->second.ToDbusWriter(&dictentry_writer);
- }
-}
-
-template <typename T>
-inline void Optional<T>::ToDbusWriter(dbus::MessageWriter* writer) const {
- dbus::MessageWriter struct_writer(writer, dbus::kStruct, NULL);
- struct_writer.PutBool(value_.is_initialized());
- value_.ToDbusWriter(&struct_writer);
-}
-
-} // namespace rpc
-
-#endif // SRC_COMPONENTS_RPC_BASE_INCLUDE_RPC_BASE_RPC_BASE_DBUS_INL_H_
diff --git a/src/components/rpc_base/test/CMakeLists.txt b/src/components/rpc_base/test/CMakeLists.txt
index ca4f41fe76..ae87bb71b7 100644
--- a/src/components/rpc_base/test/CMakeLists.txt
+++ b/src/components/rpc_base/test/CMakeLists.txt
@@ -31,8 +31,6 @@
include(${CMAKE_SOURCE_DIR}/tools/cmake/helpers/sources.cmake)
include_directories(
- ${COMPONENTS_DIR}/dbus/include
- ${COMPONENTS_DIR}/dbus/src
${COMPONENTS_DIR}/rpc_base/include
${GMOCK_INCLUDE_DIRECTORY}
${JSONCPP_INCLUDE_DIRECTORY}
@@ -43,16 +41,5 @@ set(LIBRARIES
jsoncpp
)
-if(${HMI_DBUS_API})
- include_directories(${DBUS_INCLUDE_DIRS})
- list(APPEND LIBRARIES
- DBus
- )
-else()
- set(EXCLUDE_PATHS
- rpc_base_dbus_test.cc
- )
-endif()
-
collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" "${EXCLUDE_PATHS}")
create_test(rpc_base_test "${SOURCES}" "${LIBRARIES}")
diff --git a/src/components/rpc_base/test/rpc_base_dbus_test.cc b/src/components/rpc_base/test/rpc_base_dbus_test.cc
deleted file mode 100644
index 4a22e111a3..0000000000
--- a/src/components/rpc_base/test/rpc_base_dbus_test.cc
+++ /dev/null
@@ -1,682 +0,0 @@
-/* Copyright (c) 2014, Ford Motor Company
- * 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 Ford Motor Company 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 HOLDER 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.
- */
-
-#include "gtest/gtest.h"
-#include "dbus/dbus_message.h"
-#include "rpc_base/rpc_base.h"
-#include "rpc_base/rpc_base_dbus_inl.h"
-
-namespace test {
-namespace components {
-namespace rpc_base_test {
-
-using namespace rpc;
-using namespace dbus;
-
-enum TestEnum { kValue0, kValue1, kInvalidValue };
-
-bool IsValidEnum(TestEnum val) {
- return val == kValue0 || val == kValue1;
-}
-
-bool EnumFromJsonString(const std::string& value, TestEnum* enm) {
- if (value == "kValue0") {
- *enm = kValue0;
- return true;
- } else if (value == "kValue1") {
- *enm = kValue1;
- return true;
- } else {
- return false;
- }
-}
-
-const char* EnumToJsonString(TestEnum enm) {
- switch (enm) {
- case kValue0:
- return "kValue0";
- case kValue1:
- return "kValue1";
- default:
- return "UNKNOWN";
- }
-}
-
-struct DbusDeserialization : public testing::Test {
- dbus::MessageRef msgref;
- DbusDeserialization()
- : msgref(dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL)) {}
-};
-
-TEST_F(DbusDeserialization, DeserializeBool) {
- {
- dbus::MessageWriter writer(msgref);
- writer.PutBool(true);
- }
- {
- dbus::MessageReader reader(msgref);
- Boolean booln(&reader);
- ASSERT_TRUE(booln);
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeByte) {
- {
- dbus::MessageWriter writer(msgref);
- writer.PutByte(200);
- }
- {
- dbus::MessageReader reader(msgref);
- Integer<uint8_t, 1, 220> byte(&reader);
- ASSERT_TRUE(byte.is_initialized());
- ASSERT_TRUE(byte.is_valid());
- ASSERT_EQ(byte, 200);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeInt64) {
- {
- dbus::MessageWriter writer(msgref);
- writer.PutInt64(-1);
- }
- {
- dbus::MessageReader reader(msgref);
- Integer<int64_t, -5, 220> int64(&reader);
- ASSERT_TRUE(int64.is_initialized());
- ASSERT_TRUE(int64.is_valid());
- ASSERT_EQ(int64, -1);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeFloat) {
- {
- dbus::MessageWriter writer(msgref);
- writer.PutDouble(3.14);
- }
- {
- dbus::MessageReader reader(msgref);
- Float<3, 4> pi(&reader);
- ASSERT_TRUE(pi.is_initialized());
- ASSERT_TRUE(pi.is_valid());
- ASSERT_DOUBLE_EQ(pi, 3.14);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeString) {
- {
- dbus::MessageWriter writer(msgref);
- writer.PutString("Hello");
- }
- {
- dbus::MessageReader reader(msgref);
- String<3, 10> hello(&reader);
- ASSERT_TRUE(hello.is_initialized());
- ASSERT_TRUE(hello.is_valid());
- ASSERT_EQ(std::string(hello), "Hello");
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeEnum) {
- {
- dbus::MessageWriter writer(msgref);
- writer.PutInt32(kValue1);
- }
- {
- dbus::MessageReader reader(msgref);
- Enum<TestEnum> enm(&reader);
- ASSERT_TRUE(enm.is_initialized());
- ASSERT_TRUE(enm.is_valid());
- ASSERT_EQ(enm, kValue1);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeArray) {
- {
- dbus::MessageWriter writer(msgref);
- std::string array_signature;
- rpc::DbusSignature<Integer<int32_t, 1, 50> >(&array_signature);
- dbus::MessageWriter array_writer(
- &writer, dbus::kArray, array_signature.c_str());
- array_writer.PutInt32(5);
- array_writer.PutInt32(33);
- }
- {
- dbus::MessageReader reader(msgref);
- Array<Integer<int32_t, 1, 50>, 1, 100> array(&reader);
- ASSERT_TRUE(array.is_initialized());
- ASSERT_TRUE(array.is_valid());
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- ASSERT_EQ(array.size(), 2u);
- ASSERT_EQ(array[0], 5);
- ASSERT_EQ(array[1], 33);
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeArrayOfArrays) {
- {
- dbus::MessageWriter writer(msgref);
- std::string array_signature;
- rpc::DbusSignature<Array<Integer<int32_t, 1, 50>, 1, 5> >(&array_signature);
- dbus::MessageWriter array_writer(
- &writer, dbus::kArray, array_signature.c_str());
- int val = 5;
- for (int i = 0; i < 2; ++i) {
- std::string subarray_signature;
- rpc::DbusSignature<Integer<int32_t, 1, 50> >(&subarray_signature);
- dbus::MessageWriter subarray_wirter(
- &array_writer, dbus::kArray, subarray_signature.c_str());
-
- subarray_wirter.PutInt32(val++);
- subarray_wirter.PutInt32(val++);
- }
- }
- {
- dbus::MessageReader reader(msgref);
- Array<Array<Integer<int32_t, 1, 50>, 1, 5>, 1, 5> array(&reader);
- ASSERT_TRUE(array.is_initialized());
- ASSERT_TRUE(array.is_valid());
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- ASSERT_EQ(array.size(), 2u);
- ASSERT_EQ(array[0].size(), 2u);
- ASSERT_EQ(array[1].size(), 2u);
- ASSERT_EQ(array[0][0], 5);
- ASSERT_EQ(array[0][1], 6);
- ASSERT_EQ(array[1][0], 7);
- ASSERT_EQ(array[1][1], 8);
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeMap) {
- {
- dbus::MessageWriter writer(msgref);
- std::string dict_signature;
- rpc::DbusSignature<Map<Enum<TestEnum>, 1, 5>::value_type>(&dict_signature);
- dbus::MessageWriter array_writer(
- &writer, dbus::kArray, dict_signature.c_str());
- const char* keys[] = {"Hello", "World"};
- int val = 0;
- for (int i = 0; i < 2; ++i) {
- dbus::MessageWriter dictval_wirter(&array_writer, dbus::kDictEntry, NULL);
- dictval_wirter.PutString(keys[val]);
- dictval_wirter.PutInt32(val++);
- }
- }
- {
- dbus::MessageReader reader(msgref);
- Map<Enum<TestEnum>, 1, 5> amap(&reader);
- ASSERT_TRUE(amap.is_initialized());
- ASSERT_TRUE(amap.is_valid());
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- ASSERT_EQ(amap.size(), 2u);
- ASSERT_EQ(amap["Hello"], kValue0);
- ASSERT_EQ(amap["World"], kValue1);
- }
-}
-
-TEST_F(DbusDeserialization, InconsistentTypesTest) {
- {
- dbus::MessageWriter writer(msgref);
- writer.PutString("Hello");
- }
- {
- dbus::MessageReader reader(msgref);
- Boolean badbool(&reader);
- ASSERT_TRUE(badbool.is_initialized());
- ASSERT_FALSE(badbool.is_valid());
- ASSERT_TRUE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeOptionalString) {
- {
- dbus::MessageWriter writer(msgref);
- dbus::MessageWriter optwriter(&writer, dbus::kStruct, NULL);
- optwriter.PutBool(true);
- optwriter.PutString("Hello dear");
- }
- {
- dbus::MessageReader reader(msgref);
- Optional<String<1, 100> > readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(std::string(*readback), "Hello dear");
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, DeserializeOptionalInt) {
- {
- dbus::MessageWriter writer(msgref);
- dbus::MessageWriter optwriter(&writer, dbus::kStruct, NULL);
- optwriter.PutBool(false);
- optwriter.PutInt32(42);
- }
- {
- dbus::MessageReader reader(msgref);
- Optional<Integer<int32_t, 1, 90> > readback(&reader);
- ASSERT_FALSE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeBool) {
- {
- Boolean true_bool(true);
- dbus::MessageWriter writer(msgref);
- true_bool.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Boolean readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(readback, true);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeInt8t) {
- {
- Integer<int8_t, 1, 100> int8(42);
- dbus::MessageWriter writer(msgref);
- int8.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Integer<int8_t, 1, 100> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(readback, 42);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, BadSerializeDeserializeInt8t) {
- {
- Integer<int8_t, 1, 12> int8(42);
- dbus::MessageWriter writer(msgref);
- int8.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Integer<int8_t, 1, 12> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_FALSE(readback.is_valid());
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeInt64t) {
- {
- Integer<int64_t, 1, 0xFFFFFFFFFF> int64(0xFFFFFFFFF1);
- dbus::MessageWriter writer(msgref);
- int64.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Integer<int64_t, 1, 0xFFFFFFFFFF> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(readback, 0xFFFFFFFFF1);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeDouble) {
- {
- Float<1, 5> flt(3.14);
- dbus::MessageWriter writer(msgref);
- flt.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Float<1, 5> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_DOUBLE_EQ(readback, 3.14);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeString) {
- {
- String<1, 12> hello("Hello");
- dbus::MessageWriter writer(msgref);
- hello.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- String<1, 12> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(std::string(readback), "Hello");
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeEnum) {
- {
- Enum<TestEnum> te(kValue1);
- dbus::MessageWriter writer(msgref);
- te.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Enum<TestEnum> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(readback, kValue1);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeArray) {
- {
- Array<Integer<int32_t, 1, 100>, 1, 90> ints;
- ints.push_back(42);
- ints.push_back(17);
- dbus::MessageWriter writer(msgref);
- ints.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Array<Integer<int32_t, 1, 100>, 1, 90> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(readback[0], 42);
- ASSERT_EQ(readback[1], 17);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeMap) {
- {
- Map<Integer<int32_t, 1, 100>, 1, 90> ints;
- ints["first"] = 42;
- ints["second"] = 17;
- dbus::MessageWriter writer(msgref);
- ints.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Map<Integer<int32_t, 1, 100>, 1, 90> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(readback["first"], 42);
- ASSERT_EQ(readback["second"], 17);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusDeserialization, SerializeDeserializeMapOfArrays) {
- {
- Map<Array<Integer<int32_t, 1, 100>, 1, 5>, 1, 90> ints;
- ints["first"].push_back(1);
- ints["first"].push_back(42);
- ints["second"].push_back(17);
- ints["second"].push_back(3);
- dbus::MessageWriter writer(msgref);
- ints.ToDbusWriter(&writer);
- }
- {
- dbus::MessageReader reader(msgref);
- Map<Array<Integer<int32_t, 1, 100>, 1, 5>, 1, 90> readback(&reader);
- ASSERT_TRUE(readback.is_initialized());
- ASSERT_TRUE(readback.is_valid());
- ASSERT_EQ(readback.size(), 2u);
- ASSERT_EQ(readback["first"].size(), 2u);
- ASSERT_EQ(readback["second"].size(), 2u);
- ASSERT_EQ(readback["first"][0], 1);
- ASSERT_EQ(readback["first"][1], 42);
- ASSERT_EQ(readback["second"][0], 17);
- ASSERT_EQ(readback["second"][1], 3);
- ASSERT_FALSE(reader.has_failed());
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST(ValidatedTypes, TestBooleanDbusSignature) {
- std::string sign;
- DbusSignature<Boolean>(&sign);
- ASSERT_EQ(sign, "b");
-}
-
-TEST(ValidatedTypes, TestIntDbusSignature) {
- std::string sign;
- DbusSignature<Integer<int32_t, 1, 2> >(&sign);
- ASSERT_EQ(sign, "i");
-}
-
-TEST(ValidatedTypes, TestFloatDbusSignature) {
- std::string sign;
- DbusSignature<Float<1, 2> >(&sign);
- ASSERT_EQ(sign, "d");
-}
-
-TEST(ValidatedTypes, TestStringDbusSignature) {
- std::string sign;
- DbusSignature<String<1, 2> >(&sign);
- ASSERT_EQ(sign, "s");
-}
-
-TEST(ValidatedTypes, TestEnumDbusSignature) {
- std::string sign;
- DbusSignature<Enum<TestEnum> >(&sign);
- ASSERT_EQ(sign, "i");
-}
-
-TEST(ValidatedTypes, TestIntArrayDbusSignature) {
- std::string sign;
- DbusSignature<Array<Integer<int32_t, 1, 2>, 1, 3> >(&sign);
- ASSERT_EQ(sign, "ai");
-}
-
-TEST(ValidatedTypes, TestIntArrayArrayDbusSignature) {
- std::string sign;
- DbusSignature<Array<Array<Integer<int32_t, 1, 2>, 1, 3>, 4, 5> >(&sign);
- ASSERT_EQ(sign, "aai");
-}
-
-TEST(ValidatedTypes, TestMapDbusSignature) {
- std::string sign;
- DbusSignature<Map<Integer<int32_t, 1, 2>, 3, 4> >(&sign);
- ASSERT_EQ(sign, "a{si}");
-}
-
-TEST(ValidatedTypes, TestMandatoryEnumDbusSignature) {
- std::string sign;
- DbusSignature<Enum<TestEnum> >(&sign);
- ASSERT_EQ(sign, "i");
-}
-
-TEST(ValidatedTypes, TestOptionalEnumDbusSignature) {
- std::string sign;
- DbusSignature<Optional<Enum<TestEnum> > >(&sign);
- ASSERT_EQ(sign, "(bi)");
-}
-
-TEST(ValidatedTypes, TestOptionalFloatArrayDbusSignature) {
- std::string sign;
- DbusSignature<Optional<Array<Float<1, 2>, 3, 4> > >(&sign);
- ASSERT_EQ(sign, "(bad)");
-}
-
-TEST(DbusMessageConstructionTest, DbusMessageConstruction) {
- DBusMessage* rawmsg = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL);
- dbus::MessageRef msgref(rawmsg);
-}
-
-class DbusTest : public testing::Test {
- public:
- dbus::MessageRef msgref;
- DbusTest() : msgref(dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL)) {}
-};
-
-TEST_F(DbusTest, DbusWriterConstructionTest) {
- dbus::MessageWriter writer(msgref);
-}
-
-TEST_F(DbusTest, DbusEmptyMessageReaderTest) {
- dbus::MessageReader reader(msgref);
- ASSERT_TRUE(reader.has_failed());
-}
-
-TEST_F(DbusTest, DbusMessageWriterBoolWriteRead) {
- dbus::MessageWriter writer(msgref);
- writer.PutBool(true);
- dbus::MessageReader reader(msgref);
- bool redback_value = reader.TakeBool();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_TRUE(redback_value);
-}
-
-TEST_F(DbusTest, DbusMessageWriterInt32WriteRead) {
- dbus::MessageWriter writer(msgref);
- writer.PutInt32(42);
- dbus::MessageReader reader(msgref);
- int32_t readback_value = reader.TakeInt32();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_EQ(readback_value, 42);
-}
-
-TEST_F(DbusTest, DbusMessageWriterStringWriteRead) {
- dbus::MessageWriter writer(msgref);
- writer.PutString("Hello DBus!");
- dbus::MessageReader reader(msgref);
- std::string readback_value = reader.TakeString();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_EQ(readback_value, "Hello DBus!");
-}
-
-TEST_F(DbusTest, DbusMultipleParamsReadWrite) {
- {
- dbus::MessageWriter writer(msgref);
- writer.PutString("Hello DBus!");
- writer.PutInt16(42);
- writer.PutDouble(3.14);
- }
- {
- dbus::MessageReader reader(msgref);
- std::string readback_string = reader.TakeString();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_EQ(readback_string, "Hello DBus!");
- int16_t readback_int = reader.TakeInt16();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_EQ(readback_int, 42);
- double readback_double = reader.TakeDouble();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_DOUBLE_EQ(readback_double, 3.14);
- ASSERT_FALSE(reader.HasNext());
- }
-}
-
-TEST_F(DbusTest, DbusArrayTest) {
- {
- dbus::MessageWriter writer(msgref);
- dbus::MessageWriter array_writer(
- &writer, dbus::kArray, DBUS_TYPE_INT16_AS_STRING);
- array_writer.PutInt16(3);
- array_writer.PutInt16(4);
- array_writer.PutInt16(5);
- }
- {
- dbus::MessageReader reader(msgref);
- dbus::MessageReader array_reader = reader.TakeArrayReader();
- int16_t readback_val = array_reader.TakeInt16();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_EQ(readback_val, 3);
- readback_val = array_reader.TakeInt16();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_EQ(readback_val, 4);
- readback_val = array_reader.TakeInt16();
- ASSERT_FALSE(reader.has_failed());
- ASSERT_EQ(readback_val, 5);
- ASSERT_FALSE(array_reader.HasNext());
- }
-}
-
-class DbusFailuresTest : public testing::Test {
- public:
- dbus::MessageRef int_msg;
- DbusFailuresTest()
- : int_msg(dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL)) {
- dbus::MessageWriter writer(int_msg);
- writer.PutInt64(42);
- }
-};
-
-TEST_F(DbusFailuresTest, DbusInconsistentTypeReadFailureTest) {
- dbus::MessageReader reader(int_msg);
- std::string str = reader.TakeString();
- ASSERT_EQ(str, std::string(""));
- ASSERT_TRUE(reader.has_failed());
-}
-
-TEST_F(DbusFailuresTest, DbusNonExistentArrayReadTest) {
- dbus::MessageReader reader(int_msg);
- ASSERT_FALSE(reader.has_failed());
- dbus::MessageReader array_reader = reader.TakeArrayReader();
- ASSERT_TRUE(array_reader.has_failed());
- ASSERT_TRUE(reader.has_failed());
- int64_t val = array_reader.TakeInt64();
- ASSERT_TRUE(array_reader.has_failed());
- ASSERT_EQ(val, 0);
-}
-
-} // namespace rpc_base_test
-} // namespace components
-} // namespace test
diff --git a/src/components/transport_manager/CMakeLists.txt b/src/components/transport_manager/CMakeLists.txt
index 4fa224393d..2f734b3a05 100644
--- a/src/components/transport_manager/CMakeLists.txt
+++ b/src/components/transport_manager/CMakeLists.txt
@@ -43,6 +43,12 @@ include_directories (
${LOG4CXX_INCLUDE_DIRECTORY}
)
+if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
+ include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/include/transport_manager/tcp/platform_specific/qnx")
+elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/include/transport_manager/tcp/platform_specific/linux")
+endif ()
+
set(PATHS
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/src
@@ -96,8 +102,23 @@ if(NOT BUILD_TESTS)
)
endif()
+# exclude platform-dependent files before running collect_sources
+list(APPEND EXCLUDE_PATHS
+ ${COMPONENTS_DIR}/transport_manager/include/transport_manager/tcp/platform_specific
+ ${COMPONENTS_DIR}/transport_manager/src/tcp/platform_specific
+)
+
collect_sources(SOURCES "${PATHS}" "${EXCLUDE_PATHS}")
+# then add platform-dependent files later
+set(PLATFORM_DEPENDENT_SOURCES)
+if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
+ collect_sources(PLATFORM_DEPENDENT_SOURCES "${COMPONENTS_DIR}/transport_manager/src/tcp/platform_specific/qnx")
+elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ collect_sources(PLATFORM_DEPENDENT_SOURCES "${COMPONENTS_DIR}/transport_manager/src/tcp/platform_specific/linux")
+endif ()
+list(APPEND SOURCES ${PLATFORM_DEPENDENT_SOURCES})
+
add_library("TransportManager" ${SOURCES})
target_link_libraries("TransportManager" ${LIBRARIES})
diff --git a/src/components/dbus/test/dbus_adapter_test.cc b/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener.h
index 74a6de1aa9..91ddb3839c 100644
--- a/src/components/dbus/test/dbus_adapter_test.cc
+++ b/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener.h
@@ -1,8 +1,5 @@
/*
- * \file test_dbus_adapter.cc
- * \brief
- *
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2018 Xevo Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -16,7 +13,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the names of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -33,27 +30,44 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <gtest/gtest.h>
-#include "dbus/dbus_adapter.h"
+#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_H_
+#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_H_
+
+namespace transport_manager {
+namespace transport_adapter {
+
+/**
+ * @brief Listener to detect various events on network interfaces
+ */
+class NetworkInterfaceListener {
+ public:
+ /**
+ * @brief Destructor
+ */
+ virtual ~NetworkInterfaceListener() {}
+
+ /**
+ * @brief Initialize this listener
+ */
+ virtual bool Init() = 0;
-using ::dbus::DBusAdapter;
+ /**
+ * @brief Deinitialize this listener
+ */
+ virtual void Deinit() = 0;
-namespace test {
-namespace components {
-namespace dbus {
+ /**
+ * @brief Start this listener
+ */
+ virtual bool Start() = 0;
-class DBusAdapterTest : public ::testing::Test {};
+ /**
+ * @brief Stop this listener
+ */
+ virtual bool Stop() = 0;
+};
-TEST_F(DBusAdapterTest, Initialization) {
- const std::string kSdlServiceName = "test.ford.sdl.core";
- const std::string kSdlObjectPath = "/";
- const std::string kHmiServiceName = "test.ford.sdl.hmi";
- const std::string kHmiObjectPath = "/";
- ::dbus::DBusAdapter adapter(
- kSdlServiceName, kSdlObjectPath, kHmiServiceName, kHmiObjectPath);
- EXPECT_TRUE(adapter.Init());
-}
+} // namespace transport_adapter
+} // namespace transport_manager
-} // namespace dbus
-} // namespace components
-} // namespace test
+#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_H_
diff --git a/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener_impl.h b/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener_impl.h
new file mode 100644
index 0000000000..11a9be05ed
--- /dev/null
+++ b/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener_impl.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2018 Xevo Inc.
+ * 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 names of the copyright holders 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 HOLDER 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.
+ */
+
+#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_IMPL_H_
+#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_IMPL_H_
+
+#include <string>
+#include <memory>
+
+#include "utils/macro.h"
+#include "transport_manager/tcp/network_interface_listener.h"
+
+namespace transport_manager {
+namespace transport_adapter {
+
+class TcpClientListener;
+
+/**
+ * @brief Listener to detect various events on network interfaces
+ */
+class NetworkInterfaceListenerImpl : public NetworkInterfaceListener {
+ public:
+ /**
+ * @brief Constructor
+ *
+ * @param tcp_client_listener an instance of TcpClientListener which receives
+ * status updates
+ * @param designated_interface if we want to listen only on a specific
+ * network interface, specify its name
+ */
+ NetworkInterfaceListenerImpl(TcpClientListener* tcp_client_listener,
+ const std::string designated_interface);
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~NetworkInterfaceListenerImpl();
+
+ /**
+ * @brief Initialize this listener
+ */
+ bool Init() OVERRIDE;
+
+ /**
+ * @brief Deinitialize this listener
+ */
+ void Deinit() OVERRIDE;
+
+ /**
+ * @brief Start this listener
+ */
+ bool Start() OVERRIDE;
+
+ /**
+ * @brief Stop this listener
+ */
+ bool Stop() OVERRIDE;
+
+ private:
+ std::unique_ptr<NetworkInterfaceListener> platform_specific_impl_;
+};
+
+} // namespace transport_adapter
+} // namespace transport_manager
+
+#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_IMPL_H_
diff --git a/src/components/transport_manager/include/transport_manager/tcp/platform_specific/linux/platform_specific_network_interface_listener_impl.h b/src/components/transport_manager/include/transport_manager/tcp/platform_specific/linux/platform_specific_network_interface_listener_impl.h
new file mode 100644
index 0000000000..8a2279003a
--- /dev/null
+++ b/src/components/transport_manager/include/transport_manager/tcp/platform_specific/linux/platform_specific_network_interface_listener_impl.h
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2018 Xevo Inc.
+ * 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 names of the copyright holders 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 HOLDER 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.
+ */
+
+#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_LINUX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_
+#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_LINUX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include <netinet/in.h>
+#include "transport_manager/tcp/network_interface_listener.h"
+#include "utils/macro.h"
+#include "utils/threads/thread_delegate.h"
+
+struct ifaddrmsg;
+
+namespace transport_manager {
+namespace transport_adapter {
+
+class TcpClientListener;
+
+/**
+ * @brief Struct to keep network interface's status flags and IP addresses
+ */
+class InterfaceStatus {
+ public:
+ InterfaceStatus() : flags_(0), has_ipv4_(false), has_ipv6_(false) {}
+ ~InterfaceStatus() {}
+
+ bool IsAvailable() const;
+ bool IsLoopback() const;
+ // only for debugging output
+ unsigned int GetFlags() const {
+ return flags_;
+ }
+
+ bool HasIPAddress() const;
+ std::string GetIPv4Address() const;
+ std::string GetIPv6Address() const;
+
+ void SetFlags(unsigned int flags) {
+ flags_ = flags;
+ }
+
+ // specify NULL to remove existing address
+ void SetIPv4Address(struct in_addr* addr);
+ void SetIPv6Address(struct in6_addr* addr);
+
+ private:
+ unsigned int flags_;
+ bool has_ipv4_;
+ bool has_ipv6_;
+ struct in_addr ipv4_address_;
+ struct in6_addr ipv6_address_;
+};
+
+typedef std::map<std::string, InterfaceStatus> InterfaceStatusTable;
+
+/**
+ * @brief Listener to detect various events on network interfaces
+ */
+class PlatformSpecificNetworkInterfaceListener
+ : public NetworkInterfaceListener {
+ public:
+ /**
+ * @brief Constructor
+ *
+ * @param tcp_client_listener an instance of TcpClientListener which receives
+ * status updates
+ * @param designated_interface if we want to listen only on a specific
+ * network interface, specify its name
+ */
+ PlatformSpecificNetworkInterfaceListener(
+ TcpClientListener* tcp_client_listener,
+ const std::string designated_interface = "");
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~PlatformSpecificNetworkInterfaceListener();
+
+ /**
+ * @brief Initialize this listener
+ */
+ bool Init() OVERRIDE;
+
+ /**
+ * @brief Deinitialize this listener
+ */
+ void Deinit() OVERRIDE;
+
+ /**
+ * @brief Start this listener
+ */
+ bool Start() OVERRIDE;
+
+ /**
+ * @brief Stop this listener
+ */
+ bool Stop() OVERRIDE;
+
+#ifdef BUILD_TESTS
+ void SetTesting(bool enabled) {
+ testing_ = enabled;
+ }
+
+ int GetSocket() const {
+ return socket_;
+ }
+
+ threads::Thread* GetThread() const {
+ return thread_;
+ }
+
+ void OverwriteStatusTable(const InterfaceStatusTable dummy_table) {
+ status_table_ = dummy_table;
+ }
+
+ void testCallNotifyIPAddresses() {
+ NotifyIPAddresses();
+ }
+
+ const std::string& GetSelectedInterfaceName() const {
+ return selected_interface_;
+ }
+#endif // BUILD_TESTS
+
+ private:
+ // Struct to hold an event on a network interface.
+ // The event can be either an update on flags or an update on IP address.
+ struct EventParam {
+ unsigned int if_index;
+ unsigned int flags;
+ struct sockaddr_storage address;
+
+ EventParam(int interface_index, unsigned int interface_flags = 0)
+ : if_index(interface_index), flags(interface_flags) {}
+ };
+
+ // parent class which we will notify the events to
+ TcpClientListener* tcp_client_listener_;
+ // if configured, NetworkInterfaceListener will always look into the IP
+ // addresses of this interface
+ const std::string designated_interface_;
+
+ // a map to store status of each interface
+ InterfaceStatusTable status_table_;
+ // this is the name of the interface we are currently focusing on
+ std::string selected_interface_;
+ // previous IP addresses that we have notified
+ std::string notified_ipv4_addr_;
+ std::string notified_ipv6_addr_;
+
+ int socket_;
+ int pipe_fds_[2];
+ threads::Thread* thread_;
+
+#ifdef BUILD_TESTS
+ bool testing_;
+#endif
+
+ void Loop();
+ bool StopLoop();
+
+ // reset status_table_ by fetching current status of each interface
+ bool InitializeStatus();
+ // update status_table_ by applying the events
+ bool UpdateStatus(uint16_t type, std::vector<EventParam>& params);
+ // update notified_ipv4_addr_ and notified_ipv6_addr_ then notify the parent
+ // class of the change if necessary
+ void NotifyIPAddresses();
+ // Select an appropriate network interface that we will get IP addresses. Also
+ // update selected_interface_.
+ const std::string SelectInterface();
+ // convert ifaddrmsg to a list of EventParam structs
+ std::vector<EventParam> ParseIFAddrMessage(struct ifaddrmsg* message,
+ unsigned int size);
+ // for debugging
+ void DumpTable() const;
+
+ class ListenerThreadDelegate : public threads::ThreadDelegate {
+ public:
+ explicit ListenerThreadDelegate(
+ PlatformSpecificNetworkInterfaceListener* parent);
+ virtual void threadMain();
+ void exitThreadMain();
+
+ private:
+ PlatformSpecificNetworkInterfaceListener* parent_;
+ };
+
+ DISALLOW_COPY_AND_ASSIGN(PlatformSpecificNetworkInterfaceListener);
+};
+
+} // namespace transport_adapter
+} // namespace transport_manager
+
+#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_LINUX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_
diff --git a/src/components/transport_manager/include/transport_manager/tcp/platform_specific/qnx/platform_specific_network_interface_listener_impl.h b/src/components/transport_manager/include/transport_manager/tcp/platform_specific/qnx/platform_specific_network_interface_listener_impl.h
new file mode 100644
index 0000000000..c5982853dc
--- /dev/null
+++ b/src/components/transport_manager/include/transport_manager/tcp/platform_specific/qnx/platform_specific_network_interface_listener_impl.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2018 Xevo Inc.
+ * 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 names of the copyright holders 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 HOLDER 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.
+ */
+
+#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_QNX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_
+#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_QNX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include <netinet/in.h>
+#include "transport_manager/tcp/network_interface_listener.h"
+#include "utils/macro.h"
+#include "utils/threads/thread_delegate.h"
+
+class Thread;
+struct ifaddrmsg;
+
+namespace transport_manager {
+namespace transport_adapter {
+
+class TcpClientListener;
+
+/**
+ * @brief Listener to detect various events on network interfaces
+ */
+class PlatformSpecificNetworkInterfaceListener
+ : public NetworkInterfaceListener {
+ public:
+ /**
+ * @brief Constructor
+ *
+ * @param tcp_client_listener an instance of TcpClientListener which receives
+ * status updates
+ * @param designated_interface if we want to listen only on a specific
+ * network interface, specify its name
+ */
+ PlatformSpecificNetworkInterfaceListener(
+ TcpClientListener* tcp_client_listener,
+ const std::string designated_interface = "");
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~PlatformSpecificNetworkInterfaceListener();
+
+ /**
+ * @brief Initialize this listener
+ */
+ bool Init() OVERRIDE;
+
+ /**
+ * @brief Deinitialize this listener
+ */
+ void Deinit() OVERRIDE;
+
+ /**
+ * @brief Start this listener
+ */
+ bool Start() OVERRIDE;
+
+ /**
+ * @brief Stop this listener
+ */
+ bool Stop() OVERRIDE;
+
+ private:
+};
+
+} // namespace transport_adapter
+} // namespace transport_manager
+
+#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_QNX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
index 2640049ecc..dae66cd30e 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
@@ -5,6 +5,9 @@
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -16,7 +19,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -36,15 +39,18 @@
#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CLIENT_LISTENER_H_
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CLIENT_LISTENER_H_
+#include "utils/lock.h"
#include "utils/threads/thread_delegate.h"
#include "transport_manager/transport_adapter/client_connection_listener.h"
class Thread;
+struct in_addr;
namespace transport_manager {
namespace transport_adapter {
class TransportAdapterController;
+class NetworkInterfaceListener;
/**
* @brief Listener of device adapter that use TCP transport.
@@ -57,11 +63,15 @@ class TcpClientListener : public ClientConnectionListener {
* @param controller Pointer to the device adapter controller.
* @param port Port No.
* @param enable_keepalive If true enables TCP keepalive on accepted
+ * @param designated_interface Specify the name of the network interface to
+ *listen on. If empty, then this process will listen on all network
+ *interfaces.
*connections
*/
TcpClientListener(TransportAdapterController* controller,
uint16_t port,
- bool enable_keepalive);
+ bool enable_keepalive,
+ const std::string designated_interface = "");
/**
* @brief Destructor.
@@ -101,7 +111,18 @@ class TcpClientListener : public ClientConnectionListener {
*/
virtual TransportAdapter::Error StopListening();
+ /**
+ * @brief Called from NetworkInterfaceListener when IP address of the network
+ * interface is changed.
+ */
+ virtual void OnIPAddressUpdated(const std::string ipv4_addr,
+ const std::string ipv6_addr);
+
#ifdef BUILD_TESTS
+ void set_network_interface_listener(NetworkInterfaceListener* listener) {
+ interface_listener_ = listener;
+ }
+
uint16_t port() const {
return port_;
}
@@ -113,19 +134,47 @@ class TcpClientListener : public ClientConnectionListener {
threads::Thread* thread() const {
return thread_;
}
+
+ static void set_testing(bool enabled) {
+ testing_ = enabled;
+ }
#endif // BUILD_TESTS
private:
const uint16_t port_;
const bool enable_keepalive_;
TransportAdapterController* controller_;
+ bool initialized_;
+ bool started_;
threads::Thread* thread_;
int socket_;
bool thread_stop_requested_;
+ int pipe_fds_[2];
+ NetworkInterfaceListener* interface_listener_;
+ const std::string designated_interface_;
+ std::string current_ip_address_;
+ sync_primitives::Lock start_stop_lock_;
+
+#ifdef BUILD_TESTS
+ static bool testing_;
+#endif // BUILD_TESTS
void Loop();
void StopLoop();
+ TransportAdapter::Error StartListeningThread();
+ TransportAdapter::Error StopListeningThread();
+
+ bool StartOnNetworkInterface();
+ bool StopOnNetworkInterface();
+ bool IsListeningOnSpecificInterface() const;
+
+ static int CreateIPv4ServerSocket(uint16_t port,
+ const std::string interface_name = "");
+ static void DestroyServerSocket(int sock);
+ static bool GetIPv4Address(const std::string interface_name,
+ struct in_addr* ip_address);
+
class ListeningThreadDelegate : public threads::ThreadDelegate {
public:
explicit ListeningThreadDelegate(TcpClientListener* parent);
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
index 5431b4455d..647e14dbfa 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h
@@ -5,6 +5,9 @@
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -16,7 +19,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -58,6 +61,18 @@ class TcpTransportAdapter : public TransportAdapterImpl {
*/
virtual ~TcpTransportAdapter();
+ /**
+ * @brief Notification that transport's configuration is updated
+ *
+ * @param new_config The new configuration of the transport
+ */
+ void TransportConfigUpdated(const TransportConfig& new_config) OVERRIDE;
+
+ /**
+ * @brief Returns the transport's configuration information
+ */
+ virtual TransportConfig GetTransportConfiguration() const OVERRIDE;
+
protected:
/**
* @brief Return type of device.
@@ -77,6 +92,19 @@ class TcpTransportAdapter : public TransportAdapterImpl {
* @return True on success false otherwise
*/
virtual bool Restore();
+
+ private:
+ /**
+ * @brief Keeps transport specific configuration
+ *
+ * TCP transport uses following information:
+ * - "enabled": whether the transport is currently enabled or not. Value can
+ * be "true" or "false".
+ * - "tcp_ip_address": string representation of IP address (either IPv4 or
+ * IPv6)
+ * - "tcp_port": string representation of TCP port number (e.g. "12345")
+ */
+ TransportConfig transport_config_;
};
} // namespace transport_adapter
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h
index 0b38f82637..a5a5eb4bdf 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h
@@ -2,6 +2,9 @@
* Copyright (c) 2014, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -204,6 +207,13 @@ class TransportAdapterController {
const ApplicationHandle& app_handle,
::protocol_handler::RawMessagePtr message,
const DataSendError&) = 0;
+
+ /**
+ * @brief Notification that transport's configuration is updated
+ *
+ * @param new_config The new configuration of the transport
+ */
+ virtual void TransportConfigUpdated(const TransportConfig& new_config) = 0;
};
} // namespace transport_adapter
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
index 2b1ada79ad..b503e609f1 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
@@ -2,6 +2,9 @@
* Copyright (c) 2016, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -400,6 +403,13 @@ class TransportAdapterImpl : public TransportAdapter,
const DataSendError& error) OVERRIDE;
/**
+ * @brief Notification that transport's configuration is updated
+ *
+ * @param new_config The new configuration of the transport
+ */
+ void TransportConfigUpdated(const TransportConfig& new_config) OVERRIDE;
+
+ /**
* @brief DoTransportSwitch notifies listeners of transport adapter events
* that transport switching is requested by system
*/
@@ -420,6 +430,14 @@ class TransportAdapterImpl : public TransportAdapter,
SwitchableDevices GetSwitchableDevices() const OVERRIDE;
/**
+ * @brief Returns the transport's configuration information
+ */
+ virtual TransportConfig GetTransportConfiguration() const OVERRIDE {
+ // default is empty
+ return TransportConfig();
+ }
+
+ /**
* @brief Return name of device.
*
* @param device_id Device unique identifier.
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h
index 424fa53dea..07938224d6 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h
@@ -2,6 +2,9 @@
* Copyright (c) 2014, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -277,6 +280,15 @@ class TransportAdapterListener {
*/
virtual void OnTransportSwitchRequested(
const TransportAdapter* transport_adapter) = 0;
+
+ /**
+ * @brief Notification that the transport's specific configuration has been
+ * updated.
+ *
+ * @param transport_adapter pointer to the transport adapter
+ */
+ virtual void OnTransportConfigUpdated(
+ const TransportAdapter* transport_adapter) = 0;
};
} // transport_adapter namespace
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h
index 8a8031c3cf..f1576d1dc3 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h
@@ -2,6 +2,9 @@
* Copyright (c) 2014, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -272,6 +275,15 @@ class TransportAdapterListenerImpl
*/
void OnTransportSwitchRequested(const TransportAdapter* adapter) OVERRIDE;
+ /**
+ * @brief Notification that the transport's specific configuration has been
+ * updated.
+ *
+ * @param transport_adapter pointer to the transport adapter
+ */
+ void OnTransportConfigUpdated(
+ const transport_adapter::TransportAdapter* adapter) OVERRIDE;
+
private:
TransportManager* transport_manager_;
TransportAdapter* transport_adapter_;
diff --git a/src/components/transport_manager/src/tcp/network_interface_listener_impl.cc b/src/components/transport_manager/src/tcp/network_interface_listener_impl.cc
new file mode 100644
index 0000000000..e362ee8a73
--- /dev/null
+++ b/src/components/transport_manager/src/tcp/network_interface_listener_impl.cc
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2018 Xevo Inc.
+ * 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 names of the copyright holders 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 HOLDER 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.
+ */
+
+#include "transport_manager/tcp/network_interface_listener_impl.h"
+#include "platform_specific_network_interface_listener_impl.h"
+
+namespace transport_manager {
+namespace transport_adapter {
+
+CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
+
+NetworkInterfaceListenerImpl::NetworkInterfaceListenerImpl(
+ TcpClientListener* tcp_client_listener,
+ const std::string designated_interface)
+ : platform_specific_impl_(new PlatformSpecificNetworkInterfaceListener(
+ tcp_client_listener, designated_interface)) {
+ LOG4CXX_AUTO_TRACE(logger_);
+}
+
+NetworkInterfaceListenerImpl::~NetworkInterfaceListenerImpl() {
+ LOG4CXX_AUTO_TRACE(logger_);
+}
+
+bool NetworkInterfaceListenerImpl::Init() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ return platform_specific_impl_->Init();
+}
+
+void NetworkInterfaceListenerImpl::Deinit() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ platform_specific_impl_->Deinit();
+}
+
+bool NetworkInterfaceListenerImpl::Start() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ return platform_specific_impl_->Start();
+}
+
+bool NetworkInterfaceListenerImpl::Stop() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ return platform_specific_impl_->Stop();
+}
+
+} // namespace transport_adapter
+} // namespace transport_manager
diff --git a/src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc b/src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc
new file mode 100644
index 0000000000..29e55b97dd
--- /dev/null
+++ b/src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc
@@ -0,0 +1,704 @@
+/*
+ * Copyright (c) 2018 Xevo Inc.
+ * 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 names of the copyright holders 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 HOLDER 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.
+ */
+
+#include "transport_manager/tcp/platform_specific/linux/platform_specific_network_interface_listener_impl.h"
+
+#include <arpa/inet.h>
+#include <asm/types.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <ifaddrs.h>
+#include <unistd.h>
+#include <net/if.h>
+#include <sys/types.h>
+#include <sys/select.h>
+#include <sys/socket.h>
+
+#include <linux/netlink.h>
+#include <linux/rtnetlink.h>
+
+#include "transport_manager/tcp/tcp_client_listener.h"
+#include "utils/logger.h"
+#include "utils/threads/thread.h"
+
+namespace transport_manager {
+namespace transport_adapter {
+
+CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
+
+static std::string GetInterfaceName(unsigned int if_index);
+static bool SetNonblocking(int s);
+
+bool InterfaceStatus::IsAvailable() const {
+ // check if the interface is UP and RUNNING
+ return ((flags_ & IFF_UP) > 0) && ((flags_ & IFF_RUNNING) > 0);
+}
+
+bool InterfaceStatus::IsLoopback() const {
+ return flags_ & IFF_LOOPBACK;
+}
+
+bool InterfaceStatus::HasIPAddress() const {
+ return has_ipv4_ || has_ipv6_;
+}
+
+std::string InterfaceStatus::GetIPv4Address() const {
+ char buf[INET_ADDRSTRLEN] = "";
+ if (has_ipv4_ && IsAvailable()) {
+ inet_ntop(AF_INET, &ipv4_address_, buf, sizeof(buf));
+ }
+ return std::string(buf);
+}
+
+std::string InterfaceStatus::GetIPv6Address() const {
+ char buf[INET6_ADDRSTRLEN] = "";
+ if (has_ipv6_ && IsAvailable()) {
+ inet_ntop(AF_INET6, &ipv6_address_, buf, sizeof(buf));
+ }
+ return std::string(buf);
+}
+
+void InterfaceStatus::SetIPv4Address(struct in_addr* addr) {
+ if (addr == NULL) {
+ has_ipv4_ = false;
+ } else {
+ ipv4_address_ = *addr;
+ has_ipv4_ = true;
+ }
+}
+
+void InterfaceStatus::SetIPv6Address(struct in6_addr* addr) {
+ if (addr == NULL) {
+ has_ipv6_ = false;
+ } else {
+ ipv6_address_ = *addr;
+ has_ipv6_ = true;
+ }
+}
+
+PlatformSpecificNetworkInterfaceListener::
+ PlatformSpecificNetworkInterfaceListener(
+ TcpClientListener* tcp_client_listener,
+ const std::string designated_interface)
+ : tcp_client_listener_(tcp_client_listener)
+ , designated_interface_(designated_interface)
+ , selected_interface_("")
+ , notified_ipv4_addr_("")
+ , notified_ipv6_addr_("")
+ , socket_(-1)
+#ifdef BUILD_TESTS
+ , testing_(false)
+#endif // BUILD_TESTS
+{
+ pipe_fds_[0] = pipe_fds_[1] = -1;
+ thread_ = threads::CreateThread("PlatformSpecificNetworkInterfaceListener",
+ new ListenerThreadDelegate(this));
+}
+
+PlatformSpecificNetworkInterfaceListener::
+ ~PlatformSpecificNetworkInterfaceListener() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ Stop();
+ Deinit();
+
+ delete thread_->delegate();
+ threads::DeleteThread(thread_);
+}
+
+bool PlatformSpecificNetworkInterfaceListener::Init() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (socket_ >= 0) {
+ LOG4CXX_WARN(logger_, "Network interface listener is already initialized");
+ return false;
+ }
+
+ socket_ = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+ if (socket_ == -1) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to create netlink socket");
+ return false;
+ }
+
+ if (!SetNonblocking(socket_)) {
+ LOG4CXX_WARN(logger_, "Failed to configure netlink socket to non-blocking");
+ }
+
+ struct sockaddr_nl addr;
+ memset(&addr, 0, sizeof(addr));
+ addr.nl_family = AF_NETLINK;
+ addr.nl_pad = 0;
+ addr.nl_pid = 0;
+ addr.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
+
+ if (bind(socket_, reinterpret_cast<sockaddr*>(&addr), sizeof(addr)) != 0) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to bind netlink socket");
+ close(socket_);
+ socket_ = -1;
+ return false;
+ }
+
+ if (pipe(pipe_fds_) != 0) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to create internal pipe");
+ close(socket_);
+ socket_ = -1;
+ return false;
+ }
+
+ if (!SetNonblocking(pipe_fds_[0])) {
+ LOG4CXX_WARN(logger_, "Failed to configure pipe to non-blocking");
+ }
+
+ return true;
+}
+
+void PlatformSpecificNetworkInterfaceListener::Deinit() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (socket_ >= 0) {
+ close(socket_);
+ socket_ = -1;
+ }
+ if (pipe_fds_[1] >= 0) {
+ close(pipe_fds_[1]);
+ pipe_fds_[1] = -1;
+ }
+ if (pipe_fds_[0] >= 0) {
+ close(pipe_fds_[0]);
+ pipe_fds_[0] = -1;
+ }
+}
+
+bool PlatformSpecificNetworkInterfaceListener::Start() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (socket_ < 0) {
+ LOG4CXX_WARN(logger_, "Interface listener is not initialized");
+ return false;
+ }
+
+ if (thread_->is_running()) {
+ LOG4CXX_WARN(logger_, "Interface listener is already started");
+ return false;
+ }
+
+ if (!thread_->start()) {
+ LOG4CXX_ERROR(logger_, "Failed to start interface listener");
+ return false;
+ }
+
+ LOG4CXX_INFO(logger_, "Network interface listener started");
+ return true;
+}
+
+bool PlatformSpecificNetworkInterfaceListener::Stop() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (!thread_->is_running()) {
+ LOG4CXX_DEBUG(logger_, "interface listener is not running");
+ return false;
+ }
+
+ thread_->join();
+
+ LOG4CXX_INFO(logger_, "Network interface listener stopped");
+ return true;
+}
+
+void PlatformSpecificNetworkInterfaceListener::Loop() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // Initialize status_table_ by acquiring a list of interfaces and their
+ // current statuses. Also we will notify an event to the listener if IP
+ // address is already available.
+ InitializeStatus();
+ NotifyIPAddresses();
+
+ // I am not sure required buffer size for netlink data structures. Most of
+ // implementation I found online uses 4096 so I followed them.
+ char buf[4096];
+ fd_set rfds;
+
+ while (1) {
+ FD_ZERO(&rfds);
+ FD_SET(socket_, &rfds);
+ FD_SET(pipe_fds_[0], &rfds);
+ int nfds = socket_ > pipe_fds_[0] ? socket_ : pipe_fds_[0];
+
+ // wait for some data from netlink socket (socket_) and our internal pipe
+ int ret = select(nfds + 1, &rfds, NULL, NULL, NULL);
+ if (ret < 0) {
+ if (errno == EINTR) {
+ continue;
+ } else {
+ LOG4CXX_WARN(logger_,
+ "select failed for netlink. Aborting interface listener.");
+ break;
+ }
+ }
+
+ // Received data from internal pipe, indicating StopLoop() is called.
+ // We'll break the while() loop and eventually exit this thread.
+ if (FD_ISSET(pipe_fds_[0], &rfds)) {
+ ret = read(pipe_fds_[0], buf, sizeof(buf));
+ if (ret < 0) {
+ if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) {
+ LOG4CXX_WARN(
+ logger_,
+ "Failed to read from pipe. Aborting interface listener.");
+ break;
+ }
+ } else if (ret == 0) {
+ LOG4CXX_WARN(logger_,
+ "Pipe disconnected. Aborting interface listener.");
+ break;
+ } else {
+ LOG4CXX_DEBUG(logger_, "received terminating event through pipe");
+ break;
+ }
+ }
+
+#ifdef BUILD_TESTS
+ if (testing_) { // don't enable events from network interface while testing
+ continue;
+ }
+#endif // BUILD_TESTS
+
+ // received data from netlink socket
+ if (FD_ISSET(socket_, &rfds)) {
+ ret = recv(socket_, buf, sizeof(buf), 0);
+ if (ret < 0) {
+ if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) {
+ LOG4CXX_WARN(logger_,
+ "Failed to read from netlink socket. Aborting interface "
+ "listener.");
+ break;
+ }
+ } else if (ret == 0) {
+ LOG4CXX_WARN(
+ logger_,
+ "Netlink socket disconnected. Aborting interface listener.");
+ break;
+ } else {
+ struct nlmsghdr* header = reinterpret_cast<struct nlmsghdr*>(buf);
+ int len = ret;
+
+ // Parse the stream. We may receive multiple (header + data) pairs at a
+ // time so we use for-loop to go through.
+ for (; NLMSG_OK(header, len); header = NLMSG_NEXT(header, len)) {
+ if (header->nlmsg_type == NLMSG_ERROR) {
+ LOG4CXX_WARN(logger_, "received error event from netlink");
+ break;
+ }
+
+ std::vector<EventParam> params;
+
+ if (header->nlmsg_type == RTM_NEWLINK ||
+ header->nlmsg_type == RTM_DELLINK) {
+ // For these events, data part contains an ifinfomsg struct and a
+ // series of rtattr structures. See rtnetlink(7).
+ // We are only interested in interface index and flags.
+ struct ifinfomsg* ifinfo_msg =
+ reinterpret_cast<struct ifinfomsg*>(NLMSG_DATA(header));
+ EventParam param(ifinfo_msg->ifi_index, ifinfo_msg->ifi_flags);
+ params.push_back(param);
+
+ } else if (header->nlmsg_type == RTM_NEWADDR ||
+ header->nlmsg_type == RTM_DELADDR) {
+ // For these events, data part contains an ifaddrmsg struct and
+ // optionally some rtattr structures. We'll extract IP address(es)
+ // from them.
+ struct ifaddrmsg* ifaddr_msg =
+ reinterpret_cast<struct ifaddrmsg*>(NLMSG_DATA(header));
+ unsigned int size = IFA_PAYLOAD(header);
+ params = ParseIFAddrMessage(ifaddr_msg, size);
+
+ } else {
+ continue;
+ }
+
+ // update status_table_ based on received data
+ UpdateStatus(header->nlmsg_type, params);
+ }
+ }
+
+ // notify the listener if necessary
+ NotifyIPAddresses();
+ }
+ }
+}
+
+bool PlatformSpecificNetworkInterfaceListener::StopLoop() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ LOG4CXX_INFO(logger_, "Stopping network interface listener");
+
+ if (pipe_fds_[1] < 0) {
+ LOG4CXX_WARN(logger_, "StopLoop called in invalid state");
+ return false;
+ }
+
+ char dummy[1] = {0};
+ int ret = write(pipe_fds_[1], dummy, sizeof(dummy));
+ if (ret <= 0) {
+ LOG4CXX_WARN_WITH_ERRNO(
+ logger_, "Failed to send stop message to interface listener");
+ return false;
+ }
+
+ return true;
+}
+
+bool PlatformSpecificNetworkInterfaceListener::InitializeStatus() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+#ifdef BUILD_TESTS
+ if (testing_) {
+ // don't actually call getifaddrs()
+ return true;
+ }
+#endif // BUILD_TESTS
+
+ struct ifaddrs* if_list, *interface;
+ if (getifaddrs(&if_list) != 0) {
+ LOG4CXX_WARN(logger_,
+ "getifaddr failed, interface status won't be available until "
+ "a change occurs");
+ return false;
+ }
+
+ // clear existing table
+ status_table_.clear();
+
+ for (interface = if_list; interface != NULL;
+ interface = interface->ifa_next) {
+ if (interface->ifa_name == NULL || interface->ifa_name[0] == '\0') {
+ continue;
+ }
+ if (interface->ifa_addr == NULL) {
+ continue;
+ }
+
+ std::string ifname(interface->ifa_name);
+ InterfaceStatus& status = status_table_[ifname];
+
+ switch (interface->ifa_addr->sa_family) {
+ case AF_INET: {
+ struct sockaddr_in* addr =
+ reinterpret_cast<struct sockaddr_in*>(interface->ifa_addr);
+ status.SetIPv4Address(&addr->sin_addr);
+ break;
+ }
+ case AF_INET6: {
+ struct sockaddr_in6* addr =
+ reinterpret_cast<struct sockaddr_in6*>(interface->ifa_addr);
+ status.SetIPv6Address(&addr->sin6_addr);
+ break;
+ }
+ default:
+ continue;
+ }
+ status.SetFlags(interface->ifa_flags);
+ }
+
+ freeifaddrs(if_list);
+
+ LOG4CXX_DEBUG(logger_, "Successfully acquired network interface status");
+ DumpTable();
+ return true;
+}
+
+bool PlatformSpecificNetworkInterfaceListener::UpdateStatus(
+ uint16_t type, std::vector<EventParam>& params) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ for (std::vector<EventParam>::iterator it = params.begin();
+ it != params.end();
+ ++it) {
+ std::string ifname = GetInterfaceName(it->if_index);
+ if (ifname.empty()) {
+ continue;
+ }
+
+ InterfaceStatus& status = status_table_[ifname];
+
+ switch (type) {
+ case RTM_NEWLINK: {
+ LOG4CXX_DEBUG(logger_,
+ "netlink event: interface " << ifname
+ << " created or updated");
+ status.SetFlags(it->flags);
+ break;
+ }
+ case RTM_DELLINK:
+ LOG4CXX_DEBUG(logger_,
+ "netlink event: interface " << ifname << " removed");
+ status_table_.erase(ifname);
+ break;
+ case RTM_NEWADDR: {
+ sockaddr* addr = reinterpret_cast<sockaddr*>(&it->address);
+ if (addr->sa_family == AF_INET) {
+ sockaddr_in* addr_in = reinterpret_cast<sockaddr_in*>(addr);
+ status.SetIPv4Address(&addr_in->sin_addr);
+ LOG4CXX_DEBUG(logger_,
+ "netlink event: IPv4 address of interface "
+ << ifname << " updated to "
+ << status.GetIPv4Address());
+ } else if (addr->sa_family == AF_INET6) {
+ sockaddr_in6* addr_in6 = reinterpret_cast<sockaddr_in6*>(addr);
+ status.SetIPv6Address(&addr_in6->sin6_addr);
+ LOG4CXX_DEBUG(logger_,
+ "netlink event: IPv6 address of interface "
+ << ifname << " updated to "
+ << status.GetIPv6Address());
+ }
+ break;
+ }
+ case RTM_DELADDR: {
+ sockaddr* addr = reinterpret_cast<sockaddr*>(&it->address);
+ if (addr->sa_family == AF_INET) {
+ LOG4CXX_DEBUG(logger_,
+ "netlink event: IPv4 address of interface "
+ << ifname << " removed");
+ status.SetIPv4Address(NULL);
+ } else if (addr->sa_family == AF_INET6) {
+ LOG4CXX_DEBUG(logger_,
+ "netlink event: IPv6 address of interface "
+ << ifname << " removed");
+ status.SetIPv6Address(NULL);
+ }
+ break;
+ }
+ default:
+ LOG4CXX_WARN(logger_, "Unsupported netlink event (" << type << ")");
+ break;
+ }
+ }
+ return true;
+}
+
+void PlatformSpecificNetworkInterfaceListener::NotifyIPAddresses() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ std::string ipv4_addr;
+ std::string ipv6_addr;
+ const std::string interface_name = SelectInterface();
+
+ // note that if interface_name is empty (i.e. no interface is selected),
+ // the IP addresses will be empty
+ if (!interface_name.empty()) {
+ InterfaceStatusTable::iterator it = status_table_.find(interface_name);
+ if (status_table_.end() != it) {
+ InterfaceStatus& status = it->second;
+ ipv4_addr = status.GetIPv4Address();
+ ipv6_addr = status.GetIPv6Address();
+ }
+ }
+
+ if (notified_ipv4_addr_ != ipv4_addr || notified_ipv6_addr_ != ipv6_addr) {
+ LOG4CXX_INFO(logger_,
+ "IP address updated: \"" << notified_ipv4_addr_ << "\" -> \""
+ << ipv4_addr << "\", \""
+ << notified_ipv6_addr_ << "\" -> \""
+ << ipv6_addr << "\"");
+
+ notified_ipv4_addr_ = ipv4_addr;
+ notified_ipv6_addr_ = ipv6_addr;
+
+ tcp_client_listener_->OnIPAddressUpdated(notified_ipv4_addr_,
+ notified_ipv6_addr_);
+ }
+}
+
+const std::string PlatformSpecificNetworkInterfaceListener::SelectInterface() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (!designated_interface_.empty()) {
+ return designated_interface_;
+ }
+
+ InterfaceStatusTable::iterator it;
+
+ if (!selected_interface_.empty()) {
+ // if current network interface is still available and has IP address, then
+ // we use it
+ it = status_table_.find(selected_interface_);
+ if (it != status_table_.end()) {
+ InterfaceStatus& status = it->second;
+ if (status.IsAvailable() && status.HasIPAddress()) {
+ return selected_interface_;
+ }
+ }
+ }
+
+ // pick a network interface that has IP address
+ for (it = status_table_.begin(); it != status_table_.end(); ++it) {
+ InterfaceStatus& status = it->second;
+ // ignore loopback interfaces
+ if (status.IsLoopback()) {
+ continue;
+ }
+ // if the interface has to be UP and RUNNING, and must have an IP address
+ if (!(status.IsAvailable() && status.HasIPAddress())) {
+ continue;
+ }
+
+ selected_interface_ = it->first;
+ LOG4CXX_DEBUG(logger_,
+ "selecting network interface: " << selected_interface_);
+ return selected_interface_;
+ }
+
+ selected_interface_ = "";
+ return selected_interface_;
+}
+
+std::vector<PlatformSpecificNetworkInterfaceListener::EventParam>
+PlatformSpecificNetworkInterfaceListener::ParseIFAddrMessage(
+ struct ifaddrmsg* message, unsigned int size) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ std::vector<EventParam> params;
+
+ // Iterate through rtattr structs. (The first one can be acquired through
+ // IFA_RTA() macro)
+ for (struct rtattr* attr = IFA_RTA(message); RTA_OK(attr, size);
+ attr = RTA_NEXT(attr, size)) {
+ if (!(attr->rta_type == IFA_LOCAL || attr->rta_type == IFA_ADDRESS)) {
+ continue;
+ }
+
+ EventParam param(message->ifa_index);
+
+ if (message->ifa_family == AF_INET) {
+ // make sure the size of data is >= 4 bytes
+ if (RTA_PAYLOAD(attr) < sizeof(struct in_addr)) {
+ LOG4CXX_DEBUG(logger_,
+ "Invalid netlink event: insufficient IPv4 address data");
+ continue;
+ }
+
+ // Data part of rtattr contains IPv4 address. Copy it to param.address
+ struct in_addr* ipv4_addr =
+ reinterpret_cast<struct in_addr*>(RTA_DATA(attr));
+
+ struct sockaddr_in* sockaddr =
+ reinterpret_cast<struct sockaddr_in*>(&param.address);
+ sockaddr->sin_family = AF_INET;
+ sockaddr->sin_addr = *ipv4_addr;
+
+ } else if (message->ifa_family == AF_INET6) {
+ // make sure the size of data is >= 16 bytes
+ if (RTA_PAYLOAD(attr) < sizeof(struct in6_addr)) {
+ LOG4CXX_DEBUG(logger_,
+ "Invalid netlink event: insufficient IPv6 address data");
+ continue;
+ }
+
+ // Data part of rtattr contains IPv6 address. Copy it to param.address
+ struct in6_addr* ipv6_addr =
+ reinterpret_cast<struct in6_addr*>(RTA_DATA(attr));
+
+ struct sockaddr_in6* sockaddr =
+ reinterpret_cast<struct sockaddr_in6*>(&param.address);
+ sockaddr->sin6_family = AF_INET6;
+ sockaddr->sin6_addr = *ipv6_addr;
+
+ } else {
+ LOG4CXX_WARN(logger_,
+ "Unsupported family (" << message->ifa_family << ")");
+ continue;
+ }
+
+ params.push_back(param);
+ }
+
+ return params;
+}
+
+void PlatformSpecificNetworkInterfaceListener::DumpTable() const {
+ LOG4CXX_DEBUG(logger_,
+ "Number of network interfaces: " << status_table_.size());
+
+ for (auto it = status_table_.begin(); it != status_table_.end(); ++it) {
+ const std::string ifname = it->first;
+ const InterfaceStatus& status = it->second;
+
+ LOG4CXX_DEBUG(
+ logger_,
+ " " << ifname << " : flags=" << status.GetFlags()
+ << " : available: " << (status.IsAvailable() ? "yes" : "no")
+ << " IPv4: " << status.GetIPv4Address()
+ << " IPv6: " << status.GetIPv6Address()
+ << (status.IsLoopback() ? " (loopback)" : ""));
+ }
+}
+
+PlatformSpecificNetworkInterfaceListener::ListenerThreadDelegate::
+ ListenerThreadDelegate(PlatformSpecificNetworkInterfaceListener* parent)
+ : parent_(parent) {}
+
+void PlatformSpecificNetworkInterfaceListener::ListenerThreadDelegate::
+ threadMain() {
+ parent_->Loop();
+}
+
+void PlatformSpecificNetworkInterfaceListener::ListenerThreadDelegate::
+ exitThreadMain() {
+ parent_->StopLoop();
+}
+
+static std::string GetInterfaceName(unsigned int if_index) {
+ char buf[IFNAMSIZ + 1] = "";
+ if_indextoname(if_index, buf);
+ return std::string(buf);
+}
+
+static bool SetNonblocking(int s) {
+ int prev_flag = fcntl(s, F_GETFL, 0);
+ if (prev_flag == -1) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to acquire socket flag");
+ return false;
+ }
+
+ int ret = fcntl(s, F_SETFL, prev_flag | O_NONBLOCK);
+ if (ret == -1) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_,
+ "Failed to configure socket to non-blocking");
+ return false;
+ }
+
+ return true;
+}
+
+} // namespace transport_adapter
+} // namespace transport_manager
diff --git a/src/components/dbus/include/dbus/message_descriptions.h b/src/components/transport_manager/src/tcp/platform_specific/qnx/platform_specific_network_interface_listener.cc
index a9e7a5e141..9ca7890278 100644
--- a/src/components/dbus/include/dbus/message_descriptions.h
+++ b/src/components/transport_manager/src/tcp/platform_specific/qnx/platform_specific_network_interface_listener.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Ford Motor Company
+ * Copyright (c) 2018 Xevo Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -13,7 +13,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the names of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -29,45 +29,41 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef SRC_COMPONENTS_DBUS_INCLUDE_DBUS_MESSAGE_DESCRIPTIONS_H_
-#define SRC_COMPONENTS_DBUS_INCLUDE_DBUS_MESSAGE_DESCRIPTIONS_H_
+#include "transport_manager/tcp/platform_specific/qnx/platform_specific_network_interface_listener_impl.h"
-#include <stdint.h>
-#include <stdlib.h>
-#include "interfaces/HMI_API.h"
+namespace transport_manager {
+namespace transport_adapter {
-namespace ford_message_descriptions {
+CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
-enum ParameterType { Integer, Boolean, Float, String, Struct, Enum, Array };
+PlatformSpecificNetworkInterfaceListener::
+ PlatformSpecificNetworkInterfaceListener(
+ TcpClientListener* tcp_client_listener,
+ const std::string designated_interface) {}
-struct ParameterDescription {
- const char* name;
- const ParameterType type;
- const bool obligatory; // TODO (dchmerev@luxoft.com): rename to 'mandatory'
- // as in HMI API description
-};
+PlatformSpecificNetworkInterfaceListener::
+ ~PlatformSpecificNetworkInterfaceListener() {
+ LOG4CXX_AUTO_TRACE(logger_);
+}
-struct ArrayDescription {
- const ParameterDescription base;
- const ParameterDescription* element;
- const char* element_dbus_signature;
-};
+bool PlatformSpecificNetworkInterfaceListener::Init() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ return true;
+}
-struct StructDescription {
- const ParameterDescription base;
- const ParameterDescription** parameters;
-};
+void PlatformSpecificNetworkInterfaceListener::Deinit() {
+ LOG4CXX_AUTO_TRACE(logger_);
+}
-struct MessageDescription {
- const char* interface;
- const char* name;
- const hmi_apis::messageType::eType message_type;
- const hmi_apis::FunctionID::eType function_id;
- const ParameterDescription** parameters;
-};
+bool PlatformSpecificNetworkInterfaceListener::Start() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ return true;
+}
-extern const MessageDescription* message_descriptions[];
+bool PlatformSpecificNetworkInterfaceListener::Stop() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ return true;
+}
-} // namespace ford_message_descriptions
-
-#endif // SRC_COMPONENTS_DBUS_INCLUDE_DBUS_MESSAGE_DESCRIPTIONS_H_
+} // namespace transport_adapter
+} // namespace transport_manager
diff --git a/src/components/transport_manager/src/tcp/tcp_client_listener.cc b/src/components/transport_manager/src/tcp/tcp_client_listener.cc
index 207149eb8c..4b590318e6 100644
--- a/src/components/transport_manager/src/tcp/tcp_client_listener.cc
+++ b/src/components/transport_manager/src/tcp/tcp_client_listener.cc
@@ -3,6 +3,9 @@
* Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -14,7 +17,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -36,11 +39,14 @@
#include <memory.h>
#include <signal.h>
#include <errno.h>
+#include <fcntl.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/types.h>
+#include <sys/select.h>
#include <sys/sysctl.h>
#include <sys/socket.h>
+#include <ifaddrs.h>
#ifdef __linux__
#include <linux/tcp.h>
#else // __linux__
@@ -56,6 +62,7 @@
#include "utils/make_shared.h"
#include "utils/threads/thread.h"
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
+#include "transport_manager/tcp/network_interface_listener_impl.h"
#include "transport_manager/tcp/tcp_device.h"
#include "transport_manager/tcp/tcp_socket_connection.h"
@@ -64,72 +71,88 @@ namespace transport_adapter {
CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
+static bool SetNonblocking(int s);
+
+#ifdef BUILD_TESTS
+bool TcpClientListener::testing_ = false;
+#endif // BUILD_TESTS
+
TcpClientListener::TcpClientListener(TransportAdapterController* controller,
const uint16_t port,
- const bool enable_keepalive)
+ const bool enable_keepalive,
+ const std::string designated_interface)
: port_(port)
, enable_keepalive_(enable_keepalive)
, controller_(controller)
+ , initialized_(false)
+ , started_(false)
, thread_(0)
, socket_(-1)
- , thread_stop_requested_(false) {
+ , thread_stop_requested_(false)
+ , designated_interface_(designated_interface) {
+ pipe_fds_[0] = pipe_fds_[1] = -1;
thread_ = threads::CreateThread("TcpClientListener",
new ListeningThreadDelegate(this));
+ interface_listener_ =
+ new NetworkInterfaceListenerImpl(this, designated_interface);
}
TransportAdapter::Error TcpClientListener::Init() {
LOG4CXX_AUTO_TRACE(logger_);
thread_stop_requested_ = false;
- socket_ = socket(AF_INET, SOCK_STREAM, 0);
- if (-1 == socket_) {
- LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to create socket");
- return TransportAdapter::FAIL;
- }
-
- sockaddr_in server_address = {0};
- server_address.sin_family = AF_INET;
- server_address.sin_port = htons(port_);
- server_address.sin_addr.s_addr = INADDR_ANY;
-
- int optval = 1;
- if (0 !=
- setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval))) {
- LOG4CXX_WARN_WITH_ERRNO(logger_, "setsockopt SO_REUSEADDR failed");
+ if (!IsListeningOnSpecificInterface()) {
+ // Network interface is not specified. We will listen on all interfaces
+ // using INADDR_ANY. If socket creation fails, we will treat it an error.
+ socket_ = CreateIPv4ServerSocket(port_);
+ if (-1 == socket_) {
+ LOG4CXX_ERROR(logger_, "Failed to create TCP socket");
+ return TransportAdapter::FAIL;
+ }
+ } else {
+ // Network interface is specified and we wiill listen only on the interface.
+ // In this case, the server socket will be created once
+ // NetworkInterfaceListener notifies the interface's IP address.
+ LOG4CXX_INFO(logger_,
+ "TCP server socket will listen on "
+ << designated_interface_
+ << " once it has an IPv4 address.");
}
- if (bind(socket_,
- reinterpret_cast<sockaddr*>(&server_address),
- sizeof(server_address)) != 0) {
- LOG4CXX_ERROR_WITH_ERRNO(logger_, "bind() failed");
+ if (!interface_listener_->Init()) {
+ if (socket_ >= 0) {
+ close(socket_);
+ socket_ = -1;
+ }
return TransportAdapter::FAIL;
}
- const int kBacklog = 128;
- if (0 != listen(socket_, kBacklog)) {
- LOG4CXX_ERROR_WITH_ERRNO(logger_, "listen() failed");
- return TransportAdapter::FAIL;
- }
+ initialized_ = true;
return TransportAdapter::OK;
}
void TcpClientListener::Terminate() {
LOG4CXX_AUTO_TRACE(logger_);
- if (socket_ == -1) {
- LOG4CXX_WARN(logger_, "Socket has been closed");
+
+ if (!initialized_) {
return;
}
- if (shutdown(socket_, SHUT_RDWR) != 0) {
- LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to shutdown socket");
- }
- if (close(socket_) != 0) {
- LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to close socket");
+
+ if (!IsListeningOnSpecificInterface()) {
+ DestroyServerSocket(socket_);
+ socket_ = -1;
+ } else {
+ sync_primitives::AutoLock auto_lock(start_stop_lock_);
+ DestroyServerSocket(socket_);
+ socket_ = -1;
}
- socket_ = -1;
+
+ interface_listener_->Deinit();
+ initialized_ = false;
}
bool TcpClientListener::IsInitialised() const {
- return thread_;
+ return initialized_;
}
TcpClientListener::~TcpClientListener() {
@@ -138,6 +161,7 @@ TcpClientListener::~TcpClientListener() {
delete thread_->delegate();
threads::DeleteThread(thread_);
Terminate();
+ delete interface_listener_;
}
void SetKeepaliveOptions(const int fd) {
@@ -203,104 +227,151 @@ void SetKeepaliveOptions(const int fd) {
void TcpClientListener::Loop() {
LOG4CXX_AUTO_TRACE(logger_);
- while (!thread_stop_requested_) {
- sockaddr_in client_address;
- socklen_t client_address_size = sizeof(client_address);
- const int connection_fd = accept(
- socket_, (struct sockaddr*)&client_address, &client_address_size);
- if (thread_stop_requested_) {
- LOG4CXX_DEBUG(logger_, "thread_stop_requested_");
- close(connection_fd);
- break;
- }
+ fd_set rfds;
+ char dummy[16];
- if (connection_fd < 0) {
- LOG4CXX_ERROR_WITH_ERRNO(logger_, "accept() failed");
- continue;
- }
-
- if (AF_INET != client_address.sin_family) {
- LOG4CXX_DEBUG(logger_, "Address of connected client is invalid");
- close(connection_fd);
- continue;
+ while (!thread_stop_requested_) {
+ FD_ZERO(&rfds);
+ FD_SET(socket_, &rfds);
+ FD_SET(pipe_fds_[0], &rfds);
+ int nfds = socket_ > pipe_fds_[0] ? socket_ : pipe_fds_[0];
+
+ int ret = select(nfds + 1, &rfds, NULL, NULL, NULL);
+ if (ret < 0) {
+ if (errno == EINTR) {
+ continue;
+ } else {
+ LOG4CXX_WARN(logger_, "select failed for TCP server socket");
+ break;
+ }
}
- char device_name[32];
- strncpy(device_name,
- inet_ntoa(client_address.sin_addr),
- sizeof(device_name) / sizeof(device_name[0]));
- LOG4CXX_INFO(logger_, "Connected client " << device_name);
- LOG4CXX_INFO(logger_, "Port is: " << port_);
-
- if (enable_keepalive_) {
- SetKeepaliveOptions(connection_fd);
+ if (FD_ISSET(pipe_fds_[0], &rfds)) {
+ ret = read(pipe_fds_[0], dummy, sizeof(dummy));
+ if (ret < 0) {
+ if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) {
+ LOG4CXX_WARN(
+ logger_,
+ "Failed to read from pipe, aborting TCP server socket loop.");
+ break;
+ }
+ } else if (ret == 0) {
+ LOG4CXX_WARN(logger_,
+ "Pipe disconnected, aborting TCP server socket loop.");
+ break;
+ } else {
+ LOG4CXX_DEBUG(logger_,
+ "received stop command of TCP server socket loop");
+ break;
+ }
}
- const auto device_uid =
- device_name + std::string(":") + std::to_string(port_);
+ if (FD_ISSET(socket_, &rfds)) {
+ sockaddr_in client_address;
+ socklen_t client_address_size = sizeof(client_address);
+ const int connection_fd = accept(
+ socket_, (struct sockaddr*)&client_address, &client_address_size);
+ if (thread_stop_requested_) {
+ LOG4CXX_DEBUG(logger_, "thread_stop_requested_");
+ close(connection_fd);
+ break;
+ }
+
+ if (connection_fd < 0) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "accept() failed");
+ continue;
+ }
+
+ if (AF_INET != client_address.sin_family) {
+ LOG4CXX_DEBUG(logger_, "Address of connected client is invalid");
+ close(connection_fd);
+ continue;
+ }
+
+ char device_name[32];
+ strncpy(device_name,
+ inet_ntoa(client_address.sin_addr),
+ sizeof(device_name) / sizeof(device_name[0]));
+ LOG4CXX_INFO(logger_, "Connected client " << device_name);
+ LOG4CXX_INFO(logger_, "Port is: " << port_);
+
+ if (enable_keepalive_) {
+ SetKeepaliveOptions(connection_fd);
+ }
+
+ const auto device_uid =
+ device_name + std::string(":") + std::to_string(port_);
#if defined(BUILD_TESTS)
- TcpDevice* tcp_device =
- new TcpDevice(client_address.sin_addr.s_addr, device_uid, device_name);
+ TcpDevice* tcp_device = new TcpDevice(
+ client_address.sin_addr.s_addr, device_uid, device_name);
#else
- TcpDevice* tcp_device =
- new TcpDevice(client_address.sin_addr.s_addr, device_uid);
+ TcpDevice* tcp_device =
+ new TcpDevice(client_address.sin_addr.s_addr, device_uid);
#endif // BUILD_TESTS
- DeviceSptr device = controller_->AddDevice(tcp_device);
- tcp_device = static_cast<TcpDevice*>(device.get());
- const ApplicationHandle app_handle =
- tcp_device->AddIncomingApplication(connection_fd);
-
- utils::SharedPtr<TcpSocketConnection> connection =
- utils::MakeShared<TcpSocketConnection>(
- device->unique_device_id(), app_handle, controller_);
- controller_->ConnectionCreated(
- connection, device->unique_device_id(), app_handle);
- connection->set_socket(connection_fd);
- const TransportAdapter::Error error = connection->Start();
- if (TransportAdapter::OK != error) {
- LOG4CXX_ERROR(logger_,
- "TCP connection::Start() failed with error: " << error);
+ DeviceSptr device = controller_->AddDevice(tcp_device);
+ tcp_device = static_cast<TcpDevice*>(device.get());
+ const ApplicationHandle app_handle =
+ tcp_device->AddIncomingApplication(connection_fd);
+
+ utils::SharedPtr<TcpSocketConnection> connection =
+ utils::MakeShared<TcpSocketConnection>(
+ device->unique_device_id(), app_handle, controller_);
+ controller_->ConnectionCreated(
+ connection, device->unique_device_id(), app_handle);
+ connection->set_socket(connection_fd);
+ const TransportAdapter::Error error = connection->Start();
+ if (TransportAdapter::OK != error) {
+ LOG4CXX_ERROR(logger_,
+ "TCP connection::Start() failed with error: " << error);
+ }
}
}
+
+ LOG4CXX_INFO(logger_, "TCP server socket loop is terminated.");
}
void TcpClientListener::StopLoop() {
LOG4CXX_AUTO_TRACE(logger_);
+ if (pipe_fds_[1] < 0) {
+ LOG4CXX_WARN(logger_, "StopLoop called in invalid state");
+ return;
+ }
+
thread_stop_requested_ = true;
- // We need to connect to the listening socket to unblock accept() call
- int byesocket = socket(AF_INET, SOCK_STREAM, 0);
- sockaddr_in server_address = {0};
- server_address.sin_family = AF_INET;
- server_address.sin_port = htons(port_);
- server_address.sin_addr.s_addr = INADDR_ANY;
- if (0 != connect(byesocket,
- reinterpret_cast<sockaddr*>(&server_address),
- sizeof(server_address))) {
- LOG4CXX_WARN_WITH_ERRNO(logger_, "Failed to connect byesocket");
- } else {
- // Can only shutdown socket if connected
- if (0 != shutdown(byesocket, SHUT_RDWR)) {
- LOG4CXX_WARN_WITH_ERRNO(logger_, "Failed to shutdown byesocket");
- }
+
+ char dummy[1] = {0};
+ int ret = write(pipe_fds_[1], dummy, sizeof(dummy));
+ if (ret <= 0) {
+ LOG4CXX_WARN_WITH_ERRNO(
+ logger_, "Failed to send stop message to TCP server socket loop");
}
- close(byesocket);
}
TransportAdapter::Error TcpClientListener::StartListening() {
LOG4CXX_AUTO_TRACE(logger_);
- if (thread_->is_running()) {
+ if (started_) {
LOG4CXX_WARN(
logger_,
"TransportAdapter::BAD_STATE. Listener has already been started");
return TransportAdapter::BAD_STATE;
}
- if (!thread_->start()) {
- LOG4CXX_ERROR(logger_, "Tcp client listener thread start failed");
+ if (!interface_listener_->Start()) {
return TransportAdapter::FAIL;
}
+
+ if (!IsListeningOnSpecificInterface()) {
+ TransportAdapter::Error ret = StartListeningThread();
+ if (TransportAdapter::OK != ret) {
+ LOG4CXX_ERROR(logger_, "Tcp client listener thread start failed");
+ interface_listener_->Stop();
+ return ret;
+ }
+ }
+
+ started_ = true;
LOG4CXX_INFO(logger_, "Tcp client listener has started successfully");
return TransportAdapter::OK;
}
@@ -319,16 +390,286 @@ TcpClientListener::ListeningThreadDelegate::ListeningThreadDelegate(
TransportAdapter::Error TcpClientListener::StopListening() {
LOG4CXX_AUTO_TRACE(logger_);
- if (!thread_->is_running()) {
+ if (!started_) {
LOG4CXX_DEBUG(logger_, "TcpClientListener is not running now");
return TransportAdapter::BAD_STATE;
}
- thread_->join();
+ interface_listener_->Stop();
+
+ StopListeningThread();
+ started_ = false;
LOG4CXX_INFO(logger_, "Tcp client listener has stopped successfully");
return TransportAdapter::OK;
}
+TransportAdapter::Error TcpClientListener::StartListeningThread() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // StartListening() can be called from multiple threads
+ sync_primitives::AutoLock auto_lock(start_stop_lock_);
+
+ if (pipe_fds_[0] < 0 || pipe_fds_[1] < 0) {
+ // recreate the pipe every time, so that the thread loop will not get
+ // leftover
+ // data inside pipe after it is started
+ if (pipe(pipe_fds_) != 0) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to create internal pipe");
+ return TransportAdapter::FAIL;
+ }
+ if (!SetNonblocking(pipe_fds_[0])) {
+ LOG4CXX_WARN(logger_, "Failed to configure pipe to non-blocking");
+ }
+ }
+
+ thread_stop_requested_ = false;
+
+ if (!thread_->start()) {
+ return TransportAdapter::FAIL;
+ }
+ return TransportAdapter::OK;
+}
+
+TransportAdapter::Error TcpClientListener::StopListeningThread() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // StopListening() can be called from multiple threads
+ sync_primitives::AutoLock auto_lock(start_stop_lock_);
+
+ thread_->join();
+
+ close(pipe_fds_[1]);
+ pipe_fds_[1] = -1;
+ close(pipe_fds_[0]);
+ pipe_fds_[0] = -1;
+
+ return TransportAdapter::OK;
+}
+
+void TcpClientListener::OnIPAddressUpdated(const std::string ipv4_addr,
+ const std::string ipv6_addr) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // Since we only create a TCP socket with IPv4 option (AF_INET), currently we
+ // do not use IPv6 address.
+ if (ipv4_addr != current_ip_address_) {
+ if (IsListeningOnSpecificInterface()) {
+ if (!current_ip_address_.empty()) {
+ // the server socket is running, terminate it
+ LOG4CXX_DEBUG(logger_,
+ "Stopping current TCP server socket on "
+ << designated_interface_);
+ StopOnNetworkInterface();
+ }
+ if (!ipv4_addr.empty()) {
+ // start (or restart) server socket with the new IP address
+ LOG4CXX_DEBUG(
+ logger_, "Starting TCP server socket on " << designated_interface_);
+ StartOnNetworkInterface();
+ }
+ }
+
+ current_ip_address_ = ipv4_addr;
+
+ std::string enabled = !current_ip_address_.empty() ? "true" : "false";
+ std::ostringstream oss;
+ oss << port_;
+
+ TransportConfig config;
+ config.insert(std::make_pair(tc_enabled, enabled));
+ config.insert(std::make_pair(tc_tcp_ip_address, current_ip_address_));
+ config.insert(std::make_pair(tc_tcp_port, oss.str()));
+
+ controller_->TransportConfigUpdated(config);
+ }
+}
+
+bool TcpClientListener::StartOnNetworkInterface() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ // this method is only for the case that network interface is specified
+ if (IsListeningOnSpecificInterface()) {
+ {
+ // make sure that two threads will not update socket_ at the same time
+ sync_primitives::AutoLock auto_lock(start_stop_lock_);
+ if (socket_ < 0) {
+ socket_ = CreateIPv4ServerSocket(port_, designated_interface_);
+ if (-1 == socket_) {
+ LOG4CXX_WARN(logger_, "Failed to create TCP socket");
+ return false;
+ }
+ }
+ }
+
+ if (TransportAdapter::OK != StartListeningThread()) {
+ LOG4CXX_WARN(logger_, "Failed to start TCP client listener");
+ return false;
+ }
+ LOG4CXX_INFO(logger_,
+ "TCP server socket started on " << designated_interface_);
+ }
+ return true;
+}
+
+bool TcpClientListener::StopOnNetworkInterface() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ if (IsListeningOnSpecificInterface()) {
+ if (TransportAdapter::OK != StopListeningThread()) {
+ LOG4CXX_WARN(logger_, "Failed to stop TCP client listener");
+ return false;
+ }
+
+ {
+ sync_primitives::AutoLock auto_lock(start_stop_lock_);
+ DestroyServerSocket(socket_);
+ socket_ = -1;
+ }
+
+ LOG4CXX_INFO(logger_,
+ "TCP server socket on " << designated_interface_
+ << " stopped");
+ }
+ return true;
+}
+
+bool TcpClientListener::IsListeningOnSpecificInterface() const {
+ return !designated_interface_.empty();
+}
+
+int TcpClientListener::CreateIPv4ServerSocket(
+ uint16_t port, const std::string interface_name) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ struct in_addr ipv4_address;
+ memset(&ipv4_address, 0, sizeof(ipv4_address));
+ if (interface_name.empty()) {
+ ipv4_address.s_addr = htonl(INADDR_ANY);
+ } else if (!GetIPv4Address(interface_name, &ipv4_address)) {
+ return -1;
+ }
+
+ int sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (-1 == sock) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to create socket");
+ return -1;
+ }
+
+ sockaddr_in server_address = {0};
+ server_address.sin_family = AF_INET;
+ server_address.sin_port = htons(port);
+ server_address.sin_addr = ipv4_address;
+
+ int optval = 1;
+ if (0 !=
+ setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval))) {
+ LOG4CXX_WARN_WITH_ERRNO(logger_, "setsockopt SO_REUSEADDR failed");
+ }
+
+ if (bind(sock,
+ reinterpret_cast<sockaddr*>(&server_address),
+ sizeof(server_address)) != 0) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "bind() failed");
+ close(sock);
+ return -1;
+ }
+
+ const int kBacklog = 128;
+ if (0 != listen(sock, kBacklog)) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "listen() failed");
+ close(sock);
+ return -1;
+ }
+
+ return sock;
+}
+
+void TcpClientListener::DestroyServerSocket(int sock) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ if (sock >= 0) {
+ if (shutdown(sock, SHUT_RDWR) != 0) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to shutdown socket");
+ }
+ if (close(sock) != 0) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to close socket");
+ }
+ }
+}
+
+bool TcpClientListener::GetIPv4Address(const std::string interface_name,
+ struct in_addr* ip_address) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+#ifdef BUILD_TESTS
+ if (testing_) {
+ // don't actually call getifaddrs(), instead return a dummy address of
+ // INADDR_LOOPBACK
+ struct in_addr dummy_addr;
+ dummy_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ if (ip_address != NULL) {
+ *ip_address = dummy_addr;
+ }
+ return true;
+ }
+#endif // BUILD_TESTS
+
+ struct ifaddrs* if_list;
+ if (getifaddrs(&if_list) != 0) {
+ LOG4CXX_WARN(logger_, "getifaddrs failed");
+ return false;
+ }
+
+ struct ifaddrs* interface;
+ bool found = false;
+
+ for (interface = if_list; interface != NULL;
+ interface = interface->ifa_next) {
+ if (interface->ifa_name == NULL) {
+ continue;
+ }
+ if (interface_name == interface->ifa_name) {
+ if (interface->ifa_addr == NULL) {
+ continue;
+ }
+ switch (interface->ifa_addr->sa_family) {
+ case AF_INET: {
+ struct sockaddr_in* addr =
+ reinterpret_cast<struct sockaddr_in*>(interface->ifa_addr);
+ if (ip_address != NULL) {
+ *ip_address = addr->sin_addr;
+ }
+ found = true;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+ freeifaddrs(if_list);
+
+ return found;
+}
+
+static bool SetNonblocking(int s) {
+ int prev_flag = fcntl(s, F_GETFL, 0);
+ if (prev_flag == -1) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_, "Failed to acquire socket flag");
+ return false;
+ }
+
+ int ret = fcntl(s, F_SETFL, prev_flag | O_NONBLOCK);
+ if (ret == -1) {
+ LOG4CXX_ERROR_WITH_ERRNO(logger_,
+ "Failed to configure socket to non-blocking");
+ return false;
+ }
+
+ return true;
+}
+
} // namespace transport_adapter
} // namespace transport_manager
diff --git a/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc b/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
index 0e9e63263b..f475912401 100644
--- a/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
+++ b/src/components/transport_manager/src/tcp/tcp_transport_adapter.cc
@@ -2,6 +2,9 @@
* Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -55,14 +58,35 @@ TcpTransportAdapter::TcpTransportAdapter(
const uint16_t port,
resumption::LastState& last_state,
const TransportManagerSettings& settings)
- : TransportAdapterImpl(NULL,
- new TcpConnectionFactory(this),
- new TcpClientListener(this, port, true),
- last_state,
- settings) {}
+ : TransportAdapterImpl(
+ NULL,
+ new TcpConnectionFactory(this),
+ new TcpClientListener(
+ this,
+ port,
+ true,
+ settings.transport_manager_tcp_adapter_network_interface()),
+ last_state,
+ settings) {}
TcpTransportAdapter::~TcpTransportAdapter() {}
+void TcpTransportAdapter::TransportConfigUpdated(
+ const TransportConfig& new_config) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ transport_config_ = new_config;
+
+ // call the method of parent class to trigger OnTransportConfigUpdated() for
+ // the listeners
+ TransportAdapterImpl::TransportConfigUpdated(new_config);
+}
+
+TransportConfig TcpTransportAdapter::GetTransportConfiguration() const {
+ LOG4CXX_AUTO_TRACE(logger_);
+ return transport_config_;
+}
+
DeviceType TcpTransportAdapter::GetDeviceType() const {
return TCP;
}
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
index bdacd68006..89459b8ebb 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
@@ -2,6 +2,9 @@
* Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -43,6 +46,10 @@
namespace transport_manager {
namespace transport_adapter {
+const char* tc_enabled = "enabled";
+const char* tc_tcp_port = "tcp_port";
+const char* tc_tcp_ip_address = "tcp_ip_address";
+
CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
namespace {
// @deprecated DeviceTypes: PASA_AOA, PASA_BLUETOOTH, MME
@@ -54,7 +61,13 @@ DeviceTypes devicesType = {
std::make_pair(DeviceType::MME, std::string("USB_IOS")),
std::make_pair(DeviceType::IOS_BT, std::string("BLUETOOTH_IOS")),
std::make_pair(DeviceType::IOS_USB, std::string("USB_IOS")),
- std::make_pair(DeviceType::TCP, std::string("WIFI"))};
+ std::make_pair(DeviceType::TCP, std::string("WIFI")),
+ std::make_pair(DeviceType::IOS_USB_HOST_MODE,
+ std::string("USB_IOS_HOST_MODE")),
+ std::make_pair(DeviceType::IOS_USB_DEVICE_MODE,
+ std::string("USB_IOS_DEVICE_MODE")),
+ std::make_pair(DeviceType::IOS_CARPLAY_WIRELESS,
+ std::string("CARPLAY_WIRELESS_IOS"))};
}
TransportAdapterImpl::TransportAdapterImpl(
@@ -695,6 +708,16 @@ void TransportAdapterImpl::DataSendFailed(
LOG4CXX_TRACE(logger_, "exit");
}
+void TransportAdapterImpl::TransportConfigUpdated(
+ const TransportConfig& new_config) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ for (TransportAdapterListenerList::iterator it = listeners_.begin();
+ it != listeners_.end();
+ ++it) {
+ (*it)->OnTransportConfigUpdated(this);
+ }
+}
+
void TransportAdapterImpl::DoTransportSwitch() const {
LOG4CXX_AUTO_TRACE(logger_);
std::for_each(
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc
index f1181ce921..b0ec3c8f8e 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_listener_impl.cc
@@ -2,6 +2,9 @@
* Copyright (c) 2014, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -376,4 +379,23 @@ void TransportAdapterListenerImpl::OnTransportSwitchRequested(
LOG4CXX_WARN(logger_, "Failed to receive event from device");
}
}
+
+void TransportAdapterListenerImpl::OnTransportConfigUpdated(
+ const transport_adapter::TransportAdapter* adapter) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ const TransportAdapterEvent event(EventTypeEnum::ON_TRANSPORT_CONFIG_UPDATED,
+ transport_adapter_,
+ "",
+ 0,
+ ::protocol_handler::RawMessagePtr(),
+ BaseErrorPtr());
+
+ if (transport_manager_ != NULL &&
+ transport_manager::E_SUCCESS !=
+ transport_manager_->ReceiveEventFromDevice(event)) {
+ LOG4CXX_WARN(logger_, "Failed to receive event from device");
+ }
+}
+
} // namespace transport_manager
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index a364220a64..764accf7fe 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -2,6 +2,9 @@
* Copyright (c) 2017, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -1144,6 +1147,13 @@ void TransportManagerImpl::Handle(TransportAdapterEvent event) {
LOG4CXX_DEBUG(logger_, "eevent_type = ON_UNEXPECTED_DISCONNECT");
break;
}
+ case EventTypeEnum::ON_TRANSPORT_CONFIG_UPDATED: {
+ LOG4CXX_DEBUG(logger_, "event_type = ON_TRANSPORT_CONFIG_UPDATED");
+ transport_adapter::TransportConfig config =
+ event.transport_adapter->GetTransportConfiguration();
+ RaiseEvent(&TransportManagerListener::OnTransportConfigUpdated, config);
+ break;
+ }
} // switch
LOG4CXX_TRACE(logger_, "exit");
}
diff --git a/src/components/transport_manager/test/CMakeLists.txt b/src/components/transport_manager/test/CMakeLists.txt
index 41aae296ac..240784436b 100644
--- a/src/components/transport_manager/test/CMakeLists.txt
+++ b/src/components/transport_manager/test/CMakeLists.txt
@@ -42,11 +42,18 @@ include_directories(
)
set(EXCLUDE_PATHS
+ platform_specific
raw_message_matcher.cc
)
collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" "${EXCLUDE_PATHS}")
+set(PLATFORM_DEPENDENT_SOURCES)
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ collect_sources(PLATFORM_DEPENDENT_SOURCES platform_specific/linux)
+endif()
+list(APPEND SOURCES ${PLATFORM_DEPENDENT_SOURCES})
+
set(LIBRARIES
gmock
ConfigProfile
diff --git a/src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_client_listener.h b/src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_client_listener.h
new file mode 100644
index 0000000000..b7db7c7e64
--- /dev/null
+++ b/src/components/transport_manager/test/include/transport_manager/tcp/mock_tcp_client_listener.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2018 Xevo Inc.
+ * 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 copyright holders 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 HOLDER 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.
+ */
+
+#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_TEST_INCLUDE_TRANSPORT_MANAGER_TCP_MOCK_TCP_CLIENT_LISTENER_H_
+#define SRC_COMPONENTS_TRANSPORT_MANAGER_TEST_INCLUDE_TRANSPORT_MANAGER_TCP_MOCK_TCP_CLIENT_LISTENER_H_
+
+#include "gmock/gmock.h"
+#include "transport_manager/tcp/tcp_client_listener.h"
+
+namespace test {
+namespace components {
+namespace transport_manager_test {
+
+using namespace ::transport_manager::transport_adapter;
+
+class MockTcpClientListener : public TcpClientListener {
+ public:
+ MockTcpClientListener(TransportAdapterController* controller,
+ uint16_t port,
+ bool enable_keepalive,
+ const std::string designated_interface = "")
+ : TcpClientListener(
+ controller, port, enable_keepalive, designated_interface) {}
+ MOCK_METHOD0(Init, TransportAdapter::Error());
+ MOCK_METHOD0(Terminate, void());
+ MOCK_CONST_METHOD0(IsInitialised, bool());
+ MOCK_METHOD0(StartListening, TransportAdapter::Error());
+ MOCK_METHOD0(StopListening, TransportAdapter::Error());
+ MOCK_METHOD2(OnIPAddressUpdated,
+ void(const std::string ipv4_addr, const std::string ipv6_addr));
+};
+
+} // namespace transport_manager_test
+} // namespace components
+} // namespace test
+
+#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_TEST_INCLUDE_TRANSPORT_MANAGER_TCP_MOCK_TCP_CLIENT_LISTENER_H_
diff --git a/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h b/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h
index 03e7630e8b..dce23189c8 100644
--- a/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h
+++ b/src/components/transport_manager/test/include/transport_manager/transport_adapter/mock_transport_adapter_listener.h
@@ -122,6 +122,8 @@ class MockTransportAdapterListener : public TransportAdapterListener {
const ApplicationHandle&));
MOCK_METHOD1(OnTransportSwitchRequested,
void(const TransportAdapter* transport_adapter));
+ MOCK_METHOD1(OnTransportConfigUpdated,
+ void(const TransportAdapter* transport_adapter));
};
} // namespace transport_manager_test
diff --git a/src/components/transport_manager/test/network_interface_listener_test.cc b/src/components/transport_manager/test/network_interface_listener_test.cc
new file mode 100644
index 0000000000..7a5b0315ab
--- /dev/null
+++ b/src/components/transport_manager/test/network_interface_listener_test.cc
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2018 Xevo Inc.
+ * 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 copyright holders 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 HOLDER 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.
+ */
+
+#include <arpa/inet.h>
+#include <net/if.h>
+#include <time.h>
+
+#include "gtest/gtest.h"
+#include "transport_manager/tcp/network_interface_listener_impl.h"
+#include "transport_manager/tcp/mock_tcp_client_listener.h"
+#include "utils/test_async_waiter.h"
+#include "utils/threads/thread.h"
+
+namespace test {
+namespace components {
+namespace transport_manager_test {
+
+namespace {
+const long kThreadStartWaitMsec = 10;
+const uint32_t kStartNotificationTimeoutMsec = 500;
+}
+
+using ::testing::_;
+using ::testing::AtLeast;
+using ::testing::SaveArg;
+
+class NetworkInterfaceListenerTest : public ::testing::Test {
+ public:
+ NetworkInterfaceListenerTest()
+ : interface_listener_impl_(NULL)
+ , mock_tcp_client_listener_(NULL, 0, false, "") {}
+
+ virtual ~NetworkInterfaceListenerTest() {}
+
+ protected:
+ struct InterfaceEntry {
+ const char* name;
+ const char* ipv4_address;
+ const char* ipv6_address;
+ unsigned int flags;
+ };
+
+ void Deinit() {
+ delete interface_listener_impl_;
+ }
+
+ void SleepFor(long msec) const {
+ if (msec > 0) {
+ struct timespec ts = {0, msec * 1000 * 1000};
+ nanosleep(&ts, NULL);
+ }
+ }
+
+ NetworkInterfaceListenerImpl* interface_listener_impl_;
+ MockTcpClientListener mock_tcp_client_listener_;
+};
+
+} // namespace transport_manager_test
+} // namespace components
+} // namespace test
diff --git a/src/components/transport_manager/test/platform_specific/linux/linux_network_interface_listener_test.cc b/src/components/transport_manager/test/platform_specific/linux/linux_network_interface_listener_test.cc
new file mode 100644
index 0000000000..864cb9d657
--- /dev/null
+++ b/src/components/transport_manager/test/platform_specific/linux/linux_network_interface_listener_test.cc
@@ -0,0 +1,599 @@
+/*
+ * Copyright (c) 2018 Xevo Inc.
+ * 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 copyright holders 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 HOLDER 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.
+ */
+
+#include <arpa/inet.h>
+#include <net/if.h>
+#include <time.h>
+
+#include "gtest/gtest.h"
+#include "platform_specific_network_interface_listener_impl.h"
+#include "transport_manager/tcp/mock_tcp_client_listener.h"
+#include "utils/test_async_waiter.h"
+#include "utils/threads/thread.h"
+
+namespace test {
+namespace components {
+namespace transport_manager_test {
+
+namespace {
+const long kThreadStartWaitMsec = 10;
+const uint32_t kStartNotificationTimeoutMsec = 500;
+}
+
+using ::testing::_;
+using ::testing::AtLeast;
+using ::testing::SaveArg;
+
+class NetworkInterfaceListenerTest : public ::testing::Test {
+ public:
+ NetworkInterfaceListenerTest()
+ : interface_listener_impl_(NULL)
+ , mock_tcp_client_listener_(NULL, 0, false, "") {}
+
+ virtual ~NetworkInterfaceListenerTest() {}
+
+ protected:
+ struct InterfaceEntry {
+ const char* name;
+ const char* ipv4_address;
+ const char* ipv6_address;
+ unsigned int flags;
+ };
+
+ void Init(const std::string interface_name) {
+ interface_listener_impl_ = new PlatformSpecificNetworkInterfaceListener(
+ &mock_tcp_client_listener_, interface_name);
+ // disable events from actual network interfaces
+ interface_listener_impl_->SetTesting(true);
+ }
+
+ void Deinit() {
+ delete interface_listener_impl_;
+ }
+
+ void SetDummyInterfaceTable(struct InterfaceEntry* entries) {
+ InterfaceStatusTable dummy_table;
+
+ while (entries->name != NULL) {
+ InterfaceStatus status;
+ if (entries->ipv4_address != NULL) {
+ struct in_addr addr;
+ ASSERT_EQ(1, inet_pton(AF_INET, entries->ipv4_address, &addr));
+ status.SetIPv4Address(&addr);
+ }
+ if (entries->ipv6_address != NULL) {
+ struct in6_addr addr6;
+ ASSERT_EQ(1, inet_pton(AF_INET6, entries->ipv6_address, &addr6));
+ status.SetIPv6Address(&addr6);
+ }
+ status.SetFlags(entries->flags);
+
+ dummy_table.insert(std::make_pair(entries->name, status));
+ entries++;
+ }
+
+ interface_listener_impl_->OverwriteStatusTable(dummy_table);
+ }
+
+ void SleepFor(long msec) const {
+ if (msec > 0) {
+ struct timespec ts = {0, msec * 1000 * 1000};
+ nanosleep(&ts, NULL);
+ }
+ }
+
+ PlatformSpecificNetworkInterfaceListener* interface_listener_impl_;
+ MockTcpClientListener mock_tcp_client_listener_;
+};
+
+TEST_F(NetworkInterfaceListenerTest, Init) {
+ Init("");
+
+ EXPECT_TRUE(interface_listener_impl_->Init());
+ EXPECT_TRUE(0 <= interface_listener_impl_->GetSocket());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, Deinit) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ interface_listener_impl_->Deinit();
+
+ EXPECT_EQ(-1, interface_listener_impl_->GetSocket());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, Start_success) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries[] = {
+ {"dummy_int0", "1.2.3.4", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+ SetDummyInterfaceTable(entries);
+
+ // after stated, it is expected that the listener notifies current IP address
+ // (if it's available)
+ TestAsyncWaiter waiter;
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(entries[0].ipv4_address, ""))
+ .WillOnce(NotifyTestAsyncWaiter(&waiter));
+
+ EXPECT_TRUE(interface_listener_impl_->Start());
+
+ // the "isThreadRunning_" flag of the thread will be update slightly later
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_TRUE(interface_listener_impl_->GetThread()->is_running());
+
+ EXPECT_TRUE(waiter.WaitFor(1, kStartNotificationTimeoutMsec));
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, Start_twice) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ // ignore OnIPAddressUpdated call
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _))
+ .Times(AtLeast(0));
+
+ EXPECT_TRUE(interface_listener_impl_->Start());
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_FALSE(interface_listener_impl_->Start());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, Stop_success) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ // ignore OnIPAddressUpdated call
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _))
+ .Times(AtLeast(0));
+
+ EXPECT_TRUE(interface_listener_impl_->Start());
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_TRUE(interface_listener_impl_->Stop());
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_FALSE(interface_listener_impl_->GetThread()->is_running());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, Stop_twice) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ // ignore OnIPAddressUpdated call
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _))
+ .Times(AtLeast(0));
+
+ EXPECT_TRUE(interface_listener_impl_->Start());
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_TRUE(interface_listener_impl_->Stop());
+
+ EXPECT_FALSE(interface_listener_impl_->Stop());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, Stop_without_Start) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ EXPECT_FALSE(interface_listener_impl_->Stop());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, DesignatedInterface_IPAddressChanged) {
+ Init("dummy_int0");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries1[] = {
+ {"dummy_int0", "1.2.3.4", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+ struct InterfaceEntry entries2[] = {
+ {"dummy_int0", "5.6.7.8", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ SetDummyInterfaceTable(entries1);
+
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(entries1[0].ipv4_address, "")).Times(1);
+
+ // this test case doesn't call Start() - we only check the behavior of
+ // NotifyIPAddresses()
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ SetDummyInterfaceTable(entries2);
+
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(entries2[0].ipv4_address, "")).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, DesignatedInterface_IPAddressNotChanged) {
+ Init("dummy_int0");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries1[] = {
+ {"dummy_int0", "1.2.3.4", NULL, IFF_UP | IFF_RUNNING},
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+ struct InterfaceEntry entries2[] = {
+ {"dummy_int0", "1.2.3.4", NULL, IFF_UP | IFF_RUNNING},
+ {"dummy_int1", "172.16.23.30", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ SetDummyInterfaceTable(entries1);
+
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(entries1[0].ipv4_address, "")).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ SetDummyInterfaceTable(entries2);
+
+ // OnIPAddressUpdated() shouldn't be notified
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _)).Times(0);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, DesignatedInterface_GoesUnavailable) {
+ Init("dummy_int0");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries1[] = {
+ {"dummy_int0", "1.2.3.4", "fdc2:12af:327a::1", IFF_UP | IFF_RUNNING},
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+ struct InterfaceEntry entries2[] = {
+ {"dummy_int0", "1.2.3.4", "fdc2:12af:327a::1", IFF_UP},
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ SetDummyInterfaceTable(entries1);
+
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(entries1[0].ipv4_address,
+ entries1[0].ipv6_address)).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ SetDummyInterfaceTable(entries2);
+
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated("", "")).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, DesignatedInterface_Removed) {
+ Init("dummy_int0");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries1[] = {
+ {"dummy_int0", "1.2.3.4", "fdc2:12af:327a::1", IFF_UP | IFF_RUNNING},
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+ struct InterfaceEntry entries2[] = {
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ SetDummyInterfaceTable(entries1);
+
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(entries1[0].ipv4_address,
+ entries1[0].ipv6_address)).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ SetDummyInterfaceTable(entries2);
+
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated("", "")).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, DesignatedInterface_Added) {
+ Init("dummy_int0");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries1[] = {
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+ struct InterfaceEntry entries2[] = {
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {"dummy_int0", "1.2.3.4", NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ SetDummyInterfaceTable(entries1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ SetDummyInterfaceTable(entries2);
+
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(entries2[1].ipv4_address, "")).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, AutoSelectInterface_SelectInterface) {
+ // automatically select network interface
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries[] = {
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {"net_dummy2", "192.168.2.3", "fdc2:12af:327a::22", IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ SetDummyInterfaceTable(entries);
+
+ std::string output_ipv4_address;
+ std::string output_ipv6_address;
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _))
+ .WillOnce(DoAll(SaveArg<0>(&output_ipv4_address),
+ SaveArg<1>(&output_ipv6_address)));
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ std::string selected_interface =
+ interface_listener_impl_->GetSelectedInterfaceName();
+
+ // the interface listener should pick one of the interfaces
+ EXPECT_TRUE((selected_interface == entries[0].name &&
+ output_ipv4_address == entries[0].ipv4_address &&
+ output_ipv6_address == "") ||
+ (selected_interface == entries[1].name &&
+ output_ipv4_address == entries[1].ipv4_address &&
+ output_ipv6_address == entries[1].ipv6_address));
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest,
+ AutoSelectInterface_SkipUnavailableInterface) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries[] = {
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP},
+ {"net_dummy2", "192.168.2.3", "fdc2:12af:327a::22", IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ SetDummyInterfaceTable(entries);
+
+ // dummy_int1 should not be selected
+ struct InterfaceEntry* expected = &entries[1];
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(expected->ipv4_address,
+ expected->ipv6_address)).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ EXPECT_EQ(expected->name,
+ interface_listener_impl_->GetSelectedInterfaceName());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, AutoSelectInterface_SkipEmptyInterface) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries[] = {
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING},
+ {"net_dummy2", NULL, NULL, IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ SetDummyInterfaceTable(entries);
+
+ // net_dummy2 should not be selected
+ struct InterfaceEntry* expected = &entries[0];
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(expected->ipv4_address, "")).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ EXPECT_EQ(expected->name,
+ interface_listener_impl_->GetSelectedInterfaceName());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest,
+ AutoSelectInterface_SkipLoopbackInterface) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries[] = {
+ {"dummy_int1", "10.10.10.12", NULL, IFF_UP | IFF_RUNNING | IFF_LOOPBACK},
+ {"net_dummy2", "192.168.2.3", "fdc2:12af:327a::22", IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ // dummy_int1 should not be selected
+ struct InterfaceEntry* expected = &entries[1];
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(expected->ipv4_address,
+ expected->ipv6_address)).Times(1);
+
+ SetDummyInterfaceTable(entries);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ EXPECT_EQ(expected->name,
+ interface_listener_impl_->GetSelectedInterfaceName());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, AutoSelectInterface_DisableInterface) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries[] = {
+ {"net_dummy0", "192.168.2.3", "fdc2:12af:327a::22", IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _)).Times(1);
+ SetDummyInterfaceTable(entries);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ // make the interface "not running"
+ entries[0].flags &= ~IFF_RUNNING;
+ SetDummyInterfaceTable(entries);
+
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated("", "")).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ EXPECT_EQ("", interface_listener_impl_->GetSelectedInterfaceName());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, AutoSelectInterface_EnableInterface) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries[] = {
+ {"net_dummy0", "192.168.2.3", "fdc2:12af:327a::22", IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _)).Times(1);
+ SetDummyInterfaceTable(entries);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ // make the interface "not running"
+ entries[0].flags &= ~IFF_RUNNING;
+ SetDummyInterfaceTable(entries);
+
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _)).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ // make it running again
+ entries[0].flags |= IFF_RUNNING;
+ SetDummyInterfaceTable(entries);
+
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(entries[0].ipv4_address,
+ entries[0].ipv6_address)).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ EXPECT_EQ(entries[0].name,
+ interface_listener_impl_->GetSelectedInterfaceName());
+
+ Deinit();
+}
+
+TEST_F(NetworkInterfaceListenerTest, AutoSelectInterface_SwitchInterface) {
+ Init("");
+ EXPECT_TRUE(interface_listener_impl_->Init());
+
+ struct InterfaceEntry entries[] = {
+ {"dummy_int1",
+ "10.10.10.12",
+ "fd53:ba79:241d:30c1::78",
+ IFF_UP | IFF_RUNNING},
+ {"net_dummy2", "192.168.2.3", "fdc2:12af:327a::22", IFF_UP | IFF_RUNNING},
+ {NULL, NULL, NULL, 0}};
+
+ EXPECT_CALL(mock_tcp_client_listener_, OnIPAddressUpdated(_, _)).Times(1);
+ SetDummyInterfaceTable(entries);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ const std::string selected_interface =
+ interface_listener_impl_->GetSelectedInterfaceName();
+ struct InterfaceEntry* selected = &entries[0];
+ while (selected->name != NULL) {
+ if (selected->name == selected_interface) {
+ break;
+ }
+ selected++;
+ }
+ ASSERT_TRUE(selected->name != NULL);
+
+ // make the interface "not running"
+ selected->flags &= ~IFF_RUNNING;
+ SetDummyInterfaceTable(entries);
+
+ struct InterfaceEntry* switched;
+ if (selected == &entries[0]) {
+ switched = &entries[1];
+ } else {
+ switched = &entries[0];
+ }
+
+ EXPECT_CALL(mock_tcp_client_listener_,
+ OnIPAddressUpdated(switched->ipv4_address,
+ switched->ipv6_address)).Times(1);
+
+ interface_listener_impl_->testCallNotifyIPAddresses();
+
+ EXPECT_EQ(switched->name,
+ interface_listener_impl_->GetSelectedInterfaceName());
+
+ Deinit();
+}
+
+} // namespace transport_manager_test
+} // namespace components
+} // namespace test
diff --git a/src/components/transport_manager/test/tcp_client_listener_test.cc b/src/components/transport_manager/test/tcp_client_listener_test.cc
index b179f63ece..7ab53915fe 100644
--- a/src/components/transport_manager/test/tcp_client_listener_test.cc
+++ b/src/components/transport_manager/test/tcp_client_listener_test.cc
@@ -2,6 +2,9 @@
* Copyright (c) 2015, Ford Motor Company
* All rights reserved.
*
+ * Copyright (c) 2018 Xevo Inc.
+ * All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
@@ -13,7 +16,7 @@
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
- * Neither the name of the Ford Motor Company nor the names of its contributors
+ * Neither the name of the copyright holders nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -30,21 +33,38 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <time.h>
+
#include "gtest/gtest.h"
#include "transport_manager/transport_adapter/mock_transport_adapter.h"
#include "transport_manager/tcp/tcp_client_listener.h"
+#include "transport_manager/tcp/network_interface_listener.h"
#include "transport_manager/mock_transport_manager.h"
#include "transport_manager/transport_adapter/transport_adapter_controller.h"
-#include "transport_manager/transport_adapter/device.h"
+#include "transport_manager/transport_adapter/mock_device.h"
+#include "utils/make_shared.h"
+#include "utils/test_async_waiter.h"
+#include "utils/threads/thread.h"
namespace test {
namespace components {
namespace transport_manager_test {
+using ::testing::_;
+using ::testing::AtLeast;
using ::testing::Return;
using namespace ::transport_manager;
using namespace ::transport_manager::transport_adapter;
+namespace {
+const long kThreadStartWaitMsec = 10;
+const uint32_t kConnectionCreatedTimeoutMsec = 200;
+}
+
class MockTransportAdapterController : public TransportAdapterController {
public:
MOCK_METHOD1(AddDevice, DeviceSptr(DeviceSptr device));
@@ -95,37 +115,491 @@ class MockTransportAdapterController : public TransportAdapterController {
MOCK_METHOD2(DeviceDisconnected,
void(const DeviceUID& device_handle,
const DisconnectDeviceError& error));
+ MOCK_METHOD1(TransportConfigUpdated,
+ void(const transport_manager::transport_adapter::TransportConfig&
+ new_config));
+};
+
+class MockNetworkInterfaceListener : public NetworkInterfaceListener {
+ public:
+ MOCK_METHOD0(Init, bool());
+ MOCK_METHOD0(Deinit, void());
+ MOCK_METHOD0(Start, bool());
+ MOCK_METHOD0(Stop, bool());
};
-class TcpClientListenerTest : public ::testing::Test {
+class TcpClientListenerTest : public ::testing::TestWithParam<std::string> {
public:
TcpClientListenerTest()
- : port_(0)
+ : port_(0) /* On Linux, binding to port 0 lets the system choose an
+ available port */
, enable_keep_alive_(false)
- , tcp_client_listener_(
- &adapter_controller_mock_, port_, enable_keep_alive_) {}
+ , interface_listener_mock_(NULL)
+ , tcp_client_listener_(NULL) {}
+ virtual ~TcpClientListenerTest() {
+ delete tcp_client_listener_;
+ }
protected:
+ void SetUp() OVERRIDE {
+ tcp_client_listener_ = new TcpClientListener(
+ &adapter_controller_mock_, port_, enable_keep_alive_, GetParam());
+ interface_listener_mock_ = new MockNetworkInterfaceListener();
+ tcp_client_listener_->set_testing(true);
+ tcp_client_listener_->set_network_interface_listener(
+ interface_listener_mock_);
+ }
+
+ bool InterfaceNameSpecified() const {
+ return "" != GetParam();
+ }
+
+ void SleepFor(long msec) const {
+ if (msec > 0) {
+ struct timespec ts = {0, msec * 1000 * 1000};
+ nanosleep(&ts, NULL);
+ }
+ }
+
uint16_t port_;
bool enable_keep_alive_;
MockTransportAdapterController adapter_controller_mock_;
- TcpClientListener tcp_client_listener_;
+ MockNetworkInterfaceListener* interface_listener_mock_;
+ TcpClientListener* tcp_client_listener_;
};
-TEST_F(TcpClientListenerTest, Ctor_test) {
- EXPECT_EQ(0, tcp_client_listener_.port());
- EXPECT_TRUE(NULL != tcp_client_listener_.thread());
- EXPECT_EQ(-1, tcp_client_listener_.get_socket());
+TEST_P(TcpClientListenerTest, Ctor_test) {
+ EXPECT_EQ(0, tcp_client_listener_->port());
+ EXPECT_TRUE(NULL != tcp_client_listener_->thread());
+ EXPECT_EQ(-1, tcp_client_listener_->get_socket());
+}
+
+TEST_P(TcpClientListenerTest, IsInitialised) {
+ // should return false until Init() is called
+ EXPECT_FALSE(tcp_client_listener_->IsInitialised());
+}
+
+TEST_P(TcpClientListenerTest, Init) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+
+ if (InterfaceNameSpecified()) {
+ // TcpClientListener will create socket once IP address of the network is
+ // notified.
+ EXPECT_EQ(-1, tcp_client_listener_->get_socket());
+ } else {
+ // Interface name is not designated. In this case, TcpClientListener will
+ // create socket with Init().
+ EXPECT_TRUE(0 <= tcp_client_listener_->get_socket());
+ }
+
+ EXPECT_TRUE(tcp_client_listener_->IsInitialised());
+
+ // Deinit() will be called during destructor
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, Terminate) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+
+ tcp_client_listener_->Terminate();
+
+ EXPECT_EQ(-1, tcp_client_listener_->get_socket());
+}
+
+TEST_P(TcpClientListenerTest, StartListening) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ // the "isThreadRunning_" flag of the thread will be update slightly later
+ SleepFor(kThreadStartWaitMsec);
+
+ if (InterfaceNameSpecified()) {
+ EXPECT_FALSE(tcp_client_listener_->thread()->is_running());
+ } else {
+ EXPECT_TRUE(tcp_client_listener_->thread()->is_running());
+ }
+
+ // Stop() and Deinit() will be called during destructor
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, StartListening_twice) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ // call again
+ EXPECT_EQ(TransportAdapter::BAD_STATE,
+ tcp_client_listener_->StartListening());
+
+ // Stop() and Deinit() will be called during destructor
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, StopListening) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StopListening());
+ EXPECT_FALSE(tcp_client_listener_->thread()->is_running());
+
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, StopListening_twice) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StopListening());
+
+ // call again
+ EXPECT_EQ(TransportAdapter::BAD_STATE, tcp_client_listener_->StopListening());
+
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, ClientConnection) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ if (InterfaceNameSpecified()) {
+ // set up a server socket by notifying a dummy IP address
+ EXPECT_CALL(adapter_controller_mock_, TransportConfigUpdated(_)).Times(1);
+ tcp_client_listener_->OnIPAddressUpdated(std::string("192.168.1.1"),
+ std::string(""));
+ }
+
+ // get the port number (assigned by system) that the socket is listening on
+ struct sockaddr_in server_addr;
+ socklen_t server_addr_len = sizeof(server_addr);
+ EXPECT_EQ(0,
+ getsockname(tcp_client_listener_->get_socket(),
+ reinterpret_cast<struct sockaddr*>(&server_addr),
+ &server_addr_len));
+
+ // try connecting to the socket
+ struct sockaddr_in client_addr;
+ client_addr.sin_family = AF_INET;
+ client_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ client_addr.sin_port = server_addr.sin_port;
+ socklen_t client_addr_len = sizeof(client_addr);
+
+ int s = socket(AF_INET, SOCK_STREAM, 0);
+ EXPECT_TRUE(0 <= s);
+
+ TestAsyncWaiter waiter;
+
+ // controller should be notified of AddDevice event
+ DeviceSptr mock_device = utils::MakeShared<MockTCPDevice>(
+ htonl(INADDR_LOOPBACK), "dummy_tcp_device");
+ EXPECT_CALL(adapter_controller_mock_, AddDevice(_))
+ .WillOnce(Return(mock_device));
+ EXPECT_CALL(adapter_controller_mock_, ConnectionCreated(_, _, _))
+ .WillOnce(NotifyTestAsyncWaiter(&waiter));
+
+ // adapter_controller_mock_ may also receive ConnectDone() and
+ // ConnectionFinished() from ThreadedSocketConnection. Ignore them as hey are
+ // not part ly client listener's tests.
+ EXPECT_CALL(adapter_controller_mock_, ConnectDone(_, _)).Times(AtLeast(0));
+ EXPECT_CALL(adapter_controller_mock_, ConnectionFinished(_, _))
+ .Times(AtLeast(0));
+
+ EXPECT_EQ(0,
+ connect(s,
+ reinterpret_cast<struct sockaddr*>(&client_addr),
+ client_addr_len));
+
+ // since the connection is handled on another thread, wait for some time
+ EXPECT_TRUE(waiter.WaitFor(1, kConnectionCreatedTimeoutMsec));
+
+ close(s);
+
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, OnIPAddressUpdated_ValidIPv4Address) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ const std::string test_ipv4_addr = "192.168.1.1";
+ const std::string test_ipv6_addr = "";
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%u", port_);
+ const std::string test_port(buf);
+
+ TransportConfig expected_config;
+ expected_config.insert(std::make_pair(tc_enabled, "true"));
+ expected_config.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr));
+ expected_config.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_, TransportConfigUpdated(expected_config))
+ .Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr, test_ipv6_addr);
+
+ if (InterfaceNameSpecified()) {
+ // when the client listener runs with designated interface name, it should
+ // start the thread here
+ EXPECT_TRUE(0 <= tcp_client_listener_->get_socket());
+
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_TRUE(tcp_client_listener_->thread()->is_running());
+ }
+
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, OnIPAddressUpdated_IPv4Address_changed) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ const std::string test_ipv4_addr_1 = "192.168.1.1";
+ const std::string test_ipv6_addr = "";
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%u", port_);
+ const std::string test_port(buf);
+
+ TransportConfig expected_config_1;
+ expected_config_1.insert(std::make_pair(tc_enabled, "true"));
+ expected_config_1.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_1));
+ expected_config_1.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_,
+ TransportConfigUpdated(expected_config_1)).Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_1, test_ipv6_addr);
+
+ const std::string test_ipv4_addr_2 = "172.16.2.3";
+ TransportConfig expected_config_2;
+ expected_config_2.insert(std::make_pair(tc_enabled, "true"));
+ expected_config_2.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_2));
+ expected_config_2.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_,
+ TransportConfigUpdated(expected_config_2)).Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_2, test_ipv6_addr);
+
+ if (InterfaceNameSpecified()) {
+ EXPECT_TRUE(0 <= tcp_client_listener_->get_socket());
+
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_TRUE(tcp_client_listener_->thread()->is_running());
+ }
+
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, OnIPAddressUpdated_IPv4Address_same) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ const std::string test_ipv4_addr_1 = "192.168.1.1";
+ const std::string test_ipv6_addr = "";
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%u", port_);
+ const std::string test_port(buf);
+
+ TransportConfig expected_config_1;
+ expected_config_1.insert(std::make_pair(tc_enabled, "true"));
+ expected_config_1.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_1));
+ expected_config_1.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_,
+ TransportConfigUpdated(expected_config_1)).Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_1, test_ipv6_addr);
+
+ const std::string test_ipv4_addr_2 = "192.168.1.1"; // same as before
+ TransportConfig expected_config_2;
+ expected_config_2.insert(std::make_pair(tc_enabled, "true"));
+ expected_config_2.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_2));
+ expected_config_2.insert(std::make_pair(tc_tcp_port, test_port));
+
+ // client listener should not generate TransportConfigUpdated event
+ EXPECT_CALL(adapter_controller_mock_, TransportConfigUpdated(_)).Times(0);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_2, test_ipv6_addr);
+
+ if (InterfaceNameSpecified()) {
+ EXPECT_TRUE(0 <= tcp_client_listener_->get_socket());
+
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_TRUE(tcp_client_listener_->thread()->is_running());
+ }
+
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
+}
+
+TEST_P(TcpClientListenerTest, OnIPAddressUpdated_IPv4Address_disabled) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ const std::string test_ipv4_addr_1 = "192.168.1.1";
+ const std::string test_ipv6_addr = "";
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%u", port_);
+ const std::string test_port(buf);
+
+ TransportConfig expected_config_1;
+ expected_config_1.insert(std::make_pair(tc_enabled, "true"));
+ expected_config_1.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_1));
+ expected_config_1.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_,
+ TransportConfigUpdated(expected_config_1)).Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_1, test_ipv6_addr);
+
+ const std::string test_ipv4_addr_2 = "";
+ TransportConfig expected_config_2;
+ expected_config_2.insert(std::make_pair(tc_enabled, "false"));
+ expected_config_2.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_2));
+ expected_config_2.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_,
+ TransportConfigUpdated(expected_config_2)).Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_2, test_ipv6_addr);
+
+ if (InterfaceNameSpecified()) {
+ EXPECT_EQ(-1, tcp_client_listener_->get_socket());
+
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_FALSE(tcp_client_listener_->thread()->is_running());
+ }
+
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
}
-TEST_F(TcpClientListenerTest, IsInitialised) {
- EXPECT_TRUE(tcp_client_listener_.IsInitialised());
+TEST_P(TcpClientListenerTest, OnIPAddressUpdated_IPv4Address_reenabled) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ const std::string test_ipv4_addr_1 = "192.168.1.1";
+ const std::string test_ipv6_addr = "";
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%u", port_);
+ const std::string test_port(buf);
+
+ TransportConfig expected_config_1;
+ expected_config_1.insert(std::make_pair(tc_enabled, "true"));
+ expected_config_1.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_1));
+ expected_config_1.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_,
+ TransportConfigUpdated(expected_config_1)).Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_1, test_ipv6_addr);
+
+ const std::string test_ipv4_addr_2 = "";
+ TransportConfig expected_config_2;
+ expected_config_2.insert(std::make_pair(tc_enabled, "false"));
+ expected_config_2.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_2));
+ expected_config_2.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_,
+ TransportConfigUpdated(expected_config_2)).Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_2, test_ipv6_addr);
+
+ const std::string test_ipv4_addr_3 = "192.168.1.1";
+ TransportConfig expected_config_3;
+ expected_config_3.insert(std::make_pair(tc_enabled, "true"));
+ expected_config_3.insert(std::make_pair(tc_tcp_ip_address, test_ipv4_addr_3));
+ expected_config_3.insert(std::make_pair(tc_tcp_port, test_port));
+
+ EXPECT_CALL(adapter_controller_mock_,
+ TransportConfigUpdated(expected_config_3)).Times(1);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr_3, test_ipv6_addr);
+
+ if (InterfaceNameSpecified()) {
+ EXPECT_TRUE(0 <= tcp_client_listener_->get_socket());
+
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_TRUE(tcp_client_listener_->thread()->is_running());
+ }
+
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
}
-TEST_F(TcpClientListenerTest, Init) {
- EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_.Init());
+TEST_P(TcpClientListenerTest, OnIPAddressUpdated_EmptyIPv4Address) {
+ EXPECT_CALL(*interface_listener_mock_, Init()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->Init());
+ EXPECT_CALL(*interface_listener_mock_, Start()).WillOnce(Return(true));
+ EXPECT_EQ(TransportAdapter::OK, tcp_client_listener_->StartListening());
+
+ const std::string test_ipv4_addr = "";
+ const std::string test_ipv6_addr = "";
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%u", port_);
+ const std::string test_port(buf);
+
+ // if the client listener receives an empty IP address after started, it
+ // should ignore it
+ EXPECT_CALL(adapter_controller_mock_, TransportConfigUpdated(_)).Times(0);
+
+ tcp_client_listener_->OnIPAddressUpdated(test_ipv4_addr, test_ipv6_addr);
+
+ if (InterfaceNameSpecified()) {
+ EXPECT_EQ(-1, tcp_client_listener_->get_socket());
+
+ SleepFor(kThreadStartWaitMsec);
+
+ EXPECT_FALSE(tcp_client_listener_->thread()->is_running());
+ }
+
+ EXPECT_CALL(*interface_listener_mock_, Stop()).WillOnce(Return(true));
+ EXPECT_CALL(*interface_listener_mock_, Deinit()).Times(1);
}
+INSTANTIATE_TEST_CASE_P(NetworkInterfaceName,
+ TcpClientListenerTest,
+ ::testing::Values(std::string(""),
+ std::string("dummy_interface0")));
+
} // namespace transport_manager_test
} // namespace components
} // namespace test
diff --git a/src/components/transport_manager/test/tcp_transport_adapter_test.cc b/src/components/transport_manager/test/tcp_transport_adapter_test.cc
index dd587569d3..a6896dc48a 100644
--- a/src/components/transport_manager/test/tcp_transport_adapter_test.cc
+++ b/src/components/transport_manager/test/tcp_transport_adapter_test.cc
@@ -48,6 +48,7 @@ namespace components {
namespace transport_manager_test {
using ::testing::Return;
+using ::testing::ReturnRef;
using ::testing::_;
using namespace ::protocol_handler;
@@ -61,6 +62,13 @@ class TcpAdapterTest : public ::testing::Test {
resumption::LastStateImpl last_state_;
const uint32_t port = 12345;
const std::string string_port = "12345";
+ std::string network_interface = "";
+
+ void SetUp() OVERRIDE {
+ EXPECT_CALL(transport_manager_settings,
+ transport_manager_tcp_adapter_network_interface())
+ .WillRepeatedly(ReturnRef(network_interface));
+ }
};
TEST_F(TcpAdapterTest, StoreDataWithOneDeviceAndOneApplication) {
@@ -339,6 +347,37 @@ TEST_F(TcpAdapterTest, StoreDataWithSeveralDevices_RestoreData) {
}
}
+TEST_F(TcpAdapterTest, NotifyTransportConfigUpdated) {
+ MockTransportAdapterListener mock_adapter_listener;
+
+ MockTCPTransportAdapter transport_adapter(
+ port, last_state_, transport_manager_settings);
+ transport_adapter.AddListener(&mock_adapter_listener);
+
+ TransportConfig config;
+ config[tc_enabled] = std::string("true");
+ config[tc_tcp_ip_address] = std::string("192.168.1.1");
+ config[tc_tcp_port] = std::string("12345");
+
+ EXPECT_CALL(mock_adapter_listener, OnTransportConfigUpdated(_)).Times(1);
+
+ transport_adapter.TransportConfigUpdated(config);
+}
+
+TEST_F(TcpAdapterTest, GetTransportConfiguration) {
+ MockTCPTransportAdapter transport_adapter(
+ port, last_state_, transport_manager_settings);
+
+ TransportConfig config;
+ config[tc_enabled] = std::string("true");
+ config[tc_tcp_ip_address] = std::string("192.168.1.1");
+ config[tc_tcp_port] = std::string("12345");
+
+ transport_adapter.TransportConfigUpdated(config);
+
+ EXPECT_EQ(config, transport_adapter.GetTransportConfiguration());
+}
+
} // namespace transport_manager_test
} // namespace components
} // namespace test
diff --git a/src/components/transport_manager/test/transport_adapter_listener_test.cc b/src/components/transport_manager/test/transport_adapter_listener_test.cc
index 14b8850b49..1494844519 100644
--- a/src/components/transport_manager/test/transport_adapter_listener_test.cc
+++ b/src/components/transport_manager/test/transport_adapter_listener_test.cc
@@ -230,6 +230,15 @@ TEST_F(TransportAdapterListenerTest, OnUnexpectedDisconnect) {
&adapter_mock, dev_id, app_handle, err);
}
+TEST_F(TransportAdapterListenerTest, OnTransportConfigUpdated) {
+ EXPECT_CALL(
+ tr_mock,
+ ReceiveEventFromDevice(IsEvent(
+ EventTypeEnum::ON_TRANSPORT_CONFIG_UPDATED, &adapter_mock, "", 0)))
+ .WillOnce(Return(E_SUCCESS));
+ transport_listener.OnTransportConfigUpdated(&adapter_mock);
+}
+
} // namespace transport_manager_test
} // namespace components
} // namespace test
diff --git a/src/components/transport_manager/test/transport_adapter_test.cc b/src/components/transport_manager/test/transport_adapter_test.cc
index 6d709e0c17..68758f418f 100644
--- a/src/components/transport_manager/test/transport_adapter_test.cc
+++ b/src/components/transport_manager/test/transport_adapter_test.cc
@@ -809,6 +809,35 @@ TEST_F(TransportAdapterTest, StopDevice) {
transport_adapter.StopDevice(uniq_id);
}
+TEST_F(TransportAdapterTest, TransportConfigUpdated) {
+ MockTransportAdapterImpl transport_adapter(
+ NULL, NULL, NULL, last_state_, transport_manager_settings);
+ EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
+ transport_adapter.Init();
+
+ MockTransportAdapterListener mock_listener;
+ transport_adapter.AddListener(&mock_listener);
+
+ TransportConfig config;
+ config[tc_enabled] = std::string("true");
+ config[tc_tcp_ip_address] = std::string("192.168.1.1");
+ config[tc_tcp_port] = std::string("12345");
+
+ EXPECT_CALL(mock_listener, OnTransportConfigUpdated(_));
+ transport_adapter.TransportConfigUpdated(config);
+}
+
+TEST_F(TransportAdapterTest, GetTransportConfigration) {
+ MockTransportAdapterImpl transport_adapter(
+ NULL, NULL, NULL, last_state_, transport_manager_settings);
+ EXPECT_CALL(transport_adapter, Restore()).WillOnce(Return(true));
+ transport_adapter.Init();
+
+ TransportConfig empty_config;
+
+ EXPECT_EQ(empty_config, transport_adapter.GetTransportConfiguration());
+}
+
} // namespace transport_manager_test
} // namespace components
} // namespace test
diff --git a/src/components/transport_manager/test/transport_manager_default_test.cc b/src/components/transport_manager/test/transport_manager_default_test.cc
index d095a51cb6..8e8a964228 100644
--- a/src/components/transport_manager/test/transport_manager_default_test.cc
+++ b/src/components/transport_manager/test/transport_manager_default_test.cc
@@ -74,6 +74,10 @@ TEST(TestTransportManagerDefault, Init_LastStateNotUsed) {
.WillRepeatedly(Return(false));
EXPECT_CALL(transport_manager_settings, transport_manager_tcp_adapter_port())
.WillRepeatedly(Return(12345u));
+ std::string network_interface = "";
+ EXPECT_CALL(transport_manager_settings,
+ transport_manager_tcp_adapter_network_interface())
+ .WillRepeatedly(ReturnRef(network_interface));
transport_manager.Init(mock_last_state);
transport_manager.Stop();
@@ -106,6 +110,10 @@ TEST(TestTransportManagerDefault, Init_LastStateUsed) {
.WillRepeatedly(Return(true));
EXPECT_CALL(transport_manager_settings, transport_manager_tcp_adapter_port())
.WillRepeatedly(Return(12345u));
+ std::string network_interface = "";
+ EXPECT_CALL(transport_manager_settings,
+ transport_manager_tcp_adapter_network_interface())
+ .WillRepeatedly(ReturnRef(network_interface));
transport_manager.Init(mock_last_state);
transport_manager.Stop();
}
@@ -137,6 +145,10 @@ TEST(TestTransportManagerDefault, Init_LastStateUsed_InvalidPort) {
.WillRepeatedly(Return(true));
EXPECT_CALL(transport_manager_settings, transport_manager_tcp_adapter_port())
.WillRepeatedly(Return(1u));
+ std::string network_interface = "";
+ EXPECT_CALL(transport_manager_settings,
+ transport_manager_tcp_adapter_network_interface())
+ .WillRepeatedly(ReturnRef(network_interface));
transport_manager.Init(mock_last_state);
transport_manager.Stop();
}
diff --git a/src/components/transport_manager/test/transport_manager_impl_test.cc b/src/components/transport_manager/test/transport_manager_impl_test.cc
index eebb247908..9ba95ea99a 100644
--- a/src/components/transport_manager/test/transport_manager_impl_test.cc
+++ b/src/components/transport_manager/test/transport_manager_impl_test.cc
@@ -1323,6 +1323,29 @@ TEST_F(TransportManagerImplTest,
tm_.OnDeviceListUpdated(mock_adapter_);
}
+TEST_F(TransportManagerImplTest, OnTransportConfigUpdated) {
+ TransportAdapterEvent test_event(EventTypeEnum::ON_TRANSPORT_CONFIG_UPDATED,
+ mock_adapter_,
+ "",
+ 0,
+ test_message_,
+ error_);
+
+ transport_adapter::TransportConfig config;
+ config[transport_manager::transport_adapter::tc_enabled] =
+ std::string("true");
+ config[transport_manager::transport_adapter::tc_tcp_ip_address] =
+ std::string("192.168.1.1");
+ config[transport_manager::transport_adapter::tc_tcp_port] =
+ std::string("12345");
+
+ EXPECT_CALL(*mock_adapter_, GetTransportConfiguration())
+ .WillOnce(Return(config));
+
+ EXPECT_CALL(*tm_listener_, OnTransportConfigUpdated(config));
+ tm_.TestHandle(test_event);
+}
+
} // namespace transport_manager_test
} // namespace components
} // namespace test
diff --git a/src/components/utils/include/utils/timer.h b/src/components/utils/include/utils/timer.h
index ab3d48ef6f..e391db992c 100644
--- a/src/components/utils/include/utils/timer.h
+++ b/src/components/utils/include/utils/timer.h
@@ -218,7 +218,7 @@ class Timer {
mutable sync_primitives::Lock state_lock_;
- mutable std::auto_ptr<TimerDelegate> delegate_;
+ mutable std::unique_ptr<TimerDelegate> delegate_;
threads::Thread* thread_;
/**