diff --git a/.gitignore b/.gitignore index 58a919ead..cd964170f 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,10 @@ infer-out Carthage/Build docs/docsets/ +.idea +*venv* +*__pycache__ +*.pytest_cache +**htmlcov +**.coverage +_debug* diff --git a/.gitmodules b/.gitmodules index 684da2889..413022928 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,7 @@ [submodule "bson_c_lib"] path = bson_c_lib url = https://github.com/smartdevicelink/bson_c_lib.git +[submodule "generator/rpc_spec"] + path = generator/rpc_spec + url = https://github.com/smartdevicelink/rpc_spec.git + branch = master diff --git a/CHANGELOG.md b/CHANGELOG.md index 96fecab90..a2e167eeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,43 @@ # Changelog +## 6.6.0 +### Versions +* Supports [SDL RPC Spec 6.0.0](https://github.com/smartdevicelink/rpc_spec/releases/tag/6.0.0) and [SDL Protocol Spec 5.2.0](https://github.com/smartdevicelink/protocol_spec/releases/tag/5.2.0). + +### Enhancements +* The secondary transport now starts only when the app has been brought to HMI Full (https://www.github.com/smartdevicelink/sdl_ios/issues/1145). +* Added RPC generator script – though it is not currently used (https://www.github.com/smartdevicelink/sdl_ios/issues/1298). +* Added helpful convenience initializers to `SDLRadioControlData` (https://www.github.com/smartdevicelink/sdl_ios/issues/1206). +* `SDLSystemCapabilityManager` enhancements and alignment with Java Suite ((https://www.github.com/smartdevicelink/sdl_ios/issues/1535). +* The `SDLManagerDelegate` now has a `videoStreamingState` callback (https://www.github.com/smartdevicelink/sdl_ios/issues/1546). +* The secondary transport will no longer be immediately shut down when the app goes to the background (https://www.github.com/smartdevicelink/sdl_ios/issues/1560). +* Deprecated `SyncPData` and `EncodedSyncPData` RPCs (https://www.github.com/smartdevicelink/sdl_ios/issues/1599). +* Deprecated `OnLockScreenStatus` and `LockScreenStatus` fake RPCs (https://www.github.com/smartdevicelink/sdl_ios/issues/1601). + +### Bug Fixes +* Fix video streaming timeout when app goes from background to foreground (https://www.github.com/smartdevicelink/sdl_ios/issues/1471). +* Many lock screen fixes (https://www.github.com/smartdevicelink/sdl_ios/issues/1504, https://www.github.com/smartdevicelink/sdl_ios/issues/1523, https://www.github.com/smartdevicelink/sdl_ios/issues/1545, https://www.github.com/smartdevicelink/sdl_ios/issues/1565). +* Threading fixes around the response handler map (https://www.github.com/smartdevicelink/sdl_ios/issues/1515). +* Fixed some warnings emitted from the lock screen storyboard (https://www.github.com/smartdevicelink/sdl_ios/issues/1521). +* Fix potential race condition in shutting down and starting up `SDLProxy` (https://www.github.com/smartdevicelink/sdl_ios/issues/1532). +* Fix `SDLTouch` to better handle `NSNull` (https://www.github.com/smartdevicelink/sdl_ios/issues/1534). +* Fix empty `SetDisplayLayout.displayCapabilities` breaks the screen manager (https://www.github.com/smartdevicelink/sdl_ios/issues/1536). +* Many secondary transport fixes (https://www.github.com/smartdevicelink/sdl_ios/issues/1551, https://www.github.com/smartdevicelink/sdl_ios/issues/1561). +* Revert deprecations in RPCs relating to `NSDictionary` (https://www.github.com/smartdevicelink/sdl_ios/issues/1557). +* Change how the audio pass thru handler is called to allow sending a new one in the response handler (https://www.github.com/smartdevicelink/sdl_ios/issues/1559). +* Threading fixes around the lifecycle manager `correlationId` (https://www.github.com/smartdevicelink/sdl_ios/issues/1564). +* Fix `SDLStreamingMediaManager` returning an incorrect value for `isStreamingSupported` (https://www.github.com/smartdevicelink/sdl_ios/issues/1569). +* Fix using incorrect MTU sizes for non-RPC services (https://www.github.com/smartdevicelink/sdl_ios/issues/1577). +* Fix IAP crash when the output stream closes (https://www.github.com/smartdevicelink/sdl_ios/issues/1583). +* Fix potential threading crash in `SDLChoiceSetManager` (https://www.github.com/smartdevicelink/sdl_ios/issues/1584). +* Adding some documentation (https://www.github.com/smartdevicelink/sdl_ios/issues/1587). +* Fix a potential race condition crash in the text and graphic manager (https://www.github.com/smartdevicelink/sdl_ios/issues/1595). +* Fix `SDLImageField` initializer (https://www.github.com/smartdevicelink/sdl_ios/issues/1625). + +### Example Apps +* They now show a warning message if the slider or scrollable message time out (https://www.github.com/smartdevicelink/sdl_ios/issues/1526). +* Remove example app logic for checking first HMI FULL (https://www.github.com/smartdevicelink/sdl_ios/issues/1554). +* Example app no longer uses deprecated `SDLConfiguration` (https://www.github.com/smartdevicelink/sdl_ios/issues/1607). + ## 6.5.0 (Since RC 1) ### Bug Fixes * Update testing dependencies and fix a few tests that fail after updating OCMock to 3.5.0 due to mocks not being used properly in a test (https://www.github.com/smartdevicelink/sdl_ios/issues/1517). diff --git a/Cartfile.resolved b/Cartfile.resolved index 28fec15c4..f42579d07 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,4 +1,4 @@ github "Quick/Nimble" "v8.0.5" github "Quick/Quick" "v2.2.0" -github "erikdoe/ocmock" "v3.5" +github "erikdoe/ocmock" "v3.6" github "uber/ios-snapshot-test-case" "6.2.0" diff --git a/Example Apps/Example ObjC/MenuManager.m b/Example Apps/Example ObjC/MenuManager.m index e81f0c2e3..8e68d91b6 100644 --- a/Example Apps/Example ObjC/MenuManager.m +++ b/Example Apps/Example ObjC/MenuManager.m @@ -137,7 +137,13 @@ + (SDLMenuCell *)sdlex_sliderMenuCellWithManager:(SDLManager *)manager { SDLSlider *sliderRPC = [[SDLSlider alloc] initWithNumTicks:3 position:1 sliderHeader:@"Select a letter" sliderFooters:@[@"A", @"B", @"C"] timeout:10000]; [manager sendRequest:sliderRPC withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if(![response.resultCode isEqualToEnum:SDLResultSuccess]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Slider could not be displayed" textField2:nil iconName:nil]]; + if ([response.resultCode isEqualToEnum:SDLResultTimedOut]) { + [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Slider timed out" textField2:nil iconName:nil]]; + } else if ([response.resultCode isEqualToEnum:SDLResultAborted]) { + [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Slider cancelled" textField2:nil iconName:nil]]; + } else { + [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Slider could not be displayed" textField2:nil iconName:nil]]; + } } }]; }]; @@ -148,8 +154,14 @@ + (SDLMenuCell *)sdlex_scrollableMessageMenuCellWithManager:(SDLManager *)manage SDLScrollableMessage *messageRPC = [[SDLScrollableMessage alloc] initWithMessage:@"This is a scrollable message\nIt can contain many lines"]; [manager sendRequest:messageRPC withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if(![response.resultCode isEqualToEnum:SDLResultSuccess]) { - [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Scrollable Message could not be displayed" textField2:nil iconName:nil]]; - } + if ([response.resultCode isEqualToEnum:SDLResultTimedOut]) { + [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Scrollable Message timed out" textField2:nil iconName:nil]]; + } else if ([response.resultCode isEqualToEnum:SDLResultAborted]) { + [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Scrollable Message cancelled" textField2:nil iconName:nil]]; + } else { + [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Scrollable Message could not be displayed" textField2:nil iconName:nil]]; + } + } }]; }]; } diff --git a/Example Apps/Example ObjC/PerformInteractionManager.m b/Example Apps/Example ObjC/PerformInteractionManager.m index 0cc389f92..d80c706b0 100644 --- a/Example Apps/Example ObjC/PerformInteractionManager.m +++ b/Example Apps/Example ObjC/PerformInteractionManager.m @@ -66,16 +66,19 @@ - (SDLInteractionMode)modeForTriggerSource:(SDLTriggerSource)source { #pragma mark - SDLChoiceSetDelegate - (void)choiceSet:(SDLChoiceSet *)choiceSet didSelectChoice:(SDLChoiceCell *)choice withSource:(SDLTriggerSource)source atRowIndex:(NSUInteger)rowIndex { + SDLLogD(@"User selected row: %lu, choice: %@", (unsigned long)rowIndex, choice); [self.manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSGoodJob]]; } - (void)choiceSet:(SDLChoiceSet *)choiceSet didReceiveError:(NSError *)error { + SDLLogE(@"Error presenting choice set: %@", error); [self.manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSYouMissed]]; } #pragma mark - SDLKeyboardDelegate - (void)userDidSubmitInput:(NSString *)inputText withEvent:(SDLKeyboardEvent)source { + SDLLogD(@"User did submit keyboard input: %@, with event: %@", inputText, source); if ([source isEqualToEnum:SDLKeyboardEventSubmitted]) { [self.manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSGoodJob]]; } else if ([source isEqualToEnum:SDLKeyboardEventVoice]) { @@ -84,6 +87,7 @@ - (void)userDidSubmitInput:(NSString *)inputText withEvent:(SDLKeyboardEvent)sou } - (void)keyboardDidAbortWithReason:(SDLKeyboardEvent)event { + SDLLogW(@"Keyboard aborted with reason: %@", event); [self.manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSYouMissed]]; } diff --git a/Example Apps/Example ObjC/ProxyManager.m b/Example Apps/Example ObjC/ProxyManager.m index 35e28c9b0..ea4a58757 100644 --- a/Example Apps/Example ObjC/ProxyManager.m +++ b/Example Apps/Example ObjC/ProxyManager.m @@ -114,7 +114,9 @@ - (void)sdlex_setupConfigurationWithLifecycleConfiguration:(SDLLifecycleConfigur [self sdlex_startManager]; return; } - SDLConfiguration *config = [SDLConfiguration configurationWithLifecycle:lifecycleConfiguration lockScreen:[SDLLockScreenConfiguration enabledConfigurationWithAppIcon:[UIImage imageNamed:ExampleAppLogoName] backgroundColor:nil] logging:[self.class sdlex_logConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration]]; + + SDLLockScreenConfiguration *lockScreenConfiguration = [SDLLockScreenConfiguration enabledConfigurationWithAppIcon:[UIImage imageNamed:ExampleAppLogoName] backgroundColor:nil]; + SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfiguration lockScreen:lockScreenConfiguration logging:[self.class sdlex_logConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration] encryption:[SDLEncryptionConfiguration defaultConfiguration]]; self.sdlManager = [[SDLManager alloc] initWithConfiguration:config delegate:self]; [self sdlex_startManager]; } diff --git a/Example Apps/Example Swift/MenuManager.swift b/Example Apps/Example Swift/MenuManager.swift index e014fa44b..2f1b92ec5 100644 --- a/Example Apps/Example Swift/MenuManager.swift +++ b/Example Apps/Example Swift/MenuManager.swift @@ -181,8 +181,15 @@ private extension MenuManager { return SDLMenuCell(title: ACSliderMenuName, icon: nil, voiceCommands: [ACSliderMenuName], handler: { _ in let slider = SDLSlider(numTicks: 3, position: 1, sliderHeader: "Select a letter", sliderFooters: ["A", "B", "C"], timeout: 3000) manager.send(request: slider, responseHandler: { (request, response, error) in - guard let response = response, response.resultCode == .success else { - manager.send(AlertManager.alertWithMessageAndCloseButton("Slider could not be displayed")) + guard let response = response else { return } + guard response.resultCode == .success else { + if response.resultCode == .timedOut { + manager.send(AlertManager.alertWithMessageAndCloseButton("Slider timed out")) + } else if response.resultCode == .aborted { + manager.send(AlertManager.alertWithMessageAndCloseButton("Slider cancelled")) + } else { + manager.send(AlertManager.alertWithMessageAndCloseButton("Slider could not be displayed")) + } return } }) @@ -193,8 +200,15 @@ private extension MenuManager { return SDLMenuCell(title: ACScrollableMessageMenuName, icon: nil, voiceCommands: [ACScrollableMessageMenuName], handler: { _ in let scrollableMessage = SDLScrollableMessage(message: "This is a scrollable message\nIt can contain many lines") manager.send(request: scrollableMessage, responseHandler: { (request, response, error) in - guard let response = response, response.resultCode == .success else { - manager.send(AlertManager.alertWithMessageAndCloseButton("Scrollable could not be displayed")) + guard let response = response else { return } + guard response.resultCode == .success else { + if response.resultCode == .timedOut { + manager.send(AlertManager.alertWithMessageAndCloseButton("Scrollable Message timed out")) + } else if response.resultCode == .aborted { + manager.send(AlertManager.alertWithMessageAndCloseButton("Scrollable Message cancelled")) + } else { + manager.send(AlertManager.alertWithMessageAndCloseButton("Scrollable Message could not be displayed")) + } return } }) diff --git a/Example Apps/Example Swift/PerformInteractionManager.swift b/Example Apps/Example Swift/PerformInteractionManager.swift index 793f6526c..38bf9f606 100644 --- a/Example Apps/Example Swift/PerformInteractionManager.swift +++ b/Example Apps/Example Swift/PerformInteractionManager.swift @@ -56,16 +56,19 @@ private extension PerformInteractionManager { extension PerformInteractionManager: SDLChoiceSetDelegate { func choiceSet(_ choiceSet: SDLChoiceSet, didSelectChoice choice: SDLChoiceCell, withSource source: SDLTriggerSource, atRowIndex rowIndex: UInt) { + SDLLog.d("User selected row: \(rowIndex), choice: \(choice)") manager.send(SDLSpeak(tts: TTSGoodJob)) } func choiceSet(_ choiceSet: SDLChoiceSet, didReceiveError error: Error) { + SDLLog.e("Error presenting choice set: \(error)") manager.send(SDLSpeak(tts: TTSYouMissed)) } } extension PerformInteractionManager: SDLKeyboardDelegate { func keyboardDidAbort(withReason event: SDLKeyboardEvent) { + SDLLog.w("Keyboard aborted with reason: \(event)") switch event { case SDLKeyboardEvent.cancelled: manager.send(SDLSpeak(tts: TTSYouMissed)) @@ -76,6 +79,7 @@ extension PerformInteractionManager: SDLKeyboardDelegate { } func userDidSubmitInput(_ inputText: String, withEvent source: SDLKeyboardEvent) { + SDLLog.d("User did submit keyboard input: \(inputText), with event: \(source)") switch source { case SDLKeyboardEvent.voice: break // Start Voice search diff --git a/Example Apps/Example Swift/ProxyManager.swift b/Example Apps/Example Swift/ProxyManager.swift index ac3913955..4238251bf 100644 --- a/Example Apps/Example Swift/ProxyManager.swift +++ b/Example Apps/Example Swift/ProxyManager.swift @@ -109,7 +109,7 @@ private extension ProxyManager { lifecycleConfiguration.nightColorScheme = SDLTemplateColorScheme(primaryRGBColor: green, secondaryRGBColor: grey, backgroundRGBColor: darkGrey) let lockScreenConfiguration = appIcon != nil ? SDLLockScreenConfiguration.enabledConfiguration(withAppIcon: appIcon!, backgroundColor: nil) : SDLLockScreenConfiguration.enabled() - return SDLConfiguration(lifecycle: lifecycleConfiguration, lockScreen: lockScreenConfiguration, logging: logConfiguration(), fileManager:.default()) + return SDLConfiguration(lifecycle: lifecycleConfiguration, lockScreen: lockScreenConfiguration, logging: logConfiguration(), fileManager: .default(), encryption: .default()) } /// Sets the type of SDL debug logs that are visible and where to port the logs. There are 4 levels of log filtering, verbose, debug, warning and error. Verbose prints all SDL logs; error prints only the error logs. Adding SDLLogTargetFile to the targest will log to a text file on the iOS device. This file can be accessed via: iTunes > Your Device Name > File Sharing > Your App Name. Make sure `UIFileSharingEnabled` has been added to the application's info.plist and is set to `true`. @@ -173,11 +173,6 @@ extension ProxyManager: SDLManagerDelegate { vehicleDataManager.subscribeToVehicleOdometer() } - if newLevel == .full && firstHMILevelState != .full { - // This is our first time in a `FULL` state. - firstHMILevelState = newLevel - } - switch newLevel { case .full: // The SDL app is in the foreground // Always try to show the initial state to guard against some possible weird states. Duplicates will be ignored by Core. diff --git a/LICENSE b/LICENSE index d59b381b9..817ee3c5f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2017 - 2018 SmartDeviceLink Consortium, Inc. +Copyright (c) 2017 - 2020 SmartDeviceLink Consortium, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index d80965306..c09f46acd 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ See the [changelog](https://github.com/smartdevicelink/sdl_ios/blob/master/CHANG You can install this library using [Accio/SwiftPM](https://github.com/JamitLabs/Accio) documentation page. Please follow the steps to install and initialization Accio into a current or new application. -In your Package.swift file , you want to add `.package(url: "https://github.com/smartdevicelink/sdl_ios.git", .from: "6.5.0"),` to the dependencies array. Then add `SmartDeviceLink` to the targets dependencies array. +In your Package.swift file , you want to add `.package(url: "https://github.com/smartdevicelink/sdl_ios.git", .from: "6.6.0"),` to the dependencies array. Then add `SmartDeviceLink` to the targets dependencies array. Please see [Mainifest format](https://github.com/apple/swift-package-manager/blob/master/Documentation/PackageDescriptionV4.md) to specify dependencies to a specific branch / version of SDL. @@ -49,10 +49,10 @@ If you are building a Swift app, then add this instead `SmartDeviceLinkSwift` to You can install this library using [Cocoapods](https://cocoapods.org/pods/SmartDeviceLink-iOS). You can get started with Cocoapods by [following their install guide](https://guides.cocoapods.org/using/getting-started.html#getting-started), and learn how to use Cocoapods to install dependencies [by following this guide](https://guides.cocoapods.org/using/using-cocoapods.html). -In your podfile, you want to add `pod 'SmartDeviceLink', '~> 6.5'`. Then run `pod install` inside your terminal. With Cocoapods, we support iOS 8.0+. +In your podfile, you want to add `pod 'SmartDeviceLink', '~> 6.6'`. Then run `pod install` inside your terminal. With Cocoapods, we support iOS 8.0+. ###### Swift -If you are building a Swift app, then add this instead `pod 'SmartDeviceLink/Swift', '~> 6.5'`. Then run `pod install` in your terminal. +If you are building a Swift app, then add this instead `pod 'SmartDeviceLink/Swift', '~> 6.6'`. Then run `pod install` in your terminal. ##### Carthage diff --git a/SmartDeviceLink-iOS.podspec b/SmartDeviceLink-iOS.podspec index 294917248..3c591e152 100644 --- a/SmartDeviceLink-iOS.podspec +++ b/SmartDeviceLink-iOS.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SmartDeviceLink-iOS" -s.version = "6.5.0" +s.version = "6.6.0" s.summary = "Connect your app with cars!" s.homepage = "https://github.com/smartdevicelink/SmartDeviceLink-iOS" s.license = { :type => "New BSD", :file => "LICENSE" } diff --git a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj index 80cdf1dba..f5d6c5106 100644 --- a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj +++ b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj @@ -38,6 +38,11 @@ 00E22CED22C2F1B300BC6B08 /* SDLEncryptionConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 00E22CEB22C2F1B300BC6B08 /* SDLEncryptionConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 00EADD3322DFE54B0088B608 /* SDLEncryptionLifecycleManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 00EADD3222DFE54B0088B608 /* SDLEncryptionLifecycleManagerSpec.m */; }; 00EADD3522DFE5670088B608 /* SDLEncryptionConfigurationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 00EADD3422DFE5670088B608 /* SDLEncryptionConfigurationSpec.m */; }; + 10893C162417D78300BA347E /* SDLIconArchiveFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 10893C142417D78300BA347E /* SDLIconArchiveFile.h */; }; + 10893C172417D78300BA347E /* SDLIconArchiveFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 10893C152417D78300BA347E /* SDLIconArchiveFile.m */; }; + 10893C1A2418188600BA347E /* SDLCacheFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 10893C182418188600BA347E /* SDLCacheFileManager.h */; }; + 10893C1B2418188600BA347E /* SDLCacheFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 10893C192418188600BA347E /* SDLCacheFileManager.m */; }; + 109566F6242986F300E24F66 /* SDLCacheFileManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 109566F5242986F300E24F66 /* SDLCacheFileManagerSpec.m */; }; 162E82CA1A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E81E21A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m */; }; 162E82CB1A9BDE8A00906325 /* SDLAppHMITypeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E81E31A9BDE8A00906325 /* SDLAppHMITypeSpec.m */; }; 162E82CC1A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E81E41A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m */; }; @@ -1395,6 +1400,7 @@ 888DBAF022D528DE002A0AE2 /* SDLCloseApplicationResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 888DBAEE22D528DE002A0AE2 /* SDLCloseApplicationResponse.m */; }; 888F86FE221DEE200052FE4C /* SDLAsynchronousRPCOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 888F86FD221DEE1F0052FE4C /* SDLAsynchronousRPCOperation.m */; }; 888F8700221DF4880052FE4C /* SDLAsynchronousRPCOperationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 888F86FF221DF4880052FE4C /* SDLAsynchronousRPCOperationSpec.m */; }; + 88A118272412ACAD00B45FB5 /* SDLStreamingMediaManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = DA661E2B1E553E7E001C1345 /* SDLStreamingMediaManagerSpec.m */; }; 88A1CF1E21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A1CF1D21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m */; }; 88A4A0FA22242AB400C6F01D /* SDLNavigationServiceDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A4A0F922242AB400C6F01D /* SDLNavigationServiceDataSpec.m */; }; 88A5E7F4220B57F900495E8A /* SDLOnSystemCapabilityUpdatedSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A5E7F3220B57F900495E8A /* SDLOnSystemCapabilityUpdatedSpec.m */; }; @@ -1606,7 +1612,6 @@ E9C32B9E1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = E9C32B9A1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.h */; }; E9C32B9F1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C32B9B1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.m */; }; EE28F9E3209802A500B1B61D /* SDLStreamingProtocolDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6CBF872064CAEE00EEE0CA /* SDLStreamingProtocolDelegate.h */; }; - EE38C0C3211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EE38C0C2211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m */; }; EE460E082066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EE460E072066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m */; }; EE460E0A2066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EE460E092066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m */; }; EE5D1B33208EBCA900D17216 /* SDLTCPTransportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5D1B32208EBCA900D17216 /* SDLTCPTransportSpec.m */; }; @@ -1744,6 +1749,11 @@ 00E22CEB22C2F1B300BC6B08 /* SDLEncryptionConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLEncryptionConfiguration.h; sourceTree = ""; }; 00EADD3222DFE54B0088B608 /* SDLEncryptionLifecycleManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLEncryptionLifecycleManagerSpec.m; sourceTree = ""; }; 00EADD3422DFE5670088B608 /* SDLEncryptionConfigurationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLEncryptionConfigurationSpec.m; sourceTree = ""; }; + 10893C142417D78300BA347E /* SDLIconArchiveFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLIconArchiveFile.h; sourceTree = ""; }; + 10893C152417D78300BA347E /* SDLIconArchiveFile.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLIconArchiveFile.m; sourceTree = ""; }; + 10893C182418188600BA347E /* SDLCacheFileManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLCacheFileManager.h; sourceTree = ""; }; + 10893C192418188600BA347E /* SDLCacheFileManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLCacheFileManager.m; sourceTree = ""; }; + 109566F5242986F300E24F66 /* SDLCacheFileManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLCacheFileManagerSpec.m; sourceTree = ""; }; 162E81E21A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAmbientLightStatusSpec.m; sourceTree = ""; }; 162E81E31A9BDE8A00906325 /* SDLAppHMITypeSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAppHMITypeSpec.m; sourceTree = ""; }; 162E81E41A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAppInterfaceUnregisteredReasonSpec.m; sourceTree = ""; }; @@ -3352,8 +3362,6 @@ E9C32B991AB20C5900F283AF /* EAAccessory+SDLProtocols.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EAAccessory+SDLProtocols.m"; sourceTree = ""; }; E9C32B9A1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EAAccessoryManager+SDLProtocols.h"; sourceTree = ""; }; E9C32B9B1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EAAccessoryManager+SDLProtocols.m"; sourceTree = ""; }; - EE38C0C1211C43E100E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSecondaryTransportPrimaryProtocolHandler.h; sourceTree = ""; }; - EE38C0C2211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSecondaryTransportPrimaryProtocolHandler.m; sourceTree = ""; }; EE460E072066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLControlFramePayloadTransportEventUpdateSpec.m; path = ControlFramePayloadSpecs/SDLControlFramePayloadTransportEventUpdateSpec.m; sourceTree = ""; }; EE460E092066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m; path = ControlFramePayloadSpecs/SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m; sourceTree = ""; }; EE5D1B32208EBCA900D17216 /* SDLTCPTransportSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLTCPTransportSpec.m; sourceTree = ""; }; @@ -3477,6 +3485,25 @@ name = Encryption; sourceTree = ""; }; + 10415106241BBB8B00F163CC /* Lock Screen Icon Cache */ = { + isa = PBXGroup; + children = ( + 10893C142417D78300BA347E /* SDLIconArchiveFile.h */, + 10893C152417D78300BA347E /* SDLIconArchiveFile.m */, + 10893C182418188600BA347E /* SDLCacheFileManager.h */, + 10893C192418188600BA347E /* SDLCacheFileManager.m */, + ); + name = "Lock Screen Icon Cache"; + sourceTree = ""; + }; + 109566F42429865500E24F66 /* Lock Screen Icon Cache */ = { + isa = PBXGroup; + children = ( + 109566F5242986F300E24F66 /* SDLCacheFileManagerSpec.m */, + ); + name = "Lock Screen Icon Cache"; + sourceTree = ""; + }; 162E81E01A9BDE8A00906325 /* RPCSpecs */ = { isa = PBXGroup; children = ( @@ -5133,6 +5160,7 @@ E9C32B8E1AB20BA200F283AF /* SDLTimer.h */, E9C32B8F1AB20BA200F283AF /* SDLTimer.m */, DA0C46AE1DCD41E30001F2A8 /* SDLMacros.h */, + 10415106241BBB8B00F163CC /* Lock Screen Icon Cache */, ); name = Utilities; sourceTree = ""; @@ -5898,6 +5926,7 @@ children = ( 5DEE55BE1B8509A5004F0D0F /* HTTP Connection */, 5DB92D2B1AC4A32A00C15BB0 /* Prioritized Objects */, + 109566F42429865500E24F66 /* Lock Screen Icon Cache */, 5DB92D231AC47B2C00C15BB0 /* SDLHexUtilitySpec.m */, 5DC978251B7A38640012C2F1 /* SDLGlobalsSpec.m */, ); @@ -6513,8 +6542,6 @@ children = ( EE798CA32056120F008EDE8E /* SDLSecondaryTransportManager.h */, EE798CA520561217008EDE8E /* SDLSecondaryTransportManager.m */, - EE38C0C1211C43E100E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.h */, - EE38C0C2211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m */, ); name = "Secondary Transport"; sourceTree = ""; @@ -6627,6 +6654,7 @@ 5DB9965C1F268F97002D8795 /* SDLControlFramePayloadVideoStartService.h in Headers */, 5D1665C81CF8CA3D00CC4CA1 /* SDLPermissionFilter.h in Headers */, E9C32B911AB20BA200F283AF /* SDLIAPSession.h in Headers */, + 10893C162417D78300BA347E /* SDLIconArchiveFile.h in Headers */, 5D61FCD71A84238C00846EE7 /* SDLInteractionMode.h in Headers */, 8881AFBE2225E9BB00EA870B /* SDLGetCloudAppPropertiesResponse.h in Headers */, 880FE6272267AE5300723732 /* SDLIAPConstants.h in Headers */, @@ -6642,6 +6670,7 @@ 5D61FE111A84238C00846EE7 /* SDLWarningLightStatus.h in Headers */, 008DB36922EA8261003F458C /* SDLReleaseInteriorVehicleDataModule.h in Headers */, 5D61FC7A1A84238C00846EE7 /* SDLDeleteInteractionChoiceSet.h in Headers */, + 10893C1A2418188600BA347E /* SDLCacheFileManager.h in Headers */, 5D61FC3B1A84238C00846EE7 /* SDLAlertManeuverResponse.h in Headers */, 5DB9964E1F26886C002D8795 /* SDLControlFramePayloadEndService.h in Headers */, 5D9FDA991F2A7D3F00A495C8 /* emhashmap.h in Headers */, @@ -7193,7 +7222,6 @@ TargetAttributes = { 5D4019AE1A76EC350006B0C2 = { CreatedOnToolsVersion = 6.1.1; - DevelopmentTeam = NCVC2MHU7M; SystemCapabilities = { com.apple.BackgroundModes = { enabled = 1; @@ -7213,6 +7241,7 @@ }; 8829567D207CF68800EF056C = { LastSwiftMigration = 0930; + ProvisioningStyle = Automatic; }; }; }; @@ -7536,6 +7565,7 @@ 5D07C02E2044AC9100D1ECDC /* SDLSequentialRPCRequestOperation.m in Sources */, 5DD67CB91E661C4A009CD394 /* SDLLogTargetFile.m in Sources */, 5D61FCBE1A84238C00846EE7 /* SDLHeadLampStatus.m in Sources */, + 10893C1B2418188600BA347E /* SDLCacheFileManager.m in Sources */, 5D61FD921A84238C00846EE7 /* SDLShowConstantTBT.m in Sources */, 008DB36A22EA8261003F458C /* SDLReleaseInteriorVehicleDataModule.m in Sources */, 88E6F1A8220E1588006156F9 /* SDLMediaType.m in Sources */, @@ -7685,6 +7715,7 @@ 88EED83F1F33C5A400E6C42E /* SDLSendHapticData.m in Sources */, 5D16545B1D3E7A1600554D93 /* SDLLifecycleManager.m in Sources */, E9C32B971AB20BA200F283AF /* SDLTimer.m in Sources */, + 10893C172417D78300BA347E /* SDLIconArchiveFile.m in Sources */, 5D61FCB61A84238C00846EE7 /* SDLGetVehicleData.m in Sources */, 5DAB5F572098E5D100A020C8 /* SDLProtocolConstants.m in Sources */, 5D61FC9F1A84238C00846EE7 /* SDLEncodedSyncPData.m in Sources */, @@ -7700,7 +7731,6 @@ EED5CA021F4D18EC00F04000 /* SDLRAWH264Packetizer.m in Sources */, 9FE2471622D77AD500F8D2FC /* SDLWindowType.m in Sources */, 5D61FC851A84238C00846EE7 /* SDLDeviceLevelStatus.m in Sources */, - EE38C0C3211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m in Sources */, 5D9FDA981F2A7D3F00A495C8 /* emhashmap.c in Sources */, 5D61FD1E1A84238C00846EE7 /* SDLOnTBTClientState.m in Sources */, 5D0C29FD20D93D8C008B56CD /* SDLVideoStreamingState.m in Sources */, @@ -8053,6 +8083,7 @@ 88B848C31F45E1A600DED768 /* TestResponse.m in Sources */, DA4353DF1D271FD10099B8C4 /* CGPointUtilSpec.m in Sources */, 162E83291A9BDE8B00906325 /* SDLDeleteFileSpec.m in Sources */, + 109566F6242986F300E24F66 /* SDLCacheFileManagerSpec.m in Sources */, 1680B11D1A9CD7AD00DBD79E /* SDLProtocolMessageDisassemblerSpec.m in Sources */, 8BBEA6091F324832003EEA26 /* SDLMetadataTypeSpec.m in Sources */, 5DAD5F8B20508F140025624C /* SDLSoftButtonObjectSpec.m in Sources */, @@ -8104,6 +8135,7 @@ 162E83371A9BDE8B00906325 /* SDLResetGlobalPropertiesSpec.m in Sources */, 162E82DF1A9BDE8B00906325 /* SDLGlobalProperySpec.m in Sources */, 88DF998F22035D1700477AC1 /* SDLIAPSessionSpec.m in Sources */, + 88A118272412ACAD00B45FB5 /* SDLStreamingMediaManagerSpec.m in Sources */, 5DD8406520FCE21A0082CE04 /* SDLElectronicParkBrakeStatusSpec.m in Sources */, 162E82F61A9BDE8B00906325 /* SDLRequestTypeSpec.m in Sources */, 5DE35E4520CAFC5D0034BE5A /* SDLChoiceCellSpec.m in Sources */, @@ -8573,7 +8605,7 @@ INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example ObjC/SmartDeviceLink-Example-ObjC-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 6.5.0; + MARKETING_VERSION = 6.6.0; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp; PRODUCT_NAME = "SDL Example"; SWIFT_VERSION = 5.0; @@ -8589,7 +8621,7 @@ INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example ObjC/SmartDeviceLink-Example-ObjC-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 6.5.0; + MARKETING_VERSION = 6.6.0; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp; PRODUCT_NAME = "SDL Example"; SWIFT_VERSION = 5.0; @@ -8632,7 +8664,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; - MARKETING_VERSION = 6.5.0; + MARKETING_VERSION = 6.6.0; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.smartdevicelink; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; @@ -8677,7 +8709,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; - MARKETING_VERSION = 6.5.0; + MARKETING_VERSION = 6.6.0; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.smartdevicelink; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; @@ -8762,14 +8794,16 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = NCVC2MHU7M; INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 6.5.0; + MARKETING_VERSION = 6.6.0; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp; PRODUCT_NAME = "SDL Example Swift"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -8782,14 +8816,16 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = NCVC2MHU7M; INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 6.5.0; + MARKETING_VERSION = 6.6.0; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp; PRODUCT_NAME = "SDL Example Swift"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; @@ -8833,7 +8869,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; - MARKETING_VERSION = 6.5.0; + MARKETING_VERSION = 6.6.0; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SmartDeviceLinkSwift; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; @@ -8883,7 +8919,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; - MARKETING_VERSION = 6.5.0; + MARKETING_VERSION = 6.6.0; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SmartDeviceLinkSwift; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; diff --git a/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLink-Example-ObjC.xcscheme b/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLink-Example-ObjC.xcscheme new file mode 100644 index 000000000..4d9f2d40f --- /dev/null +++ b/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLink-Example-ObjC.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SmartDeviceLink.podspec b/SmartDeviceLink.podspec index 5aaf3d39e..a525183f5 100644 --- a/SmartDeviceLink.podspec +++ b/SmartDeviceLink.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SmartDeviceLink" -s.version = "6.5.0" +s.version = "6.6.0" s.summary = "Connect your app with cars!" s.homepage = "https://github.com/smartdevicelink/SmartDeviceLink-iOS" s.license = { :type => "New BSD", :file => "LICENSE" } @@ -326,7 +326,6 @@ sdefault.public_header_files = [ 'SmartDeviceLink/SDLSeatLocationCapability.h', 'SmartDeviceLink/SDLSeatMemoryAction.h', 'SmartDeviceLink/SDLSeatMemoryActionType.h', -'SmartDeviceLink/SDLSupportedSeat.h', 'SmartDeviceLink/SDLSecurityType.h', 'SmartDeviceLink/SDLSendHapticData.h', 'SmartDeviceLink/SDLSendHapticDataResponse.h', @@ -378,6 +377,7 @@ sdefault.public_header_files = [ 'SmartDeviceLink/SDLSubscribeVehicleDataResponse.h', 'SmartDeviceLink/SDLSubscribeWaypoints.h', 'SmartDeviceLink/SDLSubscribeWaypointsResponse.h', +'SmartDeviceLink/SDLSupportedSeat.h', 'SmartDeviceLink/SDLSyncMsgVersion.h', 'SmartDeviceLink/SDLMsgVersion.h', 'SmartDeviceLink/SDLSyncPData.h', diff --git a/SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard b/SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard index fe7b3e564..bb41a9a2d 100644 --- a/SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard +++ b/SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard @@ -96,7 +96,7 @@ - + @@ -116,6 +116,7 @@ + @@ -125,7 +126,6 @@ - @@ -148,9 +148,13 @@ - + + + + + @@ -164,12 +168,19 @@ + + + - + + + + + @@ -185,11 +196,19 @@ + + + + + + + + @@ -197,11 +216,6 @@ - - - - - diff --git a/SmartDeviceLink/SDLBackgroundTaskManager.h b/SmartDeviceLink/SDLBackgroundTaskManager.h index 0732b6fda..8d9f18ad1 100644 --- a/SmartDeviceLink/SDLBackgroundTaskManager.h +++ b/SmartDeviceLink/SDLBackgroundTaskManager.h @@ -16,6 +16,10 @@ NS_ASSUME_NONNULL_BEGIN */ @interface SDLBackgroundTaskManager : NSObject +/// Handler called when the background task is about to expire. Use this handler to perform some cleanup before the background task is destroyed. When you have finished cleanup, you must call the `endBackgroundTask` function so the background task can be destroyed. If you do not call `endBackgroundTask`, the system may kill the app. +/// @return Whether or not to wait for the subscriber to cleanup. If NO, the background task will be killed immediately. If YES, the background task will not be destroyed until the `endBackgroundTask` method is called by the subscriber. +@property (copy, nonatomic, nullable) BOOL (^taskExpiringHandler)(void); + - (instancetype)init NS_UNAVAILABLE; /** @@ -26,17 +30,10 @@ NS_ASSUME_NONNULL_BEGIN */ - (instancetype)initWithBackgroundTaskName:(NSString *)backgroundTaskName; -/** - * Starts a background task that allows the app to establish a session while app is backgrounded. If the app is not currently backgrounded, the background task will remain dormant until the app moves to the background. - */ +/// Starts a background task. If the app is not currently backgrounded, the background task will remain dormant until the app moves to the background. - (void)startBackgroundTask; -/** - * Cleans up a background task when it is stopped. This should be called when: - * - * 1. The app has established a session. - * 2. The system has called the `expirationHandler` for the background task. The system may kill the app if the background task is not ended when `expirationHandler` is called. - */ +/// Destroys the background task. - (void)endBackgroundTask; @end diff --git a/SmartDeviceLink/SDLBackgroundTaskManager.m b/SmartDeviceLink/SDLBackgroundTaskManager.m index 2109a40cd..7746008cf 100644 --- a/SmartDeviceLink/SDLBackgroundTaskManager.m +++ b/SmartDeviceLink/SDLBackgroundTaskManager.m @@ -22,7 +22,7 @@ @interface SDLBackgroundTaskManager () @implementation SDLBackgroundTaskManager - (instancetype)initWithBackgroundTaskName:(NSString *)backgroundTaskName { - SDLLogV(@"SDLBackgroundTaskManager init with name %@", backgroundTaskName); + SDLLogV(@"Creating background task manager with name %@", backgroundTaskName); self = [super init]; if (!self) { return nil; @@ -39,27 +39,47 @@ - (void)startBackgroundTask { return; } - __weak typeof(self) weakself = self; + __weak typeof(self) weakSelf = self; self.currentBackgroundTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithName:self.backgroundTaskName expirationHandler:^{ - SDLLogD(@"The %@ background task expired", self.backgroundTaskName); - [weakself endBackgroundTask]; + __strong typeof(weakSelf) strongSelf = weakSelf; + SDLLogD(@"The background task %@ is expiring.", strongSelf.backgroundTaskName); + + // We have ~1 second to do cleanup before ending the background task. If we take too long, the system will kill the app. + if (strongSelf.taskExpiringHandler != nil) { + SDLLogD(@"Checking if subscriber wants to to perform some cleanup before ending the background task %@", strongSelf.backgroundTaskName); + BOOL waitForCleanupToFinish = strongSelf.taskExpiringHandler(); + if (waitForCleanupToFinish) { + SDLLogD(@"The subscriber will end background task itself %@. Waiting...", self.backgroundTaskName); + } else { + SDLLogV(@"Subscriber does not want to perform cleanup. Ending the background task %@", strongSelf.backgroundTaskName); + [strongSelf endBackgroundTask]; + } + } else { + // No subscriber. Just end the background task. + SDLLogV(@"Ending background task %@", strongSelf.backgroundTaskName); + [strongSelf endBackgroundTask]; + } }]; SDLLogD(@"The %@ background task started with id: %lu", self.backgroundTaskName, (unsigned long)self.currentBackgroundTaskId); } - (void)endBackgroundTask { + SDLLogV(@"Attempting to end background task %@", self.backgroundTaskName); + self.taskExpiringHandler = nil; + if (self.currentBackgroundTaskId == UIBackgroundTaskInvalid) { - SDLLogV(@"Background task already ended. Returning..."); + SDLLogV(@"Background task %@ with id %lu already ended. Returning...", self.backgroundTaskName, (unsigned long)self.currentBackgroundTaskId); return; } - SDLLogD(@"Ending background task with id: %lu", (unsigned long)self.currentBackgroundTaskId); + SDLLogD(@"Ending background task %@ with id: %lu", self.backgroundTaskName, (unsigned long)self.currentBackgroundTaskId); [[UIApplication sharedApplication] endBackgroundTask:self.currentBackgroundTaskId]; self.currentBackgroundTaskId = UIBackgroundTaskInvalid; } - (void)dealloc { + SDLLogV(@"Destroying the manager"); [self endBackgroundTask]; } diff --git a/SmartDeviceLink/SDLCacheFileManager.h b/SmartDeviceLink/SDLCacheFileManager.h new file mode 100644 index 000000000..abdd957d1 --- /dev/null +++ b/SmartDeviceLink/SDLCacheFileManager.h @@ -0,0 +1,29 @@ +// +// SDLCacheFileManager.h +// SmartDeviceLink +// +// Created by James Lapinski on 3/10/20. +// Copyright © 2020 smartdevicelink. All rights reserved. +// + +#import + +@class SDLOnSystemRequest; + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^ImageRetrievalCompletionHandler)(UIImage * _Nullable image, NSError * _Nullable error); + +@interface SDLCacheFileManager : NSObject + +/** + * Handles a system request from the head unit to use a lock screen icon from a URL. + * + * @param request The system request from the head unit for the icon specified in its URL. + * @param completion The handler called when the manager retrieves the icon or fails to do so with an error. +*/ +- (void)retrieveImageForRequest:(SDLOnSystemRequest *)request withCompletionHandler:(ImageRetrievalCompletionHandler)completion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLCacheFileManager.m b/SmartDeviceLink/SDLCacheFileManager.m new file mode 100644 index 000000000..e5b1e23e9 --- /dev/null +++ b/SmartDeviceLink/SDLCacheFileManager.m @@ -0,0 +1,292 @@ +// +// SDLCacheFileManager.m +// SmartDeviceLink +// +// Created by James Lapinski on 3/10/20. +// Copyright © 2020 smartdevicelink. All rights reserved. +// + +#import + +#import "SDLCacheFileManager.h" +#import "SDLError.h" +#import "SDLIconArchiveFile.h" +#import "SDLLogMacros.h" +#import "SDLOnSystemRequest.h" + +NS_ASSUME_NONNULL_BEGIN + +static float DefaultConnectionTimeout = 45.0; +NSString *const SDLErrorDomainCacheManager = @"com.sdl.cacheManager"; + +@interface SDLCacheFileManager() + +@property (nonatomic, strong) NSURLSession *urlSession; +@property (strong, nonatomic, readonly) NSString *cacheFileBaseDirectory; +@property (strong, nonatomic, readonly) NSString *archiveFilePath; +@property (strong, nonatomic, nullable) NSURLSessionDataTask *dataTask; +@property (strong, nonatomic) NSFileManager *fileManager; + +@end + +@implementation SDLCacheFileManager + +- (instancetype)init { + self = [super init]; + if (!self) { return nil; } + + NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + configuration.timeoutIntervalForRequest = DefaultConnectionTimeout; + configuration.timeoutIntervalForResource = DefaultConnectionTimeout; + configuration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy; + + _urlSession = [NSURLSession sessionWithConfiguration:configuration]; + _fileManager = [NSFileManager defaultManager]; + + return self; +} + +- (void)retrieveImageForRequest:(SDLOnSystemRequest *)request withCompletionHandler:(ImageRetrievalCompletionHandler)completion { + NSError *error = nil; + UIImage *icon = nil; + + // Check if the directory already exists; if it does not, create it + if (![self.fileManager fileExistsAtPath:self.cacheFileBaseDirectory]) { + [self.fileManager createDirectoryAtPath:self.cacheFileBaseDirectory withIntermediateDirectories:YES attributes:nil error:&error]; + + if (error != nil) { + SDLLogE(@"Could not create directory at specified path: %@; we will attempt to download and return image anyway", error); + } + } + + // Attempt to retrieve archive file from directory cache + SDLIconArchiveFile *iconArchiveFile = nil; + @try { + iconArchiveFile = [NSKeyedUnarchiver unarchiveObjectWithFile:self.archiveFilePath]; + } @catch (NSException *exception) { + SDLLogE(@"Unable to retrieve archive file from file path: %@", exception); + } + + // Check if there's no archive file in the directory. If there isn't clear the entire directory + if (iconArchiveFile == nil || iconArchiveFile.lockScreenIconCaches.count == 0) { + [self.class sdl_clearDirectoryWithPath:self.cacheFileBaseDirectory fileManager:self.fileManager]; + iconArchiveFile = [[SDLIconArchiveFile alloc] init]; + } + + // Loop through the icons in the cache file copy and check if it's the file we're looking for + NSArray *iconCachesCopy = [iconArchiveFile.lockScreenIconCaches copy]; + for (SDLLockScreenIconCache *iconCache in iconCachesCopy) { + // The icon isn't the one we're looking for + if (![iconCache.iconUrl isEqualToString:request.url]) { continue; } + + // The icon we're looking for has expired + if ([self.class numberOfDaysFromDateCreated:iconCache.lastModifiedDate] >= 30) { break; } + + // Create the file path for the image by hashing the URL which creates a guaranteed unique path name + NSString *imageFilePath = [self.cacheFileBaseDirectory stringByAppendingPathComponent:[self.class sdl_md5HashFromString:request.url]]; + icon = [UIImage imageWithContentsOfFile:imageFilePath]; + + // If we fail to get icon at path, break loop early to download new icon + if (icon == nil) { + SDLLogW(@"No icon was found at the path, we need to download a new icon"); + [self.class sdl_clearDirectoryWithPath:self.cacheFileBaseDirectory fileManager:self.fileManager]; + iconArchiveFile = [[SDLIconArchiveFile alloc] init]; + break; + } + + return completion(icon, nil); + } + + // If we got to this point, retrieving the icon failed for some reason. We will download the image and try to store it instead. + [self sdl_downloadIconFromRequestURL:request.url withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + if (error != nil) { + SDLLogE(@"Downloading the lock screen icon failed with error: %@", error); + return completion(nil, error); + } + + // Save lock screen icon to file path + NSString *iconFilePath = [self.class sdl_writeImage:image toFilePath:self.cacheFileBaseDirectory imageURL:request.url]; + if (iconFilePath == nil) { + SDLLogE(@"Could not save lock screen icon to path with error: %@; we will return the image anyway", error); + return completion(image, nil); + } + + // Update archive file with icon + BOOL writeSuccess = [self updateArchiveFileWithIconURL:request.url iconFilePath:iconFilePath archiveFile:iconArchiveFile error:&error]; + if (error != nil || !writeSuccess) { + SDLLogE(@"Could not update archive file with error: %@; we will return the image anyway", error); + } + + return completion(image, nil); + }]; +} + + +#pragma mark - Cache Directory and Files + +/** + * Handles the request to clear all files from lock screen icon directory in cache. +*/ ++ (void)sdl_clearDirectoryWithPath:(NSString *)path fileManager:(NSFileManager *)fileManager { + NSError *error = nil; + for (NSString *file in [fileManager contentsOfDirectoryAtPath:path error:&error]) { + if (error != nil) { + SDLLogE(@"Cannot clear directory; failed retrieving contents of directory: %@ with error: %@", path, error); + break; + } + + BOOL success = [fileManager removeItemAtPath:[path stringByAppendingPathComponent:file] error:&error]; + if (!success || error != nil) { + SDLLogE(@"Could not clear directory at path: %@; Could not delete file: %@", path, error); + break; + } + } +} + +/** + * Handles request to save icon image to cache. + * + * @param icon The icon to be saved to the cache + * @param filePath The directory location to save the icon at + * @param urlString The url of the icon to be hashed and used as file name + * @return A string representation of the directory the icon was saved to +*/ ++ (nullable NSString *)sdl_writeImage:(UIImage *)icon toFilePath:(NSString *)filePath imageURL:(NSString *)urlString { + NSError *error = nil; + + NSData *iconPNGData = UIImagePNGRepresentation(icon); + NSString *iconStorageName = [self.class sdl_md5HashFromString:urlString]; + NSString *imageFilePath = [filePath stringByAppendingPathComponent:[iconStorageName stringByAppendingString:@".png"]]; + + BOOL writeSuccess = [iconPNGData writeToFile:imageFilePath atomically:YES]; + if (!writeSuccess) { + SDLLogE(@"Could not write image file to specified path: %@", error); + return nil; + } + + return imageFilePath; +} + +/** + * Handles request to update archive file. Will create a new archive file if one is not present. + * + * @param iconURL The System request URL used to retrieve the icon + * @param iconFilePath The directory path where the icon file is held + * @param archiveFile Current archive file to update + * @param error An error that occurs if the archiver fails to archive the object to file +*/ +- (BOOL)updateArchiveFileWithIconURL:(NSString *)iconURL + iconFilePath:(NSString *)iconFilePath + archiveFile:(SDLIconArchiveFile *)archiveFile + error:(NSError **)error { + NSMutableArray *archiveArray = [archiveFile.lockScreenIconCaches mutableCopy]; + + // Need to remove duplicate SDLLockScreenIconCache object if handling expired icon + for (SDLLockScreenIconCache *iconCacheCopy in archiveArray) { + if ([iconCacheCopy.iconUrl isEqualToString:iconURL]) { + [archiveArray removeObject:iconCacheCopy]; + break; + } + } + + // Add the new file to the archive + [archiveArray addObject:[[SDLLockScreenIconCache alloc] initWithIconUrl:iconURL iconFilePath:iconFilePath]]; + archiveFile.lockScreenIconCaches = archiveArray; + + // HAX: Update this when we are iOS 11.0+. You will need to create a data object using 'archivedDataWithRootObject:requiringSecureCoding:error:', and write it to file using 'writeToFile:options:error:' + // Write the new archive to disk + BOOL writeSuccess = [NSKeyedArchiver archiveRootObject:archiveFile toFile:self.archiveFilePath]; + if (!writeSuccess) { + if (!*error) { + *error = [NSError errorWithDomain:SDLErrorDomainCacheFileManager code:SDLCacheManagerErrorUpdateIconArchiveFileFailure userInfo:nil]; + SDLLogE(@"Error attempting to write archive file to cache: %@", *error); + } + + return NO; + } + + return YES; +} + + +#pragma mark - Directory Getters + +- (NSString *)cacheFileBaseDirectory { + NSString *cacheDirectory = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; + return [cacheDirectory stringByAppendingPathComponent:@"/sdl/lockScreenIcon/"]; +} + +- (NSString *)archiveFilePath { + return [self.cacheFileBaseDirectory stringByAppendingPathComponent:@"archiveCacheFile.plist"]; +} + + +#pragma mark - Download Image + +/** + * Handles request to download icon from request + * + * @param requestURL The System request URL used to download icon + * @param completion The completion handler is called when the icon download succeeds or fails with error +*/ +- (void)sdl_downloadIconFromRequestURL:(NSString *)requestURL withCompletionHandler:(ImageRetrievalCompletionHandler)completion { + NSURL *url = [NSURL URLWithString:requestURL]; + if ([url.scheme isEqualToString:@"http"]) { + url = [NSURL URLWithString:[requestURL stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"https"]]; + } + + self.dataTask = [self.urlSession dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error != nil) { + SDLLogW(@"Lock screen icon download task failed: %@", error); + return completion(nil, error); + } + + UIImage *icon = [UIImage imageWithData:data]; + if (icon == nil) { + SDLLogW(@"Returned data conversion to image failed: %@", error); + return completion(nil, error); + } + + return completion(icon, nil); + }]; + + [self.dataTask resume]; +} + + +#pragma mark - Helper Methods + +/** + * Creates a directory friendly string representation of a URL string by hashing the URL using the MD5 hash function. + * + * HAX: A MD5 hash always creates a string with 32 characters (128-bits). Due to some implementations of Core not following the spec, file names that are too long are being rejected. To try to accommodate this setup, hashed file names are being truncated to 16 characters. + * + * @param string The string to hash + * @return A MD5 hash of the string + */ ++ (NSString *)sdl_md5HashFromString:(NSString *)string { + const char* str = [string UTF8String]; + unsigned char hash[CC_MD5_DIGEST_LENGTH]; + CC_MD5(str, (CC_LONG)strlen(str), hash); + NSMutableString *formattedHash = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH]; + // HAX: To shorten the string to 16 characters, the loop has been shortened to 8 fom 16. + for (int i = 0; i < CC_MD5_DIGEST_LENGTH / 2; i += 1) { + [formattedHash appendFormat:@"%02x", hash[i]]; + } + return formattedHash; +} + +/** + * Determines the number of days from a spicified date. + * + * @param date The date to be compared against + * @return Integer representing number of days + */ ++ (NSInteger)numberOfDaysFromDateCreated:(NSDate *)date { + NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay fromDate:date toDate:[NSDate date] options:kNilOptions]; + return components.day; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLCarWindow.m b/SmartDeviceLink/SDLCarWindow.m index d6048739e..12f2e83b7 100644 --- a/SmartDeviceLink/SDLCarWindow.m +++ b/SmartDeviceLink/SDLCarWindow.m @@ -92,8 +92,14 @@ - (void)syncFrame { CGImageRef imageRef = screenshot.CGImage; CVPixelBufferRef pixelBuffer = [self.class sdl_pixelBufferForImageRef:imageRef usingPool:self.streamManager.pixelBufferPool]; if (pixelBuffer != nil) { - [self.streamManager sendVideoData:pixelBuffer]; + BOOL success = [self.streamManager sendVideoData:pixelBuffer]; + if (!success) { + SDLLogE(@"Video frame will not be sent because the video frame encoding failed"); + return; + } CVPixelBufferRelease(pixelBuffer); + } else { + SDLLogE(@"Video frame will not be sent because the pixelBuffer is nil"); } } @@ -191,6 +197,11 @@ - (void)sdl_applyDisplayDimensionsToRootViewController:(UIViewController *)rootV return; } + if (CGRectEqualToRect(rootViewController.view.frame, self.streamManager.videoScaleManager.appViewportFrame)) { + SDLLogV(@"The rootViewController frame is already the correct size: %@", NSStringFromCGRect(rootViewController.view.frame)); + return; + } + rootViewController.view.frame = self.streamManager.videoScaleManager.appViewportFrame; rootViewController.view.bounds = rootViewController.view.frame; diff --git a/SmartDeviceLink/SDLChoiceSetManager.m b/SmartDeviceLink/SDLChoiceSetManager.m index 793876db7..1aaa87e56 100644 --- a/SmartDeviceLink/SDLChoiceSetManager.m +++ b/SmartDeviceLink/SDLChoiceSetManager.m @@ -36,8 +36,10 @@ #import "SDLRPCResponseNotification.h" #import "SDLSetDisplayLayoutResponse.h" #import "SDLStateMachine.h" -#import "SDLSystemContext.h" +#import "SDLSystemCapability.h" #import "SDLSystemCapabilityManager.h" +#import "SDLWindowCapability.h" +#import "SDLWindowCapability+ShowManagerExtensions.h" NS_ASSUME_NONNULL_BEGIN @@ -62,9 +64,10 @@ @interface SDLChoiceSetManager() @property (strong, nonatomic, readonly) SDLStateMachine *stateMachine; @property (strong, nonatomic) NSOperationQueue *transactionQueue; +@property (copy, nonatomic) dispatch_queue_t readWriteQueue; @property (copy, nonatomic, nullable) SDLHMILevel currentHMILevel; -@property (copy, nonatomic, nullable) SDLSystemContext currentSystemContext; +@property (copy, nonatomic, nullable) SDLWindowCapability *currentWindowCapability; @property (strong, nonatomic) NSMutableSet *preloadedMutableChoices; @property (strong, nonatomic, readonly) NSSet *pendingPreloadChoices; @@ -95,6 +98,12 @@ - (instancetype)initWithConnectionManager:(id)connecti _stateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLChoiceManagerStateShutdown states:[self.class sdl_stateTransitionDictionary]]; _transactionQueue = [self sdl_newTransactionQueue]; + if (@available(iOS 10.0, *)) { + _readWriteQueue = dispatch_queue_create_with_target("com.sdl.screenManager.choiceSetManager.readWriteQueue", DISPATCH_QUEUE_SERIAL, [SDLGlobals sharedGlobals].sdlProcessingQueue); + } else { + _readWriteQueue = [SDLGlobals sharedGlobals].sdlProcessingQueue; + } + _preloadedMutableChoices = [NSMutableSet set]; _pendingMutablePreloadChoices = [NSMutableSet set]; @@ -102,6 +111,7 @@ - (instancetype)initWithConnectionManager:(id)connecti _nextCancelId = ChoiceCellCancelIdMin; _vrOptional = YES; _keyboardConfiguration = [self sdl_defaultKeyboardConfiguration]; + _currentHMILevel = SDLHMILevelNone; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiStatusNotification:) name:SDLDidChangeHMIStatusNotification object:nil]; @@ -109,6 +119,10 @@ - (instancetype)initWithConnectionManager:(id)connecti } - (void)start { + SDLLogD(@"Starting manager"); + + [self.systemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self selector:@selector(sdl_displayCapabilityDidUpdate:)]; + if ([self.currentState isEqualToString:SDLChoiceManagerStateShutdown]) { [self.stateMachine transitionToState:SDLChoiceManagerStateCheckingVoiceOptional]; } @@ -117,7 +131,11 @@ - (void)start { } - (void)stop { - [self.stateMachine transitionToState:SDLChoiceManagerStateShutdown]; + SDLLogD(@"Stopping manager"); + + [self sdl_runSyncOnQueue:^{ + [self.stateMachine transitionToState:SDLChoiceManagerStateShutdown]; + }]; } + (NSDictionary *)sdl_stateTransitionDictionary { @@ -139,11 +157,27 @@ - (NSOperationQueue *)sdl_newTransactionQueue { return queue; } +/// Suspend the transaction queue if we are in HMI NONE +/// OR if the text field name "menu name" (i.e. is the primary choice text) cannot be used, we assume we cannot present a PI. +- (void)sdl_updateTransactionQueueSuspended { + if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone] + || (![self.currentWindowCapability hasTextFieldOfName:SDLTextFieldNameMenuName])) { + SDLLogD(@"Suspending the transaction queue. Current HMI level is: %@, window capability has MenuName (choice primary text): %@", self.currentHMILevel, ([self.currentWindowCapability hasTextFieldOfName:SDLTextFieldNameMenuName] ? @"YES" : @"NO")); + self.transactionQueue.suspended = YES; + } else { + SDLLogD(@"Starting the transaction queue"); + self.transactionQueue.suspended = NO; + } +} + #pragma mark - State Management - (void)didEnterStateShutdown { - _currentHMILevel = nil; - _currentSystemContext = nil; + SDLLogV(@"Manager shutting down"); + + NSAssert(dispatch_get_specific(SDLProcessingQueueName) != nil, @"%@ must only be called on the SDL serial queue", NSStringFromSelector(_cmd)); + + _currentHMILevel = SDLHMILevelNone; [self.transactionQueue cancelAllOperations]; self.transactionQueue = [self sdl_newTransactionQueue]; @@ -160,18 +194,16 @@ - (void)didEnterStateCheckingVoiceOptional { // Setup by sending a Choice Set without VR, seeing if there's an error. If there is, send one with VR. This choice set will be used for `presentKeyboard` interactions. SDLCheckChoiceVROptionalOperation *checkOp = [[SDLCheckChoiceVROptionalOperation alloc] initWithConnectionManager:self.connectionManager]; - __weak typeof(self) weakself = self; + __weak typeof(self) weakSelf = self; __weak typeof(checkOp) weakOp = checkOp; checkOp.completionBlock = ^{ - if ([self.currentState isEqualToString:SDLChoiceManagerStateShutdown]) { - return; - } + if ([self.currentState isEqualToString:SDLChoiceManagerStateShutdown]) { return; } - weakself.vrOptional = weakOp.isVROptional; + weakSelf.vrOptional = weakOp.isVROptional; if (weakOp.error != nil) { - [weakself.stateMachine transitionToState:SDLChoiceManagerStateStartupError]; + [weakSelf.stateMachine transitionToState:SDLChoiceManagerStateStartupError]; } else { - [weakself.stateMachine transitionToState:SDLChoiceManagerStateReady]; + [weakSelf.stateMachine transitionToState:SDLChoiceManagerStateReady]; } }; @@ -187,19 +219,25 @@ - (void)didEnterStateStartupError { #pragma mark Upload / Delete - (void)preloadChoices:(NSArray *)choices withCompletionHandler:(nullable SDLPreloadChoiceCompletionHandler)handler { + SDLLogV(@"Request to preload choices: %@", choices); if ([self.currentState isEqualToString:SDLChoiceManagerStateShutdown]) { + NSError *error = [NSError sdl_choiceSetManager_incorrectState:self.currentState]; + SDLLogE(@"Attempted to preload choices but the choice set manager is shut down: %@", error); if (handler != nil) { - NSError *error = [NSError sdl_choiceSetManager_incorrectState:self.currentState]; handler(error); } return; } NSMutableSet *choicesToUpload = [[self sdl_choicesToBeUploadedWithArray:choices] mutableCopy]; - [choicesToUpload minusSet:self.preloadedMutableChoices]; - [choicesToUpload minusSet:self.pendingMutablePreloadChoices]; + + [self sdl_runSyncOnQueue:^{ + [choicesToUpload minusSet:self.preloadedMutableChoices]; + [choicesToUpload minusSet:self.pendingMutablePreloadChoices]; + }]; if (choicesToUpload.count == 0) { + SDLLogD(@"All choices already preloaded. No need to perform a preload"); if (handler != nil) { handler(nil); } @@ -210,28 +248,48 @@ - (void)preloadChoices:(NSArray *)choices withCompletionHandler [self sdl_updateIdsOnChoices:choicesToUpload]; // Add the preload cells to the pending preloads - [self.pendingMutablePreloadChoices unionSet:choicesToUpload]; + [self sdl_runSyncOnQueue:^{ + [self.pendingMutablePreloadChoices unionSet:choicesToUpload]; + }]; // Upload pending preloads // For backward compatibility with Gen38Inch display type head units + SDLLogD(@"Preloading choices"); + SDLLogV(@"Choices to be uploaded: %@", choicesToUpload); NSString *displayName = self.systemCapabilityManager.displays.firstObject.displayName; - SDLPreloadChoicesOperation *preloadOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:self.connectionManager fileManager:self.fileManager displayName:displayName defaultMainWindowCapability:self.systemCapabilityManager.defaultMainWindowCapability isVROptional:self.isVROptional cellsToPreload:choicesToUpload]; + SDLPreloadChoicesOperation *preloadOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:self.connectionManager fileManager:self.fileManager displayName:displayName windowCapability:self.systemCapabilityManager.defaultMainWindowCapability isVROptional:self.isVROptional cellsToPreload:choicesToUpload]; __weak typeof(self) weakSelf = self; __weak typeof(preloadOp) weakPreloadOp = preloadOp; preloadOp.completionBlock = ^{ - [weakSelf.preloadedMutableChoices unionSet:choicesToUpload]; - [weakSelf.pendingMutablePreloadChoices minusSet:choicesToUpload]; + __strong typeof(weakSelf) strongSelf = weakSelf; + SDLLogD(@"Choices finished preloading"); if (handler != nil) { handler(weakPreloadOp.error); } + + // Check if the manager has shutdown because the list of uploaded and pending choices should not be updated + if ([strongSelf.currentState isEqualToString:SDLChoiceManagerStateShutdown]) { + SDLLogD(@"Cancelling preloading choices because the manager is shut down"); + return; + } + + [strongSelf sdl_runSyncOnQueue:^{ + __strong typeof(weakSelf) strongSelf = weakSelf; + [strongSelf.preloadedMutableChoices unionSet:choicesToUpload]; + [strongSelf.pendingMutablePreloadChoices minusSet:choicesToUpload]; + }]; }; [self.transactionQueue addOperation:preloadOp]; } - (void)deleteChoices:(NSArray *)choices { - if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { return; } + SDLLogV(@"Request to delete choices: %@", choices); + if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { + SDLLogE(@"Attempted to delete choices in an incorrect state: %@, they will not be deleted", self.currentState); + return; + } // Find cells to be deleted that are already uploaded or are pending upload NSSet *cellsToBeDeleted = [self sdl_choicesToBeDeletedWithArray:choices]; @@ -245,12 +303,14 @@ - (void)deleteChoices:(NSArray *)choices { if (self.pendingPresentationSet.delegate != nil) { [self.pendingPresentationSet.delegate choiceSet:self.pendingPresentationSet didReceiveError:[NSError sdl_choiceSetManager_choicesDeletedBeforePresentation:@{@"deletedChoices": choices}]]; } - self.pendingPresentationSet = nil; } // Remove the cells from pending and delete choices - [self.pendingMutablePreloadChoices minusSet:cellsToBeRemovedFromPending]; + [self sdl_runSyncOnQueue:^{ + [self.pendingMutablePreloadChoices minusSet:cellsToBeRemovedFromPending]; + }]; + for (SDLAsynchronousOperation *op in self.transactionQueue.operations) { if (![op isMemberOfClass:[SDLPreloadChoicesOperation class]]) { continue; } @@ -264,15 +324,27 @@ - (void)deleteChoices:(NSArray *)choices { [self sdl_findIdsOnChoices:cellsToBeDeleted]; SDLDeleteChoicesOperation *deleteOp = [[SDLDeleteChoicesOperation alloc] initWithConnectionManager:self.connectionManager cellsToDelete:cellsToBeDeleted]; - __weak typeof(self) weakself = self; + __weak typeof(self) weakSelf = self; __weak typeof(deleteOp) weakOp = deleteOp; deleteOp.completionBlock = ^{ + SDLLogD(@"Finished deleting choices"); + + __strong typeof(weakSelf) strongSelf = weakSelf; if (weakOp.error != nil) { SDLLogE(@"Failed to delete choices: %@", weakOp.error); return; } - [weakself.preloadedMutableChoices minusSet:cellsToBeDeleted]; + // Check if the manager has shutdown because the list of uploaded choices should not be updated + if ([strongSelf.currentState isEqualToString:SDLChoiceManagerStateShutdown]) { + SDLLogD(@"Cancelling deleting choices because manager is shut down"); + return; + } + + [strongSelf sdl_runSyncOnQueue:^{ + __strong typeof(weakSelf) strongSelf = weakSelf; + [strongSelf.preloadedMutableChoices minusSet:cellsToBeDeleted]; + }]; }; [self.transactionQueue addOperation:deleteOp]; } @@ -280,18 +352,24 @@ - (void)deleteChoices:(NSArray *)choices { #pragma mark Present - (void)presentChoiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode withKeyboardDelegate:(nullable id)delegate { - if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { return; } + if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { + SDLLogE(@"Attempted to present choices in an incorrect state: %@, it will not be presented", self.currentState); + return; + } if (choiceSet == nil) { SDLLogW(@"Attempted to present a nil choice set, ignoring."); return; } - if (self.pendingPresentationSet != nil) { + if (self.pendingPresentationSet != nil && !self.pendingPresentOperation.isFinished) { + SDLLogW(@"A choice set is pending: %@. We will try to cancel it in favor of presenting a different choice set: %@. If it's already on screen it cannot be cancelled", self.pendingPresentationSet, choiceSet); [self.pendingPresentOperation cancel]; } + SDLLogD(@"Preloading and presenting choice set: %@", choiceSet); self.pendingPresentationSet = choiceSet; + [self preloadChoices:self.pendingPresentationSet.choices withCompletionHandler:^(NSError * _Nullable error) { if (error != nil) { [choiceSet.delegate choiceSet:choiceSet didReceiveError:error]; @@ -304,40 +382,48 @@ - (void)presentChoiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode SDLPresentChoiceSetOperation *presentOp = nil; if (delegate == nil) { // Non-searchable choice set - presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:nil keyboardDelegate:nil cancelID:self.nextCancelId++]; + presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:nil keyboardDelegate:nil cancelID:self.nextCancelId]; } else { // Searchable choice set - presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:self.keyboardConfiguration keyboardDelegate:delegate cancelID:self.nextCancelId++]; + presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:self.keyboardConfiguration keyboardDelegate:delegate cancelID:self.nextCancelId]; } self.pendingPresentOperation = presentOp; - __weak typeof(self) weakself = self; + __weak typeof(self) weakSelf = self; __weak typeof(presentOp) weakOp = presentOp; self.pendingPresentOperation.completionBlock = ^{ + __strong typeof(weakSelf) strongSelf = weakSelf; __strong typeof(weakOp) strongOp = weakOp; + SDLLogD(@"Finished presenting choice set: %@", strongOp.choiceSet); if (strongOp.error != nil && strongOp.choiceSet.delegate != nil) { [strongOp.choiceSet.delegate choiceSet:strongOp.choiceSet didReceiveError:strongOp.error]; } else if (strongOp.selectedCell != nil && strongOp.choiceSet.delegate != nil) { [strongOp.choiceSet.delegate choiceSet:strongOp.choiceSet didSelectChoice:strongOp.selectedCell withSource:strongOp.selectedTriggerSource atRowIndex:strongOp.selectedCellRow]; } - weakself.pendingPresentationSet = nil; - weakself.pendingPresentOperation = nil; + strongSelf.pendingPresentOperation = nil; + strongSelf.pendingPresentationSet = nil; }; + [self.transactionQueue addOperation:presentOp]; } - (nullable NSNumber *)presentKeyboardWithInitialText:(NSString *)initialText delegate:(id)delegate { - if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { return nil; } + if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { + SDLLogE(@"Attempted to present keyboard in an incorrect state: %@, it will not be presented", self.currentState); + return nil; + } if (self.pendingPresentationSet != nil) { + SDLLogW(@"There's already a pending presentation set, cancelling it in favor of a keyboard"); [self.pendingPresentOperation cancel]; self.pendingPresentationSet = nil; } + SDLLogD(@"Presenting keyboard with initial text: %@", initialText); // Present a keyboard with the choice set that we used to test VR's optional state - UInt16 keyboardCancelId = self.nextCancelId++; + UInt16 keyboardCancelId = self.nextCancelId; self.pendingPresentOperation = [[SDLPresentKeyboardOperation alloc] initWithConnectionManager:self.connectionManager keyboardProperties:self.keyboardConfiguration initialText:initialText keyboardDelegate:delegate cancelID:keyboardCancelId]; [self.transactionQueue addOperation:self.pendingPresentOperation]; return @(keyboardCancelId); @@ -350,6 +436,7 @@ - (void)dismissKeyboardWithCancelID:(NSNumber *)cancelID { SDLPresentKeyboardOperation *keyboardOperation = (SDLPresentKeyboardOperation *)op; if (keyboardOperation.cancelId != cancelID.unsignedShortValue) { continue; } + SDLLogD(@"Dismissing keyboard with cancel ID: %@", cancelID); [keyboardOperation dismissKeyboard]; break; } @@ -357,14 +444,19 @@ - (void)dismissKeyboardWithCancelID:(NSNumber *)cancelID { #pragma mark - Choice Management Helpers +/// Checks the passed list of choices to be uploaded and returns the items that have not yet been uploaded to the module. +/// @param choices The choices to be uploaded +/// @return The choices that have not yet been uploaded to the module - (NSSet *)sdl_choicesToBeUploadedWithArray:(NSArray *)choices { - // Check if any of the choices already exist on the head unit and remove them from being preloaded NSMutableSet *choicesSet = [NSMutableSet setWithArray:choices]; [choicesSet minusSet:self.preloadedChoices]; return [choicesSet copy]; } +/// Checks the passed list of choices to be deleted and returns the items that have been uploaded to the module. +/// @param choices The choices to be deleted +/// @return The choices that have been uploaded to the module - (NSSet *)sdl_choicesToBeDeletedWithArray:(NSArray *)choices { NSMutableSet *choicesSet = [NSMutableSet setWithArray:choices]; [choicesSet intersectSet:self.preloadedChoices]; @@ -372,6 +464,9 @@ - (void)dismissKeyboardWithCancelID:(NSNumber *)cancelID { return [choicesSet copy]; } +/// Checks the passed list of choices to be deleted and returns the items that are waiting to be uploaded to the module. +/// @param choices The choices to be deleted +/// @return The choices that are waiting to be uploaded to the module - (NSSet *)sdl_choicesToBeRemovedFromPendingWithArray:(NSArray *)choices { NSMutableSet *choicesSet = [NSMutableSet setWithArray:choices]; [choicesSet intersectSet:self.pendingPreloadChoices]; @@ -379,23 +474,27 @@ - (void)dismissKeyboardWithCancelID:(NSNumber *)cancelID { return [choicesSet copy]; } +/// Assigns a unique id to each choice item. +/// @param choices An array of choices - (void)sdl_updateIdsOnChoices:(NSSet *)choices { for (SDLChoiceCell *cell in choices) { cell.choiceId = self.nextChoiceId; - self.nextChoiceId++; } } +/// Checks each choice item to find out if it has already been uploaded or if it is the the process of being uploaded. If so, the choice item is assigned the unique id of the uploaded item. +/// @param choiceSet A set of choice items - (void)sdl_findIdsOnChoiceSet:(SDLChoiceSet *)choiceSet { - return [self sdl_findIdsOnChoices:[NSSet setWithArray:choiceSet.choices]]; + [self sdl_findIdsOnChoices:[NSSet setWithArray:choiceSet.choices]]; } +/// Checks each choice item to find out if it has already been uploaded or if it is the the process of being uploaded. If so, the choice item is assigned the unique id of the uploaded item. +/// @param choices An array of choice items - (void)sdl_findIdsOnChoices:(NSSet *)choices { for (SDLChoiceCell *cell in choices) { SDLChoiceCell *uploadCell = [self.pendingPreloadChoices member:cell] ?: [self.preloadedChoices member:cell]; - if (uploadCell != nil) { - cell.choiceId = uploadCell.choiceId; - } + if (uploadCell == nil) { continue; } + cell.choiceId = uploadCell.choiceId; } } @@ -403,8 +502,10 @@ - (void)sdl_findIdsOnChoices:(NSSet *)choices { - (void)setKeyboardConfiguration:(nullable SDLKeyboardProperties *)keyboardConfiguration { if (keyboardConfiguration == nil) { + SDLLogD(@"Updating keyboard configuration to the default"); _keyboardConfiguration = [self sdl_defaultKeyboardConfiguration]; } else { + SDLLogD(@"Updating keyboard configuration to a new configuration: %@", keyboardConfiguration); _keyboardConfiguration = [[SDLKeyboardProperties alloc] initWithLanguage:keyboardConfiguration.language layout:keyboardConfiguration.keyboardLayout keypressMode:SDLKeypressModeResendCurrentEntry limitedCharacterList:keyboardConfiguration.limitedCharacterList autoCompleteText:keyboardConfiguration.autoCompleteText autoCompleteList:keyboardConfiguration.autoCompleteList]; if (keyboardConfiguration.keypressMode != SDLKeypressModeResendCurrentEntry) { @@ -420,48 +521,88 @@ - (SDLKeyboardProperties *)sdl_defaultKeyboardConfiguration { #pragma mark - Getters - (NSSet *)preloadedChoices { - return [_preloadedMutableChoices copy]; + __block NSSet *set = nil; + [self sdl_runSyncOnQueue:^{ + set = [self->_preloadedMutableChoices copy]; + }]; + + return set; } - (NSSet *)pendingPreloadChoices { - return [_pendingMutablePreloadChoices copy]; + __block NSSet *set = nil; + [self sdl_runSyncOnQueue:^{ + set = [self->_pendingMutablePreloadChoices copy]; + }]; + + return set; +} + +- (UInt16)nextChoiceId { + __block UInt16 choiceId = 0; + [self sdl_runSyncOnQueue:^{ + choiceId = self->_nextChoiceId; + self->_nextChoiceId = choiceId + 1; + }]; + + return choiceId; +} + +- (UInt16)nextCancelId { + __block UInt16 cancelId = 0; + [self sdl_runSyncOnQueue:^{ + cancelId = self->_nextCancelId; + self->_nextCancelId = cancelId + 1; + }]; + + return cancelId; } - (NSString *)currentState { return self.stateMachine.currentState; } -#pragma mark - RPC Responses / Notifications +#pragma mark Utilities -- (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification { - // We can only present a choice set if we're in FULL - SDLOnHMIStatus *hmiStatus = (SDLOnHMIStatus *)notification.notification; - - if (hmiStatus.windowID != nil && hmiStatus.windowID.integerValue != SDLPredefinedWindowsDefaultWindow) { - return; +/// Checks if we are already on a serial queue. If so, the block is added to the queue; if not, the block is dispatched to the serial `readWrite` queue. +/// @discussion Used to synchronize access to class properties. +/// @param block The block to be executed. +- (void)sdl_runSyncOnQueue:(void (^)(void))block { + if (dispatch_get_specific(SDLProcessingQueueName) != nil) { + block(); + } else { + dispatch_sync(self.readWriteQueue, block); } - - SDLHMILevel oldHMILevel = self.currentHMILevel; - self.currentHMILevel = hmiStatus.hmiLevel; +} - if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone]) { - self.transactionQueue.suspended = YES; - } +#pragma mark - RPC Responses / Notifications - if ([oldHMILevel isEqualToEnum:SDLHMILevelNone] && ![self.currentHMILevel isEqualToEnum:SDLHMILevelNone]) { - self.transactionQueue.suspended = NO; +- (void)sdl_displayCapabilityDidUpdate:(SDLSystemCapability *)systemCapability { + NSArray *capabilities = systemCapability.displayCapabilities; + if (capabilities == nil || capabilities.count == 0) { + self.currentWindowCapability = nil; + } else { + SDLDisplayCapability *mainDisplay = capabilities[0]; + for (SDLWindowCapability *windowCapability in mainDisplay.windowCapabilities) { + NSUInteger currentWindowID = windowCapability.windowID != nil ? windowCapability.windowID.unsignedIntegerValue : SDLPredefinedWindowsDefaultWindow; + if (currentWindowID != SDLPredefinedWindowsDefaultWindow) { continue; } + + self.currentWindowCapability = windowCapability; + break; + } } - // We need to check for this to make sure we can currently present the dialog. If the current context is HMI_OBSCURED or ALERT, we have to wait for MAIN to present - self.currentSystemContext = hmiStatus.systemContext; + [self sdl_updateTransactionQueueSuspended]; +} - if ([self.currentSystemContext isEqualToEnum:SDLSystemContextHMIObscured] || [self.currentSystemContext isEqualToEnum:SDLSystemContextAlert]) { - self.transactionQueue.suspended = YES; - } +- (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification { + // We can only present a choice set if we're in FULL + SDLOnHMIStatus *hmiStatus = (SDLOnHMIStatus *)notification.notification; + if (hmiStatus.windowID != nil && hmiStatus.windowID.integerValue != SDLPredefinedWindowsDefaultWindow) { return; } - if ([self.currentSystemContext isEqualToEnum:SDLSystemContextMain] && ![self.currentHMILevel isEqualToEnum:SDLHMILevelNone]) { - self.transactionQueue.suspended = NO; - } + self.currentHMILevel = hmiStatus.hmiLevel; + + [self sdl_updateTransactionQueueSuspended]; } @end diff --git a/SmartDeviceLink/SDLDisplayCapability.h b/SmartDeviceLink/SDLDisplayCapability.h index f29c092af..7be6a589e 100644 --- a/SmartDeviceLink/SDLDisplayCapability.h +++ b/SmartDeviceLink/SDLDisplayCapability.h @@ -23,15 +23,17 @@ NS_ASSUME_NONNULL_BEGIN */ - (instancetype)initWithDisplayName:(NSString *)displayName; +/// This method is broken (the types don't match the parameter names) and will always return nil. Use initWithDisplayName:windowCapabilities:windowTypeSupported: instead. +- (instancetype)initWithDisplayName:(NSString *)displayName windowTypeSupported:(nullable NSArray *)windowTypeSupported windowCapabilities:(nullable NSArray *)windowCapabilities __deprecated_msg("This method is broken and will return nil every time. Use initWithDisplayName:windowCapabilities:windowTypeSupported: instead"); /** Init with all the properities @param displayName Name of the display. - @param windowTypeSupported Informs the application how many windows the app is allowed to create per type. @param windowCapabilities Contains a list of capabilities of all windows related to the app. @see windowCapabilities + @param windowTypeSupported Informs the application how many windows the app is allowed to create per type. */ -- (instancetype)initWithDisplayName:(NSString *)displayName windowTypeSupported:(nullable NSArray *)windowTypeSupported windowCapabilities:(nullable NSArray *)windowCapabilities; +- (instancetype)initWithDisplayName:(NSString *)displayName windowCapabilities:(nullable NSArray *)windowCapabilities windowTypeSupported:(nullable NSArray *)windowTypeSupported; /** diff --git a/SmartDeviceLink/SDLDisplayCapability.m b/SmartDeviceLink/SDLDisplayCapability.m index b4d8b319a..04c23cca2 100644 --- a/SmartDeviceLink/SDLDisplayCapability.m +++ b/SmartDeviceLink/SDLDisplayCapability.m @@ -28,7 +28,13 @@ - (instancetype)initWithDisplayName:(NSString *)displayName { return self; } -- (instancetype)initWithDisplayName:(NSString *)displayName windowTypeSupported:(nullable NSArray *)windowTypeSupported windowCapabilities:(nullable NSArray *)windowCapabilities{ +- (instancetype)initWithDisplayName:(NSString *)displayName windowTypeSupported:(NSArray *)windowTypeSupported windowCapabilities:(NSArray *)windowCapabilities { + SDLLogE(@"This method is broken (the types don't match the parameter names) and will always return nil. Use initWithDisplayName:windowCapabilities:windowTypeSupported: instead."); + + return nil; +} + +- (instancetype)initWithDisplayName:(NSString *)displayName windowCapabilities:(nullable NSArray *)windowCapabilities windowTypeSupported:(nullable NSArray *)windowTypeSupported { self = [self initWithDisplayName:displayName]; if (!self) { return nil; diff --git a/SmartDeviceLink/SDLEncodedSyncPData.h b/SmartDeviceLink/SDLEncodedSyncPData.h index df7f1a4f7..8f81d002b 100644 --- a/SmartDeviceLink/SDLEncodedSyncPData.h +++ b/SmartDeviceLink/SDLEncodedSyncPData.h @@ -12,6 +12,7 @@ NS_ASSUME_NONNULL_BEGIN +__deprecated @interface SDLEncodedSyncPData : SDLRPCRequest /** diff --git a/SmartDeviceLink/SDLEncodedSyncPData.m b/SmartDeviceLink/SDLEncodedSyncPData.m index 1d03e2c99..6db36b6fe 100644 --- a/SmartDeviceLink/SDLEncodedSyncPData.m +++ b/SmartDeviceLink/SDLEncodedSyncPData.m @@ -10,7 +10,10 @@ NS_ASSUME_NONNULL_BEGIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" @implementation SDLEncodedSyncPData +#pragma clang diagnostic pop #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" diff --git a/SmartDeviceLink/SDLEncodedSyncPDataResponse.h b/SmartDeviceLink/SDLEncodedSyncPDataResponse.h index 8536ad33e..5313bbb87 100644 --- a/SmartDeviceLink/SDLEncodedSyncPDataResponse.h +++ b/SmartDeviceLink/SDLEncodedSyncPDataResponse.h @@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN **DEPRECATED** */ +__deprecated @interface SDLEncodedSyncPDataResponse : SDLRPCResponse @end diff --git a/SmartDeviceLink/SDLEncodedSyncPDataResponse.m b/SmartDeviceLink/SDLEncodedSyncPDataResponse.m index d25d87d16..95c8cc628 100644 --- a/SmartDeviceLink/SDLEncodedSyncPDataResponse.m +++ b/SmartDeviceLink/SDLEncodedSyncPDataResponse.m @@ -10,7 +10,10 @@ NS_ASSUME_NONNULL_BEGIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" @implementation SDLEncodedSyncPDataResponse +#pragma clang diagnostic pop #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" diff --git a/SmartDeviceLink/SDLError.h b/SmartDeviceLink/SDLError.h index 89cf49208..326fdf792 100644 --- a/SmartDeviceLink/SDLError.h +++ b/SmartDeviceLink/SDLError.h @@ -23,8 +23,10 @@ extern SDLErrorDomain *const SDLErrorDomainTextAndGraphicManager; extern SDLErrorDomain *const SDLErrorDomainSoftButtonManager; extern SDLErrorDomain *const SDLErrorDomainMenuManager; extern SDLErrorDomain *const SDLErrorDomainChoiceSetManager; +extern SDLErrorDomain *const SDLErrorDomainSystemCapabilityManager; extern SDLErrorDomain *const SDLErrorDomainTransport; extern SDLErrorDomain *const SDLErrorDomainRPCStore; +extern SDLErrorDomain *const SDLErrorDomainCacheFileManager; @interface NSError (SDLErrors) @@ -75,6 +77,13 @@ extern SDLErrorDomain *const SDLErrorDomainRPCStore; + (NSError *)sdl_choiceSetManager_failedToCreateMenuItems; + (NSError *)sdl_choiceSetManager_incorrectState:(NSString *)state; + +#pragma mark System Capability Manager + ++ (NSError *)sdl_systemCapabilityManager_moduleDoesNotSupportSystemCapabilities; ++ (NSError *)sdl_systemCapabilityManager_cannotUpdateInHMINONE; ++ (NSError *)sdl_systemCapabilityManager_cannotUpdateTypeDISPLAYS; + #pragma mark Transport + (NSError *)sdl_transport_unknownError; @@ -86,6 +95,10 @@ extern SDLErrorDomain *const SDLErrorDomainRPCStore; + (NSError *)sdl_rpcStore_invalidObjectErrorWithObject:(id)wrongObject expectedType:(Class)type; +#pragma mark Cache File Manager + ++ (NSError *)sdl_cacheFileManager_updateIconArchiveFileFailed; + @end @interface NSException (SDLExceptions) diff --git a/SmartDeviceLink/SDLError.m b/SmartDeviceLink/SDLError.m index efe518cb8..420d655f4 100644 --- a/SmartDeviceLink/SDLError.m +++ b/SmartDeviceLink/SDLError.m @@ -21,8 +21,10 @@ SDLErrorDomain *const SDLErrorDomainSoftButtonManager = @"com.sdl.softbuttonmanager.error"; SDLErrorDomain *const SDLErrorDomainMenuManager = @"com.sdl.menumanager.error"; SDLErrorDomain *const SDLErrorDomainChoiceSetManager = @"com.sdl.choicesetmanager.error"; +SDLErrorDomain *const SDLErrorDomainSystemCapabilityManager = @"com.sdl.systemcapabilitymanager.error"; SDLErrorDomain *const SDLErrorDomainTransport = @"com.sdl.transport.error"; SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error"; +SDLErrorDomain *const SDLErrorDomainCacheFileManager = @"com.sdl.cachefilemanager.error"; @implementation NSError (SDLErrors) @@ -69,8 +71,7 @@ + (NSError *)sdl_encryption_lifecycle_nak { + (NSError *)sdl_lifecycle_rpcErrorWithDescription:(NSString *)description andReason:(NSString *)reason { NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(description, nil), - NSLocalizedFailureReasonErrorKey: NSLocalizedString(reason, nil), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Have you tried turning it off and on again?", nil) + NSLocalizedFailureReasonErrorKey: NSLocalizedString(reason, nil) }; return [NSError errorWithDomain:SDLErrorDomainLifecycleManager code:SDLManagerErrorRPCRequestFailed @@ -80,8 +81,7 @@ + (NSError *)sdl_lifecycle_rpcErrorWithDescription:(NSString *)description andRe + (NSError *)sdl_lifecycle_notConnectedError { NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not find a connection", nil), - NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The SDL library could not find a current connection to an SDL hardware device", nil), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Have you tried turning it off and on again?", nil) + NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The SDL library could not find a current connection to an SDL hardware device", nil) }; return [NSError errorWithDomain:SDLErrorDomainLifecycleManager @@ -92,8 +92,7 @@ + (NSError *)sdl_lifecycle_notConnectedError { + (NSError *)sdl_lifecycle_notReadyError { NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(@"Lifecycle manager not ready", nil), - NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The SDL library is not finished setting up the connection, please wait until the lifecycleState is SDLLifecycleStateReady", nil), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Have you tried turning it off and on again?", nil) + NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The SDL library is not finished setting up the connection, please wait until the lifecycleState is SDLLifecycleStateReady", nil) }; return [NSError errorWithDomain:SDLErrorDomainLifecycleManager @@ -104,8 +103,7 @@ + (NSError *)sdl_lifecycle_notReadyError { + (NSError *)sdl_lifecycle_unknownRemoteErrorWithDescription:(NSString *)description andReason:(NSString *)reason { NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(description, nil), - NSLocalizedFailureReasonErrorKey: NSLocalizedString(reason, nil), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Have you tried turning it off and on again?", nil) + NSLocalizedFailureReasonErrorKey: NSLocalizedString(reason, nil) }; return [NSError errorWithDomain:SDLErrorDomainLifecycleManager code:SDLManagerErrorUnknownRemoteError @@ -288,6 +286,35 @@ + (NSError *)sdl_choiceSetManager_incorrectState:(SDLChoiceManagerState *)state return [NSError errorWithDomain:SDLErrorDomainChoiceSetManager code:SDLChoiceSetManagerErrorInvalidState userInfo:userInfo]; } +#pragma mark System Capability Manager + ++ (NSError *)sdl_systemCapabilityManager_moduleDoesNotSupportSystemCapabilities { + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: NSLocalizedString(@"Module does not understand system capabilities", nil), + NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The connected module does not support system capabilities", nil), + NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Use isCapabilitySupported to find out if the feature is supported on the head unit, but no more information about the feature is available on this module", nil) + }; + return [NSError errorWithDomain:SDLErrorDomainSystemCapabilityManager code:SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities userInfo:userInfo]; +} + ++ (NSError *)sdl_systemCapabilityManager_cannotUpdateInHMINONE { + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: NSLocalizedString(@"System capabilities cannot be updated in HMI NONE.", nil), + NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The system capability manager attempted to subscribe or update a system capability in HMI NONE, which is not allowed.", nil), + NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Wait until you are in HMI BACKGROUND, LIMITED, OR FULL before subscribing or updating a capability.", nil) + }; + return [NSError errorWithDomain:SDLErrorDomainSystemCapabilityManager code:SDLSystemCapabilityManagerErrorHMINone userInfo:userInfo]; +} + ++ (NSError *)sdl_systemCapabilityManager_cannotUpdateTypeDISPLAYS { + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: NSLocalizedString(@"System capability type DISPLAYS cannot be updated.", nil), + NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The system capability manager attempted to update system capability type DISPLAYS, which is not allowed.", nil), + NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Subscribe to DISPLAYS to automatically receive updates or retrieve a cached display capability value directly from the SystemCapabilityManager.", nil) + }; + return [NSError errorWithDomain:SDLErrorDomainSystemCapabilityManager code:SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays userInfo:userInfo]; +} + #pragma mark Transport + (NSError *)sdl_transport_unknownError { @@ -337,6 +364,17 @@ + (NSError *)sdl_rpcStore_invalidObjectErrorWithObject:(id)wrongObject expectedT return [NSError errorWithDomain:SDLErrorDomainRPCStore code:SDLRPCStoreErrorGetInvalidObject userInfo:userInfo]; } +#pragma mark Cache File Manager + ++ (NSError *)sdl_cacheFileManager_updateIconArchiveFileFailed { + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: NSLocalizedString(@"Cache File Manager error", nil), + NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"Unable to archive icon archive file to file path", nil), + NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that file path is valid", nil) + }; + return [NSError errorWithDomain:SDLErrorDomainCacheFileManager code:SDLCacheManagerErrorUpdateIconArchiveFileFailure userInfo:userInfo]; +} + @end @@ -381,7 +419,7 @@ + (NSException *)sdl_invalidLockscreenSetupException { + (NSException *)sdl_invalidSelectorExceptionWithSelector:(SEL)selector { return [NSException exceptionWithName:@"com.sdl.systemCapabilityManager.selectorException" - reason:[NSString stringWithFormat:@"Capability observation selector: %@ does not match possible selectors, which must have either 0 or 1 parameters", NSStringFromSelector(selector)] + reason:[NSString stringWithFormat:@"Capability observation selector: %@ does not match possible selectors, which must have between 0 and 3 parameters, or is not a selector on the observer object. Check that your selector is formatted correctly, and that your observer is not nil. You should unsubscribe an observer before it goes to nil.", NSStringFromSelector(selector)] userInfo:nil]; } diff --git a/SmartDeviceLink/SDLErrorConstants.h b/SmartDeviceLink/SDLErrorConstants.h index f6c7e27ab..04fc7a7ec 100644 --- a/SmartDeviceLink/SDLErrorConstants.h +++ b/SmartDeviceLink/SDLErrorConstants.h @@ -152,6 +152,12 @@ typedef NS_ENUM(NSInteger, SDLChoiceSetManagerError) { SDLChoiceSetManagerErrorInvalidState = -5 }; +typedef NS_ENUM(NSInteger, SDLSystemCapabilityManagerError) { + SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities = -1, + SDLSystemCapabilityManagerErrorHMINone = -2, + SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays = -3 +}; + /** * Errors associated with transport. */ @@ -186,3 +192,10 @@ typedef NS_ENUM(NSInteger, SDLRPCStoreError) { */ SDLRPCStoreErrorGetInvalidObject = -1, }; + +typedef NS_ENUM(NSInteger, SDLCacheFileManagerError) { + /** + * Failed to update archive file + */ + SDLCacheManagerErrorUpdateIconArchiveFileFailure = -1, +}; diff --git a/SmartDeviceLink/SDLFunctionID.m b/SmartDeviceLink/SDLFunctionID.m index 69e545fa1..1a3b93bbb 100644 --- a/SmartDeviceLink/SDLFunctionID.m +++ b/SmartDeviceLink/SDLFunctionID.m @@ -116,10 +116,13 @@ - (instancetype)init { @32785: SDLRPCFunctionNameOnRCStatus, @32786: SDLRPCFunctionNameOnAppServiceData, @32787: SDLRPCFunctionNameOnSystemCapabilityUpdated, +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" @65536: SDLRPCFunctionNameEncodedSyncPData, @65537: SDLRPCFunctionNameSyncPData, @98304: SDLRPCFunctionNameOnEncodedSyncPData, @98305: SDLRPCFunctionNameOnSyncPData +#pragma clang diagnostic pop }; return self; } diff --git a/SmartDeviceLink/SDLGlobals.h b/SmartDeviceLink/SDLGlobals.h index 2d4edf017..004a0e8d9 100644 --- a/SmartDeviceLink/SDLGlobals.h +++ b/SmartDeviceLink/SDLGlobals.h @@ -26,6 +26,9 @@ extern NSUInteger const SDLDefaultMTUSize; extern NSUInteger const SDLV1MTUSize; extern NSUInteger const SDLV3MTUSize; +extern void *const SDLProcessingQueueName; +extern void *const SDLConcurrentQueueName; + @interface SDLGlobals : NSObject @property (copy, nonatomic, readonly) SDLVersion *protocolVersion; diff --git a/SmartDeviceLink/SDLGlobals.m b/SmartDeviceLink/SDLGlobals.m index dfff3ca50..dc78e7a56 100644 --- a/SmartDeviceLink/SDLGlobals.m +++ b/SmartDeviceLink/SDLGlobals.m @@ -22,6 +22,8 @@ NSUInteger const SDLV1MTUSize = 1024; NSUInteger const SDLV3MTUSize = 131024; +void *const SDLProcessingQueueName = "com.sdl.serialProcessing"; +void *const SDLConcurrentQueueName = "com.sdl.concurrentProcessing"; typedef NSNumber *ServiceTypeBox; typedef NSNumber *MTUBox; @@ -61,8 +63,10 @@ - (instancetype)init { dispatch_queue_attr_t qosSerial = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, 0); dispatch_queue_attr_t qosConcurrent = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_CONCURRENT, QOS_CLASS_USER_INITIATED, 0); - _sdlProcessingQueue = dispatch_queue_create("com.sdl.serialProcessing", qosSerial); - _sdlConcurrentQueue = dispatch_queue_create("com.sdl.concurrentProcessing", qosConcurrent); + _sdlProcessingQueue = dispatch_queue_create(SDLProcessingQueueName, qosSerial); + dispatch_queue_set_specific(_sdlProcessingQueue, SDLProcessingQueueName, SDLProcessingQueueName, NULL); + _sdlConcurrentQueue = dispatch_queue_create(SDLConcurrentQueueName, qosConcurrent); + dispatch_queue_set_specific(_sdlConcurrentQueue, SDLConcurrentQueueName, SDLConcurrentQueueName, NULL); return self; } diff --git a/SmartDeviceLink/SDLH264VideoEncoder.h b/SmartDeviceLink/SDLH264VideoEncoder.h index 29f15515e..58bde0508 100644 --- a/SmartDeviceLink/SDLH264VideoEncoder.h +++ b/SmartDeviceLink/SDLH264VideoEncoder.h @@ -51,7 +51,7 @@ extern NSString *const SDLErrorDomainVideoEncoder; /** * The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder. * - * @warning This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started). + * @warning This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started). * @discussion Clients may call this once and retain the resulting pool, this call is cheap enough that it's OK to call it once per frame. */ @property (assign, nonatomic, readonly) CVPixelBufferPoolRef CV_NULLABLE pixelBufferPool; diff --git a/SmartDeviceLink/SDLH264VideoEncoder.m b/SmartDeviceLink/SDLH264VideoEncoder.m index 933a4f48a..7ce981f5e 100644 --- a/SmartDeviceLink/SDLH264VideoEncoder.m +++ b/SmartDeviceLink/SDLH264VideoEncoder.m @@ -26,6 +26,11 @@ @interface SDLH264VideoEncoder () @property (assign, nonatomic) NSUInteger currentFrameNumber; @property (assign, nonatomic) double timestampOffset; +@property (assign, nonatomic, readwrite) CVPixelBufferPoolRef CV_NULLABLE pixelBufferPool; + +/// Width and height of the video frame. +@property (assign, nonatomic) CGSize dimensions; + @end @@ -54,6 +59,7 @@ - (instancetype)initWithProtocol:(SDLVideoStreamingProtocol)protocol dimensions: _compressionSession = NULL; _currentFrameNumber = 0; _videoEncoderSettings = properties; + _dimensions = dimensions; _delegate = delegate; @@ -63,9 +69,8 @@ - (instancetype)initWithProtocol:(SDLVideoStreamingProtocol)protocol dimensions: status = VTCompressionSessionCreate(NULL, (int32_t)dimensions.width, (int32_t)dimensions.height, kCMVideoCodecType_H264, NULL, self.sdl_pixelBufferOptions, NULL, &sdl_videoEncoderOutputCallback, (__bridge void *)self, &_compressionSession); if (status != noErr) { - if (!*error) { - *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionCreationFailure userInfo:@{ @"OSStatus": @(status) }]; - SDLLogE(@"Error attempting to create video compression session: %@", *error); + if (error != NULL) { + *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionCreationFailure userInfo:@{@"OSStatus":@(status), NSLocalizedDescriptionKey:@"Compression session could not be created"}]; } return nil; @@ -78,8 +83,8 @@ - (instancetype)initWithProtocol:(SDLVideoStreamingProtocol)protocol dimensions: CFDictionaryRef supportedProperties; status = VTSessionCopySupportedPropertyDictionary(self.compressionSession, &supportedProperties); if (status != noErr) { - if (!*error) { - *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{ @"OSStatus": @(status) }]; + if (error != NULL) { + *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{@"OSStatus":@(status), NSLocalizedDescriptionKey:[NSString stringWithFormat:@"\"%@\" are not supported properties.", supportedProperties]}]; } return nil; @@ -88,9 +93,8 @@ - (instancetype)initWithProtocol:(SDLVideoStreamingProtocol)protocol dimensions: NSArray* videoEncoderKeys = self.videoEncoderSettings.allKeys; for (NSString *key in videoEncoderKeys) { if (CFDictionaryContainsKey(supportedProperties, (__bridge CFStringRef)key) == false) { - if (!*error) { - NSString *description = [NSString stringWithFormat:@"\"%@\" is not a supported key.", key]; - *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{NSLocalizedDescriptionKey: description}]; + if (error != NULL) { + *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{NSLocalizedDescriptionKey:[NSString stringWithFormat:@"\"%@\" is not a supported key.", key]}]; } CFRelease(supportedProperties); return nil; @@ -104,9 +108,8 @@ - (instancetype)initWithProtocol:(SDLVideoStreamingProtocol)protocol dimensions: status = VTSessionSetProperty(self.compressionSession, (__bridge CFStringRef)key, (__bridge CFTypeRef)value); if (status != noErr) { - if (!*error) { - NSString *description = [NSString stringWithFormat:@"Setting key failed \"%@\"", key]; - *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{NSLocalizedDescriptionKey: description, @"OSStatus": @(status)}]; + if (error != NULL) { + *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{@"OSStatus": @(status), NSLocalizedDescriptionKey:[NSString stringWithFormat:@"Setting key failed \"%@\"", key]}]; } return nil; } @@ -117,8 +120,8 @@ - (instancetype)initWithProtocol:(SDLVideoStreamingProtocol)protocol dimensions: } else if ([protocol isEqualToEnum:SDLVideoStreamingProtocolRTP]) { _packetizer = [[SDLRTPH264Packetizer alloc] initWithSSRC:ssrc]; } else { - if (!*error) { - *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorProtocolUnknown userInfo:@{ @"encoder": protocol}]; + if (error != NULL) { + *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorProtocolUnknown userInfo:@{@"encoder": protocol}]; } return nil; } @@ -129,6 +132,9 @@ - (instancetype)initWithProtocol:(SDLVideoStreamingProtocol)protocol dimensions: } - (void)stop { + _currentFrameNumber = 0; + _timestampOffset = 0.0; + if (self.compressionSession != NULL) { VTCompressionSessionInvalidate(self.compressionSession); CFRelease(self.compressionSession); @@ -176,11 +182,28 @@ - (CVPixelBufferRef CV_NULLABLE)newPixelBuffer { } - (CVPixelBufferPoolRef CV_NULLABLE)pixelBufferPool { - return VTCompressionSessionGetPixelBufferPool(self.compressionSession); + // HAX: When the app is backgrounded, sometimes the compression session gets invalidated (this can happen the first time the app is backgrounded or the tenth). This causes the pool and/or the compression session to fail when the app is foregrounded and video frames are sent again. Attempt to fix this by recreating the compression session. + if (_pixelBufferPool == NULL) { + BOOL success = [self sdl_resetCompressionSession]; + if (!success) { + return NULL; + } + + _pixelBufferPool = VTCompressionSessionGetPixelBufferPool(self.compressionSession); + } + + return _pixelBufferPool; } #pragma mark - Private #pragma mark Callback + +/// Callback function that VideoToolbox calls when encoding is complete. +/// @param outputCallbackRefCon The callback's reference value +/// @param sourceFrameRefCon The frame's reference value +/// @param status Returns `noErr` if compression was successful, or an error if not successful +/// @param infoFlags Information about the encode operation (frame dropped or if encode ran asynchronously) +/// @param sampleBuffer Contains the compressed frame if compression was successful and the frame was not dropped; null otherwise void sdl_videoEncoderOutputCallback(void * CM_NULLABLE outputCallbackRefCon, void * CM_NULLABLE sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags, CM_NULLABLE CMSampleBufferRef sampleBuffer) { // If there was an error in the encoding, drop the frame if (status != noErr) { @@ -312,6 +335,19 @@ + (NSArray *)sdl_extractNalUnitsFromSampleBuffer:(CMSampleBufferRef)sampleBuffer return nalUnits; } +/// Attempts to create a new VTCompressionSession using the dimensions passed when the video encoder was created and returns whether or not creating the new compression session was created successfully. +- (BOOL)sdl_resetCompressionSession { + // Destroy the current compression session before attempting to create a new one. Otherwise the attempt to create a new compression session sometimes fails. + if (self.compressionSession != NULL) { + VTCompressionSessionInvalidate(self.compressionSession); + CFRelease(self.compressionSession); + self.compressionSession = NULL; + } + + OSStatus status = VTCompressionSessionCreate(NULL, (int32_t)self.dimensions.width, (int32_t)self.dimensions.height, kCMVideoCodecType_H264, NULL, self.sdl_pixelBufferOptions, NULL, &sdl_videoEncoderOutputCallback, (__bridge void *)self, &_compressionSession); + return (status == noErr); +} + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLIAPControlSession.m b/SmartDeviceLink/SDLIAPControlSession.m index e6505e4b3..a1e4c07ab 100644 --- a/SmartDeviceLink/SDLIAPControlSession.m +++ b/SmartDeviceLink/SDLIAPControlSession.m @@ -54,27 +54,39 @@ - (void)startSession { } else { SDLLogD(@"Starting a control session with accessory (%@)", self.accessory.name); - if (![self sdl_startStreams]) { - SDLLogW(@"Control session failed to setup with accessory: %@. Attempting to create a new control session", self.accessory); - [self destroySession]; - if (self.delegate == nil) { return; } - [self.delegate controlSessionShouldRetry]; - } else { - SDLLogD(@"Waiting for the protocol string from Core, setting timer for %d seconds", ProtocolIndexTimeoutSeconds); - self.protocolIndexTimer = [self sdl_createControlSessionProtocolIndexStringDataTimeoutTimer]; - } + __weak typeof(self) weakSelf = self; + [self sdl_startStreamsWithCompletionHandler:^(BOOL success) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!success) { + SDLLogW(@"Control session failed to setup with accessory: %@. Attempting to create a new control session", strongSelf.accessory); + [strongSelf destroySession]; + if (strongSelf.delegate == nil) { return; } + [strongSelf.delegate controlSessionShouldRetry]; + } else { + SDLLogD(@"Waiting for the protocol string from Core, setting timeout timer for %d seconds", ProtocolIndexTimeoutSeconds); + strongSelf.protocolIndexTimer = [strongSelf sdl_createControlSessionProtocolIndexStringDataTimeoutTimer]; + } + }]; } } -- (BOOL)sdl_startStreams { - if (![super createSession]) { return NO; } +/// Opens the input and output streams for the session on the main thread. +/// @discussion We must close the input/output streams from the same thread that owns the streams' run loop, otherwise if the streams are closed from another thread a random crash may occur. Since only a small amount of data will be transmitted on this stream before it is closed, we will open and close the streams on the main thread instead of creating a separate thread. +- (void)sdl_startStreamsWithCompletionHandler:(void (^)(BOOL success))completionHandler { + if (![super createSession]) { + return completionHandler(NO); + } + + __weak typeof(self) weakSelf = self; + dispatch_async(dispatch_get_main_queue(), ^{ + __strong typeof(weakSelf) strongSelf = weakSelf; - // No need for its own thread as only a small amount of data will be transmitted before control session is destroyed - SDLLogD(@"Created the control session successfully"); - [super startStream:self.eaSession.outputStream]; - [super startStream:self.eaSession.inputStream]; + SDLLogD(@"Created the control session successfully"); + [super startStream:strongSelf.eaSession.outputStream]; + [super startStream:strongSelf.eaSession.inputStream]; - return YES; + return completionHandler(YES); + }); } #pragma mark Stop diff --git a/SmartDeviceLink/SDLIconArchiveFile.h b/SmartDeviceLink/SDLIconArchiveFile.h new file mode 100644 index 000000000..9d50ade1b --- /dev/null +++ b/SmartDeviceLink/SDLIconArchiveFile.h @@ -0,0 +1,29 @@ +// +// SDLIconArchiveFile.h +// SmartDeviceLink +// +// Created by James Lapinski on 3/10/20. +// Copyright © 2020 smartdevicelink. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SDLIconArchiveFile : NSObject + +@property (nonatomic, copy) NSArray *lockScreenIconCaches; + +@end + +@interface SDLLockScreenIconCache : NSObject + +@property (nonatomic, copy) NSString *iconUrl; +@property (nonatomic, copy) NSString *iconFilePath; +@property (nonatomic, copy) NSDate *lastModifiedDate; + +- (instancetype)initWithIconUrl:(NSString *)iconUrl iconFilePath:(NSString *)iconFilePath; + +@end + +NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLIconArchiveFile.m b/SmartDeviceLink/SDLIconArchiveFile.m new file mode 100644 index 000000000..d4bb70d4d --- /dev/null +++ b/SmartDeviceLink/SDLIconArchiveFile.m @@ -0,0 +1,75 @@ +// +// SDLIconArchiveFile.m +// SmartDeviceLink +// +// Created by James Lapinski on 3/10/20. +// Copyright © 2020 smartdevicelink. All rights reserved. +// + +#import "SDLIconArchiveFile.h" + +@implementation SDLIconArchiveFile + +- (instancetype)init { + self = [super init]; + if (!self) { return nil; } + + self.lockScreenIconCaches = [[NSArray alloc] init]; + + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super init]; + if (!self) { return nil; } + + self.lockScreenIconCaches = [decoder decodeObjectOfClass:[NSArray self] forKey:@"lockScreenIconCaches"]; + + return self; +} + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (void)encodeWithCoder:(NSCoder *)encoder { + [encoder encodeObject:self.lockScreenIconCaches forKey:@"lockScreenIconCaches"]; +} + +@end + +@implementation SDLLockScreenIconCache + +- (instancetype)initWithIconUrl:(NSString *)iconUrl iconFilePath:(NSString *)iconFilePath { + self = [super init]; + if (!self) { return nil; } + + self.iconUrl = iconUrl; + self.iconFilePath = iconFilePath; + self.lastModifiedDate = [NSDate date]; + + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super init]; + if (!self) { return nil; } + + self.iconUrl = [decoder decodeObjectOfClass:[NSString self] forKey:@"iconUrl"]; + self.iconFilePath = [decoder decodeObjectOfClass:[NSString self] forKey:@"iconFilePath"]; + self.lastModifiedDate = [decoder decodeObjectOfClass:[NSDate self] forKey:@"lastModifiedDate"]; + + return self; +} + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (void)encodeWithCoder:(NSCoder *)encoder { + [encoder encodeObject:self.iconUrl forKey:@"iconUrl"]; + [encoder encodeObject:self.iconFilePath forKey:@"iconFilePath"]; + [encoder encodeObject:self.lastModifiedDate forKey:@"lastModifiedDate"]; +} + +@end diff --git a/SmartDeviceLink/SDLImageField.h b/SmartDeviceLink/SDLImageField.h index 5e8d9ab6b..610b1a55c 100644 --- a/SmartDeviceLink/SDLImageField.h +++ b/SmartDeviceLink/SDLImageField.h @@ -36,6 +36,12 @@ NS_ASSUME_NONNULL_BEGIN */ @property (nullable, strong, nonatomic) SDLImageResolution *imageResolution; +/// Convenience initalizer for the ImageField RPC struct +/// @param name The name identifying this image field +/// @param imageTypeSupported The image data types this field supports +/// @param imageResolution The native resolution of this image field +- (instancetype)initWithName:(SDLImageFieldName)name imageTypeSupported:(NSArray *)imageTypeSupported imageResolution:(nullable SDLImageResolution *)imageResolution; + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLImageField.m b/SmartDeviceLink/SDLImageField.m index e866db1d7..85532ff80 100644 --- a/SmartDeviceLink/SDLImageField.m +++ b/SmartDeviceLink/SDLImageField.m @@ -38,6 +38,17 @@ - (nullable SDLImageResolution *)imageResolution { return [self.store sdl_objectForName:SDLRPCParameterNameImageResolution ofClass:SDLImageResolution.class error:nil]; } +- (instancetype)initWithName:(SDLImageFieldName)name imageTypeSupported:(NSArray *)imageTypeSupported imageResolution:(nullable SDLImageResolution *)imageResolution { + self = [self init]; + if (!self) { return nil; } + + self.name = name; + self.imageTypeSupported = imageTypeSupported; + self.imageResolution = imageResolution; + + return self; +} + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLLifecycleManager.h b/SmartDeviceLink/SDLLifecycleManager.h index 519cdbf8f..e3fcd2cb2 100644 --- a/SmartDeviceLink/SDLLifecycleManager.h +++ b/SmartDeviceLink/SDLLifecycleManager.h @@ -13,6 +13,7 @@ #import "SDLHMILevel.h" #import "SDLLanguage.h" #import "SDLSystemContext.h" +#import "SDLVideoStreamingState.h" @class SDLConfiguration; @class SDLFileManager; @@ -85,6 +86,7 @@ typedef void (^SDLManagerReadyBlock)(BOOL success, NSError *_Nullable error); @property (copy, nonatomic, readonly) SDLLifecycleState *lifecycleState; @property (copy, nonatomic, nullable) SDLHMILevel hmiLevel; @property (copy, nonatomic, nullable) SDLAudioStreamingState audioStreamingState; +@property (copy, nonatomic, nullable) SDLVideoStreamingState videoStreamingState; @property (copy, nonatomic, nullable) SDLSystemContext systemContext; @property (strong, nonatomic, nullable) SDLRegisterAppInterfaceResponse *registerResponse; diff --git a/SmartDeviceLink/SDLLifecycleManager.m b/SmartDeviceLink/SDLLifecycleManager.m index 53f2059ac..c0f47177c 100644 --- a/SmartDeviceLink/SDLLifecycleManager.m +++ b/SmartDeviceLink/SDLLifecycleManager.m @@ -54,7 +54,6 @@ #import "SDLStateMachine.h" #import "SDLStreamingMediaConfiguration.h" #import "SDLStreamingMediaManager.h" -#import "SDLStreamingProtocolDelegate.h" #import "SDLSystemCapabilityManager.h" #import "SDLUnregisterAppInterface.h" #import "SDLVersion.h" @@ -76,9 +75,17 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask"; -#pragma mark - SDLManager Private Interface +#pragma mark - Protected Class Interfaces +@interface SDLStreamingMediaManager () -@interface SDLLifecycleManager () +@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager; +- (void)startSecondaryTransportWithProtocol:(SDLProtocol *)protocol; + +@end + +#pragma mark - SDLLifecycleManager Private Interface + +@interface SDLLifecycleManager () // Readonly public properties @property (copy, nonatomic, readwrite) SDLConfiguration *configuration; @@ -144,12 +151,9 @@ - (instancetype)initWithConfiguration:(SDLConfiguration *)configuration delegate _lockScreenManager = [[SDLLockScreenManager alloc] initWithConfiguration:_configuration.lockScreenConfig notificationDispatcher:_notificationDispatcher presenter:[[SDLLockScreenPresenter alloc] init]]; _systemCapabilityManager = [[SDLSystemCapabilityManager alloc] initWithConnectionManager:self]; _screenManager = [[SDLScreenManager alloc] initWithConnectionManager:self fileManager:_fileManager systemCapabilityManager:_systemCapabilityManager]; - - if ([configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeNavigation] || - [configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeProjection] || - [configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeNavigation] || - [configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeProjection]) { - _streamManager = [[SDLStreamingMediaManager alloc] initWithConnectionManager:self configuration:configuration]; + + if ([self.class sdl_isStreamingConfiguration:self.configuration]) { + _streamManager = [[SDLStreamingMediaManager alloc] initWithConnectionManager:self configuration:configuration systemCapabilityManager:self.systemCapabilityManager]; } else { SDLLogV(@"Skipping StreamingMediaManager setup due to app type"); } @@ -244,8 +248,12 @@ - (void)didEnterStateStarted { } else if (self.configuration.lifecycleConfig.allowedSecondaryTransports == SDLSecondaryTransportsNone) { self.proxy = [SDLProxy iapProxyWithListener:self.notificationDispatcher secondaryTransportManager:nil encryptionLifecycleManager:self.encryptionLifecycleManager]; } else { - // We reuse our queue to run secondary transport manager's state machine - self.secondaryTransportManager = [[SDLSecondaryTransportManager alloc] initWithStreamingProtocolDelegate:self serialQueue:self.lifecycleQueue]; + if ([self.class sdl_isStreamingConfiguration:self.configuration]) { + // Reuse the queue to run the secondary transport manager's state machine + self.secondaryTransportManager = [[SDLSecondaryTransportManager alloc] initWithStreamingProtocolDelegate:(id)self.streamManager serialQueue:self.lifecycleQueue]; + self.streamManager.secondaryTransportManager = self.secondaryTransportManager; + } + self.proxy = [SDLProxy iapProxyWithListener:self.notificationDispatcher secondaryTransportManager:self.secondaryTransportManager encryptionLifecycleManager:self.encryptionLifecycleManager]; } #pragma clang diagnostic pop @@ -262,6 +270,7 @@ - (void)didEnterStateReconnecting { - (void)sdl_stopManager:(BOOL)shouldRestart { SDLLogV(@"Stopping manager, %@", (shouldRestart ? @"will restart" : @"will not restart")); + [self.proxy disconnectSession]; self.proxy = nil; [self.fileManager stop]; @@ -269,12 +278,8 @@ - (void)sdl_stopManager:(BOOL)shouldRestart { [self.lockScreenManager stop]; [self.screenManager stop]; [self.encryptionLifecycleManager stop]; - if (self.secondaryTransportManager != nil) { - [self.secondaryTransportManager stop]; - } else { - [self audioServiceProtocolDidUpdateFromOldProtocol:self.proxy.protocol toNewProtocol:nil]; - [self videoServiceProtocolDidUpdateFromOldProtocol:self.proxy.protocol toNewProtocol:nil]; - } + [self.streamManager stop]; + [self.secondaryTransportManager stop]; [self.systemCapabilityManager stop]; [self.responseDispatcher clear]; @@ -284,6 +289,7 @@ - (void)sdl_stopManager:(BOOL)shouldRestart { self.lastCorrelationId = 0; self.hmiLevel = nil; self.audioStreamingState = nil; + self.videoStreamingState = nil; self.systemContext = nil; // Due to a race condition internally with EAStream, we cannot immediately attempt to restart the proxy, as we will randomly crash. @@ -335,7 +341,7 @@ - (void)didEnterStateConnected { // Send the request and depending on the response, post the notification __weak typeof(self) weakSelf = self; - [self sdl_sendRequest:regRequest + [self sendConnectionManagerRequest:regRequest withResponseHandler:^(__kindof SDLRPCRequest *_Nullable request, __kindof SDLRPCResponse *_Nullable response, NSError *_Nullable error) { // If the success BOOL is NO or we received an error at this point, we failed. Call the ready handler and transition to the DISCONNECTED state. if (error != nil || ![response.success boolValue]) { @@ -450,10 +456,9 @@ - (void)didEnterStateSettingUpManagers { [self.encryptionLifecycleManager startWithProtocol:self.proxy.protocol]; } - // if secondary transport manager is used, streaming media manager will be started through onAudioServiceProtocolUpdated and onVideoServiceProtocolUpdated + // Starts the streaming media manager if only using the primary transport (i.e. secondary transports has been disabled in the lifecyle configuration). If using a secondary transport, setup is handled by the stream manager. if (self.secondaryTransportManager == nil && self.streamManager != nil) { - [self audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:self.proxy.protocol]; - [self videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:self.proxy.protocol]; + [self.streamManager startSecondaryTransportWithProtocol:self.proxy.protocol]; } dispatch_group_enter(managerGroup); @@ -529,6 +534,10 @@ - (void)didEnterStateReady { [self.delegate audioStreamingState:SDLAudioStreamingStateNotAudible didChangeToState:self.audioStreamingState]; } + if ([self.delegate respondsToSelector:@selector(videoStreamingState:didChangetoState:)]) { + [self.delegate videoStreamingState:SDLVideoStreamingStateNotStreamable didChangetoState:self.videoStreamingState]; + } + // Stop the background task now that setup has completed [self.backgroundTaskManager endBackgroundTask]; } @@ -576,7 +585,7 @@ - (void)sdl_sendAppIcon:(nullable SDLFile *)appIcon withCompletion:(void (^)(voi SDLSetAppIcon *setAppIcon = [[SDLSetAppIcon alloc] init]; setAppIcon.syncFileName = appIcon.name; - [self sdl_sendRequest:setAppIcon + [self sendConnectionManagerRequest:setAppIcon withResponseHandler:^(__kindof SDLRPCRequest *_Nullable request, __kindof SDLRPCResponse *_Nullable response, NSError *_Nullable error) { if (error != nil) { SDLLogW(@"Error setting up app icon: %@", error); @@ -640,7 +649,9 @@ - (void)sendConnectionRPC:(__kindof SDLRPCMessage *)rpc { return; } - [self sdl_sendRequest:rpc withResponseHandler:nil]; + [self sdl_runOnProcessingQueue:^{ + [self sdl_sendRequest:rpc withResponseHandler:nil]; + }]; } - (void)sendConnectionRequest:(__kindof SDLRPCRequest *)request withResponseHandler:(nullable SDLResponseHandler)handler { @@ -665,13 +676,17 @@ - (void)sendConnectionRequest:(__kindof SDLRPCRequest *)request withResponseHand return; } - - [self sdl_sendRequest:request withResponseHandler:handler]; + + [self sdl_runOnProcessingQueue:^{ + [self sdl_sendRequest:request withResponseHandler:handler]; + }]; } // Managers need to avoid state checking. Part of . - (void)sendConnectionManagerRequest:(__kindof SDLRPCMessage *)request withResponseHandler:(nullable SDLResponseHandler)handler { - [self sdl_sendRequest:request withResponseHandler:handler]; + [self sdl_runOnProcessingQueue:^{ + [self sdl_sendRequest:request withResponseHandler:handler]; + }]; } - (void)sdl_sendRequest:(__kindof SDLRPCMessage *)request withResponseHandler:(nullable SDLResponseHandler)handler { @@ -703,6 +718,20 @@ - (void)sdl_sendRequest:(__kindof SDLRPCMessage *)request withResponseHandler:(n } #pragma mark Helper Methods + +/// Returns true if the app type set in the configuration is `NAVIGATION` or `PROJECTION`; false for any other app type. +/// @param configuration This session's configuration ++ (BOOL)sdl_isStreamingConfiguration:(SDLConfiguration *)configuration { + if ([configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeNavigation] || + [configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeProjection] || + [configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeNavigation] || + [configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeProjection]) { + return YES; + } + + return NO; +} + - (NSNumber *)sdl_getNextCorrelationId { if (self.lastCorrelationId == INT32_MAX) { self.lastCorrelationId = 0; @@ -722,8 +751,7 @@ + (BOOL)sdl_checkNotification:(NSNotification *)notification containsKindOfClass // this is to make sure that the transition happens on the dedicated queue - (void)sdl_runOnProcessingQueue:(void (^)(void))block { - if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(self.lifecycleQueue)) == 0 - || strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label([SDLGlobals sharedGlobals].sdlProcessingQueue)) == 0) { + if (dispatch_get_specific(SDLProcessingQueueName) != nil) { block(); } else { dispatch_sync(self.lifecycleQueue, block); @@ -731,15 +759,9 @@ - (void)sdl_runOnProcessingQueue:(void (^)(void))block { } - (void)sdl_transitionToState:(SDLState *)state { - if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(self.lifecycleQueue)) == 0 - || strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label([SDLGlobals sharedGlobals].sdlProcessingQueue)) == 0) { + [self sdl_runOnProcessingQueue:^{ [self.lifecycleStateMachine transitionToState:state]; - } else { - // once this method returns, the transition is completed - dispatch_sync(self.lifecycleQueue, ^{ - [self.lifecycleStateMachine transitionToState:state]; - }); - } + }]; } /** @@ -795,9 +817,12 @@ - (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification { SDLHMILevel oldHMILevel = self.hmiLevel; self.hmiLevel = hmiStatusNotification.hmiLevel; - SDLAudioStreamingState oldStreamingState = self.audioStreamingState; + SDLAudioStreamingState oldAudioStreamingState = self.audioStreamingState; self.audioStreamingState = hmiStatusNotification.audioStreamingState; + SDLVideoStreamingState oldVideoStreamingState = self.videoStreamingState; + self.videoStreamingState = hmiStatusNotification.videoStreamingState; + SDLSystemContext oldSystemContext = self.systemContext; self.systemContext = hmiStatusNotification.systemContext; @@ -805,8 +830,12 @@ - (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification { SDLLogD(@"HMI level changed from %@ to %@", oldHMILevel, self.hmiLevel); } - if (![oldStreamingState isEqualToEnum:self.audioStreamingState]) { - SDLLogD(@"Audio streaming state changed from %@ to %@", oldStreamingState, self.audioStreamingState); + if (![oldAudioStreamingState isEqualToEnum:self.audioStreamingState]) { + SDLLogD(@"Audio streaming state changed from %@ to %@", oldAudioStreamingState, self.audioStreamingState); + } + + if (![oldVideoStreamingState isEqualToEnum:self.videoStreamingState]) { + SDLLogD(@"Video streaming state changed from %@ to %@", oldVideoStreamingState, self.videoStreamingState); } if (![oldSystemContext isEqualToEnum:self.systemContext]) { @@ -826,10 +855,16 @@ - (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification { [self.delegate hmiLevel:oldHMILevel didChangeToLevel:self.hmiLevel]; } - if (![oldStreamingState isEqualToEnum:self.audioStreamingState] - && !(oldStreamingState == nil && self.audioStreamingState == nil) + if (![oldAudioStreamingState isEqualToEnum:self.audioStreamingState] + && !(oldAudioStreamingState == nil && self.audioStreamingState == nil) && [self.delegate respondsToSelector:@selector(audioStreamingState:didChangeToState:)]) { - [self.delegate audioStreamingState:oldStreamingState didChangeToState:self.audioStreamingState]; + [self.delegate audioStreamingState:oldAudioStreamingState didChangeToState:self.audioStreamingState]; + } + + if (![oldVideoStreamingState isEqualToEnum:self.videoStreamingState] + && !(oldVideoStreamingState == nil && self.videoStreamingState == nil) + && [self.delegate respondsToSelector:@selector(videoStreamingState:didChangetoState:)]) { + [self.delegate videoStreamingState:oldVideoStreamingState didChangetoState:self.videoStreamingState]; } if (![oldSystemContext isEqualToEnum:self.systemContext] @@ -865,34 +900,6 @@ - (void)sdl_remoteHardwareDidUnregister:(SDLRPCNotificationNotification *)notifi } } -#pragma mark Streaming protocol listener - -- (void)audioServiceProtocolDidUpdateFromOldProtocol:(nullable SDLProtocol *)oldProtocol toNewProtocol:(nullable SDLProtocol *)newProtocol { - if ((oldProtocol == nil && newProtocol == nil) || (oldProtocol == newProtocol)) { - return; - } - - if (oldProtocol != nil) { - [self.streamManager stopAudio]; - } - if (newProtocol != nil) { - [self.streamManager startAudioWithProtocol:newProtocol]; - } -} - -- (void)videoServiceProtocolDidUpdateFromOldProtocol:(nullable SDLProtocol *)oldProtocol toNewProtocol:(nullable SDLProtocol *)newProtocol { - if ((oldProtocol == nil && newProtocol == nil) || (oldProtocol == newProtocol)) { - return; - } - - if (oldProtocol != nil) { - [self.streamManager stopVideo]; - } - if (newProtocol != nil) { - [self.streamManager startVideoWithProtocol:newProtocol]; - } -} - @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLLockScreenManager.m b/SmartDeviceLink/SDLLockScreenManager.m index 5dbb3e69f..e1b02b8cd 100644 --- a/SmartDeviceLink/SDLLockScreenManager.m +++ b/SmartDeviceLink/SDLLockScreenManager.m @@ -54,7 +54,10 @@ - (instancetype)initWithConfiguration:(SDLLockScreenConfiguration *)config notif _presenter = presenter; _lockScreenDismissedByUser = NO; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_lockScreenStatusDidChange:) name:SDLDidChangeLockScreenStatusNotification object:dispatcher]; +#pragma clang diagnostic pop [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_lockScreenIconReceived:) name:SDLDidReceiveLockScreenIcon object:dispatcher]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_appDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_driverDistractionStateDidChange:) name:SDLDidChangeDriverDistractionStateNotification object:dispatcher]; @@ -65,6 +68,28 @@ - (instancetype)initWithConfiguration:(SDLLockScreenConfiguration *)config notif - (void)start { self.canPresent = NO; + __weak typeof(self) weakSelf = self; + [self sdl_runOnMainQueue:^{ + __strong typeof(weakSelf) strongSelf = weakSelf; + + if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive) { + SDLLogW(@"Attempted to start lock screen manager, but we are in the background. We will attempt to start again when we are in the foreground."); + return; + } + + // This usually means that we disconnected and connected with the device in the background. We will need to check and dismiss the view controller if it's presented before setting up a new one. + if (strongSelf.presenter.lockViewController != nil) { + [strongSelf.presenter stopWithCompletionHandler:^{ + __strong typeof(weakSelf) strongSelf2 = weakSelf; + [strongSelf2 sdl_start]; + }]; + } else { + [strongSelf sdl_start]; + } + }]; +} + +- (void)sdl_start { // Create and initialize the lock screen controller depending on the configuration if (self.config.displayMode == SDLLockScreenConfigurationDisplayModeNever) { self.presenter.lockViewController = nil; @@ -87,12 +112,16 @@ - (void)start { } self.canPresent = YES; + + [self sdl_checkLockScreen]; } - (void)stop { // Don't allow the lockscreen to present again until we start self.canPresent = NO; - [self.presenter stop]; + self.lastLockNotification = nil; + self.lastDriverDistractionNotification = nil; + [self.presenter stopWithCompletionHandler:nil]; } - (nullable UIViewController *)lockScreenViewController { @@ -130,14 +159,15 @@ - (void)sdl_lockScreenIconReceived:(NSNotification *)notification { - (void)sdl_appDidBecomeActive:(NSNotification *)notification { __weak typeof(self) weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - // Dismiss the lock screen if the app was disconnected in the background - if (!weakSelf.canPresent) { - [weakSelf.presenter updateLockScreenToShow:NO]; + [self sdl_runOnMainQueue:^{ + __strong typeof(weakSelf) strongSelf = weakSelf; + // Restart, and potentially dismiss the lock screen if the app was disconnected in the background + if (!strongSelf.canPresent) { + [strongSelf start]; } - }); - [self sdl_checkLockScreen]; + [strongSelf sdl_checkLockScreen]; + }]; } - (void)sdl_driverDistractionStateDidChange:(SDLRPCNotificationNotification *)notification { @@ -157,28 +187,37 @@ - (void)sdl_checkLockScreen { } __weak typeof(self) weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ + [self sdl_runOnMainQueue:^{ [weakSelf sdl_updatePresentation]; - }); + }]; } - (void)sdl_updatePresentation { if (self.config.displayMode == SDLLockScreenConfigurationDisplayModeAlways) { if (self.canPresent) { - [self.presenter updateLockScreenToShow:YES]; + [self.presenter updateLockScreenToShow:YES withCompletionHandler:nil]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" } else if ([self.lastLockNotification.lockScreenStatus isEqualToEnum:SDLLockScreenStatusRequired]) { +#pragma clang diagnostic pop if (self.canPresent && !self.lockScreenDismissedByUser) { - [self.presenter updateLockScreenToShow:YES]; + [self.presenter updateLockScreenToShow:YES withCompletionHandler:nil]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" } else if ([self.lastLockNotification.lockScreenStatus isEqualToEnum:SDLLockScreenStatusOptional]) { +#pragma clang diagnostic pop if (self.config.displayMode == SDLLockScreenConfigurationDisplayModeOptionalOrRequired && self.canPresent && !self.lockScreenDismissedByUser) { - [self.presenter updateLockScreenToShow:YES]; + [self.presenter updateLockScreenToShow:YES withCompletionHandler:nil]; } else if (self.config.displayMode != SDLLockScreenConfigurationDisplayModeOptionalOrRequired) { - [self.presenter updateLockScreenToShow:NO]; + [self.presenter updateLockScreenToShow:NO withCompletionHandler:nil]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" } else if ([self.lastLockNotification.lockScreenStatus isEqualToEnum:SDLLockScreenStatusOff]) { - [self.presenter updateLockScreenToShow:NO]; +#pragma clang diagnostic pop + [self.presenter updateLockScreenToShow:NO withCompletionHandler:nil]; } } @@ -208,13 +247,13 @@ - (void)sdl_updateLockscreenViewControllerWithDismissableState:(BOOL)enabled { return; } - __weak typeof(self) weakself = self; - dispatch_async(dispatch_get_main_queue(), ^{ - __strong typeof(self) strongSelf = weakself; + __weak typeof(self) weakSelf = self; + [self sdl_runOnMainQueue:^{ + __strong typeof(self) strongSelf = weakSelf; SDLLockScreenViewController *lockscreenViewController = (SDLLockScreenViewController *)strongSelf.lockScreenViewController; if (enabled) { [lockscreenViewController addDismissGestureWithCallback:^{ - [strongSelf.presenter updateLockScreenToShow:NO]; + [strongSelf.presenter updateLockScreenToShow:NO withCompletionHandler:nil]; strongSelf.lockScreenDismissedByUser = YES; }]; lockscreenViewController.lockedLabelText = strongSelf.lastDriverDistractionNotification.lockScreenDismissalWarning; @@ -222,7 +261,17 @@ - (void)sdl_updateLockscreenViewControllerWithDismissableState:(BOOL)enabled { [lockscreenViewController removeDismissGesture]; lockscreenViewController.lockedLabelText = nil; } - }); + }]; +} + +#pragma mark - Threading Utilities + +- (void)sdl_runOnMainQueue:(void (^)(void))block { + if ([NSThread isMainThread]) { + block(); + } else { + dispatch_sync(dispatch_get_main_queue(), block); + } } @end diff --git a/SmartDeviceLink/SDLLockScreenPresenter.m b/SmartDeviceLink/SDLLockScreenPresenter.m index d84b3bf95..05fae4d6c 100644 --- a/SmartDeviceLink/SDLLockScreenPresenter.m +++ b/SmartDeviceLink/SDLLockScreenPresenter.m @@ -20,11 +20,9 @@ @interface SDLLockScreenPresenter () @property (strong, nonatomic, nullable) UIWindow *lockWindow; @property (assign, nonatomic) BOOL shouldShowLockScreen; @property (assign, nonatomic) BOOL isDismissing; -@property (assign, nonatomic) BOOL isPresentedOrPresenting; @end - @implementation SDLLockScreenPresenter #pragma mark - Lifecycle @@ -39,38 +37,62 @@ - (instancetype)init { } /// Resets the manager by dismissing and destroying the lockscreen. -- (void)stop { +- (void)stopWithCompletionHandler:(nullable SDLLockScreenDidFinishHandler)completionHandler { self.shouldShowLockScreen = NO; if (self.lockWindow == nil) { + if (completionHandler != nil) { + completionHandler(); + } return; } // Dismiss and destroy the lockscreen window - [self sdl_dismissWithCompletionHandler:^{ - self.lockWindow = nil; + __weak typeof(self) weakSelf = self; + [self sdl_dismissWithCompletionHandler:^(BOOL success) { + __strong typeof(weakSelf) strongSelf = weakSelf; + + if (success) { + strongSelf.lockWindow = nil; + strongSelf.lockViewController = nil; + } + + if (completionHandler != nil) { + completionHandler(); + } }]; } /// Shows or hides the lockscreen with an animation. If the lockscreen is shown/dismissed in rapid succession the final state of the lockscreen may not match the expected state as the order in which the animations finish can be random. To guard against this scenario, store the expected state of the lockscreen. When the animation finishes, check the expected state to make sure that the final state of the lockscreen matches the expected state. If not, perform a final animation to the expected state. /// @param show True if the lockscreen should be shown; false if it should be dismissed -- (void)updateLockScreenToShow:(BOOL)show { +- (void)updateLockScreenToShow:(BOOL)show withCompletionHandler:(nullable SDLLockScreenDidFinishHandler)completionHandler { // Store the expected state of the lockscreen self.shouldShowLockScreen = show; + __weak typeof(self) weakSelf = self; if (show) { [self sdl_presentWithCompletionHandler:^{ - if (self.shouldShowLockScreen) { return; } + __strong typeof(weakSelf) strongSelf = weakSelf; + if (strongSelf.shouldShowLockScreen) { + if (completionHandler != nil) { completionHandler(); } + return; + } SDLLogV(@"The lockscreen has been presented but needs to be dismissed"); - [self sdl_dismissWithCompletionHandler:nil]; + [strongSelf sdl_dismissWithCompletionHandler:^(BOOL success) { + if (completionHandler != nil) { completionHandler(); } + }]; }]; } else { - [self sdl_dismissWithCompletionHandler:^{ - if (!self.shouldShowLockScreen) { return; } + [self sdl_dismissWithCompletionHandler:^(BOOL success) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf.shouldShowLockScreen) { + if (completionHandler != nil) { completionHandler(); } + return; + } SDLLogV(@"The lockscreen has been dismissed but needs to be presented"); - [self sdl_presentLockscreenWithCompletionHandler:nil]; + [strongSelf sdl_presentWithCompletionHandler:completionHandler]; }]; } } @@ -80,54 +102,50 @@ - (void)updateLockScreenToShow:(BOOL)show { /// Checks if the lockscreen can be presented and if so presents the lockscreen on the main thread /// @param completionHandler Called when the lockscreen has finished its animation or if the lockscreen can not be presented -- (void)sdl_presentWithCompletionHandler:(void (^ _Nullable)(void))completionHandler { +- (void)sdl_presentWithCompletionHandler:(nullable SDLLockScreenDidFinishHandler)completionHandler { if (self.lockViewController == nil) { SDLLogW(@"Attempted to present a lockscreen, but lockViewController is not set"); if (completionHandler == nil) { return; } return completionHandler(); } - __weak typeof(self) weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ + __weak typeof(self) weakself = self; + [self sdl_runOnMainQueue:^{ + __typeof(weakself) strongself = weakself; if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive) { // If the the `UIWindow` is created while the app is backgrounded and the app is using `SceneDelegate` class (iOS 13+), then the window will not be created correctly. Wait until the app is foregrounded before creating the window. SDLLogV(@"Application is backgrounded. The lockscreen will not be shown until the application is brought to the foreground."); if (completionHandler == nil) { return; } return completionHandler(); } - [weakSelf sdl_presentLockscreenWithCompletionHandler:completionHandler]; - }); -} -/// Handles the presentation of the lockscreen with animation. -/// @param completionHandler Called when the lockscreen is presented successfully or if it is already in the process of being presented -- (void)sdl_presentLockscreenWithCompletionHandler:(void (^ _Nullable)(void))completionHandler { - if (self.lockWindow == nil) { - self.lockWindow = [self.class sdl_createUIWindow]; - self.lockWindow.backgroundColor = [UIColor clearColor]; - self.lockWindow.windowLevel = UIWindowLevelAlert + 1; - self.lockWindow.rootViewController = [[SDLLockScreenRootViewController alloc] init]; - } + if (strongself.lockWindow == nil) { + strongself.lockWindow = [self.class sdl_createUIWindow]; + strongself.lockWindow.backgroundColor = [UIColor clearColor]; + strongself.lockWindow.windowLevel = UIWindowLevelAlert + 1; + strongself.lockWindow.rootViewController = [[SDLLockScreenRootViewController alloc] init]; + } - SDLLogD(@"Presenting the lockscreen window"); - [self.lockWindow makeKeyAndVisible]; + SDLLogD(@"Presenting the lockscreen window"); + [strongself.lockWindow makeKeyAndVisible]; - if (self.isPresentedOrPresenting) { - // Call this right before attempting to present the view controller to make sure we are not already animating, otherwise the app may crash. - SDLLogV(@"The lockscreen is already being presented"); - if (completionHandler == nil) { return; } - return completionHandler(); - } + if (strongself.isPresentedOrPresenting) { + // Call this right before attempting to present the view controller to make sure we are not already animating, otherwise the app may crash. + SDLLogV(@"The lockscreen is already being presented"); + if (completionHandler == nil) { return; } + return completionHandler(); + } - // Let ourselves know that the lockscreen will present so we can pause video streaming for a few milliseconds - otherwise the animation to show the lockscreen will be very janky. - [[NSNotificationCenter defaultCenter] postNotificationName:SDLLockScreenManagerWillPresentLockScreenViewController object:nil]; + // Let ourselves know that the lockscreen will present so we can pause video streaming for a few milliseconds - otherwise the animation to show the lockscreen will be very janky. + [[NSNotificationCenter defaultCenter] postNotificationName:SDLLockScreenManagerWillPresentLockScreenViewController object:nil]; - [self.lockWindow.rootViewController presentViewController:self.lockViewController animated:YES completion:^{ - // Tell everyone we are done so video streaming can resume - [[NSNotificationCenter defaultCenter] postNotificationName:SDLLockScreenManagerDidPresentLockScreenViewController object:nil]; + [strongself.lockWindow.rootViewController presentViewController:strongself.lockViewController animated:YES completion:^{ + // Tell everyone we are done so video streaming can resume + [[NSNotificationCenter defaultCenter] postNotificationName:SDLLockScreenManagerDidPresentLockScreenViewController object:nil]; - if (completionHandler == nil) { return; } - return completionHandler(); + if (completionHandler == nil) { return; } + return completionHandler(); + }]; }]; } @@ -136,50 +154,69 @@ - (void)sdl_presentLockscreenWithCompletionHandler:(void (^ _Nullable)(void))com /// Checks if the lockscreen can be dismissed and if so dismisses the lockscreen on the main thread. /// @param completionHandler Called when the lockscreen has finished its animation or if the lockscreen can not be dismissed -- (void)sdl_dismissWithCompletionHandler:(void (^ _Nullable)(void))completionHandler { +- (void)sdl_dismissWithCompletionHandler:(void (^ _Nullable)(BOOL success))completionHandler { if (self.lockViewController == nil) { SDLLogW(@"Attempted to dismiss lockscreen, but lockViewController is not set"); if (completionHandler == nil) { return; } - return completionHandler(); + return completionHandler(NO); } __weak typeof(self) weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ + [self sdl_runOnMainQueue:^{ if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive) { SDLLogV(@"Application is backgrounded. The lockscreen will not be dismissed until the app is brought to the foreground."); if (completionHandler == nil) { return; } - return completionHandler(); + return completionHandler(NO); } [weakSelf sdl_dismissLockscreenWithCompletionHandler:completionHandler]; - }); + }]; } /// Handles the dismissal of the lockscreen with animation. /// @param completionHandler Called when the lockscreen is dismissed successfully or if it is already in the process of being dismissed -- (void)sdl_dismissLockscreenWithCompletionHandler:(void (^ _Nullable)(void))completionHandler { - if (self.isDismissing) { +- (void)sdl_dismissLockscreenWithCompletionHandler:(void (^ _Nullable)(BOOL success))completionHandler { + if (self.isDismissing || !self.isPresentedOrPresenting) { // Make sure we are not already animating, otherwise the app may crash SDLLogV(@"The lockscreen is already being dismissed"); if (completionHandler == nil) { return; } - return completionHandler(); + return completionHandler(NO); + } + + if (self.lockViewController.presentingViewController == nil) { + SDLLogW(@"Attempted to dismiss lockscreen, but lockViewController is not presented"); + if (completionHandler == nil) { return; } + return completionHandler(NO); } // Let ourselves know that the lockscreen will dismiss so we can pause video streaming for a few milliseconds - otherwise the animation to dismiss the lockscreen will be very janky. [[NSNotificationCenter defaultCenter] postNotificationName:SDLLockScreenManagerWillDismissLockScreenViewController object:nil]; SDLLogD(@"Dismissing the lockscreen window"); + _isDismissing = YES; __weak typeof(self) weakSelf = self; [self.lockViewController dismissViewControllerAnimated:YES completion:^{ - [weakSelf.lockWindow setHidden:YES]; + SDLLogD(@"Lockscreen window dismissed"); + __strong typeof(self) strongSelf = weakSelf; + strongSelf->_isDismissing = NO; + [strongSelf.lockWindow setHidden:YES]; // Tell everyone we are done so video streaming can resume [[NSNotificationCenter defaultCenter] postNotificationName:SDLLockScreenManagerDidDismissLockScreenViewController object:nil]; if (completionHandler == nil) { return; } - return completionHandler(); + return completionHandler(YES); }]; } +#pragma mark - Threading Utilities + +- (void)sdl_runOnMainQueue:(void (^)(void))block { + if ([NSThread isMainThread]) { + block(); + } else { + dispatch_sync(dispatch_get_main_queue(), block); + } +} #pragma mark - Custom Presented / Dismissed Getters @@ -190,7 +227,7 @@ - (BOOL)isPresentedOrPresenting { /// Returns whether or not the lockViewController is currently animating the dismissal of the lockscreen - (BOOL)isDismissing { - return (self.lockViewController.isBeingDismissed || self.lockViewController.isMovingFromParentViewController); + return (_isDismissing || self.lockViewController.isBeingDismissed || self.lockViewController.isMovingFromParentViewController); } #pragma mark - Window Helpers diff --git a/SmartDeviceLink/SDLLockScreenStatus.h b/SmartDeviceLink/SDLLockScreenStatus.h index 62f48ba05..d5d4846b9 100644 --- a/SmartDeviceLink/SDLLockScreenStatus.h +++ b/SmartDeviceLink/SDLLockScreenStatus.h @@ -11,19 +11,19 @@ Used in OnLockScreenStatus */ -typedef SDLEnum SDLLockScreenStatus SDL_SWIFT_ENUM; +typedef SDLEnum SDLLockScreenStatus SDL_SWIFT_ENUM __deprecated; /** * LockScreen is Not Required */ -extern SDLLockScreenStatus const SDLLockScreenStatusOff; +extern SDLLockScreenStatus const SDLLockScreenStatusOff __deprecated; /** * LockScreen is Optional */ -extern SDLLockScreenStatus const SDLLockScreenStatusOptional; +extern SDLLockScreenStatus const SDLLockScreenStatusOptional __deprecated; /** * LockScreen is Required */ -extern SDLLockScreenStatus const SDLLockScreenStatusRequired; +extern SDLLockScreenStatus const SDLLockScreenStatusRequired __deprecated; diff --git a/SmartDeviceLink/SDLLockScreenStatusManager.h b/SmartDeviceLink/SDLLockScreenStatusManager.h index 90b3d85a3..a6ac19b01 100644 --- a/SmartDeviceLink/SDLLockScreenStatusManager.h +++ b/SmartDeviceLink/SDLLockScreenStatusManager.h @@ -17,9 +17,9 @@ NS_ASSUME_NONNULL_BEGIN @property (assign, nonatomic) BOOL userSelected; @property (assign, nonatomic) BOOL driverDistracted; @property (nullable, strong, nonatomic) SDLHMILevel hmiLevel; -@property (strong, nonatomic, readonly) SDLLockScreenStatus lockScreenStatus; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" +@property (strong, nonatomic, readonly) SDLLockScreenStatus lockScreenStatus; @property (strong, nonatomic, readonly) SDLOnLockScreenStatus *lockScreenStatusNotification; #pragma clang diagnostic pop diff --git a/SmartDeviceLink/SDLLockScreenStatusManager.m b/SmartDeviceLink/SDLLockScreenStatusManager.m index 4ab22faa4..3c240edf9 100644 --- a/SmartDeviceLink/SDLLockScreenStatusManager.m +++ b/SmartDeviceLink/SDLLockScreenStatusManager.m @@ -68,36 +68,60 @@ - (SDLOnLockScreenStatus *)lockScreenStatusNotification { return notification; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" - (SDLLockScreenStatus)lockScreenStatus { +#pragma clang diagnostic pop if (self.hmiLevel == nil || [self.hmiLevel isEqualToEnum:SDLHMILevelNone]) { // App is not active on the car +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return SDLLockScreenStatusOff; +#pragma clang diagnostic pop } else if ([self.hmiLevel isEqualToEnum:SDLHMILevelBackground]) { // App is in the background on the car if (self.userSelected) { // It was user selected if (self.haveDriverDistractionStatus && !self.driverDistracted) { // We have the distraction status, and the driver is not distracted +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return SDLLockScreenStatusOptional; +#pragma clang diagnostic pop } else { // We don't have the distraction status, and/or the driver is distracted +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return SDLLockScreenStatusRequired; +#pragma clang diagnostic pop } } else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return SDLLockScreenStatusOff; +#pragma clang diagnostic pop } } else if ([self.hmiLevel isEqualToEnum:SDLHMILevelFull] || [self.hmiLevel isEqualToEnum:SDLHMILevelLimited]) { // App is in the foreground on the car in some manner if (self.haveDriverDistractionStatus && !self.driverDistracted) { // We have the distraction status, and the driver is not distracted +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return SDLLockScreenStatusOptional; +#pragma clang diagnostic pop } else { // We don't have the distraction status, and/or the driver is distracted +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return SDLLockScreenStatusRequired; +#pragma clang diagnostic pop } } else { // This shouldn't be possible. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return SDLLockScreenStatusOff; +#pragma clang diagnostic pop } } diff --git a/SmartDeviceLink/SDLLogFileModuleMap.m b/SmartDeviceLink/SDLLogFileModuleMap.m index 4e8ed5808..a706cf152 100644 --- a/SmartDeviceLink/SDLLogFileModuleMap.m +++ b/SmartDeviceLink/SDLLogFileModuleMap.m @@ -14,6 +14,9 @@ @implementation SDLLogFileModuleMap + (NSSet *)sdlModuleMap { return [NSSet setWithArray:@[[self sdl_transportModule], + [self sdl_tcpTransportModule], + [self sdl_iapTransportModule], + [self sdl_secondaryTransportModule], [self sdl_proxyModule], [self sdl_protocolModule], [self sdl_rpcModule], @@ -24,7 +27,10 @@ @implementation SDLLogFileModuleMap [self sdl_systemCapabilityModule], [self sdl_lockscreenManagerModule], [self sdl_streamingMediaManagerModule], - [self sdl_streamingMediaAudioTranscoderModule], + [self sdl_videoStreamingMediaManagerModule], + [self sdl_videoStreamingMediaTranscoderModule], + [self sdl_audioStreamingMediaManagerModule], + [self sdl_audioStreamingMediaTranscoderModule], [self sdl_screenManagerModule], [self sdl_screenManagerTextAndGraphicModule], [self sdl_screenManagerSoftButtonModule], @@ -33,29 +39,44 @@ @implementation SDLLogFileModuleMap [self sdl_utilitiesModule]]]; } +#pragma mark Transport + + (SDLLogFileModule *)sdl_transportModule { - return [SDLLogFileModule moduleWithName:@"Transport" files:[NSSet setWithArray:@[@"SDLIAPSession", @"SDLIAPTransport", @"SDLIAPDataSession", @"SDLIAPControlSession", @"SDLSecondaryTransportManager", @"SDLSecondaryTransportPrimaryProtocolHandler", @"SDLStreamDelegate", @"SDLTCPTransport"]]]; + return [SDLLogFileModule moduleWithName:@"Transport" files:[NSSet setWithArray:@[@"SDLStreamDelegate"]]]; +} + ++ (SDLLogFileModule *)sdl_tcpTransportModule { + return [SDLLogFileModule moduleWithName:@"Transport/TCP" files:[NSSet setWithArray:@[@"SDLTCPTransport"]]]; +} + ++ (SDLLogFileModule *)sdl_iapTransportModule { + return [SDLLogFileModule moduleWithName:@"Transport/IAP" files:[NSSet setWithArray:@[@"SDLIAPSession", @"SDLIAPTransport", @"SDLIAPDataSession", @"SDLIAPControlSession"]]]; } ++ (SDLLogFileModule *)sdl_secondaryTransportModule { + return [SDLLogFileModule moduleWithName:@"Transport/Secondary" files:[NSSet setWithArray:@[@"SDLSecondaryTransportManager"]]]; +} + +#pragma mark Low-Level + + (SDLLogFileModule *)sdl_proxyModule { - return [SDLLogFileModule moduleWithName:@"Proxy" files:[NSSet setWithArray:@[@"SDLProxy", @"SDLPolicyDataParser"]]]; + return [SDLLogFileModule moduleWithName:@"Proxy" files:[NSSet setWithArray:@[@"SDLProxy", @"SDLPolicyDataParser", @"SDLCacheFileManager"]]]; } + (SDLLogFileModule *)sdl_protocolModule { - return [SDLLogFileModule moduleWithName:@"Protocol" files:[NSSet setWithArray:@[@"SDLProtocol", @"SDLProtocolMessageAssembler", @"SDLProtocolMessageDisassembler", @"SDLProtocolReceivedMessageRouter", @"SDLV1ProtocolMessage", @"SDLV2ProtocolMessage", @"SDLV1ProtocolHeader", @"SDLV2ProtocolHeader"]]]; + return [SDLLogFileModule moduleWithName:@"Protocol" files:[NSSet setWithArray:@[@"SDLProtocol", @"SDLProtocolMessageAssembler", @"SDLProtocolMessageDisassembler", @"SDLProtocolReceivedMessageRouter", @"SDLV1ProtocolMessage", @"SDLV2ProtocolMessage", @"SDLV1ProtocolHeader", @"SDLV2ProtocolHeader", @"SDLGlobals"]]]; } + (SDLLogFileModule *)sdl_rpcModule { return [SDLLogFileModule moduleWithName:@"RPC" files:[NSSet setWithArray:@[@"SDLRPCPayload", @"NSMutableDictionary+Store"]]]; } +#pragma mark Managers + + (SDLLogFileModule *)sdl_dispatcherModule { return [SDLLogFileModule moduleWithName:@"Dispatcher" files:[NSSet setWithArray:@[@"SDLNotificationDispatcher", @"SDLResponseDispatcher"]]]; } - -#pragma mark Managers - + (SDLLogFileModule *)sdl_fileManagerModule { return [SDLLogFileModule moduleWithName:@"File" files:[NSSet setWithArray:@[@"SDLFileManager", @"SDLFile", @"SDLArtwork", @"SDLListFilesOperation", @"SDLUploadFileOperation", @"SDLDeleteFileOperation"]]]; } @@ -77,11 +98,23 @@ + (SDLLogFileModule *)sdl_lockscreenManagerModule { } + (SDLLogFileModule *)sdl_streamingMediaManagerModule { - return [SDLLogFileModule moduleWithName:@"Streaming" files:[NSSet setWithArray:@[@"SDLH264VideoEncoder", @"SDLRAWH264Packetizer", @"SDLRTPH264Packetizer", @"SDLStreamingMediaManager", @"SDLStreamingAudioLifecycleManager", @"SDLStreamingVideoLifecycleManager", @"SDLTouchManager", @"SDLCarWindow"]]]; + return [SDLLogFileModule moduleWithName:@"Audio and Video Streaming" files:[NSSet setWithArray:@[@"SDLStreamingMediaManager"]]]; +} + ++ (SDLLogFileModule *)sdl_videoStreamingMediaManagerModule { + return [SDLLogFileModule moduleWithName:@"Video Streaming" files:[NSSet setWithArray:@[@"SDLStreamingVideoLifecycleManager", @"SDLTouchManager", @"SDLCarWindow", @"SDLFocusableItemLocator"]]]; +} + ++ (SDLLogFileModule *)sdl_videoStreamingMediaTranscoderModule { + return [SDLLogFileModule moduleWithName:@"Video Streaming/Transcoding" files:[NSSet setWithArray:@[@"SDLH264VideoEncoder", @"SDLRAWH264Packetizer", @"SDLRTPH264Packetizer"]]]; +} + ++ (SDLLogFileModule *)sdl_audioStreamingMediaManagerModule { + return [SDLLogFileModule moduleWithName:@"Audio Streaming" files:[NSSet setWithArray:@[@"SDLStreamingAudioLifecycleManager"]]]; } -+ (SDLLogFileModule *)sdl_streamingMediaAudioTranscoderModule { - return [SDLLogFileModule moduleWithName:@"Streaming/Audio Transcode" files:[NSSet setWithArray:@[@"SDLAudioStreamManager", @"SDLPCMAudioConverter"]]]; ++ (SDLLogFileModule *)sdl_audioStreamingMediaTranscoderModule { + return [SDLLogFileModule moduleWithName:@"Audio Streaming/Transcoding" files:[NSSet setWithArray:@[@"SDLAudioStreamManager", @"SDLPCMAudioConverter"]]]; } + (SDLLogFileModule *)sdl_screenManagerModule { diff --git a/SmartDeviceLink/SDLManagerDelegate.h b/SmartDeviceLink/SDLManagerDelegate.h index 538b11023..9cf795e37 100644 --- a/SmartDeviceLink/SDLManagerDelegate.h +++ b/SmartDeviceLink/SDLManagerDelegate.h @@ -13,6 +13,7 @@ #import "SDLSystemContext.h" #import "SDLLifecycleConfigurationUpdate.h" #import "SDLLanguage.h" +#import "SDLVideoStreamingState.h" NS_ASSUME_NONNULL_BEGIN @@ -41,6 +42,14 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)audioStreamingState:(nullable SDLAudioStreamingState)oldState didChangeToState:(SDLAudioStreamingState)newState; +/// Called when the video streaming state of this application changes. This refers to streaming video for navigation purposes. If you are "autostreaming" via CarWindow, you should not do anything with this method. Everything should be handled for you automatically. +/// +/// Only supported on RPC v5.0+ connections. +/// +/// @param oldState The previous state +/// @param newState The current state +- (void)videoStreamingState:(nullable SDLVideoStreamingState)oldState didChangetoState:(SDLVideoStreamingState)newState; + /** * Called when the system context of this application changes on the remote system. This refers to whether or not a user-initiated interaction is in progress, and if so, what it is. * @@ -57,7 +66,6 @@ NS_ASSUME_NONNULL_BEGIN */ - (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language; - @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLMenuManager.m b/SmartDeviceLink/SDLMenuManager.m index aa3a1e22f..28a70f754 100644 --- a/SmartDeviceLink/SDLMenuManager.m +++ b/SmartDeviceLink/SDLMenuManager.m @@ -197,6 +197,56 @@ - (void)setMenuCells:(NSArray *)menuCells { } } +#pragma mark - Open Menu + +- (BOOL)openMenu { + if ([SDLGlobals.sharedGlobals.rpcVersion isLessThanVersion:[[SDLVersion alloc] initWithMajor:6 minor:0 patch:0]]) { + SDLLogE(@"The openMenu method is not supported on this head unit."); + return NO; + } + + SDLShowAppMenu *openMenu = [[SDLShowAppMenu alloc] init]; + + [self.connectionManager sendConnectionRequest:openMenu withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { + if ([response.resultCode isEqualToEnum:SDLResultWarnings]) { + SDLLogW(@"Warning opening application menu: %@", error); + } else if (![response.resultCode isEqualToEnum:SDLResultSuccess]) { + SDLLogE(@"Error opening application menu: %@", error); + } else { + SDLLogD(@"Successfully opened application main menu"); + } + }]; + + return YES; +} + +- (BOOL)openSubmenu:(SDLMenuCell *)cell { + if (cell.subCells.count == 0) { + SDLLogE(@"The cell %@ does not contain any sub cells, so no submenu can be opened", cell); + return NO; + } else if ([SDLGlobals.sharedGlobals.rpcVersion isLessThanVersion:[[SDLVersion alloc] initWithMajor:6 minor:0 patch:0]]) { + SDLLogE(@"The openSubmenu method is not supported on this head unit."); + return NO; + } else if (![self.menuCells containsObject:cell]) { + SDLLogE(@"This cell has not been sent to the head unit, so no submenu can be opened. Make sure that the cell exists in the SDLManager.menu array"); + return NO; + } + + SDLShowAppMenu *subMenu = [[SDLShowAppMenu alloc] initWithMenuID:cell.cellId]; + + [self.connectionManager sendConnectionRequest:subMenu withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { + if ([response.resultCode isEqualToEnum:SDLResultWarnings]) { + SDLLogW(@"Warning opening application menu to submenu cell %@, with error: %@", cell, error); + } else if (![response.resultCode isEqualToEnum:SDLResultSuccess]) { + SDLLogE(@"Error opening application menu to submenu cell %@, with error: %@", cell, error); + } else { + SDLLogD(@"Successfully opened application menu to submenu cell: %@", cell); + } + }]; + + return YES; +} + #pragma mark - Build Deletes, Keeps, Adds - (void)sdl_startSubMenuUpdatesWithOldKeptCells:(NSArray *)oldKeptCells newKeptCells:(NSArray *)newKeptCells atIndex:(NSUInteger)startIndex { @@ -672,46 +722,6 @@ - (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification } } -- (BOOL)openMenu { - if ([SDLGlobals.sharedGlobals.rpcVersion isLessThanVersion:[[SDLVersion alloc] initWithMajor:6 minor:0 patch:0]]) { - SDLLogE(@"The openMenu method is not supported on this head unit."); - return NO; - } - - SDLShowAppMenu *openMenu = [[SDLShowAppMenu alloc] init]; - - [self.connectionManager sendConnectionRequest:openMenu withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { - if (error != nil) { - SDLLogE(@"Error opening application menu: %@", error); - } - }]; - - return YES; -} - -- (BOOL)openSubmenu:(SDLMenuCell *)cell { - if (cell.subCells.count == 0) { - SDLLogE(@"The cell %@ does not contain any sub cells, so no submenu can be opened", cell); - return NO; - } else if ([SDLGlobals.sharedGlobals.rpcVersion isLessThanVersion:[[SDLVersion alloc] initWithMajor:6 minor:0 patch:0]]) { - SDLLogE(@"The openSubmenu method is not supported on this head unit."); - return NO; - } else if (![self.menuCells containsObject:cell]) { - SDLLogE(@"This cell has not been sent to the head unit, so no submenu can be opened. Make sure that the cell exists in the SDLManager.menu array"); - return NO; - } - - SDLShowAppMenu *subMenu = [[SDLShowAppMenu alloc] initWithMenuID:cell.cellId]; - - [self.connectionManager sendConnectionRequest:subMenu withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { - if (error != nil) { - SDLLogE(@"Error opening application to submenu cell: %@, with error: %@", cell, error); - } - }]; - - return YES; -} - @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLNotificationConstants.h b/SmartDeviceLink/SDLNotificationConstants.h index 2c3adf827..06be369af 100644 --- a/SmartDeviceLink/SDLNotificationConstants.h +++ b/SmartDeviceLink/SDLNotificationConstants.h @@ -187,7 +187,7 @@ extern SDLNotificationName const SDLDidReceiveDiagnosticMessageResponse; extern SDLNotificationName const SDLDidReceiveDialNumberResponse; /// Name for an EncodedSyncPData response RPC -extern SDLNotificationName const SDLDidReceiveEncodedSyncPDataResponse; +extern SDLNotificationName const SDLDidReceiveEncodedSyncPDataResponse __deprecated; /// Name for an EndAudioPassThru response RPC extern SDLNotificationName const SDLDidReceiveEndAudioPassThruResponse; @@ -304,7 +304,7 @@ extern SDLNotificationName const SDLDidReceiveSubscribeVehicleDataResponse; extern SDLNotificationName const SDLDidReceiveSubscribeWaypointsResponse; /// Name for a SyncPData response RPC -extern SDLNotificationName const SDLDidReceiveSyncPDataResponse; +extern SDLNotificationName const SDLDidReceiveSyncPDataResponse __deprecated; /// Name for an UpdateTurnList response RPC extern SDLNotificationName const SDLDidReceiveUpdateTurnListResponse; @@ -381,7 +381,7 @@ extern SDLNotificationName const SDLDidReceiveDiagnosticMessageRequest; extern SDLNotificationName const SDLDidReceiveDialNumberRequest; /// Name for an EncodedSyncPData request RPC -extern SDLNotificationName const SDLDidReceiveEncodedSyncPDataRequest; +extern SDLNotificationName const SDLDidReceiveEncodedSyncPDataRequest __deprecated; /// Name for a EndAudioPass request RPC extern SDLNotificationName const SDLDidReceiveEndAudioPassThruRequest; @@ -495,7 +495,7 @@ extern SDLNotificationName const SDLDidReceiveSubscribeVehicleDataRequest; extern SDLNotificationName const SDLDidReceiveSubscribeWayPointsRequest; /// Name for a SyncPData request RPC -extern SDLNotificationName const SDLDidReceiveSyncPDataRequest; +extern SDLNotificationName const SDLDidReceiveSyncPDataRequest __deprecated; /// Name for a SystemRequest request RPC extern SDLNotificationName const SDLDidReceiveSystemRequestRequest; @@ -548,7 +548,7 @@ extern SDLNotificationName const SDLDidReceiveButtonPressNotification; extern SDLNotificationName const SDLDidReceiveCommandNotification; /// Name for a EncodedData notification RPC -extern SDLNotificationName const SDLDidReceiveEncodedDataNotification; +extern SDLNotificationName const SDLDidReceiveEncodedDataNotification __deprecated; /// Name for a InteriorVehicleData notification RPC extern SDLNotificationName const SDLDidReceiveInteriorVehicleDataNotification; @@ -560,7 +560,7 @@ extern SDLNotificationName const SDLDidReceiveKeyboardInputNotification; extern SDLNotificationName const SDLDidChangeLanguageNotification; /// Name for a LockScreenStatus notification RPC -extern SDLNotificationName const SDLDidChangeLockScreenStatusNotification; +extern SDLNotificationName const SDLDidChangeLockScreenStatusNotification __deprecated; /// Name for a NewHash notification RPC extern SDLNotificationName const SDLDidReceiveNewHashNotification; @@ -574,6 +574,9 @@ extern SDLNotificationName const SDLDidChangePermissionsNotification; /// Name for a RemoteControlStatus notification RPC extern SDLNotificationName const SDLDidReceiveRemoteControlStatusNotification; +/// Name for an OnSyncPData notification RPC +extern SDLNotificationName const SDLDidReceiveSyncPDataNotification __deprecated; + /// Name for a SystemCapability notification RPC extern SDLNotificationName const SDLDidReceiveSystemCapabilityUpdatedNotification; diff --git a/SmartDeviceLink/SDLNotificationConstants.m b/SmartDeviceLink/SDLNotificationConstants.m index 73d935c57..3f9fe3f1a 100644 --- a/SmartDeviceLink/SDLNotificationConstants.m +++ b/SmartDeviceLink/SDLNotificationConstants.m @@ -170,6 +170,7 @@ SDLNotificationName const SDLDidReceiveNewHashNotification = @"com.sdl.notification.newHash"; SDLNotificationName const SDLDidChangePermissionsNotification = @"com.sdl.notification.changePermission"; SDLNotificationName const SDLDidReceiveRemoteControlStatusNotification = @"com.sdl.notification.rcStatus"; +SDLNotificationName const SDLDidReceiveSyncPDataNotification = @"com.sdl.notification.syncpdata"; SDLNotificationName const SDLDidReceiveSystemCapabilityUpdatedNotification = @"com.sdl.notification.systemCapabilityUpdated"; SDLNotificationName const SDLDidReceiveSystemRequestNotification = @"com.sdl.notification.receiveSystemRequest"; SDLNotificationName const SDLDidChangeTurnByTurnStateNotification = @"com.sdl.notification.changeTurnByTurnState"; @@ -198,7 +199,10 @@ @implementation SDLNotificationConstants SDLDidReceiveDeleteWindowResponse, SDLDidReceiveDiagnosticMessageResponse, SDLDidReceiveDialNumberResponse, +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLDidReceiveEncodedSyncPDataResponse, +#pragma clang diagnostic pop SDLDidReceiveEndAudioPassThruResponse, SDLDidReceiveGenericResponse, SDLDidReceiveGetCloudAppPropertiesResponse, @@ -237,7 +241,10 @@ @implementation SDLNotificationConstants SDLDidReceiveSubscribeButtonResponse, SDLDidReceiveSubscribeVehicleDataResponse, SDLDidReceiveSubscribeWaypointsResponse, +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLDidReceiveSyncPDataResponse, +#pragma clang diagnostic pop SDLDidReceiveUpdateTurnListResponse, SDLDidReceiveUnpublishAppServiceResponse, SDLDidReceiveUnregisterAppInterfaceResponse, diff --git a/SmartDeviceLink/SDLNotificationDispatcher.m b/SmartDeviceLink/SDLNotificationDispatcher.m index d1fb0e63d..b1997c8a8 100644 --- a/SmartDeviceLink/SDLNotificationDispatcher.m +++ b/SmartDeviceLink/SDLNotificationDispatcher.m @@ -32,28 +32,24 @@ - (void)postNotificationName:(NSString *)name infoObject:(nullable id)infoObject userInfo = @{SDLNotificationUserInfoObject: infoObject}; } - // Runs on `com.sdl.rpcProcessingQueue` [[NSNotificationCenter defaultCenter] postNotificationName:name object:self userInfo:userInfo]; } - (void)postRPCRequestNotification:(NSString *)name request:(__kindof SDLRPCRequest *)request { SDLRPCRequestNotification *notification = [[SDLRPCRequestNotification alloc] initWithName:name object:self rpcRequest:request]; - // Runs on `com.sdl.rpcProcessingQueue` [[NSNotificationCenter defaultCenter] postNotification:notification]; } - (void)postRPCResponseNotification:(NSString *)name response:(__kindof SDLRPCResponse *)response { SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:name object:self rpcResponse:response]; - // Runs on `com.sdl.rpcProcessingQueue` [[NSNotificationCenter defaultCenter] postNotification:notification]; } - (void)postRPCNotificationNotification:(NSString *)name notification:(__kindof SDLRPCNotification *)rpcNotification { SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:name object:self rpcNotification:rpcNotification]; - // Runs on `com.sdl.rpcProcessingQueue` [[NSNotificationCenter defaultCenter] postNotification:notification]; } @@ -163,9 +159,15 @@ - (void)onDialNumberResponse:(SDLDialNumberResponse *)response { [self postRPCResponseNotification:SDLDidReceiveDialNumberResponse response:response]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" - (void)onEncodedSyncPDataResponse:(SDLEncodedSyncPDataResponse *)response { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [self postRPCResponseNotification:SDLDidReceiveEncodedSyncPDataResponse response:response]; +#pragma clang diagnostic pop } +#pragma clang diagnostic pop - (void)onEndAudioPassThruResponse:(SDLEndAudioPassThruResponse *)response { [self postRPCResponseNotification:SDLDidReceiveEndAudioPassThruResponse response:response]; @@ -319,9 +321,15 @@ - (void)onSubscribeWayPointsResponse:(SDLSubscribeWayPointsResponse *)response { [self postRPCResponseNotification:SDLDidReceiveSubscribeWaypointsResponse response:response]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" - (void)onSyncPDataResponse:(SDLSyncPDataResponse *)response { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [self postRPCResponseNotification:SDLDidReceiveSyncPDataResponse response:response]; +#pragma clang diagnostic pop } +#pragma clang diagnostic pop - (void)onUpdateTurnListResponse:(SDLUpdateTurnListResponse *)response { [self postRPCResponseNotification:SDLDidReceiveUpdateTurnListResponse response:response]; @@ -417,9 +425,15 @@ - (void)onDialNumber:(SDLDialNumber *)request { [self postRPCRequestNotification:SDLDidReceiveDialNumberRequest request:request]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" - (void)onEncodedSyncPData:(SDLEncodedSyncPData *)request { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [self postRPCRequestNotification:SDLDidReceiveEncodedSyncPDataRequest request:request]; +#pragma clang diagnostic pop } +#pragma clang diagnostic pop - (void)onEndAudioPassThru:(SDLEndAudioPassThru *)request { [self postRPCRequestNotification:SDLDidReceiveEndAudioPassThruRequest request:request]; @@ -569,9 +583,15 @@ - (void)onSubscribeWayPoints:(SDLSubscribeWayPoints *)request { [self postRPCRequestNotification:SDLDidReceiveSubscribeWayPointsRequest request:request]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" - (void)onSyncPData:(SDLSyncPData *)request { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [self postRPCRequestNotification:SDLDidReceiveSyncPDataRequest request:request]; +#pragma clang diagnostic pop } +#pragma clang diagnostic pop -(void)onSystemRequest:(SDLSystemRequest *)request { [self postRPCRequestNotification:SDLDidReceiveSystemRequestRequest request:request]; @@ -627,9 +647,15 @@ - (void)onOnCommand:(SDLOnCommand *)notification { [self postRPCNotificationNotification:SDLDidReceiveCommandNotification notification:notification]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" - (void)onOnEncodedSyncPData:(SDLOnEncodedSyncPData *)notification { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [self postRPCNotificationNotification:SDLDidReceiveEncodedDataNotification notification:notification]; +#pragma clang diagnostic pop } +#pragma clang diagnostic pop - (void)onOnHashChange:(SDLOnHashChange *)notification { [self postRPCNotificationNotification:SDLDidReceiveNewHashNotification notification:notification]; @@ -647,9 +673,15 @@ - (void)onOnLanguageChange:(SDLOnLanguageChange *)notification { [self postRPCNotificationNotification:SDLDidChangeLanguageNotification notification:notification]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" - (void)onOnLockScreenNotification:(SDLOnLockScreenStatus *)notification { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [self postRPCNotificationNotification:SDLDidChangeLockScreenStatusNotification notification:notification]; +#pragma clang diagnostic pop } +#pragma clang diagnostic pop - (void)onOnPermissionsChange:(SDLOnPermissionsChange *)notification { [self postRPCNotificationNotification:SDLDidChangePermissionsNotification notification:notification]; @@ -659,9 +691,15 @@ - (void)onOnRCStatus:(SDLOnRCStatus *)notification { [self postRPCNotificationNotification:SDLDidReceiveRemoteControlStatusNotification notification:notification]; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" - (void)onOnSyncPData:(SDLOnSyncPData *)notification { - [self postRPCNotificationNotification:SDLDidReceiveSystemRequestNotification notification:notification]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self postRPCNotificationNotification:SDLDidReceiveSyncPDataNotification notification:notification]; +#pragma clang diagnostic pop } +#pragma clang diagnostic pop - (void)onOnSystemCapabilityUpdated:(SDLOnSystemCapabilityUpdated *)notification { [self postRPCNotificationNotification:SDLDidReceiveSystemCapabilityUpdatedNotification notification:notification]; diff --git a/SmartDeviceLink/SDLOnEncodedSyncPData.h b/SmartDeviceLink/SDLOnEncodedSyncPData.h index 01aa48bac..b42880ec8 100644 --- a/SmartDeviceLink/SDLOnEncodedSyncPData.h +++ b/SmartDeviceLink/SDLOnEncodedSyncPData.h @@ -8,6 +8,7 @@ NS_ASSUME_NONNULL_BEGIN /** Callback including encoded data of any SyncP packets that SYNC needs to send back to the mobile device. Legacy / v1 Protocol implementation; responds to EncodedSyncPData. *** DEPRECATED *** */ +__deprecated @interface SDLOnEncodedSyncPData : SDLRPCNotification /** diff --git a/SmartDeviceLink/SDLOnEncodedSyncPData.m b/SmartDeviceLink/SDLOnEncodedSyncPData.m index b1526794e..830bb5d3f 100644 --- a/SmartDeviceLink/SDLOnEncodedSyncPData.m +++ b/SmartDeviceLink/SDLOnEncodedSyncPData.m @@ -9,7 +9,10 @@ NS_ASSUME_NONNULL_BEGIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" @implementation SDLOnEncodedSyncPData +#pragma clang diagnostic pop #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" diff --git a/SmartDeviceLink/SDLOnHMIStatus.h b/SmartDeviceLink/SDLOnHMIStatus.h index 232f85d96..22a43500a 100644 --- a/SmartDeviceLink/SDLOnHMIStatus.h +++ b/SmartDeviceLink/SDLOnHMIStatus.h @@ -51,6 +51,14 @@ NS_ASSUME_NONNULL_BEGIN */ @property (strong, nonatomic, nullable) NSNumber *windowID; +/// Initialize an SDLOnHMIStatus RPC with initial parameters +/// @param hmiLevel The HMI level +/// @param systemContext The system context +/// @param audioStreamingState The ability for an audio app to be heard +/// @param videoStreamingState The ability for a video straming app to stream +/// @param windowID Which window this status relates to +- (instancetype)initWithHMILevel:(SDLHMILevel)hmiLevel systemContext:(SDLSystemContext)systemContext audioStreamingState:(SDLAudioStreamingState)audioStreamingState videoStreamingState:(nullable SDLVideoStreamingState)videoStreamingState windowID:(nullable NSNumber *)windowID; + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLOnHMIStatus.m b/SmartDeviceLink/SDLOnHMIStatus.m index f80b4b4fb..09534e9fa 100644 --- a/SmartDeviceLink/SDLOnHMIStatus.m +++ b/SmartDeviceLink/SDLOnHMIStatus.m @@ -23,6 +23,19 @@ - (instancetype)init { } #pragma clang diagnostic pop +- (instancetype)initWithHMILevel:(SDLHMILevel)hmiLevel systemContext:(SDLSystemContext)systemContext audioStreamingState:(SDLAudioStreamingState)audioStreamingState videoStreamingState:(nullable SDLVideoStreamingState)videoStreamingState windowID:(nullable NSNumber *)windowID { + self = [self init]; + if (!self) { return nil; } + + self.hmiLevel = hmiLevel; + self.systemContext = systemContext; + self.audioStreamingState = audioStreamingState; + self.videoStreamingState = videoStreamingState; + self.windowID = windowID; + + return self; +} + - (void)setHmiLevel:(SDLHMILevel)hmiLevel { [self.parameters sdl_setObject:hmiLevel forName:SDLRPCParameterNameHMILevel]; } diff --git a/SmartDeviceLink/SDLOnSyncPData.h b/SmartDeviceLink/SDLOnSyncPData.h index 7b16ba171..4352228f6 100644 --- a/SmartDeviceLink/SDLOnSyncPData.h +++ b/SmartDeviceLink/SDLOnSyncPData.h @@ -9,6 +9,7 @@ NS_ASSUME_NONNULL_BEGIN /** DEPRECATED */ +__deprecated @interface SDLOnSyncPData : SDLRPCNotification /// The url diff --git a/SmartDeviceLink/SDLOnSyncPData.m b/SmartDeviceLink/SDLOnSyncPData.m index 89541683f..af4f39b0a 100644 --- a/SmartDeviceLink/SDLOnSyncPData.m +++ b/SmartDeviceLink/SDLOnSyncPData.m @@ -11,7 +11,10 @@ NS_ASSUME_NONNULL_BEGIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" @implementation SDLOnSyncPData +#pragma clang diagnostic pop #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" diff --git a/SmartDeviceLink/SDLPreloadChoicesOperation.h b/SmartDeviceLink/SDLPreloadChoicesOperation.h index b62ff5296..965a0c176 100644 --- a/SmartDeviceLink/SDLPreloadChoicesOperation.h +++ b/SmartDeviceLink/SDLPreloadChoicesOperation.h @@ -29,7 +29,7 @@ typedef NS_ENUM(NSUInteger, SDLPreloadChoicesOperationState) { @property (assign, nonatomic) SDLPreloadChoicesOperationState currentState; -- (instancetype)initWithConnectionManager:(id)connectionManager fileManager:(SDLFileManager *)fileManager displayName:(NSString *)displayName defaultMainWindowCapability:(SDLWindowCapability *)defaultMainWindowCapability isVROptional:(BOOL)isVROptional cellsToPreload:(NSSet *)cells; +- (instancetype)initWithConnectionManager:(id)connectionManager fileManager:(SDLFileManager *)fileManager displayName:(NSString *)displayName windowCapability:(SDLWindowCapability *)defaultMainWindowCapability isVROptional:(BOOL)isVROptional cellsToPreload:(NSSet *)cells; - (BOOL)removeChoicesFromUpload:(NSSet *)choices; diff --git a/SmartDeviceLink/SDLPreloadChoicesOperation.m b/SmartDeviceLink/SDLPreloadChoicesOperation.m index ddb0e36c8..3b96d1f80 100644 --- a/SmartDeviceLink/SDLPreloadChoicesOperation.m +++ b/SmartDeviceLink/SDLPreloadChoicesOperation.m @@ -33,7 +33,7 @@ @interface SDLPreloadChoicesOperation() @property (strong, nonatomic) NSUUID *operationId; @property (strong, nonatomic) NSMutableSet *cellsToUpload; -@property (strong, nonatomic) SDLWindowCapability *defaultMainWindowCapability; +@property (strong, nonatomic) SDLWindowCapability *windowCapability; @property (strong, nonatomic) NSString *displayName; @property (assign, nonatomic, getter=isVROptional) BOOL vrOptional; @@ -45,14 +45,14 @@ @interface SDLPreloadChoicesOperation() @implementation SDLPreloadChoicesOperation -- (instancetype)initWithConnectionManager:(id)connectionManager fileManager:(SDLFileManager *)fileManager displayName:(NSString *)displayName defaultMainWindowCapability:(SDLWindowCapability *)defaultMainWindowCapability isVROptional:(BOOL)isVROptional cellsToPreload:(NSSet *)cells { +- (instancetype)initWithConnectionManager:(id)connectionManager fileManager:(SDLFileManager *)fileManager displayName:(NSString *)displayName windowCapability:(SDLWindowCapability *)defaultMainWindowCapability isVROptional:(BOOL)isVROptional cellsToPreload:(NSSet *)cells { self = [super init]; if (!self) { return nil; } _connectionManager = connectionManager; _fileManager = fileManager; _displayName = displayName; - _defaultMainWindowCapability = defaultMainWindowCapability; + _windowCapability = defaultMainWindowCapability; _vrOptional = isVROptional; _cellsToUpload = [cells mutableCopy]; _operationId = [NSUUID UUID]; @@ -87,12 +87,10 @@ - (void)sdl_preloadCellArtworksWithCompletionHandler:(void(^)(NSError *_Nullable NSMutableArray *artworksToUpload = [NSMutableArray arrayWithCapacity:self.cellsToUpload.count]; for (SDLChoiceCell *cell in self.cellsToUpload) { - if ([self.defaultMainWindowCapability hasImageFieldOfName:SDLImageFieldNameChoiceImage] - && [self sdl_artworkNeedsUpload:cell.artwork]) { + if ([self sdl_shouldSendChoicePrimaryImage] && [self sdl_artworkNeedsUpload:cell.artwork]) { [artworksToUpload addObject:cell.artwork]; } - if ([self.defaultMainWindowCapability hasImageFieldOfName:SDLImageFieldNameChoiceSecondaryImage] - && [self sdl_artworkNeedsUpload:cell.secondaryArtwork]) { + if ([self sdl_shouldSendChoiceSecondaryImage] && [self sdl_artworkNeedsUpload:cell.secondaryArtwork]) { [artworksToUpload addObject:cell.secondaryArtwork]; } } @@ -165,29 +163,58 @@ - (nullable SDLCreateInteractionChoiceSet *)sdl_choiceFromCell:(SDLChoiceCell *) } NSString *menuName = nil; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if ([self.displayName isEqualToString:SDLDisplayTypeGen38Inch] || [self.defaultMainWindowCapability hasTextFieldOfName:SDLTextFieldNameMenuName]) { + if ([self sdl_shouldSendChoiceText]) { menuName = cell.text; } -#pragma clang diagnostic pop if(!menuName) { SDLLogE(@"Could not convert SDLChoiceCell to SDLCreateInteractionChoiceSet. It will not be shown. Cell: %@", cell); return nil; } - NSString *secondaryText = [self.defaultMainWindowCapability hasTextFieldOfName:SDLTextFieldNameSecondaryText] ? cell.secondaryText : nil; - NSString *tertiaryText = [self.defaultMainWindowCapability hasTextFieldOfName:SDLTextFieldNameTertiaryText] ? cell.tertiaryText : nil; + NSString *secondaryText = [self sdl_shouldSendChoiceSecondaryText] ? cell.secondaryText : nil; + NSString *tertiaryText = [self sdl_shouldSendChoiceTertiaryText] ? cell.tertiaryText : nil; - SDLImage *image = ([self.defaultMainWindowCapability hasImageFieldOfName:SDLImageFieldNameChoiceImage] && cell.artwork != nil) ? cell.artwork.imageRPC : nil; - SDLImage *secondaryImage = ([self.defaultMainWindowCapability hasImageFieldOfName:SDLImageFieldNameChoiceSecondaryImage] && cell.secondaryArtwork != nil) ? cell.secondaryArtwork.imageRPC : nil; + SDLImage *image = [self sdl_shouldSendChoicePrimaryImage] ? cell.artwork.imageRPC : nil; + SDLImage *secondaryImage = [self sdl_shouldSendChoiceSecondaryImage] ? cell.secondaryArtwork.imageRPC : nil; SDLChoice *choice = [[SDLChoice alloc] initWithId:cell.choiceId menuName:(NSString *_Nonnull)menuName vrCommands:(NSArray * _Nonnull)vrCommands image:image secondaryText:secondaryText secondaryImage:secondaryImage tertiaryText:tertiaryText]; return [[SDLCreateInteractionChoiceSet alloc] initWithId:(UInt32)choice.choiceID.unsignedIntValue choiceSet:@[choice]]; } +/// Determine if we should send primary text. If textFields is nil, we don't know the capabilities and we will send everything. +- (BOOL)sdl_shouldSendChoiceText { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([self.displayName isEqualToString:SDLDisplayTypeGen38Inch]) { + return YES; + } +#pragma clang diagnostic pop + + return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameMenuName] : YES; +} + +/// Determine if we should send secondary text. If textFields is nil, we don't know the capabilities and we will send everything. +- (BOOL)sdl_shouldSendChoiceSecondaryText { + return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameSecondaryText] : YES; +} + +/// Determine if we should send teriary text. If textFields is nil, we don't know the capabilities and we will send everything. +- (BOOL)sdl_shouldSendChoiceTertiaryText { + return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameTertiaryText] : YES; +} + +/// Determine if we should send the primary image. If imageFields is nil, we don't know the capabilities and we will send everything. +- (BOOL)sdl_shouldSendChoicePrimaryImage { + return (self.windowCapability.imageFields != nil) ? [self.windowCapability hasImageFieldOfName:SDLImageFieldNameChoiceImage] : YES; +} + +/// Determine if we should send the secondary image. If imageFields is nil, we don't know the capabilities and we will send everything. +- (BOOL)sdl_shouldSendChoiceSecondaryImage { + return (self.windowCapability.imageFields != nil) ? [self.windowCapability hasImageFieldOfName:SDLImageFieldNameChoiceSecondaryImage] : YES; +} + #pragma mark - Property Overrides - (void)finishOperation { diff --git a/SmartDeviceLink/SDLProtocol.m b/SmartDeviceLink/SDLProtocol.m index f71da8354..7361e4295 100644 --- a/SmartDeviceLink/SDLProtocol.m +++ b/SmartDeviceLink/SDLProtocol.m @@ -286,11 +286,7 @@ - (void)sendRPC:(SDLRPCMessage *)message { - (BOOL)sendRPC:(SDLRPCMessage *)message encrypted:(BOOL)encryption error:(NSError *__autoreleasing *)error { NSParameterAssert(message != nil); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[message serializeAsDictionary:(Byte)[SDLGlobals sharedGlobals].protocolVersion.major] options:kNilOptions error:error]; -#pragma clang diagnostic pop if (error != nil) { SDLLogW(@"Error encoding JSON data: %@", *error); @@ -422,7 +418,7 @@ - (void)sdl_sendRawData:(NSData *)data onService:(SDLServiceType)service encrypt SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:data]; - if (message.size < [[SDLGlobals sharedGlobals] mtuSizeForServiceType:SDLServiceTypeRPC]) { + if (message.size < [[SDLGlobals sharedGlobals] mtuSizeForServiceType:service]) { SDLLogV(@"Sending protocol message: %@", message); [self sdl_sendDataToTransport:message.data onService:header.serviceType]; } else { @@ -688,7 +684,7 @@ - (void)sdl_logControlNAKPayload:(SDLProtocolMessage *)nakMessage { SDLControlFramePayloadNak *endServiceNakPayload = [[SDLControlFramePayloadNak alloc] initWithData:nakMessage.payload]; NSArray *rejectedParams = endServiceNakPayload.rejectedParams; if (rejectedParams.count > 0) { - SDLLogE(@"Start Service NAK'd, service type: %@, rejectedParams: %@", @(nakMessage.header.serviceType), rejectedParams); + SDLLogE(@"%@ service NAK'd, service type: %@, rejectedParams: %@", (nakMessage.header.frameData == SDLFrameInfoStartServiceNACK) ? @"Start" : @"End", @(nakMessage.header.serviceType), rejectedParams); } } } break; diff --git a/SmartDeviceLink/SDLProxy.h b/SmartDeviceLink/SDLProxy.h index 60a68f44c..4fd20c4af 100644 --- a/SmartDeviceLink/SDLProxy.h +++ b/SmartDeviceLink/SDLProxy.h @@ -133,6 +133,9 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)putFileStream:(NSInputStream *)inputStream withRequest:(SDLPutFile *)putFileRPCRequest; +/// Disconnects the current app session, including the security manager and primary transport. +- (void)disconnectSession; + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLProxy.m b/SmartDeviceLink/SDLProxy.m index d7d78fc83..135f67282 100644 --- a/SmartDeviceLink/SDLProxy.m +++ b/SmartDeviceLink/SDLProxy.m @@ -40,6 +40,7 @@ #import "SDLUnsubscribeButton.h" #import "SDLVehicleType.h" #import "SDLVersion.h" +#import "SDLCacheFileManager.h" #import "SDLRPCParameterNames.h" #import "SDLRPCFunctionNames.h" @@ -51,7 +52,7 @@ typedef void (^URLSessionTaskCompletionHandler)(NSData *data, NSURLResponse *response, NSError *error); typedef void (^URLSessionDownloadTaskCompletionHandler)(NSURL *location, NSURLResponse *response, NSError *error); -NSString *const SDLProxyVersion = @"6.5.0"; +NSString *const SDLProxyVersion = @"6.6.0"; const float StartSessionTime = 10.0; const float NotifyProxyClosedDelay = (float)0.1; const int PoliciesCorrelationId = 65535; @@ -65,7 +66,8 @@ @interface SDLProxy () { @property (strong, nonatomic) NSMutableSet *> *mutableProxyListeners; @property (nullable, nonatomic, strong) SDLDisplayCapabilities *displayCapabilities; @property (nonatomic, strong) NSMutableDictionary *securityManagers; -@property (nonatomic, strong) NSURLSession* urlSession; +@property (nonatomic, strong) NSURLSession *urlSession; +@property (nonatomic, strong) SDLCacheFileManager *cacheFileManager; @end @@ -102,7 +104,7 @@ - (instancetype)initWithTransport:(id)transport delegate:(id)transport delegate:(id)delegate tcpIPAddress:( return ret; } -- (void)dealloc { +- (void)disconnectSession { + SDLLogD(@"Disconnecting the proxy; stopping security manager and primary transport."); if (self.protocol.securityManager != nil) { [self.protocol.securityManager stop]; } @@ -186,20 +189,26 @@ - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [_urlSession invalidateAndCancel]; +} + +- (void)dealloc { SDLLogV(@"Proxy dealloc"); } -- (void)notifyProxyClosed { +- (void)sdl_notifyProxyClosed { if (_isConnected) { _isConnected = NO; - [self invokeMethodOnDelegates:@selector(onProxyClosed) withObject:nil]; + [self sdl_invokeMethodOnDelegates:@selector(onProxyClosed) withObject:nil]; } } #pragma mark - Application Lifecycle -- (void)sendMobileHMIState { +/// This method sends an OnHMIStatus with the Mobile's HMI level to the head unit. +/// This was originally designed to make sure that the head unit properly knew about the mobile app's ability to run timers in the background, which affected heartbeat. +/// It may still affect some features on the head unit and the ability for the head unit to know which app is in the foreground is useful. It should not be removed due to unknown backward compatibility issues. +- (void)sdl_sendMobileHMIState { __block UIApplicationState appState = UIApplicationStateInactive; if ([NSThread isMainThread]) { appState = [UIApplication sharedApplication].applicationState; @@ -268,7 +277,7 @@ - (void)addSecurityManagers:(NSArray *)securityManagerClasses forAppId:(N } } -- (nullable id)securityManagerForMake:(NSString *)make { +- (nullable id)sdl_securityManagerForMake:(NSString *)make { if ((make != nil) && (self.securityManagers[make] != nil)) { Class securityManagerClass = self.securityManagers[make]; self.protocol.appId = self.appId; @@ -292,22 +301,22 @@ - (void)onProtocolOpened { __weak typeof(self) weakSelf = self; self.startSessionTimer.elapsedBlock = ^{ SDLLogW(@"Start session timed out"); - [weakSelf performSelector:@selector(notifyProxyClosed) withObject:nil afterDelay:NotifyProxyClosedDelay]; + [weakSelf performSelector:@selector(sdl_notifyProxyClosed) withObject:nil afterDelay:NotifyProxyClosedDelay]; }; } [self.startSessionTimer start]; } - (void)onProtocolClosed { - [self notifyProxyClosed]; + [self sdl_notifyProxyClosed]; } - (void)onError:(NSString *)info exception:(NSException *)e { - [self invokeMethodOnDelegates:@selector(onError:) withObject:e]; + [self sdl_invokeMethodOnDelegates:@selector(onError:) withObject:e]; } - (void)onTransportError:(NSError *)error { - [self invokeMethodOnDelegates:@selector(onTransportError:) withObject:error]; + [self sdl_invokeMethodOnDelegates:@selector(onTransportError:) withObject:error]; } - (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK { @@ -316,7 +325,7 @@ - (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceA SDLLogV(@"StartSession (response)\nSessionId: %d for serviceType %d", startServiceACK.header.sessionID, startServiceACK.header.serviceType); if (startServiceACK.header.serviceType == SDLServiceTypeRPC) { - [self invokeMethodOnDelegates:@selector(onProxyOpened) withObject:nil]; + [self sdl_invokeMethodOnDelegates:@selector(onProxyOpened) withObject:nil]; } } @@ -461,15 +470,15 @@ - (void)handleRPCDictionary:(NSDictionary *)dict { } if ([functionName isEqualToString:@"OnEncodedSyncPData"]) { - [self handleSyncPData:newMessage]; + [self sdl_handleSyncPData:newMessage]; } if ([functionName isEqualToString:@"OnSystemRequest"]) { - [self handleSystemRequest:dict]; + [self sdl_handleSystemRequest:dict]; } if ([functionName isEqualToString:@"SystemRequestResponse"]) { - [self handleSystemRequestResponse:newMessage]; + [self sdl_handleSystemRequestResponse:newMessage]; } @@ -499,17 +508,17 @@ - (void)handleRPCDictionary:(NSDictionary *)dict { //Intercepting SDLRPCFunctionNameOnAppInterfaceUnregistered must happen after it is broadcasted as a notification above. This will prevent reconnection attempts in the lifecycle manager when the AppInterfaceUnregisteredReason should prevent reconnections. if ([functionName isEqualToString:SDLRPCFunctionNameOnAppInterfaceUnregistered] || [functionName isEqualToString:SDLRPCFunctionNameUnregisterAppInterface]) { - [self handleRPCUnregistered:dict]; + [self sdl_handleRPCUnregistered:dict]; } // When an OnHMIStatus notification comes in, after passing it on (above), generate an "OnLockScreenNotification" if ([functionName isEqualToString:@"OnHMIStatus"]) { - [self handleAfterHMIStatus:newMessage]; + [self sdl_handleAfterHMIStatus:newMessage]; } // When an OnDriverDistraction notification comes in, after passing it on (above), generate an "OnLockScreenNotification" if ([functionName isEqualToString:@"OnDriverDistraction"]) { - [self handleAfterDriverDistraction:newMessage]; + [self sdl_handleAfterDriverDistraction:newMessage]; } } @@ -517,34 +526,34 @@ - (void)sdl_invokeDelegateMethodsWithFunction:(NSString *)functionName message:( // Formulate the name of the method to call and invoke the method on the delegate(s) NSString *handlerName = [NSString stringWithFormat:@"on%@:", functionName]; SEL handlerSelector = NSSelectorFromString(handlerName); - [self invokeMethodOnDelegates:handlerSelector withObject:message]; + [self sdl_invokeMethodOnDelegates:handlerSelector withObject:message]; } #pragma mark - RPC Handlers -- (void)handleRPCUnregistered:(NSDictionary *)messageDictionary { +- (void)sdl_handleRPCUnregistered:(NSDictionary *)messageDictionary { SDLLogW(@"Unregistration forced by module. %@", messageDictionary); - [self notifyProxyClosed]; + [self sdl_notifyProxyClosed]; } - (void)handleRegisterAppInterfaceResponse:(SDLRPCResponse *)response { SDLRegisterAppInterfaceResponse *registerResponse = (SDLRegisterAppInterfaceResponse *)response; - self.protocol.securityManager = [self securityManagerForMake:registerResponse.vehicleType.make]; + self.protocol.securityManager = [self sdl_securityManagerForMake:registerResponse.vehicleType.make]; if (self.protocol.securityManager && [self.protocol.securityManager respondsToSelector:@selector(setAppId:)]) { self.protocol.securityManager.appId = self.appId; } if ([SDLGlobals sharedGlobals].protocolVersion.major >= 4) { - [self sendMobileHMIState]; + [self sdl_sendMobileHMIState]; // Send SDL updates to application state - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendMobileHMIState) name:UIApplicationDidBecomeActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendMobileHMIState) name:UIApplicationDidEnterBackgroundNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_sendMobileHMIState) name:UIApplicationDidBecomeActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_sendMobileHMIState) name:UIApplicationDidEnterBackgroundNotification object:nil]; } } -- (void)handleSyncPData:(SDLRPCMessage *)message { +- (void)sdl_handleSyncPData:(SDLRPCMessage *)message { // If URL != nil, perform HTTP Post and don't pass the notification to proxy listeners SDLLogV(@"OnEncodedSyncPData: %@", message); @@ -553,11 +562,11 @@ - (void)handleSyncPData:(SDLRPCMessage *)message { NSNumber *encodedSyncPTimeout = (NSNumber *)message.parameters[SDLRPCParameterNameTimeoutCapitalized]; if (urlString && encodedSyncPData && encodedSyncPTimeout) { - [self sendEncodedSyncPData:encodedSyncPData toURL:urlString withTimeout:encodedSyncPTimeout]; + [self sdl_sendEncodedSyncPData:encodedSyncPData toURL:urlString withTimeout:encodedSyncPTimeout]; } } -- (void)handleSystemRequest:(NSDictionary *)dict { +- (void)sdl_handleSystemRequest:(NSDictionary *)dict { SDLLogV(@"OnSystemRequest"); #pragma clang diagnostic push @@ -568,7 +577,7 @@ - (void)handleSystemRequest:(NSDictionary *)dict { // Handle the various OnSystemRequest types if ([requestType isEqualToEnum:SDLRequestTypeProprietary]) { - [self handleSystemRequestProprietary:systemRequest]; + [self sdl_handleSystemRequestProprietary:systemRequest]; } else if ([requestType isEqualToEnum:SDLRequestTypeLockScreenIconURL]) { [self sdl_handleSystemRequestLockScreenIconURL:systemRequest]; } else if ([requestType isEqualToEnum:SDLRequestTypeIconURL]) { @@ -580,7 +589,7 @@ - (void)handleSystemRequest:(NSDictionary *)dict { } } -- (void)handleSystemRequestResponse:(SDLRPCMessage *)message { +- (void)sdl_handleSystemRequestResponse:(SDLRPCMessage *)message { SDLLogV(@"SystemRequestResponse to be discarded"); } @@ -669,21 +678,21 @@ - (BOOL)sdl_handleOnButtonEventPostV5:(SDLOnButtonEvent *)message { #pragma mark Handle Post-Invoke of Delegate Methods -- (void)handleAfterHMIStatus:(SDLRPCMessage *)message { +- (void)sdl_handleAfterHMIStatus:(SDLRPCMessage *)message { SDLHMILevel hmiLevel = (SDLHMILevel)message.parameters[SDLRPCParameterNameHMILevel]; _lsm.hmiLevel = hmiLevel; SEL callbackSelector = NSSelectorFromString(@"onOnLockScreenNotification:"); - [self invokeMethodOnDelegates:callbackSelector withObject:_lsm.lockScreenStatusNotification]; + [self sdl_invokeMethodOnDelegates:callbackSelector withObject:_lsm.lockScreenStatusNotification]; } -- (void)handleAfterDriverDistraction:(SDLRPCMessage *)message { +- (void)sdl_handleAfterDriverDistraction:(SDLRPCMessage *)message { NSString *stateString = (NSString *)message.parameters[SDLRPCParameterNameState]; BOOL state = [stateString isEqualToString:@"DD_ON"] ? YES : NO; _lsm.driverDistracted = state; SEL callbackSelector = NSSelectorFromString(@"onOnLockScreenNotification:"); - [self invokeMethodOnDelegates:callbackSelector withObject:_lsm.lockScreenStatusNotification]; + [self sdl_invokeMethodOnDelegates:callbackSelector withObject:_lsm.lockScreenStatusNotification]; } @@ -704,8 +713,8 @@ - (void)sdl_handleSystemRequestLaunchApp:(SDLOnSystemRequest *)request { [[UIApplication sharedApplication] openURL:URLScheme]; } -- (void)handleSystemRequestProprietary:(SDLOnSystemRequest *)request { - NSDictionary *JSONDictionary = [self validateAndParseSystemRequest:request]; +- (void)sdl_handleSystemRequestProprietary:(SDLOnSystemRequest *)request { + NSDictionary *JSONDictionary = [self sdl_validateAndParseSystemRequest:request]; if (JSONDictionary == nil || request.url == nil) { return; } @@ -724,8 +733,8 @@ - (void)handleSystemRequestProprietary:(SDLOnSystemRequest *)request { // Send the HTTP Request __weak typeof(self) weakSelf = self; - [self uploadForBodyDataDictionary:JSONDictionary - URLString:request.url + [self sdl_uploadForBodyDataDictionary:JSONDictionary + urlString:request.url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { __strong typeof(weakSelf) strongSelf = weakSelf; @@ -760,18 +769,16 @@ - (void)handleSystemRequestProprietary:(SDLOnSystemRequest *)request { } - (void)sdl_handleSystemRequestLockScreenIconURL:(SDLOnSystemRequest *)request { - __weak typeof(self) weakSelf = self; - [self sdl_sendDataTaskWithURL:[NSURL URLWithString:request.url] - completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - __strong typeof(weakSelf) strongSelf = weakSelf; - if (error != nil) { - SDLLogW(@"OnSystemRequest (lock screen icon) HTTP download task failed: %@", error.localizedDescription); - return; - } - - UIImage *icon = [UIImage imageWithData:data]; - [strongSelf invokeMethodOnDelegates:@selector(onReceivedLockScreenIcon:) withObject:icon]; - }]; + __weak typeof(self) weakSelf = self; + [self.cacheFileManager retrieveImageForRequest:request withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (error != nil) { + SDLLogW(@"Failed to retrieve lock screen icon: %@", error.localizedDescription); + return; + } + + [strongSelf sdl_invokeMethodOnDelegates:@selector(onReceivedLockScreenIcon:) withObject:image]; + }]; } - (void)sdl_handleSystemRequestIconURL:(SDLOnSystemRequest *)request { @@ -837,7 +844,7 @@ - (void)sdl_handleSystemRequestHTTP:(SDLOnSystemRequest *)request { * * @return A parsed JSON dictionary, or nil if it couldn't be parsed */ -- (nullable NSDictionary *)validateAndParseSystemRequest:(SDLOnSystemRequest *)request { +- (nullable NSDictionary *)sdl_validateAndParseSystemRequest:(SDLOnSystemRequest *)request { NSString *urlString = request.url; SDLFileType fileType = request.fileType; @@ -890,7 +897,7 @@ - (void)sdl_uploadData:(NSData *_Nonnull)data toURLString:(NSString *_Nonnull)ur * @param urlString A string containing the URL to send the upload to * @param completionHandler A completion handler returning the response from the server to the upload task */ -- (void)uploadForBodyDataDictionary:(NSDictionary *)dictionary URLString:(NSString *)urlString completionHandler:(URLSessionTaskCompletionHandler)completionHandler { +- (void)sdl_uploadForBodyDataDictionary:(NSDictionary *)dictionary urlString:(NSString *)urlString completionHandler:(URLSessionTaskCompletionHandler)completionHandler { NSParameterAssert(dictionary != nil); NSParameterAssert(urlString != nil); NSParameterAssert(completionHandler != NULL); @@ -949,7 +956,7 @@ - (void)removeDelegate:(NSObject *)delegate { } } -- (void)invokeMethodOnDelegates:(SEL)aSelector withObject:(nullable id)object { +- (void)sdl_invokeMethodOnDelegates:(SEL)aSelector withObject:(nullable id)object { // Occurs on the processing serial queue for (id listener in self.proxyListeners) { if ([listener respondsToSelector:aSelector]) { @@ -962,7 +969,7 @@ - (void)invokeMethodOnDelegates:(SEL)aSelector withObject:(nullable id)object { #pragma mark - System Request and SyncP handling -- (void)sendEncodedSyncPData:(NSDictionary *)encodedSyncPData toURL:(NSString *)urlString withTimeout:(NSNumber *)timeout { +- (void)sdl_sendEncodedSyncPData:(NSDictionary *)encodedSyncPData toURL:(NSString *)urlString withTimeout:(NSNumber *)timeout { // Configure HTTP URL & Request NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; @@ -986,14 +993,14 @@ - (void)sendEncodedSyncPData:(NSDictionary *)encodedSyncPData to [[self.urlSession uploadTaskWithRequest:request fromData:data completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - [weakSelf syncPDataNetworkRequestCompleteWithData:data response:response error:error]; + [weakSelf sdl_syncPDataNetworkRequestCompleteWithData:data response:response error:error]; }] resume]; SDLLogV(@"OnEncodedSyncPData (HTTP Request)"); } // Handle the OnEncodedSyncPData HTTP Response -- (void)syncPDataNetworkRequestCompleteWithData:(NSData *)data response:(NSURLResponse *)response error:(NSError *)error { +- (void)sdl_syncPDataNetworkRequestCompleteWithData:(NSData *)data response:(NSURLResponse *)response error:(NSError *)error { // Sample of response: {"data":["SDLKGLSDKFJLKSjdslkfjslkJLKDSGLKSDJFLKSDJF"]} SDLLogV(@"OnEncodedSyncPData (HTTP Response): %@", response); @@ -1007,7 +1014,10 @@ - (void)syncPDataNetworkRequestCompleteWithData:(NSData *)data response:(NSURLRe NSError *JSONConversionError = nil; NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&JSONConversionError]; if (!JSONConversionError) { + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLEncodedSyncPData *request = [[SDLEncodedSyncPData alloc] init]; + #pragma clang diagnostic pop request.correlationID = [NSNumber numberWithInt:PoliciesCorrelationId]; request.data = [responseDictionary objectForKey:@"data"]; diff --git a/SmartDeviceLink/SDLProxyListener.h b/SmartDeviceLink/SDLProxyListener.h index 25d52f589..3513e2202 100644 --- a/SmartDeviceLink/SDLProxyListener.h +++ b/SmartDeviceLink/SDLProxyListener.h @@ -309,7 +309,10 @@ NS_ASSUME_NONNULL_BEGIN * * @param response A SDLEncodedSyncPDataResponse object */ -- (void)onEncodedSyncPDataResponse:(SDLEncodedSyncPDataResponse *)response; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (void)onEncodedSyncPDataResponse:(SDLEncodedSyncPDataResponse *)response __deprecated; +#pragma clang diagnostic pop /** * Called when an End Audio Pass Thru Response is received from Core @@ -589,7 +592,10 @@ NS_ASSUME_NONNULL_BEGIN * * @param response A SDLSyncPDataResponse object */ -- (void)onSyncPDataResponse:(SDLSyncPDataResponse *)response; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (void)onSyncPDataResponse:(SDLSyncPDataResponse *)response __deprecated; +#pragma clang diagnostic pop /** * Called when an Update Turn List Response is received from Core @@ -759,7 +765,10 @@ NS_ASSUME_NONNULL_BEGIN * * @param request A SDLEncodedSyncPData object */ -- (void)onEncodedSyncPData:(SDLEncodedSyncPData *)request; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (void)onEncodedSyncPData:(SDLEncodedSyncPData *)request __deprecated; +#pragma clang diagnostic pop /** * Called when a `EndAudioPassThru` request is received from Core @@ -1025,7 +1034,10 @@ NS_ASSUME_NONNULL_BEGIN * * @param request A SDLSyncPData object */ -- (void)onSyncPData:(SDLSyncPData *)request; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (void)onSyncPData:(SDLSyncPData *)request __deprecated; +#pragma clang diagnostic pop /** * Called when a `SystemRequest` request is received from Core @@ -1126,7 +1138,10 @@ NS_ASSUME_NONNULL_BEGIN * * @param notification A SDLOnEncodedSyncPData object */ -- (void)onOnEncodedSyncPData:(SDLOnEncodedSyncPData *)notification; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (void)onOnEncodedSyncPData:(SDLOnEncodedSyncPData *)notification __deprecated; +#pragma clang diagnostic pop /** * Called when an On Hash Change notification is received from Core @@ -1163,7 +1178,7 @@ NS_ASSUME_NONNULL_BEGIN */ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (void)onOnLockScreenNotification:(SDLOnLockScreenStatus *)notification; +- (void)onOnLockScreenNotification:(SDLOnLockScreenStatus *)notification __deprecated; #pragma clang diagnostic pop /** @@ -1185,7 +1200,10 @@ NS_ASSUME_NONNULL_BEGIN * * @param notification A SDLOnSyncPData object */ -- (void)onOnSyncPData:(SDLOnSyncPData *)notification; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (void)onOnSyncPData:(SDLOnSyncPData *)notification __deprecated; +#pragma clang diagnostic pop /** * Called when an `OnSystemCapabilityUpdated` notification is received from Core diff --git a/SmartDeviceLink/SDLRPCFunctionNames.h b/SmartDeviceLink/SDLRPCFunctionNames.h index f2738e1b1..fce4b61f7 100644 --- a/SmartDeviceLink/SDLRPCFunctionNames.h +++ b/SmartDeviceLink/SDLRPCFunctionNames.h @@ -59,7 +59,7 @@ extern SDLRPCFunctionName const SDLRPCFunctionNameDiagnosticMessage; extern SDLRPCFunctionName const SDLRPCFunctionNameDialNumber; /// Function name for an CreateInteractionChoiceSet RPC -extern SDLRPCFunctionName const SDLRPCFunctionNameEncodedSyncPData; +extern SDLRPCFunctionName const SDLRPCFunctionNameEncodedSyncPData __deprecated; /// Function name for an EndAudioPassThru RPC extern SDLRPCFunctionName const SDLRPCFunctionNameEndAudioPassThru; @@ -119,7 +119,7 @@ extern SDLRPCFunctionName const SDLRPCFunctionNameOnCommand; extern SDLRPCFunctionName const SDLRPCFunctionNameOnDriverDistraction; /// Function name for an OnEncodedSyncPData notification RPC -extern SDLRPCFunctionName const SDLRPCFunctionNameOnEncodedSyncPData; +extern SDLRPCFunctionName const SDLRPCFunctionNameOnEncodedSyncPData __deprecated; /// Function name for an OnHashChange notification RPC extern SDLRPCFunctionName const SDLRPCFunctionNameOnHashChange; @@ -146,7 +146,7 @@ extern SDLRPCFunctionName const SDLRPCFunctionNameOnPermissionsChange; extern SDLRPCFunctionName const SDLRPCFunctionNameOnRCStatus; /// Function name for an OnSyncPData notification RPC -extern SDLRPCFunctionName const SDLRPCFunctionNameOnSyncPData; +extern SDLRPCFunctionName const SDLRPCFunctionNameOnSyncPData __deprecated; /// Function name for an OnSystemCapabilityUpdated notification RPC extern SDLRPCFunctionName const SDLRPCFunctionNameOnSystemCapabilityUpdated; @@ -248,7 +248,7 @@ extern SDLRPCFunctionName const SDLRPCFunctionNameSubscribeVehicleData; extern SDLRPCFunctionName const SDLRPCFunctionNameSubscribeWayPoints; /// Function name for a SyncPData RPC -extern SDLRPCFunctionName const SDLRPCFunctionNameSyncPData; +extern SDLRPCFunctionName const SDLRPCFunctionNameSyncPData __deprecated; /// Function name for a SystemRequest RPC extern SDLRPCFunctionName const SDLRPCFunctionNameSystemRequest; diff --git a/SmartDeviceLink/SDLRPCStruct.h b/SmartDeviceLink/SDLRPCStruct.h index 523400261..e8a36d903 100644 --- a/SmartDeviceLink/SDLRPCStruct.h +++ b/SmartDeviceLink/SDLRPCStruct.h @@ -23,7 +23,7 @@ NS_ASSUME_NONNULL_BEGIN * @param dict A dictionary * @return A SDLRPCStruct object */ -- (instancetype)initWithDictionary:(NSDictionary *)dict __deprecated_msg("This is not intended for public use"); +- (instancetype)initWithDictionary:(NSDictionary *)dict; /** * Converts struct to JSON formatted data @@ -31,7 +31,7 @@ NS_ASSUME_NONNULL_BEGIN * @param version The protocol version * @return JSON formatted data */ -- (NSDictionary *)serializeAsDictionary:(Byte)version __deprecated_msg("This is not intended for public use"); +- (NSDictionary *)serializeAsDictionary:(Byte)version; @end diff --git a/SmartDeviceLink/SDLRPCStruct.m b/SmartDeviceLink/SDLRPCStruct.m index e3de83f73..9956df03d 100644 --- a/SmartDeviceLink/SDLRPCStruct.m +++ b/SmartDeviceLink/SDLRPCStruct.m @@ -54,8 +54,6 @@ - (NSString *)description { return [self.store description]; } -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" + (NSDictionary *)sdl_serializeDictionary:(NSDictionary *)dict version:(Byte)version { NSMutableDictionary *ret = [NSMutableDictionary dictionaryWithCapacity:dict.count]; for (NSString *key in dict.keyEnumerator) { @@ -82,7 +80,6 @@ - (NSString *)description { } return ret; } -#pragma clang diagnostic pop - (id)copyWithZone:(nullable NSZone *)zone { SDLRPCStruct *newStruct = [[[self class] allocWithZone:zone] initWithDictionary:_store]; diff --git a/SmartDeviceLink/SDLRadioControlData.h b/SmartDeviceLink/SDLRadioControlData.h index c3d07eaff..182e6105e 100644 --- a/SmartDeviceLink/SDLRadioControlData.h +++ b/SmartDeviceLink/SDLRadioControlData.h @@ -41,6 +41,27 @@ NS_ASSUME_NONNULL_BEGIN */ - (instancetype)initWithFrequencyInteger:(nullable NSNumber *)frequencyInteger frequencyFraction:(nullable NSNumber *)frequencyFraction band:(nullable SDLRadioBand)band hdChannel:(nullable NSNumber *)hdChannel radioEnable:(nullable NSNumber *)radioEnable hdRadioEnable:(nullable NSNumber *)hdRadioEnable; +/// Constructs a newly allocated SDLRadioControlCapabilities object with given parameters. +/// +/// @param frequencyInteger Must be between 0 and 1710 +/// @param frequencyFraction Must be between 0 and 9 +/// @param hdChannel Must be between 0 and 7 +/// @return An instance of the SDLRadioControlData class +- (instancetype)initFMWithFrequencyInteger:(nullable NSNumber *)frequencyInteger frequencyFraction:(nullable NSNumber *)frequencyFraction hdChannel:(nullable NSNumber *)hdChannel; + +/// Constructs a newly allocated SDLRadioControlCapabilities object with given parameters. +/// +/// @param frequencyInteger Must be between 0 and 1710 +/// @param hdChannel Must be between 0 and 7 +/// @return An instance of the SDLRadioControlData class +- (instancetype)initAMWithFrequencyInteger:(nullable NSNumber *)frequencyInteger hdChannel:(nullable NSNumber *)hdChannel; + +/// Constructs a newly allocated SDLRadioControlCapabilities object with given parameters. +/// +/// @param frequencyInteger Must be between 1 and 1710 +/// @return An instance of the SDLRadioControlData class +- (instancetype)initXMWithFrequencyInteger:(nullable NSNumber *)frequencyInteger; + /** * The integer part of the frequency ie for 101.7 this value should be 101 * diff --git a/SmartDeviceLink/SDLRadioControlData.m b/SmartDeviceLink/SDLRadioControlData.m index 9e4f37c85..9fb82f080 100644 --- a/SmartDeviceLink/SDLRadioControlData.m +++ b/SmartDeviceLink/SDLRadioControlData.m @@ -43,6 +43,45 @@ - (instancetype)initWithFrequencyInteger:(nullable NSNumber *)frequencyI return self; } +- (instancetype)initFMWithFrequencyInteger:(nullable NSNumber *)frequencyInteger frequencyFraction:(nullable NSNumber *)frequencyFraction hdChannel:(nullable NSNumber *)hdChannel { + self = [self init]; + if(!self) { + return nil; + } + + self.band = SDLRadioBandFM; + self.frequencyInteger = frequencyInteger; + self.frequencyFraction = frequencyFraction; + self.hdChannel = hdChannel; + + return self; +} + +- (instancetype)initAMWithFrequencyInteger:(nullable NSNumber *)frequencyInteger hdChannel:(nullable NSNumber *)hdChannel { + self = [self init]; + if(!self) { + return nil; + } + + self.band = SDLRadioBandAM; + self.frequencyInteger = frequencyInteger; + self.hdChannel = hdChannel; + + return self; +} + +- (instancetype)initXMWithFrequencyInteger:(nullable NSNumber *)frequencyInteger { + self = [self init]; + if(!self) { + return nil; + } + + self.frequencyInteger = frequencyInteger; + self.band = SDLRadioBandXM; + + return self; +} + - (void)setFrequencyInteger:(nullable NSNumber *)frequencyInteger { [self.store sdl_setObject:frequencyInteger forName:SDLRPCParameterNameFrequencyInteger]; } diff --git a/SmartDeviceLink/SDLResponseDispatcher.m b/SmartDeviceLink/SDLResponseDispatcher.m index 4ac79c8bf..7c5956616 100644 --- a/SmartDeviceLink/SDLResponseDispatcher.m +++ b/SmartDeviceLink/SDLResponseDispatcher.m @@ -40,11 +40,19 @@ @interface SDLResponseDispatcher () +@property (copy, nonatomic) dispatch_queue_t readWriteQueue; + +@property (strong, nonatomic, readwrite) NSMapTable *rpcResponseHandlerMap; +@property (strong, nonatomic, readwrite) NSMutableDictionary *rpcRequestDictionary; +@property (strong, nonatomic, readwrite) NSMapTable *commandHandlerMap; +@property (strong, nonatomic, readwrite) NSMapTable *buttonHandlerMap; +@property (strong, nonatomic, readwrite) NSMapTable *customButtonHandlerMap; @property (strong, nonatomic, readwrite, nullable) SDLAudioPassThruHandler audioPassThruHandler; @end +// https://www.objc.io/issues/2-concurrency/low-level-concurrency-apis/#multiple-readers-single-writer @implementation SDLResponseDispatcher - (instancetype)init { @@ -57,6 +65,12 @@ - (instancetype)initWithNotificationDispatcher:(nullable id)dispatcher { return nil; } + if (@available(iOS 10.0, *)) { + _readWriteQueue = dispatch_queue_create_with_target("com.sdl.lifecycle.responseDispatcher", DISPATCH_QUEUE_SERIAL, [SDLGlobals sharedGlobals].sdlProcessingQueue); + } else { + _readWriteQueue = [SDLGlobals sharedGlobals].sdlProcessingQueue; + } + _rpcResponseHandlerMap = [NSMapTable mapTableWithKeyOptions:NSMapTableCopyIn valueOptions:NSMapTableCopyIn]; _rpcRequestDictionary = [NSMutableDictionary dictionary]; _commandHandlerMap = [NSMapTable mapTableWithKeyOptions:NSMapTableCopyIn valueOptions:NSMapTableCopyIn]; @@ -86,26 +100,33 @@ - (instancetype)initWithNotificationDispatcher:(nullable id)dispatcher { #pragma mark - Storage - (void)storeRequest:(SDLRPCRequest *)request handler:(nullable SDLResponseHandler)handler { + __weak typeof(self) weakself = self; NSNumber *correlationId = request.correlationID; // Check for RPCs that require an extra handler if ([request isKindOfClass:[SDLAddCommand class]]) { SDLAddCommand *addCommand = (SDLAddCommand *)request; - if (!addCommand.cmdID) { + if (addCommand.cmdID == nil) { @throw [NSException sdl_missingIdException]; } - if (addCommand.handler) { - self.commandHandlerMap[addCommand.cmdID] = addCommand.handler; + if (addCommand.handler != nil) { + [self sdl_runAsyncOnQueue:^{ + __strong typeof(weakself) strongself = weakself; + strongself->_commandHandlerMap[addCommand.cmdID] = addCommand.handler; + }]; } } else if ([request isKindOfClass:[SDLSubscribeButton class]]) { // Convert SDLButtonName to NSString, since it doesn't conform to SDLSubscribeButton *subscribeButton = (SDLSubscribeButton *)request; SDLButtonName buttonName = subscribeButton.buttonName; - if (!buttonName) { + if (buttonName == nil) { @throw [NSException sdl_missingIdException]; } - if (subscribeButton.handler) { - self.buttonHandlerMap[buttonName] = subscribeButton.handler; + if (subscribeButton.handler != nil) { + [self sdl_runAsyncOnQueue:^{ + __strong typeof(weakself) strongself = weakself; + strongself->_buttonHandlerMap[buttonName] = subscribeButton.handler; + }]; } } else if ([request isKindOfClass:[SDLAlert class]]) { SDLAlert *alert = (SDLAlert *)request; @@ -118,41 +139,80 @@ - (void)storeRequest:(SDLRPCRequest *)request handler:(nullable SDLResponseHandl [self sdl_addToCustomButtonHandlerMap:show.softButtons]; } else if ([request isKindOfClass:[SDLPerformAudioPassThru class]]) { SDLPerformAudioPassThru *performAudioPassThru = (SDLPerformAudioPassThru *)request; - self.audioPassThruHandler = performAudioPassThru.audioDataHandler; + + [self sdl_runAsyncOnQueue:^{ + __strong typeof(weakself) strongself = weakself; + strongself->_audioPassThruHandler = performAudioPassThru.audioDataHandler; + }]; } // Always store the request, it's needed in some cases whether or not there was a handler (e.g. DeleteCommand). - self.rpcRequestDictionary[correlationId] = request; - if (handler) { - self.rpcResponseHandlerMap[correlationId] = handler; - } + [self sdl_runAsyncOnQueue:^{ + __strong typeof(weakself) strongself = weakself; + + strongself->_rpcRequestDictionary[correlationId] = request; + if (handler != nil) { + strongself->_rpcResponseHandlerMap[correlationId] = handler; + } + }]; } - (void)clear { - // When we get disconnected we have to delete all existing responseHandlers as they are not valid anymore - for (SDLRPCCorrelationId *correlationID in self.rpcResponseHandlerMap.dictionaryRepresentation) { - SDLResponseHandler responseHandler = self.rpcResponseHandlerMap[correlationID]; - - if (responseHandler != NULL) { - responseHandler(self.rpcRequestDictionary[correlationID], nil, [NSError sdl_lifecycle_notConnectedError]); + __weak typeof(self) weakself = self; + + __block NSArray *handlers = nil; + __block NSArray *requests = nil; + [self sdl_runSyncOnQueue:^{ + __strong typeof(weakself) strongself = weakself; + NSMutableArray *handlerArray = [NSMutableArray array]; + NSMutableArray *requestArray = [NSMutableArray array]; + + // When we get disconnected we have to delete all existing responseHandlers as they are not valid anymore + for (SDLRPCCorrelationId *correlationID in strongself->_rpcResponseHandlerMap.dictionaryRepresentation) { + SDLResponseHandler responseHandler = strongself->_rpcResponseHandlerMap[correlationID]; + SDLRPCRequest *request = strongself->_rpcRequestDictionary[correlationID]; + + if (responseHandler != NULL) { + [handlerArray addObject:responseHandler]; + [requestArray addObject:request]; + } } + + handlers = [handlerArray copy]; + requests = [requestArray copy]; + }]; + + for (NSUInteger i = 0; i < handlers.count; i++) { + SDLResponseHandler responseHandler = handlers[i]; + SDLRPCRequest *request = requests[i]; + + responseHandler(request, nil, [NSError sdl_lifecycle_notConnectedError]); } - - [self.rpcRequestDictionary removeAllObjects]; - [self.rpcResponseHandlerMap removeAllObjects]; - [self.commandHandlerMap removeAllObjects]; - [self.buttonHandlerMap removeAllObjects]; - [self.customButtonHandlerMap removeAllObjects]; - _audioPassThruHandler = nil; + + [self sdl_runAsyncOnQueue:^{ + __strong typeof(weakself) strongself = weakself; + + [strongself->_rpcRequestDictionary removeAllObjects]; + [strongself->_rpcResponseHandlerMap removeAllObjects]; + [strongself->_commandHandlerMap removeAllObjects]; + [strongself->_buttonHandlerMap removeAllObjects]; + [strongself->_customButtonHandlerMap removeAllObjects]; + strongself->_audioPassThruHandler = nil; + }]; } - (void)sdl_addToCustomButtonHandlerMap:(NSArray *)softButtons { + __weak typeof(self) weakself = self; for (SDLSoftButton *sb in softButtons) { - if (!sb.softButtonID) { + if (sb.softButtonID == nil) { @throw [NSException sdl_missingIdException]; } - if (sb.handler) { - self.customButtonHandlerMap[sb.softButtonID] = sb.handler; + + if (sb.handler != nil) { + [self sdl_runAsyncOnQueue:^{ + __strong typeof(weakself) strongself = weakself; + strongself->_customButtonHandlerMap[sb.softButtonID] = sb.handler; + }]; } } } @@ -162,6 +222,7 @@ - (void)sdl_addToCustomButtonHandlerMap:(NSArray *)softButtons // Called by notifications - (void)sdl_runHandlersForResponse:(SDLRPCResponseNotification *)notification { + __weak typeof(self) weakself = self; if (![notification isResponseKindOfClass:[SDLRPCResponse class]]) { return; } @@ -169,50 +230,58 @@ - (void)sdl_runHandlersForResponse:(SDLRPCResponseNotification *)notification { __kindof SDLRPCResponse *response = notification.response; NSError *error = nil; - if (![response.success boolValue]) { + if (!response.success.boolValue) { error = [NSError sdl_lifecycle_rpcErrorWithDescription:response.resultCode andReason:response.info]; } + __block SDLResponseHandler handler = nil; + __block SDLRPCRequest *request = nil; + [self sdl_runSyncOnQueue:^{ + handler = self->_rpcResponseHandlerMap[response.correlationID]; + request = self->_rpcRequestDictionary[response.correlationID]; + }]; + // Find the appropriate request completion handler, remove the request and response handler - SDLResponseHandler handler = self.rpcResponseHandlerMap[response.correlationID]; - SDLRPCRequest *request = self.rpcRequestDictionary[response.correlationID]; - [self.rpcRequestDictionary safeRemoveObjectForKey:response.correlationID]; - [self.rpcResponseHandlerMap safeRemoveObjectForKey:response.correlationID]; - - // Run the response handler - if (handler) { - if (!response.success.boolValue) { - SDLLogW(@"Request failed: %@, response: %@, error: %@", request, response, error); + [self sdl_runAsyncOnQueue:^{ + __strong typeof(weakself) strongself = weakself; + [strongself->_rpcRequestDictionary safeRemoveObjectForKey:response.correlationID]; + [strongself->_rpcResponseHandlerMap safeRemoveObjectForKey:response.correlationID]; + + // If we errored on the response, the delete / unsubscribe was unsuccessful + if (error == nil) { + // If it's a DeleteCommand, UnsubscribeButton, or PerformAudioPassThru we need to remove handlers for the corresponding RPCs + if ([response isKindOfClass:[SDLDeleteCommandResponse class]]) { + SDLDeleteCommand *deleteCommandRequest = (SDLDeleteCommand *)request; + NSNumber *deleteCommandId = deleteCommandRequest.cmdID; + [strongself->_commandHandlerMap safeRemoveObjectForKey:deleteCommandId]; + } else if ([response isKindOfClass:[SDLUnsubscribeButtonResponse class]]) { + SDLUnsubscribeButton *unsubscribeButtonRequest = (SDLUnsubscribeButton *)request; + SDLButtonName unsubscribeButtonName = unsubscribeButtonRequest.buttonName; + [strongself->_buttonHandlerMap safeRemoveObjectForKey:unsubscribeButtonName]; + } else if ([response isKindOfClass:[SDLPerformAudioPassThruResponse class]]) { + strongself->_audioPassThruHandler = nil; + } } - handler(request, response, error); - } - - // If we errored on the response, the delete / unsubscribe was unsuccessful - if (error) { - return; - } - // If it's a DeleteCommand, UnsubscribeButton, or PerformAudioPassThru we need to remove handlers for the corresponding RPCs - if ([response isKindOfClass:[SDLDeleteCommandResponse class]]) { - SDLDeleteCommand *deleteCommandRequest = (SDLDeleteCommand *)request; - NSNumber *deleteCommandId = deleteCommandRequest.cmdID; - [self.commandHandlerMap safeRemoveObjectForKey:deleteCommandId]; - } else if ([response isKindOfClass:[SDLUnsubscribeButtonResponse class]]) { - SDLUnsubscribeButton *unsubscribeButtonRequest = (SDLUnsubscribeButton *)request; - SDLButtonName unsubscribeButtonName = unsubscribeButtonRequest.buttonName; - [self.buttonHandlerMap safeRemoveObjectForKey:unsubscribeButtonName]; - } else if ([response isKindOfClass:[SDLPerformAudioPassThruResponse class]]) { - _audioPassThruHandler = nil; - } + dispatch_async([SDLGlobals sharedGlobals].sdlProcessingQueue, ^{ + // Run the response handler + if (handler) { + if (!response.success.boolValue) { + SDLLogW(@"Request failed: %@, response: %@, error: %@", request, response, error); + } + handler(request, response, error); + } + }); + }]; } #pragma mark Command - (void)sdl_runHandlerForCommand:(SDLRPCNotificationNotification *)notification { SDLOnCommand *onCommandNotification = notification.notification; - SDLRPCCommandNotificationHandler handler = self.commandHandlerMap[onCommandNotification.cmdID]; - if (handler) { + SDLRPCCommandNotificationHandler handler = self.commandHandlerMap[onCommandNotification.cmdID]; + if (handler != nil) { handler(onCommandNotification); } } @@ -223,7 +292,6 @@ - (void)sdl_runHandlerForButton:(SDLRPCNotificationNotification *)notification { __kindof SDLRPCNotification *rpcNotification = notification.notification; SDLButtonName name = nil; NSNumber *customID = nil; - SDLRPCButtonNotificationHandler handler = nil; if ([rpcNotification isMemberOfClass:[SDLOnButtonEvent class]]) { name = ((SDLOnButtonEvent *)rpcNotification).buttonName; @@ -235,6 +303,7 @@ - (void)sdl_runHandlerForButton:(SDLRPCNotificationNotification *)notification { return; } + SDLRPCButtonNotificationHandler handler = nil; if ([name isEqualToEnum:SDLButtonNameCustomButton]) { // Custom buttons handler = self.customButtonHandlerMap[customID]; @@ -258,12 +327,87 @@ - (void)sdl_runHandlerForButton:(SDLRPCNotificationNotification *)notification { - (void)sdl_runHandlerForAudioPassThru:(SDLRPCNotificationNotification *)notification { SDLOnAudioPassThru *onAudioPassThruNotification = notification.notification; - - if (self.audioPassThruHandler) { - self.audioPassThruHandler(onAudioPassThruNotification.bulkData); + + SDLAudioPassThruHandler handler = self.audioPassThruHandler; + if (handler != nil) { + handler(onAudioPassThruNotification.bulkData); } } +#pragma mark Utilities + +- (void)sdl_runSyncOnQueue:(void (^)(void))block { + if (dispatch_get_specific(SDLProcessingQueueName) != nil) { + block(); + } else { + dispatch_sync(self.readWriteQueue, block); + } +} + +- (void)sdl_runAsyncOnQueue:(void (^)(void))block { + if (dispatch_get_specific(SDLProcessingQueueName) != nil) { + block(); + } else { + dispatch_async(self.readWriteQueue, block); + } +} + +#pragma mark Getters + +- (NSMapTable *)rpcResponseHandlerMap { + __block NSMapTable *map = nil; + [self sdl_runSyncOnQueue:^{ + map = self->_rpcResponseHandlerMap; + }]; + + return map; +} + +- (NSMutableDictionary *)rpcRequestDictionary { + __block NSMutableDictionary *dict = nil; + [self sdl_runSyncOnQueue:^{ + dict = self->_rpcRequestDictionary; + }]; + + return dict; +} + +- (NSMapTable *)commandHandlerMap { + __block NSMapTable *map = nil; + [self sdl_runSyncOnQueue:^{ + map = self->_commandHandlerMap; + }]; + + return map; +} + +- (NSMapTable *)buttonHandlerMap { + __block NSMapTable *map = nil; + [self sdl_runSyncOnQueue:^{ + map = self->_buttonHandlerMap; + }]; + + return map; +} + +- (NSMapTable *)customButtonHandlerMap { + __block NSMapTable *map = nil; + [self sdl_runSyncOnQueue:^{ + map = self->_customButtonHandlerMap; + }]; + + return map; +} + +- (nullable SDLAudioPassThruHandler)audioPassThruHandler { + __block SDLAudioPassThruHandler audioPassThruHandler = nil; + [self sdl_runSyncOnQueue:^{ + audioPassThruHandler = self->_audioPassThruHandler; + }]; + + return audioPassThruHandler; +} + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLSecondaryTransportManager.h b/SmartDeviceLink/SDLSecondaryTransportManager.h index 0af612d7e..85f3cc79e 100644 --- a/SmartDeviceLink/SDLSecondaryTransportManager.h +++ b/SmartDeviceLink/SDLSecondaryTransportManager.h @@ -36,44 +36,21 @@ extern SDLSecondaryTransportState *const SDLSecondaryTransportStateReconnecting; */ @interface SDLSecondaryTransportManager : NSObject -/** state of this manager */ -@property (strong, nonatomic, readonly) SDLStateMachine *stateMachine; - -/** - Create a new secondary transport manager. - - @param streamingProtocolDelegate a delegate to handle updates on protocol instances - @param queue a serial dispatch queue that the internal state machine runs on - @return A new secondary transport manager - */ +/// Create a new secondary transport manager. +/// @param streamingProtocolDelegate a delegate to handle updates on protocol instances +/// @param queue a serial dispatch queue that the internal state machine runs on - (instancetype)initWithStreamingProtocolDelegate:(id)streamingProtocolDelegate serialQueue:(dispatch_queue_t)queue; -/** - * Start the manager. - - @param primaryProtocol protocol that runs on the main (primary) transport - */ +/// Start the manager. +/// @param primaryProtocol The protocol that runs on the main (primary) transport - (void)startWithPrimaryProtocol:(SDLProtocol *)primaryProtocol; -/** - * Stop the manager. - */ +/// Stop the manager. - (void)stop; -/** - * Call this method when Start Service ACK control frame is received on primary transport. - - @param payload payload of Start Service ACK frame received on the primary transport - */ -- (void)onStartServiceAckReceived:(SDLControlFramePayloadRPCStartServiceAck *)payload; - -/** - * Call this method when Transport Event Update control frame is received on primary transport. - - @param payload payload of Transport Event Update frame received on the primary transport - */ -- (void)onTransportEventUpdateReceived:(SDLControlFramePayloadTransportEventUpdate *)payload; +/// Destroys the secondary transport. +- (BOOL)disconnectSecondaryTransport; @end diff --git a/SmartDeviceLink/SDLSecondaryTransportManager.m b/SmartDeviceLink/SDLSecondaryTransportManager.m index 860abcbaf..a65bd4bb3 100644 --- a/SmartDeviceLink/SDLSecondaryTransportManager.m +++ b/SmartDeviceLink/SDLSecondaryTransportManager.m @@ -11,15 +11,18 @@ #import "SDLSecondaryTransportManager.h" +#import "SDLBackgroundTaskManager.h" #import "SDLControlFramePayloadConstants.h" #import "SDLControlFramePayloadRPCStartServiceAck.h" #import "SDLControlFramePayloadTransportEventUpdate.h" #import "SDLIAPTransport.h" #import "SDLLogMacros.h" +#import "SDLOnHMIStatus.h" #import "SDLProtocol.h" #import "SDLProtocolHeader.h" +#import "SDLProtocolMessage.h" #import "SDLNotificationConstants.h" -#import "SDLSecondaryTransportPrimaryProtocolHandler.h" +#import "SDLRPCNotificationNotification.h" #import "SDLStateMachine.h" #import "SDLTCPTransport.h" #import "SDLTimer.h" @@ -50,6 +53,9 @@ typedef NS_ENUM(NSInteger, SDLSecondaryTransportType) { SDLSecondaryTransportState *const SDLSecondaryTransportStateRegistered = @"Registered"; SDLSecondaryTransportState *const SDLSecondaryTransportStateReconnecting = @"Reconnecting"; +/// Name for the background task started when the device app is backgrounded. +NSString *const BackgroundTaskSecondaryTransportName = @"com.sdl.transport.secondaryTransportBackgroundTask"; + // Timeout for receiving Register Secondary Transport ACK frame static const float RegisterTransportTime = 10.0; @@ -59,25 +65,30 @@ typedef NS_ENUM(NSInteger, SDLSecondaryTransportType) { // Indicates that a TCP port is not specified (unconfigured). static const int TCPPortUnspecified = -1; +/// The old and new protocols being used when the transport switches. If the old protocol is `nil`, the transport is not yet started; newProtocol is `nil` the transport will be stopped. +struct TransportProtocolUpdated { + SDLProtocol * _Nullable oldProtocol; + SDLProtocol * _Nullable newProtocol; +} transportUpdated; @interface SDLSecondaryTransportManager () -// State of this manager. -@property (strong, nonatomic, readwrite) SDLStateMachine *stateMachine; +/// State of this manager. +@property (strong, nonatomic) SDLStateMachine *stateMachine; // Dedicated queue that the state machine will run on. @property (copy, nonatomic) dispatch_queue_t stateMachineQueue; // Instance of the protocol that runs on primary transport. @property (strong, nonatomic) SDLProtocol *primaryProtocol; -// A class to catch Start Service ACK and Transport Config Update frames. -@property (strong, nonatomic) SDLSecondaryTransportPrimaryProtocolHandler *primaryProtocolHandler; +/// The header of the Start Service ACK frame received on primary transport +@property (copy, nonatomic) SDLProtocolHeader *primaryRPCHeader; // Selected type of secondary transport. If 'SDLSecondaryTransportTypeDisabled' then secondary transport is disabled. @property (assign, nonatomic) SDLSecondaryTransportType secondaryTransportType; // Instance of the transport for secondary transport. -@property (nullable, strong, nonatomic) id secondaryTransport; +@property (strong, nonatomic, nullable) id secondaryTransport; // Instance of the protocol that runs on secondary transport. -@property (nullable, strong, nonatomic) SDLProtocol *secondaryProtocol; +@property (strong, nonatomic, nullable) SDLProtocol *secondaryProtocol; // Timer to check Register Secondary Transport ACK response on secondary transport. @property (strong, nonatomic, nullable) SDLTimer *registerTransportTimer; @@ -85,9 +96,9 @@ @interface SDLSecondaryTransportManager () @property (weak, nonatomic) id streamingProtocolDelegate; // Configuration sent by system; list of transports that are allowed to carry audio service -@property (strong, nonatomic, nonnull) NSArray *transportsForAudioService; +@property (strong, nonatomic) NSArray *transportsForAudioService; // Configuration sent by system; list of transports that are allowed to carry video service -@property (strong, nonatomic, nonnull) NSArray *transportsForVideoService; +@property (strong, nonatomic) NSArray *transportsForVideoService; // A map to remember which service is currently running on which transport @property (strong, nonatomic) NSMutableDictionary *streamingServiceTransportMap; @@ -95,8 +106,12 @@ @interface SDLSecondaryTransportManager () @property (strong, nonatomic, nullable) NSString *ipAddress; // TCP port number of SDL Core. If the information isn't available then TCPPortUnspecified is stored. @property (assign, nonatomic) int tcpPort; -// App is ready to set security manager to secondary protocol -@property (assign, nonatomic, getter=isAppReady) BOOL appReady; + +/// The current hmi level of the SDL app. +@property (strong, nonatomic, nullable) SDLHMILevel currentHMILevel; + +/// A background task used to close the secondary transport before the app is suspended. +@property (strong, nonatomic) SDLBackgroundTaskManager *backgroundTaskManager; @end @@ -122,7 +137,9 @@ - (instancetype)initWithStreamingProtocolDelegate:(id *secondaryTransports = nil; - if (payload.secondaryTransports != nil) { - secondaryTransports = [NSMutableArray array]; - for (NSString *transportString in payload.secondaryTransports) { - SDLSecondaryTransportType transport = [self sdl_convertTransportType:transportString]; - [secondaryTransports addObject:@(transport)]; - } - } - NSArray *transportsForAudio = [self sdl_convertServiceTransports:payload.audioServiceTransports]; - NSArray *transportsForVideo = [self sdl_convertServiceTransports:payload.videoServiceTransports]; - - SDLLogV(@"Secondary transports: %@, transports for audio: %@, transports for video: %@", secondaryTransports, transportsForAudio, transportsForVideo); - - dispatch_async(_stateMachineQueue, ^{ - [self sdl_configureManager:secondaryTransports availableTransportsForAudio:transportsForAudio availableTransportsForVideo:transportsForVideo]; - }); -} - -// called from SDLProtocol's _receiveQueue of "primary" transport -- (void)onTransportEventUpdateReceived:(SDLControlFramePayloadTransportEventUpdate *)payload { - dispatch_async(_stateMachineQueue, ^{ - BOOL updated = NO; - - if (payload.tcpIpAddress != nil) { - if (![self.ipAddress isEqualToString:payload.tcpIpAddress]) { - self.ipAddress = payload.tcpIpAddress; - updated = YES; - SDLLogD(@"TCP transport IP address updated: %@", self.ipAddress); - } - } - if (payload.tcpPort != SDLControlFrameInt32NotFound) { - if (self.tcpPort != payload.tcpPort) { - self.tcpPort = payload.tcpPort; - updated = YES; - SDLLogD(@"TCP transport port number updated: %d", self.tcpPort); - } - } - - if (updated) { - [self sdl_handleTransportEventUpdate]; - } - }); -} - -#pragma mark - State machine - -+ (NSDictionary *)sdl_stateTransitionDictionary { - return @{ - SDLSecondaryTransportStateStopped: @[SDLSecondaryTransportStateStarted], - SDLSecondaryTransportStateStarted: @[SDLSecondaryTransportStateConfigured, SDLSecondaryTransportStateStopped], - SDLSecondaryTransportStateConfigured: @[SDLSecondaryTransportStateConnecting, SDLSecondaryTransportStateStopped], - SDLSecondaryTransportStateConnecting: @[SDLSecondaryTransportStateRegistered, SDLSecondaryTransportStateConfigured, SDLSecondaryTransportStateReconnecting, SDLSecondaryTransportStateStopped], - SDLSecondaryTransportStateRegistered: @[SDLSecondaryTransportStateReconnecting, SDLSecondaryTransportStateConfigured, SDLSecondaryTransportStateStopped], - SDLSecondaryTransportStateReconnecting: @[SDLSecondaryTransportStateConfigured, SDLSecondaryTransportStateStopped] - }; -} - -- (void)didEnterStateStopped { - [self sdl_stopManager]; -} - -- (void)didEnterStateStarted { - [self sdl_startManager]; -} - -- (void)didEnterStateConfigured { - if ((self.secondaryTransportType == SDLSecondaryTransportTypeTCP && [self sdl_isTCPReady] && self.isAppReady) - || (self.secondaryTransportType == SDLSecondaryTransportTypeIAP && self.isAppReady)) { - [self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting]; - } -} - -- (void)didEnterStateConnecting { - [self sdl_connectSecondaryTransport]; -} - -- (void)willLeaveStateConnecting { - // make sure to terminate the timer, which is only used in Connecting state - [self.registerTransportTimer cancel]; - self.registerTransportTimer = nil; -} - -- (void)willTransitionFromStateConnectingToStateConfigured { - [self sdl_disconnectSecondaryTransport]; -} - -- (void)willTransitionFromStateConnectingToStateReconnecting { - [self sdl_disconnectSecondaryTransport]; -} - -- (void)willTransitionFromStateConnectingToStateStopped { - [self sdl_disconnectSecondaryTransport]; -} - -- (void)didEnterStateRegistered { - [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:YES]; -} - -- (void)willTransitionFromStateRegisteredToStateConfigured { - // before disconnecting Secondary Transport, stop running services - SDLLogD(@"Stopping services on secondary transport"); - [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:NO]; - - [self sdl_disconnectSecondaryTransport]; -} - -- (void)willTransitionFromStateRegisteredToStateReconnecting { - SDLLogD(@"Stopping services on secondary transport"); - [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:NO]; - - [self sdl_disconnectSecondaryTransport]; -} - -- (void)willTransitionFromStateRegisteredToStateStopped { - // sdl_handleTransportUpdateWithPrimaryAvailable is called in stop method - [self sdl_disconnectSecondaryTransport]; -} - -- (void)didEnterStateReconnecting { - self.appReady = NO; - __weak typeof(self) weakSelf = self; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(RetryConnectionDelay * NSEC_PER_SEC)), _stateMachineQueue, ^{ - if ([weakSelf.stateMachine isCurrentState:SDLSecondaryTransportStateReconnecting]) { - SDLLogD(@"Retry secondary transport after disconnection or registration failure"); - [weakSelf.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; - } - }); -} +#pragma mark - Manager Lifecycle - (void)sdl_startManager { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_onAppStateUpdated:) name:UIApplicationDidBecomeActiveNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_onAppStateUpdated:) name:UIApplicationWillResignActiveNotification object:nil]; - - [self.primaryProtocolHandler start]; } - (void)sdl_stopManager { @@ -305,8 +194,6 @@ - (void)sdl_stopManager { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; - [self.primaryProtocolHandler stop]; - self.streamingServiceTransportMap = [@{@(SDLServiceTypeAudio):@(SDLTransportClassInvalid), @(SDLServiceTypeVideo):@(SDLTransportClassInvalid)} mutableCopy]; self.secondaryTransportType = SDLSecondaryTransportTypeDisabled; @@ -315,6 +202,7 @@ - (void)sdl_stopManager { self.ipAddress = nil; self.tcpPort = TCPPortUnspecified; + self.currentHMILevel = nil; } - (void)sdl_configureManager:(nullable NSArray *)availableSecondaryTransports @@ -361,62 +249,90 @@ - (void)sdl_configureManager:(nullable NSArray * [self.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; } -- (void)sdl_handleTransportEventUpdate { - if ([self.stateMachine isCurrentState:SDLSecondaryTransportStateStarted]) { - // The system sent Transport Event Update frame prior to Start Service ACK. Just keep the information and do nothing here. - SDLLogV(@"Received TCP transport information prior to Start Service ACK"); - return; - } - if (self.secondaryTransportType != SDLSecondaryTransportTypeTCP) { - SDLLogV(@"Received TCP transport information while the transport is not TCP"); - return; - } +#pragma mark - State machine - if ([self.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured] && [self sdl_isTCPReady] && self.isAppReady) { ++ (NSDictionary *)sdl_stateTransitionDictionary { + return @{ + SDLSecondaryTransportStateStopped: @[SDLSecondaryTransportStateStarted], + SDLSecondaryTransportStateStarted: @[SDLSecondaryTransportStateConfigured, SDLSecondaryTransportStateStopped], + SDLSecondaryTransportStateConfigured: @[SDLSecondaryTransportStateConnecting, SDLSecondaryTransportStateStopped], + SDLSecondaryTransportStateConnecting: @[SDLSecondaryTransportStateRegistered, SDLSecondaryTransportStateConfigured, SDLSecondaryTransportStateReconnecting, SDLSecondaryTransportStateStopped], + SDLSecondaryTransportStateRegistered: @[SDLSecondaryTransportStateReconnecting, SDLSecondaryTransportStateConfigured, SDLSecondaryTransportStateStopped], + SDLSecondaryTransportStateReconnecting: @[SDLSecondaryTransportStateConfigured, SDLSecondaryTransportStateStopped] + }; +} + +- (void)didEnterStateStopped { + SDLLogD(@"Secondary transport manager stopped"); + [self sdl_stopManager]; +} + +- (void)didEnterStateStarted { + SDLLogD(@"Secondary transport manager started"); + [self sdl_startManager]; +} + +- (void)didEnterStateConfigured { + SDLLogD(@"Secondary transport manager is configured"); + // If this is a TCP transport, check if it's ready. If it's IAP, we can just continue. In both cases, check if HMI level is Non-NONE + // https://github.com/smartdevicelink/sdl_evolution/blob/master/proposals/0214-secondary-transport-optimization.md + if (((self.secondaryTransportType == SDLSecondaryTransportTypeTCP && self.sdl_isTCPReady) + || self.secondaryTransportType == SDLSecondaryTransportTypeIAP) + && self.sdl_isHMILevelNonNone) { [self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting]; - } else if ([self sdl_isTransportOpened]) { - // Disconnect current transport. If the IP address is available then we will reconnect immediately. - SDLLogD(@"TCP transport information updated, disconnecting current transport"); - [self.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; - } else if ([self.stateMachine isCurrentState:SDLSecondaryTransportStateReconnecting]) { - SDLLogD(@"TCP transport information updated, aborting reconnection timer"); - [self.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; } } -- (BOOL)sdl_isTransportOpened { - return [self.stateMachine isCurrentState:SDLSecondaryTransportStateConnecting] - || [self.stateMachine isCurrentState:SDLSecondaryTransportStateRegistered]; +- (void)didEnterStateConnecting { + SDLLogD(@"Secondary transport is connecting"); + [self sdl_connectSecondaryTransport]; +} + +- (void)willLeaveStateConnecting { + // make sure to terminate the timer, which is only used in Connecting state + [self.registerTransportTimer cancel]; + self.registerTransportTimer = nil; +} + +- (void)didEnterStateRegistered { + SDLLogD(@"Secondary transport is registered"); + [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:YES]; +} + +- (void)willTransitionFromStateRegisteredToStateConfigured { + SDLLogD(@"Manger is closing transport but is configured to resume the secondary transport. Stopping services on secondary transport"); + [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:NO]; +} + +- (void)willTransitionFromStateRegisteredToStateReconnecting { + SDLLogD(@"Manger is closing transport but will try to reconnect if configured correctly. Stopping services on secondary transport"); + [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:NO]; +} + +- (void)didEnterStateReconnecting { + SDLLogD(@"Secondary transport is reconnecting"); + __weak typeof(self) weakSelf = self; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(RetryConnectionDelay * NSEC_PER_SEC)), _stateMachineQueue, ^{ + if ([weakSelf.stateMachine isCurrentState:SDLSecondaryTransportStateReconnecting]) { + SDLLogD(@"Attempting reconnection"); + [weakSelf.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; + } + }); } #pragma mark - Starting / Stopping / Restarting services - (void)sdl_handleTransportUpdateWithPrimaryAvailable:(BOOL)primaryAvailable secondaryAvailable:(BOOL)secondaryAvailable { - // update audio service - [self sdl_updateService:SDLServiceTypeAudio - allowedTransports:self.transportsForAudioService - primaryAvailable:primaryAvailable - secondaryAvailable:secondaryAvailable - transportUpdatedBlock:^(SDLProtocol * _Nullable oldProtocol, SDLProtocol * _Nullable newProtocol) { - [self.streamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:oldProtocol toNewProtocol:newProtocol]; - }]; - - // update video service - [self sdl_updateService:SDLServiceTypeVideo - allowedTransports:self.transportsForVideoService - primaryAvailable:primaryAvailable - secondaryAvailable:secondaryAvailable - transportUpdatedBlock:^(SDLProtocol * _Nullable oldProtocol, SDLProtocol * _Nullable newProtocol) { - [self.streamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:oldProtocol toNewProtocol:newProtocol]; - }]; -} - -- (void)sdl_updateService:(UInt8)service - allowedTransports:(nonnull NSArray *)transportList - primaryAvailable:(BOOL)primaryTransportAvailable - secondaryAvailable:(BOOL)secondaryTransportAvailable - transportUpdatedBlock:(void (^)(SDLProtocol * _Nullable oldProtocol, SDLProtocol * _Nullable newProtocol))transportUpdatedBlock { + struct TransportProtocolUpdated audioTransportUpdated = [self sdl_updateService:SDLServiceTypeAudio allowedTransports:self.transportsForAudioService primaryAvailable:primaryAvailable secondaryAvailable:secondaryAvailable]; + struct TransportProtocolUpdated videoTransportUpdated = [self sdl_updateService:SDLServiceTypeVideo allowedTransports:self.transportsForVideoService primaryAvailable:primaryAvailable secondaryAvailable:secondaryAvailable]; + + if (audioTransportUpdated.newProtocol == audioTransportUpdated.oldProtocol && videoTransportUpdated.newProtocol == videoTransportUpdated.oldProtocol) { return; } + + [self.streamingProtocolDelegate didUpdateFromOldVideoProtocol:videoTransportUpdated.oldProtocol toNewVideoProtocol:videoTransportUpdated.newProtocol fromOldAudioProtocol:audioTransportUpdated.oldProtocol toNewAudioProtocol:audioTransportUpdated.newProtocol]; +} + +- (struct TransportProtocolUpdated)sdl_updateService:(SDLServiceType)service allowedTransports:(nonnull NSArray *)transportList primaryAvailable:(BOOL)primaryTransportAvailable secondaryAvailable:(BOOL)secondaryTransportAvailable { SDLTransportClass newTransport = SDLTransportClassInvalid; // the list is in preferred order, so take a look from the beginning for (SDLTransportClassBox *transport in transportList) { @@ -442,10 +358,14 @@ - (void)sdl_updateService:(UInt8)service } else if (newTransport != SDLTransportClassInvalid) { SDLLogD(@"Starting service 0x%X on %@ transport", service, [self sdl_getTransportClassName:newTransport]); } - - transportUpdatedBlock([self sdl_getProtocolFromTransportClass:oldTransport], - [self sdl_getProtocolFromTransportClass:newTransport]); + } else { + SDLLogV(@"Transport was not updated"); } + + struct TransportProtocolUpdated transportUpdated; + transportUpdated.oldProtocol = [self sdl_getProtocolFromTransportClass:oldTransport]; + transportUpdated.newProtocol = [self sdl_getProtocolFromTransportClass:newTransport]; + return transportUpdated; } - (nullable SDLProtocol *)sdl_getProtocolFromTransportClass:(SDLTransportClass)transportClass { @@ -467,6 +387,28 @@ - (nullable NSString *)sdl_getTransportClassName:(SDLTransportClass)transportCla #pragma mark - Transport management +#pragma mark Primary transport +- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK { + if (startServiceACK.header.serviceType != SDLServiceTypeRPC) { return; } + SDLLogV(@"Received Start Service ACK header of RPC service on primary transport"); + + // Keep header to acquire Session ID + self.primaryRPCHeader = startServiceACK.header; + + SDLControlFramePayloadRPCStartServiceAck *payload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithData:startServiceACK.payload]; + + [self sdl_onStartServiceAckReceived:payload]; +} + +- (void)handleTransportEventUpdateMessage:(SDLProtocolMessage *)transportEventUpdate { + SDLControlFramePayloadTransportEventUpdate *payload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithData:transportEventUpdate.payload]; + SDLLogV(@"Recieved transport event update on primary transport: %@", payload); + + [self sdl_onTransportEventUpdateReceived:payload]; +} + +#pragma mark Secondary transport + // try establishing secondary transport. Returns NO if failed - (BOOL)sdl_connectSecondaryTransport { if (self.secondaryTransport != nil) { @@ -485,15 +427,18 @@ - (BOOL)sdl_connectSecondaryTransport { } } -- (BOOL)sdl_disconnectSecondaryTransport { +- (BOOL)disconnectSecondaryTransport { if (self.secondaryTransport == nil) { - SDLLogW(@"Attempted to disconnect secondary transport, but it's already stopped."); + SDLLogW(@"Attempted to disconnect secondary transport but it's already stopped."); return NO; } - SDLLogD(@"Disconnect secondary transport"); + SDLLogD(@"Disconnecting secondary transport"); [self.secondaryTransport disconnect]; self.secondaryTransport = nil; + self.secondaryProtocol = nil; + + [self.backgroundTaskManager endBackgroundTask]; return YES; } @@ -512,17 +457,19 @@ - (BOOL)sdl_startTCPSecondaryTransport { SDLProtocol *protocol = [[SDLProtocol alloc] init]; transport.delegate = protocol; protocol.transport = transport; - [protocol.protocolDelegateTable addObject:self]; protocol.securityManager = self.primaryProtocol.securityManager; - self.secondaryProtocol = protocol; self.secondaryTransport = transport; + @synchronized(self.secondaryProtocol.protocolDelegateTable) { + [self.secondaryProtocol.protocolDelegateTable addObject:self]; + } + // we reuse Session ID acquired from primary transport's protocol // this is for Register Secondary Transport frame - [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeControl]; + [self.secondaryProtocol storeHeader:self.primaryRPCHeader forServiceType:SDLServiceTypeControl]; // this is for video and audio services - [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeRPC]; + [self.secondaryProtocol storeHeader:self.primaryRPCHeader forServiceType:SDLServiceTypeRPC]; [self.secondaryTransport connect]; return YES; @@ -535,17 +482,19 @@ - (BOOL)sdl_startIAPSecondaryTransport { SDLProtocol *protocol = [[SDLProtocol alloc] init]; transport.delegate = protocol; protocol.transport = transport; - [protocol.protocolDelegateTable addObject:self]; protocol.securityManager = self.primaryProtocol.securityManager; - self.secondaryProtocol = protocol; self.secondaryTransport = transport; + @synchronized(self.secondaryProtocol.protocolDelegateTable) { + [self.secondaryProtocol.protocolDelegateTable addObject:self]; + } + // we reuse Session ID acquired from primary transport's protocol // this is for Register Secondary Transport frame - [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeControl]; + [self.secondaryProtocol storeHeader:self.primaryRPCHeader forServiceType:SDLServiceTypeControl]; // this is for video and audio services - [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeRPC]; + [self.secondaryProtocol storeHeader:self.primaryRPCHeader forServiceType:SDLServiceTypeRPC]; [self.secondaryTransport connect]; return YES; @@ -565,8 +514,8 @@ - (BOOL)sdl_isTCPReady { return NO; } - if ([self sdl_getAppState] != UIApplicationStateActive) { - SDLLogD(@"App state is not Active, abort starting TCP transport"); + if (self.sdl_getAppState != UIApplicationStateActive) { + SDLLogD(@"App state is not Active, TCP transport is not ready"); return NO; } @@ -606,6 +555,8 @@ - (void)onProtocolOpened { if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateConnecting]) { SDLLogD(@"Retry secondary transport connection after registration timeout"); [strongSelf.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; + } else { + SDLLogD(@"Will not retry secondary transport connection because current state is: %@", strongSelf.stateMachine.currentState); } }); }; @@ -614,6 +565,11 @@ - (void)onProtocolOpened { [self.secondaryProtocol registerSecondaryTransport]; } +- (void)onTransportError:(NSError *)error { + SDLLogE(@"The transport errored. Disconnecting the transport"); + [self disconnectSecondaryTransport]; +} + // called on transport's thread, notifying that the transport is disconnected // (Note: when transport's disconnect method is called, this method will not be called) - (void)onProtocolClosed { @@ -645,25 +601,137 @@ - (void)handleProtocolRegisterSecondaryTransportNAKMessage:(SDLProtocolMessage * }); } +/// Called when a Start Service ACK control frame is received on the primary transport. +/// @param payload The payload of Start Service ACK frame received on the primary transport. +- (void)sdl_onStartServiceAckReceived:(SDLControlFramePayloadRPCStartServiceAck *)payload { + NSMutableArray *secondaryTransports = nil; + if (payload.secondaryTransports != nil) { + secondaryTransports = [NSMutableArray array]; + for (NSString *transportString in payload.secondaryTransports) { + SDLSecondaryTransportType transport = [self sdl_convertTransportType:transportString]; + [secondaryTransports addObject:@(transport)]; + } + } + + NSArray *transportsForAudio = [self sdl_convertServiceTransports:payload.audioServiceTransports]; + NSArray *transportsForVideo = [self sdl_convertServiceTransports:payload.videoServiceTransports]; + + SDLLogV(@"Secondary transports: %@, transports for audio: %@, transports for video: %@", secondaryTransports, transportsForAudio, transportsForVideo); + + dispatch_async(_stateMachineQueue, ^{ + [self sdl_configureManager:secondaryTransports availableTransportsForAudio:transportsForAudio availableTransportsForVideo:transportsForVideo]; + }); +} + +/// Called when a Transport Event Update control frame is received on the primary transport. +/// @param payload the payload of Transport Event Update frame +- (void)sdl_onTransportEventUpdateReceived:(SDLControlFramePayloadTransportEventUpdate *)payload { + dispatch_async(_stateMachineQueue, ^{ + BOOL updated = NO; + + if (payload.tcpIpAddress != nil) { + if (![self.ipAddress isEqualToString:payload.tcpIpAddress]) { + self.ipAddress = payload.tcpIpAddress; + updated = YES; + SDLLogD(@"TCP transport IP address updated: %@", self.ipAddress); + } + } + if (payload.tcpPort != SDLControlFrameInt32NotFound) { + if (self.tcpPort != payload.tcpPort) { + self.tcpPort = payload.tcpPort; + updated = YES; + SDLLogD(@"TCP transport port number updated: %d", self.tcpPort); + } + } + + if (updated) { + [self sdl_handleTransportEventUpdate]; + } + }); +} + +- (void)sdl_handleTransportEventUpdate { + if ([self.stateMachine isCurrentState:SDLSecondaryTransportStateStarted]) { + // The system sent Transport Event Update frame prior to Start Service ACK. Just keep the information and do nothing here. + SDLLogV(@"Received TCP transport information prior to Start Service ACK"); + return; + } + if (self.secondaryTransportType != SDLSecondaryTransportTypeTCP) { + SDLLogV(@"Received TCP transport information while the transport is not TCP"); + return; + } + + if ([self.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured] && self.sdl_isTCPReady && self.sdl_isHMILevelNonNone) { + [self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting]; + } else if ([self sdl_isTransportOpened]) { + // Disconnect current transport. If the IP address is available then we will reconnect immediately. + SDLLogD(@"TCP transport information updated, disconnecting current transport"); + [self.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; + } else if ([self.stateMachine isCurrentState:SDLSecondaryTransportStateReconnecting]) { + SDLLogD(@"TCP transport information updated, aborting reconnection timer"); + [self.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; + } +} + #pragma mark - App state handling +/// Closes and re-opens the the secondary transport when the app is backgrounded and foregrounded on the device respectively. This is done because sockets can be reclaimed by the system at anytime when the app is not in the foreground. +/// @param notification Notification from the OS that the app's life-cycle state has changed - (void)sdl_onAppStateUpdated:(NSNotification *)notification { - dispatch_async(_stateMachineQueue, ^{ + __weak typeof(self) weakSelf = self; + dispatch_async(self.stateMachineQueue, ^{ + __strong typeof(self) strongSelf = weakSelf; if (notification.name == UIApplicationWillResignActiveNotification) { - if ([self sdl_isTransportOpened] && self.secondaryTransportType == SDLSecondaryTransportTypeTCP) { - SDLLogD(@"Disconnecting TCP transport since the app will go to background"); - [self.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; + SDLLogD(@"App will enter the background"); + if ([strongSelf sdl_isTransportOpened] && strongSelf.secondaryTransportType == SDLSecondaryTransportTypeTCP) { + SDLLogD(@"Starting background task to keep TCP transport alive"); + strongSelf.backgroundTaskManager.taskExpiringHandler = [strongSelf sdl_backgroundTaskEndedHandler]; + [strongSelf.backgroundTaskManager startBackgroundTask]; + } else { + SDLLogD(@"TCP transport already disconnected, will not start a background task."); } } else if (notification.name == UIApplicationDidBecomeActiveNotification) { - if (([self.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured]) - && self.secondaryTransportType == SDLSecondaryTransportTypeTCP && [self sdl_isTCPReady] && self.isAppReady) { - SDLLogD(@"Resuming TCP transport since the app becomes foreground"); - [self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting]; + SDLLogD(@"App entered the foreground"); + if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateRegistered]) { + SDLLogD(@"In the registered state; TCP transport has not yet been shutdown. Ending the background task."); + [strongSelf.backgroundTaskManager endBackgroundTask]; + } else if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured] + && strongSelf.secondaryTransportType == SDLSecondaryTransportTypeTCP + && [strongSelf sdl_isTCPReady] + && [strongSelf sdl_isHMILevelNonNone]) { + SDLLogD(@"In the configured state; restarting the TCP transport. Ending the background task."); + [strongSelf.backgroundTaskManager endBackgroundTask]; + [strongSelf.stateMachine transitionToState:SDLSecondaryTransportStateConnecting]; + } else { + SDLLogD(@"TCP transport not ready to start, our current state is: %@", strongSelf.stateMachine.currentState); } } }); } +/// Handles a notification that the background task is about to expire. If the app is still backgrounded we must close the TCP socket, which can take a few moments to complete. When this manager transitons to the Configured state, the `SDLStreamingMediaManager` is notified that the secondary transport wants to shutdown via the `streamingProtocolDelegate`. The `SDLStreamingMediaManager` sends an end video service control frame and an end audio service control frame and waits for responses to both requests from the module. Once the module has responded to both end service requests, the `SDLStreamingMediaManager` notifies us that the TCP socket can be shutdown by calling the `disconnectSecondaryTransport` method. Finally, once we know the socket has shutdown, we can end the background task. To ensure that all the shutdown steps are performed, we must delay shutting down the background task, otherwise some of the steps might not complete due to the app being suspended. Improper shutdown can cause trouble when establishing a new streaming session as either the new TCP connection will fail (due to the TCP socket's I/O streams not shutting down) or restarting the video and audio streams can fail (due to Core not receiving the end service requests). On the other hand, we can end the background task immediately if the app has re-entered the foreground or the manager has shutdown as no cleanup needs to be performed. +/// @return A background task ended handler +- (nullable BOOL (^)(void))sdl_backgroundTaskEndedHandler { + __weak typeof(self) weakSelf = self; + return ^{ + __strong typeof(self) strongSelf = weakSelf; + if (strongSelf.sdl_getAppState == UIApplicationStateActive || [strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateStopped]) { + // Return NO as we do not need to perform any cleanup and can end the background task immediately + SDLLogV(@"No cleanup needed since app has been foregrounded."); + return NO; + } else if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateStopped]) { + // Return NO as we do not need to perform any cleanup and can end the background task immediately + SDLLogV(@"No cleanup needed since manager has been stopped."); + return NO; + } else { + // Return YES as we want to delay ending the background task until shutdown of the secondary transport has finished. Transitoning to the Configured state starts the process of shutting down the streaming services and the TCP socket which can take a few moments to complete. Once the streaming services have shutdown, the `SDLStreamingMediaManager` calls the `disconnectSecondaryTransport` method. The `disconnectSecondaryTransport` takes care of destroying the background task after disconnecting the TCP transport. + SDLLogD(@"Performing cleanup due to the background task expiring: disconnecting the TCP transport."); + [strongSelf.stateMachine transitionToState:SDLSecondaryTransportStateConfigured]; + return YES; + } + }; +} + #pragma mark - Utility methods - (SDLSecondaryTransportType)sdl_convertTransportType:(NSString *)transportString { @@ -713,11 +781,33 @@ - (SDLSecondaryTransportType)sdl_getTransportTypeFromProtocol:(SDLProtocol *)pro } } -- (void)appDidBecomeReady { - self.appReady = YES; - if (([self.stateMachine.currentState isEqualToString:SDLSecondaryTransportStateConfigured] && self.tcpPort != SDLControlFrameInt32NotFound && self.ipAddress != nil) - || self.secondaryTransportType == SDLSecondaryTransportTypeIAP) { - [self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting]; +- (BOOL)sdl_isTransportOpened { + return [self.stateMachine isCurrentState:SDLSecondaryTransportStateConnecting] || [self.stateMachine isCurrentState:SDLSecondaryTransportStateRegistered]; +} + +- (BOOL)sdl_isHMILevelNonNone { + return (self.currentHMILevel != nil && ![self.currentHMILevel isEqualToEnum:SDLHMILevelNone]); +} + +#pragma mark - RPC Notifications +/// Check and track the HMI status to ensure that the secondary transport only attempts a connection in non-NONE HMI states +/// +/// See: https://github.com/smartdevicelink/sdl_evolution/blob/master/proposals/0214-secondary-transport-optimization.md +/// +/// @param notification The NSNotification containing the OnHMIStatus +- (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification { + if (![notification isNotificationMemberOfClass:[SDLOnHMIStatus class]]) { + return; + } + + SDLOnHMIStatus *hmiStatus = notification.notification; + self.currentHMILevel = hmiStatus.hmiLevel; + + // If the HMI level is non-NONE, and the state machine is currently waiting in the configured state, and _either_ we're using TCP and it's ready _or_ we're using IAP. + if (self.sdl_isHMILevelNonNone + && [self.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured] + && ((self.secondaryTransportType == SDLSecondaryTransportTypeTCP && [self sdl_isTCPReady]) || (self.secondaryTransportType == SDLSecondaryTransportTypeIAP))) { + [self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting]; } } diff --git a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h b/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h deleted file mode 100644 index d3e8510ee..000000000 --- a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// SDLSecondaryTransportPrimaryProtocolHandler.h -// SmartDeviceLink-iOS -// -// Created by Sho Amano on 2018/08/09. -// Copyright © 2018 Xevo Inc. All rights reserved. -// - -#import "SDLProtocolListener.h" - -@class SDLProtocol; -@class SDLSecondaryTransportManager; - -NS_ASSUME_NONNULL_BEGIN - -/** - A class to receive event from primary transport. - */ -@interface SDLSecondaryTransportPrimaryProtocolHandler : NSObject - -/** The header of Start Service ACK frame received on primary transport. */ -@property (copy, nonatomic) SDLProtocolHeader *primaryRPCHeader; - -/** - Create a new primary protocol handler with given SDLSecondaryTransportManager and SDLProtocol instances. - - @param manager instance of SDLSecondaryTransportManager - @param primaryProtocol instance of SDLProtocol for the primary transport - @return A new primary protocol handler - */ -- (instancetype)initWithSecondaryTransportManager:(SDLSecondaryTransportManager *)manager - primaryProtocol:(SDLProtocol *)primaryProtocol; - -/** - * Start the handler. - */ -- (void)start; - -/** - * Stop the handler. - */ -- (void)stop; - -@end - -NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m b/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m deleted file mode 100644 index 066a68999..000000000 --- a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m +++ /dev/null @@ -1,76 +0,0 @@ -// -// SDLSecondaryTransportPrimaryProtocolHandler.m -// SmartDeviceLink -// -// Created by Sho Amano on 2018/08/09. -// Copyright © 2018 Xevo Inc. All rights reserved. -// - -#import - -#import "SDLSecondaryTransportPrimaryProtocolHandler.h" - -#import "SDLControlFramePayloadRPCStartServiceAck.h" -#import "SDLControlFramePayloadTransportEventUpdate.h" -#import "SDLLogMacros.h" -#import "SDLProtocol.h" -#import "SDLProtocolMessage.h" -#import "SDLSecondaryTransportManager.h" - -@interface SDLSecondaryTransportPrimaryProtocolHandler () -@property (weak, nonatomic) SDLSecondaryTransportManager *secondaryTransportManager; -@property (weak, nonatomic) SDLProtocol *primaryProtocol; -@end - -@implementation SDLSecondaryTransportPrimaryProtocolHandler - -- (instancetype)initWithSecondaryTransportManager:(SDLSecondaryTransportManager *)manager - primaryProtocol:(SDLProtocol *)primaryProtocol { - self = [super init]; - if (!self) { - return nil; - } - - _secondaryTransportManager = manager; - _primaryProtocol = primaryProtocol; - - return self; -} - -- (void)start { - @synchronized(self.primaryProtocol.protocolDelegateTable) { - [self.primaryProtocol.protocolDelegateTable addObject:self]; - } -} - -- (void)stop { - @synchronized(self.primaryProtocol.protocolDelegateTable) { - [self.primaryProtocol.protocolDelegateTable removeObject:self]; - } -} - -// called from protocol's _reeiveQueue of Primary Transport -- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK { - if (startServiceACK.header.serviceType != SDLServiceTypeRPC) { - return; - } - - SDLLogV(@"Received Start Service ACK header of RPC service on primary transport"); - - // keep header to acquire Session ID - self.primaryRPCHeader = startServiceACK.header; - - SDLControlFramePayloadRPCStartServiceAck *payload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithData:startServiceACK.payload]; - - [self.secondaryTransportManager onStartServiceAckReceived:payload]; -} - -// called from protocol's _reeiveQueue of Primary Transport -- (void)handleTransportEventUpdateMessage:(SDLProtocolMessage *)transportEventUpdate { - SDLControlFramePayloadTransportEventUpdate *payload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithData:transportEventUpdate.payload]; - SDLLogV(@"Transport Config Update: %@", payload); - - [self.secondaryTransportManager onTransportEventUpdateReceived:payload]; -} - -@end diff --git a/SmartDeviceLink/SDLSoftButtonManager.m b/SmartDeviceLink/SDLSoftButtonManager.m index a8dd84629..01a8d0c05 100644 --- a/SmartDeviceLink/SDLSoftButtonManager.m +++ b/SmartDeviceLink/SDLSoftButtonManager.m @@ -47,7 +47,7 @@ @interface SDLSoftButtonManager() @property (strong, nonatomic) NSOperationQueue *transactionQueue; -@property (strong, nonatomic, nullable) SDLWindowCapability *windowCapability; +@property (strong, nonatomic, nullable) SDLSoftButtonCapabilities *softButtonCapabilities; @property (copy, nonatomic, nullable) SDLHMILevel currentLevel; @property (strong, nonatomic) NSMutableArray *batchQueue; @@ -82,7 +82,7 @@ - (void)stop { _softButtonObjects = @[]; _currentMainField1 = nil; _currentLevel = nil; - _windowCapability = nil; + _softButtonCapabilities = nil; [_transactionQueue cancelAllOperations]; self.transactionQueue = [self sdl_newTransactionQueue]; @@ -100,12 +100,25 @@ - (NSOperationQueue *)sdl_newTransactionQueue { return queue; } +/// Suspend the queue if the soft button capabilities are nil (we assume that soft buttons are not supported) +/// OR if the HMI level is NONE since we want to delay sending RPCs until we're in non-NONE +- (void)sdl_updateTransactionQueueSuspended { + if (self.softButtonCapabilities == nil || [self.currentLevel isEqualToEnum:SDLHMILevelNone]) { + SDLLogD(@"Suspending the transaction queue. Current HMI level is NONE: %@, soft button capabilities are nil: %@", ([self.currentLevel isEqualToEnum:SDLHMILevelNone] ? @"YES" : @"NO"), (self.softButtonCapabilities == nil ? @"YES" : @"NO")); + self.transactionQueue.suspended = YES; + } else { + SDLLogD(@"Starting the transaction queue"); + self.transactionQueue.suspended = NO; + } +} + #pragma mark - Sending Soft Buttons - (void)setSoftButtonObjects:(NSArray *)softButtonObjects { // Only update if something changed. This prevents, for example, an empty array being reset if (_softButtonObjects == softButtonObjects) { + SDLLogD(@"New soft button objects are equivalent to existing soft button objects, skipping..."); return; } @@ -128,7 +141,8 @@ - (void)setSoftButtonObjects:(NSArray *)softButtonObjects _softButtonObjects = softButtonObjects; - SDLSoftButtonReplaceOperation *op = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:self.connectionManager fileManager:self.fileManager capabilities:self.windowCapability.softButtonCapabilities.firstObject softButtonObjects:_softButtonObjects mainField1:self.currentMainField1]; + // We only need to pass the first `softButtonCapabilities` in the array due to the fact that all soft button capabilities are the same (i.e. there is no way to assign a `softButtonCapabilities` to a specific soft button). + SDLSoftButtonReplaceOperation *op = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:self.connectionManager fileManager:self.fileManager capabilities:self.softButtonCapabilities softButtonObjects:_softButtonObjects mainField1:self.currentMainField1]; if (self.isBatchingUpdates) { [self.batchQueue removeAllObjects]; @@ -140,7 +154,7 @@ - (void)setSoftButtonObjects:(NSArray *)softButtonObjects } - (void)sdl_transitionSoftButton:(SDLSoftButtonObject *)softButton { - SDLSoftButtonTransitionOperation *op = [[SDLSoftButtonTransitionOperation alloc] initWithConnectionManager:self.connectionManager capabilities:self.windowCapability.softButtonCapabilities.firstObject softButtons:self.softButtonObjects mainField1:self.currentMainField1]; + SDLSoftButtonTransitionOperation *op = [[SDLSoftButtonTransitionOperation alloc] initWithConnectionManager:self.connectionManager capabilities:self.softButtonCapabilities softButtons:self.softButtonObjects mainField1:self.currentMainField1]; if (self.isBatchingUpdates) { for (SDLAsynchronousOperation *sbOperation in self.batchQueue) { @@ -194,15 +208,34 @@ - (void)setCurrentMainField1:(nullable NSString *)currentMainField1 { } } - -#pragma mark - RPC Responses +#pragma mark - Observers - (void)sdl_displayCapabilityDidUpdate:(SDLSystemCapability *)systemCapability { - self.windowCapability = self.systemCapabilityManager.defaultMainWindowCapability; + SDLSoftButtonCapabilities *oldCapabilities = self.softButtonCapabilities; - // Auto-send an updated Show to account for changes to the capabilities - if (self.softButtonObjects.count > 0) { - SDLSoftButtonReplaceOperation *op = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:self.connectionManager fileManager:self.fileManager capabilities:self.windowCapability.softButtonCapabilities.firstObject softButtonObjects:self.softButtonObjects mainField1:self.currentMainField1]; + // Extract and update the capabilities + NSArray *capabilities = systemCapability.displayCapabilities; + if (capabilities == nil || capabilities.count == 0) { + self.softButtonCapabilities = nil; + } else { + SDLDisplayCapability *mainDisplay = capabilities[0]; + for (SDLWindowCapability *windowCapability in mainDisplay.windowCapabilities) { + NSUInteger currentWindowID = windowCapability.windowID != nil ? windowCapability.windowID.unsignedIntegerValue : SDLPredefinedWindowsDefaultWindow; + if (currentWindowID != SDLPredefinedWindowsDefaultWindow) { continue; } + + self.softButtonCapabilities = windowCapability.softButtonCapabilities.firstObject; + break; + } + } + + // Update the queue's suspend state + [self sdl_updateTransactionQueueSuspended]; + + // Auto-send an updated Show if we have new capabilities + if (self.softButtonObjects.count > 0 + && self.softButtonCapabilities != nil + && ![self.softButtonCapabilities isEqual:oldCapabilities]) { + SDLSoftButtonReplaceOperation *op = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:self.connectionManager fileManager:self.fileManager capabilities:self.softButtonCapabilities softButtonObjects:self.softButtonObjects mainField1:self.currentMainField1]; [self.transactionQueue addOperation:op]; } } @@ -213,17 +246,10 @@ - (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification if (hmiStatus.windowID != nil && hmiStatus.windowID.integerValue != SDLPredefinedWindowsDefaultWindow) { return; } - - SDLHMILevel oldHMILevel = self.currentLevel; - if (![oldHMILevel isEqualToEnum:hmiStatus.hmiLevel]) { - if ([hmiStatus.hmiLevel isEqualToEnum:SDLHMILevelNone]) { - self.transactionQueue.suspended = YES; - } else { - self.transactionQueue.suspended = NO; - } - } self.currentLevel = hmiStatus.hmiLevel; + + [self sdl_updateTransactionQueueSuspended]; } @end diff --git a/SmartDeviceLink/SDLSoftButtonReplaceOperation.h b/SmartDeviceLink/SDLSoftButtonReplaceOperation.h index 9adb5afb4..f7a66b331 100644 --- a/SmartDeviceLink/SDLSoftButtonReplaceOperation.h +++ b/SmartDeviceLink/SDLSoftButtonReplaceOperation.h @@ -38,7 +38,7 @@ NS_ASSUME_NONNULL_BEGIN @param mainField1 The primary text field of the system template @return The operation */ -- (instancetype)initWithConnectionManager:(id)connectionManager fileManager:(SDLFileManager *)fileManager capabilities:(SDLSoftButtonCapabilities *)capabilities softButtonObjects:(NSArray *)softButtonObjects mainField1:(NSString *)mainField1; +- (instancetype)initWithConnectionManager:(id)connectionManager fileManager:(SDLFileManager *)fileManager capabilities:(nullable SDLSoftButtonCapabilities *)capabilities softButtonObjects:(NSArray *)softButtonObjects mainField1:(NSString *)mainField1; @end diff --git a/SmartDeviceLink/SDLSoftButtonReplaceOperation.m b/SmartDeviceLink/SDLSoftButtonReplaceOperation.m index 0275dc4ff..91191f3b0 100644 --- a/SmartDeviceLink/SDLSoftButtonReplaceOperation.m +++ b/SmartDeviceLink/SDLSoftButtonReplaceOperation.m @@ -22,7 +22,7 @@ @interface SDLSoftButtonReplaceOperation () -@property (strong, nonatomic) SDLSoftButtonCapabilities *softButtonCapabilities; +@property (strong, nonatomic, nullable) SDLSoftButtonCapabilities *softButtonCapabilities; @property (strong, nonatomic) NSArray *softButtonObjects; @property (weak, nonatomic) id connectionManager; @@ -33,7 +33,7 @@ @interface SDLSoftButtonReplaceOperation () @implementation SDLSoftButtonReplaceOperation -- (instancetype)initWithConnectionManager:(id)connectionManager fileManager:(SDLFileManager *)fileManager capabilities:(SDLSoftButtonCapabilities *)capabilities softButtonObjects:(NSArray *)softButtonObjects mainField1:(NSString *)mainField1 { +- (instancetype)initWithConnectionManager:(id)connectionManager fileManager:(SDLFileManager *)fileManager capabilities:(nullable SDLSoftButtonCapabilities *)capabilities softButtonObjects:(NSArray *)softButtonObjects mainField1:(NSString *)mainField1 { self = [super init]; if (!self) { return nil; } @@ -273,7 +273,7 @@ - (BOOL)sdl_allCurrentStateImagesAreUploaded { } - (BOOL)sdl_supportsSoftButtonImages { - return self.softButtonCapabilities ? self.softButtonCapabilities.imageSupported.boolValue : NO; + return self.softButtonCapabilities.imageSupported.boolValue; } #pragma mark - Property Overrides diff --git a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h index 1d034ef97..cfa10ca5d 100644 --- a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h +++ b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h @@ -14,9 +14,10 @@ #import "SDLStreamingMediaManagerConstants.h" @class SDLAudioStreamManager; +@class SDLConfiguration; @class SDLProtocol; @class SDLStateMachine; -@class SDLStreamingMediaConfiguration; +@class SDLSystemCapabilityManager; @class SDLEncryptionConfiguration; @protocol SDLConnectionManagerType; @@ -26,7 +27,7 @@ NS_ASSUME_NONNULL_BEGIN @interface SDLStreamingAudioLifecycleManager : NSObject -@property (nonatomic, strong, readonly) SDLAudioStreamManager *audioManager; +@property (nonatomic, strong, readonly) SDLAudioStreamManager *audioTranscodingManager; @property (strong, nonatomic, readonly) SDLStateMachine *audioStreamStateMachine; @property (strong, nonatomic, readonly) SDLAudioStreamManagerState *currentAudioStreamState; @@ -45,11 +46,8 @@ NS_ASSUME_NONNULL_BEGIN */ @property (assign, nonatomic, readonly, getter=isAudioEncrypted) BOOL audioEncrypted; -/** - * Whether or not video streaming is supported - * - * @see SDLRegisterAppInterface SDLDisplayCapabilities - */ +/// Whether or not video/audio streaming is supported +/// @discussion If connected to a module pre-SDL v4.5 there is no way to check if streaming is supported so `YES` is returned by default even though the module may NOT support video/audio streaming. @property (assign, nonatomic, readonly, getter=isStreamingSupported) BOOL streamingSupported; /** @@ -61,26 +59,26 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init NS_UNAVAILABLE; -/** - Create a new streaming media manager for navigation and VPM apps with a specified configuration - - @param connectionManager The pass-through for RPCs - @param streamingConfiguration The configuration of this streaming media session - @param encryptionConfiguration The encryption configuration with security managers - @return A new streaming manager - */ -- (instancetype)initWithConnectionManager:(id)connectionManager streamingConfiguration:(SDLStreamingMediaConfiguration *)streamingConfiguration encryptionConfiguration:(SDLEncryptionConfiguration *)encryptionConfiguration NS_DESIGNATED_INITIALIZER; +/// Create a new streaming audio manager for navigation and projection apps with a specified configuration. +/// @param connectionManager The pass-through for RPCs +/// @param configuration This session's configuration +/// @param systemCapabilityManager The system capability manager object for reading window capabilities +- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration systemCapabilityManager:(nullable SDLSystemCapabilityManager *)systemCapabilityManager NS_DESIGNATED_INITIALIZER; /** * Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`. */ - (void)startWithProtocol:(SDLProtocol *)protocol; -/** - * Stop the manager. This method is used internally. - */ +/// This method is used internally to stop the manager when the device disconnects from the module. Since there is no connection between the device and the module there is no point in sending an end audio service control frame as the module will never receive the request. - (void)stop; +/// This method is used internally to stop the manager when audio needs to be stopped on the secondary transport. The primary transport is still open. +/// 1. Since the primary transport is still open, we will not reset the `hmiLevel` since we can still get notifications from the module with the updated HMI status on the primary transport. +/// 2. We need to send an end audio service control frame to the module to ensure that the audio session is shut down correctly. In order to do this the protocol must be kept open and only destroyed after the module ACKs or NAKs our end audio service request. +/// @param audioEndedCompletionHandler Called when the module ACKs or NAKs to the request to end the audio service. +- (void)endAudioServiceWithCompletionHandler:(void (^)(void))audioEndedCompletionHandler; + /** * This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback * diff --git a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m index 7f1fa6ba6..50fb56dac 100644 --- a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m +++ b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m @@ -9,6 +9,7 @@ #import "SDLStreamingAudioLifecycleManager.h" #import "SDLAudioStreamManager.h" +#import "SDLConfiguration.h" #import "SDLConnectionManagerType.h" #import "SDLControlFramePayloadAudioStartServiceAck.h" #import "SDLControlFramePayloadConstants.h" @@ -26,49 +27,50 @@ #import "SDLRPCResponseNotification.h" #import "SDLStateMachine.h" #import "SDLStreamingMediaConfiguration.h" +#import "SDLSystemCapabilityManager.h" #import "SDLEncryptionConfiguration.h" #import "SDLVehicleType.h" - NS_ASSUME_NONNULL_BEGIN @interface SDLStreamingAudioLifecycleManager() +@property (nonatomic, strong, readwrite) SDLAudioStreamManager *audioTranscodingManager; @property (strong, nonatomic, readwrite) SDLStateMachine *audioStreamStateMachine; @property (assign, nonatomic, readonly, getter=isHmiStateAudioStreamCapable) BOOL hmiStateAudioStreamCapable; @property (weak, nonatomic) id connectionManager; +@property (weak, nonatomic, nullable) SDLSystemCapabilityManager *systemCapabilityManager; @property (weak, nonatomic) SDLProtocol *protocol; @property (copy, nonatomic) NSArray *secureMakes; -@property (copy, nonatomic) NSString *connectedVehicleMake; +@property (copy, nonatomic, nullable) NSString *connectedVehicleMake; +@property (assign, nonatomic, readwrite, getter=isAudioEncrypted) BOOL audioEncrypted; +@property (nonatomic, copy, nullable) void (^audioServiceEndedCompletionHandler)(void); @end @implementation SDLStreamingAudioLifecycleManager -- (instancetype)initWithConnectionManager:(id)connectionManager streamingConfiguration:(SDLStreamingMediaConfiguration *)streamingConfiguration encryptionConfiguration:(SDLEncryptionConfiguration *)encryptionConfiguration { +- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration systemCapabilityManager:(nullable SDLSystemCapabilityManager *)systemCapabilityManager { self = [super init]; if (!self) { return nil; } - SDLLogV(@"Creating AudioStreamingLifecycleManager"); - _connectionManager = connectionManager; - - _audioManager = [[SDLAudioStreamManager alloc] initWithManager:self]; - - _requestedEncryptionType = streamingConfiguration.maximumDesiredEncryption; + _audioTranscodingManager = [[SDLAudioStreamManager alloc] initWithManager:self]; + _systemCapabilityManager = systemCapabilityManager; + _requestedEncryptionType = configuration.streamingMediaConfig.maximumDesiredEncryption; NSMutableArray *tempMakeArray = [NSMutableArray array]; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - for (Class securityManagerClass in streamingConfiguration.securityManagers) { + for (Class securityManagerClass in configuration.streamingMediaConfig.securityManagers) { [tempMakeArray addObjectsFromArray:[securityManagerClass availableMakes].allObjects]; } #pragma clang diagnostic pop - for (Class securityManagerClass in encryptionConfiguration.securityManagers) { + for (Class securityManagerClass in configuration.encryptionConfig.securityManagers) { [tempMakeArray addObjectsFromArray:[securityManagerClass availableMakes].allObjects]; } NSOrderedSet *tempMakeSet = [NSOrderedSet orderedSetWithArray:tempMakeArray]; @@ -83,6 +85,7 @@ - (instancetype)initWithConnectionManager:(id)connecti } - (void)startWithProtocol:(SDLProtocol *)protocol { + SDLLogD(@"Starting with protocol: %@", protocol); _protocol = protocol; @synchronized(self.protocol.protocolDelegateTable) { @@ -97,13 +100,22 @@ - (void)startWithProtocol:(SDLProtocol *)protocol { - (void)stop { SDLLogD(@"Stopping manager"); - [self sdl_stopAudioSession]; - - self.hmiLevel = SDLHMILevelNone; + _protocol = nil; + _hmiLevel = SDLHMILevelNone; + _connectedVehicleMake = nil; + [self.audioTranscodingManager stop]; [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped]; } +- (void)endAudioServiceWithCompletionHandler:(void (^)(void))completionHandler { + SDLLogD(@"Ending audio service"); + self.audioServiceEndedCompletionHandler = completionHandler; + + [self.audioTranscodingManager stop]; + [self.protocol endServiceWithType:SDLServiceTypeAudio]; +} + - (BOOL)sendAudioData:(NSData*)audioData { if (!self.isAudioConnected) { return NO; @@ -143,6 +155,11 @@ - (void)didEnterStateAudioStreamStopped { _audioEncrypted = NO; [[NSNotificationCenter defaultCenter] postNotificationName:SDLAudioStreamDidStopNotification object:nil]; + + if (self.audioServiceEndedCompletionHandler != nil) { + self.audioServiceEndedCompletionHandler(); + self.audioServiceEndedCompletionHandler = nil; + } } - (void)didEnterStateAudioStreamStarting { @@ -170,23 +187,15 @@ - (void)didEnterStateAudioStreamShuttingDown { } #pragma mark - SDLProtocolListener -#pragma mark Video / Audio Start Service ACK +#pragma mark Start Service ACK/NAK - (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK { - switch (startServiceACK.header.serviceType) { - case SDLServiceTypeAudio: { - [self sdl_handleAudioStartServiceAck:startServiceACK]; - } break; - default: break; - } -} + if (startServiceACK.header.serviceType != SDLServiceTypeAudio) { return; } -- (void)sdl_handleAudioStartServiceAck:(SDLProtocolMessage *)audioStartServiceAck { - SDLLogD(@"Audio service started"); - _audioEncrypted = audioStartServiceAck.header.encrypted; + self.audioEncrypted = startServiceACK.header.encrypted; - SDLControlFramePayloadAudioStartServiceAck *audioAckPayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithData:audioStartServiceAck.payload]; - SDLLogV(@"ACK: %@", audioAckPayload); + SDLControlFramePayloadAudioStartServiceAck *audioAckPayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithData:startServiceACK.payload]; + SDLLogD(@"Request to start audio service ACKed with payload: %@", audioAckPayload); if (audioAckPayload.mtu != SDLControlFrameInt64NotFound) { [[SDLGlobals sharedGlobals] setDynamicMTUSize:(NSUInteger)audioAckPayload.mtu forServiceType:SDLServiceTypeAudio]; @@ -195,32 +204,30 @@ - (void)sdl_handleAudioStartServiceAck:(SDLProtocolMessage *)audioStartServiceAc [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateReady]; } -#pragma mark Video / Audio Start Service NAK - - (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK { - switch (startServiceNAK.header.serviceType) { - case SDLServiceTypeAudio: { - [self sdl_handleAudioStartServiceNak:startServiceNAK]; - } break; - default: break; - } -} + if (startServiceNAK.header.serviceType != SDLServiceTypeAudio) { return; } + SDLLogE(@"Request to start audio service NAKed"); -- (void)sdl_handleAudioStartServiceNak:(SDLProtocolMessage *)audioStartServiceNak { - SDLLogW(@"Audio service failed to start due to NAK"); - [self sdl_transitionToStoppedState:SDLServiceTypeAudio]; + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped]; } -#pragma mark Video / Audio End Service +#pragma mark End Service ACK/NAK - (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK { - SDLLogD(@"%@ service ended", (endServiceACK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio")); - [self sdl_transitionToStoppedState:endServiceACK.header.serviceType]; + if (endServiceACK.header.serviceType != SDLServiceTypeAudio) { return; } + SDLLogD(@"Request to end audio service ACKed"); + + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped]; } - (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK { - SDLLogW(@"%@ service ended with end service NAK", (endServiceNAK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio")); - [self sdl_transitionToStoppedState:endServiceNAK.header.serviceType]; + if (endServiceNAK.header.serviceType != SDLServiceTypeAudio) { return; } + + SDLControlFramePayloadNak *nakPayload = [[SDLControlFramePayloadNak alloc] initWithData:endServiceNAK.payload]; + SDLLogE(@"Request to end audio service NAKed with playlod: %@", nakPayload); + + /// Core will NAK the audio end service control frame if audio is not streaming or if video is streaming but the HMI does not recognize that audio is streaming. + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped]; } #pragma mark - SDL RPC Notification callbacks @@ -231,19 +238,8 @@ - (void)sdl_didReceiveRegisterAppInterfaceResponse:(SDLRPCResponseNotification * return; } - SDLLogD(@"Received Register App Interface"); - SDLRegisterAppInterfaceResponse* registerResponse = (SDLRegisterAppInterfaceResponse*)notification.response; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - SDLLogV(@"Determining whether streaming is supported"); - _streamingSupported = registerResponse.hmiCapabilities.videoStreaming ? registerResponse.hmiCapabilities.videoStreaming.boolValue : registerResponse.displayCapabilities.graphicSupported.boolValue; -#pragma clang diagnostic pop - - if (!self.isStreamingSupported) { - SDLLogE(@"Graphics are not supported on this head unit. We are are assuming screen size is also unavailable and exiting."); - return; - } + SDLLogV(@"Received Register App Interface response"); + SDLRegisterAppInterfaceResponse *registerResponse = (SDLRegisterAppInterfaceResponse*)notification.response; self.connectedVehicleMake = registerResponse.vehicleType.make; } @@ -300,21 +296,16 @@ - (void)sdl_stopAudioSession { } } -- (void)sdl_transitionToStoppedState:(SDLServiceType)serviceType { - switch (serviceType) { - case SDLServiceTypeAudio: - [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped]; - break; - default: break; - } -} - #pragma mark Setters / Getters - (BOOL)isHmiStateAudioStreamCapable { return [self.hmiLevel isEqualToEnum:SDLHMILevelLimited] || [self.hmiLevel isEqualToEnum:SDLHMILevelFull]; } +- (BOOL)isStreamingSupported { + return (self.systemCapabilityManager != nil) ? [self.systemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming] : YES; +} + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLStreamingMediaManager.h b/SmartDeviceLink/SDLStreamingMediaManager.h index 0998868a6..c3184c21d 100644 --- a/SmartDeviceLink/SDLStreamingMediaManager.h +++ b/SmartDeviceLink/SDLStreamingMediaManager.h @@ -15,17 +15,19 @@ @class SDLAudioStreamManager; @class SDLConfiguration; @class SDLProtocol; +@class SDLSecondaryTransportManager; +@class SDLSystemCapabilityManager; @class SDLTouchManager; @class SDLVideoStreamingFormat; @protocol SDLFocusableItemLocatorType; @protocol SDLConnectionManagerType; + NS_ASSUME_NONNULL_BEGIN -#pragma mark - Interface -/// Manager to help control streaming media services. +/// Manager to help control streaming (video and audio) media services. @interface SDLStreamingMediaManager : NSObject /** @@ -98,7 +100,7 @@ NS_ASSUME_NONNULL_BEGIN /** * The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder. * - * @warning This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started). + * @warning This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started). * @discussion Clients may call this once and retain the resulting pool, this call is cheap enough that it's OK to call it once per frame. */ @property (assign, nonatomic, readonly, nullable) CVPixelBufferPoolRef pixelBufferPool; @@ -115,32 +117,22 @@ NS_ASSUME_NONNULL_BEGIN */ @property (assign, nonatomic) BOOL showVideoBackgroundDisplay; -/// Initializer unavailable -- (instancetype)init NS_UNAVAILABLE; -/** - Create a new streaming media manager for navigation and VPM apps with a specified configuration +#pragma mark - Lifecycle - @param connectionManager The pass-through for RPCs - @param configuration This session's configuration - @return A new streaming manager - */ -- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration NS_DESIGNATED_INITIALIZER; +/// Initializer unavailable +- (instancetype)init NS_UNAVAILABLE; -/** - * Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`. - */ -- (void)startWithProtocol:(SDLProtocol *)protocol; +/// Create a new streaming media manager for navigation and projection apps with a specified configuration. +/// @param connectionManager The pass-through for RPCs +/// @param configuration This session's configuration +- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration __deprecated_msg("Use initWithConnectionManager:configuration:systemCapabilityManager: instead"); -/** - * Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`. - */ -- (void)startAudioWithProtocol:(SDLProtocol *)protocol; - -/** - * Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`. - */ -- (void)startVideoWithProtocol:(SDLProtocol *)protocol; +/// Create a new streaming media manager for navigation and projection apps with a specified configuration. +/// @param connectionManager The pass-through for RPCs +/// @param configuration This session's configuration +/// @param systemCapabilityManager The system capability manager object for reading window capabilities +- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration systemCapabilityManager:(nullable SDLSystemCapabilityManager *)systemCapabilityManager NS_DESIGNATED_INITIALIZER; /** * Stop the manager. This method is used internally. @@ -157,6 +149,8 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)stopVideo; +#pragma mark - Data Transfer + /** * This method receives raw image data and will run iOS8+'s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit. * @@ -187,6 +181,23 @@ NS_ASSUME_NONNULL_BEGIN */ - (BOOL)sendAudioData:(NSData *)audioData; +#pragma mark - Secondary Transport Specific + +/** + * Start the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`. + */ +- (void)startWithProtocol:(SDLProtocol *)protocol __deprecated_msg("Use startSecondaryTransportWithProtocol: instead"); + + /** + * Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`. + */ +- (void)startAudioWithProtocol:(SDLProtocol *)protocol __deprecated_msg("Use startSecondaryTransportWithProtocol: instead"); + + /** + * Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`. + */ +- (void)startVideoWithProtocol:(SDLProtocol *)protocol __deprecated_msg("Use startSecondaryTransportWithProtocol: instead"); + @end diff --git a/SmartDeviceLink/SDLStreamingMediaManager.m b/SmartDeviceLink/SDLStreamingMediaManager.m index a1c81facc..01c8e557e 100644 --- a/SmartDeviceLink/SDLStreamingMediaManager.m +++ b/SmartDeviceLink/SDLStreamingMediaManager.m @@ -11,71 +11,74 @@ #import "SDLAudioStreamManager.h" #import "SDLConfiguration.h" #import "SDLConnectionManagerType.h" +#import "SDLGlobals.h" +#import "SDLLogMacros.h" +#import "SDLSecondaryTransportManager.h" #import "SDLStreamingAudioLifecycleManager.h" +#import "SDLStreamingProtocolDelegate.h" #import "SDLStreamingVideoLifecycleManager.h" #import "SDLStreamingVideoScaleManager.h" +#import "SDLSystemCapabilityManager.h" #import "SDLTouchManager.h" NS_ASSUME_NONNULL_BEGIN -@interface SDLStreamingMediaManager () +@interface SDLStreamingMediaManager () @property (strong, nonatomic) SDLStreamingAudioLifecycleManager *audioLifecycleManager; @property (strong, nonatomic) SDLStreamingVideoLifecycleManager *videoLifecycleManager; @property (assign, nonatomic) BOOL audioStarted; @property (assign, nonatomic) BOOL videoStarted; +@property (strong, nonatomic, nullable) SDLProtocol *audioProtocol; +@property (strong, nonatomic, nullable) SDLProtocol *videoProtocol; + +@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager; @end @implementation SDLStreamingMediaManager -#pragma mark - Public -#pragma mark Lifecycle +#pragma mark - Lifecycle -- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration { +- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration systemCapabilityManager:(nullable SDLSystemCapabilityManager *)systemCapabilityManager { self = [super init]; if (!self) { return nil; } - _audioLifecycleManager = [[SDLStreamingAudioLifecycleManager alloc] initWithConnectionManager:connectionManager streamingConfiguration: configuration.streamingMediaConfig encryptionConfiguration:configuration.encryptionConfig]; - _videoLifecycleManager = [[SDLStreamingVideoLifecycleManager alloc] initWithConnectionManager:connectionManager configuration:configuration]; + _audioLifecycleManager = [[SDLStreamingAudioLifecycleManager alloc] initWithConnectionManager:connectionManager configuration:configuration systemCapabilityManager:systemCapabilityManager]; + _videoLifecycleManager = [[SDLStreamingVideoLifecycleManager alloc] initWithConnectionManager:connectionManager configuration:configuration systemCapabilityManager:systemCapabilityManager]; return self; } -- (void)dealloc { - [_audioLifecycleManager stop]; - [_videoLifecycleManager stop]; -} - -- (void)startWithProtocol:(SDLProtocol *)protocol { - [self startAudioWithProtocol:protocol]; - [self startVideoWithProtocol:protocol]; -} - -- (void)startAudioWithProtocol:(SDLProtocol *)protocol { - [self.audioLifecycleManager startWithProtocol:protocol]; - self.audioStarted = YES; -} - -- (void)startVideoWithProtocol:(SDLProtocol *)protocol { - [self.videoLifecycleManager startWithProtocol:protocol]; - self.videoStarted = YES; +- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration { + return [self initWithConnectionManager:connectionManager configuration:configuration systemCapabilityManager:nil]; } - (void)stop { [self stopAudio]; [self stopVideo]; + self.audioProtocol = nil; + self.videoProtocol = nil; } + +#pragma mark Audio + - (void)stopAudio { [self.audioLifecycleManager stop]; self.audioStarted = NO; } +- (BOOL)sendAudioData:(NSData*)audioData { + return [self.audioLifecycleManager sendAudioData:audioData]; +} + +#pragma mark Video + - (void)stopVideo { [self.videoLifecycleManager stop]; self.videoStarted = NO; @@ -89,8 +92,112 @@ - (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer presentationTimestamp:(CMTim return [self.videoLifecycleManager sendVideoData:imageBuffer presentationTimestamp:presentationTimestamp]; } -- (BOOL)sendAudioData:(NSData*)audioData { - return [self.audioLifecycleManager sendAudioData:audioData]; +#pragma mark - Secondary Transport + +- (void)startSecondaryTransportWithProtocol:(SDLProtocol *)protocol { + [self didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:protocol fromOldAudioProtocol:nil toNewAudioProtocol:protocol]; +} + +- (void)sdl_disconnectSecondaryTransport { + if (self.secondaryTransportManager == nil) { + SDLLogV(@"Attempting to disconnect a non-existent secondary transport. Returning."); + return; + } + + [self.secondaryTransportManager disconnectSecondaryTransport]; +} + +# pragma mark SDLStreamingProtocolDelegate + +- (void)didUpdateFromOldVideoProtocol:(nullable SDLProtocol *)oldVideoProtocol + toNewVideoProtocol:(nullable SDLProtocol *)newVideoProtocol + fromOldAudioProtocol:(nullable SDLProtocol *)oldAudioProtocol + toNewAudioProtocol:(nullable SDLProtocol *)newAudioProtocol { + BOOL videoProtocolUpdated = (oldVideoProtocol != newVideoProtocol); + BOOL audioProtocolUpdated = (oldAudioProtocol != newAudioProtocol); + + if (!videoProtocolUpdated && !audioProtocolUpdated) { + SDLLogV(@"The video and audio transports did not update."); + return; + } + + dispatch_group_t endServiceTask = dispatch_group_create(); + dispatch_group_enter(endServiceTask); + + __weak typeof(self) weakSelf = self; + if (oldVideoProtocol != nil) { + dispatch_group_enter(endServiceTask); + [self.videoLifecycleManager endVideoServiceWithCompletionHandler:^ { + __strong typeof(weakSelf) strongSelf = weakSelf; + strongSelf.videoStarted = NO; + dispatch_group_leave(endServiceTask); + }]; + } + + if (oldAudioProtocol != nil) { + dispatch_group_enter(endServiceTask); + __weak typeof(self) weakSelf = self; + [self.audioLifecycleManager endAudioServiceWithCompletionHandler:^ { + __strong typeof(weakSelf) strongSelf = weakSelf; + strongSelf.audioStarted = NO; + dispatch_group_leave(endServiceTask); + }]; + } + + dispatch_group_leave(endServiceTask); + + // This will always run + dispatch_group_notify(endServiceTask, [SDLGlobals sharedGlobals].sdlProcessingQueue, ^{ + if (oldVideoProtocol != nil || oldAudioProtocol != nil) { + SDLLogV(@"Disconnecting the secondary transport"); + [self sdl_disconnectSecondaryTransport]; + + SDLLogD(@"Destroying the audio and video protocol and starting new audio and video protocols"); + self.audioProtocol = nil; + self.videoProtocol = nil; + } + + [self sdl_startNewProtocolForAudio:newAudioProtocol forVideo:newVideoProtocol]; + }); +} + +/// Starts the audio and/or video services using the new protocol. +/// @param newAudioProtocol The new audio protocol +/// @param newVideoProtocol The new video protocol +- (void)sdl_startNewProtocolForAudio:(nullable SDLProtocol *)newAudioProtocol forVideo:(nullable SDLProtocol *)newVideoProtocol { + if (newAudioProtocol != nil) { + self.audioProtocol = newAudioProtocol; + [self.audioLifecycleManager startWithProtocol:newAudioProtocol]; + self.audioStarted = YES; + } + if (newVideoProtocol != nil) { + self.videoProtocol = newVideoProtocol; + [self.videoLifecycleManager startWithProtocol:newVideoProtocol]; + self.videoStarted = YES; + } +} + +- (void)startWithProtocol:(SDLProtocol *)protocol { + self.audioProtocol = protocol; + self.videoProtocol = protocol; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self startAudioWithProtocol:protocol]; + [self startVideoWithProtocol:protocol]; +#pragma clang diagnostic pop +} + + - (void)startAudioWithProtocol:(SDLProtocol *)protocol { + self.audioProtocol = protocol; + [self.audioLifecycleManager startWithProtocol:protocol]; + self.audioStarted = YES; +} + + - (void)startVideoWithProtocol:(SDLProtocol *)protocol { + self.videoProtocol = protocol; + [self.videoLifecycleManager startWithProtocol:protocol]; + self.videoStarted = YES; } @@ -101,7 +208,7 @@ - (SDLTouchManager *)touchManager { } - (SDLAudioStreamManager *)audioManager { - return self.audioLifecycleManager.audioManager; + return self.audioLifecycleManager.audioTranscodingManager; } - (nullable UIViewController *)rootViewController { @@ -113,14 +220,8 @@ - (nullable UIViewController *)rootViewController { } - (BOOL)isStreamingSupported { - // both audio and video lifecycle managers checks the param in Register App Interface response, - // hence the flag should be same between two managers if they are started - if (self.videoStarted) { - return self.videoLifecycleManager.isStreamingSupported; - } else if (self.audioStarted) { - return self.audioLifecycleManager.isStreamingSupported; - } - return NO; + // The flag is the same between the video and audio managers so just one needs to be returned. + return self.videoLifecycleManager.isStreamingSupported; } - (BOOL)isAudioConnected { @@ -138,7 +239,7 @@ - (BOOL)isAudioEncrypted { - (BOOL)isVideoEncrypted { return self.videoLifecycleManager.isVideoEncrypted; } - + - (BOOL)isVideoStreamingPaused { return self.videoLifecycleManager.isVideoStreamingPaused; } @@ -165,11 +266,12 @@ - (SDLStreamingEncryptionFlag)requestedEncryptionType { } - (BOOL)showVideoBackgroundDisplay { - // both audio and video managers should have same type return self.videoLifecycleManager.showVideoBackgroundDisplay; } + #pragma mark - Setters + - (void)setRootViewController:(nullable UIViewController *)rootViewController { self.videoLifecycleManager.rootViewController = rootViewController; } diff --git a/SmartDeviceLink/SDLStreamingProtocolDelegate.h b/SmartDeviceLink/SDLStreamingProtocolDelegate.h index b3ec8f78a..259cc502b 100644 --- a/SmartDeviceLink/SDLStreamingProtocolDelegate.h +++ b/SmartDeviceLink/SDLStreamingProtocolDelegate.h @@ -14,27 +14,15 @@ NS_ASSUME_NONNULL_BEGIN @protocol SDLStreamingProtocolDelegate -/** - * Called when protocol instance for audio service has been updated. - * - * If `newProtocol` is nil, it indicates that underlying transport - * becomes unavailable. - * - * @param oldProtocol protocol instance that has been used for audio streaming. - * @param newProtocol protocol instance that will be used for audio streaming. - */ -- (void)audioServiceProtocolDidUpdateFromOldProtocol:(nullable SDLProtocol *)oldProtocol toNewProtocol:(nullable SDLProtocol *)newProtocol; - -/** - * Called when protocol instance for video service has been updated. - * - * If `newProtocol` is nil, it indicates that underlying transport - * becomes unavailable. - * - * @param oldProtocol protocol instance that has been used for video streaming. - * @param newProtocol protocol instance that will be used for video streaming. - */ -- (void)videoServiceProtocolDidUpdateFromOldProtocol:(nullable SDLProtocol *)oldProtocol toNewProtocol:(nullable SDLProtocol *)newProtocol; +/// Called when protocol instance for audio and/or video service has been updated. +/// +/// If `newVideoProtocol` or `newAudioProtocol` is nil it indicates that underlying transport has become unavailable. +/// +/// @param oldVideoProtocol protocol instance that was being used for video streaming +/// @param newVideoProtocol protocol instance that will be used for video streaming +/// @param oldAudioProtocol protocol instance that was being used for audio streaming +/// @param newAudioProtocol protocol instance that will be used for audio streaming +- (void)didUpdateFromOldVideoProtocol:(nullable SDLProtocol *)oldVideoProtocol toNewVideoProtocol:(nullable SDLProtocol *)newVideoProtocol fromOldAudioProtocol:(nullable SDLProtocol *)oldAudioProtocol toNewAudioProtocol:(nullable SDLProtocol *)newAudioProtocol; @end diff --git a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h index 9a74f977a..54021b6ba 100644 --- a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h +++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h @@ -22,6 +22,7 @@ @class SDLStateMachine; @class SDLStreamingMediaConfiguration; @class SDLStreamingVideoScaleManager; +@class SDLSystemCapabilityManager; @class SDLTouchManager; @protocol SDLConnectionManagerType; @@ -29,7 +30,6 @@ @protocol SDLStreamingMediaManagerDataSource; - NS_ASSUME_NONNULL_BEGIN @interface SDLStreamingVideoLifecycleManager : NSObject @@ -59,11 +59,8 @@ NS_ASSUME_NONNULL_BEGIN */ @property (weak, nonatomic, nullable) id dataSource; -/** - * Whether or not video streaming is supported - * - * @see SDLRegisterAppInterface SDLDisplayCapabilities - */ +/// Whether or not video/audio streaming is supported +/// @discussion If connected to a module pre-SDL v4.5 there is no way to check if streaming is supported so `YES` is returned by default even though the module may not support video/audio streaming. @property (assign, nonatomic, readonly, getter=isStreamingSupported) BOOL streamingSupported; /** @@ -139,25 +136,27 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init NS_UNAVAILABLE; -/** - Create a new streaming media manager for navigation and VPM apps with a specified configuration - - @param connectionManager The pass-through for RPCs - @param configuration This session's configuration - @return A new streaming manager - */ -- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration; +/// Create a new streaming video manager for navigation and projection apps with a specified configuration. +/// @param connectionManager The pass-through for RPCs +/// @param configuration This session's configuration +/// @param systemCapabilityManager The system capability manager object for reading window capabilities +- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration systemCapabilityManager:(nullable SDLSystemCapabilityManager *)systemCapabilityManager NS_DESIGNATED_INITIALIZER; /** * Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`. */ - (void)startWithProtocol:(SDLProtocol *)protocol; -/** - * Stop the manager. This method is used internally. - */ +/// This method is used internally to stop the manager when the device disconnects from the module. - (void)stop; +/// This method is used internally to stop the manager when video needs to be stopped on the secondary transport. The primary transport is still open. +/// 1. Since the primary transport is still open, do will not reset the `hmiLevel` and `videoStreamingState` because we can still get notifications from the module with the updated hmi status on the primary transport. +/// 2. We need to send an end video service control frame to the module to ensure that the video session is shut down correctly. In order to do this the protocol must be kept open and only destroyed after the module ACKs or NAKs our end video service request. +/// 3. Since the primary transport is still open, the video scale manager should not be reset because the default video dimensions are retrieved from the `RegisterAppInterfaceResponse`. Due to a bug with the video start service ACK sometimes returning a screen resolution of {0, 0} on subsequent request to start a video service, we need to keep the screen resolution from the very first start video service ACK. (This is not an issue if the head unit supports the `VideoStreamingCapability`). +/// @param videoEndedCompletionHandler Called when the module ACKs or NAKs to the request to end the video service. +- (void)endVideoServiceWithCompletionHandler:(void (^)(void))videoEndedCompletionHandler; + /** * This method receives raw image data and will run iOS8+'s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit. * diff --git a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m index 92801dc8e..be9135cb8 100644 --- a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m +++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m @@ -23,7 +23,6 @@ #import "SDLGetSystemCapabilityResponse.h" #import "SDLGlobals.h" #import "SDLH264VideoEncoder.h" -#import "SDLHMICapabilities.h" #import "SDLHMILevel.h" #import "SDLImageResolution.h" #import "SDLLifecycleConfiguration.h" @@ -42,11 +41,11 @@ #import "SDLStreamingMediaManagerDataSource.h" #import "SDLStreamingVideoScaleManager.h" #import "SDLSystemCapability.h" +#import "SDLSystemCapabilityManager.h" #import "SDLTouchManager.h" #import "SDLVehicleType.h" #import "SDLVideoEncoderDelegate.h" #import "SDLVideoStreamingCapability.h" -#import "SDLVersion.h" static NSUInteger const FramesToSendOnBackground = 30; @@ -57,6 +56,7 @@ @interface SDLStreamingVideoLifecycleManager() @property (weak, nonatomic) id connectionManager; +@property (weak, nonatomic, nullable) SDLSystemCapabilityManager *systemCapabilityManager; @property (weak, nonatomic) SDLProtocol *protocol; @property (assign, nonatomic, readonly, getter=isAppStateVideoStreamCapable) BOOL appStateVideoStreamCapable; @@ -71,7 +71,7 @@ @interface SDLStreamingVideoLifecycleManager() @property (strong, nonatomic) NSMutableDictionary *videoEncoderSettings; @property (copy, nonatomic) NSDictionary *customEncoderSettings; @property (copy, nonatomic) NSArray *secureMakes; -@property (copy, nonatomic) NSString *connectedVehicleMake; +@property (copy, nonatomic, nullable) NSString *connectedVehicleMake; @property (copy, nonatomic, readonly) NSString *appName; @property (assign, nonatomic) CV_NULLABLE CVPixelBufferRef backgroundingPixelBuffer; @@ -79,6 +79,8 @@ @interface SDLStreamingVideoLifecycleManager() @property (strong, nonatomic, nullable) CADisplayLink *displayLink; @property (assign, nonatomic) BOOL useDisplayLink; +@property (assign, nonatomic, readwrite, getter=isVideoEncrypted) BOOL videoEncrypted; + /** * SSRC of RTP header field. * @@ -91,21 +93,21 @@ @interface SDLStreamingVideoLifecycleManager() @property (assign, nonatomic) CMTime lastPresentationTimestamp; @property (copy, nonatomic, readonly) NSString *videoStreamBackgroundString; +@property (nonatomic, copy, nullable) void (^videoServiceEndedCompletionHandler)(void); @end @implementation SDLStreamingVideoLifecycleManager -- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration { +- (instancetype)initWithConnectionManager:(id)connectionManager configuration:(SDLConfiguration *)configuration systemCapabilityManager:(nullable SDLSystemCapabilityManager *)systemCapabilityManager { self = [super init]; if (!self) { return nil; } - SDLLogV(@"Creating StreamingLifecycleManager"); - _appName = configuration.lifecycleConfig.appName; _connectionManager = connectionManager; + _systemCapabilityManager = systemCapabilityManager; _videoEncoderSettings = [NSMutableDictionary dictionary]; [_videoEncoderSettings addEntriesFromDictionary: SDLH264VideoEncoder.defaultVideoEncoderSettings]; _customEncoderSettings = configuration.streamingMediaConfig.customVideoEncoderSettings; @@ -178,6 +180,7 @@ - (instancetype)initWithConnectionManager:(id)connecti } - (void)startWithProtocol:(SDLProtocol *)protocol { + SDLLogD(@"Starting with protocol: %@", protocol); _protocol = protocol; @synchronized(self.protocol.protocolDelegateTable) { @@ -192,21 +195,27 @@ - (void)startWithProtocol:(SDLProtocol *)protocol { - (void)stop { SDLLogD(@"Stopping manager"); - [self sdl_stopVideoSession]; - _protocol = nil; _backgroundingPixelBuffer = NULL; _preferredFormatIndex = 0; _preferredResolutionIndex = 0; - + _lastPresentationTimestamp = kCMTimeInvalid; _hmiLevel = SDLHMILevelNone; _videoStreamingState = SDLVideoStreamingStateNotStreamable; - _lastPresentationTimestamp = kCMTimeInvalid; - + _protocol = nil; [self.videoScaleManager stop]; + _connectedVehicleMake = nil; + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped]; } +- (void)endVideoServiceWithCompletionHandler:(void (^)(void))completionHandler { + SDLLogD(@"Ending video service"); + [self sdl_disposeDisplayLink]; + self.videoServiceEndedCompletionHandler = completionHandler; + [self.protocol endServiceWithType:SDLServiceTypeVideo]; +} + - (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer { return [self sendVideoData:imageBuffer presentationTimestamp:kCMTimeInvalid]; } @@ -286,7 +295,10 @@ - (void)sdl_appStateDidUpdate:(NSNotification*)notification { - (void)didEnterStateAppInactive { SDLLogD(@"App became inactive"); - if (!self.protocol) { return; } + if (self.protocol == nil) { + SDLLogV(@"No session established with head unit. Ignoring app backgrounded notification"); + return; + } if (_showVideoBackgroundDisplay) { [self sdl_sendBackgroundFrames]; @@ -304,7 +316,10 @@ - (void)didEnterStateAppInactive { // We should be waiting to start any OpenGL drawing until UIApplicationDidBecomeActive is called. - (void)didEnterStateAppActive { SDLLogD(@"App became active"); - if (!self.protocol) { return; } + if (self.protocol == nil) { + SDLLogV(@"No session established with head unit. Ignoring app foregounded notification"); + return; + } if (self.isVideoSuspended) { [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateReady]; @@ -324,11 +339,11 @@ - (void)didEnterStateAppActive { }; } -- (void)disposeDisplayLink { - if (self.displayLink != nil) { - [self.displayLink invalidate]; - self.displayLink = nil; - } +- (void)sdl_disposeDisplayLink { + if (self.displayLink == nil) { return; } + SDLLogD(@"Destroying display link"); + [self.displayLink invalidate]; + self.displayLink = nil; } - (void)didEnterStateVideoStreamStopped { @@ -341,9 +356,19 @@ - (void)didEnterStateVideoStreamStopped { _videoEncoder = nil; } - [self disposeDisplayLink]; + _backgroundingPixelBuffer = NULL; + _preferredFormatIndex = 0; + _preferredResolutionIndex = 0; + _lastPresentationTimestamp = kCMTimeInvalid; + + [self sdl_disposeDisplayLink]; [[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamDidStopNotification object:nil]; + + if (self.videoServiceEndedCompletionHandler != nil) { + self.videoServiceEndedCompletionHandler(); + self.videoServiceEndedCompletionHandler = nil; + } } - (void)didEnterStateVideoStreamStarting { @@ -409,7 +434,15 @@ - (void)didEnterStateVideoStreamReady { self.videoEncoder = nil; } - [self disposeDisplayLink]; + [self sdl_disposeDisplayLink]; + + [[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamDidStartNotification object:nil]; + + if (!self.isAppStateVideoStreamCapable) { + SDLLogD(@"App is in the background and can not stream video. Video will resume when app is foregrounded"); + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateSuspended]; + return; + } if (self.videoEncoder == nil) { NSError* error = nil; @@ -437,11 +470,8 @@ - (void)didEnterStateVideoStreamReady { self.lastPresentationTimestamp = kCMTimeInvalid; } - [[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamDidStartNotification object:nil]; - if (self.useDisplayLink) { dispatch_async(dispatch_get_main_queue(), ^{ - // And start up the displayLink NSInteger targetFramerate = ((NSNumber *)self.videoEncoderSettings[(__bridge NSString *)kVTCompressionPropertyKey_ExpectedFrameRate]).integerValue; SDLLogD(@"Initializing CADisplayLink with framerate: %ld", (long)targetFramerate); self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(sdl_displayLinkFired:)]; @@ -459,9 +489,7 @@ - (void)didEnterStateVideoStreamReady { - (void)didEnterStateVideoStreamSuspended { SDLLogD(@"Video stream suspended"); - - [self disposeDisplayLink]; - + [self sdl_disposeDisplayLink]; [[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamSuspendedNotification object:nil]; } @@ -471,30 +499,23 @@ - (void)didEnterStateVideoStreamShuttingDown { } #pragma mark - SDLProtocolListener -#pragma mark Video / Audio Start Service ACK +#pragma mark Start Service ACK/NAK - (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK { - switch (startServiceACK.header.serviceType) { - case SDLServiceTypeVideo: { - [self sdl_handleVideoStartServiceAck:startServiceACK]; - } break; - default: break; - } -} + if (startServiceACK.header.serviceType != SDLServiceTypeVideo) { return; } + + self.videoEncrypted = startServiceACK.header.encrypted; -- (void)sdl_handleVideoStartServiceAck:(SDLProtocolMessage *)videoStartServiceAck { - SDLLogD(@"Video service started"); - _videoEncrypted = videoStartServiceAck.header.encrypted; + SDLControlFramePayloadVideoStartServiceAck *videoAckPayload = [[SDLControlFramePayloadVideoStartServiceAck alloc] initWithData:startServiceACK.payload]; + SDLLogD(@"Request to start video service ACKed with payload: %@", videoAckPayload); - SDLControlFramePayloadVideoStartServiceAck *videoAckPayload = [[SDLControlFramePayloadVideoStartServiceAck alloc] initWithData:videoStartServiceAck.payload]; - SDLLogV(@"ACK: %@", videoAckPayload); if (videoAckPayload.mtu != SDLControlFrameInt64NotFound) { [[SDLGlobals sharedGlobals] setDynamicMTUSize:(NSUInteger)videoAckPayload.mtu forServiceType:SDLServiceTypeVideo]; } // This is the definitive screen size that will be used - if (videoAckPayload.height != SDLControlFrameInt32NotFound && videoAckPayload.width != SDLControlFrameInt32NotFound) { + if ((videoAckPayload.height != SDLControlFrameInt32NotFound || videoAckPayload.height != 0) && (videoAckPayload.width != SDLControlFrameInt32NotFound && videoAckPayload.width != 0)) { self.videoScaleManager.displayViewportResolution = CGSizeMake(videoAckPayload.width, videoAckPayload.height); } else if (self.preferredResolutions.count > 0) { // If a preferred resolution was set, use the first option to set the screen size @@ -514,25 +535,15 @@ - (void)sdl_handleVideoStartServiceAck:(SDLProtocolMessage *)videoStartServiceAc [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateReady]; } -#pragma mark Video / Audio Start Service NAK - - (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK { - switch (startServiceNAK.header.serviceType) { - case SDLServiceTypeVideo: { - [self sdl_handleVideoStartServiceNak:startServiceNAK]; - } - default: break; - } -} + if (startServiceNAK.header.serviceType != SDLServiceTypeVideo) { return; } -- (void)sdl_handleVideoStartServiceNak:(SDLProtocolMessage *)videoStartServiceNak { - SDLLogW(@"Video service failed to start due to NAK"); - SDLControlFramePayloadNak *nakPayload = [[SDLControlFramePayloadNak alloc] initWithData:videoStartServiceNak.payload]; - SDLLogD(@"NAK: %@", videoStartServiceNak); + SDLControlFramePayloadNak *nakPayload = [[SDLControlFramePayloadNak alloc] initWithData:startServiceNAK.payload]; + SDLLogE(@"Request to start video service NAKed with reason: %@", nakPayload.description); // If we have no payload rejected params, we don't know what to do to retry, so we'll just stop and maybe cry if (nakPayload.rejectedParams.count == 0) { - [self sdl_transitionToStoppedState:SDLServiceTypeVideo]; + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped]; return; } @@ -550,16 +561,23 @@ - (void)sdl_handleVideoStartServiceNak:(SDLProtocolMessage *)videoStartServiceNa [self sdl_sendVideoStartService]; } -#pragma mark Video / Audio End Service +#pragma mark End Service ACK/NAK - (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK { - SDLLogD(@"%@ service ended", (endServiceACK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio")); - [self sdl_transitionToStoppedState:endServiceACK.header.serviceType]; + if (endServiceACK.header.serviceType != SDLServiceTypeVideo) { return; } + SDLLogD(@"Request to end video service ACKed"); + + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped]; } - (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK { - SDLLogW(@"%@ service ended with end service NAK", (endServiceNAK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio")); - [self sdl_transitionToStoppedState:endServiceNAK.header.serviceType]; + if (endServiceNAK.header.serviceType != SDLServiceTypeVideo) { return; } + + SDLControlFramePayloadNak *nakPayload = [[SDLControlFramePayloadNak alloc] initWithData:endServiceNAK.payload]; + SDLLogE(@"Request to end video service NAKed with payload: %@", nakPayload); + + /// Core will NAK the video end service control frame if video is not streaming or if video is streaming but the HMI does not recognize that video is streaming. + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped]; } #pragma mark - SDL RPC Notification callbacks @@ -571,28 +589,21 @@ - (void)sdl_didReceiveRegisterAppInterfaceResponse:(SDLRPCResponseNotification * } SDLLogD(@"Received Register App Interface"); - SDLRegisterAppInterfaceResponse* registerResponse = (SDLRegisterAppInterfaceResponse*)notification.response; + SDLRegisterAppInterfaceResponse *registerResponse = (SDLRegisterAppInterfaceResponse *)notification.response; - SDLLogV(@"Determining whether streaming is supported"); #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated" - if ([SDLGlobals.sharedGlobals.rpcVersion isGreaterThanOrEqualToVersion:[[SDLVersion alloc] initWithMajor:4 minor:5 patch:0]]) { - _streamingSupported = registerResponse.hmiCapabilities.videoStreaming.boolValue; - } else { - _streamingSupported = YES; - } -#pragma clang diagnostic pop - if (!self.isStreamingSupported) { - SDLLogE(@"Graphics are not supported on this head unit. We are are assuming screen size is also unavailable and exiting."); - return; - } -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - SDLImageResolution* resolution = registerResponse.displayCapabilities.screenParams.resolution; + SDLImageResolution *resolution = registerResponse.displayCapabilities.screenParams.resolution; #pragma clang diagnostic pop if (resolution != nil) { self.videoScaleManager.displayViewportResolution = CGSizeMake(resolution.resolutionWidth.floatValue, resolution.resolutionHeight.floatValue); + // HAX: Workaround for Legacy Ford and Lincoln displays with > 800 resolution width or height. They don't support scaling and if we don't do this workaround, they will not correctly scale the view. + NSString *make = registerResponse.vehicleType.make; + CGSize resolution = self.videoScaleManager.displayViewportResolution; + if (([make containsString:@"Ford"] || [make containsString:@"Lincoln"]) && (resolution.width > 800 || resolution.height > 800)) { + self.videoScaleManager.scale = 1.0f / 0.75f; // Scale by 1.333333 + } } self.connectedVehicleMake = registerResponse.vehicleType.make; @@ -600,6 +611,13 @@ - (void)sdl_didReceiveRegisterAppInterfaceResponse:(SDLRPCResponseNotification * SDLLogD(@"Determined base screen size on display capabilities: %@", NSStringFromCGSize(self.videoScaleManager.displayViewportResolution)); } +/// Parses out the `hmiLevel` and `videoStreamingState` from an `OnHMIStatus` notification from Core. Since Core only allows video streaming when the `hmiLevel` is `FULL` or `LIMITED`, sending video data when the `hmiLevel` is not `FULL` or `LIMITED` will result in Core forcing an unregistration with a reason of `PROTOCOL_VIOLATION`. +/// 1. The `hmiLevel` will go to `FULL` when the user opens the SDL app by tapping on the SDL app icon on the HMI or uses a voice command to launch the SDL app. +/// 2. The `hmiLevel` will go to `LIMITED` when the user backgrounds the SDL app by opening another app or by going back to the home screen. +/// 3. The `hmiLevel` will go to `NONE` when the user "exits" the app (either through gesture or voice commands). It will also go to `NONE` if video fails to stream and the user presses "cancel" on the HMI popup. In these cases the transport between the phone and accessory will still be open. It will also go to `NONE` when the user disconnects the transport between the phone and accessory. In this case no notification will be recieved since the transport was disconnected. +/// 4. The `hmiLevel` will go to `BACKGROUND` if the app is in `LIMITED` and another app takes over video streaming capability (i.e. another navigation app's `hmiLevel` changes to `FULL`). +/// +/// @param notification The `OnHMIStatus` notification - (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification { NSAssert([notification.notification isKindOfClass:[SDLOnHMIStatus class]], @"A notification was sent with an unanticipated object"); if (![notification.notification isKindOfClass:[SDLOnHMIStatus class]]) { @@ -610,6 +628,7 @@ - (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification { if (hmiStatus.windowID != nil && hmiStatus.windowID.integerValue != SDLPredefinedWindowsDefaultWindow) { return; } + self.hmiLevel = hmiStatus.hmiLevel; SDLVideoStreamingState newState = hmiStatus.videoStreamingState ?: SDLVideoStreamingStateStreamable; @@ -619,7 +638,10 @@ - (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification { } // if startWithProtocol has not been called yet, abort here - if (!self.protocol) { return; } + if (self.protocol == nil) { + SDLLogW(@"No session established with head unit. HMI status is not relevant."); + return; + } if (self.isHmiStateVideoStreamCapable) { [self sdl_startVideoSession]; @@ -648,8 +670,8 @@ - (void)videoEncoder:(SDLH264VideoEncoder *)encoder hasEncodedFrame:(NSData *)en - (void)sdl_startVideoSession { SDLLogV(@"Attempting to start video session"); - if (!self.protocol) { - SDLLogV(@"Video manager is not yet started"); + if (self.protocol == nil) { + SDLLogW(@"No transport established with head unit. Video start service request will not be sent."); return; } @@ -676,22 +698,14 @@ - (void)sdl_startVideoSession { - (void)sdl_stopVideoSession { SDLLogV(@"Attempting to stop video session"); if (!self.isStreamingSupported) { + SDLLogW(@"Head unit does not support video streaming. Will not send an end video service request"); return; } - if (self.isVideoConnected || self.isVideoSuspended) { [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateShuttingDown]; - } -} - -- (void)sdl_transitionToStoppedState:(SDLServiceType)serviceType { - switch (serviceType) { - case SDLServiceTypeVideo: - [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped]; - break; - default: - break; + } else { + SDLLogW(@"No video is currently streaming. Will not send an end video service request."); } } @@ -768,7 +782,7 @@ - (void)sdl_sendVideoStartService { if (self.preferredFormatIndex >= self.preferredFormats.count || self.preferredResolutionIndex >= self.preferredResolutions.count) { SDLLogE(@"No preferred format or no preferred resolution found that works: format index %lu, resolution index %lu", (unsigned long)self.preferredFormatIndex, (unsigned long)self.preferredResolutionIndex); - [self sdl_transitionToStoppedState:SDLServiceTypeVideo]; + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped]; return; } @@ -832,6 +846,10 @@ - (NSString *)videoStreamBackgroundString { return [NSString stringWithFormat:@"When it is safe to do so, open %@ on your phone", self.appName]; } +- (BOOL)isStreamingSupported { + return (self.systemCapabilityManager != nil) ? [self.systemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming] : YES; +} + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLSyncPData.h b/SmartDeviceLink/SDLSyncPData.h index 6dbad57e0..a72ad2cc9 100644 --- a/SmartDeviceLink/SDLSyncPData.h +++ b/SmartDeviceLink/SDLSyncPData.h @@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN * * *** DEPRECATED *** */ +__deprecated @interface SDLSyncPData : SDLRPCRequest @end diff --git a/SmartDeviceLink/SDLSyncPData.m b/SmartDeviceLink/SDLSyncPData.m index bd3453b95..46bd04427 100644 --- a/SmartDeviceLink/SDLSyncPData.m +++ b/SmartDeviceLink/SDLSyncPData.m @@ -10,7 +10,10 @@ NS_ASSUME_NONNULL_BEGIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" @implementation SDLSyncPData +#pragma clang diagnostic pop #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" diff --git a/SmartDeviceLink/SDLSyncPDataResponse.h b/SmartDeviceLink/SDLSyncPDataResponse.h index 43b228a15..e99452915 100644 --- a/SmartDeviceLink/SDLSyncPDataResponse.h +++ b/SmartDeviceLink/SDLSyncPDataResponse.h @@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN DEPRECATED */ +__deprecated @interface SDLSyncPDataResponse : SDLRPCResponse @end diff --git a/SmartDeviceLink/SDLSyncPDataResponse.m b/SmartDeviceLink/SDLSyncPDataResponse.m index 64341aa58..315af6b7c 100644 --- a/SmartDeviceLink/SDLSyncPDataResponse.m +++ b/SmartDeviceLink/SDLSyncPDataResponse.m @@ -10,7 +10,10 @@ NS_ASSUME_NONNULL_BEGIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" @implementation SDLSyncPDataResponse +#pragma clang diagnostic pop #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" diff --git a/SmartDeviceLink/SDLSystemCapabilityManager.h b/SmartDeviceLink/SDLSystemCapabilityManager.h index f5695b3bf..ca1c35792 100644 --- a/SmartDeviceLink/SDLSystemCapabilityManager.h +++ b/SmartDeviceLink/SDLSystemCapabilityManager.h @@ -51,14 +51,18 @@ typedef void (^SDLUpdateCapabilityHandler)(NSError * _Nullable error, SDLSystemC typedef void (^SDLCapabilityUpdateHandler)(SDLSystemCapability *capability); /** - A manager that handles updating and subscribing to SDL capabilities. + An observer block for whenever a subscription or value is retrieved. + + @param capability The capability that was updated. + @param subscribed Whether or not the capability was subscribed or if the capability will only be pulled once. + @param error An error that occurred. */ -@interface SDLSystemCapabilityManager : NSObject +typedef void (^SDLCapabilityUpdateWithErrorHandler)(SDLSystemCapability * _Nullable capability, BOOL subscribed, NSError * _Nullable error); /** - YES if subscriptions are available on the connected head unit. If NO, calls to `subscribeToCapabilityType:withBlock` and `subscribeToCapabilityType:withObserver:selector` will fail. + A manager that handles updating and subscribing to SDL capabilities. */ -@property (assign, nonatomic, readonly) BOOL supportsSubscriptions; +@interface SDLSystemCapabilityManager : NSObject /** * Provides window capabilities of all displays connected with SDL. By default, one display is connected and supported which includes window capability information of the default main window of the display. May be nil if the system has not provided display and window capability information yet. @@ -212,6 +216,11 @@ typedef void (^SDLCapabilityUpdateHandler)(SDLSystemCapability *capability); */ @property (nullable, strong, nonatomic, readonly) SDLWindowCapability *defaultMainWindowCapability; +/** + YES if subscriptions are available on the connected module and you will automatically be notified if the value changes on the module. If NO, calls to `subscribe` methods will subscribe to updates, but the module will not automatically notify you. You will need to call `updateWithCapabilityType:completionHandler:` to force an update if you need one (though this should be rare). This does not apply to the `DISPLAYS` capability type which you can always subscribe to. + */ +@property (assign, nonatomic, readonly) BOOL supportsSubscriptions; + /** Init is unavailable. Dependencies must be injected using initWithConnectionManager: @@ -239,53 +248,87 @@ typedef void (^SDLCapabilityUpdateHandler)(SDLSystemCapability *capability); - (void)stop; /** - * Retrieves a capability type from the remote system. This function must be called in order to retrieve the values for `navigationCapability`, `phoneCapability`, `videoStreamingCapability`, `remoteControlCapability`, and `appServicesCapabilities`. If you do not call this method first, those values will be nil. After calling this method, assuming there is no error in the handler, you may retrieve the capability you requested from the manager within the handler. + * Returns the window capability of one of your app's windows with the specified window ID that is on the primary display (i.e. the head unit itself). This is a convenience method to easily access capabilities of windows such as your apps' widget windows. + * + * To get the capabilities of the main window on the main display (i.e. your app's primary app screen on the head unit itself). * - * @param type The type of capability to retrieve - * @param handler The handler to be called when the retrieval is complete + * @param windowID The ID of the window from which to get capabilities + * @returns The window window capabilities of the window with the specified windowID, or nil if the window is not known or no window capabilities exist. */ -- (void)updateCapabilityType:(SDLSystemCapabilityType)type completionHandler:(SDLUpdateCapabilityHandler)handler; - -/** - Subscribe to a particular capability type using a block callback +- (nullable SDLWindowCapability *)windowCapabilityWithWindowID:(NSUInteger)windowID; - @param type The type of capability to subscribe to - @param block The block to be called when the capability is updated - @return An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if subscriptions aren't available on this head unit - */ -- (nullable id)subscribeToCapabilityType:(SDLSystemCapabilityType)type withBlock:(SDLCapabilityUpdateHandler)block; +/// Returns whether or not the capability type is supported on the module. You can use this to check if subscribing to the capability will work. If this returns NO, then the feature is not supported by the head unit. If YES, the feature is supported by the head unit. You can subscribe to the capability type to get more information about the capability's support and features on the connected module. +/// @param type The SystemCapabilityType that will be checked. +/// @return Whether or not `type` is supported by the connected head unit. +- (BOOL)isCapabilitySupported:(SDLSystemCapabilityType)type NS_SWIFT_NAME(isCapabilitySupported(type:)); /** - * Subscribe to a particular capability type with a selector callback. The selector supports the following parameters: - * - * 1. No parameters e.g. `- (void)phoneCapabilityUpdated;` - * 2. One `SDLSystemCapability *` parameter e.g. `- (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability` - * - * This method will be called immediately with the current value and called every time the value is updated on RPC v5.1.0+ systems (`supportsSubscriptions == YES`). If this method is called on a sub-v5.1.0 system (`supportsSubscriptions == NO`), the method will return `NO` and the selector will never be called. + * This method has been superseded by the `subscribeToCapabilityType:` methods. You should use one of those methods instead unless you only want a value once (you don't want to keep a long-lasting observer) and it must be current (most capabilities do not need to be updated). If you have a separate subscription observer and are connected to a head unit that does not support subscriptions, when this method returns, it will also call all subscription callbacks that you've set up with the new value if there is one. Therefore, you can use this method to force an update to all subscriptions of that particular type on head units that don't support subscriptions (`supportsSubscriptions == NO`). * - * @param type The type of the system capability to subscribe to - * @param observer The object that will have `selector` called whenever the capability is updated - * @param selector The selector on `observer` that will be called whenever the capability is updated - * @return Whether or not the subscription succeeded. `NO` if the connected system doesn't support capability subscriptions, or if the `selector` doesn't support the correct parameters (see above) + * @param type The type of capability to retrieve + * @param handler The handler to be called when the retrieval is complete */ +- (void)updateCapabilityType:(SDLSystemCapabilityType)type completionHandler:(SDLUpdateCapabilityHandler)handler; + +/// Subscribe to a particular capability type using a block callback. +/// +/// On v5.1.0+ systems (where `supportsSubscriptions == YES`): +/// This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated. +/// +/// On sub-v5.1.0 systems (where `supportsSubscriptions == NO`): +/// The method will be called immediately with the current value and will _not_ be automatically called every time the value is updated, unless the `type` is `DISPLAYS` which is supported on every version. If `updateCapabilityType:completionHandler` is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this `SDLSystemCapabilityType`, then the value will be retrieved and returned. +/// +/// @param type The type of capability to subscribe to +/// @param block The block to be called when the capability is updated +/// @return An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if the manager can't attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS). +- (nullable id)subscribeToCapabilityType:(SDLSystemCapabilityType)type withBlock:(SDLCapabilityUpdateHandler)block __deprecated_msg("use subscribeToCapabilityType:withUpdateHandler: instead"); + +/// Subscribe to a particular capability type using a handler callback. +/// +/// On v5.1.0+ systems (where `supportsSubscriptions == YES`): +/// This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated. +/// +/// Note that when the cached value is returned, the `subscribed` flag on the handler will be false until the subscription completes successfully and a new value is retrieved. +/// +/// On sub-v5.1.0 systems (where `supportsSubscriptions == NO`): +/// The method will be called immediately with the current value and will _not_ be automatically called every time the value is updated, unless the `type` is `DISPLAYS` which is supported on every version. If `updateCapabilityType:completionHandler` is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this `SDLSystemCapabilityType`, then the value will be retrieved and returned. +/// +/// @param type The type of capability to subscribe to +/// @param handler The block to be called when the capability is updated with an error if one occurs +/// @return An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if the manager can't attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS). +- (nullable id)subscribeToCapabilityType:(SDLSystemCapabilityType)type withUpdateHandler:(SDLCapabilityUpdateWithErrorHandler)handler NS_SWIFT_NAME(subscribe(capabilityType:updateHandler:)); + + +/// Subscribe to a particular capability type with a selector callback. +/// +/// The selector supports the following parameters: +/// +/// 1. No parameters e.g. `- (void)phoneCapabilityUpdated;` +/// +/// 2. One `SDLSystemCapability *` parameter, e.g. `- (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability` +/// +/// 3. Two parameters, one `SDLSystemCapability *` parameter, and one `NSError` parameter, e.g. `- (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability error:(NSError *)error` +/// +/// 4. Three parameters, one `SDLSystemCapability *` parameter, one `NSError` parameter, and one `BOOL` parameter e.g. `- (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability error:(NSError *)error subscribed:(BOOL)subscribed` +/// +/// On v5.1.0+ systems (where `supportsSubscriptions == YES`): +/// This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated. +/// +/// On sub-v5.1.0 systems (where `supportsSubscriptions == NO`): +/// The method will be called immediately with the current value and will _not_ be automatically called every time the value is updated, unless the `type` is `DISPLAYS` which is supported on every version. If `updateCapabilityType:completionHandler` is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this `SDLSystemCapabilityType`, then the value will be retrieved and returned. +/// +/// @param type The type of the system capability to subscribe to +/// @param observer The object that will have `selector` called whenever the capability is updated +/// @param selector The selector on `observer` that will be called whenever the capability is updated +/// @return YES if the manager is attempting the subscription, or NO if the manager can't attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS), or the selector doesn't contain the correct number of parameters. - (BOOL)subscribeToCapabilityType:(SDLSystemCapabilityType)type withObserver:(id)observer selector:(SEL)selector; -/** - * Unsubscribe from a particular capability type. If it was subscribed with a block, the return value should be passed to the `observer` to unsubscribe the block. If it was subscribed with a selector, the `observer` object should be passed to unsubscribe the object selector. - * - * @param type The type of the system capability to unsubscribe from - * @param observer The object that will be unsubscribed. If a block was subscribed, the return value should be passed. If a selector was subscribed, the observer object should be passed. - */ +/// Unsubscribe from a particular capability type. If it was subscribed with a block / handler, the return value should be passed to the `observer` to unsubscribe the block. If it was subscribed with a selector, the `observer` object (on which the selector exists and is called) should be passed to unsubscribe the object selector. +/// +/// @param type The type of the system capability to unsubscribe from +/// @param observer The object that will be unsubscribed. If a block was subscribed, the return value should be passed. If a selector was subscribed, the observer object should be passed. - (void)unsubscribeFromCapabilityType:(SDLSystemCapabilityType)type withObserver:(id)observer; -/** - * Returns the window capability object of the primary display with the specified window ID. This is a convenient method to easily access capabilities of windows for instance widget windows of the main display. - * - * @param windowID The ID of the window to get capabilities - * @returns The window capability object representing the window capabilities of the window with the specified window ID or nil if the window is not known or no window capabilities exist. - */ -- (nullable SDLWindowCapability *)windowCapabilityWithWindowID:(NSUInteger)windowID; - @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLSystemCapabilityManager.m b/SmartDeviceLink/SDLSystemCapabilityManager.m index 0f1c4faf3..ea1dee9b5 100644 --- a/SmartDeviceLink/SDLSystemCapabilityManager.m +++ b/SmartDeviceLink/SDLSystemCapabilityManager.m @@ -19,6 +19,7 @@ #import "SDLGetSystemCapability.h" #import "SDLGetSystemCapabilityResponse.h" #import "SDLGlobals.h" +#import "SDLHMICapabilities.h" #import "SDLLogMacros.h" #import "SDLNavigationCapability.h" #import "SDLNotificationConstants.h" @@ -69,12 +70,10 @@ @interface SDLSystemCapabilityManager () @property (assign, nonatomic, readwrite) BOOL supportsSubscriptions; @property (strong, nonatomic) NSMutableDictionary *> *capabilityObservers; - -@property (nullable, strong, nonatomic) SDLSystemCapability *lastReceivedCapability; - -@property (assign, nonatomic) BOOL isFirstHMILevelFull; +@property (strong, nonatomic) NSMutableDictionary *> *subscriptionStatus; @property (assign, nonatomic) BOOL shouldConvertDeprecatedDisplayCapabilities; +@property (strong, nonatomic) SDLHMILevel currentHMILevel; @end @@ -89,27 +88,20 @@ - (instancetype)initWithConnectionManager:(id)manager } _connectionManager = manager; - _isFirstHMILevelFull = NO; _shouldConvertDeprecatedDisplayCapabilities = YES; _appServicesCapabilitiesDictionary = [NSMutableDictionary dictionary]; _capabilityObservers = [NSMutableDictionary dictionary]; - for (SDLSystemCapabilityType capabilityType in [self.class sdl_systemCapabilityTypes]) { - _capabilityObservers[capabilityType] = [NSMutableArray array]; - } + _subscriptionStatus = [NSMutableDictionary dictionary]; + + _currentHMILevel = SDLHMILevelNone; [self sdl_registerForNotifications]; return self; } -- (void)start { - SDLVersion *onSystemCapabilityNotificationRPCVersion = [SDLVersion versionWithString:@"5.1.0"]; - SDLVersion *headUnitRPCVersion = SDLGlobals.sharedGlobals.rpcVersion; - if ([headUnitRPCVersion isGreaterThanOrEqualToVersion:onSystemCapabilityNotificationRPCVersion]) { - _supportsSubscriptions = YES; - } -} +- (void)start { } /** * Resets the capabilities when a transport session is closed. @@ -136,136 +128,26 @@ - (void)stop { _appServicesCapabilitiesDictionary = [NSMutableDictionary dictionary]; _supportsSubscriptions = NO; - for (SDLSystemCapabilityType capabilityType in [self.class sdl_systemCapabilityTypes]) { - _capabilityObservers[capabilityType] = [NSMutableArray array]; - } + [_capabilityObservers removeAllObjects]; + [_subscriptionStatus removeAllObjects]; + + _currentHMILevel = SDLHMILevelNone; - _isFirstHMILevelFull = NO; _shouldConvertDeprecatedDisplayCapabilities = YES; } #pragma mark - Getters +- (BOOL)supportsSubscriptions { + return [[SDLGlobals sharedGlobals].rpcVersion isGreaterThanOrEqualToVersion:[SDLVersion versionWithString:@"5.1.0"]]; +} + - (nullable SDLAppServicesCapabilities *)appServicesCapabilities { if (self.appServicesCapabilitiesDictionary.count == 0) { return nil; } return [[SDLAppServicesCapabilities alloc] initWithAppServices:self.appServicesCapabilitiesDictionary.allValues]; } -#pragma mark - Notifications - -/** - * Registers for notifications and responses from Core - */ -- (void)sdl_registerForNotifications { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_registerResponse:) name:SDLDidReceiveRegisterAppInterfaceResponse object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_displayLayoutResponse:) name:SDLDidReceiveSetDisplayLayoutResponse object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_systemCapabilityUpdatedNotification:) name:SDLDidReceiveSystemCapabilityUpdatedNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_systemCapabilityResponseNotification:) name:SDLDidReceiveGetSystemCapabilitiesResponse object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiStatusNotification:) name:SDLDidChangeHMIStatusNotification object:nil]; -} - -/** - * Called when a `RegisterAppInterfaceResponse` response is received from Core. The head unit capabilities are saved. - * - * @param notification The `RegisterAppInterfaceResponse` response received from Core - */ -- (void)sdl_registerResponse:(SDLRPCResponseNotification *)notification { - SDLRegisterAppInterfaceResponse *response = (SDLRegisterAppInterfaceResponse *)notification.response; - if (!response.success.boolValue) { return; } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - self.displayCapabilities = response.displayCapabilities; - self.softButtonCapabilities = response.softButtonCapabilities; - self.buttonCapabilities = response.buttonCapabilities; - self.presetBankCapabilities = response.presetBankCapabilities; -#pragma clang diagnostic pop - - self.hmiCapabilities = response.hmiCapabilities; - self.hmiZoneCapabilities = response.hmiZoneCapabilities; - self.speechCapabilities = response.speechCapabilities; - self.prerecordedSpeechCapabilities = response.prerecordedSpeech; - self.vrCapability = (response.vrCapabilities.count > 0 && [response.vrCapabilities.firstObject isEqualToEnum:SDLVRCapabilitiesText]) ? YES : NO; - self.audioPassThruCapabilities = response.audioPassThruCapabilities; - self.pcmStreamCapability = response.pcmStreamCapabilities; - - self.shouldConvertDeprecatedDisplayCapabilities = YES; - self.displays = [self sdl_createDisplayCapabilityListFromRegisterResponse:response]; - - // call the observers in case the new display capability list is created from deprecated types - SDLSystemCapability *systemCapability = [[SDLSystemCapability alloc] initWithDisplayCapabilities:self.displays]; - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:nil]; -} - -/** - * Called when a `SetDisplayLayoutResponse` response is received from Core. If the template was set successfully, the the new capabilities for the template are saved. - * - * @param notification The `SetDisplayLayoutResponse` response received from Core - */ -- (void)sdl_displayLayoutResponse:(SDLRPCResponseNotification *)notification { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - SDLSetDisplayLayoutResponse *response = (SDLSetDisplayLayoutResponse *)notification.response; -#pragma clang diagnostic pop - if (!response.success.boolValue) { return; } - - // If we've received a display capability update then we should not convert our deprecated display capabilities and we should just return - if (!self.shouldConvertDeprecatedDisplayCapabilities) { return; } - - self.displayCapabilities = response.displayCapabilities; - self.buttonCapabilities = response.buttonCapabilities; - self.softButtonCapabilities = response.softButtonCapabilities; - self.presetBankCapabilities = response.presetBankCapabilities; - - self.displays = [self sdl_createDisplayCapabilityListFromSetDisplayLayoutResponse:response]; - - // Call the observers in case the new display capability list is created from deprecated types - SDLSystemCapability *systemCapability = [[SDLSystemCapability alloc] initWithDisplayCapabilities:self.displays]; - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:nil]; -} - - -/** - * Called when an `OnSystemCapabilityUpdated` notification is received from Core. The updated system capabilty is saved. - * - * @param notification The `OnSystemCapabilityUpdated` notification received from Core - */ -- (void)sdl_systemCapabilityUpdatedNotification:(SDLRPCNotificationNotification *)notification { - SDLOnSystemCapabilityUpdated *systemCapabilityUpdatedNotification = (SDLOnSystemCapabilityUpdated *)notification.notification; - [self sdl_saveSystemCapability:systemCapabilityUpdatedNotification.systemCapability completionHandler:nil]; -} - -/** - Called with a `GetSystemCapabilityResponse` notification is received from core. The updated system capability is saved. - - @param notification The `GetSystemCapabilityResponse` notification received from Core - */ -- (void)sdl_systemCapabilityResponseNotification:(SDLRPCResponseNotification *)notification { - SDLGetSystemCapabilityResponse *systemCapabilityResponse = (SDLGetSystemCapabilityResponse *)notification.response; - [self sdl_saveSystemCapability:systemCapabilityResponse.systemCapability completionHandler:nil]; -} - -/** - * Called when an `OnHMIStatus` notification is received from Core. The first time the `hmiLevel` is `FULL` attempt to subscribe to system capabilty updates. - * - * @param notification The `OnHMIStatus` notification received from Core - */ -- (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification { - SDLOnHMIStatus *hmiStatus = (SDLOnHMIStatus *)notification.notification; - - if (hmiStatus.windowID != nil && hmiStatus.windowID.integerValue != SDLPredefinedWindowsDefaultWindow) { - return; - } - - if (self.isFirstHMILevelFull || ![hmiStatus.hmiLevel isEqualToEnum:SDLHMILevelFull]) { - return; - } - - self.isFirstHMILevelFull = YES; - [self sdl_subscribeToSystemCapabilityUpdates]; -} - #pragma mark - Window And Display Capabilities - (nullable SDLWindowCapability *)windowCapabilityWithWindowID:(NSUInteger)windowID { @@ -308,6 +190,7 @@ - (nullable SDLWindowCapability *)defaultMainWindowCapability { /// @param buttons The old-style `SDLButtonCapabilities` object to convert /// @param softButtons The old-style `SDLSoftButtonCapabilities` to convert - (NSArray *)sdl_createDisplayCapabilityListFromDeprecatedDisplayCapabilities:(SDLDisplayCapabilities *)display buttons:(NSArray *)buttons softButtons:(NSArray *)softButtons { + SDLLogV(@"Creating display capability from deprecated display capabilities"); // Based on deprecated Display capabilities we don't know if widgets are supported. The default MAIN window is the only window we know is supported, so it's the only one we will expose. SDLWindowTypeCapabilities *windowTypeCapabilities = [[SDLWindowTypeCapabilities alloc] initWithType:SDLWindowTypeMain maximumNumberOfWindows:1]; #pragma clang diagnostic push @@ -352,94 +235,148 @@ For backward compatibility (AppLink 2.0) static image type is always presented #pragma mark Convert New to Deprecated -/// Convert from a WindowCapability (should be the main display's main window capability) to the deprecated old-style DisplayCapabilities -/// @param displayName The display name of the display to be converted -/// @param windowCapability The window capability to be converted -- (SDLDisplayCapabilities *)sdl_createDeprecatedDisplayCapabilitiesWithDisplayName:(NSString *)displayName windowCapability:(SDLWindowCapability *)windowCapability { - SDLDisplayCapabilities *convertedCapabilities = [[SDLDisplayCapabilities alloc] init]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - convertedCapabilities.displayType = SDLDisplayTypeGeneric; // deprecated but it is mandatory -#pragma clang diagnostic pop - convertedCapabilities.displayName = displayName; - convertedCapabilities.textFields = [windowCapability.textFields copy]; - convertedCapabilities.imageFields = [windowCapability.imageFields copy]; - convertedCapabilities.templatesAvailable = [windowCapability.templatesAvailable copy]; - convertedCapabilities.numCustomPresetsAvailable = [windowCapability.numCustomPresetsAvailable copy]; - convertedCapabilities.mediaClockFormats = @[]; // mandatory field but allows empty array - convertedCapabilities.graphicSupported = @([windowCapability.imageTypeSupported containsObject:SDLImageTypeDynamic]); - - return convertedCapabilities; -} - /// Update the internal deprecated display capability methods with new values based on the current value of the default main window capability and the primary display - (void)sdl_updateDeprecatedDisplayCapabilities { + SDLLogV(@"Updating deprecated capabilities from default main window capabilities"); SDLWindowCapability *defaultMainWindowCapabilities = self.defaultMainWindowCapability; if (self.displays.count == 0) { return; } // Create the deprecated capabilities for backward compatibility if developers try to access them - self.displayCapabilities = [self sdl_createDeprecatedDisplayCapabilitiesWithDisplayName:self.displays.firstObject.displayName windowCapability:defaultMainWindowCapabilities]; + SDLDisplayCapabilities *convertedCapabilities = [[SDLDisplayCapabilities alloc] init]; + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated" + convertedCapabilities.displayType = SDLDisplayTypeGeneric; // deprecated but it is mandatory + #pragma clang diagnostic pop + convertedCapabilities.displayName = self.displays.firstObject.displayName; + convertedCapabilities.textFields = [defaultMainWindowCapabilities.textFields copy]; + convertedCapabilities.imageFields = [defaultMainWindowCapabilities.imageFields copy]; + convertedCapabilities.templatesAvailable = [defaultMainWindowCapabilities.templatesAvailable copy]; + convertedCapabilities.numCustomPresetsAvailable = [defaultMainWindowCapabilities.numCustomPresetsAvailable copy]; + convertedCapabilities.mediaClockFormats = @[]; // mandatory field but allows empty array + convertedCapabilities.graphicSupported = @([defaultMainWindowCapabilities.imageTypeSupported containsObject:SDLImageTypeDynamic]); + + self.displayCapabilities = convertedCapabilities; self.buttonCapabilities = defaultMainWindowCapabilities.buttonCapabilities; self.softButtonCapabilities = defaultMainWindowCapabilities.softButtonCapabilities; } #pragma mark - System Capability Updates +- (BOOL)isCapabilitySupported:(SDLSystemCapabilityType)type { + if ([self sdl_cachedCapabilityForType:type] != nil) { + return YES; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypePhoneCall]) { + return self.hmiCapabilities.phoneCall.boolValue; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeNavigation]) { + return self.hmiCapabilities.navigation.boolValue; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + return self.hmiCapabilities.displays.boolValue; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeRemoteControl]) { + return self.hmiCapabilities.remoteControl.boolValue; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeSeatLocation]) { + return self.hmiCapabilities.seatLocation.boolValue; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeAppServices]) { + //This is a corner case that the param was not available in 5.1.0, but the app services feature was available. We have to say it's available because we don't know. + if ([[SDLGlobals sharedGlobals].rpcVersion isEqualToVersion:[SDLVersion versionWithString:@"5.1.0"]]) { + return YES; + } + + return self.hmiCapabilities.appServices.boolValue; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeVideoStreaming]) { + if ([[SDLGlobals sharedGlobals].rpcVersion isGreaterThanOrEqualToVersion:[SDLVersion versionWithString:@"3.0.0"]] && [[SDLGlobals sharedGlobals].rpcVersion isLessThanOrEqualToVersion:[SDLVersion versionWithString:@"4.4.0"]]) { + // This was before the system capability feature was added so check if graphics are supported instead using the deprecated display capabilities + return self.displayCapabilities.graphicSupported.boolValue; + } + + return self.hmiCapabilities.videoStreaming.boolValue; + } else { + return NO; + } + + + return NO; +} + +- (nullable SDLSystemCapability *)sdl_cachedCapabilityForType:(SDLSystemCapabilityType)type { + if ([type isEqualToEnum:SDLSystemCapabilityTypePhoneCall] && self.phoneCapability != nil) { + return [[SDLSystemCapability alloc] initWithPhoneCapability:self.phoneCapability]; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeNavigation] && self.navigationCapability != nil) { + return [[SDLSystemCapability alloc] initWithNavigationCapability:self.navigationCapability]; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeAppServices] && self.appServicesCapabilities != nil) { + return [[SDLSystemCapability alloc] initWithAppServicesCapabilities:self.appServicesCapabilities]; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeDisplays] && self.displays != nil) { + return [[SDLSystemCapability alloc] initWithDisplayCapabilities:self.displays]; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeSeatLocation] && self.seatLocationCapability != nil) { + return [[SDLSystemCapability alloc] initWithSeatLocationCapability:self.seatLocationCapability]; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeRemoteControl] && self.remoteControlCapability != nil) { + return [[SDLSystemCapability alloc] initWithRemoteControlCapability:self.remoteControlCapability]; + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeVideoStreaming] && self.videoStreamingCapability != nil) { + return [[SDLSystemCapability alloc] initWithVideoStreamingCapability:self.videoStreamingCapability]; + } else { + return nil; + } +} + - (void)updateCapabilityType:(SDLSystemCapabilityType)type completionHandler:(SDLUpdateCapabilityHandler)handler { - if (self.supportsSubscriptions) { + SDLLogV(@"Updating capability type: %@", type); + if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone] && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + SDLLogE(@"Attempted to update type: %@ in HMI level NONE, which is not allowed. Please wait until you are in HMI BACKGROUND, LIMITED, or FULL before attempting to update any SystemCapabilityType DISPLAYS.", type); + return handler([NSError sdl_systemCapabilityManager_cannotUpdateInHMINONE], self); + } else if ([type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + SDLLogE(@"Attempted to update type DISPLAYS, which is not allowed. You are always subscribed to displays, please either pull the cached data directly or subscribe for updates to DISPLAYS."); + return handler([NSError sdl_systemCapabilityManager_cannotUpdateTypeDISPLAYS], self); + } + + // If we support subscriptions and we're already subscribed + if (self.supportsSubscriptions && [self.subscriptionStatus[type] isEqualToNumber:@YES]) { // Just return the cached data because we get `onSystemCapability` callbacks handler(nil, self); } else { // Go and get the actual data - SDLGetSystemCapability *getSystemCapability = [[SDLGetSystemCapability alloc] initWithType:type]; - [self sdl_sendGetSystemCapability:getSystemCapability completionHandler:handler]; + __weak typeof(self) weakself = self; + [self sdl_sendGetSystemCapabilityWithType:type subscribe:nil completionHandler:^(SDLSystemCapability * _Nonnull capability, BOOL subscribed, NSError * _Nonnull error) { + handler(error, weakself); + }]; } } -/** - * A list of all possible system capability types. - * - * @return An array of all possible system capability types - */ -+ (NSArray *)sdl_systemCapabilityTypes { - return @[SDLSystemCapabilityTypeAppServices, SDLSystemCapabilityTypeNavigation, SDLSystemCapabilityTypePhoneCall, SDLSystemCapabilityTypeVideoStreaming, SDLSystemCapabilityTypeRemoteControl, SDLSystemCapabilityTypeDisplays, SDLSystemCapabilityTypeSeatLocation]; -} - # pragma mark Subscribing -/** - * Sends a subscribe request for all possible system capabilites. If connecting to Core versions 4.5+, the requested capability will be returned in the response. If connecting to Core versions 5.1+, the manager will received `OnSystemCapabilityUpdated` notifications when the capability updates if the subscription was successful. - */ -- (void)sdl_subscribeToSystemCapabilityUpdates { - for (SDLSystemCapabilityType type in [self.class sdl_systemCapabilityTypes]) { - SDLGetSystemCapability *getSystemCapability = [[SDLGetSystemCapability alloc] initWithType:type]; - if (self.supportsSubscriptions) { - getSystemCapability.subscribe = @YES; - } - - [self sdl_sendGetSystemCapability:getSystemCapability completionHandler:nil]; - } -} +/// Sends a GetSystemCapability and sends back the response +/// @param type The type to get +/// @param subscribe Whether to change the subscription status. YES to subscribe, NO to unsubscribe, nil to keep whatever the current state is +/// @param handler The handler to be returned +- (void)sdl_sendGetSystemCapabilityWithType:(SDLSystemCapabilityType)type subscribe:(nullable NSNumber *)subscribe completionHandler:(nullable SDLCapabilityUpdateWithErrorHandler)handler { + SDLLogV(@"Sending GetSystemCapability with type: %@, subscribe: %@", type, subscribe); + SDLGetSystemCapability *getSystemCapability = [[SDLGetSystemCapability alloc] initWithType:type]; + getSystemCapability.subscribe = subscribe; -/** - * Sends a `GetSystemCapability` to Core and handles the response by saving the returned data and notifying the subscriber. - * - * @param getSystemCapability The `GetSystemCapability` request to send - */ -- (void)sdl_sendGetSystemCapability:(SDLGetSystemCapability *)getSystemCapability completionHandler:(nullable SDLUpdateCapabilityHandler)handler { - __weak typeof(self) weakSelf = self; + __weak typeof(self) weakself = self; [self.connectionManager sendConnectionRequest:getSystemCapability withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { - if (error != nil) { - // An error is returned if the request was unsuccessful or if a Generic Response was returned + if (![response isKindOfClass:[SDLGetSystemCapabilityResponse class]]) { + SDLLogE(@"GetSystemCapability failed, type: %@, did not return a GetSystemCapability response", type); + if (handler == nil) { return; } + handler(nil, NO, [NSError sdl_systemCapabilityManager_moduleDoesNotSupportSystemCapabilities]); + return; + } + + if (response.success.boolValue == false) { + SDLLogE(@"GetSystemCapability failed, type: %@, error: %@", type, error); if (handler == nil) { return; } - handler(error, weakSelf); + handler(nil, NO, error); return; } SDLGetSystemCapabilityResponse *getSystemCapabilityResponse = (SDLGetSystemCapabilityResponse *)response; - [weakSelf sdl_saveSystemCapability:getSystemCapabilityResponse.systemCapability completionHandler:handler]; + SDLLogD(@"GetSystemCapability response succeeded, type: %@, response: %@", type, getSystemCapabilityResponse); + + if (![weakself.subscriptionStatus[type] isEqualToNumber:subscribe] && weakself.supportsSubscriptions) { + weakself.subscriptionStatus[type] = subscribe; + } + + [weakself sdl_saveSystemCapability:getSystemCapabilityResponse.systemCapability error:error completionHandler:handler]; }]; } @@ -452,42 +389,38 @@ - (void)sdl_sendGetSystemCapability:(SDLGetSystemCapability *)getSystemCapabilit @param handler The handler to be called when the save completes @return Whether or not the save occurred. This can be `NO` if the new system capability is equivalent to the old capability. */ -- (BOOL)sdl_saveSystemCapability:(SDLSystemCapability *)systemCapability completionHandler:(nullable SDLUpdateCapabilityHandler)handler { - if ([self.lastReceivedCapability isEqual:systemCapability]) { - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:handler]; - return NO; - } - self.lastReceivedCapability = systemCapability; +- (BOOL)sdl_saveSystemCapability:(nullable SDLSystemCapability *)systemCapability error:(nullable NSError *)error completionHandler:(nullable SDLCapabilityUpdateWithErrorHandler)handler { + SDLLogV(@"Saving system capability type: %@", systemCapability); SDLSystemCapabilityType systemCapabilityType = systemCapability.systemCapabilityType; if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypePhoneCall]) { if ([self.phoneCapability isEqual:systemCapability.phoneCapability]) { - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:handler]; + [self sdl_callObserversForUpdate:systemCapability error:error handler:handler]; return NO; } self.phoneCapability = systemCapability.phoneCapability; } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeNavigation]) { if ([self.navigationCapability isEqual:systemCapability.navigationCapability]) { - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:handler]; + [self sdl_callObserversForUpdate:systemCapability error:error handler:handler]; return NO; } self.navigationCapability = systemCapability.navigationCapability; } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeRemoteControl]) { if ([self.remoteControlCapability isEqual:systemCapability.remoteControlCapability]) { - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:handler]; + [self sdl_callObserversForUpdate:systemCapability error:error handler:handler]; return NO; } self.remoteControlCapability = systemCapability.remoteControlCapability; } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeSeatLocation]) { if ([self.seatLocationCapability isEqual:systemCapability.seatLocationCapability]) { - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:handler]; + [self sdl_callObserversForUpdate:systemCapability error:error handler:handler]; return NO; } self.seatLocationCapability = systemCapability.seatLocationCapability; } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeVideoStreaming]) { if ([self.videoStreamingCapability isEqual:systemCapability.videoStreamingCapability]) { - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:handler]; + [self sdl_callObserversForUpdate:systemCapability error:error handler:handler]; return NO; } self.videoStreamingCapability = systemCapability.videoStreamingCapability; @@ -504,13 +437,14 @@ - (BOOL)sdl_saveSystemCapability:(SDLSystemCapability *)systemCapability complet SDLLogD(@"Updated system capability manager with new data: %@", systemCapability); - [self sdl_callObserversForCapabilityUpdate:systemCapability handler:handler]; + [self sdl_callObserversForUpdate:systemCapability error:error handler:handler]; return YES; } #pragma mark Merge Capability Deltas - (void)sdl_saveAppServicesCapabilitiesUpdate:(SDLAppServicesCapabilities *)newCapabilities { + SDLLogV(@"Saving app services capability update with new capabilities: %@", newCapabilities); for (SDLAppServiceCapability *capability in newCapabilities.appServices) { if (capability.updateReason == nil) { // First update, new capability @@ -528,6 +462,7 @@ - (void)sdl_saveAppServicesCapabilitiesUpdate:(SDLAppServicesCapabilities *)newC /// @param newCapabilities The new `DisplayCapability` update delta. - (void)sdl_saveDisplayCapabilityListUpdate:(NSArray *)newCapabilities { NSArray *oldCapabilities = self.displays; + SDLLogV(@"Saving display capability update with new capabilities: %@", newCapabilities); if (oldCapabilities == nil) { self.displays = newCapabilities; @@ -547,15 +482,18 @@ - (void)sdl_saveDisplayCapabilityListUpdate:(NSArray *)n SDLWindowCapability *oldWindow = copyWindowCapabilities[i]; NSUInteger newWindowID = newWindow.windowID ? newWindow.windowID.unsignedIntegerValue : SDLPredefinedWindowsDefaultWindow; NSUInteger oldWindowID = oldWindow.windowID ? oldWindow.windowID.unsignedIntegerValue : SDLPredefinedWindowsDefaultWindow; + if (newWindowID == oldWindowID) { - copyWindowCapabilities[i] = newWindow; // replace the old window caps with new ones + // Replace the old window caps with new ones + copyWindowCapabilities[i] = newWindow; oldFound = true; break; } } if (!oldFound) { - [copyWindowCapabilities addObject:newWindow]; // this is a new unknown window + // This is a new unknown window + [copyWindowCapabilities addObject:newWindow]; } } @@ -568,32 +506,112 @@ - (void)sdl_saveDisplayCapabilityListUpdate:(NSArray *)n #pragma mark - Manager Subscriptions - (nullable id)subscribeToCapabilityType:(SDLSystemCapabilityType)type withBlock:(SDLCapabilityUpdateHandler)block { - // DISPLAYS always works due to old-style SetDisplayLayoutRepsonse updates, but otherwise, subscriptions won't work - if (!self.supportsSubscriptions && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { return nil; } - + SDLLogD(@"Subscribing to capability type: %@ with a handler (DEPRECATED)", type); SDLSystemCapabilityObserver *observerObject = [[SDLSystemCapabilityObserver alloc] initWithObserver:[[NSObject alloc] init] block:block]; - [self.capabilityObservers[type] addObject:observerObject]; + + if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone] && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + SDLLogE(@"Attempted to subscribe to type: %@ in HMI level NONE, which is not allowed. Please wait until you are in HMI BACKGROUND, LIMITED, or FULL before attempting to subscribe to any SystemCapabilityType other than DISPLAYS.", type); + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:nil error:[NSError sdl_systemCapabilityManager_cannotUpdateInHMINONE]]; + return nil; + } + + if (self.capabilityObservers[type] == nil) { + SDLLogD(@"This is the first subscription to capability type: %@, sending a GetSystemCapability with subscribe true", type); + self.capabilityObservers[type] = [NSMutableArray arrayWithObject:observerObject]; + + // We don't want to send this for the displays type because that's automatically subscribed + if (![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + [self sdl_sendGetSystemCapabilityWithType:type subscribe:@YES completionHandler:nil]; + } else { + // If we're not calling the GSC RPC we should invoke the observer with the cached data + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil]; + } + } else { + // Store the observer and call it immediately with the cached value + [self.capabilityObservers[type] addObject:observerObject]; + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil]; + } return observerObject.observer; } -- (BOOL)subscribeToCapabilityType:(SDLSystemCapabilityType)type withObserver:(id)observer selector:(SEL)selector { - // DISPLAYS always works due to old-style SetDisplayLayoutRepsonse updates, but otherwise, subscriptions won't work - if (!self.supportsSubscriptions && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { return NO; } +- (nullable id)subscribeToCapabilityType:(SDLSystemCapabilityType)type withUpdateHandler:(SDLCapabilityUpdateWithErrorHandler)handler { + SDLLogD(@"Subscribing to capability type: %@ with a handler", type); + SDLSystemCapabilityObserver *observerObject = [[SDLSystemCapabilityObserver alloc] initWithObserver:[[NSObject alloc] init] updateHandler:handler]; + + if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone] && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + SDLLogE(@"Attempted to subscribe to type: %@ in HMI level NONE, which is not allowed. Please wait until you are in HMI BACKGROUND, LIMITED, or FULL before attempting to subscribe to any SystemCapabilityType other than DISPLAYS.", type); + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:nil error:[NSError sdl_systemCapabilityManager_cannotUpdateInHMINONE]]; + return nil; + } + + if (self.capabilityObservers[type] == nil) { + SDLLogD(@"This is the first subscription to capability type: %@, sending a GetSystemCapability with subscribe true", type); + self.capabilityObservers[type] = [NSMutableArray arrayWithObject:observerObject]; + // We don't want to send this for the displays type because that's automatically subscribed + if (![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + [self sdl_sendGetSystemCapabilityWithType:type subscribe:@YES completionHandler:nil]; + } else { + // If we're not calling the GSC RPC we should invoke the observer with the cached data + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil]; + } + } else { + // Store the observer and call it immediately with the cached value + [self.capabilityObservers[type] addObject:observerObject]; + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil]; + } + + return observerObject.observer; +} + +- (BOOL)subscribeToCapabilityType:(SDLSystemCapabilityType)type withObserver:(id)observer selector:(SEL)selector { + SDLLogD(@"Subscribing to capability type: %@, with observer: %@, selector: %@", type, observer, NSStringFromSelector(selector)); NSUInteger numberOfParametersInSelector = [NSStringFromSelector(selector) componentsSeparatedByString:@":"].count - 1; - if (numberOfParametersInSelector > 1) { return NO; } + if (numberOfParametersInSelector > 3) { + SDLLogE(@"Attempted to subscribe to a capability using a selector that contains more than 3 parameters."); + return NO; + } + + if (observer == nil) { + SDLLogE(@"Attempted to subscribe to type: %@ with a selector on a *nil* observer, which will always fail.", type); + return NO; + } SDLSystemCapabilityObserver *observerObject = [[SDLSystemCapabilityObserver alloc] initWithObserver:observer selector:selector]; - [self.capabilityObservers[type] addObject:observerObject]; + if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone] && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + SDLLogE(@"Attempted to subscribe to type: %@ in HMI level NONE, which is not allowed. Please wait until you are in HMI BACKGROUND, LIMITED, or FULL before attempting to subscribe to any SystemCapabilityType other than DISPLAYS.", type); + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:nil error:[NSError sdl_systemCapabilityManager_cannotUpdateInHMINONE]]; + return NO; + } + + if (self.capabilityObservers[type] == nil) { + SDLLogD(@"This is the first subscription to capability type: %@, sending a GetSystemCapability with subscribe true", type); + self.capabilityObservers[type] = [NSMutableArray arrayWithObject:observerObject]; + + // We don't want to send this for the displays type because that's automatically subscribed + if (![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + [self sdl_sendGetSystemCapabilityWithType:type subscribe:@YES completionHandler:nil]; + } else { + // If we're not calling the GSC RPC we should invoke the observer with the cached data + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil]; + } + } else { + // Store the observer and call it immediately with the cached value + [self.capabilityObservers[type] addObject:observerObject]; + [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil]; + } return YES; } - (void)unsubscribeFromCapabilityType:(SDLSystemCapabilityType)type withObserver:(id)observer { + SDLLogD(@"Unsubscribing from capability type: %@", type); for (SDLSystemCapabilityObserver *capabilityObserver in self.capabilityObservers[type]) { - if ([observer isEqual:capabilityObserver.observer]) { + if ([observer isEqual:capabilityObserver.observer] && self.capabilityObservers[type] != nil) { [self.capabilityObservers[type] removeObject:capabilityObserver]; + + [self sdl_removeNilObserversAndUnsubscribeIfNecessary]; break; } } @@ -602,31 +620,180 @@ - (void)unsubscribeFromCapabilityType:(SDLSystemCapabilityType)type withObserver /// Calls all observers of a capability type with an updated capability /// @param capability The new capability update /// @param handler The update handler to call, if one exists after the observers are called -- (void)sdl_callObserversForCapabilityUpdate:(SDLSystemCapability *)capability handler:(nullable SDLUpdateCapabilityHandler)handler { - for (SDLSystemCapabilityObserver *observer in self.capabilityObservers[capability.systemCapabilityType]) { - if (observer.block != nil) { - observer.block(capability); - } else { - NSUInteger numberOfParametersInSelector = [NSStringFromSelector(observer.selector) componentsSeparatedByString:@":"].count - 1; +- (void)sdl_callObserversForUpdate:(nullable SDLSystemCapability *)capability error:(nullable NSError *)error handler:(nullable SDLCapabilityUpdateWithErrorHandler)handler { + SDLSystemCapabilityType type = capability.systemCapabilityType; + SDLLogV(@"Calling observers for type: %@ with update: %@", type, capability); + + [self sdl_removeNilObserversAndUnsubscribeIfNecessary]; + + for (SDLSystemCapabilityObserver *observer in self.capabilityObservers[type]) { + [self sdl_invokeObserver:observer withCapabilityType:type capability:capability error:error]; + } + + if (handler == nil) { return; } + handler(capability, self.subscriptionStatus[type].boolValue, error); +} + +- (void)sdl_invokeObserver:(SDLSystemCapabilityObserver *)observer withCapabilityType:(SDLSystemCapabilityType)type capability:(nullable SDLSystemCapability *)capability error:(nullable NSError *)error { + BOOL subscribed = self.subscriptionStatus[type].boolValue || [type isEqualToEnum:SDLSystemCapabilityTypeDisplays]; + #pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - if (numberOfParametersInSelector == 0) { - if ([observer.observer respondsToSelector:observer.selector]) { - [observer.observer performSelector:observer.selector]; - } - } else if (numberOfParametersInSelector == 1) { - if ([observer.observer respondsToSelector:observer.selector]) { - [observer.observer performSelector:observer.selector withObject:capability]; - } - } else { - @throw [NSException sdl_invalidSelectorExceptionWithSelector:observer.selector]; - } +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if (observer.block != nil) { + observer.block(capability); #pragma clang diagnostic pop + } else if (observer.updateBlock != nil) { + observer.updateBlock(capability, subscribed, error); + } else { + if (![observer.observer respondsToSelector:observer.selector]) { + @throw [NSException sdl_invalidSelectorExceptionWithSelector:observer.selector]; + } + + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[(NSObject *)observer.observer methodSignatureForSelector:observer.selector]]; + [invocation setSelector:observer.selector]; + [invocation setTarget:observer.observer]; + + NSUInteger numberOfParametersInSelector = [NSStringFromSelector(observer.selector) componentsSeparatedByString:@":"].count - 1; + if (numberOfParametersInSelector >= 1) { + [invocation setArgument:&capability atIndex:2]; + } + if (numberOfParametersInSelector >= 2) { + [invocation setArgument:&error atIndex:3]; + } + if (numberOfParametersInSelector >= 3) { + [invocation setArgument:&subscribed atIndex:4]; + } + if (numberOfParametersInSelector >= 4) { + @throw [NSException sdl_invalidSelectorExceptionWithSelector:observer.selector]; + } + + [invocation invoke]; + } +} + +- (void)sdl_removeNilObserversAndUnsubscribeIfNecessary { + SDLLogV(@"Checking for nil observers and removing them, then checking for subscriptions we don't need and unsubscribing."); + // Loop through our observers + for (SDLSystemCapabilityType key in self.capabilityObservers.allKeys) { + for (SDLSystemCapabilityObserver *observer in self.capabilityObservers[key]) { + // If an observer object is nil, remove it + if (observer.observer == nil) { + [self.capabilityObservers[key] removeObject:observer]; + } + + // If we no longer have any observers for that type, remove the array + if (self.capabilityObservers[key].count == 0) { + [self.capabilityObservers removeObjectForKey:key]; + } } } - if (handler == nil) { return; } - handler(nil, self); + // If we don't support subscriptions, we don't want to unsubscribe by sending an RPC below + if (!self.supportsSubscriptions) { + return; + } + + // Loop through our subscription statuses, check if we're subscribed. If we are, and we do not have observers for that type, and that type is not DISPLAYS, then unsubscribe. + for (SDLSystemCapabilityType type in self.subscriptionStatus.allKeys) { + if ([self.subscriptionStatus[type] isEqualToNumber:@YES] + && self.capabilityObservers[type] == nil + && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) { + SDLLogD(@"Removing the last subscription to type %@, sending a GetSystemCapability with subscribe false (will unsubscribe)", type); + [self sdl_sendGetSystemCapabilityWithType:type subscribe:@NO completionHandler:nil]; + } + } +} + +#pragma mark - Notifications + +/// Registers for notifications and responses from Core +- (void)sdl_registerForNotifications { + SDLLogV(@"Registering for notifications"); + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_registerResponse:) name:SDLDidReceiveRegisterAppInterfaceResponse object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_displayLayoutResponse:) name:SDLDidReceiveSetDisplayLayoutResponse object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_systemCapabilityUpdatedNotification:) name:SDLDidReceiveSystemCapabilityUpdatedNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiStatusNotification:) name:SDLDidChangeHMIStatusNotification object:nil]; +} + +/** + * Called when a `RegisterAppInterfaceResponse` response is received from Core. The head unit capabilities are saved. + * + * @param notification The `RegisterAppInterfaceResponse` response received from Core + */ +- (void)sdl_registerResponse:(SDLRPCResponseNotification *)notification { + SDLRegisterAppInterfaceResponse *response = (SDLRegisterAppInterfaceResponse *)notification.response; + if (!response.success.boolValue) { return; } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated" + self.displayCapabilities = response.displayCapabilities; + self.softButtonCapabilities = response.softButtonCapabilities; + self.buttonCapabilities = response.buttonCapabilities; + self.presetBankCapabilities = response.presetBankCapabilities; +#pragma clang diagnostic pop + + self.hmiCapabilities = response.hmiCapabilities; + self.hmiZoneCapabilities = response.hmiZoneCapabilities; + self.speechCapabilities = response.speechCapabilities; + self.prerecordedSpeechCapabilities = response.prerecordedSpeech; + self.vrCapability = (response.vrCapabilities.count > 0 && [response.vrCapabilities.firstObject isEqualToEnum:SDLVRCapabilitiesText]) ? YES : NO; + self.audioPassThruCapabilities = response.audioPassThruCapabilities; + self.pcmStreamCapability = response.pcmStreamCapabilities; + + self.shouldConvertDeprecatedDisplayCapabilities = YES; + self.displays = [self sdl_createDisplayCapabilityListFromRegisterResponse:response]; + + SDLLogV(@"Received RegisterAppInterface response, filled out display and other capabilities"); + + // Call the observers in case the new display capability list is created from deprecated types + SDLSystemCapability *systemCapability = [[SDLSystemCapability alloc] initWithDisplayCapabilities:self.displays]; + [self sdl_callObserversForUpdate:systemCapability error:nil handler:nil]; +} + +/** + * Called when a `SetDisplayLayoutResponse` response is received from Core. If the template was set successfully, the the new capabilities for the template are saved. + * + * @param notification The `SetDisplayLayoutResponse` response received from Core + */ +- (void)sdl_displayLayoutResponse:(SDLRPCResponseNotification *)notification { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated" + SDLSetDisplayLayoutResponse *response = (SDLSetDisplayLayoutResponse *)notification.response; +#pragma clang diagnostic pop + if (!response.success.boolValue) { return; } + + // If we've received a display capability update then we should not convert our deprecated display capabilities and we should just return + if (!self.shouldConvertDeprecatedDisplayCapabilities) { return; } + + self.displayCapabilities = response.displayCapabilities; + self.buttonCapabilities = response.buttonCapabilities; + self.softButtonCapabilities = response.softButtonCapabilities; + self.presetBankCapabilities = response.presetBankCapabilities; + + self.displays = [self sdl_createDisplayCapabilityListFromSetDisplayLayoutResponse:response]; + + SDLLogV(@"Received SetDisplayLayout response, filled out display and other capabilities"); + + // Call the observers in case the new display capability list is created from deprecated types + SDLSystemCapability *systemCapability = [[SDLSystemCapability alloc] initWithDisplayCapabilities:self.displays]; + [self sdl_callObserversForUpdate:systemCapability error:nil handler:nil]; +} + +/** + * Called when an `OnSystemCapabilityUpdated` notification is received from Core. The updated system capabilty is saved. + * + * @param notification The `OnSystemCapabilityUpdated` notification received from Core + */ +- (void)sdl_systemCapabilityUpdatedNotification:(SDLRPCNotificationNotification *)notification { + SDLOnSystemCapabilityUpdated *systemCapabilityUpdatedNotification = (SDLOnSystemCapabilityUpdated *)notification.notification; + SDLLogV(@"Received OnSystemCapability update for type %@", systemCapabilityUpdatedNotification.systemCapability.systemCapabilityType); + + [self sdl_saveSystemCapability:systemCapabilityUpdatedNotification.systemCapability error:nil completionHandler:nil]; +} + +- (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification { + SDLOnHMIStatus *onHMIStatus = (SDLOnHMIStatus *)notification.notification; + self.currentHMILevel = onHMIStatus.hmiLevel; } @end diff --git a/SmartDeviceLink/SDLSystemCapabilityObserver.h b/SmartDeviceLink/SDLSystemCapabilityObserver.h index f5450d60e..11a6acfc1 100644 --- a/SmartDeviceLink/SDLSystemCapabilityObserver.h +++ b/SmartDeviceLink/SDLSystemCapabilityObserver.h @@ -12,8 +12,12 @@ NS_ASSUME_NONNULL_BEGIN +/// A handler mirroring the one in SDLSystemCapabilityManager.h for `initWithObserver:block:` typedef void (^SDLCapabilityUpdateHandler)(SDLSystemCapability *capability); +/// A handler mirroring the one in SDLSystemCapabilityManager.h for `initWithObserver:updateHandler:` +typedef void (^SDLCapabilityUpdateWithErrorHandler)(SDLSystemCapability *_Nullable capability, BOOL subscribed, NSError *_Nullable error); + /** An observer object for SDLSystemCapabilityManager */ @@ -32,7 +36,10 @@ typedef void (^SDLCapabilityUpdateHandler)(SDLSystemCapability *capability); /** A block called when the observer is triggered */ -@property (copy, nonatomic) SDLCapabilityUpdateHandler block; +@property (copy, nonatomic) SDLCapabilityUpdateHandler block __deprecated_msg("use updateBlock instead"); + +/// A block called when the observer is triggered +@property (copy, nonatomic) SDLCapabilityUpdateWithErrorHandler updateBlock; /** Create an observer using an object and a selector on that object @@ -50,7 +57,14 @@ typedef void (^SDLCapabilityUpdateHandler)(SDLSystemCapability *capability); @param block The block that will be called when the subscription triggers @return The observer */ -- (instancetype)initWithObserver:(id)observer block:(SDLCapabilityUpdateHandler)block; +- (instancetype)initWithObserver:(id)observer block:(SDLCapabilityUpdateHandler)block __deprecated_msg("use initWithObserver:updateHandler: instead"); + +/// Create an observer using an object and a callback block + +/// @param observer The object that can be used to unsubscribe the block +/// @param block The block that will be called when the subscription triggers +/// @return The observer +- (instancetype)initWithObserver:(id)observer updateHandler:(SDLCapabilityUpdateWithErrorHandler)block; @end diff --git a/SmartDeviceLink/SDLSystemCapabilityObserver.m b/SmartDeviceLink/SDLSystemCapabilityObserver.m index 7ccbd38af..7b6ef0b0e 100644 --- a/SmartDeviceLink/SDLSystemCapabilityObserver.m +++ b/SmartDeviceLink/SDLSystemCapabilityObserver.m @@ -32,6 +32,16 @@ - (instancetype)initWithObserver:(id)observer block:(SDLCapabilityUpda return self; } +- (instancetype)initWithObserver:(id)observer updateHandler:(SDLCapabilityUpdateWithErrorHandler)block { + self = [super init]; + if (!self) { return nil; } + + _observer = observer; + _updateBlock = block; + + return self; +} + - (NSString *)description { if (self.selector) { return [NSString stringWithFormat:@"Observer: %@[%@] - %@", [_observer class], _observer, NSStringFromSelector(_selector)]; diff --git a/SmartDeviceLink/SDLTCPTransport.m b/SmartDeviceLink/SDLTCPTransport.m index f56641fe7..027a9f204 100644 --- a/SmartDeviceLink/SDLTCPTransport.m +++ b/SmartDeviceLink/SDLTCPTransport.m @@ -15,14 +15,12 @@ NS_ASSUME_NONNULL_BEGIN NSString *const TCPIOThreadName = @"com.smartdevicelink.tcpiothread"; -NSTimeInterval const IOThreadWaitSecs = 1.0; NSUInteger const DefaultReceiveBufferSize = 16 * 1024; NSTimeInterval ConnectionTimeoutSecs = 30.0; @interface SDLTCPTransport () @property (nullable, nonatomic, strong) NSThread *ioThread; -@property (nonatomic, strong) dispatch_semaphore_t ioThreadStoppedSemaphore; @property (nonatomic, assign) NSUInteger receiveBufferSize; @property (nonatomic, strong) SDLMutableDataQueue *sendDataQueue; @property (nullable, nonatomic, strong) NSInputStream *inputStream; @@ -54,8 +52,7 @@ - (instancetype)initWithHostName:(NSString *)hostName portNumber:(NSString *)por } - (void)dealloc { - SDLLogD(@"SDLTCPTransport dealloc"); - [self disconnect]; + SDLLogV(@"dealloc"); } #pragma mark - Stream Lifecycle @@ -67,6 +64,8 @@ - (void)connect { return; } + SDLLogD(@"Attempting to connect"); + unsigned int port; int num = [self.portNumber intValue]; if (0 <= num && num <= 65535) { @@ -78,7 +77,6 @@ - (void)connect { self.ioThread = [[NSThread alloc] initWithTarget:self selector:@selector(sdl_tcpTransportEventLoop) object:nil]; self.ioThread.name = TCPIOThreadName; - self.ioThreadStoppedSemaphore = dispatch_semaphore_create(0); CFReadStreamRef readStream = NULL; CFWriteStreamRef writeStream = NULL; @@ -98,28 +96,18 @@ - (void)connect { - (void)disconnect { if (self.ioThread == nil) { - // already disconnected + SDLLogV(@"TCP transport thread already disconnected"); return; } - SDLLogD(@"Disconnecting TCP transport"); - - [self sdl_cancelIOThread]; - - long ret = dispatch_semaphore_wait(self.ioThreadStoppedSemaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(IOThreadWaitSecs * NSEC_PER_SEC))); - if (ret == 0) { - SDLLogD(@"TCP transport thread stopped"); - } else { - SDLLogE(@"Failed to stop TCP transport thread"); - } - self.ioThread = nil; - - self.inputStream = nil; - self.outputStream = nil; + SDLLogD(@"Disconnecting"); [self.sendDataQueue removeAllObjects]; self.transportErrorNotified = NO; self.transportConnected = NO; + + // Attempt to cancel the `ioThread`. Once the thread realizes it has been cancelled, it will cleanup the input/output streams. + [self sdl_cancelIOThread]; } #pragma mark - Data Transmission @@ -145,7 +133,7 @@ - (void)sdl_tcpTransportEventLoop { [self.inputStream open]; [self.outputStream open]; - while (![self.ioThread isCancelled]) { + while (self.ioThread != nil && ![self.ioThread isCancelled]) { BOOL ret = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; if (!ret) { SDLLogW(@"Failed to start TCP transport run loop"); @@ -157,9 +145,7 @@ - (void)sdl_tcpTransportEventLoop { [self sdl_teardownStream:self.inputStream]; [self sdl_teardownStream:self.outputStream]; - [self.connectionTimer invalidate]; - - dispatch_semaphore_signal(self.ioThreadStoppedSemaphore); + [self sdl_cancelConnectionTimer]; } } @@ -179,10 +165,18 @@ - (void)sdl_teardownStream:(NSStream *)stream { - (void)sdl_cancelIOThread { [self.ioThread cancel]; - // wake up the run loop in case we don't have any I/O event + + // Wake up the run loop in case we don't have any I/O event [self performSelector:@selector(sdl_doNothing) onThread:self.ioThread withObject:nil waitUntilDone:NO]; } +/// Cancels the connection timer for establishing a TCP socket with the accessory. +- (void)sdl_cancelConnectionTimer { + if (self.connectionTimer == nil) { return; } + [self.connectionTimer invalidate]; + self.connectionTimer = nil; +} + #pragma mark - NSStreamDelegate // this method runs only on the I/O thread (i.e. invoked from the run loop) @@ -195,7 +189,7 @@ - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { // We will get two NSStreamEventOpenCompleted events (for both input and output streams) and we don't need both. Let's use the one of output stream since we need to make sure that output stream is ready before Proxy sending Start Service frame. if (aStream == self.outputStream) { SDLLogD(@"TCP transport connected"); - [self.connectionTimer invalidate]; + [self sdl_cancelConnectionTimer]; self.transportConnected = YES; [self.delegate onTransportConnected]; } @@ -309,24 +303,23 @@ - (void)sdl_onStreamError:(NSStream *)stream { NSError *error; switch (stream.streamError.code) { case ECONNREFUSED: { - SDLLogD(@"TCP connection error: ECONNREFUSED"); + SDLLogE(@"TCP connection error: ECONNREFUSED (connection refused)"); error = [NSError sdl_transport_connectionRefusedError]; } break; case ETIMEDOUT: { - SDLLogD(@"TCP connection error: ETIMEDOUT"); + SDLLogE(@"TCP connection error: ETIMEDOUT (connection timed out)"); error = [NSError sdl_transport_connectionTimedOutError]; } break; case ENETDOWN: { - SDLLogD(@"TCP connection error: ENETDOWN"); + SDLLogE(@"TCP connection error: ENETDOWN (network down)"); error = [NSError sdl_transport_networkDownError]; } break; case ENETUNREACH: { - // This is just for safe. I did not observe ENETUNREACH error on iPhone. - SDLLogD(@"TCP connection error: ENETUNREACH"); + SDLLogE(@"TCP connection error: ENETUNREACH (network unreachable)"); error = [NSError sdl_transport_networkDownError]; } break; default: { - SDLLogD(@"TCP connection error: unknown error %ld", (long)stream.streamError.code); + SDLLogE(@"TCP connection error: unknown error %ld", (long)stream.streamError.code); error = [NSError sdl_transport_unknownError]; } break; } @@ -338,6 +331,7 @@ - (void)sdl_onStreamError:(NSStream *)stream { } - (void)sdl_onStreamEnd:(NSStream *)stream { + SDLLogD(@"Stream ended"); NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_onStreamEnd is called on a wrong thread!"); [self sdl_cancelIOThread]; diff --git a/SmartDeviceLink/SDLTextAndGraphicManager.m b/SmartDeviceLink/SDLTextAndGraphicManager.m index 0e484176f..7da2808e3 100644 --- a/SmartDeviceLink/SDLTextAndGraphicManager.m +++ b/SmartDeviceLink/SDLTextAndGraphicManager.m @@ -87,10 +87,23 @@ - (instancetype)initWithConnectionManager:(id)connecti } - (void)start { + SDLLogD(@"Starting manager"); + + // Make sure none of the properties were set after the manager was shut down + [self sdl_reset]; + [self.systemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self selector:@selector(sdl_displayCapabilityDidUpdate:)]; } - (void)stop { + SDLLogD(@"Stopping manager"); + [self sdl_reset]; + + [self.systemCapabilityManager unsubscribeFromCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self]; +} + +- (void)sdl_reset { + SDLLogV(@"Resetting properties"); _textField1 = nil; _textField2 = nil; _textField3 = nil; @@ -115,8 +128,6 @@ - (void)stop { _blankArtwork = nil; _waitingOnHMILevelUpdateToUpdate = NO; _isDirty = NO; - - [self.systemCapabilityManager unsubscribeFromCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self]; } #pragma mark - Upload / Send @@ -286,13 +297,13 @@ - (SDLShow *)sdl_assembleShowImages:(SDLShow *)show { - (SDLShow *)sdl_assembleShowText:(SDLShow *)show { [self sdl_setBlankTextFieldsWithShow:show]; - if (self.mediaTrackTextField != nil) { + if (self.mediaTrackTextField != nil && [self sdl_shouldUpdateMediaTextField]) { show.mediaTrack = self.mediaTrackTextField; } else { show.mediaTrack = @""; } - if (self.title != nil) { + if (self.title != nil && [self sdl_shouldUpdateTitleField]) { show.templateTitle = self.title; } else { show.templateTitle = @""; @@ -301,7 +312,7 @@ - (SDLShow *)sdl_assembleShowText:(SDLShow *)show { NSArray *nonNilFields = [self sdl_findNonNilTextFields]; if (nonNilFields.count == 0) { return show; } - NSUInteger numberOfLines = self.windowCapability ? self.windowCapability.maxNumberOfMainFieldLines : 4; + NSUInteger numberOfLines = (self.windowCapability.textFields != nil) ? self.windowCapability.maxNumberOfMainFieldLines : 4; if (numberOfLines == 1) { show = [self sdl_assembleOneLineShowText:show withShowFields:nonNilFields]; } else if (numberOfLines == 2) { @@ -512,7 +523,7 @@ - (BOOL)sdl_artworkNeedsUpload:(SDLArtwork *)artwork { } - (BOOL)sdl_shouldUpdatePrimaryImage { - BOOL templateSupportsPrimaryArtwork = self.windowCapability ? [self.windowCapability hasImageFieldOfName:SDLImageFieldNameGraphic] : YES; + BOOL templateSupportsPrimaryArtwork = (self.windowCapability.imageFields != nil) ? [self.windowCapability hasImageFieldOfName:SDLImageFieldNameGraphic] : YES; return (templateSupportsPrimaryArtwork && ![self.currentScreenData.graphic.value isEqualToString:self.primaryGraphic.name] @@ -520,7 +531,7 @@ - (BOOL)sdl_shouldUpdatePrimaryImage { } - (BOOL)sdl_shouldUpdateSecondaryImage { - BOOL templateSupportsSecondaryArtwork = self.windowCapability ? ([self.windowCapability hasImageFieldOfName:SDLImageFieldNameGraphic] || [self.windowCapability hasImageFieldOfName:SDLImageFieldNameSecondaryGraphic]) : YES; + BOOL templateSupportsSecondaryArtwork = (self.windowCapability.imageFields != nil) ? ([self.windowCapability hasImageFieldOfName:SDLImageFieldNameGraphic] || [self.windowCapability hasImageFieldOfName:SDLImageFieldNameSecondaryGraphic]) : YES; // Cannot detect if there is a secondary image, so we'll just try to detect if there's a primary image and allow it if there is. return (templateSupportsSecondaryArtwork @@ -528,6 +539,14 @@ - (BOOL)sdl_shouldUpdateSecondaryImage { && self.secondaryGraphic != nil); } +- (BOOL)sdl_shouldUpdateMediaTextField { + return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameMediaTrack] : YES; +} + +- (BOOL)sdl_shouldUpdateTitleField { + return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameTemplateTitle] : YES; +} + - (NSArray *)sdl_findNonNilTextFields { NSMutableArray *array = [NSMutableArray array]; self.textField1.length > 0 ? [array addObject:self.textField1] : nil; @@ -549,7 +568,7 @@ - (BOOL)sdl_shouldUpdateSecondaryImage { } - (BOOL)sdl_hasData { - BOOL hasTextFields = ([self sdl_findNonNilTextFields].count > 0); + BOOL hasTextFields = ([self sdl_findNonNilTextFields].count > 0) || (self.title.length > 0) || (self.mediaTrackTextField.length > 0); BOOL hasImageFields = (self.primaryGraphic != nil) || (self.secondaryGraphic != nil); return hasTextFields || hasImageFields; @@ -704,7 +723,7 @@ - (void)sdl_displayCapabilityDidUpdate:(SDLSystemCapability *)systemCapability { // Auto-send an updated show if ([self sdl_hasData]) { - [self sdl_updateWithCompletionHandler:nil]; + [self updateWithCompletionHandler:nil]; } } diff --git a/SmartDeviceLink/SDLTextField.h b/SmartDeviceLink/SDLTextField.h index aebfb61c5..d1dcedb1d 100644 --- a/SmartDeviceLink/SDLTextField.h +++ b/SmartDeviceLink/SDLTextField.h @@ -48,6 +48,13 @@ NS_ASSUME_NONNULL_BEGIN */ @property (strong, nonatomic) NSNumber *rows; +/// Convenience initalizer for the TextField RPC struct +/// @param name The name identifying this text field +/// @param characterSet The character set of this text field +/// @param width The number of characters per row allowed in this text field +/// @param rows The number of rows allowed in this text field +- (instancetype)initWithName:(SDLTextFieldName)name characterSet:(SDLCharacterSet)characterSet width:(NSUInteger)width rows:(NSUInteger)rows; + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLTextField.m b/SmartDeviceLink/SDLTextField.m index cc50aa743..80941cc5f 100644 --- a/SmartDeviceLink/SDLTextField.m +++ b/SmartDeviceLink/SDLTextField.m @@ -48,6 +48,18 @@ - (void)setRows:(NSNumber *)rows { return [self.store sdl_objectForName:SDLRPCParameterNameRows ofClass:NSNumber.class error:&error]; } +- (instancetype)initWithName:(SDLTextFieldName)name characterSet:(SDLCharacterSet)characterSet width:(NSUInteger)width rows:(NSUInteger)rows { + self = [self init]; + if (!self) { return nil; } + + self.name = name; + self.characterSet = characterSet; + self.width = @(width); + self.rows = @(rows); + + return self; +} + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLTouch.m b/SmartDeviceLink/SDLTouch.m index d9fa83c7a..583778062 100644 --- a/SmartDeviceLink/SDLTouch.m +++ b/SmartDeviceLink/SDLTouch.m @@ -32,13 +32,12 @@ - (instancetype)initWithTouchEvent:(SDLTouchEvent *)touchEvent { self = [self init]; if (self) { _identifier = touchEvent.touchEventId.integerValue; - - id firstTimeStamp = touchEvent.timeStamp.firstObject; + NSArray *> *timestamp = touchEvent.timeStamp; // In the event we receive a null timestamp, we will supply a device timestamp. - if ([firstTimeStamp isKindOfClass:[NSNull class]] && [firstTimeStamp isEqual:[NSNull null]]) { + if ((timestamp == nil) || (timestamp.count == 0)) { _timeStamp = (NSUInteger)([[NSDate date] timeIntervalSince1970] * 1000); } else { - NSNumber *timeStampNumber = (NSNumber *)firstTimeStamp; + NSNumber *timeStampNumber = (NSNumber *)timestamp[0]; _timeStamp = timeStampNumber.unsignedIntegerValue; } diff --git a/SmartDeviceLink/SDLViewControllerPresentable.h b/SmartDeviceLink/SDLViewControllerPresentable.h index 8d62ffed4..50006dd47 100644 --- a/SmartDeviceLink/SDLViewControllerPresentable.h +++ b/SmartDeviceLink/SDLViewControllerPresentable.h @@ -10,6 +10,8 @@ NS_ASSUME_NONNULL_BEGIN +typedef void (^SDLLockScreenDidFinishHandler)(void); + /// A protocol used to tell a view controller to present another view controller. This makes testing of modal VCs' presentation easier. @protocol SDLViewControllerPresentable @@ -20,11 +22,11 @@ NS_ASSUME_NONNULL_BEGIN @property (assign, nonatomic, readonly) BOOL shouldShowLockScreen; /// Dismisses and destroys the lock screen window -- (void)stop; +- (void)stopWithCompletionHandler:(nullable SDLLockScreenDidFinishHandler)completionHandler; /// Shows or hides the lock screen with animation /// @param show True if the lock screen should be presented; false if dismissed. -- (void)updateLockScreenToShow:(BOOL)show; +- (void)updateLockScreenToShow:(BOOL)show withCompletionHandler:(nullable SDLLockScreenDidFinishHandler)completionHandler; @end diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m index 1d72c106f..c9ce76b50 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m @@ -9,19 +9,27 @@ #import "SDLChoiceSet.h" #import "SDLChoiceSetDelegate.h" #import "SDLDeleteChoicesOperation.h" +#import "SDLDisplayCapability.h" #import "SDLFileManager.h" +#import "SDLGlobals.h" #import "SDLHMILevel.h" #import "SDLKeyboardDelegate.h" #import "SDLKeyboardProperties.h" +#import "SDLNotificationConstants.h" +#import "SDLOnHMIStatus.h" #import "SDLPreloadChoicesOperation.h" #import "SDLPresentChoiceSetOperation.h" #import "SDLPresentKeyboardOperation.h" -#import "SDLGlobals.h" +#import "SDLRPCNotificationNotification.h" #import "SDLStateMachine.h" #import "SDLSystemContext.h" +#import "SDLSystemCapability.h" #import "SDLSystemCapabilityManager.h" -#import "TestConnectionManager.h" +#import "SDLTextField.h" #import "SDLVersion.h" +#import "SDLWindowCapability.h" + +#import "TestConnectionManager.h" @interface SDLPresentChoiceSetOperation() @@ -43,6 +51,7 @@ @interface SDLChoiceSetManager() @property (copy, nonatomic, nullable) SDLHMILevel currentHMILevel; @property (copy, nonatomic, nullable) SDLSystemContext currentSystemContext; +@property (copy, nonatomic, nullable) SDLWindowCapability *currentWindowCapability; @property (strong, nonatomic) NSMutableSet *preloadedMutableChoices; @property (strong, nonatomic, readonly) NSSet *pendingPreloadChoices; @@ -52,6 +61,9 @@ @interface SDLChoiceSetManager() @property (assign, nonatomic, getter=isVROptional) BOOL vrOptional; +- (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification; +- (void)sdl_displayCapabilityDidUpdate:(SDLSystemCapability *)systemCapability; + @end QuickSpecBegin(SDLChoiceSetManagerSpec) @@ -63,6 +75,10 @@ @interface SDLChoiceSetManager() __block SDLFileManager *testFileManager = nil; __block SDLSystemCapabilityManager *testSystemCapabilityManager = nil; + __block SDLWindowCapability *enabledWindowCapability = nil; + __block SDLWindowCapability *disabledWindowCapability = nil; + __block SDLWindowCapability *blankWindowCapability = nil; + __block SDLChoiceCell *testCell1 = nil; __block SDLChoiceCell *testCell2 = nil; __block SDLChoiceCell *testCell3 = nil; @@ -77,6 +93,13 @@ @interface SDLChoiceSetManager() testCell1 = [[SDLChoiceCell alloc] initWithText:@"test1"]; testCell2 = [[SDLChoiceCell alloc] initWithText:@"test2"]; testCell3 = [[SDLChoiceCell alloc] initWithText:@"test3"]; + + enabledWindowCapability = [[SDLWindowCapability alloc] init]; + enabledWindowCapability.textFields = @[[[SDLTextField alloc] initWithName:SDLTextFieldNameMenuName characterSet:SDLCharacterSetType5 width:500 rows:1]]; + disabledWindowCapability = [[SDLWindowCapability alloc] init]; + disabledWindowCapability.textFields = @[]; + blankWindowCapability = [[SDLWindowCapability alloc] init]; + blankWindowCapability.textFields = @[]; }); it(@"should be in the correct startup state", ^{ @@ -86,10 +109,73 @@ @interface SDLChoiceSetManager() expect(testManager.keyboardConfiguration).to(equal(defaultProperties)); }); + describe(@"receiving an HMI status update", ^{ + __block SDLOnHMIStatus *newStatus = nil; + beforeEach(^{ + newStatus = [[SDLOnHMIStatus alloc] init]; + }); + + context(@"when starting with the queue suspended", ^{ + beforeEach(^{ + testManager.transactionQueue.suspended = YES; + testManager.currentHMILevel = SDLHMILevelFull; + testManager.currentWindowCapability = enabledWindowCapability; + }); + + it(@"should enable the queue when entering HMI FULL", ^{ + testManager.currentHMILevel = SDLHMILevelNone; + + SDLOnHMIStatus *newHMIStatus = [[SDLOnHMIStatus alloc] initWithHMILevel:SDLHMILevelFull systemContext:SDLSystemContextMain audioStreamingState:SDLAudioStreamingStateNotAudible videoStreamingState:nil windowID:@0]; + SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:newHMIStatus]; + [testManager sdl_hmiStatusNotification:notification]; + + expect(testManager.transactionQueue.isSuspended).to(beFalse()); + }); + + it(@"should enable the queue when receiving a good window capability", ^{ + testManager.currentWindowCapability = disabledWindowCapability; + + SDLDisplayCapability *displayCapability = [[SDLDisplayCapability alloc] initWithDisplayName:@"TEST" windowCapabilities:@[enabledWindowCapability] windowTypeSupported:nil]; + [testManager sdl_displayCapabilityDidUpdate:[[SDLSystemCapability alloc] initWithDisplayCapabilities:@[displayCapability]]]; + + expect(testManager.transactionQueue.isSuspended).to(beFalse()); + }); + }); + + context(@"when starting with the queue enabled", ^{ + beforeEach(^{ + testManager.transactionQueue.suspended = NO; + testManager.currentHMILevel = SDLHMILevelFull; + testManager.currentWindowCapability = enabledWindowCapability; + }); + + it(@"should suspend the queue when entering HMI NONE", ^{ + SDLOnHMIStatus *newHMIStatus = [[SDLOnHMIStatus alloc] initWithHMILevel:SDLHMILevelNone systemContext:SDLSystemContextMain audioStreamingState:SDLAudioStreamingStateNotAudible videoStreamingState:nil windowID:@0]; + SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:newHMIStatus]; + [testManager sdl_hmiStatusNotification:notification]; + + expect(testManager.transactionQueue.isSuspended).to(beTrue()); + }); + + it(@"should suspend the queue when receiving a bad display capability", ^{ + SDLDisplayCapability *displayCapability = [[SDLDisplayCapability alloc] initWithDisplayName:@"TEST" windowCapabilities:@[disabledWindowCapability] windowTypeSupported:nil]; + [testManager sdl_displayCapabilityDidUpdate:[[SDLSystemCapability alloc] initWithDisplayCapabilities:@[displayCapability]]]; + + expect(testManager.transactionQueue.isSuspended).to(beTrue()); + }); + + it(@"should not suspend the queue when receiving an empty display capability", ^{ + SDLDisplayCapability *displayCapability = [[SDLDisplayCapability alloc] initWithDisplayName:@"TEST" windowCapabilities:@[blankWindowCapability] windowTypeSupported:nil]; + [testManager sdl_displayCapabilityDidUpdate:[[SDLSystemCapability alloc] initWithDisplayCapabilities:@[displayCapability]]]; + + expect(testManager.transactionQueue.isSuspended).to(beTrue()); + }); + }); + }); + describe(@"once started", ^{ beforeEach(^{ [testManager start]; - testManager.transactionQueue.suspended = YES; }); it(@"should start checking for VR Optional", ^{ @@ -130,6 +216,11 @@ @interface SDLChoiceSetManager() it(@"should shutdown", ^{ expect(testManager.currentState).to(equal(SDLChoiceManagerStateShutdown)); + expect(testManager.vrOptional).to(beTrue()); + expect(testManager.currentHMILevel).to(equal(SDLHMILevelNone)); + expect(testManager.pendingPresentationSet).to(beNil()); + expect(testManager.preloadedMutableChoices).to(beEmpty()); + expect(testManager.pendingMutablePreloadChoices).to(beEmpty()); }); }); }); @@ -187,6 +278,34 @@ @interface SDLChoiceSetManager() expect(testManager.pendingPreloadChoices).to(haveCount(1)); }); }); + + context(@"when the manager shuts down during preloading", ^{ + beforeEach(^{ + testManager.pendingMutablePreloadChoices = [NSMutableSet setWithArray:@[testCell1]]; + + [testManager preloadChoices:@[testCell1, testCell2, testCell3] withCompletionHandler:^(NSError * _Nullable error) { + }]; + }); + + it(@"should leave the list of pending and uploaded choice items empty when the operation finishes", ^{ + expect(testManager.pendingPreloadChoices).to(contain(testCell1)); + expect(testManager.pendingPreloadChoices).to(contain(testCell2)); + expect(testManager.pendingPreloadChoices).to(contain(testCell3)); + expect(testManager.transactionQueue.operations.firstObject).to(beAnInstanceOf([SDLPreloadChoicesOperation class])); + + [testManager.stateMachine setToState:SDLChoiceManagerStateShutdown fromOldState:nil callEnterTransition:NO]; + testManager.pendingMutablePreloadChoices = [NSMutableSet set]; + testManager.preloadedMutableChoices = [NSMutableSet set]; + + SDLPreloadChoicesOperation *testOp = testManager.transactionQueue.operations.firstObject; + testOp.completionBlock(); + + expect(testManager.preloadedMutableChoices).to(beEmpty()); + expect(testManager.preloadedChoices).to(beEmpty()); + expect(testManager.pendingMutablePreloadChoices).to(beEmpty()); + expect(testManager.pendingPreloadChoices).to(beEmpty()); + }); + }); }); describe(@"deleting choices", ^{ @@ -235,6 +354,40 @@ @interface SDLChoiceSetManager() expect(testManager.transactionQueue.operationCount).to(equal(1)); // No delete operation }); }); + + context(@"when the manager shuts down during deletion", ^{ + __block SDLPresentChoiceSetOperation *pendingPresentOp = nil; + __block id choiceDelegate = nil; + + beforeEach(^{ + choiceDelegate = OCMProtocolMock(@protocol(SDLChoiceSetDelegate)); + pendingPresentOp = OCMClassMock([SDLPresentChoiceSetOperation class]); + OCMStub(pendingPresentOp.choiceSet.choices).andReturn([NSSet setWithArray:@[testCell1]]); + testManager.pendingPresentOperation = pendingPresentOp; + testManager.pendingPresentationSet = [[SDLChoiceSet alloc] initWithTitle:@"Test" delegate:choiceDelegate choices:@[testCell1]]; + testManager.preloadedMutableChoices = [NSMutableSet setWithObject:testCell1]; + + [testManager deleteChoices:@[testCell1, testCell2, testCell3]]; + }); + + it(@"should leave the list of pending and uploaded choice items empty when the operation finishes", ^{ + expect(testManager.transactionQueue.operations.lastObject).to(beAnInstanceOf([SDLDeleteChoicesOperation class])); + expect(testManager.pendingPresentationSet).to(beNil()); + OCMVerify([pendingPresentOp cancel]); + OCMVerify([choiceDelegate choiceSet:[OCMArg any] didReceiveError:[OCMArg any]]); + + [testManager.stateMachine setToState:SDLChoiceManagerStateShutdown fromOldState:nil callEnterTransition:NO]; + testManager.pendingMutablePreloadChoices = [NSMutableSet set]; + testManager.preloadedMutableChoices = [NSMutableSet set]; + + testManager.transactionQueue.operations.lastObject.completionBlock(); + + expect(testManager.preloadedMutableChoices).to(beEmpty()); + expect(testManager.preloadedChoices).to(beEmpty()); + expect(testManager.pendingMutablePreloadChoices).to(beEmpty()); + expect(testManager.pendingPreloadChoices).to(beEmpty()); + }); + }); }); describe(@"presenting a choice set", ^{ @@ -314,6 +467,30 @@ @interface SDLChoiceSetManager() }); }); }); + + describe(@"when the manager shuts down during presentation", ^{ + beforeEach(^{ + [testManager presentChoiceSet:testChoiceSet mode:testMode withKeyboardDelegate:keyboardDelegate]; + }); + + it(@"should leave the list of pending and uploaded choice items empty when the operation finishes", ^{ + expect(testManager.pendingPresentationSet).to(equal(testChoiceSet)); + expect(testManager.transactionQueue.operations).to(haveCount(2)); + expect(testManager.transactionQueue.operations.firstObject).to(beAnInstanceOf([SDLPreloadChoicesOperation class])); + expect(testManager.transactionQueue.operations.lastObject).to(beAnInstanceOf([SDLPresentChoiceSetOperation class])); + + [testManager.stateMachine setToState:SDLChoiceManagerStateShutdown fromOldState:nil callEnterTransition:NO]; + testManager.pendingMutablePreloadChoices = [NSMutableSet set]; + testManager.preloadedMutableChoices = [NSMutableSet set]; + + testManager.transactionQueue.operations.lastObject.completionBlock(); + + expect(testManager.preloadedMutableChoices).to(beEmpty()); + expect(testManager.preloadedChoices).to(beEmpty()); + expect(testManager.pendingMutablePreloadChoices).to(beEmpty()); + expect(testManager.pendingPreloadChoices).to(beEmpty()); + }); + }); }); describe(@"presenting a keyboard", ^{ diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m b/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m index 29824a4da..db28e24b8 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m @@ -27,14 +27,22 @@ - (instancetype)init { return self; } -- (void)stop { +- (void)stopWithCompletionHandler:(nullable SDLLockScreenDidFinishHandler)completionHandler { if (!self.lockViewController) { return; } _shouldShowLockScreen = NO; + + if (completionHandler != nil) { + completionHandler(); + } } -- (void)updateLockScreenToShow:(BOOL)show { +- (void)updateLockScreenToShow:(BOOL)show withCompletionHandler:(nullable SDLLockScreenDidFinishHandler)completionHandler { _shouldShowLockScreen = show; + + if (completionHandler != nil) { + completionHandler(); + } } diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m index 4328d3af3..cda5285c4 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m @@ -29,6 +29,7 @@ #import "SDLRegisterAppInterfaceResponse.h" #import "SDLResult.h" #import "SDLRPCNotificationNotification.h" +#import "SDLSecondaryTransportManager.h" #import "SDLShow.h" #import "SDLStateMachine.h" #import "SDLStreamingMediaConfiguration.h" @@ -39,12 +40,20 @@ #import "SDLUnregisterAppInterface.h" #import "SDLUnregisterAppInterfaceResponse.h" #import "SDLVersion.h" +#import "SDLVideoStreamingState.h" // Ignore the deprecated proxy methods #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" +@interface SDLStreamingMediaManager () + +@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager; +- (void)startSecondaryTransportWithProtocol:(SDLProtocol *)protocol; + +@end + @interface SDLLifecycleManager () // this private property is used for testing @property (copy, nonatomic) dispatch_queue_t lifecycleQueue; @@ -290,7 +299,7 @@ @interface SDLLifecycleManager () OCMStub([fileManagerMock startWithCompletionHandler:([OCMArg invokeBlockWithArgs:@(YES), fileManagerStartError, nil])]); OCMStub([permissionManagerMock startWithCompletionHandler:([OCMArg invokeBlockWithArgs:@(YES), permissionManagerStartError, nil])]); if (testConfig.lifecycleConfig.tcpDebugMode) { - OCMStub([streamingManagerMock startWithProtocol:protocolMock]); + OCMStub([streamingManagerMock startSecondaryTransportWithProtocol:proxyMock]); } // Send an RAI response & make sure we have an HMI status to move the lifecycle forward @@ -305,7 +314,7 @@ @interface SDLLifecycleManager () OCMVerify([fileManagerMock startWithCompletionHandler:[OCMArg any]]); OCMVerify([permissionManagerMock startWithCompletionHandler:[OCMArg any]]); if (testManager.configuration.lifecycleConfig.tcpDebugMode) { - OCMVerify([streamingManagerMock startWithProtocol:[OCMArg any]]); + OCMStub([streamingManagerMock startSecondaryTransportWithProtocol:[OCMArg any]]); } }); @@ -627,6 +636,37 @@ @interface SDLLifecycleManager () }); }); }); + + describe(@"receiving a video state change", ^{ + __block SDLOnHMIStatus *testHMIStatus = nil; + __block SDLVideoStreamingState testVideoStreamingState = nil; + __block SDLAudioStreamingState oldVideoStreamingState = nil; + + beforeEach(^{ + oldVideoStreamingState = testManager.videoStreamingState; + testHMIStatus = [[SDLOnHMIStatus alloc] init]; + }); + + context(@"a not audible audio state", ^{ + beforeEach(^{ + testVideoStreamingState = SDLVideoStreamingStateNotStreamable; + testHMIStatus.videoStreamingState = testVideoStreamingState; + + [testManager.notificationDispatcher postRPCNotificationNotification:SDLDidChangeHMIStatusNotification notification:testHMIStatus]; + }); + + it(@"should set the audio state", ^{ + expect(testManager.videoStreamingState).toEventually(equal(testVideoStreamingState)); + }); + + it(@"should call the delegate", ^{ + // Since notifications are sent to SDLManagerDelegate observers on the main thread, force the block to execute manually on the main thread. If this is not done, the test case may fail. + [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; + + OCMVerify([testManager.delegate videoStreamingState:oldVideoStreamingState didChangetoState:testVideoStreamingState]); + }); + }); + }); describe(@"receiving a system context change", ^{ __block SDLOnHMIStatus *testHMIStatus = nil; @@ -666,26 +706,56 @@ @interface SDLLifecycleManager () }); }); }); -}); - -describe(@"configuring the lifecycle manager", ^{ - __block SDLLifecycleConfiguration *lifecycleConfig = nil; - __block SDLLifecycleManager *testManager = nil; - beforeEach(^{ - lifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"Test app" fullAppId:@"Test ID"]; - }); + describe(@"configuring the lifecycle manager", ^{ + __block SDLLifecycleConfiguration *lifecycleConfig = nil; + __block SDLLifecycleManager *testManager = nil; - context(@"if no secondary transport is allowed", ^{ beforeEach(^{ - lifecycleConfig.allowedSecondaryTransports = SDLSecondaryTransportsNone; + lifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"Test app" fullAppId:@"Test ID"]; + }); + + context(@"if secondary transport is not allowed", ^{ + beforeEach(^{ + lifecycleConfig.allowedSecondaryTransports = SDLSecondaryTransportsNone; + SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil fileManager:nil]; + testManager = [[SDLLifecycleManager alloc] initWithConfiguration:config delegate:nil]; + [testManager.lifecycleStateMachine setToState:SDLLifecycleStateStarted fromOldState:nil callEnterTransition:YES]; + }); - SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil fileManager:nil]; - testManager = [[SDLLifecycleManager alloc] initWithConfiguration:config delegate:nil]; + it(@"should not create a secondary transport manager", ^{ + expect(testManager.secondaryTransportManager).to(beNil()); + }); + }); + + context(@"if a secondary transport is allowed but app is NOT a navigation or projection app", ^{ + beforeEach(^{ + lifecycleConfig.allowedSecondaryTransports = SDLSecondaryTransportsTCP; + lifecycleConfig.appType = SDLAppHMITypeSocial; + SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil fileManager:nil]; + testManager = [[SDLLifecycleManager alloc] initWithConfiguration:config delegate:nil]; + [testManager.lifecycleStateMachine setToState:SDLLifecycleStateStarted fromOldState:nil callEnterTransition:YES]; + }); + + it(@"should not create a secondary transport manager", ^{ + expect(testManager.secondaryTransportManager).to(beNil()); + }); }); - it(@"should not create a secondary transport manager", ^{ - expect(testManager.secondaryTransportManager).to(beNil()); + context(@"if a secondary transport is allowed and app is a navigation or projection app", ^{ + beforeEach(^{ + lifecycleConfig.allowedSecondaryTransports = SDLSecondaryTransportsTCP; + lifecycleConfig.appType = SDLAppHMITypeProjection; + SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil streamingMedia:SDLStreamingMediaConfiguration.insecureConfiguration fileManager:nil]; + testManager = [[SDLLifecycleManager alloc] initWithConfiguration:config delegate:nil]; + + [testManager.lifecycleStateMachine setToState:SDLLifecycleStateStarted fromOldState:nil callEnterTransition:YES]; + }); + + it(@"should create a secondary transport manager", ^{ + expect(testManager.streamManager).toNot(beNil()); + expect(testManager.secondaryTransportManager).toNot(beNil()); + }); }); }); }); diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m index a823d026c..c45340c75 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m @@ -66,17 +66,12 @@ @interface SDLLockScreenManager () #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" __block SDLOnLockScreenStatus *testRequiredStatus = nil; -#pragma clang diagnostic pop beforeEach(^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" testRequiredStatus = [[SDLOnLockScreenStatus alloc] init]; -#pragma clang diagnostic pop - testRequiredStatus.lockScreenStatus = SDLLockScreenStatusRequired; - [testNotificationDispatcher postNotificationName:SDLDidChangeLockScreenStatusNotification infoObject:testRequiredStatus]; +#pragma clang diagnostic pop }); it(@"should not have presented the lock screen", ^{ @@ -118,10 +113,9 @@ @interface SDLLockScreenManager () #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" testRequiredStatus = [[SDLOnLockScreenStatus alloc] init]; -#pragma clang diagnostic pop testRequiredStatus.lockScreenStatus = SDLLockScreenStatusRequired; - SDLRPCNotificationNotification *testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testRequiredStatus]; +#pragma clang diagnostic pop [[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification]; }); @@ -213,16 +207,12 @@ @interface SDLLockScreenManager () #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" __block SDLOnLockScreenStatus *testOffStatus = nil; -#pragma clang diagnostic pop - + beforeEach(^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" testOffStatus = [[SDLOnLockScreenStatus alloc] init]; -#pragma clang diagnostic pop testOffStatus.lockScreenStatus = SDLLockScreenStatusOff; - SDLRPCNotificationNotification *testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testOffStatus]; +#pragma clang diagnostic pop [[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification]; }); @@ -332,8 +322,8 @@ @interface SDLLockScreenManager () #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnLockScreenStatus *status = [[SDLOnLockScreenStatus alloc] init]; -#pragma clang diagnostic pop status.lockScreenStatus = SDLLockScreenStatusRequired; +#pragma clang diagnostic pop testManager.lastLockNotification = status; SDLOnDriverDistraction *testDriverDistraction = [[SDLOnDriverDistraction alloc] init]; @@ -376,8 +366,11 @@ @interface SDLLockScreenManager () context(@"receiving a lock screen status of required", ^{ beforeEach(^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" testStatus.lockScreenStatus = SDLLockScreenStatusRequired; testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testStatus]; +#pragma clang diagnostic pop [[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification]; }); @@ -389,8 +382,11 @@ @interface SDLLockScreenManager () context(@"receiving a lock screen status of off", ^{ beforeEach(^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" testStatus.lockScreenStatus = SDLLockScreenStatusOff; testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testStatus]; +#pragma clang diagnostic pop [[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification]; }); @@ -412,9 +408,9 @@ @interface SDLLockScreenManager () #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnLockScreenStatus *testOptionalStatus = [[SDLOnLockScreenStatus alloc] init]; -#pragma clang diagnostic pop testOptionalStatus.lockScreenStatus = SDLLockScreenStatusOptional; testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testOptionalStatus]; +#pragma clang diagnostic pop testLockScreenConfig = [SDLLockScreenConfiguration enabledConfiguration]; }); @@ -437,7 +433,7 @@ @interface SDLLockScreenManager () // Since lock screen must be presented/dismissed on the main thread, force the test to execute manually on the main thread. If this is not done, the test case may fail. [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; - OCMVerify([mockViewControllerPresenter updateLockScreenToShow:YES]); + OCMVerify([mockViewControllerPresenter updateLockScreenToShow:YES withCompletionHandler:nil]); }); }); @@ -460,7 +456,7 @@ @interface SDLLockScreenManager () // Since lock screen must be presented/dismissed on the main thread, force the test to execute manually on the main thread. If this is not done, the test case may fail. [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; - OCMVerify([mockViewControllerPresenter updateLockScreenToShow:NO]); + OCMVerify([mockViewControllerPresenter updateLockScreenToShow:NO withCompletionHandler:nil]); }); }); }); diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLPreloadChoicesOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLPreloadChoicesOperationSpec.m index f4056cccb..986a01c61 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLPreloadChoicesOperationSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLPreloadChoicesOperationSpec.m @@ -80,7 +80,7 @@ primaryTextField.name = SDLTextFieldNameMenuName; windowCapability.textFields = @[]; - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; [testOp start]; NSArray *receivedRequests = (NSArray *)testConnectionManager.receivedRequests; @@ -89,16 +89,16 @@ }); }); - context(@"disallowed display capabilities", ^{ + context(@"only main text capabilities", ^{ it(@"should skip to preloading cells", ^{ - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; [testOp start]; expect(@(testOp.currentState)).to(equal(SDLPreloadChoicesOperationStatePreloadingChoices)); }); }); - context(@"mixed display capabilities", ^{ + context(@"only main text and image capabilities", ^{ beforeEach(^{ SDLImageField *choiceField = [[SDLImageField alloc] init]; choiceField.name = SDLImageFieldNameChoiceImage; @@ -106,7 +106,7 @@ OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(NO); - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; [testOp start]; }); @@ -119,7 +119,7 @@ }); }); - context(@"allowed display capabilities", ^{ + context(@"main text and all image display capabilities", ^{ beforeEach(^{ SDLImageField *choiceField = [[SDLImageField alloc] init]; choiceField.name = SDLImageFieldNameChoiceImage; @@ -133,7 +133,7 @@ beforeEach(^{ OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(YES); - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; [testOp start]; }); @@ -148,7 +148,7 @@ context(@"when artworks are static icons", ^{ beforeEach(^{ - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithStaticIcon]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithStaticIcon]; [testOp start]; }); @@ -161,7 +161,7 @@ beforeEach(^{ OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(NO); - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithArtwork]; [testOp start]; }); @@ -191,7 +191,7 @@ describe(@"assembling choices", ^{ it(@"should be correct with no text and VR required", ^{ - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithoutArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithoutArtwork]; [testOp start]; NSArray *receivedRequests = (NSArray *)testConnectionManager.receivedRequests; @@ -207,7 +207,7 @@ primaryTextField.name = SDLTextFieldNameMenuName; windowCapability.textFields = @[primaryTextField]; - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithoutArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithoutArtwork]; [testOp start]; NSArray *receivedRequests = (NSArray *)testConnectionManager.receivedRequests; @@ -226,7 +226,7 @@ secondaryTextField.name = SDLTextFieldNameSecondaryText; windowCapability.textFields = @[primaryTextField, secondaryTextField]; - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithoutArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithoutArtwork]; [testOp start]; NSArray *receivedRequests = (NSArray *)testConnectionManager.receivedRequests; @@ -247,7 +247,7 @@ tertiaryTextField.name = SDLTextFieldNameTertiaryText; windowCapability.textFields = @[primaryTextField, secondaryTextField, tertiaryTextField]; - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithoutArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:NO cellsToPreload:cellsWithoutArtwork]; [testOp start]; NSArray *receivedRequests = (NSArray *)testConnectionManager.receivedRequests; @@ -261,7 +261,7 @@ it(@"should be correct with VR optional", ^{ - testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric defaultMainWindowCapability:windowCapability isVROptional:YES cellsToPreload:cellsWithoutArtwork]; + testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayName:SDLDisplayTypeGeneric windowCapability:windowCapability isVROptional:YES cellsToPreload:cellsWithoutArtwork]; [testOp start]; NSArray *receivedRequests = (NSArray *)testConnectionManager.receivedRequests; diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m index 6534b49df..730af59f7 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m @@ -4,9 +4,13 @@ #import "SDLArtwork.h" #import "SDLDisplayCapabilities.h" +#import "SDLDisplayCapability.h" #import "SDLFileManager.h" #import "SDLHMILevel.h" #import "SDLImage.h" +#import "SDLNotificationConstants.h" +#import "SDLOnHMIStatus.h" +#import "SDLRPCNotificationNotification.h" #import "SDLShow.h" #import "SDLSoftButton.h" #import "SDLSoftButtonCapabilities.h" @@ -15,7 +19,9 @@ #import "SDLSoftButtonReplaceOperation.h" #import "SDLSoftButtonState.h" #import "SDLSoftButtonTransitionOperation.h" +#import "SDLSystemCapability.h" #import "SDLSystemCapabilityManager.h" +#import "SDLWindowCapability.h" #import "TestConnectionManager.h" @interface SDLSoftButtonObject() @@ -34,11 +40,14 @@ @interface SDLSoftButtonManager() @property (strong, nonatomic) NSOperationQueue *transactionQueue; -@property (strong, nonatomic, nullable, readonly) SDLWindowCapability *windowCapability; +@property (strong, nonatomic, nullable) SDLSoftButtonCapabilities *softButtonCapabilities; @property (copy, nonatomic, nullable) SDLHMILevel currentLevel; @property (strong, nonatomic) NSMutableArray *batchQueue; +- (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification; +- (void)sdl_displayCapabilityDidUpdate:(SDLSystemCapability *)systemCapability; + @end QuickSpecBegin(SDLSoftButtonManagerSpec) @@ -75,8 +84,20 @@ @interface SDLSoftButtonManager() testManager = [[SDLSoftButtonManager alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager systemCapabilityManager:testSystemCapabilityManager]; [testManager start]; - expect(testManager.currentLevel).to(beNil()); - testManager.currentLevel = SDLHMILevelFull; + SDLOnHMIStatus *status = [[SDLOnHMIStatus alloc] init]; + status.hmiLevel = SDLHMILevelFull; + [testManager sdl_hmiStatusNotification:[[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:status]]; + + SDLSoftButtonCapabilities *softButtonCapabilities = [[SDLSoftButtonCapabilities alloc] init]; + softButtonCapabilities.imageSupported = @YES; + softButtonCapabilities.textSupported = @YES; + softButtonCapabilities.longPressAvailable = @YES; + softButtonCapabilities.shortPressAvailable = @YES; + + SDLWindowCapability *windowCapability = [[SDLWindowCapability alloc] init]; + windowCapability.softButtonCapabilities = @[softButtonCapabilities]; + SDLDisplayCapability *displayCapability = [[SDLDisplayCapability alloc] initWithDisplayName:@"TEST" windowCapabilities:@[windowCapability] windowTypeSupported:nil]; + [testManager sdl_displayCapabilityDidUpdate:[[SDLSystemCapability alloc] initWithDisplayCapabilities:@[displayCapability]]]; }); it(@"should instantiate correctly", ^{ @@ -85,13 +106,21 @@ @interface SDLSoftButtonManager() expect(testManager.softButtonObjects).to(beEmpty()); expect(testManager.currentMainField1).to(beNil()); - expect(testManager.windowCapability).to(beNil()); expect(testManager.transactionQueue).toNot(beNil()); + expect(testManager.transactionQueue.isSuspended).to(beFalse()); + expect(testManager.softButtonCapabilities).toNot(beNil()); + expect(testManager.currentLevel).to(equal(SDLHMILevelFull)); + + // These are set up earlier for future tests and therefore won't be nil +// expect(testManager.windowCapability).to(beNil()); +// expect(testManager.currentLevel).to(beNil()); }); context(@"when in HMI NONE", ^{ beforeEach(^{ - testManager.currentLevel = SDLHMILevelNone; + SDLOnHMIStatus *status = [[SDLOnHMIStatus alloc] init]; + status.hmiLevel = SDLHMILevelNone; + [testManager sdl_hmiStatusNotification:[[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:status]]; testObject1 = [[SDLSoftButtonObject alloc] initWithName:@"name1" states:@[object1State1, object1State2] initialStateName:object1State1Name handler:nil]; testObject2 = [[SDLSoftButtonObject alloc] initWithName:@"name2" state:object2State1 handler:nil]; @@ -105,19 +134,16 @@ @interface SDLSoftButtonManager() }); }); - context(@"when no HMI level has been received", ^{ + context(@"when there are no soft button capabilities", ^{ beforeEach(^{ - testManager.currentLevel = nil; - - testObject1 = [[SDLSoftButtonObject alloc] initWithName:@"name1" states:@[object1State1, object1State2] initialStateName:object1State1Name handler:nil]; - testObject2 = [[SDLSoftButtonObject alloc] initWithName:@"name2" state:object2State1 handler:nil]; - - testManager.softButtonObjects = @[testObject1, testObject2]; + SDLWindowCapability *windowCapability = [[SDLWindowCapability alloc] init]; + SDLDisplayCapability *displayCapability = [[SDLDisplayCapability alloc] initWithDisplayName:@"TEST" windowCapabilities:@[windowCapability] windowTypeSupported:nil]; + [testManager sdl_displayCapabilityDidUpdate:[[SDLSystemCapability alloc] initWithDisplayCapabilities:@[displayCapability]]]; }); - it(@"should set the soft buttons, but not update", ^{ - expect(testManager.softButtonObjects).toNot(beEmpty()); - expect(testManager.transactionQueue.suspended).to(beTrue()); + it(@"should set the buttons but have the queue suspended", ^{ + expect(testManager.softButtonObjects).toNot(beNil()); + expect(testManager.transactionQueue.isSuspended).to(beTrue()); }); }); @@ -143,21 +169,6 @@ @interface SDLSoftButtonManager() testManager.softButtonObjects = @[testObject1, testObject2]; }); - describe(@"while batching", ^{ - beforeEach(^{ - testManager.batchUpdates = YES; - - [testObject1 transitionToNextState]; - [testObject2 transitionToNextState]; - testManager.softButtonObjects = @[testObject2, testObject1]; - }); - - it(@"should properly queue the batching updates", ^{ - expect(testManager.transactionQueue.operationCount).to(equal(1)); - expect(testManager.batchQueue).to(haveCount(1)); - }); - }); - it(@"should set soft buttons correctly", ^{ expect(testManager.softButtonObjects).toNot(beNil()); expect(testObject1.buttonId).to(equal(0)); @@ -165,6 +176,7 @@ @interface SDLSoftButtonManager() expect(testObject1.manager).to(equal(testManager)); expect(testObject2.manager).to(equal(testManager)); + // One replace operation expect(testManager.transactionQueue.operationCount).to(equal(1)); }); @@ -181,9 +193,26 @@ @interface SDLSoftButtonManager() expect([testManager softButtonObjectNamed:object1Name].name).to(equal(object1Name)); }); + describe(@"while batching", ^{ + beforeEach(^{ + testManager.batchUpdates = YES; + + [testObject1 transitionToNextState]; + [testObject2 transitionToNextState]; + testManager.softButtonObjects = @[testObject2, testObject1]; + }); + + it(@"should properly queue the batching updates", ^{ + expect(testManager.transactionQueue.operationCount).to(equal(1)); + expect(testManager.batchQueue).to(haveCount(1)); + }); + }); + context(@"when the HMI level is now NONE", ^{ beforeEach(^{ - testManager.currentLevel = SDLHMILevelNone; + SDLOnHMIStatus *status = [[SDLOnHMIStatus alloc] init]; + status.hmiLevel = SDLHMILevelNone; + [testManager sdl_hmiStatusNotification:[[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:status]]; }); it(@"should not transition buttons", ^{ @@ -246,7 +275,7 @@ @interface SDLSoftButtonManager() expect(testManager.currentMainField1).to(beNil()); expect(testManager.transactionQueue.operationCount).to(equal(0)); expect(testManager.currentLevel).to(beNil()); - expect(testManager.windowCapability).to(beNil()); + expect(testManager.softButtonCapabilities).to(beNil()); }); }); }); diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m index cfcb62aea..4770f44f1 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m @@ -2,6 +2,8 @@ #import #import +#import "SDLAudioStreamManager.h" +#import "SDLConfiguration.h" #import "SDLControlFramePayloadAudioStartServiceAck.h" #import "SDLDisplayCapabilities.h" #import "SDLGlobals.h" @@ -14,19 +16,30 @@ #import "SDLScreenParams.h" #import "SDLStateMachine.h" #import "SDLStreamingAudioLifecycleManager.h" -#import "SDLStreamingMediaConfiguration.h" +#import "SDLSystemCapabilityManager.h" #import "SDLEncryptionConfiguration.h" #import "SDLV2ProtocolHeader.h" #import "SDLV2ProtocolMessage.h" +#import "SDLVehicleType.h" #import "TestConnectionManager.h" + +@interface SDLStreamingAudioLifecycleManager() + +@property (weak, nonatomic) SDLProtocol *protocol; +@property (copy, nonatomic, nullable) NSString *connectedVehicleMake; +@property (nonatomic, strong, readwrite) SDLAudioStreamManager *audioTranscodingManager; + +@end + QuickSpecBegin(SDLStreamingAudioLifecycleManagerSpec) describe(@"the streaming audio manager", ^{ __block SDLStreamingAudioLifecycleManager *streamingLifecycleManager = nil; - __block SDLStreamingMediaConfiguration *testConfiguration = [SDLStreamingMediaConfiguration insecureConfiguration]; - __block SDLEncryptionConfiguration *encryptionConfiguration = [SDLEncryptionConfiguration defaultConfiguration]; + __block SDLConfiguration *testConfig = nil; __block TestConnectionManager *testConnectionManager = nil; + __block SDLAudioStreamManager *mockAudioStreamManager = nil; + __block SDLSystemCapabilityManager *testSystemCapabilityManager = nil; __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel) = ^(SDLHMILevel hmiLevel) { SDLOnHMIStatus *hmiStatus = [[SDLOnHMIStatus alloc] init]; @@ -38,12 +51,17 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel) = ^(SDLHMILeve }; beforeEach(^{ + testConfig = OCMClassMock([SDLConfiguration class]); testConnectionManager = [[TestConnectionManager alloc] init]; - streamingLifecycleManager = [[SDLStreamingAudioLifecycleManager alloc] initWithConnectionManager:testConnectionManager streamingConfiguration:testConfiguration encryptionConfiguration:encryptionConfiguration]; + + testSystemCapabilityManager = OCMClassMock([SDLSystemCapabilityManager class]); + streamingLifecycleManager = [[SDLStreamingAudioLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfig systemCapabilityManager:testSystemCapabilityManager]; + mockAudioStreamManager = OCMClassMock([SDLAudioStreamManager class]); + streamingLifecycleManager.audioTranscodingManager = mockAudioStreamManager; }); it(@"should initialize properties", ^{ - expect(streamingLifecycleManager.audioManager).toNot(beNil()); + expect(streamingLifecycleManager.audioTranscodingManager).toNot(beNil()); expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@NO)); expect(@(streamingLifecycleManager.isAudioConnected)).to(equal(@NO)); expect(@(streamingLifecycleManager.isAudioEncrypted)).to(equal(@NO)); @@ -51,10 +69,21 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel) = ^(SDLHMILeve expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped)); }); + describe(@"Getting isStreamingSupported", ^{ + it(@"should get the value from the system capability manager", ^{ + [streamingLifecycleManager isStreamingSupported]; + OCMVerify([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming]); + }); + + it(@"should return true by default if the system capability manager is nil", ^{ + streamingLifecycleManager = [[SDLStreamingAudioLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfig systemCapabilityManager:nil]; + expect(streamingLifecycleManager.isStreamingSupported).to(beTrue()); + }); + }); + describe(@"when started", ^{ __block BOOL readyHandlerSuccess = NO; __block NSError *readyHandlerError = nil; - __block SDLProtocol *protocolMock = OCMClassMock([SDLProtocol class]); beforeEach(^{ @@ -71,65 +100,24 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel) = ^(SDLHMILeve expect(streamingLifecycleManager.currentAudioStreamState).to(match(SDLAudioStreamManagerStateStopped)); }); - describe(@"after receiving a register app interface notification", ^{ + describe(@"after receiving a register app interface response", ^{ __block SDLRegisterAppInterfaceResponse *someRegisterAppInterfaceResponse = nil; - __block SDLDisplayCapabilities *someDisplayCapabilities = nil; - __block SDLScreenParams *someScreenParams = nil; - __block SDLImageResolution *someImageResolution = nil; + __block SDLVehicleType *testVehicleType = nil; beforeEach(^{ - someImageResolution = [[SDLImageResolution alloc] init]; - someImageResolution.resolutionWidth = @(600); - someImageResolution.resolutionHeight = @(100); - - someScreenParams = [[SDLScreenParams alloc] init]; - someScreenParams.resolution = someImageResolution; - }); - - context(@"that does not support graphics", ^{ - beforeEach(^{ - someDisplayCapabilities = [[SDLDisplayCapabilities alloc] init]; - someDisplayCapabilities.graphicSupported = @NO; + someRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init]; + testVehicleType = [[SDLVehicleType alloc] init]; + testVehicleType.make = @"TestVehicleType"; + someRegisterAppInterfaceResponse.vehicleType = testVehicleType; - someDisplayCapabilities.screenParams = someScreenParams; + SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse]; - someRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - someRegisterAppInterfaceResponse.displayCapabilities = someDisplayCapabilities; -#pragma clang diagnostic pop - SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse]; - - [[NSNotificationCenter defaultCenter] postNotification:notification]; - [NSThread sleepForTimeInterval:0.1]; - }); - - it(@"should not support streaming", ^{ - expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@NO)); - }); + [[NSNotificationCenter defaultCenter] postNotification:notification]; + [NSThread sleepForTimeInterval:0.1]; }); - context(@"that supports graphics", ^{ - beforeEach(^{ - someDisplayCapabilities = [[SDLDisplayCapabilities alloc] init]; - someDisplayCapabilities.graphicSupported = @YES; - - someDisplayCapabilities.screenParams = someScreenParams; - - someRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - someRegisterAppInterfaceResponse.displayCapabilities = someDisplayCapabilities; -#pragma clang diagnostic pop - SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse]; - - [[NSNotificationCenter defaultCenter] postNotification:notification]; - [NSThread sleepForTimeInterval:0.1]; - }); - - it(@"should support streaming", ^{ - expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@YES)); - }); + it(@"should should save the connected vehicle make", ^{ + expect(streamingLifecycleManager.connectedVehicleMake).to(equal(testVehicleType.make)); }); }); @@ -402,6 +390,112 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel) = ^(SDLHMILeve }); }); }); + + describe(@"attempting to stop the manager", ^{ + __block BOOL handlerCalled = nil; + + beforeEach(^{ + handlerCalled = NO; + [streamingLifecycleManager endAudioServiceWithCompletionHandler:^ { + handlerCalled = YES; + }]; + streamingLifecycleManager.connectedVehicleMake = @"OEM_make_2"; + }); + + context(@"when the manager is READY", ^{ + beforeEach(^{ + [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateReady fromOldState:nil callEnterTransition:NO]; + [streamingLifecycleManager stop]; + }); + + it(@"should transition to the stopped state and reset the saved properties", ^{ + expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped)); + + expect(streamingLifecycleManager.protocol).to(beNil()); + expect(streamingLifecycleManager.hmiLevel).to(equal(SDLHMILevelNone)); + expect(streamingLifecycleManager.connectedVehicleMake).to(beNil()); + OCMVerify([mockAudioStreamManager stop]); + expect(handlerCalled).to(beTrue()); + }); + }); + + context(@"when the manager is already stopped", ^{ + beforeEach(^{ + [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateStopped fromOldState:nil callEnterTransition:NO]; + [streamingLifecycleManager stop]; + }); + + it(@"should stay in the stopped state", ^{ + expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped)); + + expect(streamingLifecycleManager.protocol).to(beNil()); + expect(streamingLifecycleManager.hmiLevel).to(equal(SDLHMILevelNone)); + expect(streamingLifecycleManager.connectedVehicleMake).to(beNil()); + OCMReject([mockAudioStreamManager stop]); + expect(handlerCalled).to(beFalse()); + }); + }); + }); + + describe(@"starting the manager when it's STOPPED", ^{ + __block SDLProtocol *protocolMock = OCMClassMock([SDLProtocol class]); + + beforeEach(^{ + [streamingLifecycleManager startWithProtocol:protocolMock]; + [streamingLifecycleManager endAudioServiceWithCompletionHandler:^{}]; + }); + + context(@"when stopping the audio service due to a secondary transport shutdown", ^{ + beforeEach(^{ + [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateReady fromOldState:nil callEnterTransition:NO]; + }); + + it(@"should reset the audio stream manger and send an end audio service control frame", ^{ + OCMVerify([mockAudioStreamManager stop]); + OCMVerify([protocolMock endServiceWithType:SDLServiceTypeAudio]); + }); + + context(@"when the end audio service ACKs", ^{ + __block SDLProtocolHeader *testAudioHeader = nil; + __block SDLProtocolMessage *testAudioMessage = nil; + + beforeEach(^{ + testAudioHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5]; + testAudioHeader.frameType = SDLFrameTypeSingle; + testAudioHeader.frameData = SDLFrameInfoEndServiceACK; + testAudioHeader.encrypted = NO; + testAudioHeader.serviceType = SDLServiceTypeAudio; + testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil]; + + [streamingLifecycleManager handleProtocolEndServiceACKMessage:testAudioMessage]; + }); + + it(@"should transistion to the stopped state", ^{ + expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped)); + }); + }); + + context(@"when the end audio service NAKs", ^{ + __block SDLProtocolHeader *testAudioHeader = nil; + __block SDLProtocolMessage *testAudioMessage = nil; + + beforeEach(^{ + testAudioHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5]; + testAudioHeader.frameType = SDLFrameTypeSingle; + testAudioHeader.frameData = SDLFrameInfoEndServiceNACK; + testAudioHeader.encrypted = NO; + testAudioHeader.serviceType = SDLServiceTypeAudio; + testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil]; + + [streamingLifecycleManager handleProtocolEndServiceNAKMessage:testAudioMessage]; + }); + + it(@"should transistion to the stopped state", ^{ + expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped)); + }); + }); + }); + }); }); QuickSpecEnd diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m index 31b87c9c9..4dfae005b 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m @@ -17,6 +17,7 @@ #import "SDLGetSystemCapabilityResponse.h" #import "SDLGenericResponse.h" #import "SDLGlobals.h" +#import "SDLHMICapabilities.h" #import "SDLHMILevel.h" #import "SDLImageResolution.h" #import "SDLLifecycleConfiguration.h" @@ -33,17 +34,23 @@ #import "SDLStreamingVideoLifecycleManager.h" #import "SDLStreamingVideoScaleManager.h" #import "SDLSystemCapability.h" +#import "SDLSystemCapabilityManager.h" #import "SDLV2ProtocolHeader.h" #import "SDLV2ProtocolMessage.h" +#import "SDLVehicleType.h" #import "SDLVideoStreamingCapability.h" #import "SDLVideoStreamingState.h" +#import "SDLVehicleType.h" #import "TestConnectionManager.h" -#import "SDLVersion.h" -#import "SDLHMICapabilities.h" + @interface SDLStreamingVideoLifecycleManager () + +@property (weak, nonatomic) SDLProtocol *protocol; @property (copy, nonatomic, readonly) NSString *appName; @property (copy, nonatomic, readonly) NSString *videoStreamBackgroundString; +@property (copy, nonatomic, nullable) NSString *connectedVehicleMake; + @end QuickSpecBegin(SDLStreamingVideoLifecycleManagerSpec) @@ -56,7 +63,7 @@ @interface SDLStreamingVideoLifecycleManager () __block TestConnectionManager *testConnectionManager = nil; __block NSString *testAppName = @"Test App"; __block SDLLifecycleConfiguration *testLifecycleConfiguration = [SDLLifecycleConfiguration defaultConfigurationWithAppName:testAppName fullAppId:@""]; - + __block SDLSystemCapabilityManager *testSystemCapabilityManager = nil; __block SDLConfiguration *testConfig = nil; __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStreamingState streamState) = ^(SDLHMILevel hmiLevel, SDLVideoStreamingState streamState) { @@ -81,7 +88,8 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream testConfig = [SDLConfiguration configurationWithLifecycle:testLifecycleConfiguration lockScreen:SDLLockScreenConfiguration.enabledConfiguration logging:SDLLogConfiguration.debugConfiguration streamingMedia:testConfiguration fileManager:SDLFileManagerConfiguration.defaultConfiguration]; - streamingLifecycleManager = [[SDLStreamingVideoLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfig]; + testSystemCapabilityManager = OCMClassMock([SDLSystemCapabilityManager class]); + streamingLifecycleManager = [[SDLStreamingVideoLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfig systemCapabilityManager:testSystemCapabilityManager]; }); it(@"should initialize properties", ^{ @@ -107,6 +115,18 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream expect(streamingLifecycleManager.preferredResolutionIndex).to(equal(0)); }); + describe(@"Getting isStreamingSupported", ^{ + it(@"should get the value from the system capability manager", ^{ + [streamingLifecycleManager isStreamingSupported]; + OCMVerify([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming]); + }); + + it(@"should return true by default if the system capability manager is nil", ^{ + streamingLifecycleManager = [[SDLStreamingVideoLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfig systemCapabilityManager:nil]; + expect(streamingLifecycleManager.isStreamingSupported).to(beTrue()); + }); + }); + describe(@"when started", ^{ __block BOOL readyHandlerSuccess = NO; __block NSError *readyHandlerError = nil; @@ -131,12 +151,13 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream expect(streamingLifecycleManager.currentVideoStreamState).to(match(SDLVideoStreamManagerStateStopped)); }); - describe(@"after receiving a register app interface notification", ^{ + describe(@"after receiving a register app interface response", ^{ __block SDLRegisterAppInterfaceResponse *someRegisterAppInterfaceResponse = nil; __block SDLDisplayCapabilities *someDisplayCapabilities = nil; __block SDLScreenParams *someScreenParams = nil; __block SDLImageResolution *someImageResolution = nil; __block SDLHMICapabilities *someHMICapabilities = nil; + __block SDLVehicleType *testVehicleType = nil; beforeEach(^{ someImageResolution = [[SDLImageResolution alloc] init]; @@ -145,19 +166,19 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream someScreenParams = [[SDLScreenParams alloc] init]; someScreenParams.resolution = someImageResolution; + + testVehicleType = [[SDLVehicleType alloc] init]; + testVehicleType.make = @"TestVehicleType"; }); - context(@"that does not support video streaming", ^{ + describe(@"that does not support video streaming", ^{ beforeEach(^{ - SDLVersion *version = [SDLVersion versionWithMajor:6 minor:0 patch:0]; - id globalMock = OCMPartialMock([SDLGlobals sharedGlobals]); - OCMStub([globalMock rpcVersion]).andReturn(version); - someHMICapabilities = [[SDLHMICapabilities alloc] init]; someHMICapabilities.videoStreaming = @NO; someRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init]; someRegisterAppInterfaceResponse.hmiCapabilities = someHMICapabilities; + someRegisterAppInterfaceResponse.vehicleType = testVehicleType; SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse]; @@ -165,17 +186,14 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream [NSThread sleepForTimeInterval:0.1]; }); - it(@"should not support streaming", ^{ - expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@NO)); + it(@"should save the connected vehicle make but not the screen size", ^{ + expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeZero))).to(equal(@YES)); + expect(streamingLifecycleManager.connectedVehicleMake).to(equal(testVehicleType.make)); }); }); - context(@"that supports video streaming", ^{ + describe(@"that supports video streaming", ^{ beforeEach(^{ - SDLVersion *version = [SDLVersion versionWithMajor:6 minor:0 patch:0]; - id globalMock = OCMPartialMock([SDLGlobals sharedGlobals]); - OCMStub([globalMock rpcVersion]).andReturn(version); - someHMICapabilities = [[SDLHMICapabilities alloc] init]; someHMICapabilities.videoStreaming = @YES; @@ -188,42 +206,19 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream #pragma clang diagnostic ignored "-Wdeprecated" someRegisterAppInterfaceResponse.displayCapabilities = someDisplayCapabilities; #pragma clang diagnostic pop + someRegisterAppInterfaceResponse.vehicleType = testVehicleType; - SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse]; + someRegisterAppInterfaceResponse.vehicleType = testVehicleType; - [[NSNotificationCenter defaultCenter] postNotification:notification]; - [NSThread sleepForTimeInterval:0.1]; - }); - - it(@"should support streaming", ^{ - expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@YES)); - expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeMake(600, 100)))).to(equal(@YES)); - }); - }); - - context(@"version is less then 4.5.0", ^{ - beforeEach(^{ - SDLVersion *version = [SDLVersion versionWithMajor:4 minor:0 patch:0]; - id globalMock = OCMPartialMock([SDLGlobals sharedGlobals]); - OCMStub([globalMock rpcVersion]).andReturn(version); - - someDisplayCapabilities = [[SDLDisplayCapabilities alloc] init]; - someDisplayCapabilities.screenParams = someScreenParams; - - someRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated" - someRegisterAppInterfaceResponse.displayCapabilities = someDisplayCapabilities; -#pragma clang diagnostic pop SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse]; [[NSNotificationCenter defaultCenter] postNotification:notification]; [NSThread sleepForTimeInterval:0.1]; }); - it(@"should support streaming even though hmiCapabilities.videoStreaming is nil", ^{ - expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@YES)); + it(@"should save the connected vehicle make and the screen size", ^{ expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeMake(600, 100)))).to(equal(@YES)); + expect(streamingLifecycleManager.connectedVehicleMake).toEventually(equal(testVehicleType.make)); }); }); }); @@ -590,7 +585,7 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream context(@"with missing screen height and screen width values", ^{ beforeEach(^{ streamingLifecycleManager.preferredResolutions = @[]; - + testVideoStartServicePayload = [[SDLControlFramePayloadVideoStartServiceAck alloc] initWithMTU:testMTU height:SDLControlFrameInt32NotFound width:SDLControlFrameInt32NotFound protocol:nil codec:nil]; testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartServicePayload.data]; expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeZero))).to(equal(@YES)); @@ -608,13 +603,13 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream context(@"If the preferred resolution was set in the data source", ^{ __block SDLImageResolution *preferredResolutionLow = nil; __block SDLImageResolution *preferredResolutionHigh = nil; - + beforeEach(^{ preferredResolutionLow = [[SDLImageResolution alloc] initWithWidth:10 height:10]; preferredResolutionHigh = [[SDLImageResolution alloc] initWithWidth:100 height:100]; streamingLifecycleManager.dataSource = testDataSource; streamingLifecycleManager.preferredResolutions = @[preferredResolutionLow, preferredResolutionHigh]; - + [streamingLifecycleManager handleProtocolStartServiceACKMessage:testVideoMessage]; }); it(@"should set the screen size using the first provided preferred resolution", ^{ @@ -630,6 +625,8 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream __block SDLProtocolHeader *testVideoHeader = nil; __block SDLProtocolMessage *testVideoMessage = nil; __block SDLControlFramePayloadNak *testVideoStartNakPayload = nil; + __block NSArray *testPreferredFormats = nil; + __block NSArray *testPreferredResolutions = nil; beforeEach(^{ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateStarting fromOldState:nil callEnterTransition:NO]; @@ -641,8 +638,18 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream testVideoHeader.serviceType = SDLServiceTypeVideo; }); - context(@"with data", ^{ + context(@"with rejected parameters for resolution and codec and there is more than one supported resolution and video codec", ^{ beforeEach(^{ + SDLVideoStreamingFormat *testVideoFormat = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecTheora protocol:SDLVideoStreamingProtocolWebM]; + SDLVideoStreamingFormat *testVideoFormat2 = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP]; + testPreferredFormats = @[testVideoFormat, testVideoFormat2]; + streamingLifecycleManager.preferredFormats = testPreferredFormats; + + SDLImageResolution *testImageResolution = [[SDLImageResolution alloc] initWithWidth:400 height:200]; + SDLImageResolution *testImageResolution2 = [[SDLImageResolution alloc] initWithWidth:500 height:800]; + testPreferredResolutions = @[testImageResolution, testImageResolution2]; + streamingLifecycleManager.preferredResolutions = testPreferredResolutions; + testVideoStartNakPayload = [[SDLControlFramePayloadNak alloc] initWithRejectedParams:@[[NSString stringWithUTF8String:SDLControlFrameHeightKey], [NSString stringWithUTF8String:SDLControlFrameVideoCodecKey]]]; testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartNakPayload.data]; [streamingLifecycleManager handleProtocolStartServiceNAKMessage:testVideoMessage]; @@ -654,8 +661,53 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream }); }); + context(@"with rejected parameters for codec and there is more than one supported video codec", ^{ + beforeEach(^{ + SDLVideoStreamingFormat *testVideoFormat = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecTheora protocol:SDLVideoStreamingProtocolWebM]; + SDLVideoStreamingFormat *testVideoFormat2 = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP]; + testPreferredFormats = @[testVideoFormat, testVideoFormat2]; + streamingLifecycleManager.preferredFormats = testPreferredFormats; + + SDLImageResolution *testImageResolution = [[SDLImageResolution alloc] initWithWidth:400 height:200]; + testPreferredResolutions = @[testImageResolution]; + streamingLifecycleManager.preferredResolutions = testPreferredResolutions; + + testVideoStartNakPayload = [[SDLControlFramePayloadNak alloc] initWithRejectedParams:@[[NSString stringWithUTF8String:SDLControlFrameVideoCodecKey]]]; + testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartNakPayload.data]; + [streamingLifecycleManager handleProtocolStartServiceNAKMessage:testVideoMessage]; + }); + + it(@"should have retried with new properties", ^{ + expect(streamingLifecycleManager.preferredResolutionIndex).to(equal(0)); + expect(streamingLifecycleManager.preferredFormatIndex).to(equal(1)); + }); + }); + + context(@"with rejected parameters for codec and there are no more supported video codecs", ^{ + beforeEach(^{ + SDLVideoStreamingFormat *testVideoFormat = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP]; + testPreferredFormats = @[testVideoFormat]; + streamingLifecycleManager.preferredFormats = testPreferredFormats; + + SDLImageResolution *testImageResolution = [[SDLImageResolution alloc] initWithWidth:400 height:200]; + testPreferredResolutions = @[testImageResolution]; + streamingLifecycleManager.preferredResolutions = testPreferredResolutions; + + testVideoStartNakPayload = [[SDLControlFramePayloadNak alloc] initWithRejectedParams:@[[NSString stringWithUTF8String:SDLControlFrameVideoCodecKey]]]; + testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartNakPayload.data]; + [streamingLifecycleManager handleProtocolStartServiceNAKMessage:testVideoMessage]; + }); + + it(@"should end the service", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped)); + }); + }); + context(@"with missing data", ^{ beforeEach(^{ + streamingLifecycleManager.preferredFormats = testPreferredFormats; + streamingLifecycleManager.preferredResolutions = testPreferredResolutions; + testVideoStartNakPayload = [[SDLControlFramePayloadNak alloc] initWithRejectedParams:nil]; testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartNakPayload.data]; [streamingLifecycleManager handleProtocolStartServiceNAKMessage:testVideoMessage]; @@ -713,6 +765,112 @@ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStream }); }); + describe(@"stopping the manager", ^{ + __block BOOL handlerCalled = nil; + + beforeEach(^{ + handlerCalled = NO; + [streamingLifecycleManager endVideoServiceWithCompletionHandler:^ { + handlerCalled = YES; + }]; + streamingLifecycleManager.connectedVehicleMake = @"OEM_make_2"; + }); + + context(@"when the manager is not stopped", ^{ + beforeEach(^{ + [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateReady fromOldState:nil callEnterTransition:NO]; + [streamingLifecycleManager stop]; + }); + + it(@"should transition to the stopped state", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped)); + expect(streamingLifecycleManager.protocol).to(beNil()); + expect(streamingLifecycleManager.connectedVehicleMake).to(beNil()); + expect(streamingLifecycleManager.hmiLevel).to(equal(SDLHMILevelNone)); + expect(streamingLifecycleManager.videoStreamingState).to(equal(SDLVideoStreamingStateNotStreamable)); + expect(streamingLifecycleManager.preferredFormatIndex).to(equal(0)); + expect(streamingLifecycleManager.preferredResolutionIndex).to(equal(0)); + expect(handlerCalled).to(beTrue()); + }); + }); + + context(@"when the manager is already stopped", ^{ + beforeEach(^{ + [streamingLifecycleManager.videoStreamStateMachine setToState:SDLAudioStreamManagerStateStopped fromOldState:nil callEnterTransition:NO]; + [streamingLifecycleManager stop]; + }); + + it(@"should stay in the stopped state", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped)); + expect(streamingLifecycleManager.protocol).to(beNil()); + expect(streamingLifecycleManager.connectedVehicleMake).to(beNil()); + expect(streamingLifecycleManager.hmiLevel).to(equal(SDLHMILevelNone)); + expect(streamingLifecycleManager.videoStreamingState).to(equal(SDLVideoStreamingStateNotStreamable)); + expect(streamingLifecycleManager.preferredFormatIndex).to(equal(0)); + expect(streamingLifecycleManager.preferredResolutionIndex).to(equal(0)); + expect(handlerCalled).to(beFalse()); + }); + }); + }); + + describe(@"starting the manager", ^{ + __block SDLProtocol *protocolMock = OCMClassMock([SDLProtocol class]); + + beforeEach(^{ + [streamingLifecycleManager startWithProtocol:protocolMock]; + }); + + describe(@"then ending the video service through the secondary transport", ^{ + beforeEach(^{ + [streamingLifecycleManager endVideoServiceWithCompletionHandler:^{}]; + }); + + it(@"should send an end video service control frame", ^{ + OCMVerify([protocolMock endServiceWithType:SDLServiceTypeVideo]); + }); + + context(@"when the end video service ACKs", ^{ + __block SDLProtocolHeader *testVideoHeader = nil; + __block SDLProtocolMessage *testVideoMessage = nil; + + beforeEach(^{ + testVideoHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5]; + testVideoHeader.frameType = SDLFrameTypeSingle; + testVideoHeader.frameData = SDLFrameInfoEndServiceACK; + testVideoHeader.encrypted = NO; + testVideoHeader.serviceType = SDLServiceTypeVideo; + testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:nil]; + + [streamingLifecycleManager handleProtocolEndServiceACKMessage:testVideoMessage]; + }); + + it(@"should transistion to the stopped state", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped)); + }); + }); + + context(@"when the end audio service NAKs", ^{ + __block SDLProtocolHeader *testVideoHeader = nil; + __block SDLProtocolMessage *testVideoMessage = nil; + + beforeEach(^{ + testVideoHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5]; + testVideoHeader.frameType = SDLFrameTypeSingle; + testVideoHeader.frameData = SDLFrameInfoEndServiceNACK; + testVideoHeader.encrypted = NO; + testVideoHeader.serviceType = SDLServiceTypeVideo; + testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:nil]; + + [streamingLifecycleManager handleProtocolEndServiceNAKMessage:testVideoMessage]; + }); + + it(@"should transistion to the stopped state", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped)); + }); + }); + }); + }); + describe(@"Creating a background video stream string", ^{ __block NSString *expectedVideoStreamBackgroundString = [NSString stringWithFormat:@"When it is safe to do so, open %@ on your phone", testAppName]; diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m index 35c3f0a08..fb7298988 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m @@ -370,6 +370,31 @@ @interface SDLTextAndGraphicManager() testManager.textField4Type = nil; }); + context(@"when textFields are nil", ^{ + beforeEach(^{ + testManager.windowCapability = [[SDLWindowCapability alloc] init]; + }); + + it(@"should send everything", ^{ + testManager.mediaTrackTextField = textMediaTrack; + testManager.title = textTitle; + testManager.textField1 = textLine1; + testManager.textField2 = textLine2; + testManager.textField3 = textLine3; + testManager.textField4 = textLine4; + + testManager.batchUpdates = NO; + [testManager updateWithCompletionHandler:nil]; + + expect(testManager.inProgressUpdate.mediaTrack).to(equal(textMediaTrack)); + expect(testManager.inProgressUpdate.templateTitle).to(equal(textTitle)); + expect(testManager.inProgressUpdate.mainField1).to(equal(textLine1)); + expect(testManager.inProgressUpdate.mainField2).to(equal(textLine2)); + expect(testManager.inProgressUpdate.mainField3).to(equal(textLine3)); + expect(testManager.inProgressUpdate.mainField4).to(equal(textLine4)); + }); + }); + context(@"with one line available", ^{ beforeEach(^{ testManager.windowCapability = [[SDLWindowCapability alloc] init]; @@ -378,24 +403,24 @@ @interface SDLTextAndGraphicManager() testManager.windowCapability.textFields = @[lineOneField]; }); - it(@"should set mediatrack properly", ^{ + it(@"should not set mediatrack", ^{ testManager.mediaTrackTextField = textMediaTrack; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - expect(testManager.inProgressUpdate.mediaTrack).to(equal(textMediaTrack)); + expect(testManager.inProgressUpdate.mediaTrack).toNot(equal(textMediaTrack)); expect(testManager.inProgressUpdate.mainField1).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField1).to(beNil()); }); - it(@"should set title properly", ^{ + it(@"should not set title", ^{ testManager.title = textTitle; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - expect(testManager.inProgressUpdate.templateTitle).to(equal(textTitle)); + expect(testManager.inProgressUpdate.templateTitle).toNot(equal(textTitle)); expect(testManager.inProgressUpdate.mainField1).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField1).to(beNil()); }); @@ -469,6 +494,31 @@ @interface SDLTextAndGraphicManager() expect(testManager.inProgressUpdate.mainField2).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField2).to(beNil()); }); + + context(@"when media track and title are available", ^{ + beforeEach(^{ + NSMutableArray *existingFieldsMutable = [testManager.windowCapability.textFields mutableCopy]; + SDLTextField *mediaTrack = [[SDLTextField alloc] init]; + mediaTrack.name = SDLTextFieldNameMediaTrack; + [existingFieldsMutable addObject:mediaTrack]; + + SDLTextField *title = [[SDLTextField alloc] init]; + title.name = SDLTextFieldNameTemplateTitle; + [existingFieldsMutable addObject:title]; + testManager.windowCapability.textFields = [existingFieldsMutable copy]; + }); + + it(@"should set media track and title properly", ^{ + testManager.mediaTrackTextField = textMediaTrack; + testManager.title = textTitle; + + testManager.batchUpdates = NO; + [testManager updateWithCompletionHandler:nil]; + + expect(testManager.inProgressUpdate.mediaTrack).to(equal(textMediaTrack)); + expect(testManager.inProgressUpdate.templateTitle).to(equal(textTitle)); + }); + }); }); context(@"with two lines available", ^{ @@ -479,24 +529,24 @@ @interface SDLTextAndGraphicManager() testManager.windowCapability.textFields = @[lineTwoField]; }); - it(@"should set mediatrack properly", ^{ + it(@"should not set mediatrack", ^{ testManager.mediaTrackTextField = textMediaTrack; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - expect(testManager.inProgressUpdate.mediaTrack).to(equal(textMediaTrack)); + expect(testManager.inProgressUpdate.mediaTrack).toNot(equal(textMediaTrack)); expect(testManager.inProgressUpdate.mainField1).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField1).to(beNil()); }); - it(@"should set title properly", ^{ + it(@"should not set title", ^{ testManager.title = textTitle; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - expect(testManager.inProgressUpdate.templateTitle).to(equal(textTitle)); + expect(testManager.inProgressUpdate.templateTitle).toNot(equal(textTitle)); expect(testManager.inProgressUpdate.mainField1).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField1).to(beNil()); }); @@ -589,24 +639,24 @@ @interface SDLTextAndGraphicManager() testManager.windowCapability.textFields = @[lineThreeField]; }); - it(@"should set mediatrack properly", ^{ + it(@"should not set mediatrack", ^{ testManager.mediaTrackTextField = textMediaTrack; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - expect(testManager.inProgressUpdate.mediaTrack).to(equal(textMediaTrack)); + expect(testManager.inProgressUpdate.mediaTrack).toNot(equal(textMediaTrack)); expect(testManager.inProgressUpdate.mainField1).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField1).to(beNil()); }); - it(@"should set title properly", ^{ + it(@"should not set title", ^{ testManager.title = textTitle; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - expect(testManager.inProgressUpdate.templateTitle).to(equal(textTitle)); + expect(testManager.inProgressUpdate.templateTitle).toNot(equal(textTitle)); expect(testManager.inProgressUpdate.mainField1).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField1).to(beNil()); }); @@ -703,24 +753,24 @@ @interface SDLTextAndGraphicManager() testManager.windowCapability.textFields = @[lineFourField]; }); - it(@"should set mediatrack properly", ^{ + it(@"should not set mediatrack", ^{ testManager.mediaTrackTextField = textMediaTrack; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - expect(testManager.inProgressUpdate.mediaTrack).to(equal(textMediaTrack)); + expect(testManager.inProgressUpdate.mediaTrack).toNot(equal(textMediaTrack)); expect(testManager.inProgressUpdate.mainField1).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField1).to(beNil()); }); - it(@"should set title properly", ^{ + it(@"should not set title", ^{ testManager.title = textTitle; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - expect(testManager.inProgressUpdate.templateTitle).to(equal(textTitle)); + expect(testManager.inProgressUpdate.templateTitle).toNot(equal(textTitle)); expect(testManager.inProgressUpdate.mainField1).to(beEmpty()); expect(testManager.inProgressUpdate.metadataTags.mainField1).to(beNil()); }); @@ -820,18 +870,35 @@ @interface SDLTextAndGraphicManager() context(@"when the image is already on the head unit", ^{ beforeEach(^{ OCMStub([mockFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(YES); + }); + it(@"should immediately attempt to update", ^{ testManager.primaryGraphic = testArtwork; testManager.secondaryGraphic = testArtwork; testManager.batchUpdates = NO; [testManager updateWithCompletionHandler:nil]; - }); - it(@"should immediately attempt to update", ^{ expect(testManager.inProgressUpdate.graphic.value).to(equal(testArtworkName)); expect(testManager.inProgressUpdate.secondaryGraphic.value).to(equal(testArtworkName)); expect(testManager.inProgressUpdate.mainField1).to(equal(testTextFieldText)); }); + + context(@"when imageFields are nil", ^{ + beforeEach(^{ + testManager.windowCapability = [[SDLWindowCapability alloc] init]; + }); + + it(@"should send everything", ^{ + testManager.primaryGraphic = testArtwork; + testManager.secondaryGraphic = testArtwork; + testManager.batchUpdates = NO; + [testManager updateWithCompletionHandler:nil]; + + expect(testManager.inProgressUpdate.graphic.value).to(equal(testArtworkName)); + expect(testManager.inProgressUpdate.secondaryGraphic.value).to(equal(testArtworkName)); + expect(testManager.inProgressUpdate.mainField1).to(equal(testTextFieldText)); + }); + }); }); context(@"when the image is a static icon", ^{ diff --git a/SmartDeviceLinkTests/DevAPISpecs/TestSystemCapabilityObserver.h b/SmartDeviceLinkTests/DevAPISpecs/TestSystemCapabilityObserver.h index 0e6c8bcbb..1d602f1f3 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/TestSystemCapabilityObserver.h +++ b/SmartDeviceLinkTests/DevAPISpecs/TestSystemCapabilityObserver.h @@ -8,16 +8,21 @@ #import -@class SDLSystemCapabilityManager; +@class SDLSystemCapability; NS_ASSUME_NONNULL_BEGIN @interface TestSystemCapabilityObserver : NSObject @property (assign, nonatomic) NSUInteger selectorCalledCount; +@property (strong, nonatomic, nullable) NSMutableArray *capabilitiesReceived; +@property (strong, nonatomic, nullable) NSMutableArray *errorsReceived; +@property (strong, nonatomic, nullable) NSMutableArray *subscribedValuesReceived; - (void)capabilityUpdated; -- (void)capabilityUpdatedWithNotification:(SDLSystemCapabilityManager *)capabilityManager; +- (void)capabilityUpdatedWithCapability:(SDLSystemCapability *)capability; +- (void)capabilityUpdatedWithCapability:(SDLSystemCapability *)capability error:(NSError *)error; +- (void)capabilityUpdatedWithCapability:(SDLSystemCapability *)capability error:(NSError *)error subscribed:(BOOL)subscribed; @end diff --git a/SmartDeviceLinkTests/DevAPISpecs/TestSystemCapabilityObserver.m b/SmartDeviceLinkTests/DevAPISpecs/TestSystemCapabilityObserver.m index 5366b0884..02696cb1b 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/TestSystemCapabilityObserver.m +++ b/SmartDeviceLinkTests/DevAPISpecs/TestSystemCapabilityObserver.m @@ -8,6 +8,8 @@ #import "TestSystemCapabilityObserver.h" +#import "SDLSystemCapability.h" + @implementation TestSystemCapabilityObserver - (instancetype)init { @@ -15,6 +17,9 @@ - (instancetype)init { if (!self) { return nil; } _selectorCalledCount = 0; + _capabilitiesReceived = [NSMutableArray array]; + _errorsReceived = [NSMutableArray array]; + _subscribedValuesReceived = [NSMutableArray array]; return self; } @@ -23,8 +28,38 @@ - (void)capabilityUpdated { self.selectorCalledCount++; } -- (void)capabilityUpdatedWithNotification:(SDLSystemCapabilityManager *)capabilityManager { +- (void)capabilityUpdatedWithCapability:(SDLSystemCapability *)capability { + self.selectorCalledCount++; + + if (capability != nil) { + [self.capabilitiesReceived addObject:capability]; + } +} + +- (void)capabilityUpdatedWithCapability:(SDLSystemCapability *)capability error:(NSError *)error { + self.selectorCalledCount++; + + if (capability != nil) { + [self.capabilitiesReceived addObject:capability]; + } + + if (error != nil) { + [self.errorsReceived addObject:error]; + } +} + +- (void)capabilityUpdatedWithCapability:(SDLSystemCapability *)capability error:(NSError *)error subscribed:(BOOL)subscribed { self.selectorCalledCount++; + + if (capability != nil) { + [self.capabilitiesReceived addObject:capability]; + } + + if (error != nil) { + [self.errorsReceived addObject:error]; + } + + [self.subscribedValuesReceived addObject:@(subscribed)]; } @end diff --git a/SmartDeviceLinkTests/LoggingSpecs/SDLLogFilterSpec.m b/SmartDeviceLinkTests/LoggingSpecs/SDLLogFilterSpec.m index fe9e0fdfd..3340fd8ec 100644 --- a/SmartDeviceLinkTests/LoggingSpecs/SDLLogFilterSpec.m +++ b/SmartDeviceLinkTests/LoggingSpecs/SDLLogFilterSpec.m @@ -6,7 +6,7 @@ #import "SDLLogModel.h" -QuickSpecBegin(SDLfilterspec) +QuickSpecBegin(SDLFilterSpec) describe(@"a filter by a string", ^{ __block NSString *testFilterString = @"filter string"; diff --git a/SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m b/SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m index 0eb289928..dc713cb06 100644 --- a/SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m +++ b/SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m @@ -109,7 +109,7 @@ }); it(@"should run the handler", ^{ - expect(@(handlerCalled)).to(beTruthy()); + expect(@(handlerCalled)).toEventually(beTrue()); expect(testDispatcher.rpcRequestDictionary).to(haveCount(@0)); expect(testDispatcher.rpcResponseHandlerMap).to(haveCount(@0)); }); @@ -304,6 +304,7 @@ describe(@"then deleting the command", ^{ __block SDLDeleteCommand *testDeleteCommand = nil; __block SDLDeleteCommandResponse *testDeleteResponse = nil; + __block NSUInteger deleteCommandHandlerMapCount = 0; beforeEach(^{ [testDispatcher storeRequest:testAddCommand handler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {}]; @@ -315,22 +316,24 @@ testDeleteCommand.correlationID = testDeleteCommandCorrelationId; testDeleteCommand.cmdID = @(testCommandId); - [testDispatcher storeRequest:testDeleteCommand handler:nil]; + [testDispatcher storeRequest:testDeleteCommand handler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { + deleteCommandHandlerMapCount = testDispatcher.commandHandlerMap.count; + }]; testDeleteResponse = [[SDLDeleteCommandResponse alloc] init]; testDeleteResponse.correlationID = testDeleteCommandCorrelationId; testDeleteResponse.success = @YES; SDLRPCResponseNotification *deleteCommandNotification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveDeleteCommandResponse object:nil rpcResponse:testDeleteResponse]; - [[NSNotificationCenter defaultCenter] postNotification:deleteCommandNotification]; }); it(@"should have removed all the handlers", ^{ - // There should still be the add command request & handler in the dictionaries since we never responded - expect(testDispatcher.commandHandlerMap).to(haveCount(@0)); - expect(testDispatcher.rpcRequestDictionary).to(haveCount(@1)); - expect(testDispatcher.rpcResponseHandlerMap).to(haveCount(@1)); + // There should still be the add command request & handler in the dictionaries since we never responded to those RPCs, but the command handler map should have removed the addCommand handler + expect(testDispatcher.commandHandlerMap).to(haveCount(0)); + expect(testDispatcher.rpcRequestDictionary.allKeys).to(haveCount(1)); + expect(testDispatcher.rpcResponseHandlerMap).to(haveCount(1)); + expect(deleteCommandHandlerMapCount).to(equal(0)); }); }); }); diff --git a/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m index 1a322e373..a8901a2a0 100644 --- a/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m +++ b/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m @@ -215,10 +215,7 @@ context(@"During V1 session", ^ { it(@"Should send the correct data", ^ { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" [[[[mockRequest stub] andReturn:dictionaryV1] ignoringNonObjectArgs] serializeAsDictionary:1]; -#pragma clang diagnostic pop SDLProtocol* testProtocol = [[SDLProtocol alloc] init]; SDLV1ProtocolHeader *testHeader = [[SDLV1ProtocolHeader alloc] init]; @@ -255,10 +252,7 @@ context(@"During V2 session", ^ { it(@"Should send the correct data bulk data when bulk data is available", ^ { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" [[[[mockRequest stub] andReturn:dictionaryV2] ignoringNonObjectArgs] serializeAsDictionary:2]; -#pragma clang diagnostic pop [[[mockRequest stub] andReturn:@0x98765] correlationID]; [[[mockRequest stub] andReturn:@"DeleteCommand"] name]; [[[mockRequest stub] andReturn:[NSData dataWithBytes:"COMMAND" length:strlen("COMMAND")]] bulkData]; diff --git a/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m index 277ccd7f2..32599856d 100644 --- a/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m +++ b/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m @@ -91,11 +91,14 @@ expect([functionID functionNameForId:32787]).to(equal(SDLRPCFunctionNameOnSystemCapabilityUpdated)); //Not listed in Spec +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect([functionID functionNameForId:65536]).to(equal(SDLRPCFunctionNameEncodedSyncPData)); expect([functionID functionNameForId:65537]).to(equal(SDLRPCFunctionNameSyncPData)); expect([functionID functionNameForId:98304]).to(equal(SDLRPCFunctionNameOnEncodedSyncPData)); expect([functionID functionNameForId:98305]).to(equal(SDLRPCFunctionNameOnSyncPData)); +#pragma clang diagnostic pop }); }); @@ -152,6 +155,8 @@ expect([functionID functionIdForName:SDLRPCFunctionNameGetAppServiceData]).to(equal(@53)); expect([functionID functionIdForName:SDLRPCFunctionNameGetFile]).to(equal(@54)); expect([functionID functionIdForName:SDLRPCFunctionNamePerformAppServiceInteraction]).to(equal(@55)); + expect([functionID functionIdForName:SDLRPCFunctionNameCreateWindow]).to(equal(@60)); + expect([functionID functionIdForName:SDLRPCFunctionNameDeleteWindow]).to(equal(@61)); expect([functionID functionIdForName:SDLRPCFunctionNameOnHMIStatus]).to(equal(@32768)); expect([functionID functionIdForName:SDLRPCFunctionNameOnAppInterfaceUnregistered]).to(equal(@32769)); expect([functionID functionIdForName:SDLRPCFunctionNameOnButtonEvent]).to(equal(@32770)); @@ -173,13 +178,14 @@ expect([functionID functionIdForName:SDLRPCFunctionNameOnSystemCapabilityUpdated]).to(equal(@32787)); //Not listed in Spec +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect([functionID functionIdForName:SDLRPCFunctionNameEncodedSyncPData]).to(equal(@65536)); expect([functionID functionIdForName:SDLRPCFunctionNameSyncPData]).to(equal(@65537)); expect([functionID functionIdForName:SDLRPCFunctionNameOnEncodedSyncPData]).to(equal(@98304)); expect([functionID functionIdForName:SDLRPCFunctionNameOnSyncPData]).to(equal(@98305)); - expect([functionID functionIdForName:SDLRPCFunctionNameCreateWindow]).to(equal(@60)); - expect([functionID functionIdForName:SDLRPCFunctionNameDeleteWindow]).to(equal(@61)); +#pragma clang diagnostic pop }); }); diff --git a/SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m b/SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m index acf64f0b8..d877d3d39 100644 --- a/SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m +++ b/SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m @@ -99,7 +99,10 @@ }); it(@"should return lock screen off", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff)); +#pragma clang diagnostic pop }); }); @@ -109,7 +112,10 @@ }); it(@"should return lock screen off", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff)); +#pragma clang diagnostic pop }); }); @@ -125,7 +131,10 @@ context(@"if we do not set the driver distraction state", ^{ it(@"should return lock screen required", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired)); +#pragma clang diagnostic pop }); }); @@ -135,7 +144,10 @@ }); it(@"should return lock screen optional", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional)); +#pragma clang diagnostic pop }); }); @@ -145,7 +157,10 @@ }); it(@"should return lock screen required", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired)); +#pragma clang diagnostic pop }); }); }); @@ -156,7 +171,10 @@ }); it(@"should return lock screen off", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff)); +#pragma clang diagnostic pop }); }); }); @@ -168,7 +186,10 @@ context(@"if we do not set the driver distraction state", ^{ it(@"should return lock screen required", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired)); +#pragma clang diagnostic pop }); }); @@ -178,7 +199,10 @@ }); it(@"should return lock screen optional", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional)); +#pragma clang diagnostic pop }); }); @@ -188,7 +212,10 @@ }); it(@"should return lock screen required", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired)); +#pragma clang diagnostic pop }); }); }); @@ -200,7 +227,10 @@ context(@"if we do not set the driver distraction state", ^{ it(@"should return lock screen required", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired)); +#pragma clang diagnostic pop }); }); @@ -210,7 +240,10 @@ }); it(@"should return lock screen optional", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional)); +#pragma clang diagnostic pop }); }); @@ -220,7 +253,10 @@ }); it(@"should return lock screen required", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired)); +#pragma clang diagnostic pop }); }); }); @@ -253,7 +289,10 @@ }); it(@"should properly return lock screen status", ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(onLockScreenStatusNotification.lockScreenStatus).to(equal(SDLLockScreenStatusOptional)); +#pragma clang diagnostic pop }); }); }); diff --git a/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m b/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m index d520a367e..1ca8a23c7 100644 --- a/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m +++ b/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m @@ -10,17 +10,22 @@ #import #import +#import "SDLBackgroundTaskManager.h" #import "SDLControlFramePayloadRegisterSecondaryTransportNak.h" #import "SDLControlFramePayloadRPCStartServiceAck.h" #import "SDLControlFramePayloadTransportEventUpdate.h" +#import "SDLHMILevel.h" #import "SDLIAPTransport.h" #import "SDLNotificationConstants.h" +#import "SDLRPCNotificationNotification.h" #import "SDLProtocol.h" #import "SDLSecondaryTransportManager.h" #import "SDLStateMachine.h" #import "SDLTCPTransport.h" #import "SDLV2ProtocolMessage.h" #import "SDLFakeSecurityManager.h" +#import "SDLHMILevel.h" +#import "SDLOnHMIStatus.h" /* copied from SDLSecondaryTransportManager.m */ typedef NSNumber SDLServiceTypeBox; @@ -46,6 +51,7 @@ typedef NS_ENUM(NSInteger, SDLSecondaryTransportType) { @interface SDLSecondaryTransportManager () // we need to reach to private properties for the tests +@property (strong, nonatomic) SDLStateMachine *stateMachine; @property (assign, nonatomic) SDLSecondaryTransportType secondaryTransportType; @property (nullable, strong, nonatomic) SDLProtocol *primaryProtocol; @property (nullable, strong, nonatomic) id secondaryTransport; @@ -55,28 +61,46 @@ @interface SDLSecondaryTransportManager () @property (strong, nonatomic) NSMutableDictionary *streamingServiceTransportMap; @property (strong, nonatomic, nullable) NSString *ipAddress; @property (assign, nonatomic) int tcpPort; -@property (assign, nonatomic, getter=isAppReady) BOOL appReady; +@property (strong, nonatomic, nullable) SDLHMILevel currentHMILevel; +@property (strong, nonatomic) SDLBackgroundTaskManager *backgroundTaskManager; + +- (nullable BOOL (^)(void))sdl_backgroundTaskEndedHandler; @end @interface SDLSecondaryTransportManager (ForTest) // Swap sdl_getAppState method to dummy implementation. -// Since the test runs on the main thread, dispatch_sync()-ing to the main thread doesn't work. -+ (void)swapGetAppStateMethod; +// Since the test runs on the main thread, dispatch_sync()-ing to the main thread freezes the tests. ++ (void)swapGetActiveAppStateMethod; ++ (void)swapGetInactiveAppStateMethod; @end @implementation SDLSecondaryTransportManager (ForTest) -- (UIApplicationState)dummyGetAppState { - NSLog(@"Testing: app state for secondary transport manager is always ACTIVE"); + +- (UIApplicationState)dummyGetActiveAppState { + NSLog(@"Testing: app state for secondary transport manager is ACTIVE"); return UIApplicationStateActive; } -+ (void)swapGetAppStateMethod { ++ (void)swapGetActiveAppStateMethod { + SEL selector = NSSelectorFromString(@"sdl_getAppState"); + Method from = class_getInstanceMethod(self, selector); + Method to = class_getInstanceMethod(self, @selector(dummyGetActiveAppState)); + method_exchangeImplementations(from, to); +} + +- (UIApplicationState)dummyGetInactiveAppState { + NSLog(@"Testing: app state for secondary transport manager is INACTIVE"); + return UIApplicationStateBackground; +} + ++ (void)swapGetInactiveAppStateMethod { SEL selector = NSSelectorFromString(@"sdl_getAppState"); Method from = class_getInstanceMethod(self, selector); - Method to = class_getInstanceMethod(self, @selector(dummyGetAppState)); + Method to = class_getInstanceMethod(self, @selector(dummyGetInactiveAppState)); method_exchangeImplementations(from, to); } + @end @interface SDLTCPTransport (ConnectionDisabled) @@ -137,8 +161,17 @@ + (void)swapConnectionMethods { __block id testPrimaryTransport = nil; __block id testStreamingProtocolDelegate = nil; + __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel) = ^(SDLHMILevel hmiLevel) { + SDLOnHMIStatus *hmiStatus = [[SDLOnHMIStatus alloc] init]; + hmiStatus.hmiLevel = hmiLevel; + SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:self rpcNotification:hmiStatus]; + [[NSNotificationCenter defaultCenter] postNotification:notification]; + + [NSThread sleepForTimeInterval:0.3]; + }; + beforeEach(^{ - [SDLSecondaryTransportManager swapGetAppStateMethod]; + [SDLSecondaryTransportManager swapGetActiveAppStateMethod]; [SDLTCPTransport swapConnectionMethods]; [SDLIAPTransport swapConnectionMethods]; @@ -151,8 +184,7 @@ + (void)swapConnectionMethods { afterEach(^{ // it is possible that manager calls methods of SDLStreamingProtocolDelegate while stopping, so accept them // (Don't put OCMVerifyAll() after calling stop.) - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:OCMOCK_ANY toNewProtocol:nil]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:OCMOCK_ANY toNewProtocol:nil]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:OCMOCK_ANY toNewVideoProtocol:nil fromOldAudioProtocol:OCMOCK_ANY toNewAudioProtocol:nil]); dispatch_sync(testStateMachineQueue, ^{ [manager stop]; @@ -161,7 +193,7 @@ + (void)swapConnectionMethods { [SDLIAPTransport swapConnectionMethods]; [SDLTCPTransport swapConnectionMethods]; - [SDLSecondaryTransportManager swapGetAppStateMethod]; + [SDLSecondaryTransportManager swapGetActiveAppStateMethod]; }); @@ -177,7 +209,6 @@ + (void)swapConnectionMethods { expect(manager.tcpPort).to(equal(TCPPortUnspecified)); }); - describe(@"when started", ^{ beforeEach(^{ testPrimaryProtocol = [[SDLProtocol alloc] init]; @@ -193,7 +224,6 @@ + (void)swapConnectionMethods { }); }); - describe(@"In Started state", ^{ beforeEach(^{ // In the tests, we assume primary transport is iAP @@ -236,12 +266,11 @@ + (void)swapConnectionMethods { testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu authToken:nil protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports]; testStartServiceACKMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testStartServiceACKHeader andPayload:testStartServiceACKPayload.data]; - }); it(@"should configure its properties and transition to Configured state", ^{ // in this configuration, only audio service is allowed on primary transport - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:nil fromOldAudioProtocol:nil toNewAudioProtocol:testPrimaryProtocol]); [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data]; [NSThread sleepForTimeInterval:0.1]; @@ -269,8 +298,7 @@ + (void)swapConnectionMethods { it(@"should configure its properties and transition to Configured state", ^{ // in this case, audio and video services start on primary transport (for compatibility) - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:testPrimaryProtocol fromOldAudioProtocol:nil toNewAudioProtocol:testPrimaryProtocol]); [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data]; [NSThread sleepForTimeInterval:0.1]; @@ -298,8 +326,7 @@ + (void)swapConnectionMethods { it(@"should transition to Configured state with transport type disabled", ^{ // Since primary transport is iAP, we cannot use iAP for secondary transport. // So both services run on primary transport. - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:testPrimaryProtocol fromOldAudioProtocol:nil toNewAudioProtocol:testPrimaryProtocol]); [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data]; [NSThread sleepForTimeInterval:0.1]; @@ -323,8 +350,7 @@ + (void)swapConnectionMethods { it(@"should transition to Configured state with transport type disabled", ^{ // both services run on primary transport - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:testPrimaryProtocol fromOldAudioProtocol:nil toNewAudioProtocol:testPrimaryProtocol]); [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data]; [NSThread sleepForTimeInterval:0.1]; @@ -413,7 +439,7 @@ + (void)swapConnectionMethods { testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu authToken:nil protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports]; testStartServiceACKMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testStartServiceACKHeader andPayload:testStartServiceACKPayload.data]; - manager.appReady = YES; + manager.currentHMILevel = SDLHMILevelFull; }); it(@"should configure its properties and immediately transition to Connecting state", ^{ @@ -507,27 +533,23 @@ + (void)swapConnectionMethods { }); }); - context(@"before the security manager is set by register app interface response", ^{ + context(@"before the app context is HMI FULL", ^{ it(@"should stay in state Configured", ^{ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured)); - expect(manager.secondaryProtocol.securityManager).to(beNil()); - expect(manager.isAppReady).to(equal(NO)); + expect(manager.currentHMILevel).to(beNil()); OCMVerifyAll(testStreamingProtocolDelegate); }); }); - context(@"after the security manager is set by register app interface response", ^{ + context(@"app becomes HMI FULL", ^{ beforeEach(^{ - testPrimaryProtocol.securityManager = OCMClassMock([SDLFakeSecurityManager class]); - // By the time this notification is recieved the RAIR should have been sent and the security manager should exist if available - [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidBecomeReady object:nil]; + sendNotificationForHMILevel(SDLHMILevelFull); }); it(@"should transition to Connecting state", ^{ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting)); - expect(manager.secondaryProtocol.securityManager).to(equal(testPrimaryProtocol.securityManager)); - expect(manager.isAppReady).to(equal(YES)); + expect(manager.currentHMILevel).to(equal(SDLHMILevelFull)); OCMVerifyAll(testStreamingProtocolDelegate); }); @@ -561,7 +583,7 @@ + (void)swapConnectionMethods { }); }); - describe(@"and Transport Event Update is received", ^{ + describe(@"and a Transport Event Update has been received", ^{ __block SDLProtocolHeader *testTransportEventUpdateHeader = nil; __block SDLProtocolMessage *testTransportEventUpdateMessage = nil; __block SDLControlFramePayloadTransportEventUpdate *testTransportEventUpdatePayload = nil; @@ -584,24 +606,23 @@ + (void)swapConnectionMethods { }); - context(@"before the security manager is set by register app interface response", ^{ + context(@"before the app context is HMI FULL", ^{ it(@"should stay in Configured state", ^{ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured)); - expect(manager.secondaryProtocol.securityManager).to(beNil()); + expect(manager.currentHMILevel).to(beNil()); + OCMVerifyAll(testStreamingProtocolDelegate); }); }); - context(@"after the security manager is set by register app interface response", ^{ + context(@"app becomes HMI FULL", ^{ beforeEach(^{ - testPrimaryProtocol.securityManager = OCMClassMock([SDLFakeSecurityManager class]); - // By the time this notification is recieved the RAIR should have been sent and the security manager should exist if available - [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidBecomeReady object:nil]; + sendNotificationForHMILevel(SDLHMILevelFull); }); it(@"should transition to Connecting", ^{ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting)); - expect(manager.secondaryProtocol.securityManager).to(equal(testPrimaryProtocol.securityManager)); + expect(manager.currentHMILevel).to(equal(SDLHMILevelFull)); OCMVerifyAll(testStreamingProtocolDelegate); }); @@ -688,8 +709,7 @@ + (void)swapConnectionMethods { }); it(@"should transition to Registered state", ^{ - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:secondaryProtocol]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:secondaryProtocol]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:secondaryProtocol fromOldAudioProtocol:nil toNewAudioProtocol:secondaryProtocol]); [testSecondaryProtocolMock handleBytesFromTransport:testRegisterSecondaryTransportAckMessage.data]; [NSThread sleepForTimeInterval:0.1]; @@ -731,7 +751,6 @@ + (void)swapConnectionMethods { [NSThread sleepForTimeInterval:0.1]; expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting)); - expect(manager.isAppReady).to(equal(NO)); OCMVerifyAll(testStreamingProtocolDelegate); }); }); @@ -776,7 +795,7 @@ + (void)swapConnectionMethods { beforeEach(^{ testTcpIpAddress = @"172.16.12.34"; testTcpPort = 12345; - manager.appReady = YES; + manager.currentHMILevel = SDLHMILevelFull; testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort]; testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data]; @@ -864,7 +883,7 @@ + (void)swapConnectionMethods { manager.secondaryTransportType = SDLTransportSelectionTCP; manager.ipAddress = @"192.168.1.1"; manager.tcpPort = 12345; - manager.appReady = YES; + manager.currentHMILevel = SDLHMILevelFull; testTransportEventUpdateHeader = [SDLProtocolHeader headerForVersion:5]; testTransportEventUpdateHeader.frameType = SDLFrameTypeControl; @@ -900,8 +919,7 @@ + (void)swapConnectionMethods { }); it(@"should transition to Configured state, then transition to Connecting state again", ^{ - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:secondaryProtocol toNewVideoProtocol:nil fromOldAudioProtocol:secondaryProtocol toNewAudioProtocol:nil]); [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data]; [NSThread sleepForTimeInterval:0.1]; @@ -921,8 +939,7 @@ + (void)swapConnectionMethods { }); it(@"should transition to Configured state", ^{ - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:secondaryProtocol toNewVideoProtocol:nil fromOldAudioProtocol:secondaryProtocol toNewAudioProtocol:nil]); [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data]; [NSThread sleepForTimeInterval:0.1]; @@ -943,8 +960,7 @@ + (void)swapConnectionMethods { }); it(@"should transition to Reconnecting state", ^{ - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:secondaryProtocol toNewVideoProtocol:nil fromOldAudioProtocol:secondaryProtocol toNewAudioProtocol:nil]); [testSecondaryProtocolMock onProtocolClosed]; [NSThread sleepForTimeInterval:0.1]; @@ -964,8 +980,7 @@ + (void)swapConnectionMethods { }); it(@"should transition to Stopped state", ^{ - OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]); - OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]); + OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:secondaryProtocol toNewVideoProtocol:nil fromOldAudioProtocol:secondaryProtocol toNewAudioProtocol:nil]); dispatch_sync(testStateMachineQueue, ^{ [manager stop]; @@ -1023,7 +1038,6 @@ + (void)swapConnectionMethods { manager.secondaryTransportType = SDLTransportSelectionTCP; manager.ipAddress = @"192.168.1.1"; manager.tcpPort = 12345; - manager.appReady = YES; testTransportEventUpdateHeader = [SDLProtocolHeader headerForVersion:5]; testTransportEventUpdateHeader.frameType = SDLFrameTypeControl; @@ -1053,6 +1067,7 @@ + (void)swapConnectionMethods { beforeEach(^{ testTcpIpAddress = @"172.16.12.34"; testTcpPort = 12345; + manager.currentHMILevel = SDLHMILevelFull; testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort]; testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data]; @@ -1097,6 +1112,158 @@ + (void)swapConnectionMethods { }); }); }); + + describe(@"app lifecycle state change", ^{ + __block SDLBackgroundTaskManager *mockBackgroundTaskManager = nil; + + beforeEach(^{ + // In the tests, we assume primary transport is iAP + testPrimaryProtocol = [[SDLProtocol alloc] init]; + testPrimaryTransport = [[SDLIAPTransport alloc] init]; + testPrimaryProtocol.transport = testPrimaryTransport; + + dispatch_sync(testStateMachineQueue, ^{ + [manager startWithPrimaryProtocol:testPrimaryProtocol]; + }); + + mockBackgroundTaskManager = OCMPartialMock([[SDLBackgroundTaskManager alloc] initWithBackgroundTaskName:@"com.test.backgroundTask"]); + manager.backgroundTaskManager = mockBackgroundTaskManager; + }); + + context(@"app enters the background", ^{ + beforeEach(^{ + manager.secondaryTransportType = SDLTransportSelectionTCP; + }); + + describe(@"if the secondary transport is connected", ^{ + beforeEach(^{ + [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO]; + + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationWillResignActiveNotification object:nil]; + + // Wait for the notification to propagate + [NSThread sleepForTimeInterval:0.1]; + }); + + it(@"should start a background task and stay connected", ^{ + OCMVerify([mockBackgroundTaskManager startBackgroundTask]); + expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateRegistered)); + }); + }); + + describe(@"if the secondary transport has not yet connected", ^{ + beforeEach(^{ + [manager.stateMachine setToState:SDLSecondaryTransportStateConfigured fromOldState:nil callEnterTransition:NO]; + + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationWillResignActiveNotification object:nil]; + + // Wait for the notification to propagate + [NSThread sleepForTimeInterval:0.1]; + }); + + it(@"should ignore the state change notification", ^{ + OCMReject([mockBackgroundTaskManager startBackgroundTask]); + expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured)); + }); + }); + }); + + context(@"app enters the foreground", ^{ + describe(@"if the secondary transport is still connected", ^{ + beforeEach(^{ + [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO]; + + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil]; + + // Wait for the notification to propagate + [NSThread sleepForTimeInterval:0.1]; + }); + + it(@"should end the background task and stay in the connected state", ^{ + OCMVerify([mockBackgroundTaskManager endBackgroundTask]); + expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateRegistered)); + }); + }); + + describe(@"if the secondary transport is not connected but is configured", ^{ + beforeEach(^{ + manager.ipAddress = @"192.555.23.1"; + manager.tcpPort = 54321; + manager.currentHMILevel = SDLHMILevelFull; + + manager.secondaryTransportType = SDLTransportSelectionTCP; + [manager.stateMachine setToState:SDLSecondaryTransportStateConfigured fromOldState:nil callEnterTransition:NO]; + + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil]; + + // Wait for the notification to propagate + [NSThread sleepForTimeInterval:0.1]; + }); + + it(@"should end the background task and try to restart the TCP transport", ^{ + OCMVerify([mockBackgroundTaskManager endBackgroundTask]); + expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting)); + }); + }); + + describe(@"if the secondary transport not connected and is not configured", ^{ + beforeEach(^{ + [manager.stateMachine setToState:SDLSecondaryTransportStateConnecting fromOldState:nil callEnterTransition:NO]; + + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil]; + + // Wait for the notification to propagate + [NSThread sleepForTimeInterval:0.1]; + }); + + it(@"should ignore the state change notification", ^{ + OCMReject([mockBackgroundTaskManager endBackgroundTask]); + expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting)); + }); + }); + }); + + describe(@"When the background task expires", ^{ + context(@"If the app is still in the background", ^{ + beforeEach(^{ + [SDLSecondaryTransportManager swapGetInactiveAppStateMethod]; + }); + + it(@"should stop the TCP transport if the app is still in the background and perform cleanup before ending the background task", ^{ + [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO]; + + BOOL waitForCleanupToFinish = manager.sdl_backgroundTaskEndedHandler(); + + expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured)); + expect(waitForCleanupToFinish).to(beTrue()); + }); + + it(@"should ignore the notification if the manager has stopped before the background task ended and immediately end the background task", ^{ + [manager.stateMachine setToState:SDLSecondaryTransportStateStopped fromOldState:nil callEnterTransition:NO]; + + BOOL waitForCleanupToFinish = manager.sdl_backgroundTaskEndedHandler(); + + expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped)); + expect(waitForCleanupToFinish).to(beFalse()); + }); + + afterEach(^{ + [SDLSecondaryTransportManager swapGetInactiveAppStateMethod]; + }); + }); + + context(@"If the app is has entered the foreground", ^{ + it(@"should ignore the notification if the app has returned to the foreground and immediately end the background task", ^{ + [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO]; + + BOOL waitForCleanupToFinish = manager.sdl_backgroundTaskEndedHandler(); + + expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateRegistered)); + expect(waitForCleanupToFinish).to(beFalse()); + }); + }); + }); + }); }); QuickSpecEnd diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m index 0761cbed3..d6aaf4036 100644 --- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m @@ -14,9 +14,12 @@ describe(@"Individual Enum Value Tests", ^ { it(@"Should match internal values", ^ { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(SDLLockScreenStatusOff).to(equal(@"OFF")); expect(SDLLockScreenStatusOptional).to(equal(@"OPTIONAL")); expect(SDLLockScreenStatusRequired).to(equal(@"REQUIRED")); +#pragma clang diagnostic pop }); }); diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m index 9078bbf16..d89f62f5b 100644 --- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m @@ -16,7 +16,10 @@ describe(@"Getter/Setter Tests", ^ { it(@"Should set and get correctly", ^ { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnEncodedSyncPData* testNotification = [[SDLOnEncodedSyncPData alloc] init]; +#pragma clang diagnostic pop testNotification.data = [@[@"0"] mutableCopy]; testNotification.URL = @"www.zombo.com"; @@ -28,12 +31,16 @@ }); it(@"Should get correctly when initialized", ^ { - NSMutableDictionary *dict = [@{SDLRPCParameterNameNotification: - @{SDLRPCParameterNameParameters: - @{SDLRPCParameterNameData:[@[@"0"] mutableCopy], - SDLRPCParameterNameURLUppercase:@"www.zombo.com", - SDLRPCParameterNameTimeoutCapitalized:@564}, - SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnEncodedSyncPData}} mutableCopy]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSDictionary *dict = @{SDLRPCParameterNameNotification: + @{SDLRPCParameterNameParameters: + @{SDLRPCParameterNameData:@[@"0"], + SDLRPCParameterNameURLUppercase:@"www.zombo.com", + SDLRPCParameterNameTimeoutCapitalized:@564}, + SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnEncodedSyncPData}}; +#pragma clang diagnostic pop + #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnEncodedSyncPData* testNotification = [[SDLOnEncodedSyncPData alloc] initWithDictionary:dict]; @@ -45,7 +52,10 @@ }); it(@"Should return nil if not set", ^ { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnEncodedSyncPData* testNotification = [[SDLOnEncodedSyncPData alloc] init]; +#pragma clang diagnostic pop expect(testNotification.data).to(beNil()); expect(testNotification.URL).to(beNil()); diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m index 61b1165d3..918a34667 100644 --- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m @@ -19,37 +19,55 @@ QuickSpecBegin(SDLOnHMIStatusSpec) describe(@"Getter/Setter Tests", ^ { + __block SDLHMILevel testLevel = nil; + __block SDLSystemContext testContext = nil; + __block SDLAudioStreamingState testAudioState = nil; + __block SDLVideoStreamingState testVideoState = nil; + __block NSNumber *testWindowID = nil; + + beforeEach(^{ + testLevel = SDLHMILevelFull; + testContext = SDLSystemContextAlert; + testAudioState = SDLAudioStreamingStateAttenuated; + testVideoState = SDLVideoStreamingStateStreamable; + testWindowID = @0; + }); + it(@"Should set and get correctly", ^ { SDLOnHMIStatus* testNotification = [[SDLOnHMIStatus alloc] init]; - testNotification.hmiLevel = SDLHMILevelLimited; - testNotification.audioStreamingState = SDLAudioStreamingStateAttenuated; - testNotification.systemContext = SDLSystemContextHMIObscured; - testNotification.videoStreamingState = SDLVideoStreamingStateStreamable; + testNotification.hmiLevel = testLevel; + testNotification.audioStreamingState = testAudioState; + testNotification.systemContext = testContext; + testNotification.videoStreamingState = testVideoState; + testNotification.windowID = testWindowID; - expect(testNotification.hmiLevel).to(equal(SDLHMILevelLimited)); - expect(testNotification.audioStreamingState).to(equal(SDLAudioStreamingStateAttenuated)); - expect(testNotification.systemContext).to(equal(SDLSystemContextHMIObscured)); - expect(testNotification.videoStreamingState).to(equal(SDLVideoStreamingStateStreamable)); + expect(testNotification.hmiLevel).to(equal(testLevel)); + expect(testNotification.audioStreamingState).to(equal(testAudioState)); + expect(testNotification.systemContext).to(equal(testContext)); + expect(testNotification.videoStreamingState).to(equal(testVideoState)); + expect(testNotification.windowID).to(equal(testWindowID)); }); it(@"Should get correctly when initialized", ^ { - NSMutableDictionary* dict = [@{SDLRPCParameterNameNotification: - @{SDLRPCParameterNameParameters: - @{SDLRPCParameterNameHMILevel: SDLHMILevelLimited, - SDLRPCParameterNameAudioStreamingState: SDLAudioStreamingStateAttenuated, - SDLRPCParameterNameSystemContext: SDLSystemContextHMIObscured, - SDLRPCParameterNameVideoStreamingState: SDLVideoStreamingStateStreamable}, - SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnHMIStatus}} mutableCopy]; + NSDictionary* dict = @{SDLRPCParameterNameNotification: + @{SDLRPCParameterNameParameters: + @{SDLRPCParameterNameHMILevel: testLevel, + SDLRPCParameterNameAudioStreamingState: testAudioState, + SDLRPCParameterNameSystemContext: testContext, + SDLRPCParameterNameVideoStreamingState: testVideoState, + SDLRPCParameterNameWindowId: testWindowID}, + SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnHMIStatus}}; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnHMIStatus* testNotification = [[SDLOnHMIStatus alloc] initWithDictionary:dict]; #pragma clang diagnostic pop - expect(testNotification.hmiLevel).to(equal(SDLHMILevelLimited)); - expect(testNotification.audioStreamingState).to(equal(SDLAudioStreamingStateAttenuated)); - expect(testNotification.systemContext).to(equal(SDLSystemContextHMIObscured)); - expect(testNotification.videoStreamingState).to(equal(SDLVideoStreamingStateStreamable)); + expect(testNotification.hmiLevel).to(equal(testLevel)); + expect(testNotification.audioStreamingState).to(equal(testAudioState)); + expect(testNotification.systemContext).to(equal(testContext)); + expect(testNotification.videoStreamingState).to(equal(testVideoState)); + expect(testNotification.windowID).to(equal(testWindowID)); }); it(@"Should return nil if not set", ^ { @@ -59,6 +77,16 @@ expect(testNotification.audioStreamingState).to(beNil()); expect(testNotification.systemContext).to(beNil()); expect(testNotification.videoStreamingState).to(beNil()); + expect(testNotification.windowID).to(beNil()); + }); + + it(@"should initialize properly with initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:", ^{ + SDLOnHMIStatus *testStatus = [[SDLOnHMIStatus alloc] initWithHMILevel:testLevel systemContext:testContext audioStreamingState:testAudioState videoStreamingState:testVideoState windowID:testWindowID]; + expect(testStatus.hmiLevel).to(equal(testLevel)); + expect(testStatus.systemContext).to(equal(testContext)); + expect(testStatus.audioStreamingState).to(equal(testAudioState)); + expect(testStatus.videoStreamingState).to(equal(testVideoState)); + expect(testStatus.windowID).to(equal(testWindowID)); }); }); diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m index 4f4a574ee..da9c091df 100644 --- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m @@ -22,15 +22,20 @@ #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnLockScreenStatus* testNotification = [[SDLOnLockScreenStatus alloc] init]; #pragma clang diagnostic pop - testNotification.driverDistractionStatus = @NO; testNotification.userSelected = @3; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" testNotification.lockScreenStatus = SDLLockScreenStatusRequired; +#pragma clang diagnostic pop testNotification.hmiLevel = SDLHMILevelNone; expect(testNotification.driverDistractionStatus).to(equal(@NO)); expect(testNotification.userSelected).to(equal(@3)); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(testNotification.lockScreenStatus).to(equal(SDLLockScreenStatusRequired)); +#pragma clang diagnostic pop expect(testNotification.hmiLevel).to(equal(SDLHMILevelNone)); }); @@ -39,7 +44,10 @@ @{SDLRPCParameterNameParameters: @{@"driverDistractionStatus":@NO, @"userSelected":@3, +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" @"OnLockScreenStatus":SDLLockScreenStatusRequired, +#pragma clang diagnostic pop @"hmiLevel":SDLHMILevelNone}, SDLRPCParameterNameOperationName:@"OnLockScreenStatus"}} mutableCopy]; #pragma clang diagnostic push @@ -49,7 +57,10 @@ expect(testNotification.driverDistractionStatus).to(equal(@NO)); expect(testNotification.userSelected).to(equal(@3)); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(testNotification.lockScreenStatus).to(equal(SDLLockScreenStatusRequired)); +#pragma clang diagnostic pop expect(testNotification.hmiLevel).to(equal(SDLHMILevelNone)); }); diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m index 197b77fbe..b2bda1f18 100644 --- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m @@ -16,7 +16,10 @@ describe(@"Getter/Setter Tests", ^ { it(@"Should set and get correctly", ^ { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnSyncPData* testNotification = [[SDLOnSyncPData alloc] init]; +#pragma clang diagnostic pop testNotification.URL = @"https://www.youtube.com/watch?v=ygr5AHufBN4"; testNotification.Timeout = @8357; @@ -26,11 +29,15 @@ }); it(@"Should get correctly when initialized", ^ { - NSMutableDictionary *dict = [@{SDLRPCParameterNameNotification: - @{SDLRPCParameterNameParameters: - @{SDLRPCParameterNameURLUppercase:@"https://www.youtube.com/watch?v=ygr5AHufBN4", - SDLRPCParameterNameTimeoutCapitalized:@8357}, - SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnSyncPData}} mutableCopy]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSDictionary *dict = @{SDLRPCParameterNameNotification: + @{SDLRPCParameterNameParameters: + @{SDLRPCParameterNameURLUppercase:@"https://www.youtube.com/watch?v=ygr5AHufBN4", + SDLRPCParameterNameTimeoutCapitalized:@8357}, + SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnSyncPData}}; +#pragma clang diagnostic pop + #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnSyncPData* testNotification = [[SDLOnSyncPData alloc] initWithDictionary:dict]; @@ -41,7 +48,10 @@ }); it(@"Should return nil if not set", ^ { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLOnSyncPData* testNotification = [[SDLOnSyncPData alloc] init]; +#pragma clang diagnostic pop expect(testNotification.URL).to(beNil()); expect(testNotification.Timeout).to(beNil()); diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m index 95d110a1f..5525258b3 100755 --- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m @@ -16,7 +16,10 @@ describe(@"Getter/Setter Tests", ^ { it(@"Should set and get correctly", ^ { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLEncodedSyncPData* testRequest = [[SDLEncodedSyncPData alloc] init]; +#pragma clang diagnostic pop testRequest.data = [@[@"2", @"2", @"2"] mutableCopy]; @@ -24,10 +27,14 @@ }); it(@"Should get correctly when initialized", ^ { - NSMutableDictionary *dict = [@{SDLRPCParameterNameRequest: - @{SDLRPCParameterNameParameters: - @{SDLRPCParameterNameData:[@[@"2", @"2", @"2"] mutableCopy]}, - SDLRPCParameterNameOperationName:SDLRPCFunctionNameEncodedSyncPData}} mutableCopy]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + NSDictionary *dict = @{SDLRPCParameterNameRequest: + @{SDLRPCParameterNameParameters: + @{SDLRPCParameterNameData:@[@"2", @"2", @"2"]}, + SDLRPCParameterNameOperationName:SDLRPCFunctionNameEncodedSyncPData}}; +#pragma clang diagnostic pop + #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLEncodedSyncPData* testRequest = [[SDLEncodedSyncPData alloc] initWithDictionary:dict]; @@ -37,7 +44,10 @@ }); it(@"Should return nil if not set", ^ { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLEncodedSyncPData* testRequest = [[SDLEncodedSyncPData alloc] init]; +#pragma clang diagnostic pop expect(testRequest.data).to(beNil()); }); diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageFieldSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageFieldSpec.m index 26317d657..25d17673b 100644 --- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageFieldSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageFieldSpec.m @@ -17,33 +17,41 @@ QuickSpecBegin(SDLImageFieldSpec) -SDLImageResolution* resolution = [[SDLImageResolution alloc] init]; - describe(@"Getter/Setter Tests", ^ { + __block SDLImageFieldName testName = nil; + __block NSArray *testFileTypes = nil; + __block SDLImageResolution *testResolution = nil; + + beforeEach(^{ + testName = SDLImageFieldNameAppIcon; + testFileTypes = @[SDLFileTypePNG, SDLFileTypeJPEG]; + testResolution = [[SDLImageResolution alloc] initWithWidth:800 height:800]; + }); + it(@"Should set and get correctly", ^ { SDLImageField* testStruct = [[SDLImageField alloc] init]; - testStruct.name = SDLImageFieldNameTurnIcon; - testStruct.imageTypeSupported = [@[SDLFileTypePNG, SDLFileTypeJPEG] copy]; - testStruct.imageResolution = resolution; + testStruct.name = testName; + testStruct.imageTypeSupported = testFileTypes; + testStruct.imageResolution = testResolution; - expect(testStruct.name).to(equal(SDLImageFieldNameTurnIcon)); - expect(testStruct.imageTypeSupported).to(equal([@[SDLFileTypePNG, SDLFileTypeJPEG] copy])); - expect(testStruct.imageResolution).to(equal(resolution)); + expect(testStruct.name).to(equal(testName)); + expect(testStruct.imageTypeSupported).to(equal(testFileTypes)); + expect(testStruct.imageResolution).to(equal(testResolution)); }); it(@"Should get correctly when initialized", ^ { - NSMutableDictionary* dict = [@{SDLRPCParameterNameName:SDLImageFieldNameTurnIcon, - SDLRPCParameterNameImageTypeSupported:[@[SDLFileTypePNG, SDLFileTypeJPEG] copy], - SDLRPCParameterNameImageResolution:resolution} mutableCopy]; + NSDictionary *dict = @{SDLRPCParameterNameName: testName, + SDLRPCParameterNameImageTypeSupported: testFileTypes, + SDLRPCParameterNameImageResolution: testResolution}; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLImageField* testStruct = [[SDLImageField alloc] initWithDictionary:dict]; #pragma clang diagnostic pop - expect(testStruct.name).to(equal(SDLImageFieldNameTurnIcon)); - expect(testStruct.imageTypeSupported).to(equal([@[SDLFileTypePNG, SDLFileTypeJPEG] copy])); - expect(testStruct.imageResolution).to(equal(resolution)); + expect(testStruct.name).to(equal(testName)); + expect(testStruct.imageTypeSupported).to(equal(testFileTypes)); + expect(testStruct.imageResolution).to(equal(testResolution)); }); it(@"Should return nil if not set", ^ { @@ -53,6 +61,14 @@ expect(testStruct.imageTypeSupported).to(beNil()); expect(testStruct.imageResolution).to(beNil()); }); + + it(@"should initialize correctly with initWithName:imageTypeSupported:imageResolution:", ^{ + SDLImageField *testStruct = [[SDLImageField alloc] initWithName:testName imageTypeSupported:testFileTypes imageResolution:testResolution]; + + expect(testStruct.name).to(equal(testName)); + expect(testStruct.imageTypeSupported).to(equal(testFileTypes)); + expect(testStruct.imageResolution).to(equal(testResolution)); + }); }); QuickSpecEnd diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m index fd74e0f38..a29ff574d 100644 --- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m @@ -155,6 +155,32 @@ expect(testStruct.hdRadioEnable).to(equal(@YES)); }); + it(@"Should get correctly when initialized FM radio control capabilities parameters", ^ { + SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initFMWithFrequencyInteger:@101 frequencyFraction:@7 hdChannel:@2]; + + expect(testStruct.frequencyInteger).to(equal(@101)); + expect(testStruct.frequencyFraction).to(equal(@7)); + expect(testStruct.band).to(equal(SDLRadioBandFM)); + expect(testStruct.hdChannel).to(equal(@2)); + }); + + it(@"Should get correctly when initialized AM radio control capabilities parameters", ^ { + SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initAMWithFrequencyInteger:@101 hdChannel:@2]; + + expect(testStruct.frequencyInteger).to(equal(@101)); + expect(testStruct.band).to(equal(SDLRadioBandAM)); + expect(testStruct.hdChannel).to(equal(@2)); + }); + + it(@"Should get correctly when initialized XM radio control capabilities parameters", ^ { + SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initXMWithFrequencyInteger:@101]; + + expect(testStruct.frequencyInteger).to(equal(@101)); + expect(testStruct.band).to(equal(SDLRadioBandXM)); + }); + + + }); QuickSpecEnd diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m index 330d53a3f..fcde49e1e 100644 --- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m @@ -17,34 +17,39 @@ QuickSpecBegin(SDLTextFieldSpec) describe(@"Getter/Setter Tests", ^ { + __block SDLTextFieldName testName = SDLTextFieldNameETA; + __block SDLCharacterSet testCharacterSet = SDLCharacterSetCID1; + __block NSUInteger testWidth = 100; + __block NSUInteger testRows = 4; + it(@"Should set and get correctly", ^ { SDLTextField* testStruct = [[SDLTextField alloc] init]; - testStruct.name = SDLTextFieldNameTertiaryText; - testStruct.characterSet = SDLCharacterSetType5; - testStruct.width = @111; - testStruct.rows = @4; + testStruct.name = testName; + testStruct.characterSet = testCharacterSet; + testStruct.width = @(testWidth); + testStruct.rows = @(testRows); - expect(testStruct.name).to(equal(SDLTextFieldNameTertiaryText)); - expect(testStruct.characterSet).to(equal(SDLCharacterSetType5)); - expect(testStruct.width).to(equal(@111)); - expect(testStruct.rows).to(equal(@4)); + expect(testStruct.name).to(equal(testName)); + expect(testStruct.characterSet).to(equal(testCharacterSet)); + expect(testStruct.width).to(equal(@(testWidth))); + expect(testStruct.rows).to(equal(@(testRows))); }); it(@"Should get correctly when initialized", ^ { - NSMutableDictionary* dict = [@{SDLRPCParameterNameName:SDLTextFieldNameTertiaryText, - SDLRPCParameterNameCharacterSet:SDLCharacterSetType5, - SDLRPCParameterNameWidth:@111, - SDLRPCParameterNameRows:@4} mutableCopy]; + NSDictionary *dict = @{SDLRPCParameterNameName:testName, + SDLRPCParameterNameCharacterSet:testCharacterSet, + SDLRPCParameterNameWidth:@(testWidth), + SDLRPCParameterNameRows:@(testRows)}; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" SDLTextField* testStruct = [[SDLTextField alloc] initWithDictionary:dict]; #pragma clang diagnostic pop - expect(testStruct.name).to(equal(SDLTextFieldNameTertiaryText)); - expect(testStruct.characterSet).to(equal(SDLCharacterSetType5)); - expect(testStruct.width).to(equal(@111)); - expect(testStruct.rows).to(equal(@4)); + expect(testStruct.name).to(equal(testName)); + expect(testStruct.characterSet).to(equal(testCharacterSet)); + expect(testStruct.width).to(equal(@(testWidth))); + expect(testStruct.rows).to(equal(@(testRows))); }); it(@"Should return nil if not set", ^ { @@ -55,6 +60,15 @@ expect(testStruct.width).to(beNil()); expect(testStruct.rows).to(beNil()); }); + + it(@"should initialize correctly with initWithName:characterSet:width:rows:", ^{ + SDLTextField *testStruct = [[SDLTextField alloc] initWithName:testName characterSet:testCharacterSet width:testWidth rows:testRows]; + + expect(testStruct.name).to(equal(testName)); + expect(testStruct.characterSet).to(equal(testCharacterSet)); + expect(testStruct.width).to(equal(@(testWidth))); + expect(testStruct.rows).to(equal(@(testRows))); + }); }); QuickSpecEnd diff --git a/SmartDeviceLinkTests/RPCSpecs/SuperclassSpecs/SDLRPCStructSpec.m b/SmartDeviceLinkTests/RPCSpecs/SuperclassSpecs/SDLRPCStructSpec.m index 8dd6eaf99..1b2c4d348 100644 --- a/SmartDeviceLinkTests/RPCSpecs/SuperclassSpecs/SDLRPCStructSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/SuperclassSpecs/SDLRPCStructSpec.m @@ -14,13 +14,10 @@ describe(@"SerializeAsDictionary Tests", ^ { it(@"Should serialize correctly", ^ { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" NSMutableDictionary *dict = [@{@"Key":@"Value", @"Answer":@42, @"Struct":[[SDLRPCStruct alloc] initWithDictionary:[@{@"Array":@[@1, @1, @1, @1]} mutableCopy]]} mutableCopy]; SDLRPCStruct* testStruct = [[SDLRPCStruct alloc] initWithDictionary:dict]; expect([testStruct serializeAsDictionary:2]).to(equal([@{@"Key":@"Value", @"Answer":@42, @"Struct":@{@"Array":@[@1, @1, @1, @1]}} mutableCopy])); -#pragma clang diagnostic pop }); }); diff --git a/SmartDeviceLinkTests/SDLCacheFileManagerSpec.m b/SmartDeviceLinkTests/SDLCacheFileManagerSpec.m new file mode 100644 index 000000000..05832a953 --- /dev/null +++ b/SmartDeviceLinkTests/SDLCacheFileManagerSpec.m @@ -0,0 +1,317 @@ +// +// SDLCacheFileManagerSpec.m +// SmartDeviceLinkTests +// +// Created by James Lapinski on 3/23/20. +// Copyright © 2020 smartdevicelink. All rights reserved. +// + +#import +#import +#import + +#import "SDLCacheFileManager.h" +#import "SDLIconArchiveFile.h" +#import "SDLOnSystemRequest.h" + +@interface SDLCacheFileManager () + ++ (nullable NSString *)sdl_writeImage:(UIImage *)icon toFilePath:(NSString *)filePath imageURL:(NSString *)urlString; +- (void)sdl_downloadIconFromRequestURL:(NSString *)requestURL withCompletionHandler:(ImageRetrievalCompletionHandler)completion; + +@property (weak, nonatomic, nullable) NSURLSession *urlSession; +@property (strong, nonatomic, nullable) NSURLSessionDataTask *dataTask; +@property (strong, nonatomic) NSFileManager *fileManager; + +@end + +QuickSpecBegin(SDLCacheFileManagerSpec) + +describe(@"a cache file manager", ^{ + __block SDLCacheFileManager *testManager = nil; + __block id testManagerMock = nil; + __block NSFileManager *mockFileManager = nil; + __block id mockUnarchiver = nil; + __block id mockUIImage = nil; + __block id mockURLSession = nil; + __block id mockArchiver = nil; + __block SDLOnSystemRequest *testRequest = nil; + __block NSString *testURL = nil; + __block SDLOnSystemRequest *expiredTestRequest = nil; + __block NSString *testFilePath = nil; + __block NSString *expiredTestURL = nil; + __block UIImage *testImage = nil; + __block SDLIconArchiveFile *testArchiveFile = nil; + __block SDLLockScreenIconCache *testIconCache = nil; + __block SDLLockScreenIconCache *testExpiredIconCache = nil; + __block NSArray *testArchiveFileLockScreenCacheArray = nil; + + beforeEach(^{ + testManager = [[SDLCacheFileManager alloc] init]; + testManagerMock = OCMPartialMock(testManager); + + testFilePath = [[NSBundle bundleForClass:self.class] pathForResource:@"testImagePNG" ofType:@"png"]; + testImage = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil]; + + mockFileManager = OCMStrictClassMock([NSFileManager class]); + testManager.fileManager = mockFileManager; + mockUnarchiver = OCMClassMock([NSKeyedUnarchiver class]); + + mockUIImage = OCMClassMock([UIImage class]); + mockURLSession = OCMClassMock([NSURLSession class]); + + mockArchiver = OCMClassMock([NSKeyedArchiver class]); + }); + + it(@"should initialize properties", ^{ + expect(testManager.urlSession).toNot(beNil()); + expect(testManager.fileManager).toNot(beNil()); + }); + + describe(@"request with existing icon", ^{ + beforeEach(^{ + testURL = @"testURL"; + testRequest = [[SDLOnSystemRequest alloc] init]; + testRequest.url = testURL; + testIconCache = [[SDLLockScreenIconCache alloc] initWithIconUrl:testURL iconFilePath:testFilePath]; + + expiredTestURL = @"expiredTestURL"; + expiredTestRequest = [[SDLOnSystemRequest alloc] init]; + expiredTestRequest.url = expiredTestURL; + testExpiredIconCache = [[SDLLockScreenIconCache alloc] initWithIconUrl:expiredTestURL iconFilePath:testFilePath]; + testExpiredIconCache.lastModifiedDate = [[NSDate date] dateByAddingTimeInterval:-31*24*60*60]; + + testArchiveFileLockScreenCacheArray = @[testIconCache,testExpiredIconCache]; + + testArchiveFile = [[SDLIconArchiveFile alloc] init]; + testArchiveFile.lockScreenIconCaches = testArchiveFileLockScreenCacheArray; + + OCMStub(ClassMethod([mockUnarchiver unarchiveObjectWithFile:[OCMArg any]])).andReturn(testArchiveFile); + OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(YES); + }); + + context(@"icon is not expired", ^{ + __block UIImage *resultImage = nil; + __block NSError *resultError = nil; + + context(@"failure to retrieve icon", ^{ + beforeEach(^{ + OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(YES); + OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath); + OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]); + OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]); + OCMStub(ClassMethod([mockUIImage imageWithContentsOfFile:[OCMArg isNotNil]])).andReturn(nil); + [testManager retrieveImageForRequest:testRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"should download and return image with no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + + context(@"retrieve icon success", ^{ + beforeEach(^{ + OCMStub(ClassMethod([mockUIImage imageWithContentsOfFile:[OCMArg isNotNil]])).andReturn(testImage); + [testManager retrieveImageForRequest:testRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"should return retrieved image and no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + }); + + context(@"request with expired icon", ^{ + __block UIImage *resultImage = nil; + __block NSError *resultError = nil; + + context(@"image download succeeds", ^{ + context(@"Failed to update archive object", ^{ + beforeEach(^{ + OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(NO); + OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath); + OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]); + + [testManager retrieveImageForRequest:expiredTestRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"it should return downloaded image and no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + + context(@"write image to file path succeeds", ^{ + beforeEach(^{ + OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(YES); + OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath); + OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]); + + [testManager retrieveImageForRequest:expiredTestRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"it should return downloaded image and no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + + context(@"write image to file path fails", ^{ + beforeEach(^{ + OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(nil); + OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]); + + [testManager retrieveImageForRequest:expiredTestRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"it should return downloaded image and no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + }); + + context(@"image download fails", ^{ + __block NSError *imageDownloadError = [NSError errorWithDomain:@"test" code:0 userInfo:nil]; + + beforeEach(^{ + OCMStub([mockURLSession dataTaskWithURL:[OCMArg isNotNil] completionHandler:([OCMArg invokeBlockWithArgs:[NSNull null], [NSNull null], imageDownloadError, nil])]); + OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:[NSNull null], imageDownloadError, nil])]); + + [testManager retrieveImageForRequest:expiredTestRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"it should return error and no image", ^{ + expect(resultImage).to(beNil()); + expect(resultError).toNot(beNil()); + }); + }); + }); + }); + + describe(@"Receiving a new icon", ^{ + __block SDLOnSystemRequest *newIconRequest = nil; + __block NSString *newIconURL = nil; + + beforeEach(^{ + newIconURL = @"newURL"; + newIconRequest = [[SDLOnSystemRequest alloc] init]; + newIconRequest.url = newIconURL; + }); + + context(@"When no directory is present", ^{ + __block UIImage *resultImage = nil; + __block NSError *resultError = nil; + + beforeEach(^{ + OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(YES); + OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath); + OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]); + OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]); + OCMStub([mockFileManager createDirectoryAtPath:[OCMArg isNotNil] withIntermediateDirectories:[OCMArg any] attributes:[OCMArg any] error:[OCMArg anyObjectRef]]).andReturn(YES); + OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(NO); + + [testManager retrieveImageForRequest:newIconRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"it should return downloaded image and no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + + context(@"When directory is present", ^{ + __block UIImage *resultImage = nil; + __block NSError *resultError = nil; + + beforeEach(^{ + OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(YES); + OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath); + OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]); + + testArchiveFile = [[SDLIconArchiveFile alloc] init]; + testArchiveFile.lockScreenIconCaches = testArchiveFileLockScreenCacheArray; + }); + + context(@"no archive file present", ^{ + beforeEach(^{ + OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(nil); + OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(YES); + + [testManager retrieveImageForRequest:newIconRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"it should return downloaded image and no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + + context(@"archive file present", ^{ + context(@"remove item success", ^{ + beforeEach(^{ + OCMStub([mockFileManager removeItemAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(YES); + OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(@[@"iconArchiveFile"]); + OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(YES); + + [testManager retrieveImageForRequest:newIconRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"it should return downloaded image and no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + + context(@"remove item fails", ^{ + beforeEach(^{ + OCMStub([mockFileManager removeItemAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(NO); + OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(@[@"iconArchiveFile"]); + OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(YES); + + [testManager retrieveImageForRequest:newIconRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) { + resultImage = image; + resultError = error; + }]; + }); + + it(@"it should return downloaded image and no error", ^{ + expect(resultImage).to(equal(testImage)); + expect(resultError).to(beNil()); + }); + }); + }); + }); + }); +}); + +QuickSpecEnd diff --git a/SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m b/SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m index f79085706..cc662f47c 100644 --- a/SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m +++ b/SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m @@ -18,6 +18,12 @@ #import "SDLRTPH264Packetizer.h" #import "SDLVideoStreamingProtocol.h" +@interface SDLH264VideoEncoder () +@property (assign, nonatomic) NSUInteger currentFrameNumber; +@property (assign, nonatomic) double timestampOffset; +@property (assign, nonatomic, nullable) VTCompressionSessionRef compressionSession; +@end + QuickSpecBegin(SDLH264VideoEncoderSpec) describe(@"a video encoder", ^{ @@ -55,9 +61,11 @@ beforeEach(^{ [testVideoEncoder stop]; }); - - it(@"should have a nil pixel buffer pool", ^{ - expect(@(testVideoEncoder.pixelBufferPool == NULL)).to(equal(@YES)); + + it(@"should reset the saved properties", ^{ + expect(testVideoEncoder.currentFrameNumber).to(equal(0)); + expect(testVideoEncoder.timestampOffset).to(equal(0.0)); + expect((id)testVideoEncoder.compressionSession).to(beNil()); }); }); }); diff --git a/SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m b/SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m index e68db2e7d..604482751 100644 --- a/SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m +++ b/SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m @@ -29,7 +29,10 @@ expect(SDLRPCFunctionNameDeleteSubMenu).to(equal(@"DeleteSubMenu")); expect(SDLRPCFunctionNameDiagnosticMessage).to(equal(@"DiagnosticMessage")); expect(SDLRPCFunctionNameDialNumber).to(equal(@"DialNumber")); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(SDLRPCFunctionNameEncodedSyncPData).to(equal(@"EncodedSyncPData")); +#pragma clang diagnostic pop expect(SDLRPCFunctionNameEndAudioPassThru).to(equal(@"EndAudioPassThru")); expect(SDLRPCFunctionNameGenericResponse).to(equal(@"GenericResponse")); expect(SDLRPCFunctionNameGetAppServiceData).to(equal(@"GetAppServiceData")); @@ -47,7 +50,10 @@ expect(SDLRPCFunctionNameOnButtonPress).to(equal(@"OnButtonPress")); expect(SDLRPCFunctionNameOnCommand).to(equal(@"OnCommand")); expect(SDLRPCFunctionNameOnDriverDistraction).to(equal(@"OnDriverDistraction")); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(SDLRPCFunctionNameOnEncodedSyncPData).to(equal(@"OnEncodedSyncPData")); +#pragma clang diagnostic pop expect(SDLRPCFunctionNameOnHashChange).to(equal(@"OnHashChange")); expect(SDLRPCFunctionNameOnHMIStatus).to(equal(@"OnHMIStatus")); expect(SDLRPCFunctionNameOnInteriorVehicleData).to(equal(@"OnInteriorVehicleData")); @@ -55,7 +61,10 @@ expect(SDLRPCFunctionNameOnLanguageChange).to(equal(@"OnLanguageChange")); expect(SDLRPCFunctionNameOnPermissionsChange).to(equal(@"OnPermissionsChange")); expect(SDLRPCFunctionNameOnRCStatus).to(equal(@"OnRCStatus")); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(SDLRPCFunctionNameOnSyncPData).to(equal(@"OnSyncPData")); +#pragma clang diagnostic pop expect(SDLRPCFunctionNameOnSystemCapabilityUpdated).to(equal(@"OnSystemCapabilityUpdated")); expect(SDLRPCFunctionNameOnSystemRequest).to(equal(@"OnSystemRequest")); expect(SDLRPCFunctionNameOnTBTClientState).to(equal(@"OnTBTClientState")); @@ -86,7 +95,10 @@ expect(SDLRPCFunctionNameSubscribeButton).to(equal(@"SubscribeButton")); expect(SDLRPCFunctionNameSubscribeVehicleData).to(equal(@"SubscribeVehicleData")); expect(SDLRPCFunctionNameSubscribeWayPoints).to(equal(@"SubscribeWayPoints")); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" expect(SDLRPCFunctionNameSyncPData).to(equal(@"SyncPData")); +#pragma clang diagnostic pop expect(SDLRPCFunctionNameSystemRequest).to(equal(@"SystemRequest")); expect(SDLRPCFunctionNameUnpublishAppService).to(equal(@"UnpublishAppService")); expect(SDLRPCFunctionNameUnregisterAppInterface).to(equal(@"UnregisterAppInterface")); diff --git a/SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m b/SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m index 404fa1f05..2eaddbffb 100644 --- a/SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m +++ b/SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m @@ -4,13 +4,405 @@ // #import #import +#import +#import "SDLConfiguration.h" +#import "SDLProtocol.h" +#import "SDLSecondaryTransportManager.h" +#import "SDLStreamingAudioLifecycleManager.h" #import "SDLStreamingMediaManager.h" +#import "SDLStreamingVideoLifecycleManager.h" +#import "SDLStreamingVideoScaleManager.h" +#import "SDLSystemCapabilityManager.h" +#import "TestConnectionManager.h" + +@interface SDLStreamingMediaManager() + +@property (strong, nonatomic) SDLStreamingAudioLifecycleManager *audioLifecycleManager; +@property (strong, nonatomic) SDLStreamingVideoLifecycleManager *videoLifecycleManager; +@property (assign, nonatomic) BOOL audioStarted; +@property (assign, nonatomic) BOOL videoStarted; +@property (strong, nonatomic, nullable) SDLProtocol *audioProtocol; +@property (strong, nonatomic, nullable) SDLProtocol *videoProtocol; + +@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager; + +- (void)startSecondaryTransportWithProtocol:(SDLProtocol *)protocol; +- (void)didUpdateFromOldVideoProtocol:(nullable SDLProtocol *)oldVideoProtocol toNewVideoProtocol:(nullable SDLProtocol *)newVideoProtocol fromOldAudioProtocol:(nullable SDLProtocol *)oldAudioProtocol toNewAudioProtocol:(nullable SDLProtocol *)newAudioProtocol; + +@end QuickSpecBegin(SDLStreamingMediaManagerSpec) describe(@"the streaming media manager", ^{ + __block SDLStreamingMediaManager *testStreamingMediaManager = nil; + __block TestConnectionManager *testConnectionManager = nil; + __block SDLConfiguration *testConfiguration = nil; + __block SDLSecondaryTransportManager *mockSecondaryTransportManager = nil; + __block SDLStreamingVideoLifecycleManager *mockVideoLifecycleManager = nil; + __block SDLStreamingAudioLifecycleManager *mockAudioLifecycleManager = nil; + __block SDLSystemCapabilityManager *mockSystemCapabilityManager = nil; + + beforeEach(^{ + mockSystemCapabilityManager = OCMClassMock([SDLSystemCapabilityManager class]); + testConnectionManager = [[TestConnectionManager alloc] init]; + testStreamingMediaManager = [[SDLStreamingMediaManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfiguration systemCapabilityManager:mockSystemCapabilityManager]; + + mockVideoLifecycleManager = OCMClassMock([SDLStreamingVideoLifecycleManager class]); + testStreamingMediaManager.videoLifecycleManager = mockVideoLifecycleManager; + + mockAudioLifecycleManager = OCMClassMock([SDLStreamingAudioLifecycleManager class]); + testStreamingMediaManager.audioLifecycleManager = mockAudioLifecycleManager; + + mockSecondaryTransportManager = OCMClassMock([SDLSecondaryTransportManager class]); + testStreamingMediaManager.secondaryTransportManager = mockSecondaryTransportManager; + }); + + context(@"when stop is called", ^{ + it(@"should stop both the audio and video stream managers", ^{ + [testStreamingMediaManager stop]; + OCMVerify([mockAudioLifecycleManager stop]); + OCMVerify([mockVideoLifecycleManager stop]); + expect(testStreamingMediaManager.audioStarted).to(beFalse()); + expect(testStreamingMediaManager.videoStarted).to(beFalse()); + }); + }); + + describe(@"when stop video is called", ^{ + beforeEach(^{ + testStreamingMediaManager.audioStarted = YES; + testStreamingMediaManager.videoStarted = YES; + }); + + it(@"should only stop the video stream manager", ^{ + [testStreamingMediaManager stopVideo]; + OCMVerify([mockVideoLifecycleManager stop]); + expect(testStreamingMediaManager.videoStarted).to(beFalse()); + + OCMReject([mockAudioLifecycleManager stop]); + expect(testStreamingMediaManager.audioStarted).to(beTrue()); + }); + }); + + describe(@"when stop audio is called", ^{ + beforeEach(^{ + testStreamingMediaManager.audioStarted = YES; + testStreamingMediaManager.videoStarted = YES; + + [testStreamingMediaManager stopAudio]; + }); + + it(@"should only stop the audio stream manager", ^{ + OCMVerify([mockAudioLifecycleManager stop]); + expect(testStreamingMediaManager.audioStarted).to(beFalse()); + + OCMReject([mockVideoLifecycleManager stop]); + expect(testStreamingMediaManager.videoStarted).to(beTrue()); + }); + }); + + describe(@"when sending audio data", ^{ + __block NSData *testAudioData = nil; + + beforeEach(^{ + testAudioData = [[NSData alloc] initWithBase64EncodedString:@"test data" options:kNilOptions]; + [testStreamingMediaManager sendAudioData:testAudioData]; + }); + + it(@"should pass the audio data to the audio streaming manager", ^{ + OCMVerify([mockAudioLifecycleManager sendAudioData:testAudioData]); + }); + }); + + describe(@"when sending video data", ^{ + __block CVPixelBufferRef testPixelBuffer = nil; + + beforeEach(^{ + CVPixelBufferCreate(kCFAllocatorDefault, 100, 50, kCVPixelFormatType_14Bayer_GRBG, nil, &testPixelBuffer); + }); + + context(@"without a timestamp", ^{ + beforeEach(^{ + [testStreamingMediaManager sendVideoData:testPixelBuffer]; + }); + + it(@"should pass the video data to the video streaming manager", ^{ + OCMVerify([mockVideoLifecycleManager sendVideoData:testPixelBuffer]); + }); + }); + + context(@"with a timestamp", ^{ + __block CMTime testTimestamp = CMTimeMake(1, NSEC_PER_SEC); + + beforeEach(^{ + [testStreamingMediaManager sendVideoData:testPixelBuffer presentationTimestamp:testTimestamp]; + }); + + it(@"should pass the video data to the video streaming manager", ^{ + OCMVerify([mockVideoLifecycleManager sendVideoData:testPixelBuffer presentationTimestamp:testTimestamp]); + }); + }); + }); + + describe(@"getters", ^{ + it(@"should return the audio lifecycle manager's properties correctly", ^{ + [testStreamingMediaManager audioManager]; + OCMVerify([mockAudioLifecycleManager audioTranscodingManager]); + + [testStreamingMediaManager isAudioConnected]; + OCMVerify([mockAudioLifecycleManager isAudioConnected]); + + [testStreamingMediaManager isAudioEncrypted]; + OCMVerify([mockAudioLifecycleManager isAudioEncrypted]); + }); + + it(@"should return the video lifecycle manager's properties correctly", ^{ + [testStreamingMediaManager touchManager]; + OCMVerify([mockVideoLifecycleManager touchManager]); + + [testStreamingMediaManager rootViewController]; + OCMVerify([mockVideoLifecycleManager rootViewController]); + + [testStreamingMediaManager focusableItemManager]; + OCMVerify([mockVideoLifecycleManager focusableItemManager]); + + [testStreamingMediaManager isVideoConnected]; + OCMVerify([mockVideoLifecycleManager isVideoConnected]); + + [testStreamingMediaManager isVideoEncrypted]; + OCMVerify([mockVideoLifecycleManager isVideoEncrypted]); + + [testStreamingMediaManager isVideoStreamingPaused]; + OCMVerify([mockVideoLifecycleManager isVideoStreamingPaused]); + + [testStreamingMediaManager screenSize]; + OCMVerify([mockVideoLifecycleManager.videoScaleManager displayViewportResolution]); + + [testStreamingMediaManager videoFormat]; + OCMVerify([mockVideoLifecycleManager videoFormat]); + + [testStreamingMediaManager supportedFormats]; + OCMVerify([mockVideoLifecycleManager supportedFormats]); + + [testStreamingMediaManager pixelBufferPool]; + OCMVerify([mockVideoLifecycleManager pixelBufferPool]); + + [testStreamingMediaManager requestedEncryptionType]; + OCMVerify([mockVideoLifecycleManager requestedEncryptionType]); + + [testStreamingMediaManager showVideoBackgroundDisplay]; + OCMVerify([mockVideoLifecycleManager showVideoBackgroundDisplay]); + + [testStreamingMediaManager isStreamingSupported]; + OCMVerify([mockVideoLifecycleManager isStreamingSupported]); + }); + }); + + describe(@"setters", ^{ + it(@"should set the encryption flag on both the audio and video managers", ^{ + SDLStreamingEncryptionFlag testEncryptionFlag = SDLStreamingEncryptionFlagNone; + [testStreamingMediaManager setRequestedEncryptionType:testEncryptionFlag]; + + OCMVerify([mockAudioLifecycleManager setRequestedEncryptionType:testEncryptionFlag]); + OCMVerify([mockVideoLifecycleManager setRequestedEncryptionType:testEncryptionFlag]); + }); + + it(@"should set the video manager properties correctly", ^{ + UIViewController *testViewController = [[UIViewController alloc] init]; + [testStreamingMediaManager setRootViewController:testViewController]; + OCMVerify([mockVideoLifecycleManager setRootViewController:testViewController]); + + [testStreamingMediaManager setShowVideoBackgroundDisplay:NO]; + OCMVerify([mockVideoLifecycleManager setShowVideoBackgroundDisplay:NO]); + }); + }); + + describe(@"when using the secondary transport", ^{ + __block SDLProtocol *mockProtocol = nil; + + beforeEach(^{ + mockProtocol = OCMClassMock([SDLProtocol class]); + }); + + describe(@"starting a service on a transport when none is running", ^{ + beforeEach(^{ + [testStreamingMediaManager startSecondaryTransportWithProtocol:mockProtocol]; + + // Make sure the dispatch_group tasks finish before performing checks + [NSThread sleepForTimeInterval:0.5]; + }); + + it(@"should start both the audio and video stream managers with the protocol", ^{ + OCMVerify([mockAudioLifecycleManager startWithProtocol:mockProtocol]); + OCMVerify([mockVideoLifecycleManager startWithProtocol:mockProtocol]); + + expect(testStreamingMediaManager.audioStarted).to(beTrue()); + expect(testStreamingMediaManager.videoStarted).to(beTrue()); + + OCMReject([mockSecondaryTransportManager disconnectSecondaryTransport]); + + OCMReject([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]); + OCMReject([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]); + }); + }); + + describe(@"stopping a running service on a transport", ^{ + beforeEach(^{ + OCMStub([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]).andDo(^(NSInvocation *invocation) { + void (^handler)(void); + [invocation getArgument:&handler atIndex:2]; + handler(); + }); + + OCMStub([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]).andDo(^(NSInvocation *invocation) { + void (^handler)(void); + [invocation getArgument:&handler atIndex:2]; + handler(); + }); + + [testStreamingMediaManager didUpdateFromOldVideoProtocol:[OCMArg any] toNewVideoProtocol:nil fromOldAudioProtocol:[OCMArg any] toNewAudioProtocol:nil]; + + // Make sure the dispatch_group tasks finish before performing checks + [NSThread sleepForTimeInterval:0.5]; + }); + + it(@"should stop both the audio and video stream managers", ^{ + OCMVerify([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]); + OCMVerify([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]); + expect(testStreamingMediaManager.audioStarted).to(beFalse()); + expect(testStreamingMediaManager.videoStarted).to(beFalse()); + + OCMReject([mockAudioLifecycleManager startWithProtocol:[OCMArg any]]); + OCMReject([mockVideoLifecycleManager startWithProtocol:[OCMArg any]]); + + OCMVerify([mockSecondaryTransportManager disconnectSecondaryTransport]); + + expect(testStreamingMediaManager.audioProtocol).to(beNil()); + expect(testStreamingMediaManager.videoProtocol).to(beNil()); + }); + }); + + describe(@"switching both the video and audio services to a different transport", ^{ + __block SDLProtocol *mockOldVideoProtocol = nil; + __block SDLProtocol *mockNewVideoProtocol = nil; + __block SDLProtocol *mockOldAudioProtocol = nil; + __block SDLProtocol *mockNewAudioProtocol = nil; + + beforeEach(^{ + mockOldVideoProtocol = OCMClassMock([SDLProtocol class]); + mockNewVideoProtocol = OCMClassMock([SDLProtocol class]); + mockOldAudioProtocol = OCMClassMock([SDLProtocol class]); + mockNewAudioProtocol = OCMClassMock([SDLProtocol class]); + + OCMStub([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]).andDo(^(NSInvocation *invocation) { + void (^handler)(void); + [invocation getArgument:&handler atIndex:2]; + handler(); + }); + + OCMStub([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]).andDo(^(NSInvocation *invocation) { + void (^handler)(void); + [invocation getArgument:&handler atIndex:2]; + handler(); + }); + + [testStreamingMediaManager didUpdateFromOldVideoProtocol:mockOldVideoProtocol toNewVideoProtocol:mockNewVideoProtocol fromOldAudioProtocol:mockOldAudioProtocol toNewAudioProtocol:mockNewAudioProtocol]; + + // Make sure the dispatch_group tasks finish before performing checks + [NSThread sleepForTimeInterval:0.5]; + }); + + it(@"should stop both the audio and video stream managers and call the delegate then start a new session", ^{ + OCMVerify([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]); + OCMVerify([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]); + + OCMVerify([mockSecondaryTransportManager disconnectSecondaryTransport]); + + OCMVerify([mockAudioLifecycleManager startWithProtocol:mockNewAudioProtocol]); + OCMVerify([mockVideoLifecycleManager startWithProtocol:mockNewVideoProtocol]); + + expect(testStreamingMediaManager.audioStarted).to(beTrue()); + expect(testStreamingMediaManager.videoStarted).to(beTrue()); + + expect(testStreamingMediaManager.audioProtocol).to(equal(mockNewAudioProtocol)); + expect(testStreamingMediaManager.videoProtocol).to(equal(mockNewVideoProtocol)); + }); + }); + + describe(@"switching only the video service to a different transport", ^{ + __block SDLProtocol *mockOldProtocol = nil; + __block SDLProtocol *mockNewProtocol = nil; + + beforeEach(^{ + mockOldProtocol = OCMClassMock([SDLProtocol class]); + mockNewProtocol = OCMClassMock([SDLProtocol class]); + + OCMStub([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]).andDo(^(NSInvocation *invocation) { + void (^handler)(void); + [invocation getArgument:&handler atIndex:2]; + handler(); + }); + + [testStreamingMediaManager didUpdateFromOldVideoProtocol:mockOldProtocol toNewVideoProtocol:mockNewProtocol fromOldAudioProtocol:nil toNewAudioProtocol:nil]; + + // Make sure the dispatch_group tasks finish before performing checks + [NSThread sleepForTimeInterval:0.5]; + }); + + it(@"should stop the video stream manager but not the audio stream manager", ^{ + OCMVerify([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]); + OCMReject([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]); + + OCMVerify([mockSecondaryTransportManager disconnectSecondaryTransport]); + + OCMVerify([mockVideoLifecycleManager startWithProtocol:mockNewProtocol]); + expect(testStreamingMediaManager.videoStarted).to(beTrue()); + + OCMReject([mockAudioLifecycleManager startWithProtocol:mockNewProtocol]); + expect(testStreamingMediaManager.audioStarted).to(beFalse()); + + expect(testStreamingMediaManager.audioProtocol).to(beNil()); + expect(testStreamingMediaManager.videoProtocol).to(equal(mockNewProtocol)); + }); + }); + + describe(@"switching only the audio service to a different transport", ^{ + __block SDLProtocol *mockOldProtocol = nil; + __block SDLProtocol *mockNewProtocol = nil; + + beforeEach(^{ + mockOldProtocol = OCMClassMock([SDLProtocol class]); + mockNewProtocol = OCMClassMock([SDLProtocol class]); + + OCMStub([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]).andDo(^(NSInvocation *invocation) { + void (^handler)(void); + [invocation getArgument:&handler atIndex:2]; + handler(); + }); + + [testStreamingMediaManager didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:nil fromOldAudioProtocol:mockOldProtocol toNewAudioProtocol:mockNewProtocol]; + + // Make sure the dispatch_group tasks finish before performing checks + [NSThread sleepForTimeInterval:0.5]; + }); + + it(@"should stop the audio stream manager but not the video stream manager", ^{ + OCMVerify([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]); + OCMReject([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]); + + OCMVerify([mockSecondaryTransportManager disconnectSecondaryTransport]); + + OCMVerify([mockAudioLifecycleManager startWithProtocol:mockNewProtocol]); + expect(testStreamingMediaManager.audioStarted).to(beTrue()); + + OCMReject([mockVideoLifecycleManager startWithProtocol:mockNewProtocol]); + expect(testStreamingMediaManager.videoStarted).to(beFalse()); + expect(testStreamingMediaManager.audioProtocol).to(equal(mockNewProtocol)); + expect(testStreamingMediaManager.videoProtocol).to(beNil()); + }); + }); + }); }); QuickSpecEnd diff --git a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m index e114328e0..4336f7eab 100644 --- a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m +++ b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m @@ -11,6 +11,7 @@ #import "SDLDisplayCapability.h" #import "SDLGetSystemCapability.h" #import "SDLGetSystemCapabilityResponse.h" +#import "SDLGlobals.h" #import "SDLHMICapabilities.h" #import "SDLImageField.h" #import "SDLImageResolution.h" @@ -30,18 +31,50 @@ #import "SDLSetDisplayLayoutResponse.h" #import "SDLSoftButtonCapabilities.h" #import "SDLSystemCapability.h" +#import "SDLSystemCapabilityObserver.h" #import "SDLSystemCapabilityManager.h" #import "SDLTextField.h" +#import "SDLVersion.h" #import "SDLVideoStreamingCapability.h" #import "SDLWindowCapability.h" #import "SDLWindowTypeCapabilities.h" #import "TestConnectionManager.h" #import "TestSystemCapabilityObserver.h" +typedef NSString * SDLServiceID; @interface SDLSystemCapabilityManager () +@property (weak, nonatomic) id connectionManager; + +@property (nullable, strong, nonatomic, readwrite) NSArray *displays; +@property (nullable, strong, nonatomic, readwrite) SDLDisplayCapabilities *displayCapabilities; +@property (nullable, strong, nonatomic, readwrite) SDLHMICapabilities *hmiCapabilities; +@property (nullable, copy, nonatomic, readwrite) NSArray *softButtonCapabilities; +@property (nullable, copy, nonatomic, readwrite) NSArray *buttonCapabilities; +@property (nullable, strong, nonatomic, readwrite) SDLPresetBankCapabilities *presetBankCapabilities; +@property (nullable, copy, nonatomic, readwrite) NSArray *hmiZoneCapabilities; +@property (nullable, copy, nonatomic, readwrite) NSArray *speechCapabilities; +@property (nullable, copy, nonatomic, readwrite) NSArray *prerecordedSpeechCapabilities; +@property (nonatomic, assign, readwrite) BOOL vrCapability; +@property (nullable, copy, nonatomic, readwrite) NSArray *audioPassThruCapabilities; +@property (nullable, strong, nonatomic, readwrite) SDLAudioPassThruCapabilities *pcmStreamCapability; +@property (nullable, strong, nonatomic, readwrite) SDLNavigationCapability *navigationCapability; +@property (nullable, strong, nonatomic, readwrite) SDLPhoneCapability *phoneCapability; +@property (nullable, strong, nonatomic, readwrite) SDLVideoStreamingCapability *videoStreamingCapability; +@property (nullable, strong, nonatomic, readwrite) SDLRemoteControlCapabilities *remoteControlCapability; +@property (nullable, strong, nonatomic, readwrite) SDLSeatLocationCapability *seatLocationCapability; + +@property (nullable, strong, nonatomic) NSMutableDictionary *appServicesCapabilitiesDictionary; + @property (assign, nonatomic, readwrite) BOOL supportsSubscriptions; +@property (strong, nonatomic) NSMutableDictionary *> *capabilityObservers; +@property (strong, nonatomic) NSMutableDictionary *> *subscriptionStatus; + +@property (nullable, strong, nonatomic) SDLSystemCapability *lastReceivedCapability; + +@property (assign, nonatomic) BOOL shouldConvertDeprecatedDisplayCapabilities; +@property (strong, nonatomic) SDLHMILevel currentHMILevel; @end @@ -139,7 +172,154 @@ @interface SDLSystemCapabilityManager () expect(testSystemCapabilityManager.remoteControlCapability).to(beNil()); expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil()); expect(testSystemCapabilityManager.seatLocationCapability).to(beNil()); + expect(testSystemCapabilityManager.currentHMILevel).to(equal(SDLHMILevelNone)); + }); + + describe(@"isCapabilitySupported method should work correctly", ^{ + __block SDLHMICapabilities *hmiCapabilities = nil; + + beforeEach(^{ + hmiCapabilities = [[SDLHMICapabilities alloc] init]; + }); + + context(@"when there's a cached phone capability and hmiCapabilities is nil", ^{ + beforeEach(^{ + testSystemCapabilityManager.phoneCapability = [[SDLPhoneCapability alloc] initWithDialNumber:YES]; + }); + + it(@"should return true", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypePhoneCall]).to(beTrue()); + }); + }); + + context(@"when there's no cached capability", ^{ + describe(@"pulling a phone capability when HMICapabilites.phoneCapability is false", ^{ + beforeEach(^{ + hmiCapabilities.phoneCall = @NO; + testSystemCapabilityManager.hmiCapabilities = hmiCapabilities; + }); + + it(@"should return NO", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypePhoneCall]).to(beFalse()); + }); + }); + + describe(@"pulling a phone capability when HMICapabilites.phoneCapability is true", ^{ + beforeEach(^{ + hmiCapabilities.phoneCall = @YES; + testSystemCapabilityManager.hmiCapabilities = hmiCapabilities; + }); + + it(@"should return NO", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypePhoneCall]).to(beTrue()); + }); + }); + + describe(@"pulling a phone capability when HMICapabilites.phoneCapability is nil", ^{ + it(@"should return NO", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypePhoneCall]).to(beFalse()); + }); + }); + + describe(@"pulling an app services capability", ^{ + context(@"on RPC connection version 5.1.0 and HMICapabilities.appServices is false", ^{ + beforeEach(^{ + [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithString:@"5.1.0"]; + hmiCapabilities.appServices = @NO; + testSystemCapabilityManager.hmiCapabilities = hmiCapabilities; + }); + + it(@"should return true", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeAppServices]).to(beTrue()); + }); + }); + + context(@"on RPC connection version 5.2.0 and HMICapabilities.appServices is false", ^{ + beforeEach(^{ + [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithString:@"5.2.0"]; + hmiCapabilities.appServices = @NO; + testSystemCapabilityManager.hmiCapabilities = hmiCapabilities; + }); + + it(@"should return false", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeAppServices]).to(beFalse()); + }); + }); + }); + + describe(@"pulling a video streaming capability", ^{ + context(@"on RPC connection version 2.0.0 and HMICapabilities is nil", ^{ + beforeEach(^{ + [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithString:@"2.0.0"]; + }); + + it(@"should return false", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming]).to(beFalse()); + }); + }); + context(@"on RPC connection version 3.0.0 and HMICapabilities is nil", ^{ + beforeEach(^{ + [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithString:@"3.0.0"]; + }); + + context(@"when displayCapabilities.graphicSupported is true", ^{ + beforeEach(^{ + testSystemCapabilityManager.displayCapabilities = [[SDLDisplayCapabilities alloc] init]; + testSystemCapabilityManager.displayCapabilities.graphicSupported = @YES; + }); + + it(@"should return true", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming]).to(beTrue()); + }); + }); + + context(@"when displayCapabilities.graphicSupported is false", ^{ + beforeEach(^{ + testSystemCapabilityManager.displayCapabilities.graphicSupported = @NO; + }); + + it(@"should return true", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming]).to(beFalse()); + }); + }); + }); + + context(@"on RPC connection version 5.1.0", ^{ + beforeEach(^{ + [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithString:@"5.1.0"]; + }); + + context(@"when HMICapabilites.videoStreaming is false", ^{ + beforeEach(^{ + hmiCapabilities.videoStreaming = @NO; + testSystemCapabilityManager.hmiCapabilities = hmiCapabilities; + }); + + it(@"should return false", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming]).to(beFalse()); + }); + }); + + context(@"when HMICapabilites.videoStreaming is true", ^{ + beforeEach(^{ + hmiCapabilities.videoStreaming = @YES; + testSystemCapabilityManager.hmiCapabilities = hmiCapabilities; + }); + + it(@"should return true", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming]).to(beTrue()); + }); + }); + + context(@"when HMICapabilites.videoStreaming is nil", ^{ + it(@"should return false", ^{ + expect([testSystemCapabilityManager isCapabilitySupported:SDLSystemCapabilityTypeVideoStreaming]).to(beFalse()); + }); + }); + }); + }); + }); }); context(@"When notified of a register app interface response", ^{ @@ -355,7 +535,7 @@ @interface SDLSystemCapabilityManager () }); }); - context(@"When sending a GetSystemCapability request", ^{ + context(@"When sending a updateCapabilityType request in HMI FULL", ^{ __block SDLGetSystemCapabilityResponse *testGetSystemCapabilityResponse = nil; __block SDLPhoneCapability *testPhoneCapability = nil; @@ -366,6 +546,8 @@ @interface SDLSystemCapabilityManager () testGetSystemCapabilityResponse.systemCapability = [[SDLSystemCapability alloc] init]; testGetSystemCapabilityResponse.systemCapability.phoneCapability = testPhoneCapability; testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = SDLSystemCapabilityTypePhoneCall; + + testSystemCapabilityManager.currentHMILevel = SDLHMILevelFull; }); context(@"If the request failed with an error", ^{ @@ -377,17 +559,14 @@ @interface SDLSystemCapabilityManager () }); it(@"should should not save the capabilities", ^{ - waitUntilTimeout(1, ^(void (^done)(void)) { - [testSystemCapabilityManager updateCapabilityType:testGetSystemCapabilityResponse.systemCapability.systemCapabilityType completionHandler:^(NSError * _Nullable error, SDLSystemCapabilityManager * _Nonnull systemCapabilityManager) { - expect(error).to(equal(testConnectionManager.defaultError)); - expect(systemCapabilityManager.phoneCapability).to(beNil()); - done(); - }]; + [testSystemCapabilityManager updateCapabilityType:SDLSystemCapabilityTypePhoneCall completionHandler:^(NSError * _Nullable error, SDLSystemCapabilityManager * _Nonnull systemCapabilityManager) { + expect(error).toEventually(equal(testConnectionManager.defaultError)); + expect(systemCapabilityManager.phoneCapability).toEventually(beNil()); + }]; - [NSThread sleepForTimeInterval:0.1]; + [NSThread sleepForTimeInterval:0.1]; - [testConnectionManager respondToLastRequestWithResponse:testGetSystemCapabilityResponse]; - }); + [testConnectionManager respondToLastRequestWithResponse:testGetSystemCapabilityResponse]; }); }); @@ -397,17 +576,14 @@ @interface SDLSystemCapabilityManager () }); it(@"should save the capabilitity", ^{ - waitUntilTimeout(1, ^(void (^done)(void)){ - [testSystemCapabilityManager updateCapabilityType:testGetSystemCapabilityResponse.systemCapability.systemCapabilityType completionHandler:^(NSError * _Nullable error, SDLSystemCapabilityManager * _Nonnull systemCapabilityManager) { - expect(testSystemCapabilityManager.phoneCapability).to(equal(testPhoneCapability)); - expect(error).to(beNil()); - done(); - }]; + [testSystemCapabilityManager updateCapabilityType:SDLSystemCapabilityTypePhoneCall completionHandler:^(NSError * _Nullable error, SDLSystemCapabilityManager * _Nonnull systemCapabilityManager) { + expect(testSystemCapabilityManager.phoneCapability).toEventually(equal(testPhoneCapability)); + expect(error).toEventually(beNil()); + }]; - [NSThread sleepForTimeInterval:0.1]; + [NSThread sleepForTimeInterval:0.1]; - [testConnectionManager respondToLastRequestWithResponse:testGetSystemCapabilityResponse]; - }); + [testConnectionManager respondToLastRequestWithResponse:testGetSystemCapabilityResponse]; }); }); @@ -435,10 +611,12 @@ @interface SDLSystemCapabilityManager () }); }); - describe(@"updating the SCM through OnSystemCapability", ^{ + describe(@"updating the SCM through OnSystemCapability in HMI Full", ^{ __block SDLPhoneCapability *phoneCapability = nil; beforeEach(^{ + testSystemCapabilityManager.currentHMILevel = SDLHMILevelFull; + phoneCapability = [[SDLPhoneCapability alloc] initWithDialNumber:YES]; SDLSystemCapability *newCapability = [[SDLSystemCapability alloc] initWithPhoneCapability:phoneCapability]; SDLOnSystemCapabilityUpdated *update = [[SDLOnSystemCapabilityUpdated alloc] initWithSystemCapability:newCapability]; @@ -452,42 +630,60 @@ @interface SDLSystemCapabilityManager () }); }); - describe(@"subscribing to capability types", ^{ + describe(@"subscribing to capability types when HMI is full", ^{ __block TestSystemCapabilityObserver *phoneObserver = nil; __block TestSystemCapabilityObserver *navigationObserver = nil; + __block TestSystemCapabilityObserver *videoStreamingObserver = nil; + __block TestSystemCapabilityObserver *displaysObserver = nil; - __block NSUInteger blockObserverTriggeredCount = 0; + __block NSUInteger observerTriggeredCount = 0; + __block NSUInteger handlerTriggeredCount = 0; beforeEach(^{ - blockObserverTriggeredCount = 0; - testSystemCapabilityManager.supportsSubscriptions = YES; + testSystemCapabilityManager.currentHMILevel = SDLHMILevelFull; + + observerTriggeredCount = 0; + handlerTriggeredCount = 0; + [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithString:@"5.1.0"]; // supports subscriptions phoneObserver = [[TestSystemCapabilityObserver alloc] init]; - [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypePhoneCall withObserver:phoneObserver selector:@selector(capabilityUpdatedWithNotification:)]; + [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypePhoneCall withObserver:phoneObserver selector:@selector(capabilityUpdatedWithCapability:)]; navigationObserver = [[TestSystemCapabilityObserver alloc] init]; - [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeNavigation withObserver:navigationObserver selector:@selector(capabilityUpdatedWithNotification:)]; + [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeNavigation withObserver:navigationObserver selector:@selector(capabilityUpdatedWithCapability:error:)]; + videoStreamingObserver = [[TestSystemCapabilityObserver alloc] init]; + [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeVideoStreaming withObserver:videoStreamingObserver selector:@selector(capabilityUpdatedWithCapability:error:subscribed:)]; + displaysObserver = [[TestSystemCapabilityObserver alloc] init]; + [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:displaysObserver selector:@selector(capabilityUpdatedWithCapability:error:subscribed:)]; }); - describe(@"when observers aren't supported", ^{ + context(@"when observers aren't supported", ^{ __block BOOL observationSuccess = NO; beforeEach(^{ - testSystemCapabilityManager.supportsSubscriptions = NO; + [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithString:@"5.0.0"]; // no subscriptions - observationSuccess = [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypePhoneCall withObserver:phoneObserver selector:@selector(capabilityUpdatedWithNotification:)]; + observationSuccess = [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypePhoneCall withObserver:phoneObserver selector:@selector(capabilityUpdatedWithCapability:)]; }); it(@"should fail to subscribe", ^{ - expect(observationSuccess).to(beFalse()); + expect(observationSuccess).to(beTrue()); }); }); context(@"from a GetSystemCapabilitiesResponse", ^{ __block id blockObserver = nil; + __block id handlerObserver = nil; beforeEach(^{ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" blockObserver = [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypePhoneCall withBlock:^(SDLSystemCapability * _Nonnull systemCapability) { - blockObserverTriggeredCount++; + observerTriggeredCount++; + }]; +#pragma clang diagnostic pop + + handlerObserver = [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypePhoneCall withUpdateHandler:^(SDLSystemCapability * _Nullable capability, BOOL subscribed, NSError * _Nullable error) { + handlerTriggeredCount++; }]; SDLGetSystemCapabilityResponse *testResponse = [[SDLGetSystemCapabilityResponse alloc] init]; @@ -497,15 +693,26 @@ @interface SDLSystemCapabilityManager () [[NSNotificationCenter defaultCenter] postNotification:notification]; }); - it(@"should notify subscribers of the new data", ^{ - expect(phoneObserver.selectorCalledCount).toEventually(equal(1)); - expect(blockObserverTriggeredCount).toEventually(equal(1)); + it(@"should not notify subscribers of new data because it was sent outside of the SCM", ^{ + expect(handlerTriggeredCount).toEventually(equal(1)); + expect(observerTriggeredCount).toEventually(equal(1)); + + expect(phoneObserver.selectorCalledCount).toEventually(equal(0)); expect(navigationObserver.selectorCalledCount).toEventually(equal(0)); + + expect(videoStreamingObserver.selectorCalledCount).toEventually(equal(0)); + expect(videoStreamingObserver.subscribedValuesReceived).toEventually(haveCount(0)); + expect(videoStreamingObserver.subscribedValuesReceived.firstObject).toEventually(beNil()); + + expect(displaysObserver.selectorCalledCount).toEventually(equal(1)); + expect(displaysObserver.subscribedValuesReceived).toEventually(haveCount(1)); + expect(displaysObserver.subscribedValuesReceived.firstObject).toEventually(beTrue()); }); describe(@"unsubscribing", ^{ beforeEach(^{ [testSystemCapabilityManager unsubscribeFromCapabilityType:SDLSystemCapabilityTypePhoneCall withObserver:phoneObserver]; + [testSystemCapabilityManager unsubscribeFromCapabilityType:SDLSystemCapabilityTypePhoneCall withObserver:handlerObserver]; [testSystemCapabilityManager unsubscribeFromCapabilityType:SDLSystemCapabilityTypePhoneCall withObserver:blockObserver]; SDLGetSystemCapabilityResponse *testResponse = [[SDLGetSystemCapabilityResponse alloc] init]; @@ -516,19 +723,32 @@ @interface SDLSystemCapabilityManager () }); it(@"should not notify the subscriber of the new data", ^{ - expect(phoneObserver.selectorCalledCount).toEventually(equal(1)); // No change from above - expect(blockObserverTriggeredCount).toEventually(equal(1)); + expect(handlerTriggeredCount).toEventually(equal(1)); + expect(observerTriggeredCount).toEventually(equal(1)); + + expect(phoneObserver.selectorCalledCount).toEventually(equal(0)); // No change from above expect(navigationObserver.selectorCalledCount).toEventually(equal(0)); + expect(videoStreamingObserver.selectorCalledCount).toEventually(equal(0)); + + expect(displaysObserver.selectorCalledCount).toEventually(equal(1)); }); }); }); context(@"from an OnSystemCapabilities notification", ^{ __block id blockObserver = nil; + __block id handlerObserver = nil; beforeEach(^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" blockObserver = [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypePhoneCall withBlock:^(SDLSystemCapability * _Nonnull systemCapability) { - blockObserverTriggeredCount++; + observerTriggeredCount++; + }]; +#pragma clang diagnostic pop + + handlerObserver = [testSystemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypePhoneCall withUpdateHandler:^(SDLSystemCapability * _Nullable capability, BOOL subscribed, NSError * _Nullable error) { + handlerTriggeredCount++; }]; SDLOnSystemCapabilityUpdated *testNotification = [[SDLOnSystemCapabilityUpdated alloc] initWithSystemCapability:[[SDLSystemCapability alloc] initWithPhoneCapability:[[SDLPhoneCapability alloc] initWithDialNumber:YES]]]; @@ -538,9 +758,19 @@ @interface SDLSystemCapabilityManager () }); it(@"should notify subscribers of the new data", ^{ + expect(handlerTriggeredCount).toEventually(equal(2)); + expect(observerTriggeredCount).toEventually(equal(2)); + expect(phoneObserver.selectorCalledCount).toEventually(equal(1)); - expect(blockObserverTriggeredCount).toEventually(equal(1)); expect(navigationObserver.selectorCalledCount).toEventually(equal(0)); + + expect(videoStreamingObserver.selectorCalledCount).toEventually(equal(0)); + expect(videoStreamingObserver.subscribedValuesReceived).toEventually(haveCount(0)); + expect(videoStreamingObserver.subscribedValuesReceived.firstObject).toEventually(beNil()); + + expect(displaysObserver.selectorCalledCount).toEventually(equal(1)); + expect(displaysObserver.subscribedValuesReceived).toEventually(haveCount(1)); + expect(displaysObserver.subscribedValuesReceived.firstObject).toEventually(beTrue()); }); describe(@"unsubscribing", ^{ @@ -557,8 +787,10 @@ @interface SDLSystemCapabilityManager () it(@"should not notify the subscriber of the new data", ^{ expect(phoneObserver.selectorCalledCount).toEventually(equal(1)); // No change from above - expect(blockObserverTriggeredCount).toEventually(equal(1)); + expect(observerTriggeredCount).toEventually(equal(2)); expect(navigationObserver.selectorCalledCount).toEventually(equal(0)); + expect(videoStreamingObserver.selectorCalledCount).toEventually(equal(0)); + expect(displaysObserver.selectorCalledCount).toEventually(equal(1)); }); }); }); @@ -625,20 +857,6 @@ @interface SDLSystemCapabilityManager () }); }); - describe(@"when entering HMI FULL", ^{ - beforeEach(^{ - SDLOnHMIStatus *fullStatus = [[SDLOnHMIStatus alloc] init]; - fullStatus.hmiLevel = SDLHMILevelFull; - SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:fullStatus]; - [[NSNotificationCenter defaultCenter] postNotification:notification]; - }); - - it(@"should send GetSystemCapability subscriptions for all known capabilities", ^{ - expect(testConnectionManager.receivedRequests).to(haveCount(7)); - expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLGetSystemCapability class])); - }); - }); - describe(@"when the system capability manager is stopped after being started", ^{ beforeEach(^{ [testSystemCapabilityManager stop]; diff --git a/bson_c_lib b/bson_c_lib index 5e79ef239..9cacdaffa 160000 --- a/bson_c_lib +++ b/bson_c_lib @@ -1 +1 @@ -Subproject commit 5e79ef239b88246504ca8efa017479bf417c5164 +Subproject commit 9cacdaffa64bba1231489e2a28d2045e0c6e93a4 diff --git a/docs/Classes.html b/docs/Classes.html index 8b7670743..ef134a5f2 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -1742,7 +1742,8 @@

Objective-C

-
@interface SDLEncodedSyncPData : SDLRPCRequest
+

+@interface SDLEncodedSyncPData : SDLRPCRequest

Swift

@@ -1762,7 +1763,8 @@

Objective-C

-
@interface SDLEncodedSyncPDataResponse : SDLRPCResponse
+

+@interface SDLEncodedSyncPDataResponse : SDLRPCResponse

Swift

@@ -3545,7 +3547,8 @@

Objective-C

-
@interface SDLOnEncodedSyncPData : SDLRPCNotification
+

+@interface SDLOnEncodedSyncPData : SDLRPCNotification

Swift

@@ -3743,7 +3746,8 @@

Objective-C

-
@interface SDLOnSyncPData : SDLRPCNotification
+

+@interface SDLOnSyncPData : SDLRPCNotification

Swift

@@ -5632,7 +5636,7 @@

SDLStreamingMediaManager

-

Manager to help control streaming media services.

+

Manager to help control streaming (video and audio) media services.

See more @@ -5879,7 +5883,8 @@

Objective-C

-
@interface SDLSyncPData : SDLRPCRequest
+

+@interface SDLSyncPData : SDLRPCRequest

Swift

@@ -5899,7 +5904,8 @@

Objective-C

-
@interface SDLSyncPDataResponse : SDLRPCResponse
+

+@interface SDLSyncPDataResponse : SDLRPCResponse

Swift

diff --git a/docs/Classes/SDLAddCommand.html b/docs/Classes/SDLAddCommand.html index f67ca926f..adfa80839 100644 --- a/docs/Classes/SDLAddCommand.html +++ b/docs/Classes/SDLAddCommand.html @@ -322,8 +322,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    SDLRPCCommandNotificationHandler handler;
+
@property (nonatomic, copy, nullable) SDLRPCCommandNotificationHandler handler;

Swift

@@ -345,7 +344,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull cmdID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull cmdID;

Swift

@@ -367,7 +366,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLMenuParams *menuParams;
+
@property (nonatomic, strong, nullable) SDLMenuParams *menuParams;

Swift

@@ -389,8 +388,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSString *> *vrCommands;
+
@property (nonatomic, strong, nullable) NSArray<NSString *> *vrCommands;

Swift

@@ -412,7 +410,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *cmdIcon;
+
@property (nonatomic, strong, nullable) SDLImage *cmdIcon;

Swift

diff --git a/docs/Classes/SDLAddSubMenu.html b/docs/Classes/SDLAddSubMenu.html index 4f5c11ea0..24f1ce665 100644 --- a/docs/Classes/SDLAddSubMenu.html +++ b/docs/Classes/SDLAddSubMenu.html @@ -180,7 +180,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull menuID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull menuID;

Swift

@@ -213,7 +213,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *position;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *position;

Swift

@@ -232,7 +232,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull menuName;
+
@property (nonatomic, strong) NSString *_Nonnull menuName;

Swift

@@ -250,7 +250,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *menuIcon;
+
@property (nonatomic, strong, nullable) SDLImage *menuIcon;

Swift

@@ -268,7 +268,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLMenuLayout menuLayout;
+
@property (nonatomic, strong, nullable) SDLMenuLayout menuLayout;

Swift

diff --git a/docs/Classes/SDLAirbagStatus.html b/docs/Classes/SDLAirbagStatus.html index 498e1c3b6..19c43a0e2 100644 --- a/docs/Classes/SDLAirbagStatus.html +++ b/docs/Classes/SDLAirbagStatus.html @@ -30,8 +30,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull driverAirbagDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull driverAirbagDeployed;

Swift

@@ -51,8 +50,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull driverSideAirbagDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull driverSideAirbagDeployed;

Swift

@@ -72,8 +70,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull driverCurtainAirbagDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull driverCurtainAirbagDeployed;

Swift

@@ -93,8 +90,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull passengerAirbagDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull passengerAirbagDeployed;

Swift

@@ -114,8 +110,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull passengerCurtainAirbagDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull passengerCurtainAirbagDeployed;

Swift

@@ -135,8 +130,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull driverKneeAirbagDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull driverKneeAirbagDeployed;

Swift

@@ -156,8 +150,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull passengerSideAirbagDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull passengerSideAirbagDeployed;

Swift

@@ -177,8 +170,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull passengerKneeAirbagDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull passengerKneeAirbagDeployed;

Swift

diff --git a/docs/Classes/SDLAlert.html b/docs/Classes/SDLAlert.html index 396ccbe1c..f6fd6122e 100644 --- a/docs/Classes/SDLAlert.html +++ b/docs/Classes/SDLAlert.html @@ -523,7 +523,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *alertText1;
+
@property (nonatomic, strong, nullable) NSString *alertText1;

Swift

@@ -547,7 +547,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *alertText2;
+
@property (nonatomic, strong, nullable) NSString *alertText2;

Swift

@@ -570,7 +570,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *alertText3;
+
@property (nonatomic, strong, nullable) NSString *alertText3;

Swift

@@ -594,8 +594,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLTTSChunk *> *ttsChunks;
+
@property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *ttsChunks;

Swift

@@ -617,7 +616,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *duration;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *duration;

Swift

@@ -639,7 +638,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *playTone;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *playTone;

Swift

@@ -661,8 +660,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *progressIndicator;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *progressIndicator;

Swift

@@ -684,8 +682,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLSoftButton *> *softButtons;
+
@property (nonatomic, strong, nullable) NSArray<SDLSoftButton *> *softButtons;

Swift

@@ -711,7 +708,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *cancelID;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *cancelID;

Swift

@@ -732,7 +729,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *alertIcon;
+
@property (nonatomic, strong, nullable) SDLImage *alertIcon;

Swift

diff --git a/docs/Classes/SDLAlertManeuver.html b/docs/Classes/SDLAlertManeuver.html index f7d08ba55..d3535b883 100644 --- a/docs/Classes/SDLAlertManeuver.html +++ b/docs/Classes/SDLAlertManeuver.html @@ -95,8 +95,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLTTSChunk *> *ttsChunks;
+
@property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *ttsChunks;

Swift

@@ -121,8 +120,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLSoftButton *> *softButtons;
+
@property (nonatomic, strong, nullable) NSArray<SDLSoftButton *> *softButtons;

Swift

diff --git a/docs/Classes/SDLAlertResponse.html b/docs/Classes/SDLAlertResponse.html index f01d5d510..d69ffc454 100644 --- a/docs/Classes/SDLAlertResponse.html +++ b/docs/Classes/SDLAlertResponse.html @@ -25,8 +25,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *tryAgainTime;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *tryAgainTime;

Swift

diff --git a/docs/Classes/SDLAppInfo.html b/docs/Classes/SDLAppInfo.html index 2aa01a84b..a72c38363 100644 --- a/docs/Classes/SDLAppInfo.html +++ b/docs/Classes/SDLAppInfo.html @@ -48,7 +48,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull appDisplayName;
+
@property (nonatomic, strong) NSString *_Nonnull appDisplayName;

Swift

@@ -68,7 +68,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull appBundleID;
+
@property (nonatomic, strong) NSString *_Nonnull appBundleID;

Swift

@@ -88,7 +88,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull appVersion;
+
@property (nonatomic, strong) NSString *_Nonnull appVersion;

Swift

diff --git a/docs/Classes/SDLAppServiceCapability.html b/docs/Classes/SDLAppServiceCapability.html index eaf60a358..17df8fbe6 100644 --- a/docs/Classes/SDLAppServiceCapability.html +++ b/docs/Classes/SDLAppServiceCapability.html @@ -88,8 +88,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLServiceUpdateReason updateReason;
+
@property (nonatomic, strong, nullable) SDLServiceUpdateReason updateReason;

Swift

@@ -109,8 +108,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLAppServiceRecord *_Nonnull updatedAppServiceRecord;
+
@property (nonatomic, strong) SDLAppServiceRecord *_Nonnull updatedAppServiceRecord;

Swift

diff --git a/docs/Classes/SDLAppServiceData.html b/docs/Classes/SDLAppServiceData.html index 9a4cfcf7d..b7c6214c1 100644 --- a/docs/Classes/SDLAppServiceData.html +++ b/docs/Classes/SDLAppServiceData.html @@ -201,7 +201,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull serviceType;
+
@property (nonatomic, strong) NSString *_Nonnull serviceType;

Swift

@@ -221,7 +221,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull serviceId;
+
@property (nonatomic, strong) NSString *_Nonnull serviceId;

Swift

@@ -241,8 +241,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLMediaServiceData *mediaServiceData;
+
@property (nonatomic, strong, nullable) SDLMediaServiceData *mediaServiceData;

Swift

@@ -262,8 +261,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLWeatherServiceData *weatherServiceData;
+
@property (nonatomic, strong, nullable) SDLWeatherServiceData *weatherServiceData;

Swift

@@ -283,8 +281,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLNavigationServiceData *navigationServiceData;
+
@property (nonatomic, strong, nullable) SDLNavigationServiceData *navigationServiceData;

Swift

diff --git a/docs/Classes/SDLAppServiceManifest.html b/docs/Classes/SDLAppServiceManifest.html index bd6863bf6..0261c3c8f 100644 --- a/docs/Classes/SDLAppServiceManifest.html +++ b/docs/Classes/SDLAppServiceManifest.html @@ -449,7 +449,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *serviceName;
+
@property (nonatomic, strong, nullable) NSString *serviceName;

Swift

@@ -469,7 +469,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull serviceType;
+
@property (nonatomic, strong) NSString *_Nonnull serviceType;

Swift

@@ -489,7 +489,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *serviceIcon;
+
@property (nonatomic, strong, nullable) SDLImage *serviceIcon;

Swift

@@ -509,8 +509,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *allowAppConsumers;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *allowAppConsumers;

Swift

@@ -530,8 +529,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLSyncMsgVersion *rpcSpecVersion;
+
@property (nonatomic, strong, nullable) SDLSyncMsgVersion *rpcSpecVersion;

Swift

@@ -551,8 +549,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLMsgVersion *maxRPCSpecVersion;
+
@property (nonatomic, strong, nullable) SDLMsgVersion *maxRPCSpecVersion;

Swift

@@ -572,8 +569,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSNumber<SDLInt> *> *handledRPCs;
+
@property (nonatomic, strong, nullable) NSArray<NSNumber<SDLInt> *> *handledRPCs;

Swift

@@ -593,8 +589,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLMediaServiceManifest *mediaServiceManifest;
+
@property (nonatomic, strong, nullable) SDLMediaServiceManifest *mediaServiceManifest;

Swift

@@ -614,8 +609,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLWeatherServiceManifest *weatherServiceManifest;
+
@property (nonatomic, strong, nullable) SDLWeatherServiceManifest *weatherServiceManifest;

Swift

@@ -635,8 +629,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLNavigationServiceManifest *navigationServiceManifest;
+
@property (nonatomic, strong, nullable) SDLNavigationServiceManifest *navigationServiceManifest;

Swift

diff --git a/docs/Classes/SDLAppServiceRecord.html b/docs/Classes/SDLAppServiceRecord.html index dbd78a845..58e11ee7c 100644 --- a/docs/Classes/SDLAppServiceRecord.html +++ b/docs/Classes/SDLAppServiceRecord.html @@ -66,7 +66,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull serviceID;
+
@property (nonatomic, strong) NSString *_Nonnull serviceID;

Swift

@@ -86,8 +86,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLAppServiceManifest *_Nonnull serviceManifest;
+
@property (nonatomic, strong) SDLAppServiceManifest *_Nonnull serviceManifest;

Swift

@@ -107,8 +106,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull servicePublished;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull servicePublished;

Swift

@@ -128,8 +126,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull serviceActive;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull serviceActive;

Swift

diff --git a/docs/Classes/SDLAppServicesCapabilities.html b/docs/Classes/SDLAppServicesCapabilities.html index 7b16e99e7..0143879b6 100644 --- a/docs/Classes/SDLAppServicesCapabilities.html +++ b/docs/Classes/SDLAppServicesCapabilities.html @@ -54,8 +54,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLAppServiceCapability *> *appServices;
+
@property (nonatomic, strong, nullable) NSArray<SDLAppServiceCapability *> *appServices;

Swift

diff --git a/docs/Classes/SDLArtwork.html b/docs/Classes/SDLArtwork.html index 886f71595..fc03ce8e5 100644 --- a/docs/Classes/SDLArtwork.html +++ b/docs/Classes/SDLArtwork.html @@ -32,7 +32,7 @@

Objective-C

-
@property (readonly, assign, nonatomic) BOOL isTemplate;
+
@property (nonatomic, readonly) BOOL isTemplate;

Swift

@@ -50,7 +50,7 @@

Objective-C

-
@property (readonly, strong, nonatomic) SDLImage *_Nonnull imageRPC;
+
@property (nonatomic, strong, readonly) SDLImage *_Nonnull imageRPC;

Swift

diff --git a/docs/Classes/SDLAudioControlCapabilities.html b/docs/Classes/SDLAudioControlCapabilities.html index 6a5105a3d..706d774b4 100644 --- a/docs/Classes/SDLAudioControlCapabilities.html +++ b/docs/Classes/SDLAudioControlCapabilities.html @@ -178,7 +178,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull moduleName;
+
@property (nonatomic, strong) NSString *_Nonnull moduleName;

Swift

@@ -198,8 +198,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *sourceAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *sourceAvailable;

Swift

@@ -219,8 +218,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *keepContextAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *keepContextAvailable;

Swift

@@ -240,8 +238,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *volumeAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *volumeAvailable;

Swift

@@ -261,8 +258,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *equalizerAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *equalizerAvailable;

Swift

@@ -283,8 +279,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *equalizerMaxChannelId;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *equalizerMaxChannelId;

Swift

@@ -304,7 +299,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLModuleInfo *moduleInfo;
+
@property (nonatomic, strong, nullable) SDLModuleInfo *moduleInfo;

Swift

diff --git a/docs/Classes/SDLAudioControlData.html b/docs/Classes/SDLAudioControlData.html index d086add35..0b87d5883 100644 --- a/docs/Classes/SDLAudioControlData.html +++ b/docs/Classes/SDLAudioControlData.html @@ -70,7 +70,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLPrimaryAudioSource source;
+
@property (nonatomic, strong, nullable) SDLPrimaryAudioSource source;

Swift

@@ -94,8 +94,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *keepContext;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *keepContext;

Swift

@@ -115,7 +114,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *volume;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *volume;

Swift

@@ -135,8 +134,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLEqualizerSettings *> *equalizerSettings;
+
@property (nonatomic, strong, nullable) NSArray<SDLEqualizerSettings *> *equalizerSettings;

Swift

diff --git a/docs/Classes/SDLAudioFile.html b/docs/Classes/SDLAudioFile.html index ee86b5ada..9218be08b 100644 --- a/docs/Classes/SDLAudioFile.html +++ b/docs/Classes/SDLAudioFile.html @@ -27,7 +27,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable) NSURL *inputFileURL;
+
@property (nonatomic, copy, readonly, nullable) NSURL *inputFileURL;

Swift

@@ -45,7 +45,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable) NSURL *outputFileURL;
+
@property (nonatomic, copy, readonly, nullable) NSURL *outputFileURL;

Swift

@@ -63,7 +63,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) UInt32 estimatedDuration;
+
@property (nonatomic) UInt32 estimatedDuration;

Swift

@@ -81,7 +81,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSData *_Nonnull data;
+
@property (nonatomic, copy, readonly) NSData *_Nonnull data;

Swift

@@ -99,7 +99,7 @@

Objective-C

-
@property (readonly, assign, nonatomic) unsigned long long fileSize;
+
@property (nonatomic, readonly) unsigned long long fileSize;

Swift

diff --git a/docs/Classes/SDLAudioPassThruCapabilities.html b/docs/Classes/SDLAudioPassThruCapabilities.html index 0594eb79e..72ed567c0 100644 --- a/docs/Classes/SDLAudioPassThruCapabilities.html +++ b/docs/Classes/SDLAudioPassThruCapabilities.html @@ -27,7 +27,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLSamplingRate _Nonnull samplingRate;
+
@property (nonatomic, strong) SDLSamplingRate _Nonnull samplingRate;

Swift

@@ -47,7 +47,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLBitsPerSample _Nonnull bitsPerSample;
+
@property (nonatomic, strong) SDLBitsPerSample _Nonnull bitsPerSample;

Swift

@@ -67,7 +67,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLAudioType _Nonnull audioType;
+
@property (nonatomic, strong) SDLAudioType _Nonnull audioType;

Swift

diff --git a/docs/Classes/SDLAudioStreamManager.html b/docs/Classes/SDLAudioStreamManager.html index 807ea8372..71ca06503 100644 --- a/docs/Classes/SDLAudioStreamManager.html +++ b/docs/Classes/SDLAudioStreamManager.html @@ -29,8 +29,7 @@

Objective-C

-
@property (readwrite, nonatomic)
-    id<SDLAudioStreamManagerDelegate> _Nullable delegate;
+
@property (nonatomic, weak) id<SDLAudioStreamManagerDelegate> _Nullable delegate;
@@ -45,7 +44,7 @@

Objective-C

-
@property (readonly, getter=isPlaying, assign, nonatomic) BOOL playing;
+
@property (nonatomic, readonly, getter=isPlaying) BOOL playing;

Swift

@@ -63,7 +62,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSArray<SDLAudioFile *> *_Nonnull queue;
+
@property (nonatomic, copy, readonly) NSArray<SDLAudioFile *> *_Nonnull queue;

Swift

diff --git a/docs/Classes/SDLBeltStatus.html b/docs/Classes/SDLBeltStatus.html index 1ca7b063f..55bd37aa8 100644 --- a/docs/Classes/SDLBeltStatus.html +++ b/docs/Classes/SDLBeltStatus.html @@ -37,8 +37,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull driverBeltDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull driverBeltDeployed;

Swift

@@ -58,8 +57,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull passengerBeltDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull passengerBeltDeployed;

Swift

@@ -79,8 +77,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull passengerBuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull passengerBuckleBelted;

Swift

@@ -100,8 +97,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull driverBuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull driverBuckleBelted;

Swift

@@ -121,8 +117,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull leftRow2BuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull leftRow2BuckleBelted;

Swift

@@ -142,8 +137,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull passengerChildDetected;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull passengerChildDetected;

Swift

@@ -163,8 +157,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull rightRow2BuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull rightRow2BuckleBelted;

Swift

@@ -184,8 +177,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull middleRow2BuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull middleRow2BuckleBelted;

Swift

@@ -205,8 +197,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull middleRow3BuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull middleRow3BuckleBelted;

Swift

@@ -226,8 +217,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull leftRow3BuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull leftRow3BuckleBelted;

Swift

@@ -247,8 +237,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull rightRow3BuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull rightRow3BuckleBelted;

Swift

@@ -268,8 +257,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull leftRearInflatableBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull leftRearInflatableBelted;

Swift

@@ -289,8 +277,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull rightRearInflatableBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull rightRearInflatableBelted;

Swift

@@ -310,8 +297,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull middleRow1BeltDeployed;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull middleRow1BeltDeployed;

Swift

@@ -331,8 +317,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataEventStatus _Nonnull middleRow1BuckleBelted;
+
@property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull middleRow1BuckleBelted;

Swift

diff --git a/docs/Classes/SDLBodyInformation.html b/docs/Classes/SDLBodyInformation.html index b0bb7d388..6c566088c 100644 --- a/docs/Classes/SDLBodyInformation.html +++ b/docs/Classes/SDLBodyInformation.html @@ -32,8 +32,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull parkBrakeActive;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull parkBrakeActive;

Swift

@@ -56,8 +55,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLIgnitionStableStatus _Nonnull ignitionStableStatus;
+
@property (nonatomic, strong) SDLIgnitionStableStatus _Nonnull ignitionStableStatus;

Swift

@@ -80,8 +78,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLIgnitionStatus _Nonnull ignitionStatus;
+
@property (nonatomic, strong) SDLIgnitionStatus _Nonnull ignitionStatus;

Swift

@@ -104,8 +101,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *driverDoorAjar;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *driverDoorAjar;

Swift

@@ -128,8 +124,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *passengerDoorAjar;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *passengerDoorAjar;

Swift

@@ -152,8 +147,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *rearLeftDoorAjar;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *rearLeftDoorAjar;

Swift

@@ -176,8 +170,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *rearRightDoorAjar;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *rearRightDoorAjar;

Swift

diff --git a/docs/Classes/SDLButtonCapabilities.html b/docs/Classes/SDLButtonCapabilities.html index de7128817..718c990bc 100644 --- a/docs/Classes/SDLButtonCapabilities.html +++ b/docs/Classes/SDLButtonCapabilities.html @@ -32,7 +32,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLButtonName _Nonnull name;
+
@property (nonatomic, strong) SDLButtonName _Nonnull name;

Swift

@@ -52,8 +52,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull shortPressAvailable;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull shortPressAvailable;

Swift

@@ -73,8 +72,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull longPressAvailable;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull longPressAvailable;

Swift

@@ -94,8 +92,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull upDownAvailable;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull upDownAvailable;

Swift

@@ -115,7 +112,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLModuleInfo *moduleInfo;
+
@property (nonatomic, strong, nullable) SDLModuleInfo *moduleInfo;

Swift

diff --git a/docs/Classes/SDLButtonPress.html b/docs/Classes/SDLButtonPress.html index 79456472b..d2dcae903 100644 --- a/docs/Classes/SDLButtonPress.html +++ b/docs/Classes/SDLButtonPress.html @@ -91,7 +91,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLModuleType _Nonnull moduleType;
+
@property (nonatomic, strong) SDLModuleType _Nonnull moduleType;

Swift

@@ -111,7 +111,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *moduleId;
+
@property (nonatomic, strong, nullable) NSString *moduleId;

Swift

@@ -129,7 +129,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLButtonName _Nonnull buttonName;
+
@property (nonatomic, strong) SDLButtonName _Nonnull buttonName;

Swift

@@ -147,8 +147,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLButtonPressMode _Nonnull buttonPressMode;
+
@property (nonatomic, strong) SDLButtonPressMode _Nonnull buttonPressMode;

Swift

diff --git a/docs/Classes/SDLCancelInteraction.html b/docs/Classes/SDLCancelInteraction.html index fe63b1368..181dc792f 100644 --- a/docs/Classes/SDLCancelInteraction.html +++ b/docs/Classes/SDLCancelInteraction.html @@ -292,7 +292,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *cancelID;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *cancelID;

Swift

@@ -314,7 +314,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull functionID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull functionID;

Swift

diff --git a/docs/Classes/SDLCarWindowViewController.html b/docs/Classes/SDLCarWindowViewController.html index dceafca81..0d8c23a49 100644 --- a/docs/Classes/SDLCarWindowViewController.html +++ b/docs/Classes/SDLCarWindowViewController.html @@ -21,8 +21,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic)
-    UIInterfaceOrientation supportedOrientation;
+
@property (nonatomic) UIInterfaceOrientation supportedOrientation;

Swift

diff --git a/docs/Classes/SDLChangeRegistration.html b/docs/Classes/SDLChangeRegistration.html index 70cf53039..ea1968447 100644 --- a/docs/Classes/SDLChangeRegistration.html +++ b/docs/Classes/SDLChangeRegistration.html @@ -106,7 +106,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLLanguage _Nonnull language;
+
@property (nonatomic, strong) SDLLanguage _Nonnull language;

Swift

@@ -124,7 +124,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLLanguage _Nonnull hmiDisplayLanguage;
+
@property (nonatomic, strong) SDLLanguage _Nonnull hmiDisplayLanguage;

Swift

@@ -144,7 +144,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *appName;
+
@property (nonatomic, copy, nullable) NSString *appName;

Swift

@@ -164,7 +164,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSArray<SDLTTSChunk *> *ttsName;
+
@property (nonatomic, copy, nullable) NSArray<SDLTTSChunk *> *ttsName;

Swift

@@ -184,7 +184,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *ngnMediaScreenAppName;
+
@property (nonatomic, copy, nullable) NSString *ngnMediaScreenAppName;

Swift

@@ -204,7 +204,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSArray<NSString *> *vrSynonyms;
+
@property (nonatomic, copy, nullable) NSArray<NSString *> *vrSynonyms;

Swift

diff --git a/docs/Classes/SDLChoice.html b/docs/Classes/SDLChoice.html index cd8b7e4be..6d02238bb 100644 --- a/docs/Classes/SDLChoice.html +++ b/docs/Classes/SDLChoice.html @@ -111,7 +111,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull choiceID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull choiceID;

Swift

@@ -131,7 +131,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull menuName;
+
@property (nonatomic, strong) NSString *_Nonnull menuName;

Swift

@@ -153,8 +153,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSString *> *vrCommands;
+
@property (nonatomic, strong, nullable) NSArray<NSString *> *vrCommands;

Swift

@@ -174,7 +173,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *image;
+
@property (nonatomic, strong, nullable) SDLImage *image;

Swift

@@ -194,7 +193,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *secondaryText;
+
@property (nonatomic, strong, nullable) NSString *secondaryText;

Swift

@@ -214,7 +213,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *tertiaryText;
+
@property (nonatomic, strong, nullable) NSString *tertiaryText;

Swift

@@ -234,7 +233,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *secondaryImage;
+
@property (nonatomic, strong, nullable) SDLImage *secondaryImage;

Swift

diff --git a/docs/Classes/SDLChoiceCell.html b/docs/Classes/SDLChoiceCell.html index d21f83c13..6f912d8a7 100644 --- a/docs/Classes/SDLChoiceCell.html +++ b/docs/Classes/SDLChoiceCell.html @@ -30,7 +30,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSString *_Nonnull text;
+
@property (nonatomic, copy, readonly) NSString *_Nonnull text;

Swift

@@ -48,7 +48,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable) NSString *secondaryText;
+
@property (nonatomic, copy, readonly, nullable) NSString *secondaryText;

Swift

@@ -66,7 +66,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable) NSString *tertiaryText;
+
@property (nonatomic, copy, readonly, nullable) NSString *tertiaryText;

Swift

@@ -84,8 +84,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable)
-    NSArray<NSString *> *voiceCommands;
+
@property (nonatomic, copy, readonly, nullable) NSArray<NSString *> *voiceCommands;

Swift

@@ -103,7 +102,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable) SDLArtwork *artwork;
+
@property (nonatomic, strong, readonly, nullable) SDLArtwork *artwork;

Swift

@@ -121,7 +120,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable) SDLArtwork *secondaryArtwork;
+
@property (nonatomic, strong, readonly, nullable) SDLArtwork *secondaryArtwork;

Swift

diff --git a/docs/Classes/SDLChoiceSet.html b/docs/Classes/SDLChoiceSet.html index 1d738b36b..abf190393 100644 --- a/docs/Classes/SDLChoiceSet.html +++ b/docs/Classes/SDLChoiceSet.html @@ -35,7 +35,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic, class) NSTimeInterval defaultTimeout;
+
@property (class, nonatomic) NSTimeInterval defaultTimeout;

Swift

@@ -53,7 +53,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic, class) SDLChoiceSetLayout defaultLayout;
+
@property (class, nonatomic) SDLChoiceSetLayout defaultLayout;

Swift

@@ -71,7 +71,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSString *_Nonnull title;
+
@property (nonatomic, copy) NSString *_Nonnull title;

Swift

@@ -89,8 +89,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    NSArray<SDLTTSChunk *> *initialPrompt;
+
@property (nonatomic, copy, nullable) NSArray<SDLTTSChunk *> *initialPrompt;

Swift

@@ -108,7 +107,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) SDLChoiceSetLayout layout;
+
@property (nonatomic) SDLChoiceSetLayout layout;

Swift

@@ -126,7 +125,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) NSTimeInterval timeout;
+
@property (nonatomic) NSTimeInterval timeout;

Swift

@@ -144,8 +143,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    NSArray<SDLTTSChunk *> *timeoutPrompt;
+
@property (nonatomic, copy, nullable) NSArray<SDLTTSChunk *> *timeoutPrompt;

Swift

@@ -163,8 +161,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    NSArray<SDLTTSChunk *> *helpPrompt;
+
@property (nonatomic, copy, nullable) NSArray<SDLTTSChunk *> *helpPrompt;

Swift

@@ -187,8 +184,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    NSArray<SDLVRHelpItem *> *helpList;
+
@property (nonatomic, copy, nullable) NSArray<SDLVRHelpItem *> *helpList;

Swift

@@ -206,7 +202,7 @@

Objective-C

-
@property (readwrite, nonatomic) id<SDLChoiceSetDelegate> _Nullable delegate;
+
@property (nonatomic, weak) id<SDLChoiceSetDelegate> _Nullable delegate;
@@ -223,8 +219,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic)
-    NSArray<SDLChoiceCell *> *_Nonnull choices;
+
@property (nonatomic, copy) NSArray<SDLChoiceCell *> *_Nonnull choices;

Swift

diff --git a/docs/Classes/SDLClimateControlCapabilities.html b/docs/Classes/SDLClimateControlCapabilities.html index 95112f2f5..5a3da5c40 100644 --- a/docs/Classes/SDLClimateControlCapabilities.html +++ b/docs/Classes/SDLClimateControlCapabilities.html @@ -311,7 +311,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull moduleName;
+
@property (nonatomic, strong) NSString *_Nonnull moduleName;

Swift

@@ -332,8 +332,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *fanSpeedAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *fanSpeedAvailable;

Swift

@@ -354,8 +353,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *desiredTemperatureAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *desiredTemperatureAvailable;

Swift

@@ -376,8 +374,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *acEnableAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *acEnableAvailable;

Swift

@@ -398,8 +395,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *acMaxEnableAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *acMaxEnableAvailable;

Swift

@@ -420,8 +416,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *circulateAirEnableAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *circulateAirEnableAvailable;

Swift

@@ -442,8 +437,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *autoModeEnableAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *autoModeEnableAvailable;

Swift

@@ -464,8 +458,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *dualModeEnableAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *dualModeEnableAvailable;

Swift

@@ -486,8 +479,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *defrostZoneAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *defrostZoneAvailable;

Swift

@@ -507,8 +499,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLDefrostZone> *defrostZone;
+
@property (nonatomic, strong, nullable) NSArray<SDLDefrostZone> *defrostZone;

Swift

@@ -529,8 +520,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *ventilationModeAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *ventilationModeAvailable;

Swift

@@ -551,8 +541,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLVentilationMode> *ventilationMode;
+
@property (nonatomic, strong, nullable) NSArray<SDLVentilationMode> *ventilationMode;

Swift

@@ -573,8 +562,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *heatedSteeringWheelAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatedSteeringWheelAvailable;

Swift

@@ -595,8 +583,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *heatedWindshieldAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatedWindshieldAvailable;

Swift

@@ -617,8 +604,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *heatedRearWindowAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatedRearWindowAvailable;

Swift

@@ -639,8 +625,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *heatedMirrorsAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatedMirrorsAvailable;

Swift

@@ -661,8 +646,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *climateEnableAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *climateEnableAvailable;

Swift

@@ -682,7 +666,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLModuleInfo *moduleInfo;
+
@property (nonatomic, strong, nullable) SDLModuleInfo *moduleInfo;

Swift

diff --git a/docs/Classes/SDLClimateControlData.html b/docs/Classes/SDLClimateControlData.html index 450843dbb..8862520e6 100644 --- a/docs/Classes/SDLClimateControlData.html +++ b/docs/Classes/SDLClimateControlData.html @@ -229,7 +229,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *fanSpeed;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *fanSpeed;

Swift

@@ -254,8 +254,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLTemperature *currentTemperature;
+
@property (nonatomic, strong, nullable) SDLTemperature *currentTemperature;

Swift

@@ -275,8 +274,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLTemperature *desiredTemperature;
+
@property (nonatomic, strong, nullable) SDLTemperature *desiredTemperature;

Swift

@@ -296,7 +294,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *acEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *acEnable;

Swift

@@ -316,8 +314,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *circulateAirEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *circulateAirEnable;

Swift

@@ -337,8 +334,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *autoModeEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *autoModeEnable;

Swift

@@ -358,7 +354,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLDefrostZone defrostZone;
+
@property (nonatomic, strong, nullable) SDLDefrostZone defrostZone;

Swift

@@ -378,8 +374,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *dualModeEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *dualModeEnable;

Swift

@@ -399,8 +394,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *acMaxEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *acMaxEnable;

Swift

@@ -420,8 +414,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLVentilationMode ventilationMode;
+
@property (nonatomic, strong, nullable) SDLVentilationMode ventilationMode;

Swift

@@ -441,8 +434,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *heatedSteeringWheelEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatedSteeringWheelEnable;

Swift

@@ -462,8 +454,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *heatedWindshieldEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatedWindshieldEnable;

Swift

@@ -483,8 +474,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *heatedRearWindowEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatedRearWindowEnable;

Swift

@@ -504,8 +494,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *heatedMirrorsEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatedMirrorsEnable;

Swift

@@ -525,8 +514,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *climateEnable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *climateEnable;

Swift

diff --git a/docs/Classes/SDLCloudAppProperties.html b/docs/Classes/SDLCloudAppProperties.html index f6e8e52de..ff33b6302 100644 --- a/docs/Classes/SDLCloudAppProperties.html +++ b/docs/Classes/SDLCloudAppProperties.html @@ -104,8 +104,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSString *> *nicknames;
+
@property (nonatomic, strong, nullable) NSArray<NSString *> *nicknames;

Swift

@@ -125,7 +124,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull appID;
+
@property (nonatomic, strong) NSString *_Nonnull appID;

Swift

@@ -145,7 +144,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *enabled;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *enabled;

Swift

@@ -165,7 +164,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *authToken;
+
@property (nonatomic, strong, nullable) NSString *authToken;

Swift

@@ -185,7 +184,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *cloudTransportType;
+
@property (nonatomic, strong, nullable) NSString *cloudTransportType;

Swift

@@ -205,8 +204,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLHybridAppPreference hybridAppPreference;
+
@property (nonatomic, strong, nullable) SDLHybridAppPreference hybridAppPreference;

Swift

@@ -226,7 +224,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *endpoint;
+
@property (nonatomic, strong, nullable) NSString *endpoint;

Swift

diff --git a/docs/Classes/SDLClusterModeStatus.html b/docs/Classes/SDLClusterModeStatus.html index f97370ea1..2cc6537c0 100644 --- a/docs/Classes/SDLClusterModeStatus.html +++ b/docs/Classes/SDLClusterModeStatus.html @@ -26,8 +26,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull powerModeActive;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull powerModeActive;

Swift

@@ -47,8 +46,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLPowerModeQualificationStatus _Nonnull powerModeQualificationStatus;
+
@property (nonatomic, strong) SDLPowerModeQualificationStatus _Nonnull powerModeQualificationStatus;

Swift

@@ -68,7 +66,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLCarModeStatus _Nonnull carModeStatus;
+
@property (nonatomic, strong) SDLCarModeStatus _Nonnull carModeStatus;

Swift

@@ -88,8 +86,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLPowerModeStatus _Nonnull powerModeStatus;
+
@property (nonatomic, strong) SDLPowerModeStatus _Nonnull powerModeStatus;

Swift

diff --git a/docs/Classes/SDLConfiguration.html b/docs/Classes/SDLConfiguration.html index 607c38900..8435611db 100644 --- a/docs/Classes/SDLConfiguration.html +++ b/docs/Classes/SDLConfiguration.html @@ -36,8 +36,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    SDLLifecycleConfiguration *_Nonnull lifecycleConfig;
+
@property (nonatomic, copy, readonly) SDLLifecycleConfiguration *_Nonnull lifecycleConfig;

Swift

@@ -55,8 +54,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    SDLLockScreenConfiguration *_Nonnull lockScreenConfig;
+
@property (nonatomic, copy, readonly) SDLLockScreenConfiguration *_Nonnull lockScreenConfig;

Swift

@@ -74,8 +72,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    SDLLogConfiguration *_Nonnull loggingConfig;
+
@property (nonatomic, copy, readonly) SDLLogConfiguration *_Nonnull loggingConfig;

Swift

@@ -93,8 +90,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    SDLStreamingMediaConfiguration *_Nonnull streamingMediaConfig;
+
@property (nonatomic, copy, readonly) SDLStreamingMediaConfiguration *_Nonnull streamingMediaConfig;

Swift

@@ -112,8 +108,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    SDLFileManagerConfiguration *_Nonnull fileManagerConfig;
+
@property (nonatomic, copy, readonly) SDLFileManagerConfiguration *_Nonnull fileManagerConfig;

Swift

@@ -131,8 +126,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    SDLEncryptionConfiguration *_Nonnull encryptionConfig;
+
@property (nonatomic, copy, readonly) SDLEncryptionConfiguration *_Nonnull encryptionConfig;

Swift

diff --git a/docs/Classes/SDLCreateInteractionChoiceSet.html b/docs/Classes/SDLCreateInteractionChoiceSet.html index 2ad0e3b8e..8f7016208 100644 --- a/docs/Classes/SDLCreateInteractionChoiceSet.html +++ b/docs/Classes/SDLCreateInteractionChoiceSet.html @@ -68,8 +68,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLInt> *_Nonnull interactionChoiceSetID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull interactionChoiceSetID;

Swift

@@ -89,8 +88,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSArray<SDLChoice *> *_Nonnull choiceSet;
+
@property (nonatomic, strong) NSArray<SDLChoice *> *_Nonnull choiceSet;

Swift

diff --git a/docs/Classes/SDLCreateWindow.html b/docs/Classes/SDLCreateWindow.html index 2549f0f35..72a8b4982 100644 --- a/docs/Classes/SDLCreateWindow.html +++ b/docs/Classes/SDLCreateWindow.html @@ -95,7 +95,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLUInt> *_Nonnull windowID;
+
@property (nonatomic, strong) NSNumber<SDLUInt> *_Nonnull windowID;

Swift

@@ -114,7 +114,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull windowName;
+
@property (nonatomic, strong) NSString *_Nonnull windowName;

Swift

@@ -132,7 +132,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLWindowType _Nonnull type;
+
@property (nonatomic, strong) SDLWindowType _Nonnull type;

Swift

@@ -151,8 +151,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSString *associatedServiceType;
+
@property (nonatomic, strong, nullable) NSString *associatedServiceType;

Swift

@@ -170,8 +169,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLUInt> *duplicateUpdatesFromWindowID;
+
@property (nonatomic, strong, nullable) NSNumber<SDLUInt> *duplicateUpdatesFromWindowID;

Swift

diff --git a/docs/Classes/SDLDIDResult.html b/docs/Classes/SDLDIDResult.html index 36ccafc4b..bfae6968e 100644 --- a/docs/Classes/SDLDIDResult.html +++ b/docs/Classes/SDLDIDResult.html @@ -25,8 +25,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataResultCode _Nonnull resultCode;
+
@property (nonatomic, strong) SDLVehicleDataResultCode _Nonnull resultCode;

Swift

@@ -46,7 +45,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull didLocation;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull didLocation;

Swift

@@ -66,7 +65,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *data;
+
@property (nonatomic, strong, nullable) NSString *data;

Swift

diff --git a/docs/Classes/SDLDateTime.html b/docs/Classes/SDLDateTime.html index 039387c47..0e91a9ff5 100644 --- a/docs/Classes/SDLDateTime.html +++ b/docs/Classes/SDLDateTime.html @@ -196,7 +196,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull millisecond;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull millisecond;

Swift

@@ -216,7 +216,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull second;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull second;

Swift

@@ -236,7 +236,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull minute;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull minute;

Swift

@@ -256,7 +256,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull hour;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull hour;

Swift

@@ -276,7 +276,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull day;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull day;

Swift

@@ -296,7 +296,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull month;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull month;

Swift

@@ -316,7 +316,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull year;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull year;

Swift

@@ -336,8 +336,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic)
-    NSNumber<SDLInt> *_Nonnull timezoneMinuteOffset;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull timezoneMinuteOffset;

Swift

@@ -357,8 +356,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic)
-    NSNumber<SDLInt> *_Nonnull timezoneHourOffset;
+
@property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull timezoneHourOffset;

Swift

diff --git a/docs/Classes/SDLDeleteCommand.html b/docs/Classes/SDLDeleteCommand.html index 770b27f78..2c8ace3b6 100644 --- a/docs/Classes/SDLDeleteCommand.html +++ b/docs/Classes/SDLDeleteCommand.html @@ -61,7 +61,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull cmdID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull cmdID;

Swift

diff --git a/docs/Classes/SDLDeleteFile.html b/docs/Classes/SDLDeleteFile.html index 2fa755b00..0717e658d 100644 --- a/docs/Classes/SDLDeleteFile.html +++ b/docs/Classes/SDLDeleteFile.html @@ -55,7 +55,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull syncFileName;
+
@property (nonatomic, strong) NSString *_Nonnull syncFileName;

Swift

diff --git a/docs/Classes/SDLDeleteFileResponse.html b/docs/Classes/SDLDeleteFileResponse.html index 4f3bf864f..a1329cf6a 100644 --- a/docs/Classes/SDLDeleteFileResponse.html +++ b/docs/Classes/SDLDeleteFileResponse.html @@ -23,8 +23,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *spaceAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *spaceAvailable;

Swift

diff --git a/docs/Classes/SDLDeleteInteractionChoiceSet.html b/docs/Classes/SDLDeleteInteractionChoiceSet.html index 697afcf3a..8c6a97bd2 100644 --- a/docs/Classes/SDLDeleteInteractionChoiceSet.html +++ b/docs/Classes/SDLDeleteInteractionChoiceSet.html @@ -63,8 +63,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLInt> *_Nonnull interactionChoiceSetID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull interactionChoiceSetID;

Swift

diff --git a/docs/Classes/SDLDeleteSubMenu.html b/docs/Classes/SDLDeleteSubMenu.html index 4c34c4bb4..2b31e02fa 100644 --- a/docs/Classes/SDLDeleteSubMenu.html +++ b/docs/Classes/SDLDeleteSubMenu.html @@ -59,7 +59,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull menuID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull menuID;

Swift

diff --git a/docs/Classes/SDLDeleteWindow.html b/docs/Classes/SDLDeleteWindow.html index 1ebe44a0c..50ebcf47a 100644 --- a/docs/Classes/SDLDeleteWindow.html +++ b/docs/Classes/SDLDeleteWindow.html @@ -53,7 +53,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLUInt> *_Nonnull windowID;
+
@property (nonatomic, strong) NSNumber<SDLUInt> *_Nonnull windowID;

Swift

diff --git a/docs/Classes/SDLDeviceInfo.html b/docs/Classes/SDLDeviceInfo.html index b0b4f5267..b4b28a9dd 100644 --- a/docs/Classes/SDLDeviceInfo.html +++ b/docs/Classes/SDLDeviceInfo.html @@ -51,7 +51,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *hardware;
+
@property (nonatomic, strong, nullable) NSString *hardware;

Swift

@@ -71,7 +71,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *firmwareRev;
+
@property (nonatomic, strong, nullable) NSString *firmwareRev;

Swift

@@ -91,7 +91,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *os;
+
@property (nonatomic, strong, nullable) NSString *os;

Swift

@@ -111,7 +111,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *osVersion;
+
@property (nonatomic, strong, nullable) NSString *osVersion;

Swift

@@ -131,7 +131,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *carrier;
+
@property (nonatomic, strong, nullable) NSString *carrier;

Swift

@@ -153,8 +153,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *maxNumberRFCOMMPorts;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *maxNumberRFCOMMPorts;

Swift

diff --git a/docs/Classes/SDLDeviceStatus.html b/docs/Classes/SDLDeviceStatus.html index c30c1b060..b8a5dc0d5 100644 --- a/docs/Classes/SDLDeviceStatus.html +++ b/docs/Classes/SDLDeviceStatus.html @@ -35,7 +35,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLBool> *_Nonnull voiceRecOn;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull voiceRecOn;

Swift

@@ -55,7 +55,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLBool> *_Nonnull btIconOn;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull btIconOn;

Swift

@@ -75,7 +75,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLBool> *_Nonnull callActive;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull callActive;

Swift

@@ -95,8 +95,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull phoneRoaming;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull phoneRoaming;

Swift

@@ -116,8 +115,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull textMsgAvailable;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull textMsgAvailable;

Swift

@@ -142,8 +140,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLDeviceLevelStatus _Nonnull battLevelStatus;
+
@property (nonatomic, strong) SDLDeviceLevelStatus _Nonnull battLevelStatus;

Swift

@@ -163,8 +160,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull stereoAudioOutputMuted;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull stereoAudioOutputMuted;

Swift

@@ -184,8 +180,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull monoAudioOutputMuted;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull monoAudioOutputMuted;

Swift

@@ -210,8 +205,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLDeviceLevelStatus _Nonnull signalLevelStatus;
+
@property (nonatomic, strong) SDLDeviceLevelStatus _Nonnull signalLevelStatus;

Swift

@@ -236,8 +230,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLPrimaryAudioSource _Nonnull primaryAudioSource;
+
@property (nonatomic, strong) SDLPrimaryAudioSource _Nonnull primaryAudioSource;

Swift

@@ -257,8 +250,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull eCallEventActive;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull eCallEventActive;

Swift

diff --git a/docs/Classes/SDLDiagnosticMessage.html b/docs/Classes/SDLDiagnosticMessage.html index 3dc731a64..e74847d97 100644 --- a/docs/Classes/SDLDiagnosticMessage.html +++ b/docs/Classes/SDLDiagnosticMessage.html @@ -62,7 +62,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull targetID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull targetID;

Swift

@@ -82,8 +82,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLInt> *_Nonnull messageLength;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull messageLength;

Swift

@@ -103,8 +102,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSArray<NSNumber<SDLInt> *> *_Nonnull messageData;
+
@property (nonatomic, strong) NSArray<NSNumber<SDLInt> *> *_Nonnull messageData;

Swift

diff --git a/docs/Classes/SDLDiagnosticMessageResponse.html b/docs/Classes/SDLDiagnosticMessageResponse.html index fb555aa2a..89b6c8c91 100644 --- a/docs/Classes/SDLDiagnosticMessageResponse.html +++ b/docs/Classes/SDLDiagnosticMessageResponse.html @@ -25,8 +25,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSNumber<SDLInt> *> *messageDataResult;
+
@property (nonatomic, strong, nullable) NSArray<NSNumber<SDLInt> *> *messageDataResult;

Swift

diff --git a/docs/Classes/SDLDialNumber.html b/docs/Classes/SDLDialNumber.html index 8984e64ba..06384fdbb 100644 --- a/docs/Classes/SDLDialNumber.html +++ b/docs/Classes/SDLDialNumber.html @@ -51,7 +51,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull number;
+
@property (nonatomic, strong) NSString *_Nonnull number;

Swift

diff --git a/docs/Classes/SDLDisplayCapabilities.html b/docs/Classes/SDLDisplayCapabilities.html index 007216f05..311981bc0 100644 --- a/docs/Classes/SDLDisplayCapabilities.html +++ b/docs/Classes/SDLDisplayCapabilities.html @@ -33,7 +33,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLDisplayType _Nonnull displayType;
+
@property (nonatomic, strong) __deprecated_msg("See `displayName` instead") SDLDisplayType displayType;

Swift

@@ -53,7 +53,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *displayName;
+
@property (nonatomic, strong, nullable) NSString *displayName;

Swift

@@ -80,8 +80,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSArray<SDLTextField *> *_Nonnull textFields;
+
@property (nonatomic, strong) NSArray<SDLTextField *> *_Nonnull textFields;

Swift

@@ -108,8 +107,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLImageField *> *imageFields;
+
@property (nonatomic, strong, nullable) NSArray<SDLImageField *> *imageFields;

Swift

@@ -134,8 +132,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSArray<SDLMediaClockFormat> *_Nonnull mediaClockFormats;
+
@property (nonatomic, strong) NSArray<SDLMediaClockFormat> *_Nonnull mediaClockFormats;

Swift

@@ -157,8 +154,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull graphicSupported;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull graphicSupported;

Swift

@@ -180,8 +176,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSString *> *templatesAvailable;
+
@property (nonatomic, strong, nullable) NSArray<NSString *> *templatesAvailable;

Swift

@@ -201,7 +196,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLScreenParams *screenParams;
+
@property (nonatomic, strong, nullable) SDLScreenParams *screenParams;

Swift

@@ -221,8 +216,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *numCustomPresetsAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *numCustomPresetsAvailable;

Swift

diff --git a/docs/Classes/SDLDisplayCapability.html b/docs/Classes/SDLDisplayCapability.html index ebe4fb8e2..e4aef6bb2 100644 --- a/docs/Classes/SDLDisplayCapability.html +++ b/docs/Classes/SDLDisplayCapability.html @@ -5,6 +5,7 @@

Section Contents

  • -initWithDisplayName:
  • -initWithDisplayName:windowTypeSupported:windowCapabilities:
  • +
  • -initWithDisplayName:windowCapabilities:windowTypeSupported:
  • displayName
  • windowTypeSupported
  • windowCapabilities
  • @@ -45,7 +46,7 @@

    -initWithDisplayName:windowTypeSupported:windowCapabilities:

    -

    Init with all the properities

    +

    This method is broken (the types don’t match the parameter names) and will always return nil. Use initWithDisplayName:windowCapabilities:windowTypeSupported: instead.

    @@ -63,14 +64,37 @@

    Swift

    + +

    + -initWithDisplayName:windowCapabilities:windowTypeSupported: +

    + +

    Init with all the properities

    + + + +

    Objective-C

    +
    - (nonnull instancetype)
    +    initWithDisplayName:(nonnull NSString *)displayName
    +     windowCapabilities:
    +         (nullable NSArray<SDLWindowCapability *> *)windowCapabilities
    +    windowTypeSupported:
    +        (nullable NSArray<SDLWindowTypeCapabilities *> *)windowTypeSupported;
    + + +

    Swift

    +
    init(displayName: String, windowCapabilities: [SDLWindowCapability]?, windowTypeSupported: [SDLWindowTypeCapabilities]?)
    + + +

    Parameters

    displayName

    Name of the display.

    -
    windowTypeSupported
    -

    Informs the application how many windows the app is allowed to create per type.

    windowCapabilities

    Contains a list of capabilities of all windows related to the app. - see: windowCapabilities

    +
    windowTypeSupported
    +

    Informs the application how many windows the app is allowed to create per type.

    @@ -82,7 +106,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *displayName;
    +
    @property (nonatomic, strong, nullable) NSString *displayName;

    Swift

    @@ -103,8 +127,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLWindowTypeCapabilities *> *windowTypeSupported;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLWindowTypeCapabilities *> *windowTypeSupported;

    Swift

    @@ -131,8 +154,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLWindowCapability *> *windowCapabilities;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLWindowCapability *> *windowCapabilities;

    Swift

    diff --git a/docs/Classes/SDLECallInfo.html b/docs/Classes/SDLECallInfo.html index e6a04aad9..4dbcbd365 100644 --- a/docs/Classes/SDLECallInfo.html +++ b/docs/Classes/SDLECallInfo.html @@ -25,8 +25,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLVehicleDataNotificationStatus _Nonnull eCallNotificationStatus;
    +
    @property (nonatomic, strong) SDLVehicleDataNotificationStatus _Nonnull eCallNotificationStatus;

    Swift

    @@ -46,8 +45,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLVehicleDataNotificationStatus _Nonnull auxECallNotificationStatus;
    +
    @property (nonatomic, strong) SDLVehicleDataNotificationStatus _Nonnull auxECallNotificationStatus;

    Swift

    @@ -67,8 +65,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLECallConfirmationStatus _Nonnull eCallConfirmationStatus;
    +
    @property (nonatomic, strong) SDLECallConfirmationStatus _Nonnull eCallConfirmationStatus;

    Swift

    diff --git a/docs/Classes/SDLEmergencyEvent.html b/docs/Classes/SDLEmergencyEvent.html index feb815ae9..7b7b38b87 100644 --- a/docs/Classes/SDLEmergencyEvent.html +++ b/docs/Classes/SDLEmergencyEvent.html @@ -27,8 +27,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLEmergencyEventType _Nonnull emergencyEventType;
    +
    @property (nonatomic, strong) SDLEmergencyEventType _Nonnull emergencyEventType;

    Swift

    @@ -48,8 +47,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLFuelCutoffStatus _Nonnull fuelCutoffStatus;
    +
    @property (nonatomic, strong) SDLFuelCutoffStatus _Nonnull fuelCutoffStatus;

    Swift

    @@ -69,8 +67,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLVehicleDataEventStatus _Nonnull rolloverEvent;
    +
    @property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull rolloverEvent;

    Swift

    @@ -95,8 +92,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLInt> *_Nonnull maximumChangeVelocity;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull maximumChangeVelocity;

    Swift

    @@ -116,8 +112,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLVehicleDataEventStatus _Nonnull multipleEvents;
    +
    @property (nonatomic, strong) SDLVehicleDataEventStatus _Nonnull multipleEvents;

    Swift

    diff --git a/docs/Classes/SDLEncodedSyncPData.html b/docs/Classes/SDLEncodedSyncPData.html index 78093ff7e..59eb114f5 100644 --- a/docs/Classes/SDLEncodedSyncPData.html +++ b/docs/Classes/SDLEncodedSyncPData.html @@ -30,7 +30,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSArray<NSString *> *_Nonnull data;
    +
    @property (nonatomic, strong) NSArray<NSString *> *_Nonnull data;

    Swift

    diff --git a/docs/Classes/SDLEncryptionConfiguration.html b/docs/Classes/SDLEncryptionConfiguration.html index 454e45062..f48eed7f7 100644 --- a/docs/Classes/SDLEncryptionConfiguration.html +++ b/docs/Classes/SDLEncryptionConfiguration.html @@ -24,8 +24,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable)
    -    NSArray<Class<SDLSecurityType>> *securityManagers;
    +
    @property (nonatomic, copy, nullable) NSArray<Class<SDLSecurityType>> *securityManagers;
    @@ -40,8 +39,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable) id<SDLServiceEncryptionDelegate>
    -    delegate;
    +
    @property (nonatomic, copy, nullable) id<SDLServiceEncryptionDelegate> delegate;

    Swift

    diff --git a/docs/Classes/SDLEqualizerSettings.html b/docs/Classes/SDLEqualizerSettings.html index 20c01a697..88734ede5 100644 --- a/docs/Classes/SDLEqualizerSettings.html +++ b/docs/Classes/SDLEqualizerSettings.html @@ -53,7 +53,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *channelName;
    +
    @property (nonatomic, strong, nullable) NSString *channelName;

    Swift

    @@ -73,8 +73,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLInt> *_Nonnull channelSetting;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull channelSetting;

    Swift

    @@ -94,7 +93,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull channelId;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull channelId;

    Swift

    diff --git a/docs/Classes/SDLFile.html b/docs/Classes/SDLFile.html index 372483807..728ca6a0b 100644 --- a/docs/Classes/SDLFile.html +++ b/docs/Classes/SDLFile.html @@ -36,7 +36,7 @@

    Objective-C

    -
    @property (readonly, getter=isPersistent, assign, nonatomic) BOOL persistent;
    +
    @property (nonatomic, readonly, getter=isPersistent) BOOL persistent;

    Swift

    @@ -54,7 +54,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) BOOL overwrite;
    +
    @property (nonatomic) BOOL overwrite;

    Swift

    @@ -72,7 +72,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic) NSString *_Nonnull name;
    +
    @property (nonatomic, copy, readonly) NSString *_Nonnull name;

    Swift

    @@ -90,7 +90,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic, nullable) NSURL *fileURL;
    +
    @property (nonatomic, copy, readonly, nullable) NSURL *fileURL;

    Swift

    @@ -108,7 +108,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic) NSData *_Nonnull data;
    +
    @property (nonatomic, copy, readonly) NSData *_Nonnull data;

    Swift

    @@ -126,7 +126,7 @@

    Objective-C

    -
    @property (readonly, nonatomic) unsigned long long fileSize;
    +
    @property (nonatomic, readonly) unsigned long long fileSize;

    Swift

    @@ -144,7 +144,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic) SDLFileType _Nonnull fileType;
    +
    @property (nonatomic, strong, readonly) SDLFileType _Nonnull fileType;

    Swift

    @@ -162,7 +162,7 @@

    Objective-C

    -
    @property (readonly, nonatomic) NSInputStream *_Nonnull inputStream;
    +
    @property (nonatomic, readonly) NSInputStream *_Nonnull inputStream;

    Swift

    @@ -184,7 +184,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) BOOL isStaticIcon;
    +
    @property (nonatomic, readonly) BOOL isStaticIcon;

    Swift

    diff --git a/docs/Classes/SDLFileManager.html b/docs/Classes/SDLFileManager.html index 59165bc09..0012a3875 100644 --- a/docs/Classes/SDLFileManager.html +++ b/docs/Classes/SDLFileManager.html @@ -40,8 +40,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic)
    -    NSSet<SDLFileName *> *_Nonnull remoteFileNames;
    +
    @property (nonatomic, copy, readonly) NSSet<SDLFileName *> *_Nonnull remoteFileNames;

    Swift

    @@ -59,7 +58,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) NSUInteger bytesAvailable;
    +
    @property (nonatomic, readonly) NSUInteger bytesAvailable;

    Swift

    @@ -77,7 +76,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic) NSString *_Nonnull currentState;
    +
    @property (nonatomic, copy, readonly) NSString *_Nonnull currentState;

    Swift

    @@ -95,8 +94,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic)
    -    NSArray<__kindof NSOperation *> *_Nonnull pendingTransactions;
    +
    @property (nonatomic, copy, readonly) NSArray<__kindof NSOperation *> *_Nonnull pendingTransactions;

    Swift

    @@ -114,7 +112,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) BOOL suspended;
    +
    @property (nonatomic) BOOL suspended;

    Swift

    diff --git a/docs/Classes/SDLFileManagerConfiguration.html b/docs/Classes/SDLFileManagerConfiguration.html index 1691f0b95..8473e4c65 100644 --- a/docs/Classes/SDLFileManagerConfiguration.html +++ b/docs/Classes/SDLFileManagerConfiguration.html @@ -27,7 +27,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) UInt8 artworkRetryCount;
    +
    @property (nonatomic) UInt8 artworkRetryCount;

    Swift

    @@ -47,7 +47,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) UInt8 fileRetryCount;
    +
    @property (nonatomic) UInt8 fileRetryCount;

    Swift

    diff --git a/docs/Classes/SDLFuelRange.html b/docs/Classes/SDLFuelRange.html index 1be22f0ae..f875c5bc4 100644 --- a/docs/Classes/SDLFuelRange.html +++ b/docs/Classes/SDLFuelRange.html @@ -24,7 +24,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLFuelType type;
    +
    @property (nonatomic, strong, nullable) SDLFuelType type;

    Swift

    @@ -44,7 +44,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *range;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *range;

    Swift

    diff --git a/docs/Classes/SDLGPSData.html b/docs/Classes/SDLGPSData.html index ec799b15a..7137c1493 100644 --- a/docs/Classes/SDLGPSData.html +++ b/docs/Classes/SDLGPSData.html @@ -43,8 +43,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLFloat> *_Nonnull longitudeDegrees;
    +
    @property (nonatomic, strong) NSNumber<SDLFloat> *_Nonnull longitudeDegrees;

    Swift

    @@ -64,8 +63,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLFloat> *_Nonnull latitudeDegrees;
    +
    @property (nonatomic, strong) NSNumber<SDLFloat> *_Nonnull latitudeDegrees;

    Swift

    @@ -85,7 +83,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *utcYear;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *utcYear;

    Swift

    @@ -105,7 +103,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *utcMonth;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *utcMonth;

    Swift

    @@ -125,7 +123,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *utcDay;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *utcDay;

    Swift

    @@ -145,7 +143,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *utcHours;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *utcHours;

    Swift

    @@ -165,7 +163,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *utcMinutes;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *utcMinutes;

    Swift

    @@ -185,7 +183,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *utcSeconds;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *utcSeconds;

    Swift

    @@ -203,8 +201,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLCompassDirection compassDirection;
    +
    @property (nonatomic, strong, nullable) SDLCompassDirection compassDirection;

    Swift

    @@ -226,7 +223,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *pdop;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *pdop;

    Swift

    @@ -248,7 +245,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *hdop;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *hdop;

    Swift

    @@ -270,7 +267,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *vdop;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *vdop;

    Swift

    @@ -292,7 +289,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *actual;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *actual;

    Swift

    @@ -312,7 +309,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *satellites;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *satellites;

    Swift

    @@ -332,7 +329,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLDimension dimension;
    +
    @property (nonatomic, strong, nullable) SDLDimension dimension;

    Swift

    @@ -352,7 +349,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *altitude;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *altitude;

    Swift

    @@ -374,7 +371,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *heading;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *heading;

    Swift

    @@ -394,7 +391,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *speed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *speed;

    Swift

    @@ -416,7 +413,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *shifted;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *shifted;

    Swift

    diff --git a/docs/Classes/SDLGetAppServiceData.html b/docs/Classes/SDLGetAppServiceData.html index 135c9be00..0fc245693 100644 --- a/docs/Classes/SDLGetAppServiceData.html +++ b/docs/Classes/SDLGetAppServiceData.html @@ -111,7 +111,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull serviceType;
    +
    @property (nonatomic, strong) NSString *_Nonnull serviceType;

    Swift

    @@ -131,7 +131,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *subscribe;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *subscribe;

    Swift

    diff --git a/docs/Classes/SDLGetAppServiceDataResponse.html b/docs/Classes/SDLGetAppServiceDataResponse.html index 26231fa12..951782543 100644 --- a/docs/Classes/SDLGetAppServiceDataResponse.html +++ b/docs/Classes/SDLGetAppServiceDataResponse.html @@ -52,8 +52,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLAppServiceData *serviceData;
    +
    @property (nonatomic, strong, nullable) SDLAppServiceData *serviceData;

    Swift

    diff --git a/docs/Classes/SDLGetCloudAppProperties.html b/docs/Classes/SDLGetCloudAppProperties.html index 076344dfe..df8667923 100644 --- a/docs/Classes/SDLGetCloudAppProperties.html +++ b/docs/Classes/SDLGetCloudAppProperties.html @@ -51,7 +51,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull appID;
    +
    @property (nonatomic, strong) NSString *_Nonnull appID;

    Swift

    diff --git a/docs/Classes/SDLGetCloudAppPropertiesResponse.html b/docs/Classes/SDLGetCloudAppPropertiesResponse.html index 7ff78fb4f..084701e11 100644 --- a/docs/Classes/SDLGetCloudAppPropertiesResponse.html +++ b/docs/Classes/SDLGetCloudAppPropertiesResponse.html @@ -52,8 +52,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLCloudAppProperties *properties;
    +
    @property (nonatomic, strong, nullable) SDLCloudAppProperties *properties;

    Swift

    diff --git a/docs/Classes/SDLGetDTCs.html b/docs/Classes/SDLGetDTCs.html index b30db8062..783fca605 100644 --- a/docs/Classes/SDLGetDTCs.html +++ b/docs/Classes/SDLGetDTCs.html @@ -90,7 +90,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull ecuName;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull ecuName;

    Swift

    @@ -108,7 +108,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *dtcMask;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *dtcMask;

    Swift

    diff --git a/docs/Classes/SDLGetDTCsResponse.html b/docs/Classes/SDLGetDTCsResponse.html index f7330bdba..ee20364a6 100644 --- a/docs/Classes/SDLGetDTCsResponse.html +++ b/docs/Classes/SDLGetDTCsResponse.html @@ -26,7 +26,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *ecuHeader;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *ecuHeader;

    Swift

    @@ -44,7 +44,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSArray<NSString *> *_Nonnull dtc;
    +
    @property (nonatomic, strong) NSArray<NSString *> *_Nonnull dtc;

    Swift

    diff --git a/docs/Classes/SDLGetFile.html b/docs/Classes/SDLGetFile.html index ee50e34b5..28ba9b84c 100644 --- a/docs/Classes/SDLGetFile.html +++ b/docs/Classes/SDLGetFile.html @@ -129,7 +129,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull fileName;
    +
    @property (nonatomic, strong) NSString *_Nonnull fileName;

    Swift

    @@ -149,7 +149,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *appServiceId;
    +
    @property (nonatomic, strong, nullable) NSString *appServiceId;

    Swift

    @@ -169,7 +169,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLFileType fileType;
    +
    @property (nonatomic, strong, nullable) SDLFileType fileType;

    Swift

    @@ -189,7 +189,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *offset;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *offset;

    Swift

    @@ -209,7 +209,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *length;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *length;

    Swift

    diff --git a/docs/Classes/SDLGetFileResponse.html b/docs/Classes/SDLGetFileResponse.html index 5ae4b3218..f6a5a4198 100644 --- a/docs/Classes/SDLGetFileResponse.html +++ b/docs/Classes/SDLGetFileResponse.html @@ -65,7 +65,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *offset;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *offset;

    Swift

    @@ -85,7 +85,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *length;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *length;

    Swift

    @@ -105,7 +105,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLFileType fileType;
    +
    @property (nonatomic, strong, nullable) SDLFileType fileType;

    Swift

    @@ -125,7 +125,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *crc;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *crc;

    Swift

    diff --git a/docs/Classes/SDLGetInteriorVehicleData.html b/docs/Classes/SDLGetInteriorVehicleData.html index f12549a55..79e299a41 100644 --- a/docs/Classes/SDLGetInteriorVehicleData.html +++ b/docs/Classes/SDLGetInteriorVehicleData.html @@ -208,7 +208,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLModuleType _Nonnull moduleType;
    +
    @property (nonatomic, strong) SDLModuleType _Nonnull moduleType;

    Swift

    @@ -228,7 +228,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *moduleId;
    +
    @property (nonatomic, strong, nullable) NSString *moduleId;

    Swift

    @@ -250,7 +250,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *subscribe;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *subscribe;

    Swift

    diff --git a/docs/Classes/SDLGetInteriorVehicleDataConsent.html b/docs/Classes/SDLGetInteriorVehicleDataConsent.html index d263425f8..30e243295 100644 --- a/docs/Classes/SDLGetInteriorVehicleDataConsent.html +++ b/docs/Classes/SDLGetInteriorVehicleDataConsent.html @@ -58,7 +58,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLModuleType _Nonnull moduleType;
    +
    @property (nonatomic, strong) SDLModuleType _Nonnull moduleType;

    Swift

    @@ -78,7 +78,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSArray<NSString *> *_Nonnull moduleIds;
    +
    @property (nonatomic, strong) NSArray<NSString *> *_Nonnull moduleIds;

    Swift

    diff --git a/docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html b/docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html index 0ff40315b..c41e5e1bc 100644 --- a/docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html +++ b/docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html @@ -27,8 +27,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<NSNumber<SDLBool> *> *allowed;
    +
    @property (nonatomic, strong, nullable) NSArray<NSNumber<SDLBool> *> *allowed;

    Swift

    diff --git a/docs/Classes/SDLGetInteriorVehicleDataResponse.html b/docs/Classes/SDLGetInteriorVehicleDataResponse.html index bc6a2aef6..49779236d 100644 --- a/docs/Classes/SDLGetInteriorVehicleDataResponse.html +++ b/docs/Classes/SDLGetInteriorVehicleDataResponse.html @@ -24,7 +24,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLModuleData *moduleData;
    +
    @property (nonatomic, strong, nullable) SDLModuleData *moduleData;

    Swift

    @@ -48,8 +48,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *isSubscribed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *isSubscribed;

    Swift

    diff --git a/docs/Classes/SDLGetSystemCapability.html b/docs/Classes/SDLGetSystemCapability.html index 3d91671e8..c4bf08a3c 100644 --- a/docs/Classes/SDLGetSystemCapability.html +++ b/docs/Classes/SDLGetSystemCapability.html @@ -85,8 +85,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLSystemCapabilityType _Nonnull systemCapabilityType;
    +
    @property (nonatomic, strong) SDLSystemCapabilityType _Nonnull systemCapabilityType;

    Swift

    @@ -106,7 +105,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *subscribe;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *subscribe;

    Swift

    diff --git a/docs/Classes/SDLGetSystemCapabilityResponse.html b/docs/Classes/SDLGetSystemCapabilityResponse.html index b73061458..9e2e07bc8 100644 --- a/docs/Classes/SDLGetSystemCapabilityResponse.html +++ b/docs/Classes/SDLGetSystemCapabilityResponse.html @@ -23,8 +23,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLSystemCapability *systemCapability;
    +
    @property (nonatomic, strong, nullable) SDLSystemCapability *systemCapability;

    Swift

    diff --git a/docs/Classes/SDLGetVehicleData.html b/docs/Classes/SDLGetVehicleData.html index f63a222d3..f5eee441d 100644 --- a/docs/Classes/SDLGetVehicleData.html +++ b/docs/Classes/SDLGetVehicleData.html @@ -387,7 +387,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *gps;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *gps;

    Swift

    @@ -405,7 +405,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *speed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *speed;

    Swift

    @@ -423,7 +423,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *rpm;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *rpm;

    Swift

    @@ -441,7 +441,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelLevel;

    Swift

    @@ -459,8 +459,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *fuelLevel_State;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelLevel_State;

    Swift

    @@ -478,7 +477,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *fuelRange;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelRange;

    Swift

    @@ -496,8 +495,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *instantFuelConsumption;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *instantFuelConsumption;

    Swift

    @@ -515,8 +513,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *externalTemperature;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *externalTemperature;

    Swift

    @@ -534,7 +531,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *vin;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *vin;

    Swift

    @@ -552,7 +549,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *prndl;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *prndl;

    Swift

    @@ -570,8 +567,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *tirePressure;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *tirePressure;

    Swift

    @@ -589,7 +585,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *odometer;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *odometer;

    Swift

    @@ -607,7 +603,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *beltStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *beltStatus;

    Swift

    @@ -625,8 +621,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *bodyInformation;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *bodyInformation;

    Swift

    @@ -644,8 +639,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *deviceStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *deviceStatus;

    Swift

    @@ -663,8 +657,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *driverBraking;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *driverBraking;

    Swift

    @@ -682,8 +675,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *wiperStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *wiperStatus;

    Swift

    @@ -701,8 +693,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *headLampStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *headLampStatus;

    Swift

    @@ -720,8 +711,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *engineOilLife;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *engineOilLife;

    Swift

    @@ -739,8 +729,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *engineTorque;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *engineTorque;

    Swift

    @@ -758,8 +747,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *accPedalPosition;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *accPedalPosition;

    Swift

    @@ -777,8 +765,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *steeringWheelAngle;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *steeringWheelAngle;

    Swift

    @@ -796,7 +783,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *eCallInfo;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *eCallInfo;

    Swift

    @@ -814,8 +801,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *airbagStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *airbagStatus;

    Swift

    @@ -833,8 +819,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *emergencyEvent;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *emergencyEvent;

    Swift

    @@ -852,8 +837,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *clusterModeStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *clusterModeStatus;

    Swift

    @@ -871,7 +855,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *myKey;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *myKey;

    Swift

    @@ -889,8 +873,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *electronicParkBrakeStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *electronicParkBrakeStatus;

    Swift

    @@ -908,7 +891,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *turnSignal;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *turnSignal;

    Swift

    @@ -926,8 +909,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *cloudAppVehicleID;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *cloudAppVehicleID;

    Swift

    diff --git a/docs/Classes/SDLGetVehicleDataResponse.html b/docs/Classes/SDLGetVehicleDataResponse.html index 86457a62e..5110ea891 100644 --- a/docs/Classes/SDLGetVehicleDataResponse.html +++ b/docs/Classes/SDLGetVehicleDataResponse.html @@ -54,7 +54,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLGPSData *gps;
    +
    @property (nonatomic, strong, nullable) SDLGPSData *gps;

    Swift

    @@ -72,7 +72,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *speed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *speed;

    Swift

    @@ -90,7 +90,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *rpm;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *rpm;

    Swift

    @@ -108,7 +108,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *fuelLevel;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *fuelLevel;

    Swift

    @@ -126,8 +126,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLComponentVolumeStatus fuelLevel_State;
    +
    @property (nonatomic, strong, nullable) SDLComponentVolumeStatus fuelLevel_State;

    Swift

    @@ -147,8 +146,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLFuelRange *> *fuelRange;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLFuelRange *> *fuelRange;

    Swift

    @@ -166,8 +164,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *instantFuelConsumption;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *instantFuelConsumption;

    Swift

    @@ -185,8 +182,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *externalTemperature;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *externalTemperature;

    Swift

    @@ -204,7 +200,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *vin;
    +
    @property (nonatomic, strong, nullable) NSString *vin;

    Swift

    @@ -222,7 +218,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLPRNDL prndl;
    +
    @property (nonatomic, strong, nullable) SDLPRNDL prndl;

    Swift

    @@ -240,7 +236,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLTireStatus *tirePressure;
    +
    @property (nonatomic, strong, nullable) SDLTireStatus *tirePressure;

    Swift

    @@ -258,7 +254,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *odometer;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *odometer;

    Swift

    @@ -276,7 +272,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLBeltStatus *beltStatus;
    +
    @property (nonatomic, strong, nullable) SDLBeltStatus *beltStatus;

    Swift

    @@ -294,8 +290,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLBodyInformation *bodyInformation;
    +
    @property (nonatomic, strong, nullable) SDLBodyInformation *bodyInformation;

    Swift

    @@ -313,7 +308,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLDeviceStatus *deviceStatus;
    +
    @property (nonatomic, strong, nullable) SDLDeviceStatus *deviceStatus;

    Swift

    @@ -331,8 +326,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataEventStatus driverBraking;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataEventStatus driverBraking;

    Swift

    @@ -350,7 +344,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLWiperStatus wiperStatus;
    +
    @property (nonatomic, strong, nullable) SDLWiperStatus wiperStatus;

    Swift

    @@ -368,8 +362,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLHeadLampStatus *headLampStatus;
    +
    @property (nonatomic, strong, nullable) SDLHeadLampStatus *headLampStatus;

    Swift

    @@ -387,8 +380,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *engineOilLife;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *engineOilLife;

    Swift

    @@ -406,8 +398,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *engineTorque;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *engineTorque;

    Swift

    @@ -425,8 +416,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *accPedalPosition;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *accPedalPosition;

    Swift

    @@ -444,8 +434,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *steeringWheelAngle;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *steeringWheelAngle;

    Swift

    @@ -463,7 +452,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLECallInfo *eCallInfo;
    +
    @property (nonatomic, strong, nullable) SDLECallInfo *eCallInfo;

    Swift

    @@ -481,7 +470,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLAirbagStatus *airbagStatus;
    +
    @property (nonatomic, strong, nullable) SDLAirbagStatus *airbagStatus;

    Swift

    @@ -499,8 +488,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLEmergencyEvent *emergencyEvent;
    +
    @property (nonatomic, strong, nullable) SDLEmergencyEvent *emergencyEvent;

    Swift

    @@ -518,8 +506,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLClusterModeStatus *clusterModeStatus;
    +
    @property (nonatomic, strong, nullable) SDLClusterModeStatus *clusterModeStatus;

    Swift

    @@ -537,7 +524,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLMyKey *myKey;
    +
    @property (nonatomic, strong, nullable) SDLMyKey *myKey;

    Swift

    @@ -555,8 +542,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLElectronicParkBrakeStatus electronicParkBrakeStatus;
    +
    @property (nonatomic, strong, nullable) SDLElectronicParkBrakeStatus electronicParkBrakeStatus;

    Swift

    @@ -574,7 +560,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLTurnSignal turnSignal;
    +
    @property (nonatomic, strong, nullable) SDLTurnSignal turnSignal;

    Swift

    @@ -592,7 +578,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *cloudAppVehicleID;
    +
    @property (nonatomic, strong, nullable) NSString *cloudAppVehicleID;

    Swift

    diff --git a/docs/Classes/SDLGetWaypoints.html b/docs/Classes/SDLGetWaypoints.html index 4275e75a0..ab7d0c6c8 100644 --- a/docs/Classes/SDLGetWaypoints.html +++ b/docs/Classes/SDLGetWaypoints.html @@ -54,7 +54,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLWayPointType waypointType;
    +
    @property (nonatomic, strong, nullable) SDLWayPointType waypointType;

    Swift

    diff --git a/docs/Classes/SDLGetWaypointsResponse.html b/docs/Classes/SDLGetWaypointsResponse.html index a6bfee66d..3be118e18 100644 --- a/docs/Classes/SDLGetWaypointsResponse.html +++ b/docs/Classes/SDLGetWaypointsResponse.html @@ -23,8 +23,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLLocationDetails *> *waypoints;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLLocationDetails *> *waypoints;

    Swift

    diff --git a/docs/Classes/SDLGrid.html b/docs/Classes/SDLGrid.html index dd4ce9af3..de755ccaf 100644 --- a/docs/Classes/SDLGrid.html +++ b/docs/Classes/SDLGrid.html @@ -26,7 +26,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull col;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull col;

    Swift

    @@ -44,7 +44,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull row;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull row;

    Swift

    @@ -62,7 +62,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *level;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *level;

    Swift

    @@ -80,7 +80,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *colspan;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *colspan;

    Swift

    @@ -98,7 +98,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *rowspan;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *rowspan;

    Swift

    @@ -116,7 +116,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *levelspan;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *levelspan;

    Swift

    diff --git a/docs/Classes/SDLHMICapabilities.html b/docs/Classes/SDLHMICapabilities.html index 0a7cf6e6b..2593f2bb1 100644 --- a/docs/Classes/SDLHMICapabilities.html +++ b/docs/Classes/SDLHMICapabilities.html @@ -33,7 +33,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable) NSNumber<SDLBool> *navigation;
    +
    @property (nonatomic, copy, nullable) NSNumber<SDLBool> *navigation;

    Swift

    @@ -55,7 +55,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable) NSNumber<SDLBool> *phoneCall;
    +
    @property (nonatomic, copy, nullable) NSNumber<SDLBool> *phoneCall;

    Swift

    @@ -77,8 +77,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable)
    -    NSNumber<SDLBool> *videoStreaming;
    +
    @property (nonatomic, copy, nullable) NSNumber<SDLBool> *videoStreaming;

    Swift

    @@ -100,8 +99,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable)
    -    NSNumber<SDLBool> *remoteControl;
    +
    @property (nonatomic, copy, nullable) NSNumber<SDLBool> *remoteControl;

    Swift

    @@ -125,7 +123,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable) NSNumber<SDLBool> *appServices;
    +
    @property (nonatomic, copy, nullable) NSNumber<SDLBool> *appServices;

    Swift

    @@ -147,7 +145,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable) NSNumber<SDLBool> *displays;
    +
    @property (nonatomic, copy, nullable) NSNumber<SDLBool> *displays;

    Swift

    @@ -170,7 +168,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable) NSNumber<SDLBool> *seatLocation;
    +
    @property (nonatomic, copy, nullable) NSNumber<SDLBool> *seatLocation;

    Swift

    diff --git a/docs/Classes/SDLHMIPermissions.html b/docs/Classes/SDLHMIPermissions.html index 07d875c73..197f96fc5 100644 --- a/docs/Classes/SDLHMIPermissions.html +++ b/docs/Classes/SDLHMIPermissions.html @@ -31,7 +31,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSArray<SDLHMILevel> *_Nonnull allowed;
    +
    @property (nonatomic, strong) NSArray<SDLHMILevel> *_Nonnull allowed;

    Swift

    @@ -56,8 +56,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<SDLHMILevel> *_Nonnull userDisallowed;
    +
    @property (nonatomic, strong) NSArray<SDLHMILevel> *_Nonnull userDisallowed;

    Swift

    diff --git a/docs/Classes/SDLHMISettingsControlCapabilities.html b/docs/Classes/SDLHMISettingsControlCapabilities.html index ffa23787e..4099bc2fb 100644 --- a/docs/Classes/SDLHMISettingsControlCapabilities.html +++ b/docs/Classes/SDLHMISettingsControlCapabilities.html @@ -166,7 +166,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull moduleName;
    +
    @property (nonatomic, strong) NSString *_Nonnull moduleName;

    Swift

    @@ -186,8 +186,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *distanceUnitAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *distanceUnitAvailable;

    Swift

    @@ -207,8 +206,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *temperatureUnitAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *temperatureUnitAvailable;

    Swift

    @@ -228,8 +226,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *displayModeUnitAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *displayModeUnitAvailable;

    Swift

    @@ -249,7 +246,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLModuleInfo *moduleInfo;
    +
    @property (nonatomic, strong, nullable) SDLModuleInfo *moduleInfo;

    Swift

    diff --git a/docs/Classes/SDLHMISettingsControlData.html b/docs/Classes/SDLHMISettingsControlData.html index 037e816a5..d9cc7ad97 100644 --- a/docs/Classes/SDLHMISettingsControlData.html +++ b/docs/Classes/SDLHMISettingsControlData.html @@ -60,7 +60,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLDisplayMode displayMode;
    +
    @property (nonatomic, strong, nullable) SDLDisplayMode displayMode;

    Swift

    @@ -80,8 +80,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemperatureUnit temperatureUnit;
    +
    @property (nonatomic, strong, nullable) SDLTemperatureUnit temperatureUnit;

    Swift

    @@ -101,7 +100,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLDistanceUnit distanceUnit;
    +
    @property (nonatomic, strong, nullable) SDLDistanceUnit distanceUnit;

    Swift

    diff --git a/docs/Classes/SDLHapticRect.html b/docs/Classes/SDLHapticRect.html index e07240c38..d9aa7360c 100644 --- a/docs/Classes/SDLHapticRect.html +++ b/docs/Classes/SDLHapticRect.html @@ -54,7 +54,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLUInt> *_Nonnull id;
    +
    @property (nonatomic, strong) NSNumber<SDLUInt> *_Nonnull id;

    Swift

    @@ -74,7 +74,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLRectangle *_Nonnull rect;
    +
    @property (nonatomic, strong) SDLRectangle *_Nonnull rect;

    Swift

    diff --git a/docs/Classes/SDLHeadLampStatus.html b/docs/Classes/SDLHeadLampStatus.html index 15af26697..c3fad7650 100644 --- a/docs/Classes/SDLHeadLampStatus.html +++ b/docs/Classes/SDLHeadLampStatus.html @@ -25,7 +25,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLBool> *_Nonnull lowBeamsOn;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull lowBeamsOn;

    Swift

    @@ -45,7 +45,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLBool> *_Nonnull highBeamsOn;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull highBeamsOn;

    Swift

    @@ -65,8 +65,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLAmbientLightStatus ambientLightSensorStatus;
    +
    @property (nonatomic, strong, nullable) SDLAmbientLightStatus ambientLightSensorStatus;

    Swift

    diff --git a/docs/Classes/SDLImage.html b/docs/Classes/SDLImage.html index 46a7677ba..bca8ff50f 100644 --- a/docs/Classes/SDLImage.html +++ b/docs/Classes/SDLImage.html @@ -208,7 +208,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull value;
    +
    @property (nonatomic, strong) NSString *_Nonnull value;

    Swift

    @@ -228,7 +228,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLImageType _Nonnull imageType;
    +
    @property (nonatomic, strong) SDLImageType _Nonnull imageType;

    Swift

    @@ -246,7 +246,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) NSNumber<SDLBool> *_Nonnull isTemplate;
    +
    @property (nonatomic) NSNumber<SDLBool> *_Nonnull isTemplate;

    Swift

    diff --git a/docs/Classes/SDLImageField.html b/docs/Classes/SDLImageField.html index 3f6a41bcb..d72531c2c 100644 --- a/docs/Classes/SDLImageField.html +++ b/docs/Classes/SDLImageField.html @@ -6,6 +6,7 @@

    Section Contents

  • name
  • imageTypeSupported
  • imageResolution
  • +
  • -initWithName:imageTypeSupported:imageResolution:

Overview

@@ -25,7 +26,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLImageFieldName _Nonnull name;
+
@property (nonatomic, strong) SDLImageFieldName _Nonnull name;

Swift

@@ -45,8 +46,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSArray<SDLFileType> *_Nonnull imageTypeSupported;
+
@property (nonatomic, strong) NSArray<SDLFileType> *_Nonnull imageTypeSupported;

Swift

@@ -66,8 +66,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLImageResolution *imageResolution;
+
@property (nonatomic, strong, nullable) SDLImageResolution *imageResolution;

Swift

@@ -76,4 +75,34 @@

Swift

+

+ -initWithName:imageTypeSupported:imageResolution: +

+ +

Convenience initalizer for the ImageField RPC struct

+ + + +

Objective-C

+
- (nonnull instancetype)
+          initWithName:(nonnull SDLImageFieldName)name
+    imageTypeSupported:(nonnull NSArray<SDLFileType> *)imageTypeSupported
+       imageResolution:(nullable SDLImageResolution *)imageResolution;
+ + +

Swift

+
init(name: SDLImageFieldName, imageTypeSupported: [SDLFileType], imageResolution: SDLImageResolution?)
+ + + +

Parameters

+
+
name
+

The name identifying this image field

+
imageTypeSupported
+

The image data types this field supports

+
imageResolution
+

The native resolution of this image field

+
+ diff --git a/docs/Classes/SDLImageResolution.html b/docs/Classes/SDLImageResolution.html index ca646ccc0..8de04e640 100644 --- a/docs/Classes/SDLImageResolution.html +++ b/docs/Classes/SDLImageResolution.html @@ -25,8 +25,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLInt> *_Nonnull resolutionWidth;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull resolutionWidth;

Swift

@@ -46,8 +45,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLInt> *_Nonnull resolutionHeight;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull resolutionHeight;

Swift

diff --git a/docs/Classes/SDLKeyboardProperties.html b/docs/Classes/SDLKeyboardProperties.html index fe8428f8f..cd4bbadb3 100644 --- a/docs/Classes/SDLKeyboardProperties.html +++ b/docs/Classes/SDLKeyboardProperties.html @@ -113,7 +113,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLLanguage language;
+
@property (nonatomic, strong, nullable) SDLLanguage language;

Swift

@@ -133,8 +133,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLKeyboardLayout keyboardLayout;
+
@property (nonatomic, strong, nullable) SDLKeyboardLayout keyboardLayout;

Swift

@@ -156,7 +155,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLKeypressMode keypressMode;
+
@property (nonatomic, strong, nullable) SDLKeypressMode keypressMode;

Swift

@@ -176,8 +175,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSString *> *limitedCharacterList;
+
@property (nonatomic, strong, nullable) NSArray<NSString *> *limitedCharacterList;

Swift

@@ -197,7 +195,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *autoCompleteText;
+
@property (nonatomic, strong, nullable) NSString *autoCompleteText;

Swift

@@ -217,8 +215,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSString *> *autoCompleteList;
+
@property (nonatomic, strong, nullable) NSArray<NSString *> *autoCompleteList;

Swift

diff --git a/docs/Classes/SDLLifecycleConfiguration.html b/docs/Classes/SDLLifecycleConfiguration.html index 46a4dcf68..ccb29aa51 100644 --- a/docs/Classes/SDLLifecycleConfiguration.html +++ b/docs/Classes/SDLLifecycleConfiguration.html @@ -197,7 +197,7 @@

Objective-C

-
@property (readonly, assign, nonatomic) BOOL tcpDebugMode;
+
@property (nonatomic, readonly) BOOL tcpDebugMode;

Swift

@@ -215,8 +215,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, null_resettable)
-    NSString *tcpDebugIPAddress;
+
@property (nonatomic, copy, readonly, null_resettable) NSString *tcpDebugIPAddress;

Swift

@@ -234,7 +233,7 @@

Objective-C

-
@property (readonly, assign, nonatomic) UInt16 tcpDebugPort;
+
@property (nonatomic, readonly) UInt16 tcpDebugPort;

Swift

@@ -252,7 +251,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSString *_Nonnull appName;
+
@property (nonatomic, copy) NSString *_Nonnull appName;

Swift

@@ -277,7 +276,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSString *_Nonnull appId;
+
@property (nonatomic, copy, readonly) NSString *_Nonnull appId;

Swift

@@ -299,7 +298,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable) NSString *fullAppId;
+
@property (nonatomic, copy, readonly, nullable) NSString *fullAppId;

Swift

@@ -317,7 +316,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *resumeHash;
+
@property (nonatomic, copy, nullable) NSString *resumeHash;

Swift

@@ -335,7 +334,7 @@

Objective-C

-
@property (readonly, assign, nonatomic) BOOL isMedia;
+
@property (nonatomic, readonly) BOOL isMedia;

Swift

@@ -353,7 +352,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, null_resettable) SDLAppHMIType appType;
+
@property (nonatomic, strong, null_resettable) SDLAppHMIType appType;

Swift

@@ -371,8 +370,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    NSArray<SDLAppHMIType> *additionalAppTypes;
+
@property (nonatomic, copy, nullable) NSArray<SDLAppHMIType> *additionalAppTypes;

Swift

@@ -390,7 +388,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLLanguage _Nonnull language;
+
@property (nonatomic, strong) SDLLanguage _Nonnull language;

Swift

@@ -408,8 +406,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSArray<SDLLanguage> *_Nonnull languagesSupported;
+
@property (nonatomic, strong) NSArray<SDLLanguage> *_Nonnull languagesSupported;

Swift

@@ -427,7 +424,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLFile *appIcon;
+
@property (nonatomic, strong, nullable) SDLFile *appIcon;

Swift

@@ -445,7 +442,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *shortAppName;
+
@property (nonatomic, copy, nullable) NSString *shortAppName;

Swift

@@ -463,7 +460,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSArray<SDLTTSChunk *> *ttsName;
+
@property (nonatomic, copy, nullable) NSArray<SDLTTSChunk *> *ttsName;

Swift

@@ -481,8 +478,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    NSArray<NSString *> *voiceRecognitionCommandNames;
+
@property (nonatomic, copy, nullable) NSArray<NSString *> *voiceRecognitionCommandNames;

Swift

@@ -500,8 +496,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    SDLTemplateColorScheme *dayColorScheme;
+
@property (nonatomic, copy, nullable) SDLTemplateColorScheme *dayColorScheme;

Swift

@@ -519,8 +514,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    SDLTemplateColorScheme *nightColorScheme;
+
@property (nonatomic, copy, nullable) SDLTemplateColorScheme *nightColorScheme;

Swift

@@ -538,8 +532,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVersion *_Nonnull minimumProtocolVersion;
+
@property (nonatomic, strong) SDLVersion *_Nonnull minimumProtocolVersion;

Swift

@@ -557,7 +550,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLVersion *_Nonnull minimumRPCVersion;
+
@property (nonatomic, strong) SDLVersion *_Nonnull minimumRPCVersion;

Swift

@@ -579,8 +572,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic)
-    SDLSecondaryTransports allowedSecondaryTransports;
+
@property (nonatomic) SDLSecondaryTransports allowedSecondaryTransports;

Swift

diff --git a/docs/Classes/SDLLifecycleConfigurationUpdate.html b/docs/Classes/SDLLifecycleConfigurationUpdate.html index 73f05c59c..ef32e4520 100644 --- a/docs/Classes/SDLLifecycleConfigurationUpdate.html +++ b/docs/Classes/SDLLifecycleConfigurationUpdate.html @@ -26,7 +26,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *appName;
+
@property (nonatomic, copy, nullable) NSString *appName;

Swift

@@ -44,7 +44,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *shortAppName;
+
@property (nonatomic, copy, nullable) NSString *shortAppName;

Swift

@@ -62,7 +62,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSArray<SDLTTSChunk *> *ttsName;
+
@property (nonatomic, copy, nullable) NSArray<SDLTTSChunk *> *ttsName;

Swift

@@ -80,8 +80,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    NSArray<NSString *> *voiceRecognitionCommandNames;
+
@property (nonatomic, copy, nullable) NSArray<NSString *> *voiceRecognitionCommandNames;

Swift

diff --git a/docs/Classes/SDLLightCapabilities.html b/docs/Classes/SDLLightCapabilities.html index b4b35a03a..92608379f 100644 --- a/docs/Classes/SDLLightCapabilities.html +++ b/docs/Classes/SDLLightCapabilities.html @@ -93,7 +93,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLLightName _Nonnull name;
+
@property (nonatomic, strong) SDLLightName _Nonnull name;

Swift

@@ -113,8 +113,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *densityAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *densityAvailable;

Swift

@@ -134,8 +133,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *colorAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *colorAvailable;

Swift

@@ -156,8 +154,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *statusAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *statusAvailable;

Swift

diff --git a/docs/Classes/SDLLightControlCapabilities.html b/docs/Classes/SDLLightControlCapabilities.html index ed1ab49b9..c62841b10 100644 --- a/docs/Classes/SDLLightControlCapabilities.html +++ b/docs/Classes/SDLLightControlCapabilities.html @@ -97,7 +97,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull moduleName;
+
@property (nonatomic, strong) NSString *_Nonnull moduleName;

Swift

@@ -117,8 +117,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSArray<SDLLightCapabilities *> *_Nonnull supportedLights;
+
@property (nonatomic, strong) NSArray<SDLLightCapabilities *> *_Nonnull supportedLights;

Swift

@@ -138,7 +137,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLModuleInfo *moduleInfo;
+
@property (nonatomic, strong, nullable) SDLModuleInfo *moduleInfo;

Swift

diff --git a/docs/Classes/SDLLightControlData.html b/docs/Classes/SDLLightControlData.html index 5eec57094..79fdcf081 100644 --- a/docs/Classes/SDLLightControlData.html +++ b/docs/Classes/SDLLightControlData.html @@ -55,8 +55,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSArray<SDLLightState *> *_Nonnull lightState;
+
@property (nonatomic, strong) NSArray<SDLLightState *> *_Nonnull lightState;

Swift

diff --git a/docs/Classes/SDLLightState.html b/docs/Classes/SDLLightState.html index 193efd0fd..1a2254efa 100644 --- a/docs/Classes/SDLLightState.html +++ b/docs/Classes/SDLLightState.html @@ -133,7 +133,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLLightName _Nonnull id;
+
@property (nonatomic, strong) SDLLightName _Nonnull id;

Swift

@@ -153,7 +153,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLLightStatus _Nonnull status;
+
@property (nonatomic, strong) SDLLightStatus _Nonnull status;

Swift

@@ -173,7 +173,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSNumber<SDLFloat> *density;
+
@property (nonatomic, copy, nullable) NSNumber<SDLFloat> *density;

Swift

@@ -193,7 +193,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLRGBColor *color;
+
@property (nonatomic, strong, nullable) SDLRGBColor *color;

Swift

diff --git a/docs/Classes/SDLListFilesResponse.html b/docs/Classes/SDLListFilesResponse.html index 772828c83..3d05fb086 100644 --- a/docs/Classes/SDLListFilesResponse.html +++ b/docs/Classes/SDLListFilesResponse.html @@ -24,8 +24,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<NSString *> *filenames;
+
@property (nonatomic, strong, nullable) NSArray<NSString *> *filenames;

Swift

@@ -43,8 +42,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *spaceAvailable;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *spaceAvailable;

Swift

diff --git a/docs/Classes/SDLLocationCoordinate.html b/docs/Classes/SDLLocationCoordinate.html index 860d59928..cce54b67b 100644 --- a/docs/Classes/SDLLocationCoordinate.html +++ b/docs/Classes/SDLLocationCoordinate.html @@ -55,8 +55,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic)
-    NSNumber<SDLFloat> *_Nonnull latitudeDegrees;
+
@property (nonatomic, copy) NSNumber<SDLFloat> *_Nonnull latitudeDegrees;

Swift

@@ -76,8 +75,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic)
-    NSNumber<SDLFloat> *_Nonnull longitudeDegrees;
+
@property (nonatomic, copy) NSNumber<SDLFloat> *_Nonnull longitudeDegrees;

Swift

diff --git a/docs/Classes/SDLLocationDetails.html b/docs/Classes/SDLLocationDetails.html index 237691179..7e89c9292 100644 --- a/docs/Classes/SDLLocationDetails.html +++ b/docs/Classes/SDLLocationDetails.html @@ -110,8 +110,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLLocationCoordinate *coordinate;
+
@property (nonatomic, strong, nullable) SDLLocationCoordinate *coordinate;

Swift

@@ -131,7 +130,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *locationName;
+
@property (nonatomic, copy, nullable) NSString *locationName;

Swift

@@ -151,8 +150,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable)
-    NSArray<NSString *> *addressLines;
+
@property (nonatomic, copy, nullable) NSArray<NSString *> *addressLines;

Swift

@@ -172,7 +170,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *locationDescription;
+
@property (nonatomic, copy, nullable) NSString *locationDescription;

Swift

@@ -192,7 +190,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *phoneNumber;
+
@property (nonatomic, copy, nullable) NSString *phoneNumber;

Swift

@@ -217,7 +215,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *locationImage;
+
@property (nonatomic, strong, nullable) SDLImage *locationImage;

Swift

@@ -242,8 +240,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLOasisAddress *searchAddress;
+
@property (nonatomic, strong, nullable) SDLOasisAddress *searchAddress;

Swift

diff --git a/docs/Classes/SDLLockScreenConfiguration.html b/docs/Classes/SDLLockScreenConfiguration.html index 1835aef07..65ea188a1 100644 --- a/docs/Classes/SDLLockScreenConfiguration.html +++ b/docs/Classes/SDLLockScreenConfiguration.html @@ -33,8 +33,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic)
-    SDLLockScreenConfigurationDisplayMode displayMode;
+
@property (nonatomic) SDLLockScreenConfigurationDisplayMode displayMode;

Swift

@@ -63,7 +62,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) BOOL showInOptionalState;
+
@property (nonatomic) BOOL showInOptionalState;

Swift

@@ -81,7 +80,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) BOOL enableDismissGesture;
+
@property (nonatomic) BOOL enableDismissGesture;

Swift

@@ -99,7 +98,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) BOOL showDeviceLogo;
+
@property (nonatomic) BOOL showDeviceLogo;

Swift

@@ -119,7 +118,7 @@

Objective-C

-
@property (readonly, assign, nonatomic) BOOL enableAutomaticLockScreen;
+
@property (nonatomic, readonly) BOOL enableAutomaticLockScreen;

Swift

@@ -137,7 +136,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) UIColor *_Nonnull backgroundColor;
+
@property (nonatomic, copy, readonly) UIColor *_Nonnull backgroundColor;

Swift

@@ -155,7 +154,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable) UIImage *appIcon;
+
@property (nonatomic, copy, readonly, nullable) UIImage *appIcon;

Swift

@@ -173,8 +172,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable)
-    UIViewController *customViewController;
+
@property (nonatomic, strong, readonly, nullable) UIViewController *customViewController;

Swift

diff --git a/docs/Classes/SDLLockScreenViewController.html b/docs/Classes/SDLLockScreenViewController.html index caee72ccb..309c1162b 100644 --- a/docs/Classes/SDLLockScreenViewController.html +++ b/docs/Classes/SDLLockScreenViewController.html @@ -26,7 +26,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) UIImage *appIcon;
+
@property (nonatomic, copy, nullable) UIImage *appIcon;

Swift

@@ -44,7 +44,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) UIImage *vehicleIcon;
+
@property (nonatomic, copy, nullable) UIImage *vehicleIcon;

Swift

@@ -62,7 +62,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) UIColor *backgroundColor;
+
@property (nonatomic, copy, nullable) UIColor *backgroundColor;

Swift

@@ -80,7 +80,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *lockedLabelText;
+
@property (nonatomic, copy, nullable) NSString *lockedLabelText;

Swift

diff --git a/docs/Classes/SDLLogConfiguration.html b/docs/Classes/SDLLogConfiguration.html index fb3a7db00..98e829fcc 100644 --- a/docs/Classes/SDLLogConfiguration.html +++ b/docs/Classes/SDLLogConfiguration.html @@ -30,8 +30,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic)
-    NSSet<SDLLogFileModule *> *_Nonnull modules;
+
@property (nonatomic, copy) NSSet<SDLLogFileModule *> *_Nonnull modules;

Swift

@@ -49,7 +48,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSSet<id<SDLLogTarget>> *_Nonnull targets;
+
@property (nonatomic, copy) NSSet<id<SDLLogTarget>> *_Nonnull targets;

Swift

@@ -67,7 +66,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic) NSSet<SDLLogFilter *> *_Nonnull filters;
+
@property (nonatomic, copy) NSSet<SDLLogFilter *> *_Nonnull filters;

Swift

@@ -85,7 +84,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) SDLLogFormatType formatType;
+
@property (nonatomic) SDLLogFormatType formatType;

Swift

@@ -103,8 +102,8 @@

Objective-C

-
@property (getter=isAsynchronous, assign, readwrite, nonatomic)
-    BOOL asynchronous;
+
@property (nonatomic, assign, unsafe_unretained, readwrite,
+          getter=isAsynchronous) BOOL asynchronous;

Swift

@@ -122,8 +121,8 @@

Objective-C

-
@property (getter=areErrorsAsynchronous, assign, readwrite, nonatomic)
-    BOOL errorsAsynchronous;
+
@property (nonatomic, assign, unsafe_unretained, readwrite,
+          getter=areErrorsAsynchronous) BOOL errorsAsynchronous;

Swift

@@ -141,8 +140,8 @@

Objective-C

-
@property (getter=areAssertionsDisabled, assign, readwrite, nonatomic)
-    BOOL disableAssertions;
+
@property (nonatomic, assign, unsafe_unretained, readwrite,
+          getter=areAssertionsDisabled) BOOL disableAssertions;

Swift

@@ -161,7 +160,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) SDLLogLevel globalLogLevel;
+
@property (nonatomic) SDLLogLevel globalLogLevel;

Swift

diff --git a/docs/Classes/SDLLogFileModule.html b/docs/Classes/SDLLogFileModule.html index d96be7558..0988a7f50 100644 --- a/docs/Classes/SDLLogFileModule.html +++ b/docs/Classes/SDLLogFileModule.html @@ -28,7 +28,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSString *_Nonnull name;
+
@property (nonatomic, copy, readonly) NSString *_Nonnull name;

Swift

@@ -46,7 +46,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSSet<NSString *> *_Nonnull files;
+
@property (nonatomic, copy, readonly) NSSet<NSString *> *_Nonnull files;

Swift

@@ -64,7 +64,7 @@

Objective-C

-
@property (assign, readwrite, nonatomic) SDLLogLevel logLevel;
+
@property (nonatomic) SDLLogLevel logLevel;

Swift

diff --git a/docs/Classes/SDLLogFilter.html b/docs/Classes/SDLLogFilter.html index b0d6b201f..c07c16ff6 100644 --- a/docs/Classes/SDLLogFilter.html +++ b/docs/Classes/SDLLogFilter.html @@ -31,7 +31,7 @@

Objective-C

-
@property (readonly, strong, nonatomic) SDLLogFilterBlock _Nonnull filter;
+
@property (nonatomic, strong, readonly) SDLLogFilterBlock _Nonnull filter;

Swift

diff --git a/docs/Classes/SDLLogManager.html b/docs/Classes/SDLLogManager.html index b3fc6ae59..181d90f5d 100644 --- a/docs/Classes/SDLLogManager.html +++ b/docs/Classes/SDLLogManager.html @@ -41,8 +41,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    NSSet<SDLLogFileModule *> *_Nonnull modules;
+
@property (nonatomic, copy, readonly) NSSet<SDLLogFileModule *> *_Nonnull modules;

Swift

@@ -60,7 +59,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSSet<id<SDLLogTarget>> *_Nonnull targets;
+
@property (nonatomic, copy, readonly) NSSet<id<SDLLogTarget>> *_Nonnull targets;

Swift

@@ -78,7 +77,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSSet<SDLLogFilter *> *_Nonnull filters;
+
@property (nonatomic, copy, readonly) NSSet<SDLLogFilter *> *_Nonnull filters;

Swift

@@ -96,7 +95,7 @@

Objective-C

-
@property (readonly, assign, nonatomic) SDLLogLevel globalLogLevel;
+
@property (nonatomic, readonly) SDLLogLevel globalLogLevel;

Swift

@@ -114,7 +113,7 @@

Objective-C

-
@property (readonly, assign, nonatomic) SDLLogFormatType formatType;
+
@property (nonatomic, readonly) SDLLogFormatType formatType;

Swift

@@ -134,7 +133,7 @@

Objective-C

-
@property (readonly, getter=isAsynchronous, assign, nonatomic) BOOL asynchronous;
+
@property (nonatomic, readonly, getter=isAsynchronous) BOOL asynchronous;

Swift

@@ -154,8 +153,8 @@

Objective-C

-
@property (readonly, getter=areErrorsAsynchronous, assign, nonatomic)
-    BOOL errorsAsynchronous;
+
@property (nonatomic, assign, unsafe_unretained, readonly,
+          getter=areErrorsAsynchronous) BOOL errorsAsynchronous;

Swift

@@ -173,8 +172,8 @@

Objective-C

-
@property (readonly, getter=areAssertionsDisabled, assign, nonatomic)
-    BOOL disableAssertions;
+
@property (nonatomic, assign, unsafe_unretained, readonly,
+          getter=areAssertionsDisabled) BOOL disableAssertions;

Swift

@@ -192,8 +191,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, class)
-    NSDateFormatter *_Nonnull dateFormatter;
+
@property (class, nonatomic, strong, readonly) NSDateFormatter *_Nonnull dateFormatter;

Swift

@@ -211,8 +209,7 @@

Objective-C

-
@property (readonly, assign, nonatomic, class)
-    dispatch_queue_t _Nonnull logQueue;
+
@property (class, nonatomic, readonly) dispatch_queue_t _Nonnull logQueue;

Swift

diff --git a/docs/Classes/SDLManager.html b/docs/Classes/SDLManager.html index 269ac8d66..9ae82874e 100644 --- a/docs/Classes/SDLManager.html +++ b/docs/Classes/SDLManager.html @@ -46,7 +46,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) SDLConfiguration *_Nonnull configuration;
+
@property (nonatomic, copy, readonly) SDLConfiguration *_Nonnull configuration;

Swift

@@ -64,7 +64,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable) SDLHMILevel hmiLevel;
+
@property (nonatomic, copy, readonly, nullable) SDLHMILevel hmiLevel;

Swift

@@ -82,8 +82,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    SDLAudioStreamingState _Nonnull audioStreamingState;
+
@property (nonatomic, copy, readonly) SDLAudioStreamingState _Nonnull audioStreamingState;

Swift

@@ -101,7 +100,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) SDLSystemContext _Nonnull systemContext;
+
@property (nonatomic, copy, readonly) SDLSystemContext _Nonnull systemContext;

Swift

@@ -119,7 +118,7 @@

Objective-C

-
@property (readonly, strong, nonatomic) SDLFileManager *_Nonnull fileManager;
+
@property (nonatomic, strong, readonly) SDLFileManager *_Nonnull fileManager;

Swift

@@ -137,8 +136,7 @@

Objective-C

-
@property (readonly, strong, nonatomic)
-    SDLPermissionManager *_Nonnull permissionManager;
+
@property (nonatomic, strong, readonly) SDLPermissionManager *_Nonnull permissionManager;

Swift

@@ -156,8 +154,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable)
-    SDLStreamingMediaManager *streamManager;
+
@property (nonatomic, strong, readonly, nullable) SDLStreamingMediaManager *streamManager;

Swift

@@ -175,7 +172,7 @@

Objective-C

-
@property (readonly, strong, nonatomic) SDLScreenManager *_Nonnull screenManager;
+
@property (nonatomic, strong, readonly) SDLScreenManager *_Nonnull screenManager;

Swift

@@ -193,8 +190,7 @@

Objective-C

-
@property (readonly, strong, nonatomic)
-    SDLSystemCapabilityManager *_Nonnull systemCapabilityManager;
+
@property (nonatomic, strong, readonly) SDLSystemCapabilityManager *_Nonnull systemCapabilityManager;

Swift

@@ -212,8 +208,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable)
-    SDLRegisterAppInterfaceResponse *registerResponse;
+
@property (nonatomic, strong, readonly, nullable) SDLRegisterAppInterfaceResponse *registerResponse;

Swift

@@ -231,7 +226,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable) NSString *authToken;
+
@property (nonatomic, strong, readonly, nullable) NSString *authToken;

Swift

@@ -249,7 +244,7 @@

Objective-C

-
@property (readwrite, nonatomic, nullable) id<SDLManagerDelegate> delegate;
+
@property (nonatomic, weak, nullable) id<SDLManagerDelegate> delegate;
@@ -264,8 +259,7 @@

Objective-C

-
@property (readonly, copy, nonatomic)
-    NSArray<__kindof NSOperation *> *_Nonnull pendingRPCTransactions;
+
@property (nonatomic, copy, readonly) NSArray<__kindof NSOperation *> *_Nonnull pendingRPCTransactions;

Swift

@@ -284,7 +278,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable) SDLProxy *proxy;
+
@property (nonatomic, strong, readonly, nullable) SDLProxy *proxy;

Swift

diff --git a/docs/Classes/SDLMassageCushionFirmness.html b/docs/Classes/SDLMassageCushionFirmness.html index e70d0b228..c405ab0cf 100644 --- a/docs/Classes/SDLMassageCushionFirmness.html +++ b/docs/Classes/SDLMassageCushionFirmness.html @@ -59,7 +59,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLMassageCushion _Nonnull cushion;
+
@property (nonatomic, strong) SDLMassageCushion _Nonnull cushion;

Swift

@@ -79,7 +79,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull firmness;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull firmness;

Swift

diff --git a/docs/Classes/SDLMassageModeData.html b/docs/Classes/SDLMassageModeData.html index a54492fb0..7d0826a08 100644 --- a/docs/Classes/SDLMassageModeData.html +++ b/docs/Classes/SDLMassageModeData.html @@ -47,7 +47,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLMassageMode _Nonnull massageMode;
+
@property (nonatomic, strong) SDLMassageMode _Nonnull massageMode;

Swift

@@ -70,7 +70,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLMassageZone _Nonnull massageZone;
+
@property (nonatomic, strong) SDLMassageZone _Nonnull massageZone;

Swift

diff --git a/docs/Classes/SDLMediaServiceData.html b/docs/Classes/SDLMediaServiceData.html index dc5ca39eb..acac7a03d 100644 --- a/docs/Classes/SDLMediaServiceData.html +++ b/docs/Classes/SDLMediaServiceData.html @@ -163,7 +163,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *mediaImage;
+
@property (nonatomic, strong, nullable) SDLImage *mediaImage;

Swift

@@ -183,7 +183,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLMediaType mediaType;
+
@property (nonatomic, strong, nullable) SDLMediaType mediaType;

Swift

@@ -205,7 +205,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *mediaTitle;
+
@property (nonatomic, strong, nullable) NSString *mediaTitle;

Swift

@@ -227,7 +227,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *mediaArtist;
+
@property (nonatomic, strong, nullable) NSString *mediaArtist;

Swift

@@ -249,7 +249,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *mediaAlbum;
+
@property (nonatomic, strong, nullable) NSString *mediaAlbum;

Swift

@@ -271,7 +271,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *playlistName;
+
@property (nonatomic, strong, nullable) NSString *playlistName;

Swift

@@ -291,7 +291,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *isExplicit;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *isExplicit;

Swift

@@ -313,8 +313,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *trackPlaybackProgress;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *trackPlaybackProgress;

Swift

@@ -336,8 +335,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *trackPlaybackDuration;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *trackPlaybackDuration;

Swift

@@ -359,8 +357,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *queuePlaybackProgress;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *queuePlaybackProgress;

Swift

@@ -382,8 +379,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *queuePlaybackDuration;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *queuePlaybackDuration;

Swift

@@ -405,8 +401,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *queueCurrentTrackNumber;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *queueCurrentTrackNumber;

Swift

@@ -428,8 +423,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *queueTotalTrackCount;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *queueTotalTrackCount;

Swift

diff --git a/docs/Classes/SDLMenuCell.html b/docs/Classes/SDLMenuCell.html index 84aa5e43a..d69f73b19 100644 --- a/docs/Classes/SDLMenuCell.html +++ b/docs/Classes/SDLMenuCell.html @@ -30,7 +30,7 @@

Objective-C

-
@property (readonly, copy, nonatomic) NSString *_Nonnull title;
+
@property (nonatomic, copy, readonly) NSString *_Nonnull title;

Swift

@@ -48,7 +48,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable) SDLArtwork *icon;
+
@property (nonatomic, strong, readonly, nullable) SDLArtwork *icon;

Swift

@@ -66,8 +66,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable)
-    NSArray<NSString *> *voiceCommands;
+
@property (nonatomic, copy, readonly, nullable) NSArray<NSString *> *voiceCommands;

Swift

@@ -85,8 +84,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable)
-    SDLMenuCellSelectionHandler handler;
+
@property (nonatomic, copy, readonly, nullable) SDLMenuCellSelectionHandler handler;

Swift

@@ -104,7 +102,7 @@

Objective-C

-
@property (readonly, copy, nonatomic, nullable) NSArray<SDLMenuCell *> *subCells;
+
@property (nonatomic, copy, readonly, nullable) NSArray<SDLMenuCell *> *subCells;

Swift

@@ -122,7 +120,7 @@

Objective-C

-
@property (readonly, strong, nonatomic, nullable) SDLMenuLayout submenuLayout;
+
@property (nonatomic, strong, readonly, nullable) SDLMenuLayout submenuLayout;

Swift

diff --git a/docs/Classes/SDLMenuConfiguration.html b/docs/Classes/SDLMenuConfiguration.html index 9bfff1caa..75789e292 100644 --- a/docs/Classes/SDLMenuConfiguration.html +++ b/docs/Classes/SDLMenuConfiguration.html @@ -23,7 +23,7 @@

Objective-C

-
@property (readonly, strong, nonatomic) SDLMenuLayout _Nonnull mainMenuLayout;
+
@property (nonatomic, strong, readonly) SDLMenuLayout _Nonnull mainMenuLayout;

Swift

@@ -41,8 +41,7 @@

Objective-C

-
@property (readonly, strong, nonatomic)
-    SDLMenuLayout _Nonnull defaultSubmenuLayout;
+
@property (nonatomic, strong, readonly) SDLMenuLayout _Nonnull defaultSubmenuLayout;

Swift

diff --git a/docs/Classes/SDLMenuParams.html b/docs/Classes/SDLMenuParams.html index 696d91658..3d58ca5ad 100644 --- a/docs/Classes/SDLMenuParams.html +++ b/docs/Classes/SDLMenuParams.html @@ -91,7 +91,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *parentID;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *parentID;

Swift

@@ -119,7 +119,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *position;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *position;

Swift

@@ -139,7 +139,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSString *_Nonnull menuName;
+
@property (nonatomic, strong) NSString *_Nonnull menuName;

Swift

diff --git a/docs/Classes/SDLMetadataTags.html b/docs/Classes/SDLMetadataTags.html index 1fda03d92..53966ef12 100644 --- a/docs/Classes/SDLMetadataTags.html +++ b/docs/Classes/SDLMetadataTags.html @@ -72,8 +72,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLMetadataType> *mainField1;
+
@property (nonatomic, strong, nullable) NSArray<SDLMetadataType> *mainField1;

Swift

@@ -95,8 +94,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLMetadataType> *mainField2;
+
@property (nonatomic, strong, nullable) NSArray<SDLMetadataType> *mainField2;

Swift

@@ -118,8 +116,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLMetadataType> *mainField3;
+
@property (nonatomic, strong, nullable) NSArray<SDLMetadataType> *mainField3;

Swift

@@ -141,8 +138,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLMetadataType> *mainField4;
+
@property (nonatomic, strong, nullable) NSArray<SDLMetadataType> *mainField4;

Swift

diff --git a/docs/Classes/SDLModuleData.html b/docs/Classes/SDLModuleData.html index 40a392045..6c43c42c3 100644 --- a/docs/Classes/SDLModuleData.html +++ b/docs/Classes/SDLModuleData.html @@ -206,7 +206,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLModuleType _Nonnull moduleType;
+
@property (nonatomic, strong) SDLModuleType _Nonnull moduleType;

Swift

@@ -226,7 +226,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *moduleId;
+
@property (nonatomic, strong, nullable) NSString *moduleId;

Swift

@@ -246,8 +246,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLRadioControlData *radioControlData;
+
@property (nonatomic, strong, nullable) SDLRadioControlData *radioControlData;

Swift

@@ -267,8 +266,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLClimateControlData *climateControlData;
+
@property (nonatomic, strong, nullable) SDLClimateControlData *climateControlData;

Swift

@@ -288,8 +286,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLSeatControlData *seatControlData;
+
@property (nonatomic, strong, nullable) SDLSeatControlData *seatControlData;

Swift

@@ -309,8 +306,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLAudioControlData *audioControlData;
+
@property (nonatomic, strong, nullable) SDLAudioControlData *audioControlData;

Swift

@@ -330,8 +326,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLLightControlData *lightControlData;
+
@property (nonatomic, strong, nullable) SDLLightControlData *lightControlData;

Swift

@@ -351,8 +346,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLHMISettingsControlData *hmiSettingsControlData;
+
@property (nonatomic, strong, nullable) SDLHMISettingsControlData *hmiSettingsControlData;

Swift

diff --git a/docs/Classes/SDLModuleInfo.html b/docs/Classes/SDLModuleInfo.html index 9a8174c2c..de9762fdf 100644 --- a/docs/Classes/SDLModuleInfo.html +++ b/docs/Classes/SDLModuleInfo.html @@ -31,7 +31,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *moduleId;
+
@property (nonatomic, strong, nullable) NSString *moduleId;

Swift

@@ -50,7 +50,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLGrid *location;
+
@property (nonatomic, strong, nullable) SDLGrid *location;

Swift

@@ -69,7 +69,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLGrid *serviceArea;
+
@property (nonatomic, strong, nullable) SDLGrid *serviceArea;

Swift

@@ -89,8 +89,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *allowMultipleAccess;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *allowMultipleAccess;

Swift

diff --git a/docs/Classes/SDLMsgVersion.html b/docs/Classes/SDLMsgVersion.html index 09bff69e2..29336589a 100644 --- a/docs/Classes/SDLMsgVersion.html +++ b/docs/Classes/SDLMsgVersion.html @@ -61,7 +61,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull majorVersion;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull majorVersion;

Swift

@@ -81,7 +81,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull minorVersion;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull minorVersion;

Swift

@@ -101,8 +101,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *patchVersion;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *patchVersion;

Swift

diff --git a/docs/Classes/SDLMyKey.html b/docs/Classes/SDLMyKey.html index e5a87835a..99705211d 100644 --- a/docs/Classes/SDLMyKey.html +++ b/docs/Classes/SDLMyKey.html @@ -21,8 +21,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLVehicleDataStatus _Nonnull e911Override;
+
@property (nonatomic, strong) SDLVehicleDataStatus _Nonnull e911Override;

Swift

diff --git a/docs/Classes/SDLNavigationCapability.html b/docs/Classes/SDLNavigationCapability.html index f66ad5dbd..67cee4997 100644 --- a/docs/Classes/SDLNavigationCapability.html +++ b/docs/Classes/SDLNavigationCapability.html @@ -55,7 +55,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSNumber *sendLocationEnabled;
+
@property (nonatomic, copy, nullable) NSNumber *sendLocationEnabled;

Swift

@@ -75,7 +75,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSNumber *getWayPointsEnabled;
+
@property (nonatomic, copy, nullable) NSNumber *getWayPointsEnabled;

Swift

diff --git a/docs/Classes/SDLNavigationInstruction.html b/docs/Classes/SDLNavigationInstruction.html index a340ab4b0..cd92064e3 100644 --- a/docs/Classes/SDLNavigationInstruction.html +++ b/docs/Classes/SDLNavigationInstruction.html @@ -112,8 +112,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLLocationDetails *_Nonnull locationDetails;
+
@property (nonatomic, strong) SDLLocationDetails *_Nonnull locationDetails;

Swift

@@ -133,7 +132,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLNavigationAction _Nonnull action;
+
@property (nonatomic, strong) SDLNavigationAction _Nonnull action;

Swift

@@ -153,7 +152,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLDateTime *eta;
+
@property (nonatomic, strong, nullable) SDLDateTime *eta;

Swift

@@ -173,7 +172,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *bearing;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *bearing;

Swift

@@ -193,8 +192,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLNavigationJunction junctionType;
+
@property (nonatomic, strong, nullable) SDLNavigationJunction junctionType;

Swift

@@ -214,7 +212,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLDirection drivingSide;
+
@property (nonatomic, strong, nullable) SDLDirection drivingSide;

Swift

@@ -234,7 +232,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *details;
+
@property (nonatomic, strong, nullable) NSString *details;

Swift

@@ -254,7 +252,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLImage *image;
+
@property (nonatomic, strong, nullable) SDLImage *image;

Swift

diff --git a/docs/Classes/SDLNavigationServiceData.html b/docs/Classes/SDLNavigationServiceData.html index 1ef687192..eae0fa475 100644 --- a/docs/Classes/SDLNavigationServiceData.html +++ b/docs/Classes/SDLNavigationServiceData.html @@ -114,7 +114,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLDateTime *_Nonnull timestamp;
+
@property (nonatomic, strong) SDLDateTime *_Nonnull timestamp;

Swift

@@ -134,7 +134,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLLocationDetails *origin;
+
@property (nonatomic, strong, nullable) SDLLocationDetails *origin;

Swift

@@ -154,8 +154,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLLocationDetails *destination;
+
@property (nonatomic, strong, nullable) SDLLocationDetails *destination;

Swift

@@ -175,7 +174,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) SDLDateTime *destinationETA;
+
@property (nonatomic, strong, nullable) SDLDateTime *destinationETA;

Swift

@@ -195,8 +194,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSArray<SDLNavigationInstruction *> *instructions;
+
@property (nonatomic, strong, nullable) NSArray<SDLNavigationInstruction *> *instructions;

Swift

@@ -216,8 +214,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    SDLDateTime *nextInstructionETA;
+
@property (nonatomic, strong, nullable) SDLDateTime *nextInstructionETA;

Swift

@@ -237,8 +234,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLFloat> *nextInstructionDistance;
+
@property (nonatomic, strong, nullable) NSNumber<SDLFloat> *nextInstructionDistance;

Swift

@@ -258,8 +254,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLFloat> *nextInstructionDistanceScale;
+
@property (nonatomic, strong, nullable) NSNumber<SDLFloat> *nextInstructionDistanceScale;

Swift

@@ -279,7 +274,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *prompt;
+
@property (nonatomic, strong, nullable) NSString *prompt;

Swift

diff --git a/docs/Classes/SDLNavigationServiceManifest.html b/docs/Classes/SDLNavigationServiceManifest.html index 10cd6a0a2..dfc7bf842 100644 --- a/docs/Classes/SDLNavigationServiceManifest.html +++ b/docs/Classes/SDLNavigationServiceManifest.html @@ -51,8 +51,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLBool> *acceptsWayPoints;
+
@property (nonatomic, strong, nullable) NSNumber<SDLBool> *acceptsWayPoints;

Swift

diff --git a/docs/Classes/SDLOasisAddress.html b/docs/Classes/SDLOasisAddress.html index fbc65c018..37f0d16a4 100644 --- a/docs/Classes/SDLOasisAddress.html +++ b/docs/Classes/SDLOasisAddress.html @@ -118,7 +118,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *countryName;
+
@property (nonatomic, copy, nullable) NSString *countryName;

Swift

@@ -138,7 +138,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *countryCode;
+
@property (nonatomic, copy, nullable) NSString *countryCode;

Swift

@@ -158,7 +158,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *postalCode;
+
@property (nonatomic, copy, nullable) NSString *postalCode;

Swift

@@ -178,7 +178,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *administrativeArea;
+
@property (nonatomic, copy, nullable) NSString *administrativeArea;

Swift

@@ -198,7 +198,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *subAdministrativeArea;
+
@property (nonatomic, copy, nullable) NSString *subAdministrativeArea;

Swift

@@ -218,7 +218,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *locality;
+
@property (nonatomic, copy, nullable) NSString *locality;

Swift

@@ -238,7 +238,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *subLocality;
+
@property (nonatomic, copy, nullable) NSString *subLocality;

Swift

@@ -258,7 +258,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *thoroughfare;
+
@property (nonatomic, copy, nullable) NSString *thoroughfare;

Swift

@@ -278,7 +278,7 @@

Objective-C

-
@property (readwrite, copy, nonatomic, nullable) NSString *subThoroughfare;
+
@property (nonatomic, copy, nullable) NSString *subThoroughfare;

Swift

diff --git a/docs/Classes/SDLOnAppInterfaceUnregistered.html b/docs/Classes/SDLOnAppInterfaceUnregistered.html index f9192897d..c018c12ff 100644 --- a/docs/Classes/SDLOnAppInterfaceUnregistered.html +++ b/docs/Classes/SDLOnAppInterfaceUnregistered.html @@ -30,8 +30,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLAppInterfaceUnregisteredReason _Nonnull reason;
+
@property (nonatomic, strong) SDLAppInterfaceUnregisteredReason _Nonnull reason;

Swift

diff --git a/docs/Classes/SDLOnAppServiceData.html b/docs/Classes/SDLOnAppServiceData.html index 7a41fea67..fd3369862 100644 --- a/docs/Classes/SDLOnAppServiceData.html +++ b/docs/Classes/SDLOnAppServiceData.html @@ -52,7 +52,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLAppServiceData *_Nonnull serviceData;
+
@property (nonatomic, strong) SDLAppServiceData *_Nonnull serviceData;

Swift

diff --git a/docs/Classes/SDLOnButtonEvent.html b/docs/Classes/SDLOnButtonEvent.html index 97be7f300..56db7b761 100644 --- a/docs/Classes/SDLOnButtonEvent.html +++ b/docs/Classes/SDLOnButtonEvent.html @@ -56,7 +56,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLButtonName _Nonnull buttonName;
+
@property (nonatomic, strong) SDLButtonName _Nonnull buttonName;

Swift

@@ -74,8 +74,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLButtonEventMode _Nonnull buttonEventMode;
+
@property (nonatomic, strong) SDLButtonEventMode _Nonnull buttonEventMode;

Swift

@@ -97,8 +96,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *customButtonID;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *customButtonID;

Swift

diff --git a/docs/Classes/SDLOnButtonPress.html b/docs/Classes/SDLOnButtonPress.html index 65dd5ff60..877258357 100644 --- a/docs/Classes/SDLOnButtonPress.html +++ b/docs/Classes/SDLOnButtonPress.html @@ -45,7 +45,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLButtonName _Nonnull buttonName;
+
@property (nonatomic, strong) SDLButtonName _Nonnull buttonName;

Swift

@@ -65,8 +65,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLButtonPressMode _Nonnull buttonPressMode;
+
@property (nonatomic, strong) SDLButtonPressMode _Nonnull buttonPressMode;

Swift

@@ -88,8 +87,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable)
-    NSNumber<SDLInt> *customButtonID;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *customButtonID;

Swift

diff --git a/docs/Classes/SDLOnCommand.html b/docs/Classes/SDLOnCommand.html index c7d94bdc6..7f4af1dbe 100644 --- a/docs/Classes/SDLOnCommand.html +++ b/docs/Classes/SDLOnCommand.html @@ -31,7 +31,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull cmdID;
+
@property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull cmdID;

Swift

@@ -49,7 +49,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) SDLTriggerSource _Nonnull triggerSource;
+
@property (nonatomic, strong) SDLTriggerSource _Nonnull triggerSource;

Swift

diff --git a/docs/Classes/SDLOnDriverDistraction.html b/docs/Classes/SDLOnDriverDistraction.html index d70c53247..26ad20c90 100644 --- a/docs/Classes/SDLOnDriverDistraction.html +++ b/docs/Classes/SDLOnDriverDistraction.html @@ -33,8 +33,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    SDLDriverDistractionState _Nonnull state;
+
@property (nonatomic, strong) SDLDriverDistractionState _Nonnull state;

Swift

@@ -54,8 +53,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSNumber<SDLBool> *_Nonnull lockScreenDismissalEnabled;
+
@property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull lockScreenDismissalEnabled;

Swift

@@ -75,8 +73,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic)
-    NSString *_Nonnull lockScreenDismissalWarning;
+
@property (nonatomic, strong) NSString *_Nonnull lockScreenDismissalWarning;

Swift

diff --git a/docs/Classes/SDLOnEncodedSyncPData.html b/docs/Classes/SDLOnEncodedSyncPData.html index dc28f7f84..50c14b59f 100644 --- a/docs/Classes/SDLOnEncodedSyncPData.html +++ b/docs/Classes/SDLOnEncodedSyncPData.html @@ -23,7 +23,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic) NSArray<NSString *> *_Nonnull data;
+
@property (nonatomic, strong) NSArray<NSString *> *_Nonnull data;

Swift

@@ -41,7 +41,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSString *URL;
+
@property (nonatomic, strong, nullable) NSString *URL;

Swift

@@ -59,7 +59,7 @@

Objective-C

-
@property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *Timeout;
+
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *Timeout;

Swift

diff --git a/docs/Classes/SDLOnHMIStatus.html b/docs/Classes/SDLOnHMIStatus.html index 395459237..434a51c42 100644 --- a/docs/Classes/SDLOnHMIStatus.html +++ b/docs/Classes/SDLOnHMIStatus.html @@ -8,6 +8,7 @@

Section Contents

  • videoStreamingState
  • systemContext
  • windowID
  • +
  • -initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:
  • Overview

    @@ -34,7 +35,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLHMILevel _Nonnull hmiLevel;
    +
    @property (nonatomic, strong) SDLHMILevel _Nonnull hmiLevel;

    Swift

    @@ -54,8 +55,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLAudioStreamingState _Nonnull audioStreamingState;
    +
    @property (nonatomic, strong) SDLAudioStreamingState _Nonnull audioStreamingState;

    Swift

    @@ -73,8 +73,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVideoStreamingState videoStreamingState;
    +
    @property (nonatomic, strong, nullable) SDLVideoStreamingState videoStreamingState;

    Swift

    @@ -92,7 +91,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLSystemContext _Nonnull systemContext;
    +
    @property (nonatomic, strong) SDLSystemContext _Nonnull systemContext;

    Swift

    @@ -112,7 +111,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *windowID;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *windowID;

    Swift

    @@ -121,4 +120,40 @@

    Swift

    +

    + -initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID: +

    + +

    Initialize an SDLOnHMIStatus RPC with initial parameters

    + + + +

    Objective-C

    +
    - (nonnull instancetype)
    +       initWithHMILevel:(nonnull SDLHMILevel)hmiLevel
    +          systemContext:(nonnull SDLSystemContext)systemContext
    +    audioStreamingState:(nonnull SDLAudioStreamingState)audioStreamingState
    +    videoStreamingState:(nullable SDLVideoStreamingState)videoStreamingState
    +               windowID:(nullable NSNumber<SDLUInt> *)windowID;
    + + +

    Swift

    +
    init(hmiLevel: SDLHMILevel, systemContext: SDLSystemContext, audioStreamingState: SDLAudioStreamingState, videoStreamingState: SDLVideoStreamingState?, windowID: (NSNumber & SDLUInt)?)
    + + + +

    Parameters

    +
    +
    hmiLevel
    +

    The HMI level

    +
    systemContext
    +

    The system context

    +
    audioStreamingState
    +

    The ability for an audio app to be heard

    +
    videoStreamingState
    +

    The ability for a video straming app to stream

    +
    windowID
    +

    Which window this status relates to

    +
    + diff --git a/docs/Classes/SDLOnHashChange.html b/docs/Classes/SDLOnHashChange.html index 634493b84..39733f9be 100644 --- a/docs/Classes/SDLOnHashChange.html +++ b/docs/Classes/SDLOnHashChange.html @@ -21,7 +21,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull hashID;
    +
    @property (nonatomic, strong) NSString *_Nonnull hashID;

    Swift

    diff --git a/docs/Classes/SDLOnInteriorVehicleData.html b/docs/Classes/SDLOnInteriorVehicleData.html index 28af023c6..71ba991fb 100644 --- a/docs/Classes/SDLOnInteriorVehicleData.html +++ b/docs/Classes/SDLOnInteriorVehicleData.html @@ -23,7 +23,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLModuleData *_Nonnull moduleData;
    +
    @property (nonatomic, strong) SDLModuleData *_Nonnull moduleData;

    Swift

    diff --git a/docs/Classes/SDLOnKeyboardInput.html b/docs/Classes/SDLOnKeyboardInput.html index 85164f27f..8e34fcbf0 100644 --- a/docs/Classes/SDLOnKeyboardInput.html +++ b/docs/Classes/SDLOnKeyboardInput.html @@ -22,7 +22,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLKeyboardEvent _Nonnull event;
    +
    @property (nonatomic, strong) SDLKeyboardEvent _Nonnull event;

    Swift

    @@ -40,7 +40,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *data;
    +
    @property (nonatomic, strong, nullable) NSString *data;

    Swift

    diff --git a/docs/Classes/SDLOnLanguageChange.html b/docs/Classes/SDLOnLanguageChange.html index 055fd71f9..d86dacde4 100644 --- a/docs/Classes/SDLOnLanguageChange.html +++ b/docs/Classes/SDLOnLanguageChange.html @@ -24,7 +24,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLLanguage _Nonnull language;
    +
    @property (nonatomic, strong) SDLLanguage _Nonnull language;

    Swift

    @@ -42,7 +42,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLLanguage _Nonnull hmiDisplayLanguage;
    +
    @property (nonatomic, strong) SDLLanguage _Nonnull hmiDisplayLanguage;

    Swift

    diff --git a/docs/Classes/SDLOnLockScreenStatus.html b/docs/Classes/SDLOnLockScreenStatus.html index 14e778e69..81838fe5b 100644 --- a/docs/Classes/SDLOnLockScreenStatus.html +++ b/docs/Classes/SDLOnLockScreenStatus.html @@ -32,8 +32,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLBool> *_Nonnull driverDistractionStatus;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull driverDistractionStatus;

    Swift

    @@ -51,8 +50,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLBool> *_Nonnull userSelected;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull userSelected;

    Swift

    @@ -70,8 +68,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLLockScreenStatus _Nonnull lockScreenStatus;
    +
    @property (nonatomic, strong) SDLLockScreenStatus _Nonnull lockScreenStatus;

    Swift

    @@ -89,7 +86,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLHMILevel _Nonnull hmiLevel;
    +
    @property (nonatomic, strong) SDLHMILevel _Nonnull hmiLevel;

    Swift

    diff --git a/docs/Classes/SDLOnPermissionsChange.html b/docs/Classes/SDLOnPermissionsChange.html index 53de650bb..380713c84 100644 --- a/docs/Classes/SDLOnPermissionsChange.html +++ b/docs/Classes/SDLOnPermissionsChange.html @@ -26,8 +26,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<SDLPermissionItem *> *_Nonnull permissionItem;
    +
    @property (nonatomic, strong) NSArray<SDLPermissionItem *> *_Nonnull permissionItem;

    Swift

    @@ -47,8 +46,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *requireEncryption;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *requireEncryption;

    Swift

    diff --git a/docs/Classes/SDLOnRCStatus.html b/docs/Classes/SDLOnRCStatus.html index 024e238f2..6f8b77f19 100644 --- a/docs/Classes/SDLOnRCStatus.html +++ b/docs/Classes/SDLOnRCStatus.html @@ -34,8 +34,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<SDLModuleData *> *_Nonnull allocatedModules;
    +
    @property (nonatomic, strong) NSArray<SDLModuleData *> *_Nonnull allocatedModules;

    Swift

    @@ -60,8 +59,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<SDLModuleData *> *_Nonnull freeModules;
    +
    @property (nonatomic, strong) NSArray<SDLModuleData *> *_Nonnull freeModules;

    Swift

    @@ -82,7 +80,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *allowed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *allowed;

    Swift

    diff --git a/docs/Classes/SDLOnSyncPData.html b/docs/Classes/SDLOnSyncPData.html index f52e132d6..ca8c4b7cd 100644 --- a/docs/Classes/SDLOnSyncPData.html +++ b/docs/Classes/SDLOnSyncPData.html @@ -24,7 +24,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *URL;
    +
    @property (nonatomic, strong, nullable) NSString *URL;

    Swift

    @@ -44,7 +44,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *Timeout;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *Timeout;

    Swift

    diff --git a/docs/Classes/SDLOnSystemCapabilityUpdated.html b/docs/Classes/SDLOnSystemCapabilityUpdated.html index 6ee5129a8..c5ba1fb78 100644 --- a/docs/Classes/SDLOnSystemCapabilityUpdated.html +++ b/docs/Classes/SDLOnSystemCapabilityUpdated.html @@ -52,8 +52,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLSystemCapability *_Nonnull systemCapability;
    +
    @property (nonatomic, strong) SDLSystemCapability *_Nonnull systemCapability;

    Swift

    diff --git a/docs/Classes/SDLOnSystemRequest.html b/docs/Classes/SDLOnSystemRequest.html index cbe5a9d90..4b4f44f03 100644 --- a/docs/Classes/SDLOnSystemRequest.html +++ b/docs/Classes/SDLOnSystemRequest.html @@ -27,7 +27,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLRequestType _Nonnull requestType;
    +
    @property (nonatomic, strong) SDLRequestType _Nonnull requestType;

    Swift

    @@ -47,7 +47,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *requestSubType;
    +
    @property (nonatomic, strong, nullable) NSString *requestSubType;

    Swift

    @@ -65,7 +65,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *url;
    +
    @property (nonatomic, strong, nullable) NSString *url;

    Swift

    @@ -83,7 +83,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *timeout;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *timeout;

    Swift

    @@ -101,7 +101,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLFileType fileType;
    +
    @property (nonatomic, strong, nullable) SDLFileType fileType;

    Swift

    @@ -119,7 +119,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *offset;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *offset;

    Swift

    @@ -137,7 +137,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *length;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *length;

    Swift

    diff --git a/docs/Classes/SDLOnTBTClientState.html b/docs/Classes/SDLOnTBTClientState.html index 21e196924..71978975f 100644 --- a/docs/Classes/SDLOnTBTClientState.html +++ b/docs/Classes/SDLOnTBTClientState.html @@ -21,7 +21,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLTBTState _Nonnull state;
    +
    @property (nonatomic, strong) SDLTBTState _Nonnull state;

    Swift

    diff --git a/docs/Classes/SDLOnTouchEvent.html b/docs/Classes/SDLOnTouchEvent.html index 2c3e11146..e0b186eae 100644 --- a/docs/Classes/SDLOnTouchEvent.html +++ b/docs/Classes/SDLOnTouchEvent.html @@ -22,7 +22,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLTouchType _Nonnull type;
    +
    @property (nonatomic, strong) SDLTouchType _Nonnull type;

    Swift

    @@ -40,8 +40,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<SDLTouchEvent *> *_Nonnull event;
    +
    @property (nonatomic, strong) NSArray<SDLTouchEvent *> *_Nonnull event;

    Swift

    diff --git a/docs/Classes/SDLOnVehicleData.html b/docs/Classes/SDLOnVehicleData.html index cf5c7dfe2..15adc04f7 100644 --- a/docs/Classes/SDLOnVehicleData.html +++ b/docs/Classes/SDLOnVehicleData.html @@ -54,7 +54,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLGPSData *gps;
    +
    @property (nonatomic, strong, nullable) SDLGPSData *gps;

    Swift

    @@ -72,7 +72,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *speed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *speed;

    Swift

    @@ -90,7 +90,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *rpm;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *rpm;

    Swift

    @@ -108,7 +108,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *fuelLevel;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *fuelLevel;

    Swift

    @@ -126,8 +126,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLComponentVolumeStatus fuelLevel_State;
    +
    @property (nonatomic, strong, nullable) SDLComponentVolumeStatus fuelLevel_State;

    Swift

    @@ -147,8 +146,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLFuelRange *> *fuelRange;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLFuelRange *> *fuelRange;

    Swift

    @@ -166,8 +164,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *instantFuelConsumption;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *instantFuelConsumption;

    Swift

    @@ -185,8 +182,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *externalTemperature;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *externalTemperature;

    Swift

    @@ -204,7 +200,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *vin;
    +
    @property (nonatomic, strong, nullable) NSString *vin;

    Swift

    @@ -222,7 +218,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLPRNDL prndl;
    +
    @property (nonatomic, strong, nullable) SDLPRNDL prndl;

    Swift

    @@ -240,7 +236,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLTireStatus *tirePressure;
    +
    @property (nonatomic, strong, nullable) SDLTireStatus *tirePressure;

    Swift

    @@ -258,7 +254,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *odometer;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *odometer;

    Swift

    @@ -276,7 +272,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLBeltStatus *beltStatus;
    +
    @property (nonatomic, strong, nullable) SDLBeltStatus *beltStatus;

    Swift

    @@ -294,8 +290,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLBodyInformation *bodyInformation;
    +
    @property (nonatomic, strong, nullable) SDLBodyInformation *bodyInformation;

    Swift

    @@ -313,7 +308,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLDeviceStatus *deviceStatus;
    +
    @property (nonatomic, strong, nullable) SDLDeviceStatus *deviceStatus;

    Swift

    @@ -331,8 +326,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataEventStatus driverBraking;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataEventStatus driverBraking;

    Swift

    @@ -350,7 +344,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLWiperStatus wiperStatus;
    +
    @property (nonatomic, strong, nullable) SDLWiperStatus wiperStatus;

    Swift

    @@ -368,8 +362,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLHeadLampStatus *headLampStatus;
    +
    @property (nonatomic, strong, nullable) SDLHeadLampStatus *headLampStatus;

    Swift

    @@ -387,8 +380,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *engineOilLife;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *engineOilLife;

    Swift

    @@ -406,8 +398,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *engineTorque;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *engineTorque;

    Swift

    @@ -425,8 +416,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *accPedalPosition;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *accPedalPosition;

    Swift

    @@ -444,8 +434,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *steeringWheelAngle;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *steeringWheelAngle;

    Swift

    @@ -463,7 +452,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLECallInfo *eCallInfo;
    +
    @property (nonatomic, strong, nullable) SDLECallInfo *eCallInfo;

    Swift

    @@ -481,7 +470,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLAirbagStatus *airbagStatus;
    +
    @property (nonatomic, strong, nullable) SDLAirbagStatus *airbagStatus;

    Swift

    @@ -499,8 +488,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLEmergencyEvent *emergencyEvent;
    +
    @property (nonatomic, strong, nullable) SDLEmergencyEvent *emergencyEvent;

    Swift

    @@ -518,8 +506,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLClusterModeStatus *clusterModeStatus;
    +
    @property (nonatomic, strong, nullable) SDLClusterModeStatus *clusterModeStatus;

    Swift

    @@ -537,7 +524,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLMyKey *myKey;
    +
    @property (nonatomic, strong, nullable) SDLMyKey *myKey;

    Swift

    @@ -555,8 +542,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLElectronicParkBrakeStatus electronicParkBrakeStatus;
    +
    @property (nonatomic, strong, nullable) SDLElectronicParkBrakeStatus electronicParkBrakeStatus;

    Swift

    @@ -574,7 +560,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLTurnSignal turnSignal;
    +
    @property (nonatomic, strong, nullable) SDLTurnSignal turnSignal;

    Swift

    @@ -592,7 +578,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *cloudAppVehicleID;
    +
    @property (nonatomic, strong, nullable) NSString *cloudAppVehicleID;

    Swift

    diff --git a/docs/Classes/SDLOnWaypointChange.html b/docs/Classes/SDLOnWaypointChange.html index f2fc86610..35a2da3f5 100644 --- a/docs/Classes/SDLOnWaypointChange.html +++ b/docs/Classes/SDLOnWaypointChange.html @@ -23,8 +23,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic)
    -    NSArray<SDLLocationDetails *> *_Nonnull waypoints;
    +
    @property (nonatomic, copy) NSArray<SDLLocationDetails *> *_Nonnull waypoints;

    Swift

    diff --git a/docs/Classes/SDLParameterPermissions.html b/docs/Classes/SDLParameterPermissions.html index 70fa7934e..33b318da3 100644 --- a/docs/Classes/SDLParameterPermissions.html +++ b/docs/Classes/SDLParameterPermissions.html @@ -26,7 +26,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSArray<NSString *> *_Nonnull allowed;
    +
    @property (nonatomic, strong) NSArray<NSString *> *_Nonnull allowed;

    Swift

    @@ -46,8 +46,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<NSString *> *_Nonnull userDisallowed;
    +
    @property (nonatomic, strong) NSArray<NSString *> *_Nonnull userDisallowed;

    Swift

    diff --git a/docs/Classes/SDLPerformAppServiceInteraction.html b/docs/Classes/SDLPerformAppServiceInteraction.html index f267feb90..254f9b9b5 100644 --- a/docs/Classes/SDLPerformAppServiceInteraction.html +++ b/docs/Classes/SDLPerformAppServiceInteraction.html @@ -107,7 +107,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull serviceUri;
    +
    @property (nonatomic, strong) NSString *_Nonnull serviceUri;

    Swift

    @@ -127,7 +127,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull serviceID;
    +
    @property (nonatomic, strong) NSString *_Nonnull serviceID;

    Swift

    @@ -147,7 +147,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull originApp;
    +
    @property (nonatomic, strong) NSString *_Nonnull originApp;

    Swift

    @@ -167,8 +167,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *requestServiceActive;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *requestServiceActive;

    Swift

    diff --git a/docs/Classes/SDLPerformAppServiceInteractionResponse.html b/docs/Classes/SDLPerformAppServiceInteractionResponse.html index 39c96046f..159850065 100644 --- a/docs/Classes/SDLPerformAppServiceInteractionResponse.html +++ b/docs/Classes/SDLPerformAppServiceInteractionResponse.html @@ -52,8 +52,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSString *serviceSpecificResult;
    +
    @property (nonatomic, strong, nullable) NSString *serviceSpecificResult;

    Swift

    diff --git a/docs/Classes/SDLPerformAudioPassThru.html b/docs/Classes/SDLPerformAudioPassThru.html index 187e5df3b..5f92ab191 100644 --- a/docs/Classes/SDLPerformAudioPassThru.html +++ b/docs/Classes/SDLPerformAudioPassThru.html @@ -216,8 +216,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLTTSChunk *> *initialPrompt;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *initialPrompt;

    Swift

    @@ -240,8 +239,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSString *audioPassThruDisplayText1;
    +
    @property (nonatomic, strong, nullable) NSString *audioPassThruDisplayText1;

    Swift

    @@ -264,8 +262,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSString *audioPassThruDisplayText2;
    +
    @property (nonatomic, strong, nullable) NSString *audioPassThruDisplayText2;

    Swift

    @@ -285,7 +282,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLSamplingRate _Nonnull samplingRate;
    +
    @property (nonatomic, strong) SDLSamplingRate _Nonnull samplingRate;

    Swift

    @@ -309,7 +306,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull maxDuration;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull maxDuration;

    Swift

    @@ -329,7 +326,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLBitsPerSample _Nonnull bitsPerSample;
    +
    @property (nonatomic, strong) SDLBitsPerSample _Nonnull bitsPerSample;

    Swift

    @@ -347,7 +344,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLAudioType _Nonnull audioType;
    +
    @property (nonatomic, strong) SDLAudioType _Nonnull audioType;

    Swift

    @@ -366,7 +363,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *muteAudio;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *muteAudio;

    Swift

    @@ -384,8 +381,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLAudioPassThruHandler audioDataHandler;
    +
    @property (nonatomic, strong, nullable) SDLAudioPassThruHandler audioDataHandler;

    Swift

    diff --git a/docs/Classes/SDLPerformInteraction.html b/docs/Classes/SDLPerformInteraction.html index 8f764c20e..239b7a75a 100644 --- a/docs/Classes/SDLPerformInteraction.html +++ b/docs/Classes/SDLPerformInteraction.html @@ -481,7 +481,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull initialText;
    +
    @property (nonatomic, strong) NSString *_Nonnull initialText;

    Swift

    @@ -503,8 +503,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLTTSChunk *> *initialPrompt;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *initialPrompt;

    Swift

    @@ -526,8 +525,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLInteractionMode _Nonnull interactionMode;
    +
    @property (nonatomic, strong) SDLInteractionMode _Nonnull interactionMode;

    Swift

    @@ -549,8 +547,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<NSNumber<SDLInt> *> *_Nonnull interactionChoiceSetIDList;
    +
    @property (nonatomic, strong) NSArray<NSNumber<SDLInt> *> *_Nonnull interactionChoiceSetIDList;

    Swift

    @@ -572,8 +569,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLTTSChunk *> *helpPrompt;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *helpPrompt;

    Swift

    @@ -595,8 +591,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLTTSChunk *> *timeoutPrompt;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *timeoutPrompt;

    Swift

    @@ -618,7 +613,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *timeout;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *timeout;

    Swift

    @@ -640,8 +635,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLVRHelpItem *> *vrHelp;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLVRHelpItem *> *vrHelp;

    Swift

    @@ -663,8 +657,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLLayoutMode interactionLayout;
    +
    @property (nonatomic, strong, nullable) SDLLayoutMode interactionLayout;

    Swift

    @@ -690,7 +683,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *cancelID;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *cancelID;

    Swift

    diff --git a/docs/Classes/SDLPerformInteractionResponse.html b/docs/Classes/SDLPerformInteractionResponse.html index a92c7c3c5..f5b73d284 100644 --- a/docs/Classes/SDLPerformInteractionResponse.html +++ b/docs/Classes/SDLPerformInteractionResponse.html @@ -27,7 +27,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *choiceID;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *choiceID;

    Swift

    @@ -47,7 +47,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *manualTextEntry;
    +
    @property (nonatomic, strong, nullable) NSString *manualTextEntry;

    Swift

    @@ -65,8 +65,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTriggerSource triggerSource;
    +
    @property (nonatomic, strong, nullable) SDLTriggerSource triggerSource;

    Swift

    diff --git a/docs/Classes/SDLPermissionItem.html b/docs/Classes/SDLPermissionItem.html index 8097eacfc..ed9139dc9 100644 --- a/docs/Classes/SDLPermissionItem.html +++ b/docs/Classes/SDLPermissionItem.html @@ -28,7 +28,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull rpcName;
    +
    @property (nonatomic, strong) NSString *_Nonnull rpcName;

    Swift

    @@ -48,8 +48,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLHMIPermissions *_Nonnull hmiPermissions;
    +
    @property (nonatomic, strong) SDLHMIPermissions *_Nonnull hmiPermissions;

    Swift

    @@ -69,8 +68,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLParameterPermissions *_Nonnull parameterPermissions;
    +
    @property (nonatomic, strong) SDLParameterPermissions *_Nonnull parameterPermissions;

    Swift

    @@ -90,8 +88,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *requireEncryption;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *requireEncryption;

    Swift

    diff --git a/docs/Classes/SDLPermissionManager.html b/docs/Classes/SDLPermissionManager.html index 4eb9360be..08fd19575 100644 --- a/docs/Classes/SDLPermissionManager.html +++ b/docs/Classes/SDLPermissionManager.html @@ -30,7 +30,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) BOOL requiresEncryption;
    +
    @property (nonatomic, readonly) BOOL requiresEncryption;

    Swift

    diff --git a/docs/Classes/SDLPhoneCapability.html b/docs/Classes/SDLPhoneCapability.html index 3e6a3d3f3..34b47f75e 100644 --- a/docs/Classes/SDLPhoneCapability.html +++ b/docs/Classes/SDLPhoneCapability.html @@ -51,7 +51,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber *dialNumberEnabled;
    +
    @property (nonatomic, strong, nullable) NSNumber *dialNumberEnabled;

    Swift

    diff --git a/docs/Classes/SDLPinchGesture.html b/docs/Classes/SDLPinchGesture.html index adfd09289..26a0a4c9d 100644 --- a/docs/Classes/SDLPinchGesture.html +++ b/docs/Classes/SDLPinchGesture.html @@ -59,7 +59,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLTouch *_Nonnull firstTouch;
    +
    @property (nonatomic, strong) SDLTouch *_Nonnull firstTouch;

    Swift

    @@ -78,7 +78,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLTouch *_Nonnull secondTouch;
    +
    @property (nonatomic, strong) SDLTouch *_Nonnull secondTouch;

    Swift

    @@ -97,7 +97,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) CGFloat distance;
    +
    @property (nonatomic, readonly) CGFloat distance;

    Swift

    @@ -116,7 +116,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) CGPoint center;
    +
    @property (nonatomic, readonly) CGPoint center;

    Swift

    @@ -136,7 +136,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) BOOL isValid;
    +
    @property (nonatomic, readonly) BOOL isValid;

    Swift

    diff --git a/docs/Classes/SDLPresetBankCapabilities.html b/docs/Classes/SDLPresetBankCapabilities.html index 44058381a..65c56610f 100644 --- a/docs/Classes/SDLPresetBankCapabilities.html +++ b/docs/Classes/SDLPresetBankCapabilities.html @@ -25,8 +25,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLBool> *_Nonnull onScreenPresetsAvailable;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull onScreenPresetsAvailable;

    Swift

    diff --git a/docs/Classes/SDLPublishAppService.html b/docs/Classes/SDLPublishAppService.html index 754e095ba..019b53ddc 100644 --- a/docs/Classes/SDLPublishAppService.html +++ b/docs/Classes/SDLPublishAppService.html @@ -54,8 +54,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLAppServiceManifest *_Nonnull appServiceManifest;
    +
    @property (nonatomic, strong) SDLAppServiceManifest *_Nonnull appServiceManifest;

    Swift

    diff --git a/docs/Classes/SDLPublishAppServiceResponse.html b/docs/Classes/SDLPublishAppServiceResponse.html index 63b9c6346..a848c215b 100644 --- a/docs/Classes/SDLPublishAppServiceResponse.html +++ b/docs/Classes/SDLPublishAppServiceResponse.html @@ -52,8 +52,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLAppServiceRecord *appServiceRecord;
    +
    @property (nonatomic, strong, nullable) SDLAppServiceRecord *appServiceRecord;

    Swift

    diff --git a/docs/Classes/SDLPutFile.html b/docs/Classes/SDLPutFile.html index a594558ad..11d603678 100644 --- a/docs/Classes/SDLPutFile.html +++ b/docs/Classes/SDLPutFile.html @@ -259,7 +259,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull syncFileName;
    +
    @property (nonatomic, strong) NSString *_Nonnull syncFileName;

    Swift

    @@ -279,7 +279,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLFileType _Nonnull fileType;
    +
    @property (nonatomic, strong) SDLFileType _Nonnull fileType;

    Swift

    @@ -299,8 +299,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *persistentFile;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *persistentFile;

    Swift

    @@ -320,7 +319,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *systemFile;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *systemFile;

    Swift

    @@ -340,7 +339,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *offset;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *offset;

    Swift

    @@ -360,7 +359,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *length;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *length;

    Swift

    @@ -380,7 +379,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *crc;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *crc;

    Swift

    diff --git a/docs/Classes/SDLPutFileResponse.html b/docs/Classes/SDLPutFileResponse.html index ae9bbf73d..a8f51d9b4 100644 --- a/docs/Classes/SDLPutFileResponse.html +++ b/docs/Classes/SDLPutFileResponse.html @@ -23,8 +23,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLInt> *spaceAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *spaceAvailable;

    Swift

    diff --git a/docs/Classes/SDLRDSData.html b/docs/Classes/SDLRDSData.html index 7bb3c369a..b4781060b 100644 --- a/docs/Classes/SDLRDSData.html +++ b/docs/Classes/SDLRDSData.html @@ -78,7 +78,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *programService;
    +
    @property (nonatomic, strong, nullable) NSString *programService;

    Swift

    @@ -98,7 +98,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *radioText;
    +
    @property (nonatomic, strong, nullable) NSString *radioText;

    Swift

    @@ -118,7 +118,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *clockText;
    +
    @property (nonatomic, strong, nullable) NSString *clockText;

    Swift

    @@ -138,8 +138,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSString *programIdentification;
    +
    @property (nonatomic, strong, nullable) NSString *programIdentification;

    Swift

    @@ -160,7 +159,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *programType;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *programType;

    Swift

    @@ -180,8 +179,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *trafficProgramIdentification;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *trafficProgramIdentification;

    Swift

    @@ -201,8 +199,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *trafficAnnouncementIdentification;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *trafficAnnouncementIdentification;

    Swift

    @@ -222,7 +219,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *region;
    +
    @property (nonatomic, strong, nullable) NSString *region;

    Swift

    diff --git a/docs/Classes/SDLRGBColor.html b/docs/Classes/SDLRGBColor.html index 4c2975354..b59fb788b 100644 --- a/docs/Classes/SDLRGBColor.html +++ b/docs/Classes/SDLRGBColor.html @@ -93,7 +93,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull red;
    +
    @property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull red;

    Swift

    @@ -112,7 +112,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull green;
    +
    @property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull green;

    Swift

    @@ -131,7 +131,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic) NSNumber<SDLInt> *_Nonnull blue;
    +
    @property (nonatomic, copy) NSNumber<SDLInt> *_Nonnull blue;

    Swift

    diff --git a/docs/Classes/SDLRPCMessage.html b/docs/Classes/SDLRPCMessage.html index 385beb5cd..c98331625 100644 --- a/docs/Classes/SDLRPCMessage.html +++ b/docs/Classes/SDLRPCMessage.html @@ -156,7 +156,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSData *bulkData;
    +
    @property (nonatomic, strong, nullable) NSData *bulkData;

    Swift

    @@ -174,7 +174,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic) NSString *_Nonnull name;
    +
    @property (nonatomic, strong, readonly) NSString *_Nonnull name;

    Swift

    @@ -192,8 +192,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic)
    -    NSMutableDictionary<NSString *, id> *_Nonnull parameters;
    +
    @property (nonatomic, strong, readonly) NSMutableDictionary<NSString *, id> *_Nonnull parameters;

    Swift

    @@ -211,7 +210,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic) NSString *_Nonnull messageType;
    +
    @property (nonatomic, strong, readonly) NSString *_Nonnull messageType;

    Swift

    diff --git a/docs/Classes/SDLRPCNotificationNotification.html b/docs/Classes/SDLRPCNotificationNotification.html index f41f94c17..0db5328c9 100644 --- a/docs/Classes/SDLRPCNotificationNotification.html +++ b/docs/Classes/SDLRPCNotificationNotification.html @@ -24,8 +24,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic)
    -    __kindof SDLRPCNotification *_Nonnull notification;
    +
    @property (nonatomic, copy, readonly) __kindof SDLRPCNotification *_Nonnull notification;

    Swift

    diff --git a/docs/Classes/SDLRPCRequest.html b/docs/Classes/SDLRPCRequest.html index 47badf66c..7cd555a76 100644 --- a/docs/Classes/SDLRPCRequest.html +++ b/docs/Classes/SDLRPCRequest.html @@ -21,8 +21,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLInt> *_Nonnull correlationID;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull correlationID;

    Swift

    diff --git a/docs/Classes/SDLRPCRequestNotification.html b/docs/Classes/SDLRPCRequestNotification.html index 4e7417c6a..553432c86 100644 --- a/docs/Classes/SDLRPCRequestNotification.html +++ b/docs/Classes/SDLRPCRequestNotification.html @@ -24,7 +24,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic) __kindof SDLRPCRequest *_Nonnull request;
    +
    @property (nonatomic, copy, readonly) __kindof SDLRPCRequest *_Nonnull request;

    Swift

    diff --git a/docs/Classes/SDLRPCResponse.html b/docs/Classes/SDLRPCResponse.html index c2f3e1cdf..2c6322adb 100644 --- a/docs/Classes/SDLRPCResponse.html +++ b/docs/Classes/SDLRPCResponse.html @@ -24,8 +24,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLInt> *_Nonnull correlationID;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull correlationID;

    Swift

    @@ -43,7 +42,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLBool> *_Nonnull success;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull success;

    Swift

    @@ -61,7 +60,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLResult _Nonnull resultCode;
    +
    @property (nonatomic, strong) SDLResult _Nonnull resultCode;

    Swift

    @@ -79,7 +78,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *info;
    +
    @property (nonatomic, strong, nullable) NSString *info;

    Swift

    diff --git a/docs/Classes/SDLRPCResponseNotification.html b/docs/Classes/SDLRPCResponseNotification.html index 18a50b0c2..91bef4854 100644 --- a/docs/Classes/SDLRPCResponseNotification.html +++ b/docs/Classes/SDLRPCResponseNotification.html @@ -24,7 +24,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic) __kindof SDLRPCResponse *_Nonnull response;
    +
    @property (nonatomic, copy, readonly) __kindof SDLRPCResponse *_Nonnull response;

    Swift

    diff --git a/docs/Classes/SDLRPCStruct.html b/docs/Classes/SDLRPCStruct.html index 7a936dcce..f60b99857 100644 --- a/docs/Classes/SDLRPCStruct.html +++ b/docs/Classes/SDLRPCStruct.html @@ -24,8 +24,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic)
    -    NSMutableDictionary<NSString *, id> *_Nonnull store;
    +
    @property (nonatomic, strong, readonly) NSMutableDictionary<NSString *, id> *_Nonnull store;

    Swift

    @@ -43,8 +42,8 @@

    Objective-C

    -
    @property (getter=isPayloadProtected, assign, readwrite, nonatomic)
    -    BOOL payloadProtected;
    +
    @property (nonatomic, assign, unsafe_unretained, readwrite,
    +          getter=isPayloadProtected) BOOL payloadProtected;

    Swift

    diff --git a/docs/Classes/SDLRadioControlCapabilities.html b/docs/Classes/SDLRadioControlCapabilities.html index 398c95ea1..f2620b525 100644 --- a/docs/Classes/SDLRadioControlCapabilities.html +++ b/docs/Classes/SDLRadioControlCapabilities.html @@ -289,7 +289,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull moduleName;
    +
    @property (nonatomic, strong) NSString *_Nonnull moduleName;

    Swift

    @@ -311,8 +311,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *radioEnableAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *radioEnableAvailable;

    Swift

    @@ -334,8 +333,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *radioBandAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *radioBandAvailable;

    Swift

    @@ -357,8 +355,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *radioFrequencyAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *radioFrequencyAvailable;

    Swift

    @@ -380,8 +377,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *hdChannelAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *hdChannelAvailable;

    Swift

    @@ -403,8 +399,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *rdsDataAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *rdsDataAvailable;

    Swift

    @@ -426,8 +421,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *availableHDsAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *availableHDsAvailable;

    Swift

    @@ -449,8 +443,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *availableHDChannelsAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *availableHDChannelsAvailable;

    Swift

    @@ -472,8 +465,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *stateAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *stateAvailable;

    Swift

    @@ -495,8 +487,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *signalStrengthAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *signalStrengthAvailable;

    Swift

    @@ -518,8 +509,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *signalChangeThresholdAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *signalChangeThresholdAvailable;

    Swift

    @@ -540,8 +530,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *hdRadioEnableAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *hdRadioEnableAvailable;

    Swift

    @@ -562,8 +551,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *siriusXMRadioAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *siriusXMRadioAvailable;

    Swift

    @@ -584,8 +572,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *sisDataAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *sisDataAvailable;

    Swift

    @@ -605,7 +592,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLModuleInfo *moduleInfo;
    +
    @property (nonatomic, strong, nullable) SDLModuleInfo *moduleInfo;

    Swift

    diff --git a/docs/Classes/SDLRadioControlData.html b/docs/Classes/SDLRadioControlData.html index 8be9c976d..3050d9476 100644 --- a/docs/Classes/SDLRadioControlData.html +++ b/docs/Classes/SDLRadioControlData.html @@ -5,6 +5,9 @@

    Section Contents

    • -initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:
    • -initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:
    • +
    • -initFMWithFrequencyInteger:frequencyFraction:hdChannel:
    • +
    • -initAMWithFrequencyInteger:hdChannel:
    • +
    • -initXMWithFrequencyInteger:
    • frequencyInteger
    • frequencyFraction
    • band
    • @@ -109,6 +112,99 @@

      Return Value

      An instance of the SDLRadioControlData class

      +

      + -initFMWithFrequencyInteger:frequencyFraction:hdChannel: +

      + +

      Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

      + + + +

      Objective-C

      +
      - (nonnull instancetype)
      +    initFMWithFrequencyInteger:(nullable NSNumber<SDLInt> *)frequencyInteger
      +             frequencyFraction:(nullable NSNumber<SDLInt> *)frequencyFraction
      +                     hdChannel:(nullable NSNumber<SDLInt> *)hdChannel;
      + + +

      Swift

      +
      init(fmWithFrequencyInteger frequencyInteger: (NSNumber & SDLInt)?, frequencyFraction: (NSNumber & SDLInt)?, hdChannel: (NSNumber & SDLInt)?)
      + + + +

      Parameters

      +
      +
      frequencyInteger
      +

      Must be between 0 and 1710

      +
      frequencyFraction
      +

      Must be between 0 and 9

      +
      hdChannel
      +

      Must be between 0 and 7

      +
      +
      +

      Return Value

      +

      An instance of the SDLRadioControlData class

      +
      + +

      + -initAMWithFrequencyInteger:hdChannel: +

      + +

      Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

      + + + +

      Objective-C

      +
      - (nonnull instancetype)
      +    initAMWithFrequencyInteger:(nullable NSNumber<SDLInt> *)frequencyInteger
      +                     hdChannel:(nullable NSNumber<SDLInt> *)hdChannel;
      + + +

      Swift

      +
      init(amWithFrequencyInteger frequencyInteger: (NSNumber & SDLInt)?, hdChannel: (NSNumber & SDLInt)?)
      + + + +

      Parameters

      +
      +
      frequencyInteger
      +

      Must be between 0 and 1710

      +
      hdChannel
      +

      Must be between 0 and 7

      +
      +
      +

      Return Value

      +

      An instance of the SDLRadioControlData class

      +
      + +

      + -initXMWithFrequencyInteger: +

      + +

      Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

      + + + +

      Objective-C

      +
      - (nonnull instancetype)initXMWithFrequencyInteger:
      +    (nullable NSNumber<SDLInt> *)frequencyInteger;
      + + +

      Swift

      +
      init(xmWithFrequencyInteger frequencyInteger: (NSNumber & SDLInt)?)
      + + + +

      Parameters

      +
      +
      frequencyInteger
      +

      Must be between 1 and 1710

      +
      +
      +

      Return Value

      +

      An instance of the SDLRadioControlData class

      +
      +

      frequencyInteger

      @@ -120,8 +216,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *frequencyInteger;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *frequencyInteger;

      Swift

      @@ -141,8 +236,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *frequencyFraction;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *frequencyFraction;

      Swift

      @@ -162,7 +256,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLRadioBand band;
      +
      @property (nonatomic, strong, nullable) SDLRadioBand band;

      Swift

      @@ -187,7 +281,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLRDSData *rdsData;
      +
      @property (nonatomic, strong, nullable) SDLRDSData *rdsData;

      Swift

      @@ -212,8 +306,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *availableHDs;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *availableHDs;

      Swift

      @@ -238,8 +331,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *availableHDChannels;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *availableHDChannels;

      Swift

      @@ -259,7 +351,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *hdChannel;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *hdChannel;

      Swift

      @@ -284,8 +376,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *signalStrength;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *signalStrength;

      Swift

      @@ -310,8 +401,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *signalChangeThreshold;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *signalChangeThreshold;

      Swift

      @@ -331,8 +421,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *radioEnable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *radioEnable;

      Swift

      @@ -357,7 +446,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLRadioState state;
      +
      @property (nonatomic, strong, nullable) SDLRadioState state;

      Swift

      @@ -377,8 +466,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *hdRadioEnable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *hdRadioEnable;

      Swift

      @@ -400,7 +488,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLSISData *sisData;
      +
      @property (nonatomic, strong, nullable) SDLSISData *sisData;

      Swift

      diff --git a/docs/Classes/SDLReadDID.html b/docs/Classes/SDLReadDID.html index 3fbd4de86..5ade10cc6 100644 --- a/docs/Classes/SDLReadDID.html +++ b/docs/Classes/SDLReadDID.html @@ -64,7 +64,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull ecuName;
      +
      @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull ecuName;

      Swift

      @@ -90,8 +90,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSArray<NSNumber<SDLInt> *> *_Nonnull didLocation;
      +
      @property (nonatomic, strong) NSArray<NSNumber<SDLInt> *> *_Nonnull didLocation;

      Swift

      diff --git a/docs/Classes/SDLReadDIDResponse.html b/docs/Classes/SDLReadDIDResponse.html index db93aff27..e11c0c27f 100644 --- a/docs/Classes/SDLReadDIDResponse.html +++ b/docs/Classes/SDLReadDIDResponse.html @@ -23,8 +23,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLDIDResult *> *didResult;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLDIDResult *> *didResult;

      Swift

      diff --git a/docs/Classes/SDLRectangle.html b/docs/Classes/SDLRectangle.html index d8da44936..d10926194 100644 --- a/docs/Classes/SDLRectangle.html +++ b/docs/Classes/SDLRectangle.html @@ -91,7 +91,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLFloat> *x;
      +
      @property (nonatomic, strong) NSNumber<SDLFloat> *x;

      Swift

      @@ -111,7 +111,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLFloat> *y;
      +
      @property (nonatomic, strong) NSNumber<SDLFloat> *y;

      Swift

      @@ -131,7 +131,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLFloat> *width;
      +
      @property (nonatomic, strong) NSNumber<SDLFloat> *width;

      Swift

      @@ -151,7 +151,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLFloat> *height;
      +
      @property (nonatomic, strong) NSNumber<SDLFloat> *height;

      Swift

      diff --git a/docs/Classes/SDLRegisterAppInterface.html b/docs/Classes/SDLRegisterAppInterface.html index ebdf2bf62..f3cc6a9d7 100644 --- a/docs/Classes/SDLRegisterAppInterface.html +++ b/docs/Classes/SDLRegisterAppInterface.html @@ -279,8 +279,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    SDLSyncMsgVersion *_Nonnull syncMsgVersion;
      +
      @property (nonatomic, strong) __deprecated_msg(("Use sdlMsgVersion instead")) SDLSyncMsgVersion *syncMsgVersion;

      Swift

      @@ -302,7 +301,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLMsgVersion *_Nonnull sdlMsgVersion;
      +
      @property (nonatomic, strong) SDLMsgVersion *_Nonnull sdlMsgVersion;

      Swift

      @@ -331,7 +330,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSString *_Nonnull appName;
      +
      @property (nonatomic, strong) NSString *_Nonnull appName;

      Swift

      @@ -359,8 +358,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLTTSChunk *> *ttsName;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *ttsName;

      Swift

      @@ -384,8 +382,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSString *ngnMediaScreenAppName;
      +
      @property (nonatomic, strong, nullable) NSString *ngnMediaScreenAppName;

      Swift

      @@ -409,8 +406,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<NSString *> *vrSynonyms;
      +
      @property (nonatomic, strong, nullable) NSArray<NSString *> *vrSynonyms;

      Swift

      @@ -432,8 +428,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSNumber<SDLBool> *_Nonnull isMediaApplication;
      +
      @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull isMediaApplication;

      Swift

      @@ -455,7 +450,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLLanguage _Nonnull languageDesired;
      +
      @property (nonatomic, strong) SDLLanguage _Nonnull languageDesired;

      Swift

      @@ -477,8 +472,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    SDLLanguage _Nonnull hmiDisplayLanguageDesired;
      +
      @property (nonatomic, strong) SDLLanguage _Nonnull hmiDisplayLanguageDesired;

      Swift

      @@ -500,8 +494,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLAppHMIType> *appHMIType;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLAppHMIType> *appHMIType;

      Swift

      @@ -525,7 +518,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *hashID;
      +
      @property (nonatomic, strong, nullable) NSString *hashID;

      Swift

      @@ -547,7 +540,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLDeviceInfo *deviceInfo;
      +
      @property (nonatomic, strong, nullable) SDLDeviceInfo *deviceInfo;

      Swift

      @@ -574,7 +567,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSString *_Nonnull appID;
      +
      @property (nonatomic, strong) NSString *_Nonnull appID;

      Swift

      @@ -598,7 +591,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *fullAppID;
      +
      @property (nonatomic, strong, nullable) NSString *fullAppID;

      Swift

      @@ -620,7 +613,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLAppInfo *appInfo;
      +
      @property (nonatomic, strong, nullable) SDLAppInfo *appInfo;

      Swift

      @@ -642,8 +635,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLTemplateColorScheme *dayColorScheme;
      +
      @property (nonatomic, strong, nullable) SDLTemplateColorScheme *dayColorScheme;

      Swift

      @@ -665,8 +657,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLTemplateColorScheme *nightColorScheme;
      +
      @property (nonatomic, strong, nullable) SDLTemplateColorScheme *nightColorScheme;

      Swift

      diff --git a/docs/Classes/SDLRegisterAppInterfaceResponse.html b/docs/Classes/SDLRegisterAppInterfaceResponse.html index 8ce009cac..8e86109eb 100644 --- a/docs/Classes/SDLRegisterAppInterfaceResponse.html +++ b/docs/Classes/SDLRegisterAppInterfaceResponse.html @@ -46,8 +46,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLSyncMsgVersion *syncMsgVersion;
      +
      @property (nonatomic, strong, nullable) SDLSyncMsgVersion *syncMsgVersion;

      Swift

      @@ -69,7 +68,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLMsgVersion *sdlMsgVersion;
      +
      @property (nonatomic, strong, nullable) SDLMsgVersion *sdlMsgVersion;

      Swift

      @@ -91,7 +90,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLLanguage language;
      +
      @property (nonatomic, strong, nullable) SDLLanguage language;

      Swift

      @@ -113,8 +112,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLLanguage hmiDisplayLanguage;
      +
      @property (nonatomic, strong, nullable) SDLLanguage hmiDisplayLanguage;

      Swift

      @@ -136,8 +134,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLDisplayCapabilities *displayCapabilities;
      +
      @property (nonatomic, strong, nullable) SDLDisplayCapabilities *displayCapabilities;

      Swift

      @@ -159,8 +156,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLButtonCapabilities *> *buttonCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLButtonCapabilities *> *buttonCapabilities;

      Swift

      @@ -182,8 +178,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;

      Swift

      @@ -205,8 +200,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLPresetBankCapabilities *presetBankCapabilities;
      +
      @property (nonatomic, strong, nullable) SDLPresetBankCapabilities *presetBankCapabilities;

      Swift

      @@ -228,8 +222,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLHMIZoneCapabilities> *hmiZoneCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLHMIZoneCapabilities> *hmiZoneCapabilities;

      Swift

      @@ -251,8 +244,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLSpeechCapabilities> *speechCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLSpeechCapabilities> *speechCapabilities;

      Swift

      @@ -274,8 +266,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLPrerecordedSpeech> *prerecordedSpeech;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLPrerecordedSpeech> *prerecordedSpeech;

      Swift

      @@ -297,8 +288,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLVRCapabilities> *vrCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLVRCapabilities> *vrCapabilities;

      Swift

      @@ -320,8 +310,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLAudioPassThruCapabilities *> *audioPassThruCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLAudioPassThruCapabilities *> *audioPassThruCapabilities;

      Swift

      @@ -343,8 +332,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLAudioPassThruCapabilities *pcmStreamCapabilities;
      +
      @property (nonatomic, strong, nullable) SDLAudioPassThruCapabilities *pcmStreamCapabilities;

      Swift

      @@ -366,7 +354,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLVehicleType *vehicleType;
      +
      @property (nonatomic, strong, nullable) SDLVehicleType *vehicleType;

      Swift

      @@ -388,8 +376,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<NSNumber<SDLInt> *> *supportedDiagModes;
      +
      @property (nonatomic, strong, nullable) NSArray<NSNumber<SDLInt> *> *supportedDiagModes;

      Swift

      @@ -411,8 +398,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLHMICapabilities *hmiCapabilities;
      +
      @property (nonatomic, strong, nullable) SDLHMICapabilities *hmiCapabilities;

      Swift

      @@ -434,7 +420,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *sdlVersion;
      +
      @property (nonatomic, strong, nullable) NSString *sdlVersion;

      Swift

      @@ -456,8 +442,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSString *systemSoftwareVersion;
      +
      @property (nonatomic, strong, nullable) NSString *systemSoftwareVersion;

      Swift

      @@ -479,8 +464,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *iconResumed;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *iconResumed;

      Swift

      diff --git a/docs/Classes/SDLReleaseInteriorVehicleDataModule.html b/docs/Classes/SDLReleaseInteriorVehicleDataModule.html index 2dc93a0f6..6f447a94b 100644 --- a/docs/Classes/SDLReleaseInteriorVehicleDataModule.html +++ b/docs/Classes/SDLReleaseInteriorVehicleDataModule.html @@ -57,7 +57,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLModuleType _Nonnull moduleType;
      +
      @property (nonatomic, strong) SDLModuleType _Nonnull moduleType;

      Swift

      @@ -77,7 +77,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *moduleId;
      +
      @property (nonatomic, strong, nullable) NSString *moduleId;

      Swift

      diff --git a/docs/Classes/SDLRemoteControlCapabilities.html b/docs/Classes/SDLRemoteControlCapabilities.html index a8483af4f..fb937b57f 100644 --- a/docs/Classes/SDLRemoteControlCapabilities.html +++ b/docs/Classes/SDLRemoteControlCapabilities.html @@ -128,8 +128,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLClimateControlCapabilities *> *climateControlCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLClimateControlCapabilities *> *climateControlCapabilities;

      Swift

      @@ -150,8 +149,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLRadioControlCapabilities *> *radioControlCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLRadioControlCapabilities *> *radioControlCapabilities;

      Swift

      @@ -171,8 +169,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLButtonCapabilities *> *buttonCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLButtonCapabilities *> *buttonCapabilities;

      Swift

      @@ -192,8 +189,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLSeatControlCapabilities *> *seatControlCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLSeatControlCapabilities *> *seatControlCapabilities;

      Swift

      @@ -213,8 +209,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLAudioControlCapabilities *> *audioControlCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLAudioControlCapabilities *> *audioControlCapabilities;

      Swift

      @@ -234,9 +229,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLHMISettingsControlCapabilities *>
      -        *hmiSettingsControlCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLHMISettingsControlCapabilities *> *hmiSettingsControlCapabilities;

      Swift

      @@ -256,8 +249,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLLightControlCapabilities *> *lightControlCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLLightControlCapabilities *> *lightControlCapabilities;

      Swift

      diff --git a/docs/Classes/SDLResetGlobalProperties.html b/docs/Classes/SDLResetGlobalProperties.html index 1a3c82969..45470a778 100644 --- a/docs/Classes/SDLResetGlobalProperties.html +++ b/docs/Classes/SDLResetGlobalProperties.html @@ -64,8 +64,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSArray<SDLGlobalProperty> *_Nonnull properties;
      +
      @property (nonatomic, strong) NSArray<SDLGlobalProperty> *_Nonnull properties;

      Swift

      diff --git a/docs/Classes/SDLSISData.html b/docs/Classes/SDLSISData.html index d2649122a..fbbcb9f5c 100644 --- a/docs/Classes/SDLSISData.html +++ b/docs/Classes/SDLSISData.html @@ -69,7 +69,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *stationShortName;
      +
      @property (nonatomic, strong, nullable) NSString *stationShortName;

      Swift

      @@ -90,8 +90,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLStationIDNumber *stationIDNumber;
      +
      @property (nonatomic, strong, nullable) SDLStationIDNumber *stationIDNumber;

      Swift

      @@ -112,7 +111,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *stationLongName;
      +
      @property (nonatomic, strong, nullable) NSString *stationLongName;

      Swift

      @@ -132,7 +131,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLGPSData *stationLocation;
      +
      @property (nonatomic, strong, nullable) SDLGPSData *stationLocation;

      Swift

      @@ -153,7 +152,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *stationMessage;
      +
      @property (nonatomic, strong, nullable) NSString *stationMessage;

      Swift

      diff --git a/docs/Classes/SDLScreenManager.html b/docs/Classes/SDLScreenManager.html index a50c19ee1..27ad443ca 100644 --- a/docs/Classes/SDLScreenManager.html +++ b/docs/Classes/SDLScreenManager.html @@ -55,7 +55,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *textField1;
      +
      @property (nonatomic, copy, nullable) NSString *textField1;

      Swift

      @@ -73,7 +73,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *textField2;
      +
      @property (nonatomic, copy, nullable) NSString *textField2;

      Swift

      @@ -91,7 +91,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *textField3;
      +
      @property (nonatomic, copy, nullable) NSString *textField3;

      Swift

      @@ -109,7 +109,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *textField4;
      +
      @property (nonatomic, copy, nullable) NSString *textField4;

      Swift

      @@ -127,7 +127,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *mediaTrackTextField;
      +
      @property (nonatomic, copy, nullable) NSString *mediaTrackTextField;

      Swift

      @@ -145,7 +145,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLArtwork *primaryGraphic;
      +
      @property (nonatomic, strong, nullable) SDLArtwork *primaryGraphic;

      Swift

      @@ -163,7 +163,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLArtwork *secondaryGraphic;
      +
      @property (nonatomic, strong, nullable) SDLArtwork *secondaryGraphic;

      Swift

      @@ -181,7 +181,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic) SDLTextAlignment _Nonnull textAlignment;
      +
      @property (nonatomic, copy) SDLTextAlignment _Nonnull textAlignment;

      Swift

      @@ -199,7 +199,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) SDLMetadataType textField1Type;
      +
      @property (nonatomic, copy, nullable) SDLMetadataType textField1Type;

      Swift

      @@ -217,7 +217,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) SDLMetadataType textField2Type;
      +
      @property (nonatomic, copy, nullable) SDLMetadataType textField2Type;

      Swift

      @@ -235,7 +235,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) SDLMetadataType textField3Type;
      +
      @property (nonatomic, copy, nullable) SDLMetadataType textField3Type;

      Swift

      @@ -253,7 +253,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) SDLMetadataType textField4Type;
      +
      @property (nonatomic, copy, nullable) SDLMetadataType textField4Type;

      Swift

      @@ -271,7 +271,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *title;
      +
      @property (nonatomic, copy, nullable) NSString *title;

      Swift

      @@ -289,8 +289,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic)
      -    NSArray<SDLSoftButtonObject *> *_Nonnull softButtonObjects;
      +
      @property (nonatomic, copy) NSArray<SDLSoftButtonObject *> *_Nonnull softButtonObjects;

      Swift

      @@ -314,8 +313,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    SDLMenuConfiguration *_Nonnull menuConfiguration;
      +
      @property (nonatomic, strong) SDLMenuConfiguration *_Nonnull menuConfiguration;

      Swift

      @@ -333,7 +331,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic) NSArray<SDLMenuCell *> *_Nonnull menu;
      +
      @property (nonatomic, copy) NSArray<SDLMenuCell *> *_Nonnull menu;

      Swift

      @@ -357,8 +355,7 @@

      Objective-C

      -
      @property (assign, readwrite, nonatomic)
      -    SDLDynamicMenuUpdatesMode dynamicMenuUpdatesMode;
      +
      @property (nonatomic) SDLDynamicMenuUpdatesMode dynamicMenuUpdatesMode;

      Swift

      @@ -376,8 +373,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic)
      -    NSArray<SDLVoiceCommand *> *_Nonnull voiceCommands;
      +
      @property (nonatomic, copy) NSArray<SDLVoiceCommand *> *_Nonnull voiceCommands;

      Swift

      @@ -395,8 +391,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, null_resettable)
      -    SDLKeyboardProperties *keyboardConfiguration;
      +
      @property (nonatomic, strong, null_resettable) SDLKeyboardProperties *keyboardConfiguration;

      Swift

      @@ -414,8 +409,7 @@

      Objective-C

      -
      @property (readonly, copy, nonatomic)
      -    NSSet<SDLChoiceCell *> *_Nonnull preloadedChoices;
      +
      @property (nonatomic, copy, readonly) NSSet<SDLChoiceCell *> *_Nonnull preloadedChoices;

      Swift

      diff --git a/docs/Classes/SDLScreenParams.html b/docs/Classes/SDLScreenParams.html index 6c185e4f2..956fa27b3 100644 --- a/docs/Classes/SDLScreenParams.html +++ b/docs/Classes/SDLScreenParams.html @@ -24,7 +24,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLImageResolution *_Nonnull resolution;
      +
      @property (nonatomic, strong) SDLImageResolution *_Nonnull resolution;

      Swift

      @@ -44,8 +44,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLTouchEventCapabilities *touchEventAvailable;
      +
      @property (nonatomic, strong, nullable) SDLTouchEventCapabilities *touchEventAvailable;

      Swift

      diff --git a/docs/Classes/SDLScrollableMessage.html b/docs/Classes/SDLScrollableMessage.html index 0feae8e2c..afb399e83 100644 --- a/docs/Classes/SDLScrollableMessage.html +++ b/docs/Classes/SDLScrollableMessage.html @@ -133,8 +133,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSString *_Nonnull scrollableMessageBody;
      +
      @property (nonatomic, strong) NSString *_Nonnull scrollableMessageBody;

      Swift

      @@ -156,7 +155,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *timeout;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *timeout;

      Swift

      @@ -178,8 +177,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLSoftButton *> *softButtons;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLSoftButton *> *softButtons;

      Swift

      @@ -205,7 +203,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *cancelID;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *cancelID;

      Swift

      diff --git a/docs/Classes/SDLSeatControlCapabilities.html b/docs/Classes/SDLSeatControlCapabilities.html index c9fe835f0..fe36f633f 100644 --- a/docs/Classes/SDLSeatControlCapabilities.html +++ b/docs/Classes/SDLSeatControlCapabilities.html @@ -252,7 +252,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSString *_Nonnull moduleName;
      +
      @property (nonatomic, strong) NSString *_Nonnull moduleName;

      Swift

      @@ -272,8 +272,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *heatingEnabledAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatingEnabledAvailable;

      Swift

      @@ -293,8 +292,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *coolingEnabledAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *coolingEnabledAvailable;

      Swift

      @@ -314,8 +312,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *heatingLevelAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatingLevelAvailable;

      Swift

      @@ -335,8 +332,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *coolingLevelAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *coolingLevelAvailable;

      Swift

      @@ -356,8 +352,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *horizontalPositionAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *horizontalPositionAvailable;

      Swift

      @@ -377,8 +372,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *verticalPositionAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *verticalPositionAvailable;

      Swift

      @@ -398,8 +392,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *frontVerticalPositionAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *frontVerticalPositionAvailable;

      Swift

      @@ -419,8 +412,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *backVerticalPositionAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *backVerticalPositionAvailable;

      Swift

      @@ -440,8 +432,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *backTiltAngleAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *backTiltAngleAvailable;

      Swift

      @@ -461,8 +452,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *headSupportHorizontalPositionAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *headSupportHorizontalPositionAvailable;

      Swift

      @@ -482,8 +472,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *headSupportVerticalPositionAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *headSupportVerticalPositionAvailable;

      Swift

      @@ -503,8 +492,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *massageEnabledAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *massageEnabledAvailable;

      Swift

      @@ -524,8 +512,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *massageModeAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *massageModeAvailable;

      Swift

      @@ -545,8 +532,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *massageCushionFirmnessAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *massageCushionFirmnessAvailable;

      Swift

      @@ -566,8 +552,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *memoryAvailable;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *memoryAvailable;

      Swift

      @@ -587,7 +572,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLModuleInfo *moduleInfo;
      +
      @property (nonatomic, strong, nullable) SDLModuleInfo *moduleInfo;

      Swift

      diff --git a/docs/Classes/SDLSeatControlData.html b/docs/Classes/SDLSeatControlData.html index 0b1375c2e..753de4faa 100644 --- a/docs/Classes/SDLSeatControlData.html +++ b/docs/Classes/SDLSeatControlData.html @@ -146,7 +146,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLSupportedSeat _Nonnull id;
      +
      @property (nonatomic, strong) SDLSupportedSeat _Nonnull id;

      Swift

      @@ -166,8 +166,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *heatingEnabled;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *heatingEnabled;

      Swift

      @@ -187,8 +186,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *coolingEnabled;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *coolingEnabled;

      Swift

      @@ -208,8 +206,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *heatingLevel;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *heatingLevel;

      Swift

      @@ -229,8 +226,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *coolingLevel;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *coolingLevel;

      Swift

      @@ -250,8 +246,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *horizontalPosition;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *horizontalPosition;

      Swift

      @@ -271,8 +266,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *verticalPosition;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *verticalPosition;

      Swift

      @@ -292,8 +286,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *frontVerticalPosition;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *frontVerticalPosition;

      Swift

      @@ -313,8 +306,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *backVerticalPosition;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *backVerticalPosition;

      Swift

      @@ -334,8 +326,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *backTiltAngle;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *backTiltAngle;

      Swift

      @@ -355,8 +346,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *headSupportHorizontalPosition;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *headSupportHorizontalPosition;

      Swift

      @@ -376,8 +366,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *headSupportVerticalPosition;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *headSupportVerticalPosition;

      Swift

      @@ -397,8 +386,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *massageEnabled;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *massageEnabled;

      Swift

      @@ -418,8 +406,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLMassageModeData *> *massageMode;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLMassageModeData *> *massageMode;

      Swift

      @@ -439,8 +426,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLMassageCushionFirmness *> *massageCushionFirmness;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLMassageCushionFirmness *> *massageCushionFirmness;

      Swift

      @@ -460,7 +446,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLSeatMemoryAction *memory;
      +
      @property (nonatomic, strong, nullable) SDLSeatMemoryAction *memory;

      Swift

      diff --git a/docs/Classes/SDLSeatLocation.html b/docs/Classes/SDLSeatLocation.html index f98fb2982..2973a9c29 100644 --- a/docs/Classes/SDLSeatLocation.html +++ b/docs/Classes/SDLSeatLocation.html @@ -21,7 +21,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLGrid *grid;
      +
      @property (nonatomic, strong, nullable) SDLGrid *grid;

      Swift

      diff --git a/docs/Classes/SDLSeatLocationCapability.html b/docs/Classes/SDLSeatLocationCapability.html index 919074e02..4030d8860 100644 --- a/docs/Classes/SDLSeatLocationCapability.html +++ b/docs/Classes/SDLSeatLocationCapability.html @@ -62,7 +62,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *cols;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *cols;

      Swift

      @@ -80,7 +80,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *rows;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *rows;

      Swift

      @@ -98,7 +98,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *levels;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *levels;

      Swift

      @@ -117,8 +117,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLSeatLocation *> *seats;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLSeatLocation *> *seats;

      Swift

      diff --git a/docs/Classes/SDLSeatMemoryAction.html b/docs/Classes/SDLSeatMemoryAction.html index f547b77c8..c05442e7a 100644 --- a/docs/Classes/SDLSeatMemoryAction.html +++ b/docs/Classes/SDLSeatMemoryAction.html @@ -90,7 +90,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull id;
      +
      @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull id;

      Swift

      @@ -110,7 +110,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *label;
      +
      @property (nonatomic, strong, nullable) NSString *label;

      Swift

      @@ -130,7 +130,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLSeatMemoryActionType _Nonnull action;
      +
      @property (nonatomic, strong) SDLSeatMemoryActionType _Nonnull action;

      Swift

      diff --git a/docs/Classes/SDLSendHapticData.html b/docs/Classes/SDLSendHapticData.html index 7553f3ba7..52d87852e 100644 --- a/docs/Classes/SDLSendHapticData.html +++ b/docs/Classes/SDLSendHapticData.html @@ -48,8 +48,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLHapticRect *> *hapticRectData;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLHapticRect *> *hapticRectData;

      Swift

      diff --git a/docs/Classes/SDLSendLocation.html b/docs/Classes/SDLSendLocation.html index ca2cabd4f..4032cee75 100644 --- a/docs/Classes/SDLSendLocation.html +++ b/docs/Classes/SDLSendLocation.html @@ -187,8 +187,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable)
      -    NSNumber<SDLFloat> *longitudeDegrees;
      +
      @property (nonatomic, copy, nullable) NSNumber<SDLFloat> *longitudeDegrees;

      Swift

      @@ -208,8 +207,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable)
      -    NSNumber<SDLFloat> *latitudeDegrees;
      +
      @property (nonatomic, copy, nullable) NSNumber<SDLFloat> *latitudeDegrees;

      Swift

      @@ -229,7 +227,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *locationName;
      +
      @property (nonatomic, copy, nullable) NSString *locationName;

      Swift

      @@ -249,7 +247,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *locationDescription;
      +
      @property (nonatomic, copy, nullable) NSString *locationDescription;

      Swift

      @@ -269,8 +267,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable)
      -    NSArray<NSString *> *addressLines;
      +
      @property (nonatomic, copy, nullable) NSArray<NSString *> *addressLines;

      Swift

      @@ -290,7 +287,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSString *phoneNumber;
      +
      @property (nonatomic, copy, nullable) NSString *phoneNumber;

      Swift

      @@ -310,7 +307,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLImage *locationImage;
      +
      @property (nonatomic, strong, nullable) SDLImage *locationImage;

      Swift

      @@ -330,7 +327,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLDeliveryMode deliveryMode;
      +
      @property (nonatomic, strong, nullable) SDLDeliveryMode deliveryMode;

      Swift

      @@ -350,7 +347,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLDateTime *timeStamp;
      +
      @property (nonatomic, strong, nullable) SDLDateTime *timeStamp;

      Swift

      @@ -370,7 +367,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLOasisAddress *address;
      +
      @property (nonatomic, strong, nullable) SDLOasisAddress *address;

      Swift

      diff --git a/docs/Classes/SDLSetAppIcon.html b/docs/Classes/SDLSetAppIcon.html index c4e3c9c0e..578d9439c 100644 --- a/docs/Classes/SDLSetAppIcon.html +++ b/docs/Classes/SDLSetAppIcon.html @@ -56,7 +56,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSString *_Nonnull syncFileName;
      +
      @property (nonatomic, strong) NSString *_Nonnull syncFileName;

      Swift

      diff --git a/docs/Classes/SDLSetCloudAppProperties.html b/docs/Classes/SDLSetCloudAppProperties.html index 0064af1ce..5a27bbb6d 100644 --- a/docs/Classes/SDLSetCloudAppProperties.html +++ b/docs/Classes/SDLSetCloudAppProperties.html @@ -52,8 +52,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    SDLCloudAppProperties *_Nonnull properties;
      +
      @property (nonatomic, strong) SDLCloudAppProperties *_Nonnull properties;

      Swift

      diff --git a/docs/Classes/SDLSetDisplayLayout.html b/docs/Classes/SDLSetDisplayLayout.html index 639e07ff4..e6da86528 100644 --- a/docs/Classes/SDLSetDisplayLayout.html +++ b/docs/Classes/SDLSetDisplayLayout.html @@ -121,7 +121,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSString *_Nonnull displayLayout;
      +
      @property (nonatomic, strong) NSString *_Nonnull displayLayout;

      Swift

      @@ -141,8 +141,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLTemplateColorScheme *dayColorScheme;
      +
      @property (nonatomic, strong, nullable) SDLTemplateColorScheme *dayColorScheme;

      Swift

      @@ -162,8 +161,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLTemplateColorScheme *nightColorScheme;
      +
      @property (nonatomic, strong, nullable) SDLTemplateColorScheme *nightColorScheme;

      Swift

      diff --git a/docs/Classes/SDLSetDisplayLayoutResponse.html b/docs/Classes/SDLSetDisplayLayoutResponse.html index 918f23ae7..5924fad9f 100644 --- a/docs/Classes/SDLSetDisplayLayoutResponse.html +++ b/docs/Classes/SDLSetDisplayLayoutResponse.html @@ -26,8 +26,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLDisplayCapabilities *displayCapabilities;
      +
      @property (nonatomic, strong, nullable) SDLDisplayCapabilities *displayCapabilities;

      Swift

      @@ -45,8 +44,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLButtonCapabilities *> *buttonCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLButtonCapabilities *> *buttonCapabilities;

      Swift

      @@ -64,8 +62,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;

      Swift

      @@ -83,8 +80,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLPresetBankCapabilities *presetBankCapabilities;
      +
      @property (nonatomic, strong, nullable) SDLPresetBankCapabilities *presetBankCapabilities;

      Swift

      diff --git a/docs/Classes/SDLSetGlobalProperties.html b/docs/Classes/SDLSetGlobalProperties.html index 70c48c6b3..f8ee156c1 100644 --- a/docs/Classes/SDLSetGlobalProperties.html +++ b/docs/Classes/SDLSetGlobalProperties.html @@ -201,8 +201,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLTTSChunk *> *helpPrompt;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *helpPrompt;

      Swift

      @@ -222,8 +221,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLTTSChunk *> *timeoutPrompt;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLTTSChunk *> *timeoutPrompt;

      Swift

      @@ -243,7 +241,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *vrHelpTitle;
      +
      @property (nonatomic, strong, nullable) NSString *vrHelpTitle;

      Swift

      @@ -265,8 +263,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLVRHelpItem *> *vrHelp;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLVRHelpItem *> *vrHelp;

      Swift

      @@ -286,7 +283,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *menuTitle;
      +
      @property (nonatomic, strong, nullable) NSString *menuTitle;

      Swift

      @@ -306,7 +303,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLImage *menuIcon;
      +
      @property (nonatomic, strong, nullable) SDLImage *menuIcon;

      Swift

      @@ -326,8 +323,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLKeyboardProperties *keyboardProperties;
      +
      @property (nonatomic, strong, nullable) SDLKeyboardProperties *keyboardProperties;

      Swift

      @@ -347,7 +343,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLSeatLocation *userLocation;
      +
      @property (nonatomic, strong, nullable) SDLSeatLocation *userLocation;

      Swift

      @@ -365,7 +361,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLMenuLayout menuLayout;
      +
      @property (nonatomic, strong, nullable) SDLMenuLayout menuLayout;

      Swift

      diff --git a/docs/Classes/SDLSetInteriorVehicleData.html b/docs/Classes/SDLSetInteriorVehicleData.html index 889c1176d..470539f49 100644 --- a/docs/Classes/SDLSetInteriorVehicleData.html +++ b/docs/Classes/SDLSetInteriorVehicleData.html @@ -50,7 +50,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLModuleData *_Nonnull moduleData;
      +
      @property (nonatomic, strong) SDLModuleData *_Nonnull moduleData;

      Swift

      diff --git a/docs/Classes/SDLSetInteriorVehicleDataResponse.html b/docs/Classes/SDLSetInteriorVehicleDataResponse.html index cdeb45324..3e9c16ff0 100644 --- a/docs/Classes/SDLSetInteriorVehicleDataResponse.html +++ b/docs/Classes/SDLSetInteriorVehicleDataResponse.html @@ -23,7 +23,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLModuleData *moduleData;
      +
      @property (nonatomic, strong, nullable) SDLModuleData *moduleData;

      Swift

      diff --git a/docs/Classes/SDLSetMediaClockTimer.html b/docs/Classes/SDLSetMediaClockTimer.html index 0dbcdb683..fc6eddec8 100644 --- a/docs/Classes/SDLSetMediaClockTimer.html +++ b/docs/Classes/SDLSetMediaClockTimer.html @@ -495,7 +495,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLStartTime *startTime;
      +
      @property (nonatomic, strong, nullable) SDLStartTime *startTime;

      Swift

      @@ -515,7 +515,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLStartTime *endTime;
      +
      @property (nonatomic, strong, nullable) SDLStartTime *endTime;

      Swift

      @@ -543,7 +543,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLUpdateMode _Nonnull updateMode;
      +
      @property (nonatomic, strong) SDLUpdateMode _Nonnull updateMode;

      Swift

      @@ -565,8 +565,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLAudioStreamingIndicator audioStreamingIndicator;
      +
      @property (nonatomic, strong, nullable) SDLAudioStreamingIndicator audioStreamingIndicator;

      Swift

      diff --git a/docs/Classes/SDLShow.html b/docs/Classes/SDLShow.html index b603d603e..f7a3a2111 100644 --- a/docs/Classes/SDLShow.html +++ b/docs/Classes/SDLShow.html @@ -340,7 +340,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *mainField1;
      +
      @property (nonatomic, strong, nullable) NSString *mainField1;

      Swift

      @@ -372,7 +372,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *mainField2;
      +
      @property (nonatomic, strong, nullable) NSString *mainField2;

      Swift

      @@ -405,7 +405,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *mainField3;
      +
      @property (nonatomic, strong, nullable) NSString *mainField3;

      Swift

      @@ -438,7 +438,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *mainField4;
      +
      @property (nonatomic, strong, nullable) NSString *mainField4;

      Swift

      @@ -468,7 +468,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLTextAlignment alignment;
      +
      @property (nonatomic, strong, nullable) SDLTextAlignment alignment;

      Swift

      @@ -500,7 +500,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *statusBar;
      +
      @property (nonatomic, strong, nullable) NSString *statusBar;

      Swift

      @@ -531,7 +531,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *mediaClock;
      +
      @property (nonatomic, strong, nullable) NSString *mediaClock;

      Swift

      @@ -558,7 +558,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *mediaTrack;
      +
      @property (nonatomic, strong, nullable) NSString *mediaTrack;

      Swift

      @@ -582,7 +582,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLImage *graphic;
      +
      @property (nonatomic, strong, nullable) SDLImage *graphic;

      Swift

      @@ -606,7 +606,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLImage *secondaryGraphic;
      +
      @property (nonatomic, strong, nullable) SDLImage *secondaryGraphic;

      Swift

      @@ -637,8 +637,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLSoftButton *> *softButtons;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLSoftButton *> *softButtons;

      Swift

      @@ -665,8 +664,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<NSString *> *customPresets;
      +
      @property (nonatomic, strong, nullable) NSArray<NSString *> *customPresets;

      Swift

      @@ -688,7 +686,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLMetadataTags *metadataTags;
      +
      @property (nonatomic, strong, nullable) SDLMetadataTags *metadataTags;

      Swift

      @@ -708,7 +706,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *windowID;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *windowID;

      Swift

      @@ -728,8 +726,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLTemplateConfiguration *templateConfiguration;
      +
      @property (nonatomic, strong, nullable) SDLTemplateConfiguration *templateConfiguration;

      Swift

      @@ -751,7 +748,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *templateTitle;
      +
      @property (nonatomic, strong, nullable) NSString *templateTitle;

      Swift

      diff --git a/docs/Classes/SDLShowAppMenu.html b/docs/Classes/SDLShowAppMenu.html index 4cb34be70..96b7d2904 100644 --- a/docs/Classes/SDLShowAppMenu.html +++ b/docs/Classes/SDLShowAppMenu.html @@ -51,7 +51,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *menuID;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *menuID;

      Swift

      diff --git a/docs/Classes/SDLShowConstantTBT.html b/docs/Classes/SDLShowConstantTBT.html index 7d54e020e..ab92678d0 100644 --- a/docs/Classes/SDLShowConstantTBT.html +++ b/docs/Classes/SDLShowConstantTBT.html @@ -94,7 +94,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *navigationText1;
      +
      @property (nonatomic, strong, nullable) NSString *navigationText1;

      Swift

      @@ -114,7 +114,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *navigationText2;
      +
      @property (nonatomic, strong, nullable) NSString *navigationText2;

      Swift

      @@ -134,7 +134,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *eta;
      +
      @property (nonatomic, strong, nullable) NSString *eta;

      Swift

      @@ -154,7 +154,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *timeToDestination;
      +
      @property (nonatomic, strong, nullable) NSString *timeToDestination;

      Swift

      @@ -174,7 +174,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *totalDistance;
      +
      @property (nonatomic, strong, nullable) NSString *totalDistance;

      Swift

      @@ -199,7 +199,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLImage *turnIcon;
      +
      @property (nonatomic, strong, nullable) SDLImage *turnIcon;

      Swift

      @@ -224,7 +224,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLImage *nextTurnIcon;
      +
      @property (nonatomic, strong, nullable) SDLImage *nextTurnIcon;

      Swift

      @@ -244,8 +244,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLFloat> *distanceToManeuver;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *distanceToManeuver;

      Swift

      @@ -265,8 +264,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLFloat> *distanceToManeuverScale;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *distanceToManeuverScale;

      Swift

      @@ -286,8 +284,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *maneuverComplete;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *maneuverComplete;

      Swift

      @@ -312,8 +309,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<SDLSoftButton *> *softButtons;
      +
      @property (nonatomic, strong, nullable) NSArray<SDLSoftButton *> *softButtons;

      Swift

      diff --git a/docs/Classes/SDLSingleTireStatus.html b/docs/Classes/SDLSingleTireStatus.html index edf624651..fa9b3d1a0 100644 --- a/docs/Classes/SDLSingleTireStatus.html +++ b/docs/Classes/SDLSingleTireStatus.html @@ -30,8 +30,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    SDLComponentVolumeStatus _Nonnull status;
      +
      @property (nonatomic, strong) SDLComponentVolumeStatus _Nonnull status;

      Swift

      @@ -51,8 +50,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    SDLTPMS monitoringSystemStatus;
      +
      @property (nonatomic, strong, nullable) SDLTPMS monitoringSystemStatus;

      Swift

      @@ -72,7 +70,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable) NSNumber<SDLFloat> *pressure;
      +
      @property (nonatomic, copy, nullable) NSNumber<SDLFloat> *pressure;

      Swift

      diff --git a/docs/Classes/SDLSlider.html b/docs/Classes/SDLSlider.html index 72ff6d739..52f9c7447 100644 --- a/docs/Classes/SDLSlider.html +++ b/docs/Classes/SDLSlider.html @@ -190,7 +190,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull numTicks;
      +
      @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull numTicks;

      Swift

      @@ -212,7 +212,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull position;
      +
      @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull position;

      Swift

      @@ -234,7 +234,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSString *_Nonnull sliderHeader;
      +
      @property (nonatomic, strong) NSString *_Nonnull sliderHeader;

      Swift

      @@ -261,8 +261,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSArray<NSString *> *sliderFooter;
      +
      @property (nonatomic, strong, nullable) NSArray<NSString *> *sliderFooter;

      Swift

      @@ -284,7 +283,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *timeout;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *timeout;

      Swift

      @@ -310,7 +309,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *cancelID;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *cancelID;

      Swift

      diff --git a/docs/Classes/SDLSliderResponse.html b/docs/Classes/SDLSliderResponse.html index e9fe72714..cac09d497 100644 --- a/docs/Classes/SDLSliderResponse.html +++ b/docs/Classes/SDLSliderResponse.html @@ -23,8 +23,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *sliderPosition;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *sliderPosition;

      Swift

      diff --git a/docs/Classes/SDLSoftButton.html b/docs/Classes/SDLSoftButton.html index 55457260f..f8f0d3337 100644 --- a/docs/Classes/SDLSoftButton.html +++ b/docs/Classes/SDLSoftButton.html @@ -95,8 +95,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic)
      -    SDLRPCButtonNotificationHandler _Nonnull handler;
      +
      @property (nonatomic, copy) SDLRPCButtonNotificationHandler _Nonnull handler;

      Swift

      @@ -116,7 +115,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLSoftButtonType _Nonnull type;
      +
      @property (nonatomic, strong) SDLSoftButtonType _Nonnull type;

      Swift

      @@ -136,7 +135,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSString *text;
      +
      @property (nonatomic, strong, nullable) NSString *text;

      Swift

      @@ -156,7 +155,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLImage *image;
      +
      @property (nonatomic, strong, nullable) SDLImage *image;

      Swift

      @@ -176,8 +175,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *isHighlighted;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *isHighlighted;

      Swift

      @@ -197,7 +195,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull softButtonID;
      +
      @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull softButtonID;

      Swift

      @@ -217,7 +215,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) SDLSystemAction systemAction;
      +
      @property (nonatomic, strong, nullable) SDLSystemAction systemAction;

      Swift

      diff --git a/docs/Classes/SDLSoftButtonCapabilities.html b/docs/Classes/SDLSoftButtonCapabilities.html index d0b3efca7..eaf87160f 100644 --- a/docs/Classes/SDLSoftButtonCapabilities.html +++ b/docs/Classes/SDLSoftButtonCapabilities.html @@ -31,8 +31,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSNumber<SDLBool> *_Nonnull shortPressAvailable;
      +
      @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull shortPressAvailable;

      Swift

      @@ -54,8 +53,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSNumber<SDLBool> *_Nonnull longPressAvailable;
      +
      @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull longPressAvailable;

      Swift

      @@ -77,8 +75,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSNumber<SDLBool> *_Nonnull upDownAvailable;
      +
      @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull upDownAvailable;

      Swift

      @@ -98,8 +95,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSNumber<SDLBool> *_Nonnull imageSupported;
      +
      @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull imageSupported;

      Swift

      @@ -121,8 +117,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLBool> *textSupported;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLBool> *textSupported;

      Swift

      diff --git a/docs/Classes/SDLSoftButtonObject.html b/docs/Classes/SDLSoftButtonObject.html index 6e526713c..00c851d9b 100644 --- a/docs/Classes/SDLSoftButtonObject.html +++ b/docs/Classes/SDLSoftButtonObject.html @@ -31,7 +31,7 @@

      Objective-C

      -
      @property (readonly, copy, nonatomic) NSString *_Nonnull name;
      +
      @property (nonatomic, copy, readonly) NSString *_Nonnull name;

      Swift

      @@ -49,8 +49,7 @@

      Objective-C

      -
      @property (readonly, strong, nonatomic)
      -    NSArray<SDLSoftButtonState *> *_Nonnull states;
      +
      @property (nonatomic, strong, readonly) NSArray<SDLSoftButtonState *> *_Nonnull states;

      Swift

      @@ -68,7 +67,7 @@

      Objective-C

      -
      @property (readonly, copy, nonatomic) SDLSoftButtonState *_Nonnull currentState;
      +
      @property (nonatomic, copy, readonly) SDLSoftButtonState *_Nonnull currentState;

      Swift

      @@ -86,8 +85,7 @@

      Objective-C

      -
      @property (readonly, strong, nonatomic)
      -    SDLSoftButton *_Nonnull currentStateSoftButton;
      +
      @property (nonatomic, strong, readonly) SDLSoftButton *_Nonnull currentStateSoftButton;

      Swift

      @@ -105,8 +103,7 @@

      Objective-C

      -
      @property (readonly, strong, nonatomic)
      -    SDLRPCButtonNotificationHandler _Nonnull eventHandler;
      +
      @property (nonatomic, strong, readonly) SDLRPCButtonNotificationHandler _Nonnull eventHandler;

      Swift

      diff --git a/docs/Classes/SDLSoftButtonState.html b/docs/Classes/SDLSoftButtonState.html index b6d0edd52..93db804d0 100644 --- a/docs/Classes/SDLSoftButtonState.html +++ b/docs/Classes/SDLSoftButtonState.html @@ -29,7 +29,7 @@

      Objective-C

      -
      @property (readonly, copy, nonatomic) NSString *_Nonnull name;
      +
      @property (nonatomic, copy, readonly) NSString *_Nonnull name;

      Swift

      @@ -47,7 +47,7 @@

      Objective-C

      -
      @property (readonly, strong, nonatomic, nullable) SDLArtwork *artwork;
      +
      @property (nonatomic, strong, readonly, nullable) SDLArtwork *artwork;

      Swift

      @@ -65,7 +65,7 @@

      Objective-C

      -
      @property (readonly, copy, nonatomic, nullable) NSString *text;
      +
      @property (nonatomic, copy, readonly, nullable) NSString *text;

      Swift

      @@ -83,7 +83,7 @@

      Objective-C

      -
      @property (getter=isHighlighted, assign, readwrite, nonatomic) BOOL highlighted;
      +
      @property (nonatomic, getter=isHighlighted) BOOL highlighted;

      Swift

      @@ -101,7 +101,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) SDLSystemAction _Nonnull systemAction;
      +
      @property (nonatomic, strong) SDLSystemAction _Nonnull systemAction;

      Swift

      @@ -119,7 +119,7 @@

      Objective-C

      -
      @property (readonly, strong, nonatomic) SDLSoftButton *_Nonnull softButton;
      +
      @property (nonatomic, strong, readonly) SDLSoftButton *_Nonnull softButton;

      Swift

      diff --git a/docs/Classes/SDLSpeak.html b/docs/Classes/SDLSpeak.html index 9dec6e060..9eff421ec 100644 --- a/docs/Classes/SDLSpeak.html +++ b/docs/Classes/SDLSpeak.html @@ -121,8 +121,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic)
      -    NSArray<SDLTTSChunk *> *_Nonnull ttsChunks;
      +
      @property (nonatomic, strong) NSArray<SDLTTSChunk *> *_Nonnull ttsChunks;

      Swift

      diff --git a/docs/Classes/SDLStartTime.html b/docs/Classes/SDLStartTime.html index b281b80eb..20f7ffc95 100644 --- a/docs/Classes/SDLStartTime.html +++ b/docs/Classes/SDLStartTime.html @@ -91,7 +91,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull hours;
      +
      @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull hours;

      Swift

      @@ -111,7 +111,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull minutes;
      +
      @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull minutes;

      Swift

      @@ -131,7 +131,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull seconds;
      +
      @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull seconds;

      Swift

      diff --git a/docs/Classes/SDLStationIDNumber.html b/docs/Classes/SDLStationIDNumber.html index ad1ea4a1e..392a42638 100644 --- a/docs/Classes/SDLStationIDNumber.html +++ b/docs/Classes/SDLStationIDNumber.html @@ -57,7 +57,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *countryCode;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *countryCode;

      Swift

      @@ -78,8 +78,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    NSNumber<SDLInt> *fccFacilityId;
      +
      @property (nonatomic, strong, nullable) NSNumber<SDLInt> *fccFacilityId;

      Swift

      diff --git a/docs/Classes/SDLStreamingMediaConfiguration.html b/docs/Classes/SDLStreamingMediaConfiguration.html index 077c26975..f353dad47 100644 --- a/docs/Classes/SDLStreamingMediaConfiguration.html +++ b/docs/Classes/SDLStreamingMediaConfiguration.html @@ -38,8 +38,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable)
      -    NSArray<Class<SDLSecurityType>> *securityManagers;
      +
      @property (nonatomic, copy, nullable) NSArray<Class<SDLSecurityType>> *securityManagers;
      @@ -54,8 +53,7 @@

      Objective-C

      -
      @property (assign, readwrite, nonatomic)
      -    SDLStreamingEncryptionFlag maximumDesiredEncryption;
      +
      @property (nonatomic) SDLStreamingEncryptionFlag maximumDesiredEncryption;

      Swift

      @@ -75,8 +73,7 @@

      Objective-C

      -
      @property (readwrite, copy, nonatomic, nullable)
      -    NSDictionary<NSString *, id> *customVideoEncoderSettings;
      +
      @property (nonatomic, copy, nullable) NSDictionary<NSString *, id> *customVideoEncoderSettings;

      Swift

      @@ -94,8 +91,7 @@

      Objective-C

      -
      @property (readwrite, nonatomic, nullable) id<SDLStreamingMediaManagerDataSource>
      -    dataSource;
      +
      @property (nonatomic, weak, nullable) id<SDLStreamingMediaManagerDataSource> dataSource;
      @@ -133,8 +129,7 @@

      Objective-C

      -
      @property (readwrite, strong, nonatomic, nullable)
      -    UIViewController *rootViewController;
      +
      @property (nonatomic, strong, nullable) UIViewController *rootViewController;

      Swift

      @@ -152,8 +147,7 @@

      Objective-C

      -
      @property (assign, readwrite, nonatomic)
      -    SDLCarWindowRenderingType carWindowRenderingType;
      +
      @property (nonatomic) SDLCarWindowRenderingType carWindowRenderingType;

      Swift

      @@ -171,7 +165,7 @@

      Objective-C

      -
      @property (assign, readwrite, nonatomic) BOOL enableForcedFramerateSync;
      +
      @property (nonatomic) BOOL enableForcedFramerateSync;

      Swift

      @@ -189,8 +183,7 @@

      Objective-C

      -
      @property (assign, readwrite, nonatomic)
      -    BOOL allowMultipleViewControllerOrientations;
      +
      @property (nonatomic) BOOL allowMultipleViewControllerOrientations;

      Swift

      diff --git a/docs/Classes/SDLStreamingMediaManager.html b/docs/Classes/SDLStreamingMediaManager.html index 5f3dd0701..56947da94 100644 --- a/docs/Classes/SDLStreamingMediaManager.html +++ b/docs/Classes/SDLStreamingMediaManager.html @@ -21,20 +21,21 @@

      Section Contents

    • showVideoBackgroundDisplay
    • -init
    • -initWithConnectionManager:configuration:
    • -
    • -startWithProtocol:
    • -
    • -startAudioWithProtocol:
    • -
    • -startVideoWithProtocol:
    • +
    • -initWithConnectionManager:configuration:systemCapabilityManager:
    • -stop
    • -stopAudio
    • -stopVideo
    • -sendVideoData:
    • -sendVideoData:presentationTimestamp:
    • -sendAudioData:
    • +
    • -startWithProtocol:
    • +
    • -startAudioWithProtocol:
    • +
    • -startVideoWithProtocol:

    Overview

    -

    Manager to help control streaming media services.

    +

    Manager to help control streaming (video and audio) media services.

    @@ -47,7 +48,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic) SDLTouchManager *_Nonnull touchManager;
    +
    @property (nonatomic, strong, readonly) SDLTouchManager *_Nonnull touchManager;

    Swift

    @@ -65,8 +66,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic)
    -    SDLAudioStreamManager *_Nonnull audioManager;
    +
    @property (nonatomic, strong, readonly) SDLAudioStreamManager *_Nonnull audioManager;

    Swift

    @@ -84,8 +84,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    UIViewController *rootViewController;
    +
    @property (nonatomic, strong, nullable) UIViewController *rootViewController;

    Swift

    @@ -103,8 +102,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable) id<SDLFocusableItemLocatorType>
    -    focusableItemManager;
    +
    @property (nonatomic, strong, readonly, nullable) id<SDLFocusableItemLocatorType> focusableItemManager;
    @@ -124,8 +122,8 @@

    Objective-C

    -
    @property (readonly, getter=isStreamingSupported, assign, nonatomic)
    -    BOOL streamingSupported;
    +
    @property (nonatomic, assign, unsafe_unretained, readonly,
    +          getter=isStreamingSupported) BOOL streamingSupported;

    Swift

    @@ -143,8 +141,8 @@

    Objective-C

    -
    @property (readonly, getter=isVideoConnected, assign, nonatomic)
    -    BOOL videoConnected;
    +
    @property (nonatomic, assign, unsafe_unretained, readonly,
    +          getter=isVideoConnected) BOOL videoConnected;

    Swift

    @@ -162,8 +160,8 @@

    Objective-C

    -
    @property (readonly, getter=isVideoEncrypted, assign, nonatomic)
    -    BOOL videoEncrypted;
    +
    @property (nonatomic, assign, unsafe_unretained, readonly,
    +          getter=isVideoEncrypted) BOOL videoEncrypted;

    Swift

    @@ -181,8 +179,8 @@

    Objective-C

    -
    @property (readonly, getter=isAudioConnected, assign, nonatomic)
    -    BOOL audioConnected;
    +
    @property (nonatomic, assign, unsafe_unretained, readonly,
    +          getter=isAudioConnected) BOOL audioConnected;

    Swift

    @@ -200,8 +198,8 @@

    Objective-C

    -
    @property (readonly, getter=isAudioEncrypted, assign, nonatomic)
    -    BOOL audioEncrypted;
    +
    @property (nonatomic, assign, unsafe_unretained, readonly,
    +          getter=isAudioEncrypted) BOOL audioEncrypted;

    Swift

    @@ -219,8 +217,8 @@

    Objective-C

    -
    @property (readonly, getter=isVideoStreamingPaused, assign, nonatomic)
    -    BOOL videoStreamingPaused;
    +
    @property (nonatomic, assign, unsafe_unretained, readonly,
    +          getter=isVideoStreamingPaused) BOOL videoStreamingPaused;

    Swift

    @@ -238,7 +236,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) CGSize screenSize;
    +
    @property (nonatomic, readonly) CGSize screenSize;

    Swift

    @@ -256,8 +254,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLVideoStreamingFormat *videoFormat;
    +
    @property (nonatomic, strong, readonly, nullable) SDLVideoStreamingFormat *videoFormat;

    Swift

    @@ -275,8 +272,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic)
    -    NSArray<SDLVideoStreamingFormat *> *_Nonnull supportedFormats;
    +
    @property (nonatomic, strong, readonly) NSArray<SDLVideoStreamingFormat *> *_Nonnull supportedFormats;

    Swift

    @@ -292,7 +288,7 @@

    The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.

    Warning

    - This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started). + This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started). @discussion Clients may call this once and retain the resulting pool, this call is cheap enough that it’s OK to call it once per frame.
    @@ -300,8 +296,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic, nullable)
    -    CVPixelBufferPoolRef pixelBufferPool;
    +
    @property (nonatomic, readonly, nullable) CVPixelBufferPoolRef pixelBufferPool;

    Swift

    @@ -321,8 +316,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic)
    -    SDLStreamingEncryptionFlag requestedEncryptionType;
    +
    @property (nonatomic) SDLStreamingEncryptionFlag requestedEncryptionType;

    Swift

    @@ -340,7 +334,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) BOOL showVideoBackgroundDisplay;
    +
    @property (nonatomic) BOOL showVideoBackgroundDisplay;

    Swift

    @@ -368,7 +362,7 @@

    -initWithConnectionManager:configuration:

    -

    Create a new streaming media manager for navigation and VPM apps with a specified configuration

    +

    Create a new streaming media manager for navigation and projection apps with a specified configuration.

    @@ -388,64 +382,35 @@

    Parameters

    configuration

    This session’s configuration

    -
    -

    Return Value

    -

    A new streaming manager

    -
    -

    - -startWithProtocol: +

    + -initWithConnectionManager:configuration:systemCapabilityManager:

    -

    Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    - - - -

    Objective-C

    -
    - (void)startWithProtocol:(nonnull SDLProtocol *)protocol;
    - - -

    Swift

    -
    func start(with protocol: SDLProtocol)
    - - - - -

    - -startAudioWithProtocol: -

    - -

    Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    +

    Create a new streaming media manager for navigation and projection apps with a specified configuration.

    Objective-C

    -
    - (void)startAudioWithProtocol:(nonnull SDLProtocol *)protocol;
    - - -

    Swift

    -
    func startAudio(with protocol: SDLProtocol)
    - - - - -

    - -startVideoWithProtocol: -

    - -

    Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    - - - -

    Objective-C

    -
    - (void)startVideoWithProtocol:(nonnull SDLProtocol *)protocol;
    +
    - (nonnull instancetype)
    +    initWithConnectionManager:
    +        (nonnull id<SDLConnectionManagerType>)connectionManager
    +                configuration:(nonnull SDLConfiguration *)configuration
    +      systemCapabilityManager:
    +          (nullable SDLSystemCapabilityManager *)systemCapabilityManager;
    -

    Swift

    -
    func startVideo(with protocol: SDLProtocol)
    - +

    Parameters

    +
    +
    connectionManager
    +

    The pass-through for RPCs

    +
    configuration
    +

    This session’s configuration

    +
    systemCapabilityManager
    +

    The system capability manager object for reading window capabilities

    +

    -stop @@ -587,4 +552,58 @@

    Return Value

    Whether or not the data was successfully sent.

    +

    + -startWithProtocol: +

    + +

    Start the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    + + + +

    Objective-C

    +
    - (void)startWithProtocol:(nonnull SDLProtocol *)protocol;
    + + +

    Swift

    +
    func start(with protocol: SDLProtocol)
    + + + + +

    + -startAudioWithProtocol: +

    + +

    Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    + + + +

    Objective-C

    +
    - (void)startAudioWithProtocol:(nonnull SDLProtocol *)protocol;
    + + +

    Swift

    +
    func startAudio(with protocol: SDLProtocol)
    + + + + +

    + -startVideoWithProtocol: +

    + +

    Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    + + + +

    Objective-C

    +
    - (void)startVideoWithProtocol:(nonnull SDLProtocol *)protocol;
    + + +

    Swift

    +
    func startVideo(with protocol: SDLProtocol)
    + + + +
    diff --git a/docs/Classes/SDLStreamingVideoScaleManager.html b/docs/Classes/SDLStreamingVideoScaleManager.html index 66e04dc5f..58a144874 100644 --- a/docs/Classes/SDLStreamingVideoScaleManager.html +++ b/docs/Classes/SDLStreamingVideoScaleManager.html @@ -30,7 +30,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) float scale;
    +
    @property (nonatomic) float scale;

    Swift

    @@ -48,7 +48,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) CGSize displayViewportResolution;
    +
    @property (nonatomic) CGSize displayViewportResolution;

    Swift

    @@ -66,7 +66,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) CGRect appViewportFrame;
    +
    @property (nonatomic, readonly) CGRect appViewportFrame;

    Swift

    diff --git a/docs/Classes/SDLSubscribeButton.html b/docs/Classes/SDLSubscribeButton.html index 8f763893e..404652315 100644 --- a/docs/Classes/SDLSubscribeButton.html +++ b/docs/Classes/SDLSubscribeButton.html @@ -135,8 +135,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic)
    -    SDLRPCButtonNotificationHandler _Nonnull handler;
    +
    @property (nonatomic, copy) SDLRPCButtonNotificationHandler _Nonnull handler;

    Swift

    @@ -155,7 +154,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLButtonName _Nonnull buttonName;
    +
    @property (nonatomic, strong) SDLButtonName _Nonnull buttonName;

    Swift

    diff --git a/docs/Classes/SDLSubscribeVehicleData.html b/docs/Classes/SDLSubscribeVehicleData.html index f88d54d04..b2f2d2f64 100644 --- a/docs/Classes/SDLSubscribeVehicleData.html +++ b/docs/Classes/SDLSubscribeVehicleData.html @@ -382,7 +382,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *gps;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *gps;

    Swift

    @@ -400,7 +400,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *speed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *speed;

    Swift

    @@ -418,7 +418,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *rpm;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *rpm;

    Swift

    @@ -436,7 +436,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelLevel;

    Swift

    @@ -454,8 +454,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *fuelLevel_State;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelLevel_State;

    Swift

    @@ -473,7 +472,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *fuelRange;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelRange;

    Swift

    @@ -491,8 +490,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *instantFuelConsumption;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *instantFuelConsumption;

    Swift

    @@ -510,8 +508,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *externalTemperature;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *externalTemperature;

    Swift

    @@ -529,7 +526,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *prndl;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *prndl;

    Swift

    @@ -547,8 +544,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *tirePressure;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *tirePressure;

    Swift

    @@ -566,7 +562,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *odometer;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *odometer;

    Swift

    @@ -584,7 +580,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *beltStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *beltStatus;

    Swift

    @@ -602,8 +598,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *bodyInformation;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *bodyInformation;

    Swift

    @@ -621,8 +616,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *deviceStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *deviceStatus;

    Swift

    @@ -640,8 +634,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *driverBraking;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *driverBraking;

    Swift

    @@ -659,8 +652,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *wiperStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *wiperStatus;

    Swift

    @@ -678,8 +670,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *headLampStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *headLampStatus;

    Swift

    @@ -697,8 +688,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *engineOilLife;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *engineOilLife;

    Swift

    @@ -716,8 +706,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *engineTorque;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *engineTorque;

    Swift

    @@ -735,8 +724,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *accPedalPosition;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *accPedalPosition;

    Swift

    @@ -754,8 +742,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *steeringWheelAngle;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *steeringWheelAngle;

    Swift

    @@ -773,7 +760,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *eCallInfo;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *eCallInfo;

    Swift

    @@ -791,8 +778,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *airbagStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *airbagStatus;

    Swift

    @@ -810,8 +796,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *emergencyEvent;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *emergencyEvent;

    Swift

    @@ -829,8 +814,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *clusterModeStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *clusterModeStatus;

    Swift

    @@ -848,7 +832,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *myKey;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *myKey;

    Swift

    @@ -866,8 +850,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *electronicParkBrakeStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *electronicParkBrakeStatus;

    Swift

    @@ -885,7 +868,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *turnSignal;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *turnSignal;

    Swift

    @@ -903,8 +886,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *cloudAppVehicleID;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *cloudAppVehicleID;

    Swift

    diff --git a/docs/Classes/SDLSubscribeVehicleDataResponse.html b/docs/Classes/SDLSubscribeVehicleDataResponse.html index efb804048..d6a48b4c2 100644 --- a/docs/Classes/SDLSubscribeVehicleDataResponse.html +++ b/docs/Classes/SDLSubscribeVehicleDataResponse.html @@ -55,7 +55,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *gps;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *gps;

    Swift

    @@ -75,7 +75,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *speed;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *speed;

    Swift

    @@ -95,7 +95,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *rpm;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *rpm;

    Swift

    @@ -115,8 +115,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *fuelLevel;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *fuelLevel;

    Swift

    @@ -136,8 +135,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *fuelLevel_State;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *fuelLevel_State;

    Swift

    @@ -157,8 +155,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *fuelRange;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *fuelRange;

    Swift

    @@ -178,8 +175,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *instantFuelConsumption;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *instantFuelConsumption;

    Swift

    @@ -199,8 +195,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *externalTemperature;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *externalTemperature;

    Swift

    @@ -220,7 +215,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *prndl;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *prndl;

    Swift

    @@ -240,8 +235,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *tirePressure;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *tirePressure;

    Swift

    @@ -261,8 +255,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *odometer;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *odometer;

    Swift

    @@ -282,8 +275,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *beltStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *beltStatus;

    Swift

    @@ -303,8 +295,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *bodyInformation;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *bodyInformation;

    Swift

    @@ -324,8 +315,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *deviceStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *deviceStatus;

    Swift

    @@ -345,8 +335,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *driverBraking;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *driverBraking;

    Swift

    @@ -366,8 +355,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *wiperStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *wiperStatus;

    Swift

    @@ -387,8 +375,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *headLampStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *headLampStatus;

    Swift

    @@ -408,8 +395,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *engineOilLife;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *engineOilLife;

    Swift

    @@ -429,8 +415,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *engineTorque;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *engineTorque;

    Swift

    @@ -450,8 +435,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *accPedalPosition;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *accPedalPosition;

    Swift

    @@ -471,8 +455,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *steeringWheelAngle;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *steeringWheelAngle;

    Swift

    @@ -492,8 +475,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *eCallInfo;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *eCallInfo;

    Swift

    @@ -513,8 +495,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *airbagStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *airbagStatus;

    Swift

    @@ -534,8 +515,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *emergencyEvent;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *emergencyEvent;

    Swift

    @@ -555,8 +535,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *clusterModes;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *clusterModes;

    Swift

    @@ -576,7 +555,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *myKey;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *myKey;

    Swift

    @@ -596,8 +575,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *electronicParkBrakeStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *electronicParkBrakeStatus;

    Swift

    @@ -617,8 +595,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *turnSignal;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *turnSignal;

    Swift

    @@ -638,8 +615,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *cloudAppVehicleID;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *cloudAppVehicleID;

    Swift

    diff --git a/docs/Classes/SDLSyncMsgVersion.html b/docs/Classes/SDLSyncMsgVersion.html index ac6fa8d55..6ef12b852 100644 --- a/docs/Classes/SDLSyncMsgVersion.html +++ b/docs/Classes/SDLSyncMsgVersion.html @@ -61,7 +61,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull majorVersion;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull majorVersion;

    Swift

    @@ -81,7 +81,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull minorVersion;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull minorVersion;

    Swift

    @@ -101,8 +101,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLInt> *patchVersion;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *patchVersion;

    Swift

    diff --git a/docs/Classes/SDLSystemCapability.html b/docs/Classes/SDLSystemCapability.html index 7000c1682..ce53290ae 100644 --- a/docs/Classes/SDLSystemCapability.html +++ b/docs/Classes/SDLSystemCapability.html @@ -233,8 +233,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLSystemCapabilityType _Nonnull systemCapabilityType;
    +
    @property (nonatomic, strong) SDLSystemCapabilityType _Nonnull systemCapabilityType;

    Swift

    @@ -254,8 +253,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLAppServicesCapabilities *appServicesCapabilities;
    +
    @property (nonatomic, strong, nullable) SDLAppServicesCapabilities *appServicesCapabilities;

    Swift

    @@ -275,8 +273,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLNavigationCapability *navigationCapability;
    +
    @property (nonatomic, strong, nullable) SDLNavigationCapability *navigationCapability;

    Swift

    @@ -296,8 +293,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLPhoneCapability *phoneCapability;
    +
    @property (nonatomic, strong, nullable) SDLPhoneCapability *phoneCapability;

    Swift

    @@ -317,8 +313,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVideoStreamingCapability *videoStreamingCapability;
    +
    @property (nonatomic, strong, nullable) SDLVideoStreamingCapability *videoStreamingCapability;

    Swift

    @@ -338,8 +333,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLRemoteControlCapabilities *remoteControlCapability;
    +
    @property (nonatomic, strong, nullable) SDLRemoteControlCapabilities *remoteControlCapability;

    Swift

    @@ -359,8 +353,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLSeatLocationCapability *seatLocationCapability;
    +
    @property (nonatomic, strong, nullable) SDLSeatLocationCapability *seatLocationCapability;

    Swift

    @@ -382,8 +375,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLDisplayCapability *> *displayCapabilities;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLDisplayCapability *> *displayCapabilities;

    Swift

    diff --git a/docs/Classes/SDLSystemCapabilityManager.html b/docs/Classes/SDLSystemCapabilityManager.html index a31d5d5e7..d820c8c8b 100644 --- a/docs/Classes/SDLSystemCapabilityManager.html +++ b/docs/Classes/SDLSystemCapabilityManager.html @@ -3,7 +3,6 @@

    SDLSystemCapabilityManager Class Reference

    Section Contents

    Overview

    @@ -40,24 +42,6 @@

    Overview

    -

    - supportsSubscriptions -

    - -

    YES if subscriptions are available on the connected head unit. If NO, calls to subscribeToCapabilityType:withBlock and subscribeToCapabilityType:withObserver:selector will fail.

    - - - -

    Objective-C

    -
    @property (readonly, assign, nonatomic) BOOL supportsSubscriptions;
    - - -

    Swift

    -
    var supportsSubscriptions: Bool { get }
    - - - -

    displays

    @@ -74,8 +58,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    NSArray<SDLDisplayCapability *> *displays;
    +
    @property (nonatomic, strong, readonly, nullable) NSArray<SDLDisplayCapability *> *displays;

    Swift

    @@ -99,8 +82,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLDisplayCapabilities *displayCapabilities;
    +
    @property (nonatomic, strong, readonly, nullable) SDLDisplayCapabilities *displayCapabilities;

    Swift

    @@ -124,8 +106,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLHMICapabilities *hmiCapabilities;
    +
    @property (nonatomic, strong, readonly, nullable) SDLHMICapabilities *hmiCapabilities;

    Swift

    @@ -150,8 +131,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic, nullable)
    -    NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;
    +
    @property (nonatomic, copy, readonly, nullable) NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;

    Swift

    @@ -175,8 +155,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic, nullable)
    -    NSArray<SDLButtonCapabilities *> *buttonCapabilities;
    +
    @property (nonatomic, copy, readonly, nullable) NSArray<SDLButtonCapabilities *> *buttonCapabilities;

    Swift

    @@ -201,8 +180,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLPresetBankCapabilities *presetBankCapabilities;
    +
    @property (nonatomic, strong, readonly, nullable) SDLPresetBankCapabilities *presetBankCapabilities;

    Swift

    @@ -226,8 +204,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic, nullable)
    -    NSArray<SDLHMIZoneCapabilities> *hmiZoneCapabilities;
    +
    @property (nonatomic, copy, readonly, nullable) NSArray<SDLHMIZoneCapabilities> *hmiZoneCapabilities;

    Swift

    @@ -251,8 +228,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic, nullable)
    -    NSArray<SDLSpeechCapabilities> *speechCapabilities;
    +
    @property (nonatomic, copy, readonly, nullable) NSArray<SDLSpeechCapabilities> *speechCapabilities;

    Swift

    @@ -276,8 +252,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic, nullable)
    -    NSArray<SDLPrerecordedSpeech> *prerecordedSpeechCapabilities;
    +
    @property (nonatomic, copy, readonly, nullable) NSArray<SDLPrerecordedSpeech> *prerecordedSpeechCapabilities;

    Swift

    @@ -301,7 +276,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) BOOL vrCapability;
    +
    @property (nonatomic, readonly) BOOL vrCapability;

    Swift

    @@ -325,8 +300,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic, nullable)
    -    NSArray<SDLAudioPassThruCapabilities *> *audioPassThruCapabilities;
    +
    @property (nonatomic, copy, readonly, nullable) NSArray<SDLAudioPassThruCapabilities *> *audioPassThruCapabilities;

    Swift

    @@ -350,8 +324,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLAudioPassThruCapabilities *pcmStreamCapability;
    +
    @property (nonatomic, strong, readonly, nullable) SDLAudioPassThruCapabilities *pcmStreamCapability;

    Swift

    @@ -376,8 +349,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLAppServicesCapabilities *appServicesCapabilities;
    +
    @property (nonatomic, strong, readonly, nullable) SDLAppServicesCapabilities *appServicesCapabilities;

    Swift

    @@ -402,8 +374,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLNavigationCapability *navigationCapability;
    +
    @property (nonatomic, strong, readonly, nullable) SDLNavigationCapability *navigationCapability;

    Swift

    @@ -428,8 +399,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLPhoneCapability *phoneCapability;
    +
    @property (nonatomic, strong, readonly, nullable) SDLPhoneCapability *phoneCapability;

    Swift

    @@ -454,8 +424,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLVideoStreamingCapability *videoStreamingCapability;
    +
    @property (nonatomic, strong, readonly, nullable) SDLVideoStreamingCapability *videoStreamingCapability;

    Swift

    @@ -480,8 +449,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLRemoteControlCapabilities *remoteControlCapability;
    +
    @property (nonatomic, strong, readonly, nullable) SDLRemoteControlCapabilities *remoteControlCapability;

    Swift

    @@ -506,8 +474,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLSeatLocationCapability *seatLocationCapability;
    +
    @property (nonatomic, strong, readonly, nullable) SDLSeatLocationCapability *seatLocationCapability;

    Swift

    @@ -527,8 +494,7 @@

    Objective-C

    -
    @property (readonly, strong, nonatomic, nullable)
    -    SDLWindowCapability *defaultMainWindowCapability;
    +
    @property (nonatomic, strong, readonly, nullable) SDLWindowCapability *defaultMainWindowCapability;

    Swift

    @@ -537,6 +503,24 @@

    Swift

    +

    + supportsSubscriptions +

    + +

    YES if subscriptions are available on the connected module and you will automatically be notified if the value changes on the module. If NO, calls to subscribe methods will subscribe to updates, but the module will not automatically notify you. You will need to call updateWithCapabilityType:completionHandler: to force an update if you need one (though this should be rare). This does not apply to the DISPLAYS capability type which you can always subscribe to.

    + + + +

    Objective-C

    +
    @property (nonatomic, readonly) BOOL supportsSubscriptions;
    + + +

    Swift

    +
    var supportsSubscriptions: Bool { get }
    + + + +

    -init

    @@ -617,11 +601,65 @@

    Swift

    +

    + -windowCapabilityWithWindowID: +

    + +

    Returns the window capability of one of your app’s windows with the specified window ID that is on the primary display (i.e. the head unit itself). This is a convenience method to easily access capabilities of windows such as your apps’ widget windows.

    + +

    To get the capabilities of the main window on the main display (i.e. your app’s primary app screen on the head unit itself).

    + + + +

    Objective-C

    +
    - (nullable SDLWindowCapability *)windowCapabilityWithWindowID:
    +    (NSUInteger)windowID;
    + + +

    Swift

    +
    func windowCapability(withWindowID windowID: UInt) -> SDLWindowCapability?
    + + + +

    Parameters

    +
    +
    windowID
    +

    The ID of the window from which to get capabilities +@returns The window window capabilities of the window with the specified windowID, or nil if the window is not known or no window capabilities exist.

    +
    + +

    + -isCapabilitySupported: +

    + +

    Returns whether or not the capability type is supported on the module. You can use this to check if subscribing to the capability will work. If this returns NO, then the feature is not supported by the head unit. If YES, the feature is supported by the head unit. You can subscribe to the capability type to get more information about the capability’s support and features on the connected module.

    + + + +

    Objective-C

    +
    - (BOOL)isCapabilitySupported:(nonnull SDLSystemCapabilityType)type;
    + + +

    Swift

    +
    func isCapabilitySupported(type: SDLSystemCapabilityType) -> Bool
    + + + +

    Parameters

    +
    +
    type
    +

    The SystemCapabilityType that will be checked.

    +
    +
    +

    Return Value

    +

    Whether or not type is supported by the connected head unit.

    +
    +

    -updateCapabilityType:completionHandler:

    -

    Retrieves a capability type from the remote system. This function must be called in order to retrieve the values for navigationCapability, phoneCapability, videoStreamingCapability, remoteControlCapability, and appServicesCapabilities. If you do not call this method first, those values will be nil. After calling this method, assuming there is no error in the handler, you may retrieve the capability you requested from the manager within the handler.

    +

    This method has been superseded by the subscribeToCapabilityType: methods. You should use one of those methods instead unless you only want a value once (you don’t want to keep a long-lasting observer) and it must be current (most capabilities do not need to be updated). If you have a separate subscription observer and are connected to a head unit that does not support subscriptions, when this method returns, it will also call all subscription callbacks that you’ve set up with the new value if there is one. Therefore, you can use this method to force an update to all subscriptions of that particular type on head units that don’t support subscriptions (supportsSubscriptions == NO).

    @@ -647,7 +685,13 @@

    -subscribeToCapabilityType:withBlock:

    -

    Subscribe to a particular capability type using a block callback

    +

    Subscribe to a particular capability type using a block callback.

    + +

    On v5.1.0+ systems (where supportsSubscriptions == YES): +This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated.

    + +

    On sub-v5.1.0 systems (where supportsSubscriptions == NO): +The method will be called immediately with the current value and will not be automatically called every time the value is updated, unless the type is DISPLAYS which is supported on every version. If updateCapabilityType:completionHandler is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this SDLSystemCapabilityType, then the value will be retrieved and returned.

    @@ -671,21 +715,69 @@

    Parameters

    Return Value

    -

    An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if subscriptions aren’t available on this head unit

    +

    An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if the manager can’t attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS).

    +
    + +

    + -subscribeToCapabilityType:withUpdateHandler: +

    + +

    Subscribe to a particular capability type using a handler callback.

    + +

    On v5.1.0+ systems (where supportsSubscriptions == YES): +This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated.

    + +

    Note that when the cached value is returned, the subscribed flag on the handler will be false until the subscription completes successfully and a new value is retrieved.

    + +

    On sub-v5.1.0 systems (where supportsSubscriptions == NO): +The method will be called immediately with the current value and will not be automatically called every time the value is updated, unless the type is DISPLAYS which is supported on every version. If updateCapabilityType:completionHandler is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this SDLSystemCapabilityType, then the value will be retrieved and returned.

    + + + +

    Objective-C

    +
    - (nullable id<NSObject>)
    +    subscribeToCapabilityType:(nonnull SDLSystemCapabilityType)type
    +            withUpdateHandler:
    +                (nonnull SDLCapabilityUpdateWithErrorHandler)handler;
    + + +

    Swift

    +
    func subscribe(capabilityType type: SDLSystemCapabilityType, updateHandler handler: @escaping SDLCapabilityUpdateWithErrorHandler) -> NSObjectProtocol?
    + + + +

    Parameters

    +
    +
    type
    +

    The type of capability to subscribe to

    +
    handler
    +

    The block to be called when the capability is updated with an error if one occurs

    +
    +
    +

    Return Value

    +

    An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if the manager can’t attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS).

    -subscribeToCapabilityType:withObserver:selector:

    -

    Subscribe to a particular capability type with a selector callback. The selector supports the following parameters:

    +

    Subscribe to a particular capability type with a selector callback.

    + +

    The selector supports the following parameters:

      -
    1. No parameters e.g. - (void)phoneCapabilityUpdated;
    2. -
    3. One SDLSystemCapability * parameter e.g. - (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability
    4. +
    5. No parameters e.g. - (void)phoneCapabilityUpdated;

    6. +
    7. One SDLSystemCapability * parameter, e.g. - (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability

    8. +
    9. Two parameters, one SDLSystemCapability * parameter, and one NSError parameter, e.g. - (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability error:(NSError *)error

    10. +
    11. Three parameters, one SDLSystemCapability * parameter, one NSError parameter, and one BOOL parameter e.g. - (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability error:(NSError *)error subscribed:(BOOL)subscribed

    -

    This method will be called immediately with the current value and called every time the value is updated on RPC v5.1.0+ systems (supportsSubscriptions == YES). If this method is called on a sub-v5.1.0 system (supportsSubscriptions == NO), the method will return NO and the selector will never be called.

    +

    On v5.1.0+ systems (where supportsSubscriptions == YES): +This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated.

    + +

    On sub-v5.1.0 systems (where supportsSubscriptions == NO): +The method will be called immediately with the current value and will not be automatically called every time the value is updated, unless the type is DISPLAYS which is supported on every version. If updateCapabilityType:completionHandler is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this SDLSystemCapabilityType, then the value will be retrieved and returned.

    @@ -711,14 +803,14 @@

    Parameters

    Return Value

    -

    Whether or not the subscription succeeded. NO if the connected system doesn’t support capability subscriptions, or if the selector doesn’t support the correct parameters (see above)

    +

    YES if the manager is attempting the subscription, or NO if the manager can’t attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS), or the selector doesn’t contain the correct number of parameters.

    -unsubscribeFromCapabilityType:withObserver:

    -

    Unsubscribe from a particular capability type. If it was subscribed with a block, the return value should be passed to the observer to unsubscribe the block. If it was subscribed with a selector, the observer object should be passed to unsubscribe the object selector.

    +

    Unsubscribe from a particular capability type. If it was subscribed with a block / handler, the return value should be passed to the observer to unsubscribe the block. If it was subscribed with a selector, the observer object (on which the selector exists and is called) should be passed to unsubscribe the object selector.

    @@ -740,29 +832,4 @@

    Parameters

    The object that will be unsubscribed. If a block was subscribed, the return value should be passed. If a selector was subscribed, the observer object should be passed.

    -

    - -windowCapabilityWithWindowID: -

    - -

    Returns the window capability object of the primary display with the specified window ID. This is a convenient method to easily access capabilities of windows for instance widget windows of the main display.

    - - - -

    Objective-C

    -
    - (nullable SDLWindowCapability *)windowCapabilityWithWindowID:
    -    (NSUInteger)windowID;
    - - -

    Swift

    -
    func windowCapability(withWindowID windowID: UInt) -> SDLWindowCapability?
    - - - -

    Parameters

    -
    -
    windowID
    -

    The ID of the window to get capabilities -@returns The window capability object representing the window capabilities of the window with the specified window ID or nil if the window is not known or no window capabilities exist.

    -
    -
    diff --git a/docs/Classes/SDLSystemRequest.html b/docs/Classes/SDLSystemRequest.html index dc1c0ab0f..8f86d531e 100644 --- a/docs/Classes/SDLSystemRequest.html +++ b/docs/Classes/SDLSystemRequest.html @@ -90,7 +90,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLRequestType _Nonnull requestType;
    +
    @property (nonatomic, strong) SDLRequestType _Nonnull requestType;

    Swift

    @@ -110,7 +110,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *requestSubType;
    +
    @property (nonatomic, strong, nullable) NSString *requestSubType;

    Swift

    @@ -130,7 +130,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *fileName;
    +
    @property (nonatomic, strong, nullable) NSString *fileName;

    Swift

    diff --git a/docs/Classes/SDLTTSChunk.html b/docs/Classes/SDLTTSChunk.html index 49e87d098..0b7d9a233 100644 --- a/docs/Classes/SDLTTSChunk.html +++ b/docs/Classes/SDLTTSChunk.html @@ -229,7 +229,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull text;
    +
    @property (nonatomic, strong) NSString *_Nonnull text;

    Swift

    @@ -249,7 +249,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLSpeechCapabilities _Nonnull type;
    +
    @property (nonatomic, strong) SDLSpeechCapabilities _Nonnull type;

    Swift

    diff --git a/docs/Classes/SDLTemperature.html b/docs/Classes/SDLTemperature.html index 48f5932b2..f054b5c76 100644 --- a/docs/Classes/SDLTemperature.html +++ b/docs/Classes/SDLTemperature.html @@ -111,7 +111,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLTemperatureUnit _Nonnull unit;
    +
    @property (nonatomic, strong) SDLTemperatureUnit _Nonnull unit;

    Swift

    @@ -131,7 +131,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLFloat> *_Nonnull value;
    +
    @property (nonatomic, strong) NSNumber<SDLFloat> *_Nonnull value;

    Swift

    diff --git a/docs/Classes/SDLTemplateColorScheme.html b/docs/Classes/SDLTemplateColorScheme.html index d884c5fcc..b48650704 100644 --- a/docs/Classes/SDLTemplateColorScheme.html +++ b/docs/Classes/SDLTemplateColorScheme.html @@ -92,7 +92,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLRGBColor *primaryColor;
    +
    @property (nonatomic, strong, nullable) SDLRGBColor *primaryColor;

    Swift

    @@ -110,7 +110,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLRGBColor *secondaryColor;
    +
    @property (nonatomic, strong, nullable) SDLRGBColor *secondaryColor;

    Swift

    @@ -128,7 +128,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLRGBColor *backgroundColor;
    +
    @property (nonatomic, strong, nullable) SDLRGBColor *backgroundColor;

    Swift

    diff --git a/docs/Classes/SDLTemplateConfiguration.html b/docs/Classes/SDLTemplateConfiguration.html index 65aed20ac..7f258a053 100644 --- a/docs/Classes/SDLTemplateConfiguration.html +++ b/docs/Classes/SDLTemplateConfiguration.html @@ -105,7 +105,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull template;
    +
    @property (nonatomic, strong) NSString *_Nonnull template;

    Swift

    @@ -123,8 +123,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemplateColorScheme *dayColorScheme;
    +
    @property (nonatomic, strong, nullable) SDLTemplateColorScheme *dayColorScheme;

    Swift

    @@ -142,8 +141,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemplateColorScheme *nightColorScheme;
    +
    @property (nonatomic, strong, nullable) SDLTemplateColorScheme *nightColorScheme;

    Swift

    diff --git a/docs/Classes/SDLTextField.html b/docs/Classes/SDLTextField.html index dc976cc43..aeb66601b 100644 --- a/docs/Classes/SDLTextField.html +++ b/docs/Classes/SDLTextField.html @@ -7,6 +7,7 @@

    Section Contents

  • characterSet
  • width
  • rows
  • +
  • -initWithName:characterSet:width:rows:
  • Overview

    @@ -33,7 +34,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLTextFieldName _Nonnull name;
    +
    @property (nonatomic, strong) SDLTextFieldName _Nonnull name;

    Swift

    @@ -58,7 +59,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLCharacterSet _Nonnull characterSet;
    +
    @property (nonatomic, strong) SDLCharacterSet _Nonnull characterSet;

    Swift

    @@ -78,7 +79,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull width;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull width;

    Swift

    @@ -98,7 +99,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull rows;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull rows;

    Swift

    @@ -107,4 +108,36 @@

    Swift

    +

    + -initWithName:characterSet:width:rows: +

    + +

    Convenience initalizer for the TextField RPC struct

    + + + +

    Objective-C

    +
    - (nonnull instancetype)initWithName:(nonnull SDLTextFieldName)name
    +                        characterSet:(nonnull SDLCharacterSet)characterSet
    +                               width:(NSUInteger)width
    +                                rows:(NSUInteger)rows;
    + + +

    Swift

    +
    init(name: SDLTextFieldName, characterSet: SDLCharacterSet, width: UInt, rows: UInt)
    + + + +

    Parameters

    +
    +
    name
    +

    The name identifying this text field

    +
    characterSet
    +

    The character set of this text field

    +
    width
    +

    The number of characters per row allowed in this text field

    +
    rows
    +

    The number of rows allowed in this text field

    +
    + diff --git a/docs/Classes/SDLTireStatus.html b/docs/Classes/SDLTireStatus.html index 0c5c1f882..7f73d02ff 100644 --- a/docs/Classes/SDLTireStatus.html +++ b/docs/Classes/SDLTireStatus.html @@ -29,8 +29,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLWarningLightStatus _Nonnull pressureTelltale;
    +
    @property (nonatomic, strong) SDLWarningLightStatus _Nonnull pressureTelltale;

    Swift

    @@ -50,7 +49,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLSingleTireStatus *_Nonnull leftFront;
    +
    @property (nonatomic, strong) SDLSingleTireStatus *_Nonnull leftFront;

    Swift

    @@ -70,8 +69,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLSingleTireStatus *_Nonnull rightFront;
    +
    @property (nonatomic, strong) SDLSingleTireStatus *_Nonnull rightFront;

    Swift

    @@ -91,7 +89,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLSingleTireStatus *_Nonnull leftRear;
    +
    @property (nonatomic, strong) SDLSingleTireStatus *_Nonnull leftRear;

    Swift

    @@ -111,7 +109,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLSingleTireStatus *_Nonnull rightRear;
    +
    @property (nonatomic, strong) SDLSingleTireStatus *_Nonnull rightRear;

    Swift

    @@ -131,8 +129,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLSingleTireStatus *_Nonnull innerLeftRear;
    +
    @property (nonatomic, strong) SDLSingleTireStatus *_Nonnull innerLeftRear;

    Swift

    @@ -152,8 +149,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLSingleTireStatus *_Nonnull innerRightRear;
    +
    @property (nonatomic, strong) SDLSingleTireStatus *_Nonnull innerRightRear;

    Swift

    diff --git a/docs/Classes/SDLTouch.html b/docs/Classes/SDLTouch.html index bce3f080a..239d26845 100644 --- a/docs/Classes/SDLTouch.html +++ b/docs/Classes/SDLTouch.html @@ -57,7 +57,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) NSInteger identifier;
    +
    @property (nonatomic, readonly) NSInteger identifier;

    Swift

    @@ -76,7 +76,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) CGPoint location;
    +
    @property (nonatomic, readonly) CGPoint location;

    Swift

    @@ -95,7 +95,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) NSUInteger timeStamp;
    +
    @property (nonatomic, readonly) NSUInteger timeStamp;

    Swift

    @@ -114,7 +114,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) BOOL isFirstFinger;
    +
    @property (nonatomic, readonly) BOOL isFirstFinger;

    Swift

    @@ -133,7 +133,7 @@

    Objective-C

    -
    @property (readonly, assign, nonatomic) BOOL isSecondFinger;
    +
    @property (nonatomic, readonly) BOOL isSecondFinger;

    Swift

    diff --git a/docs/Classes/SDLTouchCoord.html b/docs/Classes/SDLTouchCoord.html index 84ae1fced..9d22dcb6d 100644 --- a/docs/Classes/SDLTouchCoord.html +++ b/docs/Classes/SDLTouchCoord.html @@ -24,7 +24,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLFloat> *_Nonnull x;
    +
    @property (nonatomic, strong) NSNumber<SDLFloat> *_Nonnull x;

    Swift

    @@ -44,7 +44,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLFloat> *_Nonnull y;
    +
    @property (nonatomic, strong) NSNumber<SDLFloat> *_Nonnull y;

    Swift

    diff --git a/docs/Classes/SDLTouchEvent.html b/docs/Classes/SDLTouchEvent.html index 42b7fe38c..c969d498a 100644 --- a/docs/Classes/SDLTouchEvent.html +++ b/docs/Classes/SDLTouchEvent.html @@ -29,7 +29,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull touchEventId;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull touchEventId;

    Swift

    @@ -55,8 +55,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<NSNumber<SDLInt> *> *_Nonnull timeStamp;
    +
    @property (nonatomic, strong) NSArray<NSNumber<SDLInt> *> *_Nonnull timeStamp;

    Swift

    @@ -76,8 +75,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSArray<SDLTouchCoord *> *_Nonnull coord;
    +
    @property (nonatomic, strong) NSArray<SDLTouchCoord *> *_Nonnull coord;

    Swift

    diff --git a/docs/Classes/SDLTouchEventCapabilities.html b/docs/Classes/SDLTouchEventCapabilities.html index e12f55c7b..81ef83e22 100644 --- a/docs/Classes/SDLTouchEventCapabilities.html +++ b/docs/Classes/SDLTouchEventCapabilities.html @@ -23,8 +23,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLBool> *_Nonnull pressAvailable;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull pressAvailable;

    Swift

    @@ -42,8 +41,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLBool> *_Nonnull multiTouchAvailable;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull multiTouchAvailable;

    Swift

    @@ -61,8 +59,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLBool> *_Nonnull doublePressAvailable;
    +
    @property (nonatomic, strong) NSNumber<SDLBool> *_Nonnull doublePressAvailable;

    Swift

    diff --git a/docs/Classes/SDLTouchManager.html b/docs/Classes/SDLTouchManager.html index 092e3a973..c43168c61 100644 --- a/docs/Classes/SDLTouchManager.html +++ b/docs/Classes/SDLTouchManager.html @@ -33,8 +33,7 @@

    Objective-C

    -
    @property (readwrite, nonatomic, nullable) id<SDLTouchManagerDelegate>
    -    touchEventDelegate;
    +
    @property (nonatomic, weak, nullable) id<SDLTouchManagerDelegate> touchEventDelegate;
    @@ -50,8 +49,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic, nullable)
    -    SDLTouchEventHandler touchEventHandler;
    +
    @property (nonatomic, copy, nullable) SDLTouchEventHandler touchEventHandler;

    Swift

    @@ -74,7 +72,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) CGFloat tapDistanceThreshold;
    +
    @property (nonatomic) CGFloat tapDistanceThreshold;

    Swift

    @@ -97,7 +95,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) CGFloat panDistanceThreshold;
    +
    @property (nonatomic) CGFloat panDistanceThreshold;

    Swift

    @@ -118,7 +116,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) CGFloat tapTimeThreshold;
    +
    @property (nonatomic) CGFloat tapTimeThreshold;

    Swift

    @@ -140,7 +138,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) CGFloat movementTimeThreshold;
    +
    @property (nonatomic) CGFloat movementTimeThreshold;

    Swift

    @@ -158,7 +156,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) BOOL enableSyncedPanning;
    +
    @property (nonatomic) BOOL enableSyncedPanning;

    Swift

    @@ -180,8 +178,8 @@

    Objective-C

    -
    @property (getter=isTouchEnabled, assign, readwrite, nonatomic)
    -    BOOL touchEnabled;
    +
    @property (nonatomic, assign, unsafe_unretained, readwrite,
    +          getter=isTouchEnabled) BOOL touchEnabled;

    Swift

    diff --git a/docs/Classes/SDLTurn.html b/docs/Classes/SDLTurn.html index 94f57d50d..fdbddbde3 100644 --- a/docs/Classes/SDLTurn.html +++ b/docs/Classes/SDLTurn.html @@ -54,7 +54,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *navigationText;
    +
    @property (nonatomic, strong, nullable) NSString *navigationText;

    Swift

    @@ -72,7 +72,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLImage *turnIcon;
    +
    @property (nonatomic, strong, nullable) SDLImage *turnIcon;

    Swift

    diff --git a/docs/Classes/SDLUnpublishAppService.html b/docs/Classes/SDLUnpublishAppService.html index 2a3668bad..2a44c58ff 100644 --- a/docs/Classes/SDLUnpublishAppService.html +++ b/docs/Classes/SDLUnpublishAppService.html @@ -47,7 +47,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull serviceID;
    +
    @property (nonatomic, strong) NSString *_Nonnull serviceID;

    Swift

    diff --git a/docs/Classes/SDLUnsubscribeButton.html b/docs/Classes/SDLUnsubscribeButton.html index dfe8ef708..368186f98 100644 --- a/docs/Classes/SDLUnsubscribeButton.html +++ b/docs/Classes/SDLUnsubscribeButton.html @@ -61,7 +61,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLButtonName _Nonnull buttonName;
    +
    @property (nonatomic, strong) SDLButtonName _Nonnull buttonName;

    Swift

    diff --git a/docs/Classes/SDLUnsubscribeVehicleData.html b/docs/Classes/SDLUnsubscribeVehicleData.html index 22f90d1ad..56c32ebce 100644 --- a/docs/Classes/SDLUnsubscribeVehicleData.html +++ b/docs/Classes/SDLUnsubscribeVehicleData.html @@ -381,7 +381,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *gps;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *gps;

    Swift

    @@ -399,7 +399,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *speed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *speed;

    Swift

    @@ -417,7 +417,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *rpm;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *rpm;

    Swift

    @@ -435,7 +435,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelLevel;

    Swift

    @@ -453,8 +453,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *fuelLevel_State;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelLevel_State;

    Swift

    @@ -472,7 +471,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *fuelRange;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *fuelRange;

    Swift

    @@ -490,8 +489,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *instantFuelConsumption;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *instantFuelConsumption;

    Swift

    @@ -509,8 +507,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *externalTemperature;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *externalTemperature;

    Swift

    @@ -528,7 +525,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *prndl;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *prndl;

    Swift

    @@ -546,8 +543,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *tirePressure;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *tirePressure;

    Swift

    @@ -565,7 +561,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *odometer;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *odometer;

    Swift

    @@ -583,7 +579,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *beltStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *beltStatus;

    Swift

    @@ -601,8 +597,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *bodyInformation;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *bodyInformation;

    Swift

    @@ -620,8 +615,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *deviceStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *deviceStatus;

    Swift

    @@ -639,8 +633,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *driverBraking;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *driverBraking;

    Swift

    @@ -658,8 +651,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *wiperStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *wiperStatus;

    Swift

    @@ -677,8 +669,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *headLampStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *headLampStatus;

    Swift

    @@ -696,8 +687,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *engineOilLife;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *engineOilLife;

    Swift

    @@ -715,8 +705,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *engineTorque;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *engineTorque;

    Swift

    @@ -734,8 +723,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *accPedalPosition;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *accPedalPosition;

    Swift

    @@ -753,8 +741,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *steeringWheelAngle;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *steeringWheelAngle;

    Swift

    @@ -772,7 +759,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *eCallInfo;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *eCallInfo;

    Swift

    @@ -790,8 +777,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *airbagStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *airbagStatus;

    Swift

    @@ -809,8 +795,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *emergencyEvent;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *emergencyEvent;

    Swift

    @@ -828,8 +813,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *clusterModeStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *clusterModeStatus;

    Swift

    @@ -847,7 +831,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *myKey;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *myKey;

    Swift

    @@ -865,8 +849,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *electronicParkBrakeStatus;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *electronicParkBrakeStatus;

    Swift

    @@ -884,7 +867,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLBool> *turnSignal;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *turnSignal;

    Swift

    @@ -902,8 +885,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *cloudAppVehicleID;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *cloudAppVehicleID;

    Swift

    diff --git a/docs/Classes/SDLUnsubscribeVehicleDataResponse.html b/docs/Classes/SDLUnsubscribeVehicleDataResponse.html index c28752ae6..ca32631db 100644 --- a/docs/Classes/SDLUnsubscribeVehicleDataResponse.html +++ b/docs/Classes/SDLUnsubscribeVehicleDataResponse.html @@ -55,7 +55,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *gps;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *gps;

    Swift

    @@ -75,7 +75,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *speed;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *speed;

    Swift

    @@ -95,7 +95,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *rpm;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *rpm;

    Swift

    @@ -115,8 +115,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *fuelLevel;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *fuelLevel;

    Swift

    @@ -136,8 +135,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *fuelLevel_State;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *fuelLevel_State;

    Swift

    @@ -157,8 +155,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *fuelRange;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *fuelRange;

    Swift

    @@ -178,8 +175,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *instantFuelConsumption;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *instantFuelConsumption;

    Swift

    @@ -199,8 +195,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *externalTemperature;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *externalTemperature;

    Swift

    @@ -220,7 +215,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *prndl;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *prndl;

    Swift

    @@ -240,8 +235,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *tirePressure;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *tirePressure;

    Swift

    @@ -261,8 +255,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *odometer;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *odometer;

    Swift

    @@ -282,8 +275,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *beltStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *beltStatus;

    Swift

    @@ -303,8 +295,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *bodyInformation;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *bodyInformation;

    Swift

    @@ -324,8 +315,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *deviceStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *deviceStatus;

    Swift

    @@ -345,8 +335,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *driverBraking;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *driverBraking;

    Swift

    @@ -366,8 +355,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *wiperStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *wiperStatus;

    Swift

    @@ -387,8 +375,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *headLampStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *headLampStatus;

    Swift

    @@ -408,8 +395,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *engineOilLife;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *engineOilLife;

    Swift

    @@ -429,8 +415,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *engineTorque;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *engineTorque;

    Swift

    @@ -450,8 +435,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *accPedalPosition;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *accPedalPosition;

    Swift

    @@ -471,8 +455,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *steeringWheelAngle;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *steeringWheelAngle;

    Swift

    @@ -492,8 +475,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *eCallInfo;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *eCallInfo;

    Swift

    @@ -513,8 +495,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *airbagStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *airbagStatus;

    Swift

    @@ -534,8 +515,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *emergencyEvent;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *emergencyEvent;

    Swift

    @@ -555,8 +535,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *clusterModes;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *clusterModes;

    Swift

    @@ -576,7 +555,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLVehicleDataResult *myKey;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *myKey;

    Swift

    @@ -596,8 +575,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *electronicParkBrakeStatus;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *electronicParkBrakeStatus;

    Swift

    @@ -617,8 +595,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *turnSignal;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *turnSignal;

    Swift

    @@ -638,8 +615,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLVehicleDataResult *cloudAppVehicleID;
    +
    @property (nonatomic, strong, nullable) SDLVehicleDataResult *cloudAppVehicleID;

    Swift

    diff --git a/docs/Classes/SDLUpdateTurnList.html b/docs/Classes/SDLUpdateTurnList.html index d16da92d7..e98cc7a63 100644 --- a/docs/Classes/SDLUpdateTurnList.html +++ b/docs/Classes/SDLUpdateTurnList.html @@ -56,7 +56,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSArray<SDLTurn *> *turnList;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLTurn *> *turnList;

    Swift

    @@ -74,8 +74,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLSoftButton *> *softButtons;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLSoftButton *> *softButtons;

    Swift

    diff --git a/docs/Classes/SDLVRHelpItem.html b/docs/Classes/SDLVRHelpItem.html index 907775e12..acbf941e7 100644 --- a/docs/Classes/SDLVRHelpItem.html +++ b/docs/Classes/SDLVRHelpItem.html @@ -90,7 +90,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSString *_Nonnull text;
    +
    @property (nonatomic, strong) NSString *_Nonnull text;

    Swift

    @@ -110,7 +110,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLImage *image;
    +
    @property (nonatomic, strong, nullable) SDLImage *image;

    Swift

    @@ -130,7 +130,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) NSNumber<SDLInt> *_Nonnull position;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull position;

    Swift

    diff --git a/docs/Classes/SDLVehicleDataResult.html b/docs/Classes/SDLVehicleDataResult.html index e0706fa0f..c5062b4fc 100644 --- a/docs/Classes/SDLVehicleDataResult.html +++ b/docs/Classes/SDLVehicleDataResult.html @@ -79,7 +79,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLVehicleDataType _Nonnull dataType;
    +
    @property (nonatomic, strong) SDLVehicleDataType _Nonnull dataType;

    Swift

    @@ -99,7 +99,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *customOEMDataType;
    +
    @property (nonatomic, strong, nullable) NSString *customOEMDataType;

    Swift

    @@ -117,8 +117,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLVehicleDataResultCode _Nonnull resultCode;
    +
    @property (nonatomic, strong) SDLVehicleDataResultCode _Nonnull resultCode;

    Swift

    diff --git a/docs/Classes/SDLVehicleType.html b/docs/Classes/SDLVehicleType.html index ec7846fd5..84f72b82c 100644 --- a/docs/Classes/SDLVehicleType.html +++ b/docs/Classes/SDLVehicleType.html @@ -30,7 +30,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *make;
    +
    @property (nonatomic, strong, nullable) NSString *make;

    Swift

    @@ -52,7 +52,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *model;
    +
    @property (nonatomic, strong, nullable) NSString *model;

    Swift

    @@ -74,7 +74,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *modelYear;
    +
    @property (nonatomic, strong, nullable) NSString *modelYear;

    Swift

    @@ -96,7 +96,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *trim;
    +
    @property (nonatomic, strong, nullable) NSString *trim;

    Swift

    diff --git a/docs/Classes/SDLVersion.html b/docs/Classes/SDLVersion.html index f40bb2386..f1c3af9b2 100644 --- a/docs/Classes/SDLVersion.html +++ b/docs/Classes/SDLVersion.html @@ -38,7 +38,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) NSUInteger major;
    +
    @property (nonatomic) NSUInteger major;

    Swift

    @@ -56,7 +56,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) NSUInteger minor;
    +
    @property (nonatomic) NSUInteger minor;

    Swift

    @@ -74,7 +74,7 @@

    Objective-C

    -
    @property (assign, readwrite, nonatomic) NSUInteger patch;
    +
    @property (nonatomic) NSUInteger patch;

    Swift

    @@ -92,7 +92,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic) NSString *_Nonnull stringVersion;
    +
    @property (nonatomic, copy, readonly) NSString *_Nonnull stringVersion;

    Swift

    diff --git a/docs/Classes/SDLVideoStreamingCapability.html b/docs/Classes/SDLVideoStreamingCapability.html index 6ae4cd8f6..52ae2f525 100644 --- a/docs/Classes/SDLVideoStreamingCapability.html +++ b/docs/Classes/SDLVideoStreamingCapability.html @@ -118,8 +118,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLImageResolution *preferredResolution;
    +
    @property (nonatomic, strong, nullable) SDLImageResolution *preferredResolution;

    Swift

    @@ -139,7 +138,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *maxBitrate;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *maxBitrate;

    Swift

    @@ -159,8 +158,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLVideoStreamingFormat *> *supportedFormats;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLVideoStreamingFormat *> *supportedFormats;

    Swift

    @@ -180,8 +178,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *hapticSpatialDataSupported;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *hapticSpatialDataSupported;

    Swift

    @@ -202,8 +199,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *diagonalScreenSize;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *diagonalScreenSize;

    Swift

    @@ -224,8 +220,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *pixelPerInch;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *pixelPerInch;

    Swift

    @@ -246,7 +241,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *scale;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *scale;

    Swift

    diff --git a/docs/Classes/SDLVideoStreamingFormat.html b/docs/Classes/SDLVideoStreamingFormat.html index b5b56e158..fb01f1d5c 100644 --- a/docs/Classes/SDLVideoStreamingFormat.html +++ b/docs/Classes/SDLVideoStreamingFormat.html @@ -25,8 +25,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    SDLVideoStreamingProtocol _Nonnull protocol;
    +
    @property (nonatomic, strong) SDLVideoStreamingProtocol _Nonnull protocol;

    Swift

    @@ -46,7 +45,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLVideoStreamingCodec _Nonnull codec;
    +
    @property (nonatomic, strong) SDLVideoStreamingCodec _Nonnull codec;

    Swift

    diff --git a/docs/Classes/SDLVoiceCommand.html b/docs/Classes/SDLVoiceCommand.html index 95bffce60..4b3d3236b 100644 --- a/docs/Classes/SDLVoiceCommand.html +++ b/docs/Classes/SDLVoiceCommand.html @@ -23,8 +23,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic)
    -    NSArray<NSString *> *_Nonnull voiceCommands;
    +
    @property (nonatomic, copy, readonly) NSArray<NSString *> *_Nonnull voiceCommands;

    Swift

    @@ -42,8 +41,7 @@

    Objective-C

    -
    @property (readonly, copy, nonatomic, nullable)
    -    SDLVoiceCommandSelectionHandler handler;
    +
    @property (nonatomic, copy, readonly, nullable) SDLVoiceCommandSelectionHandler handler;

    Swift

    diff --git a/docs/Classes/SDLWeatherAlert.html b/docs/Classes/SDLWeatherAlert.html index 5f1e37d7c..73136d50f 100644 --- a/docs/Classes/SDLWeatherAlert.html +++ b/docs/Classes/SDLWeatherAlert.html @@ -73,7 +73,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *title;
    +
    @property (nonatomic, strong, nullable) NSString *title;

    Swift

    @@ -93,7 +93,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *summary;
    +
    @property (nonatomic, strong, nullable) NSString *summary;

    Swift

    @@ -113,7 +113,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLDateTime *expires;
    +
    @property (nonatomic, strong, nullable) SDLDateTime *expires;

    Swift

    @@ -133,7 +133,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSArray<NSString *> *regions;
    +
    @property (nonatomic, strong, nullable) NSArray<NSString *> *regions;

    Swift

    @@ -153,7 +153,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *severity;
    +
    @property (nonatomic, strong, nullable) NSString *severity;

    Swift

    @@ -173,7 +173,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLDateTime *timeIssued;
    +
    @property (nonatomic, strong, nullable) SDLDateTime *timeIssued;

    Swift

    diff --git a/docs/Classes/SDLWeatherData.html b/docs/Classes/SDLWeatherData.html index 1981f5cdb..cb151406c 100644 --- a/docs/Classes/SDLWeatherData.html +++ b/docs/Classes/SDLWeatherData.html @@ -139,8 +139,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemperature *currentTemperature;
    +
    @property (nonatomic, strong, nullable) SDLTemperature *currentTemperature;

    Swift

    @@ -160,8 +159,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemperature *temperatureHigh;
    +
    @property (nonatomic, strong, nullable) SDLTemperature *temperatureHigh;

    Swift

    @@ -181,8 +179,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemperature *temperatureLow;
    +
    @property (nonatomic, strong, nullable) SDLTemperature *temperatureLow;

    Swift

    @@ -202,8 +199,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemperature *apparentTemperature;
    +
    @property (nonatomic, strong, nullable) SDLTemperature *apparentTemperature;

    Swift

    @@ -223,8 +219,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemperature *apparentTemperatureHigh;
    +
    @property (nonatomic, strong, nullable) SDLTemperature *apparentTemperatureHigh;

    Swift

    @@ -244,8 +239,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLTemperature *apparentTemperatureLow;
    +
    @property (nonatomic, strong, nullable) SDLTemperature *apparentTemperatureLow;

    Swift

    @@ -265,7 +259,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *weatherSummary;
    +
    @property (nonatomic, strong, nullable) NSString *weatherSummary;

    Swift

    @@ -285,7 +279,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLDateTime *time;
    +
    @property (nonatomic, strong, nullable) SDLDateTime *time;

    Swift

    @@ -305,7 +299,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *humidity;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *humidity;

    Swift

    @@ -325,8 +319,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *cloudCover;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *cloudCover;

    Swift

    @@ -346,7 +339,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *moonPhase;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *moonPhase;

    Swift

    @@ -366,7 +359,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLInt> *windBearing;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *windBearing;

    Swift

    @@ -386,7 +379,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *windGust;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *windGust;

    Swift

    @@ -406,7 +399,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLFloat> *windSpeed;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *windSpeed;

    Swift

    @@ -426,8 +419,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLInt> *nearestStormBearing;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *nearestStormBearing;

    Swift

    @@ -447,8 +439,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLInt> *nearestStormDistance;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *nearestStormDistance;

    Swift

    @@ -468,8 +459,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *precipAccumulation;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *precipAccumulation;

    Swift

    @@ -489,8 +479,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *precipIntensity;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *precipIntensity;

    Swift

    @@ -510,8 +499,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *precipProbability;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *precipProbability;

    Swift

    @@ -531,7 +519,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSString *precipType;
    +
    @property (nonatomic, strong, nullable) NSString *precipType;

    Swift

    @@ -551,8 +539,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLFloat> *visibility;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLFloat> *visibility;

    Swift

    @@ -572,7 +559,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) SDLImage *weatherIcon;
    +
    @property (nonatomic, strong, nullable) SDLImage *weatherIcon;

    Swift

    diff --git a/docs/Classes/SDLWeatherServiceData.html b/docs/Classes/SDLWeatherServiceData.html index 2076282d0..62be8afd0 100644 --- a/docs/Classes/SDLWeatherServiceData.html +++ b/docs/Classes/SDLWeatherServiceData.html @@ -100,7 +100,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLLocationDetails *_Nonnull location;
    +
    @property (nonatomic, strong) SDLLocationDetails *_Nonnull location;

    Swift

    @@ -120,8 +120,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    SDLWeatherData *currentForecast;
    +
    @property (nonatomic, strong, nullable) SDLWeatherData *currentForecast;

    Swift

    @@ -141,8 +140,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLWeatherData *> *minuteForecast;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLWeatherData *> *minuteForecast;

    Swift

    @@ -162,8 +160,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLWeatherData *> *hourlyForecast;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLWeatherData *> *hourlyForecast;

    Swift

    @@ -183,8 +180,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLWeatherData *> *multidayForecast;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLWeatherData *> *multidayForecast;

    Swift

    @@ -204,8 +200,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLWeatherAlert *> *alerts;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLWeatherAlert *> *alerts;

    Swift

    diff --git a/docs/Classes/SDLWeatherServiceManifest.html b/docs/Classes/SDLWeatherServiceManifest.html index 93c8c83e7..8af975252 100644 --- a/docs/Classes/SDLWeatherServiceManifest.html +++ b/docs/Classes/SDLWeatherServiceManifest.html @@ -68,8 +68,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *currentForecastSupported;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *currentForecastSupported;

    Swift

    @@ -89,8 +88,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLInt> *maxMultidayForecastAmount;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *maxMultidayForecastAmount;

    Swift

    @@ -110,8 +108,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLInt> *maxHourlyForecastAmount;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *maxHourlyForecastAmount;

    Swift

    @@ -131,8 +128,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLInt> *maxMinutelyForecastAmount;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *maxMinutelyForecastAmount;

    Swift

    @@ -152,8 +148,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLBool> *weatherForLocationSupported;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLBool> *weatherForLocationSupported;

    Swift

    diff --git a/docs/Classes/SDLWindowCapability.html b/docs/Classes/SDLWindowCapability.html index 755b668ba..dfd052462 100644 --- a/docs/Classes/SDLWindowCapability.html +++ b/docs/Classes/SDLWindowCapability.html @@ -33,7 +33,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable) NSNumber<SDLUInt> *windowID;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLUInt> *windowID;

    Swift

    @@ -53,8 +53,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLTextField *> *textFields;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLTextField *> *textFields;

    Swift

    @@ -74,8 +73,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLImageField *> *imageFields;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLImageField *> *imageFields;

    Swift

    @@ -95,8 +93,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLImageType> *imageTypeSupported;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLImageType> *imageTypeSupported;

    Swift

    @@ -116,8 +113,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<NSString *> *templatesAvailable;
    +
    @property (nonatomic, strong, nullable) NSArray<NSString *> *templatesAvailable;

    Swift

    @@ -137,8 +133,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSNumber<SDLInt> *numCustomPresetsAvailable;
    +
    @property (nonatomic, strong, nullable) NSNumber<SDLInt> *numCustomPresetsAvailable;

    Swift

    @@ -158,8 +153,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLButtonCapabilities *> *buttonCapabilities;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLButtonCapabilities *> *buttonCapabilities;

    Swift

    @@ -179,8 +173,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;

    Swift

    @@ -200,8 +193,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic, nullable)
    -    NSArray<SDLMenuLayout> *menuLayoutsAvailable;
    +
    @property (nonatomic, strong, nullable) NSArray<SDLMenuLayout> *menuLayoutsAvailable;

    Swift

    diff --git a/docs/Classes/SDLWindowTypeCapabilities.html b/docs/Classes/SDLWindowTypeCapabilities.html index 6e8ab9297..9b1ba9f01 100644 --- a/docs/Classes/SDLWindowTypeCapabilities.html +++ b/docs/Classes/SDLWindowTypeCapabilities.html @@ -53,7 +53,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic) SDLWindowType _Nonnull type;
    +
    @property (nonatomic, strong) SDLWindowType _Nonnull type;

    Swift

    @@ -73,8 +73,7 @@

    Objective-C

    -
    @property (readwrite, strong, nonatomic)
    -    NSNumber<SDLInt> *_Nonnull maximumNumberOfWindows;
    +
    @property (nonatomic, strong) NSNumber<SDLInt> *_Nonnull maximumNumberOfWindows;

    Swift

    diff --git a/docs/Constants.html b/docs/Constants.html index 732ee7565..8640963bf 100644 --- a/docs/Constants.html +++ b/docs/Constants.html @@ -566,6 +566,7 @@

    Section Contents

  • SDLDidReceiveVehicleIconNotification
  • SDLDidChangePermissionsNotification
  • SDLDidReceiveRemoteControlStatusNotification
  • +
  • SDLDidReceiveSyncPDataNotification
  • SDLDidReceiveSystemCapabilityUpdatedNotification
  • SDLDidReceiveSystemRequestNotification
  • SDLDidChangeTurnByTurnStateNotification
  • @@ -9216,7 +9217,8 @@

    Objective-C

    -
    extern const SDLNotificationName _Nonnull SDLDidReceiveEncodedSyncPDataResponse
    +
    extern __deprecated const SDLNotificationName
    +    SDLDidReceiveEncodedSyncPDataResponse

    Swift

    @@ -9918,7 +9920,7 @@

    Objective-C

    -
    extern const SDLNotificationName _Nonnull SDLDidReceiveSyncPDataResponse
    +
    extern __deprecated const SDLNotificationName SDLDidReceiveSyncPDataResponse

    Swift

    @@ -10350,7 +10352,8 @@

    Objective-C

    -
    extern const SDLNotificationName _Nonnull SDLDidReceiveEncodedSyncPDataRequest
    +
    extern __deprecated const SDLNotificationName
    +    SDLDidReceiveEncodedSyncPDataRequest

    Swift

    @@ -11034,7 +11037,7 @@

    Objective-C

    -
    extern const SDLNotificationName _Nonnull SDLDidReceiveSyncPDataRequest
    +
    extern __deprecated const SDLNotificationName SDLDidReceiveSyncPDataRequest

    Swift

    @@ -11322,7 +11325,8 @@

    Objective-C

    -
    extern const SDLNotificationName _Nonnull SDLDidReceiveEncodedDataNotification
    +
    extern __deprecated const SDLNotificationName
    +    SDLDidReceiveEncodedDataNotification

    Swift

    @@ -11394,7 +11398,8 @@

    Objective-C

    -
    extern const SDLNotificationName _Nonnull SDLDidChangeLockScreenStatusNotification
    +
    extern __deprecated const SDLNotificationName
    +    SDLDidChangeLockScreenStatusNotification

    Swift

    @@ -11475,6 +11480,24 @@

    Swift

    +

    + SDLDidReceiveSyncPDataNotification +

    + +

    Name for an OnSyncPData notification RPC

    + + + +

    Objective-C

    +
    extern __deprecated const SDLNotificationName SDLDidReceiveSyncPDataNotification
    + + +

    Swift

    +
    static let SDLDidReceiveSyncPData: NSNotification.Name
    + + + +

    SDLDidReceiveSystemCapabilityUpdatedNotification

    diff --git a/docs/Enums.html b/docs/Enums.html index 00c615c87..2fa828129 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -13,8 +13,10 @@

    Section Contents

  • SDLSoftButtonManagerError
  • SDLMenuManagerError
  • SDLChoiceSetManagerError
  • +
  • SDLSystemCapabilityManagerError
  • SDLTransportError
  • SDLRPCStoreError
  • +
  • SDLCacheFileManagerError
  • SDLSecondaryTransports
  • SDLLockScreenConfigurationDisplayMode
  • SDLLogBytesDirection
  • @@ -230,6 +232,29 @@

    Swift

    +

    + SDLSystemCapabilityManagerError +

    + +

    Undocumented

    + + See more + + +

    Objective-C

    +
    NS_ENUM(NSInteger, SDLSystemCapabilityManagerError) {
    +    SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities = -1,
    +    SDLSystemCapabilityManagerErrorHMINone = -2,
    +    SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays = -3
    +}
    + + +

    Swift

    +
    enum SDLSystemCapabilityManagerError : Int
    + + + +

    SDLTransportError

    @@ -268,6 +293,30 @@

    Swift

    +

    + SDLCacheFileManagerError +

    + +

    Undocumented

    + + See more + + +

    Objective-C

    +
    NS_ENUM(NSInteger, SDLCacheFileManagerError) {
    +    /**
    +     *  Failed to update archive file
    +     */
    +    SDLCacheManagerErrorUpdateIconArchiveFileFailure = -1,
    +}
    + + +

    Swift

    +
    enum SDLCacheFileManagerError : Int
    + + + +

    SDLSecondaryTransports

    diff --git a/docs/Enums/SDLCacheFileManagerError.html b/docs/Enums/SDLCacheFileManagerError.html new file mode 100644 index 000000000..464fb1a14 --- /dev/null +++ b/docs/Enums/SDLCacheFileManagerError.html @@ -0,0 +1,33 @@ +

    SDLCacheFileManagerError Enumeration Reference

    + +

    Section Contents

    + + + +

    Overview

    + +

    Undocumented

    + + +
    +

    + SDLCacheManagerErrorUpdateIconArchiveFileFailure +

    + +

    Failed to update archive file

    + + + +

    Objective-C

    +
    SDLCacheManagerErrorUpdateIconArchiveFileFailure = -1
    + + +

    Swift

    +
    case managerErrorUpdateIconArchiveFileFailure = -1
    + + + + +
    diff --git a/docs/Enums/SDLSystemCapabilityManagerError.html b/docs/Enums/SDLSystemCapabilityManagerError.html new file mode 100644 index 000000000..4ea52a97c --- /dev/null +++ b/docs/Enums/SDLSystemCapabilityManagerError.html @@ -0,0 +1,71 @@ +

    SDLSystemCapabilityManagerError Enumeration Reference

    + +

    Section Contents

    + + + +

    Overview

    + +

    Undocumented

    + + +
    +

    + SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities +

    + +

    Undocumented

    + + + +

    Objective-C

    +
    SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities = -1
    + + +

    Swift

    +
    case moduleDoesNotSupportSystemCapabilities = -1
    + + + + +

    + SDLSystemCapabilityManagerErrorHMINone +

    + +

    Undocumented

    + + + +

    Objective-C

    +
    SDLSystemCapabilityManagerErrorHMINone = -2
    + + +

    Swift

    +
    case hmiNone = -2
    + + + + +

    + SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays +

    + +

    Undocumented

    + + + +

    Objective-C

    +
    SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays = -3
    + + +

    Swift

    +
    case cannotUpdateTypeDisplays = -3
    + + + + +
    diff --git a/docs/Protocols/SDLManagerDelegate.html b/docs/Protocols/SDLManagerDelegate.html index 77754feb8..3e783b49f 100644 --- a/docs/Protocols/SDLManagerDelegate.html +++ b/docs/Protocols/SDLManagerDelegate.html @@ -6,6 +6,7 @@

    Section Contents

  • -managerDidDisconnect
  • -hmiLevel:didChangeToLevel:
  • -audioStreamingState:didChangeToState:
  • +
  • -videoStreamingState:didChangetoState:
  • -systemContext:didChangeToContext:
  • -managerShouldUpdateLifecycleToLanguage:
  • @@ -86,6 +87,34 @@

    Parameters

    The current state.

    +

    + -videoStreamingState:didChangetoState: +

    + +

    Called when the video streaming state of this application changes. This refers to streaming video for navigation purposes. If you are “autostreaming” via CarWindow, you should not do anything with this method. Everything should be handled for you automatically.

    + +

    Only supported on RPC v5.0+ connections.

    + + + +

    Objective-C

    +
    - (void)videoStreamingState:(nullable SDLVideoStreamingState)oldState
    +           didChangetoState:(nonnull SDLVideoStreamingState)newState;
    + + +

    Swift

    +
    optional func videoStreamingState(_ oldState: SDLVideoStreamingState?, didChangetoState newState: SDLVideoStreamingState)
    + + + +

    Parameters

    +
    +
    oldState
    +

    The previous state

    +
    newState
    +

    The current state

    +
    +

    -systemContext:didChangeToContext:

    diff --git a/docs/Protocols/SDLSecurityType.html b/docs/Protocols/SDLSecurityType.html index b538f672d..42b474ef8 100644 --- a/docs/Protocols/SDLSecurityType.html +++ b/docs/Protocols/SDLSecurityType.html @@ -32,7 +32,7 @@

    Objective-C

    -
    @property (readwrite, copy, nonatomic) NSString *_Nonnull appId;
    +
    @property (nonatomic, copy) NSString *_Nonnull appId;

    Swift

    diff --git a/docs/Protocols/SDLStreamingAudioManagerType.html b/docs/Protocols/SDLStreamingAudioManagerType.html index c12619e1b..2b1acd06c 100644 --- a/docs/Protocols/SDLStreamingAudioManagerType.html +++ b/docs/Protocols/SDLStreamingAudioManagerType.html @@ -22,8 +22,8 @@

    Objective-C

    -
    @property (readonly, getter=isAudioConnected, assign, nonatomic)
    -    BOOL audioConnected;
    +
    @property (nonatomic, assign, unsafe_unretained, readonly,
    +          getter=isAudioConnected) BOOL audioConnected;

    Swift

    diff --git a/docs/Type Definitions.html b/docs/Type Definitions.html index 355301984..4de8845bc 100644 --- a/docs/Type Definitions.html +++ b/docs/Type Definitions.html @@ -121,6 +121,7 @@

    Section Contents

  • SDLSystemAction
  • SDLUpdateCapabilityHandler
  • SDLCapabilityUpdateHandler
  • +
  • SDLCapabilityUpdateWithErrorHandler
  • SDLSystemCapabilityType
  • SDLSystemContext
  • SDLTBTState
  • @@ -2647,6 +2648,34 @@

    Parameters

    The capability that was updated.

    +

    + SDLCapabilityUpdateWithErrorHandler +

    + +

    An observer block for whenever a subscription or value is retrieved.

    + + + +

    Objective-C

    +
    typedef void (^SDLCapabilityUpdateWithErrorHandler)(
    +    SDLSystemCapability *_Nullable, BOOL, NSError *_Nullable)
    + + +

    Swift

    +
    typealias SDLCapabilityUpdateWithErrorHandler = (SDLSystemCapability?, Bool, Error?) -> Void
    + + + +

    Parameters

    +
    +
    capability
    +

    The capability that was updated.

    +
    subscribed
    +

    Whether or not the capability was subscribed or if the capability will only be pulled once.

    +
    error
    +

    An error that occurred.

    +
    +

    SDLSystemCapabilityType

    diff --git a/docs/index.html b/docs/index.html index dd6db8d9f..8e4b2b0cd 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1160,6 +1160,8 @@ url: Constants.html#/c:@SDLDidReceiveSubscribeWayPointsRequest - name: SDLDidReceiveSubscribeWaypointsResponse url: Constants.html#/c:@SDLDidReceiveSubscribeWaypointsResponse + - name: SDLDidReceiveSyncPDataNotification + url: Constants.html#/c:@SDLDidReceiveSyncPDataNotification - name: SDLDidReceiveSyncPDataRequest url: Constants.html#/c:@SDLDidReceiveSyncPDataRequest - name: SDLDidReceiveSyncPDataResponse @@ -3018,6 +3020,8 @@ url: Enums/SDLArtworkImageFormat.html - name: SDLAudioStreamManagerError url: Enums/SDLAudioStreamManagerError.html + - name: SDLCacheFileManagerError + url: Enums/SDLCacheFileManagerError.html - name: SDLCarWindowRenderingType url: Enums/SDLCarWindowRenderingType.html - name: SDLChoiceSetLayout @@ -3066,6 +3070,8 @@ url: Enums/SDLSoftButtonManagerError.html - name: SDLStreamingEncryptionFlag url: Enums/SDLStreamingEncryptionFlag.html + - name: SDLSystemCapabilityManagerError + url: Enums/SDLSystemCapabilityManagerError.html - name: SDLTextAndGraphicManagerError url: Enums/SDLTextAndGraphicManagerError.html - name: SDLTransportError @@ -3132,6 +3138,8 @@ url: Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode - name: SDLCapabilityUpdateHandler url: Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateHandler + - name: SDLCapabilityUpdateWithErrorHandler + url: Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateWithErrorHandler - name: SDLCarModeStatus url: Type%20Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus - name: SDLCharacterSet diff --git a/docs/search.json b/docs/search.json index d9d91186f..a1136060f 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Type%20Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierFirstFinger":{"name":"SDLTouchIdentifierFirstFinger","abstract":"

    Touch was first finger

    "},"Type%20Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierSecondFinger":{"name":"SDLTouchIdentifierSecondFinger","abstract":"

    Touch was second finger

    "},"Type%20Definitions.html#/c:SDLAmbientLightStatus.h@T@SDLAmbientLightStatus":{"name":"SDLAmbientLightStatus","abstract":"

    Reflects the status of the ambient light sensor for headlamps

    "},"Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType":{"name":"SDLAppHMIType","abstract":"

    Enumeration listing possible app hmi types.

    "},"Type%20Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason":{"name":"SDLAppInterfaceUnregisteredReason","abstract":"

    Indicates reason why app interface was unregistered. The application is being disconnected by SDL.

    "},"Type%20Definitions.html#/c:SDLAppServiceType.h@T@SDLAppServiceType":{"name":"SDLAppServiceType","abstract":"

    Enumeration listing possible app service types.

    "},"Type%20Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator":{"name":"SDLAudioStreamingIndicator","abstract":"

    Enumeration listing possible indicators of audio streaming changes

    "},"Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState":{"name":"SDLAudioStreamingState","abstract":"

    Describes whether or not streaming audio is currently audible to the user. Though provided in every OnHMIStatus notification, this information is only relevant for applications that declare themselves as media apps in RegisterAppInterface

    "},"Type%20Definitions.html#/c:SDLAudioType.h@T@SDLAudioType":{"name":"SDLAudioType","abstract":"

    Describes different audio type options for PerformAudioPassThru

    "},"Type%20Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample":{"name":"SDLBitsPerSample","abstract":"

    Describes different bit depth options for PerformAudioPassThru

    "},"Type%20Definitions.html#/c:SDLButtonEventMode.h@T@SDLButtonEventMode":{"name":"SDLButtonEventMode","abstract":"

    Indicates whether the button was depressed or released. A BUTTONUP event will always be preceded by a BUTTONDOWN event.

    "},"Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName":{"name":"SDLButtonName","abstract":"

    Defines logical buttons which, on a given SDL unit, would correspond to either physical or soft (touchscreen) buttons. These logical buttons present a standard functional abstraction which the developer can rely upon, independent of the SDL unit. For example, the developer can rely upon the OK button having the same meaning to the user across SDL platforms.

    "},"Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode":{"name":"SDLButtonPressMode","abstract":"

    Indicates whether this is a LONG or SHORT button press

    "},"Type%20Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus":{"name":"SDLCarModeStatus","abstract":"

    Describes the carmode the vehicle is in. Used in ClusterModeStatus

    "},"Type%20Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet":{"name":"SDLCharacterSet","abstract":"

    Character sets supported by SDL. Used to describe text field capabilities.

    "},"Type%20Definitions.html#/c:SDLChoiceSet.h@T@SDLChoiceSetCanceledHandler":{"name":"SDLChoiceSetCanceledHandler","abstract":"

    Notifies the subscriber that the choice set should be cancelled.

    "},"Type%20Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection":{"name":"SDLCompassDirection","abstract":"

    The list of potential compass directions. Used in GPS data

    "},"Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus":{"name":"SDLComponentVolumeStatus","abstract":"

    The volume status of a vehicle component. Used in SingleTireStatus and VehicleData Fuel Level

    "},"Type%20Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone":{"name":"SDLDefrostZone","abstract":"

    Enumeration listing possible defrost zones. Used in ClimateControlCapabilities and Data.

    "},"Type%20Definitions.html#/c:SDLDeliveryMode.h@T@SDLDeliveryMode":{"name":"SDLDeliveryMode","abstract":"

    Specifies the mode in which the sendLocation request is sent. Used in SendLocation.

    "},"Type%20Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus":{"name":"SDLDeviceLevelStatus","abstract":"

    Reflects the reported battery status of the connected device, if reported. Used in DeviceStatus.

    "},"Type%20Definitions.html#/c:SDLDimension.h@T@SDLDimension":{"name":"SDLDimension","abstract":"

    The supported dimensions of the GPS. Used in GPSData

    "},"Type%20Definitions.html#/c:SDLDirection.h@T@SDLDirection":{"name":"SDLDirection","abstract":"

    A navigation direction.

    "},"Type%20Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode":{"name":"SDLDisplayMode","abstract":"

    Identifies the various display types used by SDL.

    "},"Type%20Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType":{"name":"SDLDisplayType","abstract":"

    Identifies the various display types used by SDL. Used in DisplayCapabilities.

    "},"Type%20Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit":{"name":"SDLDistanceUnit","abstract":"

    Wiper Status

    "},"Type%20Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState":{"name":"SDLDriverDistractionState","abstract":"

    Enumeration that describes possible states of driver distraction. Used in OnDriverDistraction.

    "},"Type%20Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus":{"name":"SDLECallConfirmationStatus","abstract":"

    Reflects the status of the eCall Notification. Used in ECallInfo

    "},"Type%20Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus":{"name":"SDLElectronicParkBrakeStatus","abstract":"

    Reflects the status of the Electronic Parking Brake. A Vehicle Data Type.

    "},"Type%20Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType":{"name":"SDLEmergencyEventType","abstract":"

    Reflects the emergency event status of the vehicle. Used in EmergencyEvent

    "},"Type%20Definitions.html#/c:SDLEnum.h@T@SDLEnum":{"name":"SDLEnum","abstract":"

    NSString SDLEnum typedef

    "},"Type%20Definitions.html#/c:SDLFileManager.h@T@SDLFileManagerStartupCompletionHandler":{"name":"SDLFileManagerStartupCompletionHandler","abstract":"

    The handler that is called when the manager is set up or failed to set up with an error."},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileName":{"name":"SDLFileName","abstract":"

    Typedef SDLFileName

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadCompletionHandler":{"name":"SDLFileManagerUploadCompletionHandler","abstract":"

    A completion handler called after a response from Core to a upload request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadCompletionHandler":{"name":"SDLFileManagerMultiUploadCompletionHandler","abstract":"

    A completion handler called after a set of upload requests has completed.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadProgressHandler":{"name":"SDLFileManagerMultiUploadProgressHandler","abstract":"

    In a multiple request send, a handler called after each response from Core to a upload request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerDeleteCompletionHandler":{"name":"SDLFileManagerDeleteCompletionHandler","abstract":"

    A completion handler called after a response from Core to a delete request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiDeleteCompletionHandler":{"name":"SDLFileManagerMultiDeleteCompletionHandler","abstract":"

    A completion handler called after a set of delete requests has completed.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerListFilesCompletionHandler":{"name":"SDLFileManagerListFilesCompletionHandler","abstract":"

    A completion handler called after response from Core to a list files request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadArtworkCompletionHandler":{"name":"SDLFileManagerUploadArtworkCompletionHandler","abstract":"

    A completion handler called after a response from Core to a artwork upload request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkCompletionHandler":{"name":"SDLFileManagerMultiUploadArtworkCompletionHandler","abstract":"

    A completion handler called after a set of upload artwork requests has completed.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkProgressHandler":{"name":"SDLFileManagerMultiUploadArtworkProgressHandler","abstract":"

    In a multiple request send, a handler called after each response from Core to an artwork upload request.

    "},"Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType":{"name":"SDLFileType","abstract":"

    Enumeration listing possible file types. Used in SDLFile, PutFile, ImageField, OnSystemRequest

    "},"Type%20Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus":{"name":"SDLFuelCutoffStatus","abstract":"

    Reflects the status of the Restraints Control Module fuel pump cutoff. The fuel pump is cut off typically after the vehicle has had a collision. Used in EmergencyEvent.

    "},"Type%20Definitions.html#/c:SDLFuelType.h@T@SDLFuelType":{"name":"SDLFuelType","abstract":"

    Enumeration listing possible fuel types.

    "},"Type%20Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty":{"name":"SDLGlobalProperty","abstract":"

    Properties of a user-initiated VR interaction (i.e. interactions started by the user pressing the PTT button). Used in RPCs related to ResetGlobalProperties

    "},"Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel":{"name":"SDLHMILevel","abstract":"

    Specifies current level of the HMI. An HMI level indicates the degree of user interaction possible through the HMI (e.g. TTS only, display only, VR, etc.). The HMI level varies for an application based on the type of display (i.e. Nav or non-Nav) and the user directing “focus” to other applications (e.g. phone, other mobile applications, etc.). Used in OnHMIStatus

    "},"Type%20Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities":{"name":"SDLHMIZoneCapabilities","abstract":"

    Specifies HMI Zones in the vehicle. Used in RegisterAppInterfaceResponse

    "},"Type%20Definitions.html#/c:SDLHybridAppPreference.h@T@SDLHybridAppPreference":{"name":"SDLHybridAppPreference","abstract":"

    Enumeration for the user’s preference of which app type to use when both are available.

    "},"Type%20Definitions.html#/c:SDLIgnitionStableStatus.h@T@SDLIgnitionStableStatus":{"name":"SDLIgnitionStableStatus","abstract":"

    Reflects the ignition switch stability. Used in BodyInformation

    "},"Type%20Definitions.html#/c:SDLIgnitionStatus.h@T@SDLIgnitionStatus":{"name":"SDLIgnitionStatus","abstract":"

    Reflects the status of ignition. Used in BodyInformation.

    "},"Type%20Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName":{"name":"SDLImageFieldName","abstract":"

    The name that identifies the filed. Used in DisplayCapabilities.

    "},"Type%20Definitions.html#/c:SDLImageType.h@T@SDLImageType":{"name":"SDLImageType","abstract":"

    Contains information about the type of image. Used in Image.

    "},"Type%20Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode":{"name":"SDLInteractionMode","abstract":"

    For application-initiated interactions (SDLPerformInteraction), this specifies the mode by which the user is prompted and by which the user’s selection is indicated. Used in PerformInteraction.

    "},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler":{"name":"SDLKeyboardAutocompleteCompletionHandler","abstract":"

    This handler is called when you wish to update your autocomplete text in response to the user’s input

    "},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutoCompleteResultsHandler":{"name":"SDLKeyboardAutoCompleteResultsHandler","abstract":"

    This handler is called when you wish to update your autocomplete text in response to the user’s input.

    "},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler":{"name":"SDLKeyboardCharacterSetCompletionHandler","abstract":"

    This handler is called when you wish to update your keyboard’s limitedCharacterSet in response to the user’s input

    "},"Type%20Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent":{"name":"SDLKeyboardEvent","abstract":"

    Enumeration listing possible keyboard events. Used in OnKeyboardInput.

    "},"Type%20Definitions.html#/c:SDLKeyboardLayout.h@T@SDLKeyboardLayout":{"name":"SDLKeyboardLayout","abstract":"

    Enumeration listing possible keyboard layouts. Used in KeyboardProperties.

    "},"Type%20Definitions.html#/c:SDLKeypressMode.h@T@SDLKeypressMode":{"name":"SDLKeypressMode","abstract":"

    Enumeration listing possible keyboard events.

    "},"Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage":{"name":"SDLLanguage","abstract":"

    Specifies the language to be used for TTS, VR, displayed messages/menus. Used in ChangeRegistration and RegisterAppInterface.

    "},"Type%20Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode":{"name":"SDLLayoutMode","abstract":"

    For touchscreen interactions, the mode of how the choices are presented. Used in PerformInteraction.

    "},"Type%20Definitions.html#/c:SDLLightName.h@T@SDLLightName":{"name":"SDLLightName","abstract":"

    The name that identifies the Light

    "},"Type%20Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus":{"name":"SDLLightStatus","abstract":"

    Reflects the status of Light.

    "},"Type%20Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus":{"name":"SDLLockScreenStatus","abstract":"

    Describes what the status of the lock screen should be

    "},"Type%20Definitions.html#/c:SDLLockScreenViewController.h@T@SwipeGestureCallbackBlock":{"name":"SwipeGestureCallbackBlock","abstract":"

    A block that can be used to close the lockscreen when the user swipes on the lockscreen. Override this in your own custom view controllers if you build a custom lock screen.

    "},"Type%20Definitions.html#/c:SDLLogConstants.h@T@SDLLogFilterBlock":{"name":"SDLLogFilterBlock","abstract":"

    A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.

    "},"Type%20Definitions.html#/c:SDLMaintenanceModeStatus.h@T@SDLMaintenanceModeStatus":{"name":"SDLMaintenanceModeStatus","abstract":"

    Describes the maintenence mode. Used in nothing.

    "},"Type%20Definitions.html#/c:SDLManager.h@T@SDLManagerReadyBlock":{"name":"SDLManagerReadyBlock","abstract":"

    The block called when the manager is ready to be used or an error occurs while attempting to become ready.

    "},"Type%20Definitions.html#/c:SDLManager.h@T@SDLRPCUpdatedBlock":{"name":"SDLRPCUpdatedBlock","abstract":"

    The block that will be called every time an RPC is received when subscribed to an RPC.

    "},"Type%20Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion":{"name":"SDLMassageCushion","abstract":"

    The List possible cushions of a multi-contour massage seat.

    "},"Type%20Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode":{"name":"SDLMassageMode","abstract":"

    The List possible modes of a massage zone.

    "},"Type%20Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone":{"name":"SDLMassageZone","abstract":"

    List possible zones of a multi-contour massage seat.

    "},"Type%20Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat":{"name":"SDLMediaClockFormat","abstract":"

    Indicates the format of the time displayed on the connected SDL unit.

    "},"Type%20Definitions.html#/c:SDLMediaType.h@T@SDLMediaType":{"name":"SDLMediaType","abstract":"

    Enumeration listing possible media types.

    "},"Type%20Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler":{"name":"SDLMenuCellSelectionHandler","abstract":"

    The handler to run when a menu item is selected.

    "},"Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout":{"name":"SDLMenuLayout","abstract":"

    Enum for each type of video streaming protocol, used in VideoStreamingFormat

    "},"Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType":{"name":"SDLMetadataType","abstract":"

    Text Field metadata types. Used in Show.

    "},"Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType":{"name":"SDLModuleType","abstract":"

    The type of remote control data. Used in ButtonPress, GetInteriorVehicleData, and ModuleData

    "},"Type%20Definitions.html#/c:SDLNavigationAction.h@T@SDLNavigationAction":{"name":"SDLNavigationAction","abstract":"

    A navigation action.

    "},"Type%20Definitions.html#/c:SDLNavigationJunction.h@T@SDLNavigationJunction":{"name":"SDLNavigationJunction","abstract":"

    A navigation junction type.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName":{"name":"SDLNotificationName","abstract":"

    NSNotification names specific to incoming SDL RPC

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationUserInfoKey":{"name":"SDLNotificationUserInfoKey","abstract":"

    The key used in all SDL NSNotifications to extract the response or notification from the userInfo dictionary.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler":{"name":"SDLAudioPassThruHandler","abstract":"

    A handler used on SDLPerformAudioPassThru.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLResponseHandler":{"name":"SDLResponseHandler","abstract":"

    A handler used on all RPC requests which fires when the response is received.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleRequestCompletionHandler":{"name":"SDLMultipleRequestCompletionHandler","abstract":"

    A completion handler called after a sequential or simultaneous set of requests have completed sending.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleSequentialRequestProgressHandler":{"name":"SDLMultipleSequentialRequestProgressHandler","abstract":"

    A handler called after each response to a request comes in in a multiple request send.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleAsyncRequestProgressHandler":{"name":"SDLMultipleAsyncRequestProgressHandler","abstract":"

    A handler called after each response to a request comes in in a multiple request send.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler":{"name":"SDLRPCButtonNotificationHandler","abstract":"

    A handler that may optionally be run when an SDLSubscribeButton or SDLSoftButton has a corresponding notification occur.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler":{"name":"SDLRPCCommandNotificationHandler","abstract":"

    A handler that may optionally be run when an SDLAddCommand has a corresponding notification occur.

    "},"Type%20Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL":{"name":"SDLPRNDL","abstract":"

    The selected gear the car is in. Used in retrieving vehicle data.

    "},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionRPCName":{"name":"SDLPermissionRPCName","abstract":"

    NSString typedef

    "},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionObserverIdentifier":{"name":"SDLPermissionObserverIdentifier","abstract":"

    NSUUID typedef

    "},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionsChangedHandler":{"name":"SDLPermissionsChangedHandler","abstract":"

    The PermissionObserver is a block that is passed in to some methods that will be stored and called when specified permissions change.

    "},"Type%20Definitions.html#/c:SDLPermissionStatus.h@T@SDLPermissionStatus":{"name":"SDLPermissionStatus","abstract":"

    Enumeration that describes possible permission states of a policy table entry. Used in nothing.

    "},"Type%20Definitions.html#/c:SDLPowerModeQualificationStatus.h@T@SDLPowerModeQualificationStatus":{"name":"SDLPowerModeQualificationStatus","abstract":"

    Describes the power mode qualification status. Used in ClusterModeStatus.

    "},"Type%20Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus":{"name":"SDLPowerModeStatus","abstract":"

    The status of the car’s power. Used in ClusterModeStatus.

    "},"Type%20Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout":{"name":"SDLPredefinedLayout","abstract":"

    A template layout an app uses to display information. The broad details of the layout are defined, but the details depend on the IVI system. Used in SetDisplayLayout.

    "},"Type%20Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech":{"name":"SDLPrerecordedSpeech","abstract":"

    Contains information about the speech capabilities on the SDL platform. Used in RegisterAppInterfaceResponse to indicate capability.

    "},"Type%20Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource":{"name":"SDLPrimaryAudioSource","abstract":"

    Reflects the current primary audio source of SDL (if selected). Used in DeviceStatus.

    "},"Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName":{"name":"SDLRPCFunctionName","abstract":"

    All RPC request / response / notification names

    "},"Type%20Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand":{"name":"SDLRadioBand","abstract":"

    Radio bands, such as AM and FM, used in RadioControlData

    "},"Type%20Definitions.html#/c:SDLRadioState.h@T@SDLRadioState":{"name":"SDLRadioState","abstract":"

    List possible states of a remote control radio module. Used in RadioControlData.

    "},"Type%20Definitions.html#/c:SDLRequestType.h@T@SDLRequestType":{"name":"SDLRequestType","abstract":"

    A type of system request. Used in SystemRequest.

    "},"Type%20Definitions.html#/c:SDLResult.h@T@SDLResult":{"name":"SDLResult","abstract":"

    Defines the possible result codes returned by SDL to the application in a response to a requested operation. Used in RPC responses

    "},"Type%20Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate":{"name":"SDLSamplingRate","abstract":"

    Describes different sampling rates for PerformAudioPassThru and AudioPassThruCapabilities

    "},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler":{"name":"SDLScreenManagerUpdateCompletionHandler","abstract":"

    The handler run when the update has completed

    "},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler":{"name":"SDLPreloadChoiceCompletionHandler","abstract":"

    Return an error with userinfo [key: SDLChoiceCell, value: NSError] if choices failed to upload

    "},"Type%20Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType":{"name":"SDLSeatMemoryActionType","abstract":"

    List of possible actions on Seat Meomry

    "},"Type%20Definitions.html#/c:SDLServiceUpdateReason.h@T@SDLServiceUpdateReason":{"name":"SDLServiceUpdateReason","abstract":"

    Enumeration listing possible service update reasons.

    "},"Type%20Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType":{"name":"SDLSoftButtonType","abstract":"

    SoftButtonType (TEXT / IMAGE / BOTH). Used by SoftButton.

    "},"Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities":{"name":"SDLSpeechCapabilities","abstract":"

    Contains information about TTS capabilities on the SDL platform. Used in RegisterAppInterfaceResponse, and TTSChunk.

    "},"Type%20Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName":{"name":"SDLStaticIconName","abstract":"

    Static icon names

    "},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState":{"name":"SDLVideoStreamManagerState","abstract":"

    The current state of the video stream manager

    "},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState":{"name":"SDLAudioStreamManagerState","abstract":"

    The current state of the audio stream manager

    "},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAppState":{"name":"SDLAppState","abstract":"

    Typedef SDLAppState

    "},"Type%20Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat":{"name":"SDLSupportedSeat","abstract":"

    List possible seats that is a remote controllable seat.

    "},"Type%20Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction":{"name":"SDLSystemAction","abstract":"

    Enumeration that describes system actions that can be triggered. Used in SoftButton.

    "},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLUpdateCapabilityHandler":{"name":"SDLUpdateCapabilityHandler","abstract":"

    A completion handler called after a request for the capability type is returned from the remote system.

    "},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateHandler":{"name":"SDLCapabilityUpdateHandler","abstract":"

    An observer block for whenever a subscription is called.

    "},"Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType":{"name":"SDLSystemCapabilityType","abstract":"

    The type of system capability to get more information on. Used in GetSystemCapability.

    "},"Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext":{"name":"SDLSystemContext","abstract":"

    Indicates whether or not a user-initiated interaction is in progress, and if so, in what mode (i.e. MENU or VR). Used in OnHMIStatus

    "},"Type%20Definitions.html#/c:SDLTBTState.h@T@SDLTBTState":{"name":"SDLTBTState","abstract":"

    The turn-by-turn state, used in OnTBTClientState.

    "},"Type%20Definitions.html#/c:SDLTPMS.h@T@SDLTPMS":{"name":"SDLTPMS","abstract":"

    An enum representing values of the tire pressure monitoring system

    "},"Type%20Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit":{"name":"SDLTemperatureUnit","abstract":"

    The unit of temperature to display. Used in Temperature.

    "},"Type%20Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment":{"name":"SDLTextAlignment","abstract":"

    The list of possible alignments of text in a field. May only work on some display types. used in Show.

    "},"Type%20Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName":{"name":"SDLTextFieldName","abstract":"

    Names of the text fields that can appear on a SDL display. Used in TextFieldName.

    "},"Type%20Definitions.html#/c:SDLTimerMode.h@T@SDLTimerMode":{"name":"SDLTimerMode","abstract":"

    The direction of a timer. Used in nothing.

    "},"Type%20Definitions/SDLTouchIdentifier.html":{"name":"SDLTouchIdentifier","abstract":"

    Undocumented

    "},"Type%20Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler":{"name":"SDLTouchEventHandler","abstract":"

    Handler for touch events

    "},"Type%20Definitions.html#/c:SDLTouchType.h@T@SDLTouchType":{"name":"SDLTouchType","abstract":"

    The type of a touch in a projection application. Used in OnTouchEvent.

    "},"Type%20Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource":{"name":"SDLTriggerSource","abstract":"

    Indicates whether choice/command was selected via VR or via a menu selection (using SEEKRIGHT/SEEKLEFT, TUNEUP, TUNEDOWN, OK buttons). Used in PerformInteractionResponse and OnCommand.

    "},"Type%20Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal":{"name":"SDLTurnSignal","abstract":"

    Enumeration that describes the status of the turn light indicator.

    "},"Type%20Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode":{"name":"SDLUpdateMode","abstract":"

    Specifies what function should be performed on the media clock/counter. Used in SetMediaClockTimer.

    "},"Type%20Definitions.html#/c:SDLVehicleDataActiveStatus.h@T@SDLVehicleDataActiveStatus":{"name":"SDLVehicleDataActiveStatus","abstract":"

    Vehicle Data Activity Status. Used in nothing.

    "},"Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus":{"name":"SDLVehicleDataEventStatus","abstract":"

    Reflects the status of a vehicle data event; e.g. a seat belt event status. Used in retrieving vehicle data.

    "},"Type%20Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus":{"name":"SDLVehicleDataNotificationStatus","abstract":"

    Reflects the status of a vehicle data notification. Used in ECallInfo

    "},"Type%20Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode":{"name":"SDLVehicleDataResultCode","abstract":"

    Vehicle Data Result Code. Used in DIDResult.

    "},"Type%20Definitions.html#/c:SDLVehicleDataStatus.h@T@SDLVehicleDataStatus":{"name":"SDLVehicleDataStatus","abstract":"

    Reflects the status of a binary vehicle data item. Used in MyKey.

    "},"Type%20Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType":{"name":"SDLVehicleDataType","abstract":"

    Defines the vehicle data types that can be published and/or subscribed to using SDLSubscribeVehicleData. Used in VehicleDataResult

    "},"Type%20Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode":{"name":"SDLVentilationMode","abstract":"

    The ventilation mode. Used in ClimateControlCapabilities

    "},"Type%20Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec":{"name":"SDLVideoStreamingCodec","abstract":"

    Enum for each type of video streaming codec. Used in VideoStreamingFormat.

    "},"Type%20Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol":{"name":"SDLVideoStreamingProtocol","abstract":"

    Enum for each type of video streaming protocol, used in VideoStreamingFormat

    "},"Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState":{"name":"SDLVideoStreamingState","abstract":"

    Enum for each type of video streaming protocol, used in VideoStreamingFormat

    "},"Type%20Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler":{"name":"SDLVoiceCommandSelectionHandler","abstract":"

    The handler that will be called when the command is activated

    "},"Type%20Definitions.html#/c:SDLVrCapabilities.h@T@SDLVRCapabilities":{"name":"SDLVRCapabilities","abstract":"

    The VR capabilities of the connected SDL platform. Used in RegisterAppInterfaceResponse.

    "},"Type%20Definitions.html#/c:SDLWarningLightStatus.h@T@SDLWarningLightStatus":{"name":"SDLWarningLightStatus","abstract":"

    Reflects the status of a cluster instrument warning light. Used in TireStatus

    "},"Type%20Definitions.html#/c:SDLWayPointType.h@T@SDLWayPointType":{"name":"SDLWayPointType","abstract":"

    The type of a navigation waypoint. Used in GetWayPoints.

    "},"Type%20Definitions.html#/c:SDLWindowType.h@T@SDLWindowType":{"name":"SDLWindowType","abstract":"

    The type of the window to be created. Main window or widget.

    "},"Type%20Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus":{"name":"SDLWiperStatus","abstract":"

    The status of the windshield wipers. Used in retrieving vehicle data.

    "},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveSingleTapForView:atPoint:":{"name":"-touchManager:didReceiveSingleTapForView:atPoint:","abstract":"

    A single tap was received

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveDoubleTapForView:atPoint:":{"name":"-touchManager:didReceiveDoubleTapForView:atPoint:","abstract":"

    A double tap was received

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidStartInView:atPoint:":{"name":"-touchManager:panningDidStartInView:atPoint:","abstract":"

    Panning started

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePanningFromPoint:toPoint:":{"name":"-touchManager:didReceivePanningFromPoint:toPoint:","abstract":"

    Panning moved between points

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidEndInView:atPoint:":{"name":"-touchManager:panningDidEndInView:atPoint:","abstract":"

    Panning ended

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningCanceledAtPoint:":{"name":"-touchManager:panningCanceledAtPoint:","abstract":"

    Panning canceled

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidStartInView:atCenterPoint:":{"name":"-touchManager:pinchDidStartInView:atCenterPoint:","abstract":"

    Pinch did start

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchAtCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchAtCenterPoint:withScale:","abstract":"

    @abstract","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchInView:atCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchInView:atCenterPoint:withScale:","abstract":"

    Pinch moved and changed scale

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidEndInView:atCenterPoint:":{"name":"-touchManager:pinchDidEndInView:atCenterPoint:","abstract":"

    Pinch did end

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchCanceledAtCenterPoint:":{"name":"-touchManager:pinchCanceledAtCenterPoint:","abstract":"

    Pinch canceled

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)preferredVideoFormatOrderFromHeadUnitPreferredOrder:":{"name":"-preferredVideoFormatOrderFromHeadUnitPreferredOrder:","abstract":"

    Implement to return a different preferred order of attempted format usage than the head unit’s preferred order. In nearly all cases, it’s best to simply return the head unit’s preferred order, or not implement this method (which does the same thing).

    ","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)resolutionFromHeadUnitPreferredResolution:":{"name":"-resolutionFromHeadUnitPreferredResolution:","abstract":"

    Implement to return a different resolution to use for video streaming than the head unit’s requested resolution. If you return a resolution that the head unit does not like, the manager will fail to start up. In nearly all cases, it’s best to simply return the head unit’s preferred order, or not implement this method (which does the same thing), and adapt your UI to the head unit’s preferred resolution instead.

    ","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(py)audioConnected":{"name":"audioConnected","abstract":"

    Whether or not the audio byte stream is currently connected

    ","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"

    Send audio data bytes over the audio byte stream

    ","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLServiceEncryptionDelegate.html#/c:objc(pl)SDLServiceEncryptionDelegate(im)serviceEncryptionUpdatedOnService:encrypted:error:":{"name":"-serviceEncryptionUpdatedOnService:encrypted:error:","abstract":"

    Called when the encryption service has been.

    ","parent_name":"SDLServiceEncryptionDelegate"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(py)appId":{"name":"appId","abstract":"

    The app id of the app

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)initializeWithAppId:completionHandler:":{"name":"-initializeWithAppId:completionHandler:","abstract":"

    Initialize the SDL security library with the app’s id and a completion handler

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)stop":{"name":"-stop","abstract":"

    Stop the security library

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)runHandshakeWithClientData:error:":{"name":"-runHandshakeWithClientData:error:","abstract":"

    Run the SSL/TLS handshake

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)encryptData:withError:":{"name":"-encryptData:withError:","abstract":"

    Encrypt data using SSL/TLS

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)decryptData:withError:":{"name":"-decryptData:withError:","abstract":"

    Decrypt data using SSL/TLS

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(cm)availableMakes":{"name":"+availableMakes","abstract":"

    The vehicle makes this security library covers

    ","parent_name":"SDLSecurityType"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerDidDisconnect":{"name":"-managerDidDisconnect","abstract":"

    Called upon a disconnection from the remote system.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)hmiLevel:didChangeToLevel:":{"name":"-hmiLevel:didChangeToLevel:","abstract":"

    Called when the HMI level state of this application changes on the remote system. This is equivalent to the application’s state changes in iOS such as foreground, background, or closed.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)audioStreamingState:didChangeToState:":{"name":"-audioStreamingState:didChangeToState:","abstract":"

    Called when the audio streaming state of this application changes on the remote system. This refers to when streaming audio is audible to the user.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)systemContext:didChangeToContext:":{"name":"-systemContext:didChangeToContext:","abstract":"

    Called when the system context of this application changes on the remote system. This refers to whether or not a user-initiated interaction is in progress, and if so, what it is.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerShouldUpdateLifecycleToLanguage:":{"name":"-managerShouldUpdateLifecycleToLanguage:","abstract":"

    Called when the lifecycle manager detected a language mismatch. In case of a language mismatch the manager should change the apps registration by updating the lifecycle configuration to the specified language. If the app can support the specified language it should return an Object of SDLLifecycleConfigurationUpdate, otherwise it should return nil to indicate that the language is not supported.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(cm)logger":{"name":"+logger","abstract":"

    A simple convenience initializer to create the object. This should not start up the logger.

    ","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)setupLogger":{"name":"-setupLogger","abstract":"

    A call to setup the logger in whatever manner it needs to do so.

    ","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)logWithLog:formattedLog:":{"name":"-logWithLog:formattedLog:","abstract":"

    Log a particular log using the model and the formatted log message to the target.

    ","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)teardownLogger":{"name":"-teardownLogger","abstract":"

    The log target should be torn down. e.g. file handles should be closed

    ","parent_name":"SDLLogTarget"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)userDidSubmitInput:withEvent:":{"name":"-userDidSubmitInput:withEvent:","abstract":"

    The keyboard session completed with some input.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidAbortWithReason:":{"name":"-keyboardDidAbortWithReason:","abstract":"

    The keyboard session aborted.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)customKeyboardConfiguration":{"name":"-customKeyboardConfiguration","abstract":"

    Implement this in order to provide a custom keyboard configuration to just this keyboard. To apply default settings to all keyboards, see SDLScreenManager.keyboardConfiguration

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:completionHandler:":{"name":"-updateAutocompleteWithInput:completionHandler:","abstract":"

    Implement this if you wish to update the KeyboardProperties.autoCompleteText as the user updates their input. This is called upon a KEYPRESS event.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:autoCompleteResultsHandler:":{"name":"-updateAutocompleteWithInput:autoCompleteResultsHandler:","abstract":"

    Implement this if you wish to updated the KeyboardProperties.autoCompleteList as the user updates their input. This is called upon a KEYPRESS event.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateCharacterSetWithInput:completionHandler:":{"name":"-updateCharacterSetWithInput:completionHandler:","abstract":"

    Implement this if you wish to update the limitedCharacterSet as the user updates their input. This is called upon a KEYPRESS event.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidSendEvent:text:":{"name":"-keyboardDidSendEvent:text:","abstract":"

    Implement this to be notified of all events occurring on the keyboard

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didSelectChoice:withSource:atRowIndex:":{"name":"-choiceSet:didSelectChoice:withSource:atRowIndex:","abstract":"

    Delegate method called after a choice set item is selected

    ","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didReceiveError:":{"name":"-choiceSet:didReceiveError:","abstract":"

    Delegate method called on an error

    ","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:fileDidFinishPlaying:successfully:":{"name":"-audioStreamManager:fileDidFinishPlaying:successfully:","abstract":"

    Called when a file from the SDLAudioStreamManager finishes playing

    ","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForFile:error:":{"name":"-audioStreamManager:errorDidOccurForFile:error:","abstract":"

    Called when a file from the SDLAudioStreamManager could not play

    ","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:dataBufferDidFinishPlayingSuccessfully:":{"name":"-audioStreamManager:dataBufferDidFinishPlayingSuccessfully:","abstract":"

    Called when a data buffer from the SDLAudioStreamManager finishes playing

    ","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForDataBuffer:":{"name":"-audioStreamManager:errorDidOccurForDataBuffer:","abstract":"

    Called when a data buffer from the SDLAudioStreamManager could not play

    ","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols.html#/c:objc(pl)SDLInt":{"name":"SDLInt","abstract":"

    A declaration that this NSNumber contains an NSInteger.

    "},"Protocols.html#/c:objc(pl)SDLUInt":{"name":"SDLUInt","abstract":"

    A declaration that this NSNumber contains an NSUInteger.

    "},"Protocols.html#/c:objc(pl)SDLBool":{"name":"SDLBool","abstract":"

    A declaration that this NSNumber contains a BOOL.

    "},"Protocols.html#/c:objc(pl)SDLFloat":{"name":"SDLFloat","abstract":"

    A declaration that this NSNumber contains a float.

    "},"Protocols/SDLAudioStreamManagerDelegate.html":{"name":"SDLAudioStreamManagerDelegate","abstract":"

    Delegate for the AudioStreamManager

    "},"Protocols/SDLChoiceSetDelegate.html":{"name":"SDLChoiceSetDelegate","abstract":"

    Delegate for the the SDLChoiceSet. Contains methods that get called when an action is taken on a choice cell.

    "},"Protocols/SDLKeyboardDelegate.html":{"name":"SDLKeyboardDelegate","abstract":"

    They delegate of a keyboard popup allowing customization at runtime of the keyboard.

    "},"Protocols/SDLLogTarget.html":{"name":"SDLLogTarget","abstract":"

    A protocol describing a place logs from SDLLogManager are logged to

    "},"Protocols/SDLManagerDelegate.html":{"name":"SDLManagerDelegate","abstract":"

    The manager’s delegate

    "},"Protocols/SDLSecurityType.html":{"name":"SDLSecurityType","abstract":"

    A protocol used by SDL Security libraries.

    "},"Protocols/SDLServiceEncryptionDelegate.html":{"name":"SDLServiceEncryptionDelegate","abstract":"

    Delegate for the encryption service.

    "},"Protocols/SDLStreamingAudioManagerType.html":{"name":"SDLStreamingAudioManagerType","abstract":"

    Streaming audio manager

    "},"Protocols/SDLStreamingMediaManagerDataSource.html":{"name":"SDLStreamingMediaManagerDataSource","abstract":"

    A data source for the streaming manager’s preferred resolutions and preferred formats.

    "},"Protocols/SDLTouchManagerDelegate.html":{"name":"SDLTouchManagerDelegate","abstract":"

    The delegate to be notified of processed touches such as pinches, pans, and taps

    "},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagNone":{"name":"SDLStreamingEncryptionFlagNone","abstract":"

    It should not be encrypted at all

    ","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateOnly":{"name":"SDLStreamingEncryptionFlagAuthenticateOnly","abstract":"

    It should use SSL/TLS only to authenticate

    ","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateAndEncrypt":{"name":"SDLStreamingEncryptionFlagAuthenticateAndEncrypt","abstract":"

    All data on these services should be encrypted using SSL/TLS

    ","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeLayer":{"name":"SDLCarWindowRenderingTypeLayer","abstract":"

    Instead of rendering your UIViewController’s view, this will render the layer using renderInContext

    ","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewAfterScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewAfterScreenUpdates","abstract":"

    Renders your UIViewController’s view using drawViewHierarchyInRect:bounds afterScreenUpdates:YES

    ","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewBeforeScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewBeforeScreenUpdates","abstract":"

    Renders your UIViewController’s view using drawViewHierarchyInRect:bounds afterScreenUpdates:NO

    ","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeRequest":{"name":"SDLRPCMessageTypeRequest","abstract":"

    A request that will require a response

    ","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeResponse":{"name":"SDLRPCMessageTypeResponse","abstract":"

    A response to a request

    ","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeNotification":{"name":"SDLRPCMessageTypeNotification","abstract":"

    A message that does not have a response

    ","parent_name":"SDLRPCMessageType"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoHeartbeat":{"name":"SDLFrameInfoHeartbeat","abstract":"

    A ping packet that is sent to ensure the connection is still active and the service is still valid.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartService":{"name":"SDLFrameInfoStartService","abstract":"

    Requests that a specific type of service is started.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartServiceACK":{"name":"SDLFrameInfoStartServiceACK","abstract":"

    Acknowledges that the specific service has been started successfully.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartServiceNACK":{"name":"SDLFrameInfoStartServiceNACK","abstract":"

    Negatively acknowledges that the specific service was not started.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndService":{"name":"SDLFrameInfoEndService","abstract":"

    Requests that a specific type of service is ended.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndServiceACK":{"name":"SDLFrameInfoEndServiceACK","abstract":"

    Acknowledges that the specific service has been ended successfully.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndServiceNACK":{"name":"SDLFrameInfoEndServiceNACK","abstract":"

    Negatively acknowledges that the specific service was not ended or has not yet been started.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransport":{"name":"SDLFrameInfoRegisterSecondaryTransport","abstract":"

    Notifies that a Secondary Transport has been established.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransportACK":{"name":"SDLFrameInfoRegisterSecondaryTransportACK","abstract":"

    Acknowledges that the Secondary Transport has been recognized.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransportNACK":{"name":"SDLFrameInfoRegisterSecondaryTransportNACK","abstract":"

    Negatively acknowledges that the Secondary Transport has not been recognized.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoTransportEventUpdate":{"name":"SDLFrameInfoTransportEventUpdate","abstract":"

    Indicates the status or configuration of transport(s) is/are updated.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoServiceDataAck":{"name":"SDLFrameInfoServiceDataAck","abstract":"

    Deprecated.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoHeartbeatACK":{"name":"SDLFrameInfoHeartbeatACK","abstract":"

    Acknowledges that a Heartbeat control packet has been received.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoSingleFrame":{"name":"SDLFrameInfoSingleFrame","abstract":"

    Payload contains a single packet.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoFirstFrame":{"name":"SDLFrameInfoFirstFrame","abstract":"

    First frame in a multiple frame payload.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoConsecutiveLastFrame":{"name":"SDLFrameInfoConsecutiveLastFrame","abstract":"

    Frame in a multiple frame payload.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeControl":{"name":"SDLServiceTypeControl","abstract":"

    The lowest level service available.

    ","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeRPC":{"name":"SDLServiceTypeRPC","abstract":"

    Used to send requests, responses, and notifications between an application and a head unit.

    ","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeAudio":{"name":"SDLServiceTypeAudio","abstract":"

    The application can start the audio service to send PCM audio data to the head unit. After the StartService packet is sent and the ACK received, the payload for the Audio Service is only PCM audio data.

    ","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeVideo":{"name":"SDLServiceTypeVideo","abstract":"

    The application can start the video service to send H.264 video data to the head unit. After the StartService packet is sent and the ACK received, the payload for the Video Service is only H.264 video data.

    ","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeBulkData":{"name":"SDLServiceTypeBulkData","abstract":"

    Similar to the RPC Service but adds a bulk data field. The payload of a message sent via the Hybrid service consists of a Binary Header, JSON Data, and Bulk Data.

    ","parent_name":"SDLServiceType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeControl":{"name":"SDLFrameTypeControl","abstract":"

    Lowest-level type of packets. They can be sent over any of the defined services. They are used for the control of the services in which they are sent.

    ","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeSingle":{"name":"SDLFrameTypeSingle","abstract":"

    Contains all the data for a particular packet in the payload. The majority of frames sent over the protocol utilize this frame type.

    ","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeFirst":{"name":"SDLFrameTypeFirst","abstract":"

    The First Frame in a multiple frame payload contains information about the entire sequence of frames so that the receiving end can correctly parse all the frames and reassemble the entire payload. The payload of this frame is only eight bytes and contains information regarding the rest of the sequence.

    ","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeConsecutive":{"name":"SDLFrameTypeConsecutive","abstract":"

    The Consecutive Frames in a multiple frame payload contain the actual raw data of the original payload. The parsed payload contained in each of the Consecutive Frames’ payloads should be buffered until the entire sequence is complete.

    ","parent_name":"SDLFrameType"},"Enums/SDLPredefinedWindows.html#/c:@E@SDLPredefinedWindows@SDLPredefinedWindowsDefaultWindow":{"name":"SDLPredefinedWindowsDefaultWindow","abstract":"

    The default window is a main window pre-created on behalf of the app.

    ","parent_name":"SDLPredefinedWindows"},"Enums/SDLPredefinedWindows.html#/c:@E@SDLPredefinedWindows@SDLPredefinedWindowsPrimaryWidget":{"name":"SDLPredefinedWindowsPrimaryWidget","abstract":"

    The primary widget of the app.

    ","parent_name":"SDLPredefinedWindows"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusAllowed":{"name":"SDLPermissionGroupStatusAllowed","abstract":"

    Every RPC in the group is currently allowed.

    ","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusDisallowed":{"name":"SDLPermissionGroupStatusDisallowed","abstract":"

    Every RPC in the group is currently disallowed.

    ","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusMixed":{"name":"SDLPermissionGroupStatusMixed","abstract":"

    Some RPCs in the group are allowed and some disallowed.

    ","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusUnknown":{"name":"SDLPermissionGroupStatusUnknown","abstract":"

    The current status of the group is unknown.

    ","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAllAllowed":{"name":"SDLPermissionGroupTypeAllAllowed","abstract":"

    Be notified when all of the RPC in the group are allowed, or, when they all stop being allowed in some sense, that is, when they were all allowed, and now they are not.

    ","parent_name":"SDLPermissionGroupType"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAny":{"name":"SDLPermissionGroupTypeAny","abstract":"

    Be notified when any change in availability occurs among the group.

    ","parent_name":"SDLPermissionGroupType"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateDelete":{"name":"MenuCellStateDelete","abstract":"

    Marks the cell to be deleted

    ","parent_name":"MenuCellState"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateAdd":{"name":"MenuCellStateAdd","abstract":"

    Marks the cell to be added

    ","parent_name":"MenuCellState"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateKeep":{"name":"MenuCellStateKeep","abstract":"

    Marks the cell to be kept

    ","parent_name":"MenuCellState"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeForceOn":{"name":"SDLDynamicMenuUpdatesModeForceOn","abstract":"

    Forces on compatibility mode. This will force the menu manager to delete and re-add each menu item for every menu update. This mode is generally not advised due to performance issues.

    ","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeForceOff":{"name":"SDLDynamicMenuUpdatesModeForceOff","abstract":"

    This mode forces the menu manager to always dynamically update menu items for each menu update. This will provide the best performance but may cause ordering issues on some SYNC Gen 3 head units.

    ","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeOnWithCompatibility":{"name":"SDLDynamicMenuUpdatesModeOnWithCompatibility","abstract":"

    This mode checks whether the phone is connected to a SYNC Gen 3 head unit, which has known menu ordering issues. If it is, it will always delete and re-add every menu item, if not, it will dynamically update the menus.

    ","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeSimple":{"name":"SDLLogFormatTypeSimple","abstract":"

    A bare-bones log format: 09:52:07:324 🔹 (SDL)Protocol – a random test i guess

    ","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDefault":{"name":"SDLLogFormatTypeDefault","abstract":"

    A middle detail default log format: 09:52:07:324 🔹 (SDL)Protocol:SDLV2ProtocolHeader:25 – Some log message

    ","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDetailed":{"name":"SDLLogFormatTypeDetailed","abstract":"

    A very detailed log format: 09:52:07:324 🔹 DEBUG com.apple.main-thread:(SDL)Protocol:[SDLV2ProtocolHeader parse:]:74 – Some log message

    ","parent_name":"SDLLogFormatType"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDefault":{"name":"SDLLogLevelDefault","abstract":"

    This is used to describe that a “specific” logging will instead use the global log level, for example, a module may use the global log level instead of its own by specifying this level.

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelOff":{"name":"SDLLogLevelOff","abstract":"

    This is used to describe a level that involves absolutely no logs being output.

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelError":{"name":"SDLLogLevelError","abstract":"

    Only error level logs will be output

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelWarning":{"name":"SDLLogLevelWarning","abstract":"

    Both error and warning level logs will be output

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDebug":{"name":"SDLLogLevelDebug","abstract":"

    Error, warning, and debug level logs will be output. This level will never be output in RELEASE environments

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelVerbose":{"name":"SDLLogLevelVerbose","abstract":"

    All level logs will be output. This level will never be output in RELEASE environments

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagError":{"name":"SDLLogFlagError","abstract":"

    Error level logging

    ","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagWarning":{"name":"SDLLogFlagWarning","abstract":"

    Warning level logging

    ","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagDebug":{"name":"SDLLogFlagDebug","abstract":"

    Debug level logging

    ","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagVerbose":{"name":"SDLLogFlagVerbose","abstract":"

    Verbose level logging

    ","parent_name":"SDLLogFlag"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionTransmit":{"name":"SDLLogBytesDirectionTransmit","abstract":"

    Transmit from the app

    ","parent_name":"SDLLogBytesDirection"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionReceive":{"name":"SDLLogBytesDirectionReceive","abstract":"

    Receive from the module

    ","parent_name":"SDLLogBytesDirection"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeNever":{"name":"SDLLockScreenConfigurationDisplayModeNever","abstract":"

    The lock screen should never be shown. This should almost always mean that you will build your own lock screen.

    ","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeRequiredOnly":{"name":"SDLLockScreenConfigurationDisplayModeRequiredOnly","abstract":"

    The lock screen should only be shown when it is required by the head unit.

    ","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeOptionalOrRequired":{"name":"SDLLockScreenConfigurationDisplayModeOptionalOrRequired","abstract":"

    The lock screen should be shown when required by the head unit or when the head unit says that its optional, but not in other cases, such as before the user has interacted with your app on the head unit.

    ","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeAlways":{"name":"SDLLockScreenConfigurationDisplayModeAlways","abstract":"

    The lock screen should always be shown after connection.

    ","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLSecondaryTransports.html#/c:@E@SDLSecondaryTransports@SDLSecondaryTransportsNone":{"name":"SDLSecondaryTransportsNone","abstract":"

    No secondary transport

    ","parent_name":"SDLSecondaryTransports"},"Enums/SDLSecondaryTransports.html#/c:@E@SDLSecondaryTransports@SDLSecondaryTransportsTCP":{"name":"SDLSecondaryTransportsTCP","abstract":"

    TCP as secondary transport

    ","parent_name":"SDLSecondaryTransports"},"Enums/SDLRPCStoreError.html#/c:@E@SDLRPCStoreError@SDLRPCStoreErrorGetInvalidObject":{"name":"SDLRPCStoreErrorGetInvalidObject","abstract":"

    In dictionary stored value with unexpected type

    ","parent_name":"SDLRPCStoreError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorUnknown":{"name":"SDLTransportErrorUnknown","abstract":"

    Connection cannot be established due to a reason not listed here.

    ","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionRefused":{"name":"SDLTransportErrorConnectionRefused","abstract":"

    TCP connection is refused.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionTimedOut":{"name":"SDLTransportErrorConnectionTimedOut","abstract":"

    TCP connection cannot be established within given time.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorNetworkDown":{"name":"SDLTransportErrorNetworkDown","abstract":"

    TCP connection cannot be established since network is down.","parent_name":"SDLTransportError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorPendingPresentationDeleted":{"name":"SDLChoiceSetManagerErrorPendingPresentationDeleted","abstract":"

    The choice set has been deleted before it was presented

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorDeletionFailed":{"name":"SDLChoiceSetManagerErrorDeletionFailed","abstract":"

    The choice set failed to delete

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorUploadFailed":{"name":"SDLChoiceSetManagerErrorUploadFailed","abstract":"

    The upload failed

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorFailedToCreateMenuItems":{"name":"SDLChoiceSetManagerErrorFailedToCreateMenuItems","abstract":"

    The menu items failed to be created

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorInvalidState":{"name":"SDLChoiceSetManagerErrorInvalidState","abstract":"

    Invalid state

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLMenuManagerError.html#/c:@E@SDLMenuManagerError@SDLMenuManagerErrorRPCsFailed":{"name":"SDLMenuManagerErrorRPCsFailed","abstract":"

    Sending menu-related RPCs returned an error from the remote system

    ","parent_name":"SDLMenuManagerError"},"Enums/SDLSoftButtonManagerError.html#/c:@E@SDLSoftButtonManagerError@SDLSoftButtonManagerErrorPendingUpdateSuperseded":{"name":"SDLSoftButtonManagerErrorPendingUpdateSuperseded","abstract":"

    A pending update was superseded by a newer requested update. The old update will not be sent

    ","parent_name":"SDLSoftButtonManagerError"},"Enums/SDLTextAndGraphicManagerError.html#/c:@E@SDLTextAndGraphicManagerError@SDLTextAndGraphicManagerErrorPendingUpdateSuperseded":{"name":"SDLTextAndGraphicManagerErrorPendingUpdateSuperseded","abstract":"

    A pending update was superseded by a newer requested update. The old update will not be sent

    ","parent_name":"SDLTextAndGraphicManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorCannotOverwrite":{"name":"SDLFileManagerErrorCannotOverwrite","abstract":"

    A file attempted to send, but a file with that name already exists on the remote head unit, and the file was not configured to overwrite.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorNoKnownFile":{"name":"SDLFileManagerErrorNoKnownFile","abstract":"

    A file was attempted to be accessed but it does not exist.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToStart":{"name":"SDLFileManagerErrorUnableToStart","abstract":"

    The file manager attempted to start but encountered an error.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToUpload":{"name":"SDLFileManagerErrorUnableToUpload","abstract":"

    The file manager was unable to send this file.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDoesNotExist":{"name":"SDLFileManagerErrorFileDoesNotExist","abstract":"

    The file manager could not find the local file.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerUploadCanceled":{"name":"SDLFileManagerUploadCanceled","abstract":"

    The file upload was canceled.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileUploadTasksFailed":{"name":"SDLFileManagerMultipleFileUploadTasksFailed","abstract":"

    One or more of multiple files being uploaded or deleted failed.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileDeleteTasksFailed":{"name":"SDLFileManagerMultipleFileDeleteTasksFailed","abstract":"

    One or more of multiple files being uploaded or deleted failed.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDataMissing":{"name":"SDLFileManagerErrorFileDataMissing","abstract":"

    The file data is nil or empty.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorStaticIcon":{"name":"SDLFileManagerErrorStaticIcon","abstract":"

    The file is a static icon, which cannot be uploaded

    ","parent_name":"SDLFileManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRPCRequestFailed":{"name":"SDLManagerErrorRPCRequestFailed","abstract":"

    An RPC request failed to send.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotConnected":{"name":"SDLManagerErrorNotConnected","abstract":"

    Some action was attempted that requires a connection to the remote head unit.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotReady":{"name":"SDLManagerErrorNotReady","abstract":"

    Some action was attempted before the ready state was reached.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorUnknownRemoteError":{"name":"SDLManagerErrorUnknownRemoteError","abstract":"

    The remote system encountered an unknown error.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorManagersFailedToStart":{"name":"SDLManagerErrorManagersFailedToStart","abstract":"

    One or more of the sub-managers failed to start.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationFailed":{"name":"SDLManagerErrorRegistrationFailed","abstract":"

    Registering with the remote system failed.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationSuccessWithWarning":{"name":"SDLManagerErrorRegistrationSuccessWithWarning","abstract":"

    Registering with the remote system was successful, but had a warning.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorCancelled":{"name":"SDLManagerErrorCancelled","abstract":"

    Request operations were cancelled before they could be sent

    ","parent_name":"SDLManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorNotConnected":{"name":"SDLEncryptionLifecycleManagerErrorNotConnected","abstract":"

    Some action was attempted that requires a connection to the remote head unit.

    ","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorEncryptionOff":{"name":"SDLEncryptionLifecycleManagerErrorEncryptionOff","abstract":"

    Received ACK with encryption bit set to false from the remote head unit

    ","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorNAK":{"name":"SDLEncryptionLifecycleManagerErrorNAK","abstract":"

    Received NAK from the remote head unit.

    ","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutList":{"name":"SDLChoiceSetLayoutList","abstract":"

    Menu items will be displayed in a list

    ","parent_name":"SDLChoiceSetLayout"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutTiles":{"name":"SDLChoiceSetLayoutTiles","abstract":"

    Menu items will be displayed as a tiled list

    ","parent_name":"SDLChoiceSetLayout"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNotConnected":{"name":"SDLAudioStreamManagerErrorNotConnected","abstract":"

    The audio stream is not currently connected

    ","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNoQueuedAudio":{"name":"SDLAudioStreamManagerErrorNoQueuedAudio","abstract":"

    Attempted to play but there’s no audio in the queue

    ","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatPNG":{"name":"SDLArtworkImageFormatPNG","abstract":"

    Image format: PNG

    ","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatJPG":{"name":"SDLArtworkImageFormatJPG","abstract":"

    Image format: JPG

    ","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html":{"name":"SDLArtworkImageFormat","abstract":"

    Image format of an artwork file

    "},"Enums/SDLAudioStreamManagerError.html":{"name":"SDLAudioStreamManagerError","abstract":"

    AudioStreamManager errors

    "},"Enums/SDLChoiceSetLayout.html":{"name":"SDLChoiceSetLayout","abstract":"

    The layout to use when a choice set is displayed

    "},"Enums/SDLEncryptionLifecycleManagerError.html":{"name":"SDLEncryptionLifecycleManagerError","abstract":"

    Errors associated with the SDLManager class.

    "},"Enums/SDLManagerError.html":{"name":"SDLManagerError","abstract":"

    Errors associated with the SDLManager class.

    "},"Enums/SDLFileManagerError.html":{"name":"SDLFileManagerError","abstract":"

    Errors associated with the SDLFileManager class.

    "},"Enums/SDLTextAndGraphicManagerError.html":{"name":"SDLTextAndGraphicManagerError","abstract":"

    Errors associated with the ScreenManager class

    "},"Enums/SDLSoftButtonManagerError.html":{"name":"SDLSoftButtonManagerError","abstract":"

    Errors associated with the ScreenManager class

    "},"Enums/SDLMenuManagerError.html":{"name":"SDLMenuManagerError","abstract":"

    Errors associated with the ScreenManager class

    "},"Enums/SDLChoiceSetManagerError.html":{"name":"SDLChoiceSetManagerError","abstract":"

    Errors associated with Choice Set class

    "},"Enums/SDLTransportError.html":{"name":"SDLTransportError","abstract":"

    Errors associated with transport.

    "},"Enums/SDLRPCStoreError.html":{"name":"SDLRPCStoreError","abstract":"

    Errors associated with store.

    "},"Enums/SDLSecondaryTransports.html":{"name":"SDLSecondaryTransports","abstract":"

    List of secondary transports

    "},"Enums/SDLLockScreenConfigurationDisplayMode.html":{"name":"SDLLockScreenConfigurationDisplayMode","abstract":"

    Describes when the lock screen should be shown.

    "},"Enums/SDLLogBytesDirection.html":{"name":"SDLLogBytesDirection","abstract":"

    An enum describing log bytes direction

    "},"Enums/SDLLogFlag.html":{"name":"SDLLogFlag","abstract":"

    Flags used for SDLLogLevel to provide correct enum values. This is purely for internal use.

    "},"Enums/SDLLogLevel.html":{"name":"SDLLogLevel","abstract":"

    An enum describing a level of logging.

    "},"Enums/SDLLogFormatType.html":{"name":"SDLLogFormatType","abstract":"

    The output format of logs; how they will appear when printed out into a string.

    "},"Enums/SDLDynamicMenuUpdatesMode.html":{"name":"SDLDynamicMenuUpdatesMode","abstract":"

    Dynamic Menu Manager Mode

    "},"Enums/MenuCellState.html":{"name":"MenuCellState","abstract":"

    Menu cell state

    "},"Enums/SDLPermissionGroupType.html":{"name":"SDLPermissionGroupType","abstract":"

    A permission group type which will be used to tell the system what type of changes you want to be notified about for the group.

    "},"Enums/SDLPermissionGroupStatus.html":{"name":"SDLPermissionGroupStatus","abstract":"

    The status of the group of RPCs permissions.

    "},"Enums/SDLPredefinedWindows.html":{"name":"SDLPredefinedWindows","abstract":"

    Specifies which windows and IDs are predefined and pre-created on behalf of the app. The default window is always available and represents the app window on the main display. It’s an equivalent to today’s app window. For backward compatibility, this will ensure the app always has at least the default window on the main display. The app can choose to use this predefined enum element to specifically address app’s main window or to duplicate window content. It is not possible to duplicate another window to the default window. The primary widget is a special widget, that can be associated with a service type, which is used by the HMI whenever a single widget needs to represent the whole app. The primary widget should be named as the app and can be pre-created by the HMI.

    "},"Enums/SDLFrameType.html":{"name":"SDLFrameType","abstract":"

    The data packet’s header and payload combination.

    "},"Enums/SDLServiceType.html":{"name":"SDLServiceType","abstract":"

    The data packet’s format and priority.

    "},"Enums/SDLFrameInfo.html":{"name":"SDLFrameInfo","abstract":"

    The data packet’s available data.

    "},"Enums/SDLRPCMessageType.html":{"name":"SDLRPCMessageType","abstract":"

    The type of RPC message

    "},"Enums/SDLCarWindowRenderingType.html":{"name":"SDLCarWindowRenderingType","abstract":"

    The type of rendering that CarWindow will perform. Depending on your app, you may need to try different ones for best performance

    "},"Enums/SDLStreamingEncryptionFlag.html":{"name":"SDLStreamingEncryptionFlag","abstract":"

    A flag determining how video and audio streaming should be encrypted

    "},"Constants.html#/c:@SDLAmbientLightStatusNight":{"name":"SDLAmbientLightStatusNight","abstract":"

    Represents a “night” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusTwilight1":{"name":"SDLAmbientLightStatusTwilight1","abstract":"

    Represents a “twilight 1” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusTwilight2":{"name":"SDLAmbientLightStatusTwilight2","abstract":"

    Represents a “twilight 2” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusTwilight3":{"name":"SDLAmbientLightStatusTwilight3","abstract":"

    Represents a “twilight 3” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusTwilight4":{"name":"SDLAmbientLightStatusTwilight4","abstract":"

    Represents a “twilight 4” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusDay":{"name":"SDLAmbientLightStatusDay","abstract":"

    Represents a “day” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusUnknown":{"name":"SDLAmbientLightStatusUnknown","abstract":"

    Represents an “unknown” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusInvalid":{"name":"SDLAmbientLightStatusInvalid","abstract":"

    Represents a “invalid” ambient light status

    "},"Constants.html#/c:@SDLAppHMITypeDefault":{"name":"SDLAppHMITypeDefault","abstract":"

    The App will have default rights.

    "},"Constants.html#/c:@SDLAppHMITypeCommunication":{"name":"SDLAppHMITypeCommunication","abstract":"

    Communication type of App

    "},"Constants.html#/c:@SDLAppHMITypeMedia":{"name":"SDLAppHMITypeMedia","abstract":"

    App dealing with Media

    "},"Constants.html#/c:@SDLAppHMITypeMessaging":{"name":"SDLAppHMITypeMessaging","abstract":"

    Messaging App

    "},"Constants.html#/c:@SDLAppHMITypeNavigation":{"name":"SDLAppHMITypeNavigation","abstract":"

    Navigation App

    "},"Constants.html#/c:@SDLAppHMITypeInformation":{"name":"SDLAppHMITypeInformation","abstract":"

    Information App

    "},"Constants.html#/c:@SDLAppHMITypeSocial":{"name":"SDLAppHMITypeSocial","abstract":"

    App dealing with social media

    "},"Constants.html#/c:@SDLAppHMITypeProjection":{"name":"SDLAppHMITypeProjection","abstract":"

    App dealing with Mobile Projection applications

    "},"Constants.html#/c:@SDLAppHMITypeBackgroundProcess":{"name":"SDLAppHMITypeBackgroundProcess","abstract":"

    App designed for use in the background

    "},"Constants.html#/c:@SDLAppHMITypeTesting":{"name":"SDLAppHMITypeTesting","abstract":"

    App only for Testing purposes

    "},"Constants.html#/c:@SDLAppHMITypeSystem":{"name":"SDLAppHMITypeSystem","abstract":"

    System App

    "},"Constants.html#/c:@SDLAppHMITypeRemoteControl":{"name":"SDLAppHMITypeRemoteControl","abstract":"

    Remote control

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonIgnitionOff":{"name":"SDLAppInterfaceUnregisteredReasonIgnitionOff","abstract":"

    Vehicle ignition turned off.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonBluetoothOff":{"name":"SDLAppInterfaceUnregisteredReasonBluetoothOff","abstract":"

    Bluetooth was turned off, causing termination of a necessary Bluetooth connection.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUSBDisconnected":{"name":"SDLAppInterfaceUnregisteredReasonUSBDisconnected","abstract":"

    USB was disconnected, causing termination of a necessary iAP connection.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel":{"name":"SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel","abstract":"

    Application attempted SmartDeviceLink RPC request while HMILevel = NONE. App must have HMILevel other than NONE to issue RPC requests or get notifications or RPC responses.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonTooManyRequests":{"name":"SDLAppInterfaceUnregisteredReasonTooManyRequests","abstract":"

    Either too many – or too many per unit of time – requests were made by the application.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonDriverDistractionViolation":{"name":"SDLAppInterfaceUnregisteredReasonDriverDistractionViolation","abstract":"

    The application has issued requests which cause driver distraction rules to be violated.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonLanguageChange":{"name":"SDLAppInterfaceUnregisteredReasonLanguageChange","abstract":"

    The user performed a language change on the SDL platform, causing the application to need to be reregistered for the new language.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonMasterReset":{"name":"SDLAppInterfaceUnregisteredReasonMasterReset","abstract":"

    The user performed a MASTER RESET on the SDL platform, causing removal of a necessary Bluetooth pairing.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonFactoryDefaults":{"name":"SDLAppInterfaceUnregisteredReasonFactoryDefaults","abstract":"

    The user restored settings to FACTORY DEFAULTS on the SDL platform.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonAppUnauthorized":{"name":"SDLAppInterfaceUnregisteredReasonAppUnauthorized","abstract":"

    The app is not being authorized to be connected to SDL.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonProtocolViolation":{"name":"SDLAppInterfaceUnregisteredReasonProtocolViolation","abstract":"

    The app could not register due to a protocol violation

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource":{"name":"SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource","abstract":"

    The HMI resource is unsupported

    "},"Constants.html#/c:@SDLAppServiceTypeMedia":{"name":"SDLAppServiceTypeMedia","abstract":"

    The app will have a service type of media.

    "},"Constants.html#/c:@SDLAppServiceTypeWeather":{"name":"SDLAppServiceTypeWeather","abstract":"

    The app will have a service type of weather.

    "},"Constants.html#/c:@SDLAppServiceTypeNavigation":{"name":"SDLAppServiceTypeNavigation","abstract":"

    The app will have a service type of navigation.

    "},"Constants.html#/c:@SDLErrorDomainAudioStreamManager":{"name":"SDLErrorDomainAudioStreamManager","abstract":"

    Error relates to AudioStreamManager

    "},"Constants.html#/c:@SDLAudioStreamingIndicatorPlayPause":{"name":"SDLAudioStreamingIndicatorPlayPause","abstract":"

    Default playback indicator."},"Constants.html#/c:@SDLAudioStreamingIndicatorPlay":{"name":"SDLAudioStreamingIndicatorPlay","abstract":"

    Indicates that a button press of the Play/Pause button starts the audio playback.

    "},"Constants.html#/c:@SDLAudioStreamingIndicatorPause":{"name":"SDLAudioStreamingIndicatorPause","abstract":"

    Indicates that a button press of the Play/Pause button pauses the current audio playback.

    "},"Constants.html#/c:@SDLAudioStreamingIndicatorStop":{"name":"SDLAudioStreamingIndicatorStop","abstract":"

    Indicates that a button press of the Play/Pause button stops the current audio playback.

    "},"Constants.html#/c:@SDLAudioStreamingStateAudible":{"name":"SDLAudioStreamingStateAudible","abstract":"

    Currently streaming audio, if any, is audible to user.

    "},"Constants.html#/c:@SDLAudioStreamingStateAttenuated":{"name":"SDLAudioStreamingStateAttenuated","abstract":"

    Some kind of audio mixing is taking place. Currently streaming audio, if any, is audible to the user at a lowered volume.

    "},"Constants.html#/c:@SDLAudioStreamingStateNotAudible":{"name":"SDLAudioStreamingStateNotAudible","abstract":"

    Currently streaming audio, if any, is not audible to user. made via VR session.

    "},"Constants.html#/c:@SDLAudioTypePCM":{"name":"SDLAudioTypePCM","abstract":"

    PCM raw audio

    "},"Constants.html#/c:@SDLBitsPerSample8Bit":{"name":"SDLBitsPerSample8Bit","abstract":"

    8 bits per sample

    "},"Constants.html#/c:@SDLBitsPerSample16Bit":{"name":"SDLBitsPerSample16Bit","abstract":"

    16 bits per sample

    "},"Constants.html#/c:@SDLButtonEventModeButtonUp":{"name":"SDLButtonEventModeButtonUp","abstract":"

    The button was released

    "},"Constants.html#/c:@SDLButtonEventModeButtonDown":{"name":"SDLButtonEventModeButtonDown","abstract":"

    The button was depressed

    "},"Constants.html#/c:@SDLButtonNameOk":{"name":"SDLButtonNameOk","abstract":"

    Represents the button usually labeled “OK”. A typical use of this button is for the user to press it to make a selection. Prior to SDL Core 5.0 (iOS Proxy v.6.1), Ok was used for both “OK” buttons AND PlayPause. In 5.0, PlayPause was introduced to reduce confusion, and you should use the one you intend for your use case (usually PlayPause). Until the next proxy breaking change, however, subscribing to this button name will continue to subscribe you to PlayPause so that your code does not break. That means that if you subscribe to both Ok and PlayPause, you will receive duplicate notifications.

    "},"Constants.html#/c:@SDLButtonNamePlayPause":{"name":"SDLButtonNamePlayPause","abstract":"

    Represents the play/pause button for media apps. Replaces “OK” on sub-5.0 head units, compliments it on 5.0 head units and later.

    "},"Constants.html#/c:@SDLButtonNameSeekLeft":{"name":"SDLButtonNameSeekLeft","abstract":"

    Represents the seek-left button. A typical use of this button is for the user to scroll to the left through menu choices one menu item per press.

    "},"Constants.html#/c:@SDLButtonNameSeekRight":{"name":"SDLButtonNameSeekRight","abstract":"

    Represents the seek-right button. A typical use of this button is for the user to scroll to the right through menu choices one menu item per press.

    "},"Constants.html#/c:@SDLButtonNameTuneUp":{"name":"SDLButtonNameTuneUp","abstract":"

    Represents a turn of the tuner knob in the clockwise direction one tick.

    "},"Constants.html#/c:@SDLButtonNameTuneDown":{"name":"SDLButtonNameTuneDown","abstract":"

    Represents a turn of the tuner knob in the counter-clockwise direction one tick.

    "},"Constants.html#/c:@SDLButtonNamePreset0":{"name":"SDLButtonNamePreset0","abstract":"

    Represents the preset 0 button.

    "},"Constants.html#/c:@SDLButtonNamePreset1":{"name":"SDLButtonNamePreset1","abstract":"

    Represents the preset 1 button.

    "},"Constants.html#/c:@SDLButtonNamePreset2":{"name":"SDLButtonNamePreset2","abstract":"

    Represents the preset 2 button.

    "},"Constants.html#/c:@SDLButtonNamePreset3":{"name":"SDLButtonNamePreset3","abstract":"

    Represents the preset 3 button.

    "},"Constants.html#/c:@SDLButtonNamePreset4":{"name":"SDLButtonNamePreset4","abstract":"

    Represents the preset 4 button.

    "},"Constants.html#/c:@SDLButtonNamePreset5":{"name":"SDLButtonNamePreset5","abstract":"

    Represents the preset 5 button.

    "},"Constants.html#/c:@SDLButtonNamePreset6":{"name":"SDLButtonNamePreset6","abstract":"

    Represents the preset 6 button.

    "},"Constants.html#/c:@SDLButtonNamePreset7":{"name":"SDLButtonNamePreset7","abstract":"

    Represents the preset 7 button.

    "},"Constants.html#/c:@SDLButtonNamePreset8":{"name":"SDLButtonNamePreset8","abstract":"

    Represents the preset 8 button.

    "},"Constants.html#/c:@SDLButtonNamePreset9":{"name":"SDLButtonNamePreset9","abstract":"

    Represents the preset 9 button.

    "},"Constants.html#/c:@SDLButtonNameCustomButton":{"name":"SDLButtonNameCustomButton","abstract":"

    Represents the Custom button.

    "},"Constants.html#/c:@SDLButtonNameSearch":{"name":"SDLButtonNameSearch","abstract":"

    Represents the SEARCH button.

    "},"Constants.html#/c:@SDLButtonNameACMax":{"name":"SDLButtonNameACMax","abstract":"

    Represents AC max button *

    "},"Constants.html#/c:@SDLButtonNameAC":{"name":"SDLButtonNameAC","abstract":"

    Represents AC button *

    "},"Constants.html#/c:@SDLButtonNameRecirculate":{"name":"SDLButtonNameRecirculate","abstract":"

    Represents a Recirculate button

    "},"Constants.html#/c:@SDLButtonNameFanUp":{"name":"SDLButtonNameFanUp","abstract":"

    Represents a Fan up button

    "},"Constants.html#/c:@SDLButtonNameFanDown":{"name":"SDLButtonNameFanDown","abstract":"

    Represents a fan down button

    "},"Constants.html#/c:@SDLButtonNameTempUp":{"name":"SDLButtonNameTempUp","abstract":"

    Represents a temperature up button

    "},"Constants.html#/c:@SDLButtonNameTempDown":{"name":"SDLButtonNameTempDown","abstract":"

    Represents a temperature down button

    "},"Constants.html#/c:@SDLButtonNameDefrostMax":{"name":"SDLButtonNameDefrostMax","abstract":"

    Represents a Defrost max button.

    "},"Constants.html#/c:@SDLButtonNameDefrost":{"name":"SDLButtonNameDefrost","abstract":"

    Represents a Defrost button.

    "},"Constants.html#/c:@SDLButtonNameDefrostRear":{"name":"SDLButtonNameDefrostRear","abstract":"

    Represents a Defrost rear button.

    "},"Constants.html#/c:@SDLButtonNameUpperVent":{"name":"SDLButtonNameUpperVent","abstract":"

    Represents a Upper Vent button.

    "},"Constants.html#/c:@SDLButtonNameLowerVent":{"name":"SDLButtonNameLowerVent","abstract":"

    Represents a Lower vent button.

    "},"Constants.html#/c:@SDLButtonNameVolumeUp":{"name":"SDLButtonNameVolumeUp","abstract":"

    Represents a volume up button.

    "},"Constants.html#/c:@SDLButtonNameVolumeDown":{"name":"SDLButtonNameVolumeDown","abstract":"

    Represents a volume down button.

    "},"Constants.html#/c:@SDLButtonNameEject":{"name":"SDLButtonNameEject","abstract":"

    Represents a Eject Button.

    "},"Constants.html#/c:@SDLButtonNameSource":{"name":"SDLButtonNameSource","abstract":"

    Represents a Source button.

    "},"Constants.html#/c:@SDLButtonNameShuffle":{"name":"SDLButtonNameShuffle","abstract":"

    Represents a SHUFFLE button.

    "},"Constants.html#/c:@SDLButtonNameRepeat":{"name":"SDLButtonNameRepeat","abstract":"

    Represents a Repeat button.

    "},"Constants.html#/c:@SDLButtonNameNavCenterLocation":{"name":"SDLButtonNameNavCenterLocation","abstract":"

    Represents a Navigate to center button.

    "},"Constants.html#/c:@SDLButtonNameNavZoomIn":{"name":"SDLButtonNameNavZoomIn","abstract":"

    Represents a Zoom in button.

    "},"Constants.html#/c:@SDLButtonNameNavZoomOut":{"name":"SDLButtonNameNavZoomOut","abstract":"

    Represents a Zoom out button.

    "},"Constants.html#/c:@SDLButtonNameNavPanUp":{"name":"SDLButtonNameNavPanUp","abstract":"

    Represents a Pan up button

    "},"Constants.html#/c:@SDLButtonNameNavPanUpRight":{"name":"SDLButtonNameNavPanUpRight","abstract":"

    Represents a Pan up/right button

    "},"Constants.html#/c:@SDLButtonNameNavPanRight":{"name":"SDLButtonNameNavPanRight","abstract":"

    Represents a Pan right button

    "},"Constants.html#/c:@SDLButtonNameNavPanDownRight":{"name":"SDLButtonNameNavPanDownRight","abstract":"

    Represents a Pan down/right button

    "},"Constants.html#/c:@SDLButtonNameNavPanDown":{"name":"SDLButtonNameNavPanDown","abstract":"

    Represents a Pan down button

    "},"Constants.html#/c:@SDLButtonNameNavPanDownLeft":{"name":"SDLButtonNameNavPanDownLeft","abstract":"

    Represents a Pan down left button

    "},"Constants.html#/c:@SDLButtonNameNavPanLeft":{"name":"SDLButtonNameNavPanLeft","abstract":"

    Represents a Pan left button

    "},"Constants.html#/c:@SDLButtonNameNavPanUpLeft":{"name":"SDLButtonNameNavPanUpLeft","abstract":"

    Represents a Pan up left button

    "},"Constants.html#/c:@SDLButtonNameNavTiltToggle":{"name":"SDLButtonNameNavTiltToggle","abstract":"

    Represents a Tilt button. If supported, this toggles between a top-down view and an angled/3D view. If your app supports different, but substantially similar options, then you may implement those. If you don’t implement these or similar options, do not subscribe to this button.

    "},"Constants.html#/c:@SDLButtonNameNavRotateClockwise":{"name":"SDLButtonNameNavRotateClockwise","abstract":"

    Represents a Rotate clockwise button

    "},"Constants.html#/c:@SDLButtonNameNavRotateCounterClockwise":{"name":"SDLButtonNameNavRotateCounterClockwise","abstract":"

    Represents a Rotate counterclockwise button

    "},"Constants.html#/c:@SDLButtonNameNavHeadingToggle":{"name":"SDLButtonNameNavHeadingToggle","abstract":"

    Represents a Heading toggle button. If supported, this toggles between locking the orientation to north or to the vehicle’s heading. If your app supports different, but substantially similar options, then you may implement those. If you don’t implement these or similar options, do not subscribe to this button.

    "},"Constants.html#/c:@SDLButtonPressModeLong":{"name":"SDLButtonPressModeLong","abstract":"

    A button was released, after it was pressed for a long time. Actual timing is defined by the head unit and may vary.

    "},"Constants.html#/c:@SDLButtonPressModeShort":{"name":"SDLButtonPressModeShort","abstract":"

    A button was released, after it was pressed for a short time. Actual timing is defined by the head unit and may vary.

    "},"Constants.html#/c:@SDLCarModeStatusNormal":{"name":"SDLCarModeStatusNormal","abstract":"

    Provides carmode NORMAL to each module.

    "},"Constants.html#/c:@SDLCarModeStatusFactory":{"name":"SDLCarModeStatusFactory","abstract":"

    Provides carmode FACTORY to each module.

    "},"Constants.html#/c:@SDLCarModeStatusTransport":{"name":"SDLCarModeStatusTransport","abstract":"

    Provides carmode TRANSPORT to each module.

    "},"Constants.html#/c:@SDLCarModeStatusCrash":{"name":"SDLCarModeStatusCrash","abstract":"

    Provides carmode CRASH to each module.

    "},"Constants.html#/c:@SDLCharacterSetType2":{"name":"SDLCharacterSetType2","abstract":"

    Character Set Type 2

    "},"Constants.html#/c:@SDLCharacterSetType5":{"name":"SDLCharacterSetType5","abstract":"

    Character Set Type 5

    "},"Constants.html#/c:@SDLCharacterSetCID1":{"name":"SDLCharacterSetCID1","abstract":"

    Character Set CID1

    "},"Constants.html#/c:@SDLCharacterSetCID2":{"name":"SDLCharacterSetCID2","abstract":"

    Character Set CID2

    "},"Constants.html#/c:@SDLCompassDirectionNorth":{"name":"SDLCompassDirectionNorth","abstract":"

    Direction North

    "},"Constants.html#/c:@SDLCompassDirectionNorthwest":{"name":"SDLCompassDirectionNorthwest","abstract":"

    Direction Northwest

    "},"Constants.html#/c:@SDLCompassDirectionWest":{"name":"SDLCompassDirectionWest","abstract":"

    Direction West

    "},"Constants.html#/c:@SDLCompassDirectionSouthwest":{"name":"SDLCompassDirectionSouthwest","abstract":"

    Direction Southwest

    "},"Constants.html#/c:@SDLCompassDirectionSouth":{"name":"SDLCompassDirectionSouth","abstract":"

    Direction South

    "},"Constants.html#/c:@SDLCompassDirectionSoutheast":{"name":"SDLCompassDirectionSoutheast","abstract":"

    Direction Southeast

    "},"Constants.html#/c:@SDLCompassDirectionEast":{"name":"SDLCompassDirectionEast","abstract":"

    Direction East

    "},"Constants.html#/c:@SDLCompassDirectionNortheast":{"name":"SDLCompassDirectionNortheast","abstract":"

    Direction Northeast

    "},"Constants.html#/c:@SDLComponentVolumeStatusUnknown":{"name":"SDLComponentVolumeStatusUnknown","abstract":"

    Unknown SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusNormal":{"name":"SDLComponentVolumeStatusNormal","abstract":"

    Normal SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusLow":{"name":"SDLComponentVolumeStatusLow","abstract":"

    Low SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusFault":{"name":"SDLComponentVolumeStatusFault","abstract":"

    Fault SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusAlert":{"name":"SDLComponentVolumeStatusAlert","abstract":"

    Alert SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusNotSupported":{"name":"SDLComponentVolumeStatusNotSupported","abstract":"

    Not supported SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLDefrostZoneFront":{"name":"SDLDefrostZoneFront","abstract":"

    A SDLDefrostZone with the value of FRONT

    "},"Constants.html#/c:@SDLDefrostZoneRear":{"name":"SDLDefrostZoneRear","abstract":"

    A SDLDefrostZone with the value of REAR

    "},"Constants.html#/c:@SDLDefrostZoneAll":{"name":"SDLDefrostZoneAll","abstract":"

    A SDLDefrostZone with the value of All

    "},"Constants.html#/c:@SDLDefrostZoneNone":{"name":"SDLDefrostZoneNone","abstract":"

    A SDLDefrostZone with the value of None

    "},"Constants.html#/c:@SDLDeliveryModePrompt":{"name":"SDLDeliveryModePrompt","abstract":"

    User is prompted on HMI

    "},"Constants.html#/c:@SDLDeliveryModeDestination":{"name":"SDLDeliveryModeDestination","abstract":"

    Set the location as destination without prompting the user

    "},"Constants.html#/c:@SDLDeliveryModeQueue":{"name":"SDLDeliveryModeQueue","abstract":"

    Adds the current location to navigation queue

    "},"Constants.html#/c:@SDLDeviceLevelStatusZeroBars":{"name":"SDLDeviceLevelStatusZeroBars","abstract":"

    Device battery level is zero bars

    "},"Constants.html#/c:@SDLDeviceLevelStatusOneBar":{"name":"SDLDeviceLevelStatusOneBar","abstract":"

    Device battery level is one bar

    "},"Constants.html#/c:@SDLDeviceLevelStatusTwoBars":{"name":"SDLDeviceLevelStatusTwoBars","abstract":"

    Device battery level is two bars

    "},"Constants.html#/c:@SDLDeviceLevelStatusThreeBars":{"name":"SDLDeviceLevelStatusThreeBars","abstract":"

    Device battery level is three bars

    "},"Constants.html#/c:@SDLDeviceLevelStatusFourBars":{"name":"SDLDeviceLevelStatusFourBars","abstract":"

    Device battery level is four bars

    "},"Constants.html#/c:@SDLDeviceLevelStatusNotProvided":{"name":"SDLDeviceLevelStatusNotProvided","abstract":"

    Device battery level is unknown

    "},"Constants.html#/c:@SDLDimensionNoFix":{"name":"SDLDimensionNoFix","abstract":"

    No GPS at all

    "},"Constants.html#/c:@SDLDimension2D":{"name":"SDLDimension2D","abstract":"

    Longitude and latitude of the GPS

    "},"Constants.html#/c:@SDLDimension3D":{"name":"SDLDimension3D","abstract":"

    Longitude and latitude and altitude of the GPS

    "},"Constants.html#/c:@SDLDirectionLeft":{"name":"SDLDirectionLeft","abstract":"

    Direction left

    "},"Constants.html#/c:@SDLDirectionRight":{"name":"SDLDirectionRight","abstract":"

    Direction right

    "},"Constants.html#/c:@SDLDisplayModeDay":{"name":"SDLDisplayModeDay","abstract":"

    @abstract Display Mode : DAY

    "},"Constants.html#/c:@SDLDisplayModeNight":{"name":"SDLDisplayModeNight","abstract":"

    @abstract Display Mode : NIGHT.

    "},"Constants.html#/c:@SDLDisplayModeAuto":{"name":"SDLDisplayModeAuto","abstract":"

    @abstract Display Mode : AUTO.

    "},"Constants.html#/c:@SDLDisplayTypeCID":{"name":"SDLDisplayTypeCID","abstract":"

    This display type provides a 2-line x 20 character “dot matrix” display.

    "},"Constants.html#/c:@SDLDisplayTypeType2":{"name":"SDLDisplayTypeType2","abstract":"

    Display type 2

    "},"Constants.html#/c:@SDLDisplayTypeType5":{"name":"SDLDisplayTypeType5","abstract":"

    Display type 5

    "},"Constants.html#/c:@SDLDisplayTypeNGN":{"name":"SDLDisplayTypeNGN","abstract":"

    This display type provides an 8 inch touchscreen display.

    "},"Constants.html#/c:@SDLDisplayTypeGen28DMA":{"name":"SDLDisplayTypeGen28DMA","abstract":"

    Display type Gen 28 DMA

    "},"Constants.html#/c:@SDLDisplayTypeGen26DMA":{"name":"SDLDisplayTypeGen26DMA","abstract":"

    Display type Gen 26 DMA

    "},"Constants.html#/c:@SDLDisplayTypeMFD3":{"name":"SDLDisplayTypeMFD3","abstract":"

    Display type MFD3

    "},"Constants.html#/c:@SDLDisplayTypeMFD4":{"name":"SDLDisplayTypeMFD4","abstract":"

    Display type MFD4

    "},"Constants.html#/c:@SDLDisplayTypeMFD5":{"name":"SDLDisplayTypeMFD5","abstract":"

    Display type MFD5

    "},"Constants.html#/c:@SDLDisplayTypeGen38Inch":{"name":"SDLDisplayTypeGen38Inch","abstract":"

    Display type Gen 3 8-inch

    "},"Constants.html#/c:@SDLDisplayTypeGeneric":{"name":"SDLDisplayTypeGeneric","abstract":"

    Display type Generic

    "},"Constants.html#/c:@SDLDistanceUnitMiles":{"name":"SDLDistanceUnitMiles","abstract":"

    @abstract SDLDistanceUnit: MILES

    "},"Constants.html#/c:@SDLDistanceUnitKilometers":{"name":"SDLDistanceUnitKilometers","abstract":"

    @abstract SDLDistanceUnit: KILOMETERS

    "},"Constants.html#/c:@SDLDriverDistractionStateOn":{"name":"SDLDriverDistractionStateOn","abstract":"

    Driver distraction rules are in effect.

    "},"Constants.html#/c:@SDLDriverDistractionStateOff":{"name":"SDLDriverDistractionStateOff","abstract":"

    Driver distraction rules are NOT in effect.

    "},"Constants.html#/c:@SDLECallConfirmationStatusNormal":{"name":"SDLECallConfirmationStatusNormal","abstract":"

    No E-Call signal triggered.

    "},"Constants.html#/c:@SDLECallConfirmationStatusInProgress":{"name":"SDLECallConfirmationStatusInProgress","abstract":"

    An E-Call is being in progress.

    "},"Constants.html#/c:@SDLECallConfirmationStatusCancelled":{"name":"SDLECallConfirmationStatusCancelled","abstract":"

    An E-Call was cancelled by the user.

    "},"Constants.html#/c:@SDLECallConfirmationStatusCompleted":{"name":"SDLECallConfirmationStatusCompleted","abstract":"

    The E-Call sequence is completed.

    "},"Constants.html#/c:@SDLECallConfirmationStatusUnsuccessful":{"name":"SDLECallConfirmationStatusUnsuccessful","abstract":"

    An E-Call could not be connected.

    "},"Constants.html#/c:@SDLECallConfirmationStatusConfiguredOff":{"name":"SDLECallConfirmationStatusConfiguredOff","abstract":"

    E-Call is not configured on this vehicle.

    "},"Constants.html#/c:@SDLECallConfirmationStatusCompleteDTMFTimeout":{"name":"SDLECallConfirmationStatusCompleteDTMFTimeout","abstract":"

    E-Call is considered to be complete without Emergency Operator contact.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusClosed":{"name":"SDLElectronicParkBrakeStatusClosed","abstract":"

    Parking brake actuators have been fully applied.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusTransition":{"name":"SDLElectronicParkBrakeStatusTransition","abstract":"

    Parking brake actuators are transitioning to either Apply/Closed or Release/Open state.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusOpen":{"name":"SDLElectronicParkBrakeStatusOpen","abstract":"

    Parking brake actuators are released.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusDriveActive":{"name":"SDLElectronicParkBrakeStatusDriveActive","abstract":"

    When driver pulls the Electronic Parking Brake switch while driving “at speed”.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusFault":{"name":"SDLElectronicParkBrakeStatusFault","abstract":"

    When system has a fault or is under maintenance.

    "},"Constants.html#/c:@SDLEmergencyEventTypeNoEvent":{"name":"SDLEmergencyEventTypeNoEvent","abstract":"

    No emergency event has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeFrontal":{"name":"SDLEmergencyEventTypeFrontal","abstract":"

    Frontal collision has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeSide":{"name":"SDLEmergencyEventTypeSide","abstract":"

    Side collision has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeRear":{"name":"SDLEmergencyEventTypeRear","abstract":"

    Rear collision has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeRollover":{"name":"SDLEmergencyEventTypeRollover","abstract":"

    A rollover event has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeNotSupported":{"name":"SDLEmergencyEventTypeNotSupported","abstract":"

    The signal is not supported

    "},"Constants.html#/c:@SDLEmergencyEventTypeFault":{"name":"SDLEmergencyEventTypeFault","abstract":"

    Emergency status cannot be determined

    "},"Constants.html#/c:@SDLFileTypeBMP":{"name":"SDLFileTypeBMP","abstract":"

    file type: Bitmap (BMP)

    "},"Constants.html#/c:@SDLFileTypeJPEG":{"name":"SDLFileTypeJPEG","abstract":"

    file type: JPEG

    "},"Constants.html#/c:@SDLFileTypePNG":{"name":"SDLFileTypePNG","abstract":"

    file type: PNG

    "},"Constants.html#/c:@SDLFileTypeWAV":{"name":"SDLFileTypeWAV","abstract":"

    file type: WAVE (WAV)

    "},"Constants.html#/c:@SDLFileTypeMP3":{"name":"SDLFileTypeMP3","abstract":"

    file type: MP3

    "},"Constants.html#/c:@SDLFileTypeAAC":{"name":"SDLFileTypeAAC","abstract":"

    file type: AAC

    "},"Constants.html#/c:@SDLFileTypeBinary":{"name":"SDLFileTypeBinary","abstract":"

    file type: BINARY

    "},"Constants.html#/c:@SDLFileTypeJSON":{"name":"SDLFileTypeJSON","abstract":"

    file type: JSON

    "},"Constants.html#/c:@SDLFuelCutoffStatusTerminateFuel":{"name":"SDLFuelCutoffStatusTerminateFuel","abstract":"

    Fuel is cut off

    "},"Constants.html#/c:@SDLFuelCutoffStatusNormalOperation":{"name":"SDLFuelCutoffStatusNormalOperation","abstract":"

    Fuel is not cut off

    "},"Constants.html#/c:@SDLFuelCutoffStatusFault":{"name":"SDLFuelCutoffStatusFault","abstract":"

    Status of the fuel pump cannot be determined

    "},"Constants.html#/c:@SDLFuelTypeGasoline":{"name":"SDLFuelTypeGasoline","abstract":"

    Fuel type: Gasoline

    "},"Constants.html#/c:@SDLFuelTypeDiesel":{"name":"SDLFuelTypeDiesel","abstract":"

    Fuel type: Diesel

    "},"Constants.html#/c:@SDLFuelTypeCNG":{"name":"SDLFuelTypeCNG","abstract":"

    Fuel type: CNG

    "},"Constants.html#/c:@SDLFuelTypeLPG":{"name":"SDLFuelTypeLPG","abstract":"

    Fuel type: LPG

    "},"Constants.html#/c:@SDLFuelTypeHydrogen":{"name":"SDLFuelTypeHydrogen","abstract":"

    Fuel type: Hydrogen

    "},"Constants.html#/c:@SDLFuelTypeBattery":{"name":"SDLFuelTypeBattery","abstract":"

    Fuel type: Battery

    "},"Constants.html#/c:@SDLGlobalPropertyHelpPrompt":{"name":"SDLGlobalPropertyHelpPrompt","abstract":"

    The help prompt to be spoken if the user needs assistance during a user-initiated interaction.

    "},"Constants.html#/c:@SDLGlobalPropertyTimeoutPrompt":{"name":"SDLGlobalPropertyTimeoutPrompt","abstract":"

    The prompt to be spoken if the user-initiated interaction times out waiting for the user’s verbal input.

    "},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpTitle":{"name":"SDLGlobalPropertyVoiceRecognitionHelpTitle","abstract":"

    The title of the menu displayed when the user requests help via voice recognition.

    "},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpItems":{"name":"SDLGlobalPropertyVoiceRecognitionHelpItems","abstract":"

    Items of the menu displayed when the user requests help via voice recognition.

    "},"Constants.html#/c:@SDLGlobalPropertyMenuName":{"name":"SDLGlobalPropertyMenuName","abstract":"

    The name of the menu button displayed in templates

    "},"Constants.html#/c:@SDLGlobalPropertyMenuIcon":{"name":"SDLGlobalPropertyMenuIcon","abstract":"

    An icon on the menu button displayed in templates

    "},"Constants.html#/c:@SDLGlobalPropertyKeyboard":{"name":"SDLGlobalPropertyKeyboard","abstract":"

    Property related to the keyboard

    "},"Constants.html#/c:@SDLGlobalPropertyUserLocation":{"name":"SDLGlobalPropertyUserLocation","abstract":"

    Location of the user’s seat of setGlobalProperties

    "},"Constants.html#/c:@SDLHMILevelFull":{"name":"SDLHMILevelFull","abstract":"

    The application has full use of the SDL HMI. The app may output via TTS, display, or streaming audio and may gather input via VR, Menu, and button presses

    "},"Constants.html#/c:@SDLHMILevelLimited":{"name":"SDLHMILevelLimited","abstract":"

    This HMI Level is only defined for a media application using an HMI with an 8 inch touchscreen (Nav) system. The application’s Show text is displayed and it receives button presses from media-oriented buttons (SEEKRIGHT, SEEKLEFT, TUNEUP, TUNEDOWN, PRESET_0-9)

    "},"Constants.html#/c:@SDLHMILevelBackground":{"name":"SDLHMILevelBackground","abstract":"

    App cannot interact with user via TTS, VR, Display or Button Presses. App can perform the following operations:

    "},"Constants.html#/c:@SDLHMILevelNone":{"name":"SDLHMILevelNone","abstract":"

    Application has been discovered by SDL, but it cannot send any requests or receive any notifications

    "},"Constants.html#/c:@SDLHMIZoneCapabilitiesFront":{"name":"SDLHMIZoneCapabilitiesFront","abstract":"

    Indicates HMI available for front seat passengers.

    "},"Constants.html#/c:@SDLHMIZoneCapabilitiesBack":{"name":"SDLHMIZoneCapabilitiesBack","abstract":"

    Indicates HMI available for rear seat passengers.

    "},"Constants.html#/c:@SDLHybridAppPreferenceMobile":{"name":"SDLHybridAppPreferenceMobile","abstract":"

    App preference of mobile.

    "},"Constants.html#/c:@SDLHybridAppPreferenceCloud":{"name":"SDLHybridAppPreferenceCloud","abstract":"

    App preference of cloud.

    "},"Constants.html#/c:@SDLHybridAppPreferenceBoth":{"name":"SDLHybridAppPreferenceBoth","abstract":"

    App preference of both. Allows both the mobile and the cloud versions of the app to attempt to connect at the same time, however the first app that is registered is the one that is allowed to stay registered.

    "},"Constants.html#/c:@SDLIgnitionStableStatusNotStable":{"name":"SDLIgnitionStableStatusNotStable","abstract":"

    The current ignition switch status is considered not to be stable.

    "},"Constants.html#/c:@SDLIgnitionStableStatusStable":{"name":"SDLIgnitionStableStatusStable","abstract":"

    The current ignition switch status is considered to be stable.

    "},"Constants.html#/c:@SDLIgnitionStableStatusMissingFromTransmitter":{"name":"SDLIgnitionStableStatusMissingFromTransmitter","abstract":"

    The current ignition switch status is considered to be missing from the transmitter

    "},"Constants.html#/c:@SDLIgnitionStatusUnknown":{"name":"SDLIgnitionStatusUnknown","abstract":"

    Ignition status currently unknown

    "},"Constants.html#/c:@SDLIgnitionStatusOff":{"name":"SDLIgnitionStatusOff","abstract":"

    Ignition is off

    "},"Constants.html#/c:@SDLIgnitionStatusAccessory":{"name":"SDLIgnitionStatusAccessory","abstract":"

    Ignition is in mode accessory

    "},"Constants.html#/c:@SDLIgnitionStatusRun":{"name":"SDLIgnitionStatusRun","abstract":"

    Ignition is in mode run

    "},"Constants.html#/c:@SDLIgnitionStatusStart":{"name":"SDLIgnitionStatusStart","abstract":"

    Ignition is in mode start

    "},"Constants.html#/c:@SDLIgnitionStatusInvalid":{"name":"SDLIgnitionStatusInvalid","abstract":"

    Signal is invalid

    "},"Constants.html#/c:@SDLImageFieldNameAlertIcon":{"name":"SDLImageFieldNameAlertIcon","abstract":"

    The image field for Alert

    "},"Constants.html#/c:@SDLImageFieldNameSoftButtonImage":{"name":"SDLImageFieldNameSoftButtonImage","abstract":"

    The image field for SoftButton

    "},"Constants.html#/c:@SDLImageFieldNameChoiceImage":{"name":"SDLImageFieldNameChoiceImage","abstract":"

    The first image field for Choice.

    "},"Constants.html#/c:@SDLImageFieldNameChoiceSecondaryImage":{"name":"SDLImageFieldNameChoiceSecondaryImage","abstract":"

    The scondary image field for Choice.

    "},"Constants.html#/c:@SDLImageFieldNameVoiceRecognitionHelpItem":{"name":"SDLImageFieldNameVoiceRecognitionHelpItem","abstract":"

    The image field for vrHelpItem.

    "},"Constants.html#/c:@SDLImageFieldNameTurnIcon":{"name":"SDLImageFieldNameTurnIcon","abstract":"

    The image field for Turn.

    "},"Constants.html#/c:@SDLImageFieldNameMenuIcon":{"name":"SDLImageFieldNameMenuIcon","abstract":"

    The image field for the menu icon in SetGlobalProperties.

    "},"Constants.html#/c:@SDLImageFieldNameCommandIcon":{"name":"SDLImageFieldNameCommandIcon","abstract":"

    The image field for AddCommand."},"Constants.html#/c:@SDLImageFieldNameAppIcon":{"name":"SDLImageFieldNameAppIcon","abstract":"

    The image field for the app icon (set by setAppIcon).

    "},"Constants.html#/c:@SDLImageFieldNameGraphic":{"name":"SDLImageFieldNameGraphic","abstract":"

    The primary image field for Show."},"Constants.html#/c:@SDLImageFieldNameSecondaryGraphic":{"name":"SDLImageFieldNameSecondaryGraphic","abstract":"

    The secondary image field for Show."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTIcon":{"name":"SDLImageFieldNameShowConstantTBTIcon","abstract":"

    The primary image field for ShowConstant TBT."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTNextTurnIcon":{"name":"SDLImageFieldNameShowConstantTBTNextTurnIcon","abstract":"

    The secondary image field for ShowConstant TBT.

    "},"Constants.html#/c:@SDLImageFieldNameLocationImage":{"name":"SDLImageFieldNameLocationImage","abstract":"

    The optional image of a destination / location

    "},"Constants.html#/c:@SDLImageTypeStatic":{"name":"SDLImageTypeStatic","abstract":"

    Activate an icon that shipped with the IVI system by passing a hex value.

    "},"Constants.html#/c:@SDLImageTypeDynamic":{"name":"SDLImageTypeDynamic","abstract":"

    An icon referencing an image uploaded by the app (identifier to be sent by SDLPutFile)

    "},"Constants.html#/c:@SDLInteractionModeManualOnly":{"name":"SDLInteractionModeManualOnly","abstract":"

    Interaction Mode : Manual Only

    "},"Constants.html#/c:@SDLInteractionModeVoiceRecognitionOnly":{"name":"SDLInteractionModeVoiceRecognitionOnly","abstract":"

    Interaction Mode : VR Only

    "},"Constants.html#/c:@SDLInteractionModeBoth":{"name":"SDLInteractionModeBoth","abstract":"

    Interaction Mode : Manual & VR

    "},"Constants.html#/c:@SDLKeyboardEventKeypress":{"name":"SDLKeyboardEventKeypress","abstract":"

    The use has pressed the keyboard key (applies to both SINGLE_KEYPRESS and RESEND_CURRENT_ENTRY modes).

    "},"Constants.html#/c:@SDLKeyboardEventSubmitted":{"name":"SDLKeyboardEventSubmitted","abstract":"

    The User has finished entering text from the keyboard and submitted the entry.

    "},"Constants.html#/c:@SDLKeyboardEventCancelled":{"name":"SDLKeyboardEventCancelled","abstract":"

    The User has pressed the HMI-defined “Cancel” button.

    "},"Constants.html#/c:@SDLKeyboardEventAborted":{"name":"SDLKeyboardEventAborted","abstract":"

    The User has not finished entering text and the keyboard is aborted with the event of higher priority.

    "},"Constants.html#/c:@SDLKeyboardEventVoice":{"name":"SDLKeyboardEventVoice","abstract":"

    The user used voice as input for the keyboard

    "},"Constants.html#/c:@SDLKeyboardLayoutQWERTY":{"name":"SDLKeyboardLayoutQWERTY","abstract":"

    QWERTY layout (the name comes from the first six keys
    appearing on the top left letter row of the keyboard and read from left to right)

    "},"Constants.html#/c:@SDLKeyboardLayoutQWERTZ":{"name":"SDLKeyboardLayoutQWERTZ","abstract":"

    QWERTZ layout (the name comes from the first six keys
    appearing on the top left letter row of the keyboard and read from left to right)

    "},"Constants.html#/c:@SDLKeyboardLayoutAZERTY":{"name":"SDLKeyboardLayoutAZERTY","abstract":"

    AZERTY layout (the name comes from the first six keys
    appearing on the top left letter row of the keyboard and read from left to right)

    "},"Constants.html#/c:@SDLKeypressModeSingleKeypress":{"name":"SDLKeypressModeSingleKeypress","abstract":"

    SINGLE_KEYPRESS:
    Each and every User`s keypress must be reported (new notification for every newly entered single symbol).

    "},"Constants.html#/c:@SDLKeypressModeQueueKeypresses":{"name":"SDLKeypressModeQueueKeypresses","abstract":"

    QUEUE_KEYPRESSES:
    The whole entry is reported only after the User submits it (by ‘Search’ button click displayed on touchscreen keyboard)

    "},"Constants.html#/c:@SDLKeypressModeResendCurrentEntry":{"name":"SDLKeypressModeResendCurrentEntry","abstract":"

    RESEND_CURRENT_ENTRY:
    The whole entry must be reported each and every time the User makes a new keypress
    (new notification with all previously entered symbols and a newly entered one appended).

    "},"Constants.html#/c:@SDLLanguageEnSa":{"name":"SDLLanguageEnSa","abstract":"

    English_SA

    "},"Constants.html#/c:@SDLLanguageHeIl":{"name":"SDLLanguageHeIl","abstract":"

    Hebrew_IL

    "},"Constants.html#/c:@SDLLanguageRoRo":{"name":"SDLLanguageRoRo","abstract":"

    Romainian_RO

    "},"Constants.html#/c:@SDLLanguageUkUa":{"name":"SDLLanguageUkUa","abstract":"

    Ukrainian_UA

    "},"Constants.html#/c:@SDLLanguageIdId":{"name":"SDLLanguageIdId","abstract":"

    Indonesian_ID

    "},"Constants.html#/c:@SDLLanguageViVn":{"name":"SDLLanguageViVn","abstract":"

    Vietnamese_VN

    "},"Constants.html#/c:@SDLLanguageMsMy":{"name":"SDLLanguageMsMy","abstract":"

    Malay_MY

    "},"Constants.html#/c:@SDLLanguageHiIn":{"name":"SDLLanguageHiIn","abstract":"

    Hindi_IN

    "},"Constants.html#/c:@SDLLanguageNlBe":{"name":"SDLLanguageNlBe","abstract":"

    Dutch(Flemish)_BE

    "},"Constants.html#/c:@SDLLanguageElGr":{"name":"SDLLanguageElGr","abstract":"

    Greek_GR

    "},"Constants.html#/c:@SDLLanguageHuHu":{"name":"SDLLanguageHuHu","abstract":"

    Hungarian_HU

    "},"Constants.html#/c:@SDLLanguageFiFi":{"name":"SDLLanguageFiFi","abstract":"

    Finnish_FI

    "},"Constants.html#/c:@SDLLanguageSkSk":{"name":"SDLLanguageSkSk","abstract":"

    Slovak_SK

    "},"Constants.html#/c:@SDLLanguageEnUs":{"name":"SDLLanguageEnUs","abstract":"

    English_US

    "},"Constants.html#/c:@SDLLanguageEnIn":{"name":"SDLLanguageEnIn","abstract":"

    English - India

    "},"Constants.html#/c:@SDLLanguageThTh":{"name":"SDLLanguageThTh","abstract":"

    Thai - Thailand

    "},"Constants.html#/c:@SDLLanguageEsMx":{"name":"SDLLanguageEsMx","abstract":"

    Spanish - Mexico

    "},"Constants.html#/c:@SDLLanguageFrCa":{"name":"SDLLanguageFrCa","abstract":"

    French - Canada

    "},"Constants.html#/c:@SDLLanguageDeDe":{"name":"SDLLanguageDeDe","abstract":"

    German - Germany

    "},"Constants.html#/c:@SDLLanguageEsEs":{"name":"SDLLanguageEsEs","abstract":"

    Spanish - Spain

    "},"Constants.html#/c:@SDLLanguageEnGb":{"name":"SDLLanguageEnGb","abstract":"

    English - Great Britain

    "},"Constants.html#/c:@SDLLanguageRuRu":{"name":"SDLLanguageRuRu","abstract":"

    Russian - Russia

    "},"Constants.html#/c:@SDLLanguageTrTr":{"name":"SDLLanguageTrTr","abstract":"

    Turkish - Turkey

    "},"Constants.html#/c:@SDLLanguagePlPl":{"name":"SDLLanguagePlPl","abstract":"

    Polish - Poland

    "},"Constants.html#/c:@SDLLanguageFrFr":{"name":"SDLLanguageFrFr","abstract":"

    French - France

    "},"Constants.html#/c:@SDLLanguageItIt":{"name":"SDLLanguageItIt","abstract":"

    Italian - Italy

    "},"Constants.html#/c:@SDLLanguageSvSe":{"name":"SDLLanguageSvSe","abstract":"

    Swedish - Sweden

    "},"Constants.html#/c:@SDLLanguagePtPt":{"name":"SDLLanguagePtPt","abstract":"

    Portuguese - Portugal

    "},"Constants.html#/c:@SDLLanguageNlNl":{"name":"SDLLanguageNlNl","abstract":"

    Dutch (Standard) - Netherlands

    "},"Constants.html#/c:@SDLLanguageEnAu":{"name":"SDLLanguageEnAu","abstract":"

    English - Australia

    "},"Constants.html#/c:@SDLLanguageZhCn":{"name":"SDLLanguageZhCn","abstract":"

    Mandarin - China

    "},"Constants.html#/c:@SDLLanguageZhTw":{"name":"SDLLanguageZhTw","abstract":"

    Mandarin - Taiwan

    "},"Constants.html#/c:@SDLLanguageJaJp":{"name":"SDLLanguageJaJp","abstract":"

    Japanese - Japan

    "},"Constants.html#/c:@SDLLanguageArSa":{"name":"SDLLanguageArSa","abstract":"

    Arabic - Saudi Arabia

    "},"Constants.html#/c:@SDLLanguageKoKr":{"name":"SDLLanguageKoKr","abstract":"

    Korean - South Korea

    "},"Constants.html#/c:@SDLLanguagePtBr":{"name":"SDLLanguagePtBr","abstract":"

    Portuguese - Brazil

    "},"Constants.html#/c:@SDLLanguageCsCz":{"name":"SDLLanguageCsCz","abstract":"

    Czech - Czech Republic

    "},"Constants.html#/c:@SDLLanguageDaDk":{"name":"SDLLanguageDaDk","abstract":"

    Danish - Denmark

    "},"Constants.html#/c:@SDLLanguageNoNo":{"name":"SDLLanguageNoNo","abstract":"

    Norwegian - Norway

    "},"Constants.html#/c:@SDLLayoutModeIconOnly":{"name":"SDLLayoutModeIconOnly","abstract":"

    This mode causes the interaction to display the previous set of choices as icons.

    "},"Constants.html#/c:@SDLLayoutModeIconWithSearch":{"name":"SDLLayoutModeIconWithSearch","abstract":"

    This mode causes the interaction to display the previous set of choices as icons along with a search field in the HMI.

    "},"Constants.html#/c:@SDLLayoutModeListOnly":{"name":"SDLLayoutModeListOnly","abstract":"

    This mode causes the interaction to display the previous set of choices as a list.

    "},"Constants.html#/c:@SDLLayoutModeListWithSearch":{"name":"SDLLayoutModeListWithSearch","abstract":"

    This mode causes the interaction to display the previous set of choices as a list along with a search field in the HMI.

    "},"Constants.html#/c:@SDLLayoutModeKeyboard":{"name":"SDLLayoutModeKeyboard","abstract":"

    This mode causes the interaction to immediately display a keyboard entry through the HMI.

    "},"Constants.html#/c:@SDLLightNameFrontLeftHighBeam":{"name":"SDLLightNameFrontLeftHighBeam","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_HIGH_BEAM.

    "},"Constants.html#/c:@SDLLightNameFrontRightHighBeam":{"name":"SDLLightNameFrontRightHighBeam","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_HIGH_BEAM.

    "},"Constants.html#/c:@SDLLightNameFrontLeftLowBeam":{"name":"SDLLightNameFrontLeftLowBeam","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_LOW_BEAM.

    "},"Constants.html#/c:@SDLLightNameFrontRightLowBeam":{"name":"SDLLightNameFrontRightLowBeam","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_LOW_BEAM.

    "},"Constants.html#/c:@SDLLightNameFrontLeftParkingLight":{"name":"SDLLightNameFrontLeftParkingLight","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_PARKING_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontRightParkingLight":{"name":"SDLLightNameFrontRightParkingLight","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_PARKING_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontLeftFogLight":{"name":"SDLLightNameFrontLeftFogLight","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_FOG_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontRightFogLight":{"name":"SDLLightNameFrontRightFogLight","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_FOG_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontLeftDaytimeRunningLight":{"name":"SDLLightNameFrontLeftDaytimeRunningLight","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_DAYTIME_RUNNING_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontRightDaytimeRunningLight":{"name":"SDLLightNameFrontRightDaytimeRunningLight","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_DAYTIME_RUNNING_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontLeftTurnLight":{"name":"SDLLightNameFrontLeftTurnLight","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_TURN_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontRightTurnLight":{"name":"SDLLightNameFrontRightTurnLight","abstract":"

    @abstract Represents the Light with name FRONT_Right_TURN_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearLeftFogLight":{"name":"SDLLightNameRearLeftFogLight","abstract":"

    @abstract Represents the Light with name REAR_LEFT_FOG_LIGHT.

    "},"Constants.html#/c:@SDLLightNameRearRightFogLight":{"name":"SDLLightNameRearRightFogLight","abstract":"

    @abstract Represents the Light with name REAR_RIGHT_FOG_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearLeftTailLight":{"name":"SDLLightNameRearLeftTailLight","abstract":"

    @abstract Represents the Light with name REAR_LEFT_TAIL_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearRightTailLight":{"name":"SDLLightNameRearRightTailLight","abstract":"

    @abstract Represents the Light with name REAR_RIGHT_TAIL_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearLeftBrakeLight":{"name":"SDLLightNameRearLeftBrakeLight","abstract":"

    @abstract Represents the Light with name REAR_LEFT_BRAKE_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearRightBrakeLight":{"name":"SDLLightNameRearRightBrakeLight","abstract":"

    @abstract Represents the Light with name REAR_RIGHT_BRAKE_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearLeftTurnLight":{"name":"SDLLightNameRearLeftTurnLight","abstract":"

    @abstract Represents the Light with name REAR_LEFT_TURN_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearRightTurnLight":{"name":"SDLLightNameRearRightTurnLight","abstract":"

    @abstract Represents the Light with name REAR_RIGHT_TURN_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearRegistrationPlateLight":{"name":"SDLLightNameRearRegistrationPlateLight","abstract":"

    @abstract Represents the Light with name REAR_REGISTRATION_PLATE_LIGHT

    "},"Constants.html#/c:@SDLLightNameHighBeams":{"name":"SDLLightNameHighBeams","abstract":"

    @abstract Include all high beam lights: front_left and front_right.

    "},"Constants.html#/c:@SDLLightNameLowBeams":{"name":"SDLLightNameLowBeams","abstract":"

    @abstract Include all low beam lights: front_left and front_right.

    "},"Constants.html#/c:@SDLLightNameFogLights":{"name":"SDLLightNameFogLights","abstract":"

    @abstract Include all fog lights: front_left, front_right, rear_left and rear_right.

    "},"Constants.html#/c:@SDLLightNameRunningLights":{"name":"SDLLightNameRunningLights","abstract":"

    @abstract Include all daytime running lights: front_left and front_right.

    "},"Constants.html#/c:@SDLLightNameParkingLights":{"name":"SDLLightNameParkingLights","abstract":"

    @abstract Include all parking lights: front_left and front_right.

    "},"Constants.html#/c:@SDLLightNameBrakeLights":{"name":"SDLLightNameBrakeLights","abstract":"

    @abstract Include all brake lights: rear_left and rear_right.

    "},"Constants.html#/c:@SDLLightNameRearReversingLights":{"name":"SDLLightNameRearReversingLights","abstract":"

    @abstract Represents the Light with name REAR_REVERSING_LIGHTS

    "},"Constants.html#/c:@SDLLightNameSideMarkerLights":{"name":"SDLLightNameSideMarkerLights","abstract":"

    @abstract Represents the Light with name SIDE_MARKER_LIGHTS

    "},"Constants.html#/c:@SDLLightNameLeftTurnLights":{"name":"SDLLightNameLeftTurnLights","abstract":"

    @abstract Include all left turn signal lights: front_left, rear_left, left_side and mirror_mounted.

    "},"Constants.html#/c:@SDLLightNameRightTurnLights":{"name":"SDLLightNameRightTurnLights","abstract":"

    @abstract Include all right turn signal lights: front_right, rear_right, right_side and mirror_mounted.

    "},"Constants.html#/c:@SDLLightNameHazardLights":{"name":"SDLLightNameHazardLights","abstract":"

    @abstract Include all hazard lights: front_left, front_right, rear_left and rear_right.

    "},"Constants.html#/c:@SDLLightNameAmbientLights":{"name":"SDLLightNameAmbientLights","abstract":"

    @abstract Represents the Light with name AMBIENT_LIGHTS

    "},"Constants.html#/c:@SDLLightNameOverHeadLights":{"name":"SDLLightNameOverHeadLights","abstract":"

    @abstract Represents the Light with name OVERHEAD_LIGHTS

    "},"Constants.html#/c:@SDLLightNameReadingLights":{"name":"SDLLightNameReadingLights","abstract":"

    @abstract Represents the Light with name READING_LIGHTS

    "},"Constants.html#/c:@SDLLightNameTrunkLights":{"name":"SDLLightNameTrunkLights","abstract":"

    @abstract Represents the Light with name TRUNK_LIGHTS

    "},"Constants.html#/c:@SDLLightNameExteriorFrontLights":{"name":"SDLLightNameExteriorFrontLights","abstract":"

    @abstract Include exterior lights located in front of the vehicle. For example, fog lights and low beams.

    "},"Constants.html#/c:@SDLLightNameExteriorRearLights":{"name":"SDLLightNameExteriorRearLights","abstract":"

    @abstract Include exterior lights located at the back of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorLeftLights":{"name":"SDLLightNameExteriorLeftLights","abstract":"

    @abstract Include exterior lights located at the left side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRightLights":{"name":"SDLLightNameExteriorRightLights","abstract":"

    @abstract Include exterior lights located at the right side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRearCargoLights":{"name":"SDLLightNameExteriorRearCargoLights","abstract":"

    @abstract Cargo lamps illuminate the cargo area.

    "},"Constants.html#/c:@SDLLightNameExteriorRearTruckBedLights":{"name":"SDLLightNameExteriorRearTruckBedLights","abstract":"

    @abstract Truck bed lamps light up the bed of the truck.

    "},"Constants.html#/c:@SDLLightNameExteriorRearTrailerLights":{"name":"SDLLightNameExteriorRearTrailerLights","abstract":"

    @abstract Trailer lights are lamps mounted on a trailer hitch.

    "},"Constants.html#/c:@SDLLightNameExteriorLeftSpotLights":{"name":"SDLLightNameExteriorLeftSpotLights","abstract":"

    @abstract It is the spotlights mounted on the left side of a vehicle.

    "},"Constants.html#/c:@SDLLightNameExteriorRightSpotLights":{"name":"SDLLightNameExteriorRightSpotLights","abstract":"

    @abstract It is the spotlights mounted on the right side of a vehicle.

    "},"Constants.html#/c:@SDLLightNameExteriorLeftPuddleLights":{"name":"SDLLightNameExteriorLeftPuddleLights","abstract":"

    @abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.

    "},"Constants.html#/c:@SDLLightNameExteriorRightPuddleLights":{"name":"SDLLightNameExteriorRightPuddleLights","abstract":"

    @abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.

    "},"Constants.html#/c:@SDLLightNameExteriorAllLights":{"name":"SDLLightNameExteriorAllLights","abstract":"

    @abstract Include all exterior lights around the vehicle.

    "},"Constants.html#/c:@SDLLightStatusOn":{"name":"SDLLightStatusOn","abstract":"

    @abstract Light status currently on.

    "},"Constants.html#/c:@SDLLightStatusOFF":{"name":"SDLLightStatusOFF","abstract":"

    @abstract Light status currently Off.

    "},"Constants.html#/c:@SDLLightStatusRampUp":{"name":"SDLLightStatusRampUp","abstract":"

    @abstract Light status currently RAMP_UP.

    "},"Constants.html#/c:@SDLLightStatusRampDown":{"name":"SDLLightStatusRampDown","abstract":"

    @abstract Light status currently RAMP_DOWN.

    "},"Constants.html#/c:@SDLLightStatusUnknown":{"name":"SDLLightStatusUnknown","abstract":"

    @abstract Light status currently UNKNOWN.

    "},"Constants.html#/c:@SDLLightStatusInvalid":{"name":"SDLLightStatusInvalid","abstract":"

    @abstract Light status currently INVALID.

    "},"Constants.html#/c:@SDLLockScreenStatusOff":{"name":"SDLLockScreenStatusOff","abstract":"

    LockScreen is Not Required

    "},"Constants.html#/c:@SDLLockScreenStatusOptional":{"name":"SDLLockScreenStatusOptional","abstract":"

    LockScreen is Optional

    "},"Constants.html#/c:@SDLLockScreenStatusRequired":{"name":"SDLLockScreenStatusRequired","abstract":"

    LockScreen is Required

    "},"Constants.html#/c:@SDLMaintenanceModeStatusNormal":{"name":"SDLMaintenanceModeStatusNormal","abstract":"

    Maintenance Mode Status : Normal

    "},"Constants.html#/c:@SDLMaintenanceModeStatusNear":{"name":"SDLMaintenanceModeStatusNear","abstract":"

    Maintenance Mode Status : Near

    "},"Constants.html#/c:@SDLMaintenanceModeStatusActive":{"name":"SDLMaintenanceModeStatusActive","abstract":"

    Maintenance Mode Status : Active

    "},"Constants.html#/c:@SDLMaintenanceModeStatusFeatureNotPresent":{"name":"SDLMaintenanceModeStatusFeatureNotPresent","abstract":"

    Maintenance Mode Status : Feature not present

    "},"Constants.html#/c:@SDLMassageCushionTopLumbar":{"name":"SDLMassageCushionTopLumbar","abstract":"

    @abstract TOP LUMBAR cushions of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageCushionMiddleLumbar":{"name":"SDLMassageCushionMiddleLumbar","abstract":"

    @abstract MIDDLE LUMBAR cushion of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageCushionBottomLumbar":{"name":"SDLMassageCushionBottomLumbar","abstract":"

    @abstract BOTTOM LUMBAR cushion of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageCushionBackBolsters":{"name":"SDLMassageCushionBackBolsters","abstract":"

    @abstract BACK BOLSTERS cushion of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageCushionSeatBolsters":{"name":"SDLMassageCushionSeatBolsters","abstract":"

    @abstract SEAT BOLSTERS cushion of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageModeOff":{"name":"SDLMassageModeOff","abstract":"

    @abstract Massage Mode Status : OFF

    "},"Constants.html#/c:@SDLMassageModeLow":{"name":"SDLMassageModeLow","abstract":"

    @abstract Massage Mode Status : LOW

    "},"Constants.html#/c:@SDLMassageModeHigh":{"name":"SDLMassageModeHigh","abstract":"

    @abstract Massage Mode Status : HIGH

    "},"Constants.html#/c:@SDLMassageZoneLumbar":{"name":"SDLMassageZoneLumbar","abstract":"

    @abstract The back of a multi-contour massage seat. or SEAT_BACK

    "},"Constants.html#/c:@SDLMassageZoneSeatCushion":{"name":"SDLMassageZoneSeatCushion","abstract":"

    @abstract The bottom a multi-contour massage seat. or SEAT_BOTTOM

    "},"Constants.html#/c:@SDLMediaClockFormatClock1":{"name":"SDLMediaClockFormatClock1","abstract":"

    Media clock format: Clock1

    "},"Constants.html#/c:@SDLMediaClockFormatClock2":{"name":"SDLMediaClockFormatClock2","abstract":"

    Media clock format: Clock2

    "},"Constants.html#/c:@SDLMediaClockFormatClock3":{"name":"SDLMediaClockFormatClock3","abstract":"

    Media clock format: Clock3

    "},"Constants.html#/c:@SDLMediaClockFormatClockText1":{"name":"SDLMediaClockFormatClockText1","abstract":"

    Media clock format: ClockText1

    "},"Constants.html#/c:@SDLMediaClockFormatClockText2":{"name":"SDLMediaClockFormatClockText2","abstract":"

    Media clock format: ClockText2

    "},"Constants.html#/c:@SDLMediaClockFormatClockText3":{"name":"SDLMediaClockFormatClockText3","abstract":"

    Media clock format: ClockText3

    "},"Constants.html#/c:@SDLMediaClockFormatClockText4":{"name":"SDLMediaClockFormatClockText4","abstract":"

    Media clock format: ClockText4

    "},"Constants.html#/c:@SDLMediaTypeMusic":{"name":"SDLMediaTypeMusic","abstract":"

    The app will have a media type of music.

    "},"Constants.html#/c:@SDLMediaTypePodcast":{"name":"SDLMediaTypePodcast","abstract":"

    The app will have a media type of podcast.

    "},"Constants.html#/c:@SDLMediaTypeAudiobook":{"name":"SDLMediaTypeAudiobook","abstract":"

    The app will have a media type of audiobook.

    "},"Constants.html#/c:@SDLMediaTypeOther":{"name":"SDLMediaTypeOther","abstract":"

    The app will have a media type of other.

    "},"Constants.html#/c:@SDLMenuLayoutList":{"name":"SDLMenuLayoutList","abstract":"

    The menu should be laid out in a scrollable list format with one menu cell below the previous, each is stretched across the view

    "},"Constants.html#/c:@SDLMenuLayoutTiles":{"name":"SDLMenuLayoutTiles","abstract":"

    The menu should be laid out in a scrollable tiles format with each menu cell laid out in a square-ish format next to each other horizontally

    "},"Constants.html#/c:@SDLMetadataTypeMediaTitle":{"name":"SDLMetadataTypeMediaTitle","abstract":"

    The song / media title name

    "},"Constants.html#/c:@SDLMetadataTypeMediaArtist":{"name":"SDLMetadataTypeMediaArtist","abstract":"

    The “artist” of the media

    "},"Constants.html#/c:@SDLMetadataTypeMediaAlbum":{"name":"SDLMetadataTypeMediaAlbum","abstract":"

    The “album” of the media"

    "},"Constants.html#/c:@SDLMetadataTypeMediaYear":{"name":"SDLMetadataTypeMediaYear","abstract":"

    The “year” that the media was created

    "},"Constants.html#/c:@SDLMetadataTypeMediaGenre":{"name":"SDLMetadataTypeMediaGenre","abstract":"

    The “genre” of the media

    "},"Constants.html#/c:@SDLMetadataTypeMediaStation":{"name":"SDLMetadataTypeMediaStation","abstract":"

    The “station” that the media is playing on

    "},"Constants.html#/c:@SDLMetadataTypeRating":{"name":"SDLMetadataTypeRating","abstract":"

    The “rating” given to the media

    "},"Constants.html#/c:@SDLMetadataTypeCurrentTemperature":{"name":"SDLMetadataTypeCurrentTemperature","abstract":"

    The current temperature of the weather information

    "},"Constants.html#/c:@SDLMetadataTypeMaximumTemperature":{"name":"SDLMetadataTypeMaximumTemperature","abstract":"

    The high / maximum temperature of the weather information for the current period

    "},"Constants.html#/c:@SDLMetadataTypeMinimumTemperature":{"name":"SDLMetadataTypeMinimumTemperature","abstract":"

    The low / minimum temperature of the weather information for the current period

    "},"Constants.html#/c:@SDLMetadataTypeWeatherTerm":{"name":"SDLMetadataTypeWeatherTerm","abstract":"

    A description of the weather for the current period

    "},"Constants.html#/c:@SDLMetadataTypeHumidity":{"name":"SDLMetadataTypeHumidity","abstract":"

    The humidity of the weather information for the current period

    "},"Constants.html#/c:@SDLModuleTypeClimate":{"name":"SDLModuleTypeClimate","abstract":"

    A SDLModuleType with the value of CLIMATE

    "},"Constants.html#/c:@SDLModuleTypeRadio":{"name":"SDLModuleTypeRadio","abstract":"

    A SDLModuleType with the value of RADIO

    "},"Constants.html#/c:@SDLModuleTypeSeat":{"name":"SDLModuleTypeSeat","abstract":"

    A SDLModuleType with the value of SEAT

    "},"Constants.html#/c:@SDLModuleTypeAudio":{"name":"SDLModuleTypeAudio","abstract":"

    A SDLModuleType with the value of AUDIO

    "},"Constants.html#/c:@SDLModuleTypeLight":{"name":"SDLModuleTypeLight","abstract":"

    A SDLModuleType with the value of LIGHT

    "},"Constants.html#/c:@SDLModuleTypeHMISettings":{"name":"SDLModuleTypeHMISettings","abstract":"

    A SDLModuleType with the value of HMI_SETTINGS

    "},"Constants.html#/c:@SDLNavigationActionTurn":{"name":"SDLNavigationActionTurn","abstract":"

    Using this action plus a supplied direction can give the type of turn.

    "},"Constants.html#/c:@SDLNavigationActionExit":{"name":"SDLNavigationActionExit","abstract":"

    A navigation action of exit.

    "},"Constants.html#/c:@SDLNavigationActionStay":{"name":"SDLNavigationActionStay","abstract":"

    A navigation action of stay.

    "},"Constants.html#/c:@SDLNavigationActionMerge":{"name":"SDLNavigationActionMerge","abstract":"

    A navigation action of merge.

    "},"Constants.html#/c:@SDLNavigationActionFerry":{"name":"SDLNavigationActionFerry","abstract":"

    A navigation action of ferry.

    "},"Constants.html#/c:@SDLNavigationActionCarShuttleTrain":{"name":"SDLNavigationActionCarShuttleTrain","abstract":"

    A navigation action of car shuttle train.

    "},"Constants.html#/c:@SDLNavigationActionWaypoint":{"name":"SDLNavigationActionWaypoint","abstract":"

    A navigation action of waypoint.

    "},"Constants.html#/c:@SDLNavigationJunctionRegular":{"name":"SDLNavigationJunctionRegular","abstract":"

    A junction that represents a standard intersection with a single road crossing another.

    "},"Constants.html#/c:@SDLNavigationJunctionBifurcation":{"name":"SDLNavigationJunctionBifurcation","abstract":"

    A junction where the road splits off into two paths; a fork in the road.

    "},"Constants.html#/c:@SDLNavigationJunctionMultiCarriageway":{"name":"SDLNavigationJunctionMultiCarriageway","abstract":"

    A junction that has multiple intersections and paths.

    "},"Constants.html#/c:@SDLNavigationJunctionRoundabout":{"name":"SDLNavigationJunctionRoundabout","abstract":"

    A junction where traffic moves in a single direction around a central, non-traversable point to reach one of the connecting roads.

    "},"Constants.html#/c:@SDLNavigationJunctionTraversableRoundabout":{"name":"SDLNavigationJunctionTraversableRoundabout","abstract":"

    Similar to a roundabout, however the center of the roundabout is fully traversable. Also known as a mini-roundabout.

    "},"Constants.html#/c:@SDLNavigationJunctionJughandle":{"name":"SDLNavigationJunctionJughandle","abstract":"

    A junction where lefts diverge to the right, then curve to the left, converting a left turn to a crossing maneuver.

    "},"Constants.html#/c:@SDLNavigationJunctionAllWayYield":{"name":"SDLNavigationJunctionAllWayYield","abstract":"

    Multiple way intersection that allows traffic to flow based on priority; most commonly right of way and first in, first out.

    "},"Constants.html#/c:@SDLNavigationJunctionTurnAround":{"name":"SDLNavigationJunctionTurnAround","abstract":"

    A junction designated for traffic turn arounds.

    "},"Constants.html#/c:@SDLNotificationUserInfoObject":{"name":"SDLNotificationUserInfoObject","abstract":"

    The key used in all SDL NSNotifications to extract the response or notification from the userinfo dictionary.

    "},"Constants.html#/c:@SDLTransportDidDisconnect":{"name":"SDLTransportDidDisconnect","abstract":"

    Name for a disconnection notification

    "},"Constants.html#/c:@SDLTransportDidConnect":{"name":"SDLTransportDidConnect","abstract":"

    Name for a connection notification

    "},"Constants.html#/c:@SDLTransportConnectError":{"name":"SDLTransportConnectError","abstract":"

    Name for a error during connection notification

    "},"Constants.html#/c:@SDLDidReceiveError":{"name":"SDLDidReceiveError","abstract":"

    Name for a general error notification

    "},"Constants.html#/c:@SDLDidReceiveLockScreenIcon":{"name":"SDLDidReceiveLockScreenIcon","abstract":"

    Name for an incoming lock screen icon notification

    "},"Constants.html#/c:@SDLDidBecomeReady":{"name":"SDLDidBecomeReady","abstract":"

    Name for an SDL became ready notification

    "},"Constants.html#/c:@SDLDidUpdateProjectionView":{"name":"SDLDidUpdateProjectionView","abstract":"

    Name for a notification sent by the user when their CarWindow view has been updated

    "},"Constants.html#/c:@SDLDidReceiveAddCommandResponse":{"name":"SDLDidReceiveAddCommandResponse","abstract":"

    Name for an AddCommand response RPC

    "},"Constants.html#/c:@SDLDidReceiveAddSubMenuResponse":{"name":"SDLDidReceiveAddSubMenuResponse","abstract":"

    Name for an AddSubMenu response RPC

    "},"Constants.html#/c:@SDLDidReceiveAlertResponse":{"name":"SDLDidReceiveAlertResponse","abstract":"

    Name for an Alert response RPC

    "},"Constants.html#/c:@SDLDidReceiveAlertManeuverResponse":{"name":"SDLDidReceiveAlertManeuverResponse","abstract":"

    Name for an AlertManeuver response RPC

    "},"Constants.html#/c:@SDLDidReceiveButtonPressResponse":{"name":"SDLDidReceiveButtonPressResponse","abstract":"

    Name for an ButtonPress response RPC

    "},"Constants.html#/c:@SDLDidReceiveCancelInteractionResponse":{"name":"SDLDidReceiveCancelInteractionResponse","abstract":"

    Name for aa CancelInteraction response RPC

    "},"Constants.html#/c:@SDLDidReceiveChangeRegistrationResponse":{"name":"SDLDidReceiveChangeRegistrationResponse","abstract":"

    Name for a ChangeRegistration response RPC

    "},"Constants.html#/c:@SDLDidReceiveCloseApplicationResponse":{"name":"SDLDidReceiveCloseApplicationResponse","abstract":"

    Name for a CloseApplication response RPC

    "},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetResponse":{"name":"SDLDidReceiveCreateInteractionChoiceSetResponse","abstract":"

    Name for a CreateInteractionChoiceSet response RPC

    "},"Constants.html#/c:@SDLDidReceiveCreateWindowResponse":{"name":"SDLDidReceiveCreateWindowResponse","abstract":"

    Name for a CreateWindow response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteCommandResponse":{"name":"SDLDidReceiveDeleteCommandResponse","abstract":"

    Name for a DeleteCommand response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteFileResponse":{"name":"SDLDidReceiveDeleteFileResponse","abstract":"

    Name for a DeleteFile response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetResponse":{"name":"SDLDidReceiveDeleteInteractionChoiceSetResponse","abstract":"

    Name for a DeleteInteractionChoiceSet response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteSubmenuResponse":{"name":"SDLDidReceiveDeleteSubmenuResponse","abstract":"

    Name for a DeleteSubmenu response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteWindowResponse":{"name":"SDLDidReceiveDeleteWindowResponse","abstract":"

    Name for a DeleteWindow response RPC

    "},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageResponse":{"name":"SDLDidReceiveDiagnosticMessageResponse","abstract":"

    Name for a DiagnosticMessage response RPC

    "},"Constants.html#/c:@SDLDidReceiveDialNumberResponse":{"name":"SDLDidReceiveDialNumberResponse","abstract":"

    Name for a DialNumber response RPC

    "},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataResponse":{"name":"SDLDidReceiveEncodedSyncPDataResponse","abstract":"

    Name for an EncodedSyncPData response RPC

    "},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruResponse":{"name":"SDLDidReceiveEndAudioPassThruResponse","abstract":"

    Name for an EndAudioPassThru response RPC

    "},"Constants.html#/c:@SDLDidReceiveGenericResponse":{"name":"SDLDidReceiveGenericResponse","abstract":"

    Name for a Generic response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetCloudAppPropertiesResponse":{"name":"SDLDidReceiveGetCloudAppPropertiesResponse","abstract":"

    Name for a GetCloudAppProperties response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetAppServiceDataResponse":{"name":"SDLDidReceiveGetAppServiceDataResponse","abstract":"

    Name for a GetAppServiceData response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetDTCsResponse":{"name":"SDLDidReceiveGetDTCsResponse","abstract":"

    Name for a GetDTCs response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetFileResponse":{"name":"SDLDidReceiveGetFileResponse","abstract":"

    Name for a GetFile response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataResponse","abstract":"

    Name for a GetInteriorVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataConsentResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataConsentResponse","abstract":"

    Name for a GetInteriorVehicleDataConsent response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilitiesResponse":{"name":"SDLDidReceiveGetSystemCapabilitiesResponse","abstract":"

    Name for a GetSystemCapabilities response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetVehicleDataResponse":{"name":"SDLDidReceiveGetVehicleDataResponse","abstract":"

    Name for a GetVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetWaypointsResponse":{"name":"SDLDidReceiveGetWaypointsResponse","abstract":"

    Name for a GetWaypoints response RPC

    "},"Constants.html#/c:@SDLDidReceiveListFilesResponse":{"name":"SDLDidReceiveListFilesResponse","abstract":"

    Name for a ListFiles response RPC

    "},"Constants.html#/c:@SDLDidReceivePerformAppServiceInteractionResponse":{"name":"SDLDidReceivePerformAppServiceInteractionResponse","abstract":"

    Name for a PerformAppServiceInteraction response RPC

    "},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruResponse":{"name":"SDLDidReceivePerformAudioPassThruResponse","abstract":"

    Name for a PerformAudioPassThru response RPC

    "},"Constants.html#/c:@SDLDidReceivePerformInteractionResponse":{"name":"SDLDidReceivePerformInteractionResponse","abstract":"

    Name for a PerformInteraction response RPC

    "},"Constants.html#/c:@SDLDidReceivePublishAppServiceResponse":{"name":"SDLDidReceivePublishAppServiceResponse","abstract":"

    Name for a PublishAppService response RPC

    "},"Constants.html#/c:@SDLDidReceivePutFileResponse":{"name":"SDLDidReceivePutFileResponse","abstract":"

    Name for a ReceivePutFile response RPC

    "},"Constants.html#/c:@SDLDidReceiveReadDIDResponse":{"name":"SDLDidReceiveReadDIDResponse","abstract":"

    Name for a ReceiveReadDID response RPC

    "},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceResponse":{"name":"SDLDidReceiveRegisterAppInterfaceResponse","abstract":"

    Name for a RegisterAppInterface response RPC

    "},"Constants.html#/c:@SDLDidReceiveReleaseInteriorVehicleDataModuleResponse":{"name":"SDLDidReceiveReleaseInteriorVehicleDataModuleResponse","abstract":"

    Name for a ReleaseInteriorVehicleDataModule response RPC

    "},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesResponse":{"name":"SDLDidReceiveResetGlobalPropertiesResponse","abstract":"

    Name for a ResetGlobalProperties response RPC

    "},"Constants.html#/c:@SDLDidReceiveScrollableMessageResponse":{"name":"SDLDidReceiveScrollableMessageResponse","abstract":"

    Name for a ScrollableMessage response RPC

    "},"Constants.html#/c:@SDLDidReceiveSendHapticDataResponse":{"name":"SDLDidReceiveSendHapticDataResponse","abstract":"

    Name for a SendHapticData response RPC

    "},"Constants.html#/c:@SDLDidReceiveSendLocationResponse":{"name":"SDLDidReceiveSendLocationResponse","abstract":"

    Name for a SendLocation response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetAppIconResponse":{"name":"SDLDidReceiveSetAppIconResponse","abstract":"

    Name for a SetAppIcon response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetCloudAppPropertiesResponse":{"name":"SDLDidReceiveSetCloudAppPropertiesResponse","abstract":"

    Name for a SetCloudAppProperties response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutResponse":{"name":"SDLDidReceiveSetDisplayLayoutResponse","abstract":"

    Name for a SetDisplayLayout response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesResponse":{"name":"SDLDidReceiveSetGlobalPropertiesResponse","abstract":"

    Name for a SetGlobalProperties response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataResponse":{"name":"SDLDidReceiveSetInteriorVehicleDataResponse","abstract":"

    Name for a SetInteriorVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerResponse":{"name":"SDLDidReceiveSetMediaClockTimerResponse","abstract":"

    Name for a SetMediaClockTimer response RPC

    "},"Constants.html#/c:@SDLDidReceiveShowConstantTBTResponse":{"name":"SDLDidReceiveShowConstantTBTResponse","abstract":"

    Name for a ShowConstantTBT response RPC

    "},"Constants.html#/c:@SDLDidReceiveShowResponse":{"name":"SDLDidReceiveShowResponse","abstract":"

    Name for a Show response RPC

    "},"Constants.html#/c:@SDLDidReceiveShowAppMenuResponse":{"name":"SDLDidReceiveShowAppMenuResponse","abstract":"

    Name for a ShowAppMenu response RPC

    "},"Constants.html#/c:@SDLDidReceiveSliderResponse":{"name":"SDLDidReceiveSliderResponse","abstract":"

    Name for a Slider response RPC

    "},"Constants.html#/c:@SDLDidReceiveSpeakResponse":{"name":"SDLDidReceiveSpeakResponse","abstract":"

    Name for a Speak response RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeButtonResponse":{"name":"SDLDidReceiveSubscribeButtonResponse","abstract":"

    Name for a SubscribeButton response RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataResponse":{"name":"SDLDidReceiveSubscribeVehicleDataResponse","abstract":"

    Name for a SubscribeVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeWaypointsResponse":{"name":"SDLDidReceiveSubscribeWaypointsResponse","abstract":"

    Name for a SubscribeWaypoints response RPC

    "},"Constants.html#/c:@SDLDidReceiveSyncPDataResponse":{"name":"SDLDidReceiveSyncPDataResponse","abstract":"

    Name for a SyncPData response RPC

    "},"Constants.html#/c:@SDLDidReceiveUpdateTurnListResponse":{"name":"SDLDidReceiveUpdateTurnListResponse","abstract":"

    Name for an UpdateTurnList response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnpublishAppServiceResponse":{"name":"SDLDidReceiveUnpublishAppServiceResponse","abstract":"

    Name for an UnpublishAppService response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceResponse":{"name":"SDLDidReceiveUnregisterAppInterfaceResponse","abstract":"

    Name for an UnregisterAppInterface response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonResponse":{"name":"SDLDidReceiveUnsubscribeButtonResponse","abstract":"

    Name for an UnsubscribeButton response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataResponse":{"name":"SDLDidReceiveUnsubscribeVehicleDataResponse","abstract":"

    Name for an UnsubscribeVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeWaypointsResponse":{"name":"SDLDidReceiveUnsubscribeWaypointsResponse","abstract":"

    Name for an UnsubscribeWaypoints response RPC

    "},"Constants.html#/c:@SDLDidReceiveAddCommandRequest":{"name":"SDLDidReceiveAddCommandRequest","abstract":"

    Name for an AddCommand request RPC

    "},"Constants.html#/c:@SDLDidReceiveAddSubMenuRequest":{"name":"SDLDidReceiveAddSubMenuRequest","abstract":"

    Name for an AddSubMenu request RPC

    "},"Constants.html#/c:@SDLDidReceiveAlertRequest":{"name":"SDLDidReceiveAlertRequest","abstract":"

    Name for an Alert request RPC

    "},"Constants.html#/c:@SDLDidReceiveAlertManeuverRequest":{"name":"SDLDidReceiveAlertManeuverRequest","abstract":"

    Name for an AlertManeuver request RPC

    "},"Constants.html#/c:@SDLDidReceiveButtonPressRequest":{"name":"SDLDidReceiveButtonPressRequest","abstract":"

    Name for a ButtonPress request RPC

    "},"Constants.html#/c:@SDLDidReceiveCancelInteractionRequest":{"name":"SDLDidReceiveCancelInteractionRequest","abstract":"

    Name for a CancelInteraction request RPC

    "},"Constants.html#/c:@SDLDidReceiveChangeRegistrationRequest":{"name":"SDLDidReceiveChangeRegistrationRequest","abstract":"

    Name for a ChangeRegistration request RPC

    "},"Constants.html#/c:@SDLDidReceiveCloseApplicationRequest":{"name":"SDLDidReceiveCloseApplicationRequest","abstract":"

    Name for a CloseApplication request RPC

    "},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetRequest":{"name":"SDLDidReceiveCreateInteractionChoiceSetRequest","abstract":"

    Name for a CreateInteractionChoiceSet request RPC

    "},"Constants.html#/c:@SDLDidReceiveCreateWindowRequest":{"name":"SDLDidReceiveCreateWindowRequest","abstract":"

    Name for a CreateWindow request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteCommandRequest":{"name":"SDLDidReceiveDeleteCommandRequest","abstract":"

    Name for a DeleteCommand request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteFileRequest":{"name":"SDLDidReceiveDeleteFileRequest","abstract":"

    Name for a DeleteFile request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetRequest":{"name":"SDLDidReceiveDeleteInteractionChoiceSetRequest","abstract":"

    Name for a DeleteInteractionChoiceSet request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteSubMenuRequest":{"name":"SDLDidReceiveDeleteSubMenuRequest","abstract":"

    Name for a DeleteSubMenu request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteWindowRequest":{"name":"SDLDidReceiveDeleteWindowRequest","abstract":"

    Name for a DeleteSubMenu request RPC

    "},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageRequest":{"name":"SDLDidReceiveDiagnosticMessageRequest","abstract":"

    Name for a DiagnosticMessage request RPC

    "},"Constants.html#/c:@SDLDidReceiveDialNumberRequest":{"name":"SDLDidReceiveDialNumberRequest","abstract":"

    Name for a DialNumberR request RPC

    "},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataRequest":{"name":"SDLDidReceiveEncodedSyncPDataRequest","abstract":"

    Name for an EncodedSyncPData request RPC

    "},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruRequest":{"name":"SDLDidReceiveEndAudioPassThruRequest","abstract":"

    Name for a EndAudioPass request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetAppServiceDataRequest":{"name":"SDLDidReceiveGetAppServiceDataRequest","abstract":"

    Name for a GetAppServiceData request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetCloudAppPropertiesRequest":{"name":"SDLDidReceiveGetCloudAppPropertiesRequest","abstract":"

    Name for a GetCloudAppProperties request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetDTCsRequest":{"name":"SDLDidReceiveGetDTCsRequest","abstract":"

    Name for a ReceiveGetDTCs request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetFileRequest":{"name":"SDLDidReceiveGetFileRequest","abstract":"

    Name for a GetFile request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataRequest":{"name":"SDLDidReceiveGetInteriorVehicleDataRequest","abstract":"

    Name for a GetInteriorVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataConsentRequest":{"name":"SDLDidReceiveGetInteriorVehicleDataConsentRequest","abstract":"

    Name for a GetInteriorVehicleDataConsent request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilityRequest":{"name":"SDLDidReceiveGetSystemCapabilityRequest","abstract":"

    Name for a GetSystemCapability request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetVehicleDataRequest":{"name":"SDLDidReceiveGetVehicleDataRequest","abstract":"

    Name for a GetVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetWayPointsRequest":{"name":"SDLDidReceiveGetWayPointsRequest","abstract":"

    Name for a GetWayPoints request RPC

    "},"Constants.html#/c:@SDLDidReceiveListFilesRequest":{"name":"SDLDidReceiveListFilesRequest","abstract":"

    Name for a ListFiles request RPC

    "},"Constants.html#/c:@SDLDidReceivePerformAppServiceInteractionRequest":{"name":"SDLDidReceivePerformAppServiceInteractionRequest","abstract":"

    Name for a PerformAppServiceInteraction request RPC

    "},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruRequest":{"name":"SDLDidReceivePerformAudioPassThruRequest","abstract":"

    Name for a PerformAudioPassThru request RPC

    "},"Constants.html#/c:@SDLDidReceivePerformInteractionRequest":{"name":"SDLDidReceivePerformInteractionRequest","abstract":"

    Name for a PerformInteraction request RPC

    "},"Constants.html#/c:@SDLDidReceivePublishAppServiceRequest":{"name":"SDLDidReceivePublishAppServiceRequest","abstract":"

    Name for a PublishAppService request RPC

    "},"Constants.html#/c:@SDLDidReceivePutFileRequest":{"name":"SDLDidReceivePutFileRequest","abstract":"

    Name for a PutFile request RPC

    "},"Constants.html#/c:@SDLDidReceiveReadDIDRequest":{"name":"SDLDidReceiveReadDIDRequest","abstract":"

    Name for a ReadDID request RPC

    "},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceRequest":{"name":"SDLDidReceiveRegisterAppInterfaceRequest","abstract":"

    Name for a RegisterAppInterfacr request RPC

    "},"Constants.html#/c:@SDLDidReceiveReleaseInteriorVehicleDataModuleRequest":{"name":"SDLDidReceiveReleaseInteriorVehicleDataModuleRequest","abstract":"

    Name for a ReleaseInteriorVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesRequest":{"name":"SDLDidReceiveResetGlobalPropertiesRequest","abstract":"

    Name for a ResetGlobalProperties request RPC

    "},"Constants.html#/c:@SDLDidReceiveScrollableMessageRequest":{"name":"SDLDidReceiveScrollableMessageRequest","abstract":"

    Name for a ScrollableMessage request RPC

    "},"Constants.html#/c:@SDLDidReceiveSendHapticDataRequest":{"name":"SDLDidReceiveSendHapticDataRequest","abstract":"

    Name for a SendHapticData request RPC

    "},"Constants.html#/c:@SDLDidReceiveSendLocationRequest":{"name":"SDLDidReceiveSendLocationRequest","abstract":"

    Name for a SendLocation request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetAppIconRequest":{"name":"SDLDidReceiveSetAppIconRequest","abstract":"

    Name for a SetAppIcon request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetCloudAppPropertiesRequest":{"name":"SDLDidReceiveSetCloudAppPropertiesRequest","abstract":"

    Name for a SetCloudProperties request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutRequest":{"name":"SDLDidReceiveSetDisplayLayoutRequest","abstract":"

    Name for a SetDisplayLayout request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesRequest":{"name":"SDLDidReceiveSetGlobalPropertiesRequest","abstract":"

    Name for a SetGlobalProperties request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataRequest":{"name":"SDLDidReceiveSetInteriorVehicleDataRequest","abstract":"

    Name for a SetInteriorVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerRequest":{"name":"SDLDidReceiveSetMediaClockTimerRequest","abstract":"

    Name for a SetMediaClockTimer request RPC

    "},"Constants.html#/c:@SDLDidReceiveShowRequest":{"name":"SDLDidReceiveShowRequest","abstract":"

    Name for a Show request RPC

    "},"Constants.html#/c:@SDLDidReceiveShowAppMenuRequest":{"name":"SDLDidReceiveShowAppMenuRequest","abstract":"

    Name for a ShowAppMenu request RPC

    "},"Constants.html#/c:@SDLDidReceiveShowConstantTBTRequest":{"name":"SDLDidReceiveShowConstantTBTRequest","abstract":"

    Name for a ShowConstantTBT request RPC

    "},"Constants.html#/c:@SDLDidReceiveSliderRequest":{"name":"SDLDidReceiveSliderRequest","abstract":"

    Name for a Slider request RPC

    "},"Constants.html#/c:@SDLDidReceiveSpeakRequest":{"name":"SDLDidReceiveSpeakRequest","abstract":"

    Name for a Speak request RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeButtonRequest":{"name":"SDLDidReceiveSubscribeButtonRequest","abstract":"

    Name for a SubscribeButton request RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataRequest":{"name":"SDLDidReceiveSubscribeVehicleDataRequest","abstract":"

    Name for a SubscribeVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeWayPointsRequest":{"name":"SDLDidReceiveSubscribeWayPointsRequest","abstract":"

    Name for a ubscribeWayPoints request RPC

    "},"Constants.html#/c:@SDLDidReceiveSyncPDataRequest":{"name":"SDLDidReceiveSyncPDataRequest","abstract":"

    Name for a SyncPData request RPC

    "},"Constants.html#/c:@SDLDidReceiveSystemRequestRequest":{"name":"SDLDidReceiveSystemRequestRequest","abstract":"

    Name for a SystemRequest request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnpublishAppServiceRequest":{"name":"SDLDidReceiveUnpublishAppServiceRequest","abstract":"

    Name for an UnpublishAppService request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceRequest":{"name":"SDLDidReceiveUnregisterAppInterfaceRequest","abstract":"

    Name for an UnregisterAppInterface request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonRequest":{"name":"SDLDidReceiveUnsubscribeButtonRequest","abstract":"

    Name for an UnsubscribeButton request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataRequest":{"name":"SDLDidReceiveUnsubscribeVehicleDataRequest","abstract":"

    Name for an UnsubscribeVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeWayPointsRequest":{"name":"SDLDidReceiveUnsubscribeWayPointsRequest","abstract":"

    Name for an UnsubscribeWayPoints request RPC

    "},"Constants.html#/c:@SDLDidReceiveUpdateTurnListRequest":{"name":"SDLDidReceiveUpdateTurnListRequest","abstract":"

    Name for an UpdateTurnList request RPC

    "},"Constants.html#/c:@SDLDidChangeDriverDistractionStateNotification":{"name":"SDLDidChangeDriverDistractionStateNotification","abstract":"

    Name for a DriverDistractionState notification RPC

    "},"Constants.html#/c:@SDLDidChangeHMIStatusNotification":{"name":"SDLDidChangeHMIStatusNotification","abstract":"

    Name for a HMIStatus notification RPC

    "},"Constants.html#/c:@SDLDidReceiveAppServiceDataNotification":{"name":"SDLDidReceiveAppServiceDataNotification","abstract":"

    Name for an AppServiceData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveAppUnregisteredNotification":{"name":"SDLDidReceiveAppUnregisteredNotification","abstract":"

    Name for an AppUnregistered notification RPC

    "},"Constants.html#/c:@SDLDidReceiveAudioPassThruNotification":{"name":"SDLDidReceiveAudioPassThruNotification","abstract":"

    Name for an AudioPassThru notification RPC

    "},"Constants.html#/c:@SDLDidReceiveButtonEventNotification":{"name":"SDLDidReceiveButtonEventNotification","abstract":"

    Name for a ButtonEvent notification RPC

    "},"Constants.html#/c:@SDLDidReceiveButtonPressNotification":{"name":"SDLDidReceiveButtonPressNotification","abstract":"

    Name for a ButtonPress notification RPC

    "},"Constants.html#/c:@SDLDidReceiveCommandNotification":{"name":"SDLDidReceiveCommandNotification","abstract":"

    Name for a Command notification RPC

    "},"Constants.html#/c:@SDLDidReceiveEncodedDataNotification":{"name":"SDLDidReceiveEncodedDataNotification","abstract":"

    Name for a EncodedData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveInteriorVehicleDataNotification":{"name":"SDLDidReceiveInteriorVehicleDataNotification","abstract":"

    Name for a InteriorVehicleData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveKeyboardInputNotification":{"name":"SDLDidReceiveKeyboardInputNotification","abstract":"

    Name for a KeyboardInput notification RPC

    "},"Constants.html#/c:@SDLDidChangeLanguageNotification":{"name":"SDLDidChangeLanguageNotification","abstract":"

    Name for a Language notification RPC

    "},"Constants.html#/c:@SDLDidChangeLockScreenStatusNotification":{"name":"SDLDidChangeLockScreenStatusNotification","abstract":"

    Name for a LockScreenStatus notification RPC

    "},"Constants.html#/c:@SDLDidReceiveNewHashNotification":{"name":"SDLDidReceiveNewHashNotification","abstract":"

    Name for a NewHash notification RPC

    "},"Constants.html#/c:@SDLDidReceiveVehicleIconNotification":{"name":"SDLDidReceiveVehicleIconNotification","abstract":"

    Name for a VehicleIcon notification RPC

    "},"Constants.html#/c:@SDLDidChangePermissionsNotification":{"name":"SDLDidChangePermissionsNotification","abstract":"

    Name for a ChangePermissions notification RPC

    "},"Constants.html#/c:@SDLDidReceiveRemoteControlStatusNotification":{"name":"SDLDidReceiveRemoteControlStatusNotification","abstract":"

    Name for a RemoteControlStatus notification RPC

    "},"Constants.html#/c:@SDLDidReceiveSystemCapabilityUpdatedNotification":{"name":"SDLDidReceiveSystemCapabilityUpdatedNotification","abstract":"

    Name for a SystemCapability notification RPC

    "},"Constants.html#/c:@SDLDidReceiveSystemRequestNotification":{"name":"SDLDidReceiveSystemRequestNotification","abstract":"

    Name for a SystemRequest notification RPC

    "},"Constants.html#/c:@SDLDidChangeTurnByTurnStateNotification":{"name":"SDLDidChangeTurnByTurnStateNotification","abstract":"

    Name for a TurnByTurnStat notification RPC

    "},"Constants.html#/c:@SDLDidReceiveTouchEventNotification":{"name":"SDLDidReceiveTouchEventNotification","abstract":"

    Name for a TouchEvent notification RPC

    "},"Constants.html#/c:@SDLDidReceiveVehicleDataNotification":{"name":"SDLDidReceiveVehicleDataNotification","abstract":"

    Name for a VehicleData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveWaypointNotification":{"name":"SDLDidReceiveWaypointNotification","abstract":"

    Name for a Waypoint notification RPC

    "},"Constants.html#/c:@SDLPRNDLPark":{"name":"SDLPRNDLPark","abstract":"

    Park

    "},"Constants.html#/c:@SDLPRNDLReverse":{"name":"SDLPRNDLReverse","abstract":"

    Reverse gear

    "},"Constants.html#/c:@SDLPRNDLNeutral":{"name":"SDLPRNDLNeutral","abstract":"

    No gear

    "},"Constants.html#/c:@SDLPRNDLDrive":{"name":"SDLPRNDLDrive","abstract":"

    @abstract: Drive gear

    "},"Constants.html#/c:@SDLPRNDLSport":{"name":"SDLPRNDLSport","abstract":"

    Drive Sport mode

    "},"Constants.html#/c:@SDLPRNDLLowGear":{"name":"SDLPRNDLLowGear","abstract":"

    1st gear hold

    "},"Constants.html#/c:@SDLPRNDLFirst":{"name":"SDLPRNDLFirst","abstract":"

    First gear

    "},"Constants.html#/c:@SDLPRNDLSecond":{"name":"SDLPRNDLSecond","abstract":"

    Second gear

    "},"Constants.html#/c:@SDLPRNDLThird":{"name":"SDLPRNDLThird","abstract":"

    Third gear

    "},"Constants.html#/c:@SDLPRNDLFourth":{"name":"SDLPRNDLFourth","abstract":"

    Fourth gear

    "},"Constants.html#/c:@SDLPRNDLFifth":{"name":"SDLPRNDLFifth","abstract":"

    Fifth gear

    "},"Constants.html#/c:@SDLPRNDLSixth":{"name":"SDLPRNDLSixth","abstract":"

    Sixth gear

    "},"Constants.html#/c:@SDLPRNDLSeventh":{"name":"SDLPRNDLSeventh","abstract":"

    Seventh gear

    "},"Constants.html#/c:@SDLPRNDLEighth":{"name":"SDLPRNDLEighth","abstract":"

    Eighth gear

    "},"Constants.html#/c:@SDLPRNDLUnknown":{"name":"SDLPRNDLUnknown","abstract":"

    Unknown

    "},"Constants.html#/c:@SDLPRNDLFault":{"name":"SDLPRNDLFault","abstract":"

    Fault

    "},"Constants.html#/c:@SDLPermissionStatusAllowed":{"name":"SDLPermissionStatusAllowed","abstract":"

    permission: allowed

    "},"Constants.html#/c:@SDLPermissionStatusDisallowed":{"name":"SDLPermissionStatusDisallowed","abstract":"

    permission: disallowed

    "},"Constants.html#/c:@SDLPermissionStatusUserDisallowed":{"name":"SDLPermissionStatusUserDisallowed","abstract":"

    permission: user disallowed

    "},"Constants.html#/c:@SDLPermissionStatusUserConsentPending":{"name":"SDLPermissionStatusUserConsentPending","abstract":"

    permission: user consent pending

    "},"Constants.html#/c:@SDLPowerModeQualificationStatusUndefined":{"name":"SDLPowerModeQualificationStatusUndefined","abstract":"

    An undefined status

    "},"Constants.html#/c:@SDLPowerModeQualificationStatusEvaluationInProgress":{"name":"SDLPowerModeQualificationStatusEvaluationInProgress","abstract":"

    An “evaluation in progress” status

    "},"Constants.html#/c:@SDLPowerModeQualificationStatusNotDefined":{"name":"SDLPowerModeQualificationStatusNotDefined","abstract":"

    A “not defined” status

    "},"Constants.html#/c:@SDLPowerModeQualificationStatusOk":{"name":"SDLPowerModeQualificationStatusOk","abstract":"

    An “ok” status

    "},"Constants.html#/c:@SDLPowerModeStatusKeyOut":{"name":"SDLPowerModeStatusKeyOut","abstract":"

    The key is not in the ignition, and the power is off

    "},"Constants.html#/c:@SDLPowerModeStatusKeyRecentlyOut":{"name":"SDLPowerModeStatusKeyRecentlyOut","abstract":"

    The key is not in the ignition and it was just recently removed

    "},"Constants.html#/c:@SDLPowerModeStatusKeyApproved":{"name":"SDLPowerModeStatusKeyApproved","abstract":"

    The key is not in the ignition, but an approved key is available

    "},"Constants.html#/c:@SDLPowerModeStatusPostAccessory":{"name":"SDLPowerModeStatusPostAccessory","abstract":"

    We are in a post-accessory power situation

    "},"Constants.html#/c:@SDLPowerModeStatusAccessory":{"name":"SDLPowerModeStatusAccessory","abstract":"

    The car is in accessory power mode

    "},"Constants.html#/c:@SDLPowerModeStatusPostIgnition":{"name":"SDLPowerModeStatusPostIgnition","abstract":"

    We are in a post-ignition power situation

    "},"Constants.html#/c:@SDLPowerModeStatusIgnitionOn":{"name":"SDLPowerModeStatusIgnitionOn","abstract":"

    The ignition is on but the car is not yet running

    "},"Constants.html#/c:@SDLPowerModeStatusRunning":{"name":"SDLPowerModeStatusRunning","abstract":"

    The ignition is on and the car is running

    "},"Constants.html#/c:@SDLPowerModeStatusCrank":{"name":"SDLPowerModeStatusCrank","abstract":"

    We are in a crank power situation

    "},"Constants.html#/c:@SDLPredefinedLayoutDefault":{"name":"SDLPredefinedLayoutDefault","abstract":"

    A default layout

    "},"Constants.html#/c:@SDLPredefinedLayoutMedia":{"name":"SDLPredefinedLayoutMedia","abstract":"

    The default media layout

    "},"Constants.html#/c:@SDLPredefinedLayoutNonMedia":{"name":"SDLPredefinedLayoutNonMedia","abstract":"

    The default non-media layout

    "},"Constants.html#/c:@SDLPredefinedLayoutOnscreenPresets":{"name":"SDLPredefinedLayoutOnscreenPresets","abstract":"

    A media layout containing preset buttons

    "},"Constants.html#/c:@SDLPredefinedLayoutNavigationFullscreenMap":{"name":"SDLPredefinedLayoutNavigationFullscreenMap","abstract":"

    The default navigation layout with a fullscreen map

    "},"Constants.html#/c:@SDLPredefinedLayoutNavigationList":{"name":"SDLPredefinedLayoutNavigationList","abstract":"

    A list layout used for navigation apps

    "},"Constants.html#/c:@SDLPredefinedLayoutNavigationKeyboard":{"name":"SDLPredefinedLayoutNavigationKeyboard","abstract":"

    A keyboard layout used for navigation apps

    "},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithText":{"name":"SDLPredefinedLayoutGraphicWithText","abstract":"

    A layout with a single graphic on the left and text on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTextWithGraphic":{"name":"SDLPredefinedLayoutTextWithGraphic","abstract":"

    A layout with text on the left and a single graphic on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTilesOnly":{"name":"SDLPredefinedLayoutTilesOnly","abstract":"

    A layout with only softbuttons placed in a tile layout

    "},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsOnly":{"name":"SDLPredefinedLayoutTextButtonsOnly","abstract":"

    A layout with only soft buttons that only accept text

    "},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTiles":{"name":"SDLPredefinedLayoutGraphicWithTiles","abstract":"

    A layout with a single graphic on the left and soft buttons in a tile layout on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTilesWithGraphic":{"name":"SDLPredefinedLayoutTilesWithGraphic","abstract":"

    A layout with soft buttons in a tile layout on the left and a single graphic on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextAndSoftButtons":{"name":"SDLPredefinedLayoutGraphicWithTextAndSoftButtons","abstract":"

    A layout with a single graphic on the left and both text and soft buttons on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTextAndSoftButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextAndSoftButtonsWithGraphic","abstract":"

    A layout with both text and soft buttons on the left and a single graphic on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextButtons":{"name":"SDLPredefinedLayoutGraphicWithTextButtons","abstract":"

    A layout with a single graphic on the left and text-only soft buttons on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextButtonsWithGraphic","abstract":"

    A layout with text-only soft buttons on the left and a single graphic on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutLargeGraphicWithSoftButtons","abstract":"

    A layout with a single large graphic and soft buttons

    "},"Constants.html#/c:@SDLPredefinedLayoutDoubleGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutDoubleGraphicWithSoftButtons","abstract":"

    A layout with two graphics and soft buttons

    "},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicOnly":{"name":"SDLPredefinedLayoutLargeGraphicOnly","abstract":"

    A layout with only a single large graphic

    "},"Constants.html#/c:@SDLPrerecordedSpeechHelp":{"name":"SDLPrerecordedSpeechHelp","abstract":"

    A prerecorded help prompt

    "},"Constants.html#/c:@SDLPrerecordedSpeechInitial":{"name":"SDLPrerecordedSpeechInitial","abstract":"

    A prerecorded initial prompt

    "},"Constants.html#/c:@SDLPrerecordedSpeechListen":{"name":"SDLPrerecordedSpeechListen","abstract":"

    A prerecorded listen prompt is available

    "},"Constants.html#/c:@SDLPrerecordedSpeechPositive":{"name":"SDLPrerecordedSpeechPositive","abstract":"

    A prerecorded positive indicator noise is available

    "},"Constants.html#/c:@SDLPrerecordedSpeechNegative":{"name":"SDLPrerecordedSpeechNegative","abstract":"

    A prerecorded negative indicator noise is available

    "},"Constants.html#/c:@SDLPrimaryAudioSourceNoSourceSelected":{"name":"SDLPrimaryAudioSourceNoSourceSelected","abstract":"

    Currently no source selected

    "},"Constants.html#/c:@SDLPrimaryAudioSourceUSB":{"name":"SDLPrimaryAudioSourceUSB","abstract":"

    USB is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceUSB2":{"name":"SDLPrimaryAudioSourceUSB2","abstract":"

    USB2 is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceBluetoothStereo":{"name":"SDLPrimaryAudioSourceBluetoothStereo","abstract":"

    Bluetooth Stereo is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceLineIn":{"name":"SDLPrimaryAudioSourceLineIn","abstract":"

    Line in is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceIpod":{"name":"SDLPrimaryAudioSourceIpod","abstract":"

    iPod is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceMobileApp":{"name":"SDLPrimaryAudioSourceMobileApp","abstract":"

    Mobile app is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceCD":{"name":"SDLPrimaryAudioSourceCD","abstract":"

    @abstract CD is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceAM":{"name":"SDLPrimaryAudioSourceAM","abstract":"

    @abstract Radio frequency AM is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceFM":{"name":"SDLPrimaryAudioSourceFM","abstract":"

    @abstract Radio frequency FM is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceXM":{"name":"SDLPrimaryAudioSourceXM","abstract":"

    @abstract Radio frequency XM is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceDAB":{"name":"SDLPrimaryAudioSourceDAB","abstract":"

    @abstract Radio frequency DAB is current source

    "},"Constants.html#/c:@SDLRPCFunctionNameAddCommand":{"name":"SDLRPCFunctionNameAddCommand","abstract":"

    Function name for an AddCommand RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameAddSubMenu":{"name":"SDLRPCFunctionNameAddSubMenu","abstract":"

    Function name for an AddSubMenu RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameAlert":{"name":"SDLRPCFunctionNameAlert","abstract":"

    Function name for an Alert RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameAlertManeuver":{"name":"SDLRPCFunctionNameAlertManeuver","abstract":"

    Function name for an AlertManeuver RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameButtonPress":{"name":"SDLRPCFunctionNameButtonPress","abstract":"

    Function name for a ButtonPress RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameCancelInteraction":{"name":"SDLRPCFunctionNameCancelInteraction","abstract":"

    Function name for a CancelInteraction RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameChangeRegistration":{"name":"SDLRPCFunctionNameChangeRegistration","abstract":"

    Function name for a ChangeRegistration RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameCloseApplication":{"name":"SDLRPCFunctionNameCloseApplication","abstract":"

    Function name for a CloseApplication RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameCreateInteractionChoiceSet":{"name":"SDLRPCFunctionNameCreateInteractionChoiceSet","abstract":"

    Function name for a CreateInteractionChoiceSet RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteCommand":{"name":"SDLRPCFunctionNameDeleteCommand","abstract":"

    Function name for a DeleteCommand RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteFile":{"name":"SDLRPCFunctionNameDeleteFile","abstract":"

    Function name for a DeleteFile RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteInteractionChoiceSet":{"name":"SDLRPCFunctionNameDeleteInteractionChoiceSet","abstract":"

    Function name for a DeleteInteractionChoiceSet RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteSubMenu":{"name":"SDLRPCFunctionNameDeleteSubMenu","abstract":"

    Function name for a DeleteSubMenu RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDiagnosticMessage":{"name":"SDLRPCFunctionNameDiagnosticMessage","abstract":"

    Function name for a DiagnosticMessage RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDialNumber":{"name":"SDLRPCFunctionNameDialNumber","abstract":"

    Function name for a DialNumber RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameEncodedSyncPData":{"name":"SDLRPCFunctionNameEncodedSyncPData","abstract":"

    Function name for an CreateInteractionChoiceSet RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameEndAudioPassThru":{"name":"SDLRPCFunctionNameEndAudioPassThru","abstract":"

    Function name for an EndAudioPassThru RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGenericResponse":{"name":"SDLRPCFunctionNameGenericResponse","abstract":"

    Function name for an GenricResponse Response RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetAppServiceData":{"name":"SDLRPCFunctionNameGetAppServiceData","abstract":"

    Function name for an CreateInteractionChoiceSet RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetDTCs":{"name":"SDLRPCFunctionNameGetDTCs","abstract":"

    Function name for a GetDTCs RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetFile":{"name":"SDLRPCFunctionNameGetFile","abstract":"

    Function name for a GetFile RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetCloudAppProperties":{"name":"SDLRPCFunctionNameGetCloudAppProperties","abstract":"

    Function name for a GetCloudAppProperties RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetInteriorVehicleData":{"name":"SDLRPCFunctionNameGetInteriorVehicleData","abstract":"

    Function name for a GetInteriorVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetInteriorVehicleDataConsent":{"name":"SDLRPCFunctionNameGetInteriorVehicleDataConsent","abstract":"

    Function name for a GetInteriorVehicleDataConsent RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetSystemCapability":{"name":"SDLRPCFunctionNameGetSystemCapability","abstract":"

    Function name for a GetSystemCapability RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetVehicleData":{"name":"SDLRPCFunctionNameGetVehicleData","abstract":"

    Function name for a GetVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetWayPoints":{"name":"SDLRPCFunctionNameGetWayPoints","abstract":"

    Function name for a GetWayPoints RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameListFiles":{"name":"SDLRPCFunctionNameListFiles","abstract":"

    Function name for a ListFiles RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnAppInterfaceUnregistered":{"name":"SDLRPCFunctionNameOnAppInterfaceUnregistered","abstract":"

    Function name for an OnAppInterfaceUnregistered notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnAppServiceData":{"name":"SDLRPCFunctionNameOnAppServiceData","abstract":"

    Function name for an OnAppServiceData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnAudioPassThru":{"name":"SDLRPCFunctionNameOnAudioPassThru","abstract":"

    Function name for an OnAudioPassThru notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnButtonEvent":{"name":"SDLRPCFunctionNameOnButtonEvent","abstract":"

    Function name for an OnButtonEvent notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnButtonPress":{"name":"SDLRPCFunctionNameOnButtonPress","abstract":"

    Function name for an OnButtonPress notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnCommand":{"name":"SDLRPCFunctionNameOnCommand","abstract":"

    Function name for an OnCommand notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnDriverDistraction":{"name":"SDLRPCFunctionNameOnDriverDistraction","abstract":"

    Function name for an OnDriverDistraction notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnEncodedSyncPData":{"name":"SDLRPCFunctionNameOnEncodedSyncPData","abstract":"

    Function name for an OnEncodedSyncPData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnHashChange":{"name":"SDLRPCFunctionNameOnHashChange","abstract":"

    Function name for an OnHashChange notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnHMIStatus":{"name":"SDLRPCFunctionNameOnHMIStatus","abstract":"

    Function name for an OnHMIStatus notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnInteriorVehicleData":{"name":"SDLRPCFunctionNameOnInteriorVehicleData","abstract":"

    Function name for an OnInteriorVehicleData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnKeyboardInput":{"name":"SDLRPCFunctionNameOnKeyboardInput","abstract":"

    Function name for an OnKeyboardInput notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnLanguageChange":{"name":"SDLRPCFunctionNameOnLanguageChange","abstract":"

    Function name for an OnLanguageChange notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnLockScreenStatus":{"name":"SDLRPCFunctionNameOnLockScreenStatus","abstract":"

    Function name for an OnLockScreenStatus notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnPermissionsChange":{"name":"SDLRPCFunctionNameOnPermissionsChange","abstract":"

    Function name for an OnPermissionsChange notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnRCStatus":{"name":"SDLRPCFunctionNameOnRCStatus","abstract":"

    Function name for an OnRCStatus notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnSyncPData":{"name":"SDLRPCFunctionNameOnSyncPData","abstract":"

    Function name for an OnSyncPData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnSystemCapabilityUpdated":{"name":"SDLRPCFunctionNameOnSystemCapabilityUpdated","abstract":"

    Function name for an OnSystemCapabilityUpdated notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnSystemRequest":{"name":"SDLRPCFunctionNameOnSystemRequest","abstract":"

    Function name for an OnSystemRequest notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnTBTClientState":{"name":"SDLRPCFunctionNameOnTBTClientState","abstract":"

    Function name for an OnTBTClientState notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnTouchEvent":{"name":"SDLRPCFunctionNameOnTouchEvent","abstract":"

    Function name for an OnTouchEvent notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnVehicleData":{"name":"SDLRPCFunctionNameOnVehicleData","abstract":"

    Function name for an OnVehicleData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnWayPointChange":{"name":"SDLRPCFunctionNameOnWayPointChange","abstract":"

    Function name for an OnWayPointChange notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePerformAppServiceInteraction":{"name":"SDLRPCFunctionNamePerformAppServiceInteraction","abstract":"

    Function name for a PerformAppServiceInteraction RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePerformAudioPassThru":{"name":"SDLRPCFunctionNamePerformAudioPassThru","abstract":"

    Function name for a PerformAppServiceInteraction RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePerformInteraction":{"name":"SDLRPCFunctionNamePerformInteraction","abstract":"

    Function name for a PerformInteraction RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePublishAppService":{"name":"SDLRPCFunctionNamePublishAppService","abstract":"

    Function name for a PublishAppService RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePutFile":{"name":"SDLRPCFunctionNamePutFile","abstract":"

    Function name for a PutFile RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameReadDID":{"name":"SDLRPCFunctionNameReadDID","abstract":"

    Function name for a ReadDID RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameReleaseInteriorVehicleDataModule":{"name":"SDLRPCFunctionNameReleaseInteriorVehicleDataModule","abstract":"

    Function name for a ReleaseInteriorVehicleDataModule RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameRegisterAppInterface":{"name":"SDLRPCFunctionNameRegisterAppInterface","abstract":"

    Function name for a RegisterAppInterface RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameReserved":{"name":"SDLRPCFunctionNameReserved","abstract":"

    Function name for a Reserved RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameResetGlobalProperties":{"name":"SDLRPCFunctionNameResetGlobalProperties","abstract":"

    Function name for a ResetGlobalProperties RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameScrollableMessage":{"name":"SDLRPCFunctionNameScrollableMessage","abstract":"

    Function name for a ScrollableMessage RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSendHapticData":{"name":"SDLRPCFunctionNameSendHapticData","abstract":"

    Function name for a SendHapticData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSendLocation":{"name":"SDLRPCFunctionNameSendLocation","abstract":"

    Function name for a SendLocation RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetAppIcon":{"name":"SDLRPCFunctionNameSetAppIcon","abstract":"

    Function name for a SetAppIcon RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetCloudAppProperties":{"name":"SDLRPCFunctionNameSetCloudAppProperties","abstract":"

    Function name for a SetCloudProperties RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetDisplayLayout":{"name":"SDLRPCFunctionNameSetDisplayLayout","abstract":"

    Function name for a SetDisplayLayout RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetGlobalProperties":{"name":"SDLRPCFunctionNameSetGlobalProperties","abstract":"

    Function name for a SetGlobalProperties RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetInteriorVehicleData":{"name":"SDLRPCFunctionNameSetInteriorVehicleData","abstract":"

    Function name for a SetInteriorVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetMediaClockTimer":{"name":"SDLRPCFunctionNameSetMediaClockTimer","abstract":"

    Function name for a SetMediaClockTimer RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameShow":{"name":"SDLRPCFunctionNameShow","abstract":"

    Function name for a Show RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameShowAppMenu":{"name":"SDLRPCFunctionNameShowAppMenu","abstract":"

    Function name for a ShowAppMenu RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameShowConstantTBT":{"name":"SDLRPCFunctionNameShowConstantTBT","abstract":"

    Function name for a ShowConstantTBT RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSlider":{"name":"SDLRPCFunctionNameSlider","abstract":"

    Function name for a Slider RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSpeak":{"name":"SDLRPCFunctionNameSpeak","abstract":"

    Function name for a Speak RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSubscribeButton":{"name":"SDLRPCFunctionNameSubscribeButton","abstract":"

    Function name for a SubscribeButton RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSubscribeVehicleData":{"name":"SDLRPCFunctionNameSubscribeVehicleData","abstract":"

    Function name for a SubscribeVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSubscribeWayPoints":{"name":"SDLRPCFunctionNameSubscribeWayPoints","abstract":"

    Function name for a SubscribeWayPoints RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSyncPData":{"name":"SDLRPCFunctionNameSyncPData","abstract":"

    Function name for a SyncPData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSystemRequest":{"name":"SDLRPCFunctionNameSystemRequest","abstract":"

    Function name for a SystemRequest RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnpublishAppService":{"name":"SDLRPCFunctionNameUnpublishAppService","abstract":"

    Function name for an UnpublishAppService RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnregisterAppInterface":{"name":"SDLRPCFunctionNameUnregisterAppInterface","abstract":"

    Function name for an UnregisterAppInterface RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeButton":{"name":"SDLRPCFunctionNameUnsubscribeButton","abstract":"

    Function name for an UnsubscribeButton RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeVehicleData":{"name":"SDLRPCFunctionNameUnsubscribeVehicleData","abstract":"

    Function name for an UnsubscribeVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeWayPoints":{"name":"SDLRPCFunctionNameUnsubscribeWayPoints","abstract":"

    Function name for an UnsubscribeWayPoints RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUpdateTurnList":{"name":"SDLRPCFunctionNameUpdateTurnList","abstract":"

    Function name for an UpdateTurnList RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameCreateWindow":{"name":"SDLRPCFunctionNameCreateWindow","abstract":"

    Function name for a CreateWindow RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteWindow":{"name":"SDLRPCFunctionNameDeleteWindow","abstract":"

    Function name for a DeleteWindow RPC

    "},"Constants.html#/c:@SDLRadioBandAM":{"name":"SDLRadioBandAM","abstract":"

    Represents AM radio band

    "},"Constants.html#/c:@SDLRadioBandFM":{"name":"SDLRadioBandFM","abstract":"

    Represents FM radio band

    "},"Constants.html#/c:@SDLRadioBandXM":{"name":"SDLRadioBandXM","abstract":"

    Represents XM radio band

    "},"Constants.html#/c:@SDLRadioStateAcquiring":{"name":"SDLRadioStateAcquiring","abstract":"

    Represents Radio state as ACQUIRING

    "},"Constants.html#/c:@SDLRadioStateAcquired":{"name":"SDLRadioStateAcquired","abstract":"

    Represents Radio state as ACQUIRED

    "},"Constants.html#/c:@SDLRadioStateMulticast":{"name":"SDLRadioStateMulticast","abstract":"

    Represents Radio state as MULTICAST

    "},"Constants.html#/c:@SDLRadioStateNotFound":{"name":"SDLRadioStateNotFound","abstract":"

    Represents Radio state as NOT_FOUND

    "},"Constants.html#/c:@SDLRequestTypeHTTP":{"name":"SDLRequestTypeHTTP","abstract":"

    An HTTP request

    "},"Constants.html#/c:@SDLRequestTypeFileResume":{"name":"SDLRequestTypeFileResume","abstract":"

    A file resumption request

    "},"Constants.html#/c:@SDLRequestTypeAuthenticationRequest":{"name":"SDLRequestTypeAuthenticationRequest","abstract":"

    An authentication request

    "},"Constants.html#/c:@SDLRequestTypeAuthenticationChallenge":{"name":"SDLRequestTypeAuthenticationChallenge","abstract":"

    An authentication challenge

    "},"Constants.html#/c:@SDLRequestTypeAuthenticationAck":{"name":"SDLRequestTypeAuthenticationAck","abstract":"

    An authentication acknowledgment

    "},"Constants.html#/c:@SDLRequestTypeProprietary":{"name":"SDLRequestTypeProprietary","abstract":"

    An proprietary formatted request

    "},"Constants.html#/c:@SDLRequestTypeQueryApps":{"name":"SDLRequestTypeQueryApps","abstract":"

    An Query Apps request

    "},"Constants.html#/c:@SDLRequestTypeLaunchApp":{"name":"SDLRequestTypeLaunchApp","abstract":"

    A Launch Apps request

    "},"Constants.html#/c:@SDLRequestTypeLockScreenIconURL":{"name":"SDLRequestTypeLockScreenIconURL","abstract":"

    The URL for a lock screen icon

    "},"Constants.html#/c:@SDLRequestTypeTrafficMessageChannel":{"name":"SDLRequestTypeTrafficMessageChannel","abstract":"

    A traffic message channel request

    "},"Constants.html#/c:@SDLRequestTypeDriverProfile":{"name":"SDLRequestTypeDriverProfile","abstract":"

    A driver profile request

    "},"Constants.html#/c:@SDLRequestTypeVoiceSearch":{"name":"SDLRequestTypeVoiceSearch","abstract":"

    A voice search request

    "},"Constants.html#/c:@SDLRequestTypeNavigation":{"name":"SDLRequestTypeNavigation","abstract":"

    A navigation request

    "},"Constants.html#/c:@SDLRequestTypePhone":{"name":"SDLRequestTypePhone","abstract":"

    A phone request

    "},"Constants.html#/c:@SDLRequestTypeClimate":{"name":"SDLRequestTypeClimate","abstract":"

    A climate request

    "},"Constants.html#/c:@SDLRequestTypeSettings":{"name":"SDLRequestTypeSettings","abstract":"

    A settings request

    "},"Constants.html#/c:@SDLRequestTypeVehicleDiagnostics":{"name":"SDLRequestTypeVehicleDiagnostics","abstract":"

    A vehicle diagnostics request

    "},"Constants.html#/c:@SDLRequestTypeEmergency":{"name":"SDLRequestTypeEmergency","abstract":"

    An emergency request

    "},"Constants.html#/c:@SDLRequestTypeMedia":{"name":"SDLRequestTypeMedia","abstract":"

    A media request

    "},"Constants.html#/c:@SDLRequestTypeFOTA":{"name":"SDLRequestTypeFOTA","abstract":"

    A firmware over-the-air request

    "},"Constants.html#/c:@SDLRequestTypeOEMSpecific":{"name":"SDLRequestTypeOEMSpecific","abstract":"

    A request that is OEM specific using the RequestSubType in SystemRequest

    "},"Constants.html#/c:@SDLRequestTypeIconURL":{"name":"SDLRequestTypeIconURL","abstract":"

    A request for an icon url

    "},"Constants.html#/c:@SDLResultSuccess":{"name":"SDLResultSuccess","abstract":"

    The request succeeded

    "},"Constants.html#/c:@SDLResultInvalidData":{"name":"SDLResultInvalidData","abstract":"

    The request contained invalid data

    "},"Constants.html#/c:@SDLResultCharacterLimitExceeded":{"name":"SDLResultCharacterLimitExceeded","abstract":"

    The request had a string containing too many characters

    "},"Constants.html#/c:@SDLResultUnsupportedRequest":{"name":"SDLResultUnsupportedRequest","abstract":"

    The request is not supported by the IVI unit implementing SDL

    "},"Constants.html#/c:@SDLResultOutOfMemory":{"name":"SDLResultOutOfMemory","abstract":"

    The system could not process the request because the necessary memory couldn’t be allocated

    "},"Constants.html#/c:@SDLResultTooManyPendingRequests":{"name":"SDLResultTooManyPendingRequests","abstract":"

    There are too many requests pending (means that the response has not been delivered yet).

    "},"Constants.html#/c:@SDLResultInvalidId":{"name":"SDLResultInvalidId","abstract":"

    One of the provided IDs is not valid.

    "},"Constants.html#/c:@SDLResultDuplicateName":{"name":"SDLResultDuplicateName","abstract":"

    The provided name or synonym is a duplicate of some already-defined name or synonym.

    "},"Constants.html#/c:@SDLResultTooManyApplications":{"name":"SDLResultTooManyApplications","abstract":"

    There are already too many registered applications.

    "},"Constants.html#/c:@SDLResultApplicationRegisteredAlready":{"name":"SDLResultApplicationRegisteredAlready","abstract":"

    RegisterAppInterface has been called, but this app is already registered

    "},"Constants.html#/c:@SDLResultUnsupportedVersion":{"name":"SDLResultUnsupportedVersion","abstract":"

    The Head Unit doesn’t support the SDL version that is requested by the mobile application.

    "},"Constants.html#/c:@SDLResultWrongLanguage":{"name":"SDLResultWrongLanguage","abstract":"

    The requested language is currently not supported. This might be because of a mismatch of the currently active language on the head unit and the requested language.

    "},"Constants.html#/c:@SDLResultApplicationNotRegistered":{"name":"SDLResultApplicationNotRegistered","abstract":"

    A command can not be executed because no application has been registered with RegisterApplication.

    "},"Constants.html#/c:@SDLResultInUse":{"name":"SDLResultInUse","abstract":"

    The data may not be changed, because it is currently in use. For example when trying to delete a choice set that is currently involved in an interaction.

    "},"Constants.html#/c:@SDLResultVehicleDataNotAllowed":{"name":"SDLResultVehicleDataNotAllowed","abstract":"

    The user has turned off access to vehicle data, and it is globally unavailable to mobile applications.

    "},"Constants.html#/c:@SDLResultVehicleDataNotAvailable":{"name":"SDLResultVehicleDataNotAvailable","abstract":"

    The requested vehicle data is not available on this vehicle or is not published.

    "},"Constants.html#/c:@SDLResultRejected":{"name":"SDLResultRejected","abstract":"

    The requested command was rejected, e.g. because the mobile app is in background and cannot perform any HMI commands, or an HMI command (e.g. Speak) is rejected because a higher priority HMI command (e.g. Alert) is playing.

    "},"Constants.html#/c:@SDLResultAborted":{"name":"SDLResultAborted","abstract":"

    A command was aborted, e.g. due to user interaction (user pressed button), or an HMI command (e.g. Speak) is aborted because a higher priority HMI command (e.g. Alert) was requested.

    "},"Constants.html#/c:@SDLResultIgnored":{"name":"SDLResultIgnored","abstract":"

    A command was ignored, because the intended result is already in effect. For example, SetMediaClockTimer was used to pause the media clock although the clock is paused already.

    "},"Constants.html#/c:@SDLResultUnsupportedResource":{"name":"SDLResultUnsupportedResource","abstract":"

    A button that was requested for subscription is not supported under the current system.

    "},"Constants.html#/c:@SDLResultFileNotFound":{"name":"SDLResultFileNotFound","abstract":"

    A specified file could not be found on the head unit.

    "},"Constants.html#/c:@SDLResultGenericError":{"name":"SDLResultGenericError","abstract":"

    Provided data is valid but something went wrong in the lower layers.

    "},"Constants.html#/c:@SDLResultDisallowed":{"name":"SDLResultDisallowed","abstract":"

    RPC is not authorized in local policy table.

    "},"Constants.html#/c:@SDLResultUserDisallowed":{"name":"SDLResultUserDisallowed","abstract":"

    RPC is included in a functional group explicitly blocked by the user.

    "},"Constants.html#/c:@SDLResultTimedOut":{"name":"SDLResultTimedOut","abstract":"

    Overlay reached the maximum timeout and closed.

    "},"Constants.html#/c:@SDLResultCancelRoute":{"name":"SDLResultCancelRoute","abstract":"

    User selected to Cancel Route.

    "},"Constants.html#/c:@SDLResultCorruptedData":{"name":"SDLResultCorruptedData","abstract":"

    The data sent failed to pass CRC check in receiver end.

    "},"Constants.html#/c:@SDLResultTruncatedData":{"name":"SDLResultTruncatedData","abstract":"

    The RPC (e.g. ReadDID) executed successfully but the data exceeded the platform maximum threshold and thus, only part of the data is available.

    "},"Constants.html#/c:@SDLResultRetry":{"name":"SDLResultRetry","abstract":"

    The user interrupted the RPC (e.g. PerformAudioPassThru) and indicated to start over. Note, the app must issue the new RPC.

    "},"Constants.html#/c:@SDLResultWarnings":{"name":"SDLResultWarnings","abstract":"

    The RPC (e.g. SubscribeVehicleData) executed successfully but one or more items have a warning or failure.

    "},"Constants.html#/c:@SDLResultSaved":{"name":"SDLResultSaved","abstract":"

    The RPC (e.g. Slider) executed successfully and the user elected to save the current position / value.

    "},"Constants.html#/c:@SDLResultInvalidCertificate":{"name":"SDLResultInvalidCertificate","abstract":"

    The certificate provided during authentication is invalid.

    "},"Constants.html#/c:@SDLResultExpiredCertificate":{"name":"SDLResultExpiredCertificate","abstract":"

    The certificate provided during authentication is expired.

    "},"Constants.html#/c:@SDLResultResumeFailed":{"name":"SDLResultResumeFailed","abstract":"

    The provided hash ID does not match the hash of the current set of registered data or the core could not resume the previous data.

    "},"Constants.html#/c:@SDLResultDataNotAvailable":{"name":"SDLResultDataNotAvailable","abstract":"

    The requested data is not available on this vehicle or is not published for the connected app.

    "},"Constants.html#/c:@SDLResultReadOnly":{"name":"SDLResultReadOnly","abstract":"

    The requested data is read only thus cannot be change via remote control .

    "},"Constants.html#/c:@SDLResultEncryptionNeeded":{"name":"SDLResultEncryptionNeeded","abstract":"

    The RPC request needs to be encrypted.

    "},"Constants.html#/c:@SDLSamplingRate8KHZ":{"name":"SDLSamplingRate8KHZ","abstract":"

    Sampling rate of 8 kHz

    "},"Constants.html#/c:@SDLSamplingRate16KHZ":{"name":"SDLSamplingRate16KHZ","abstract":"

    Sampling rate of 16 kHz

    "},"Constants.html#/c:@SDLSamplingRate22KHZ":{"name":"SDLSamplingRate22KHZ","abstract":"

    Sampling rate of 22 kHz

    "},"Constants.html#/c:@SDLSamplingRate44KHZ":{"name":"SDLSamplingRate44KHZ","abstract":"

    Sampling rate of 44 kHz

    "},"Constants.html#/c:@SDLSeatMemoryActionTypeSave":{"name":"SDLSeatMemoryActionTypeSave","abstract":"

    @abstract Save current seat postions and settings to seat memory.

    "},"Constants.html#/c:@SDLSeatMemoryActionTypeRestore":{"name":"SDLSeatMemoryActionTypeRestore","abstract":"

    @abstract Restore / apply the seat memory settings to the current seat.

    "},"Constants.html#/c:@SDLSeatMemoryActionTypeNone":{"name":"SDLSeatMemoryActionTypeNone","abstract":"

    @abstract No action to be performed.

    "},"Constants.html#/c:@SDLServiceUpdatePublished":{"name":"SDLServiceUpdatePublished","abstract":"

    The service has just been published with the module and once activated to the primary service of its type, it will be ready for possible consumption.

    "},"Constants.html#/c:@SDLServiceUpdateRemoved":{"name":"SDLServiceUpdateRemoved","abstract":"

    The service has just been unpublished with the module and is no longer accessible.

    "},"Constants.html#/c:@SDLServiceUpdateActivated":{"name":"SDLServiceUpdateActivated","abstract":"

    The service is activated as the primary service of this type. All requests dealing with this service type will be handled by this service.

    "},"Constants.html#/c:@SDLServiceUpdateDeactivated":{"name":"SDLServiceUpdateDeactivated","abstract":"

    The service has been deactivated as the primary service of its type.

    "},"Constants.html#/c:@SDLServiceUpdateManifestUpdate":{"name":"SDLServiceUpdateManifestUpdate","abstract":"

    The service has updated its manifest. This could imply updated capabilities.

    "},"Constants.html#/c:@SDLSoftButtonTypeText":{"name":"SDLSoftButtonTypeText","abstract":"

    Text kind Softbutton

    "},"Constants.html#/c:@SDLSoftButtonTypeImage":{"name":"SDLSoftButtonTypeImage","abstract":"

    Image kind Softbutton

    "},"Constants.html#/c:@SDLSoftButtonTypeBoth":{"name":"SDLSoftButtonTypeBoth","abstract":"

    Both (Text & Image) kind Softbutton

    "},"Constants.html#/c:@SDLSpeechCapabilitiesText":{"name":"SDLSpeechCapabilitiesText","abstract":"

    The SDL platform can speak text phrases.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesSAPIPhonemes":{"name":"SDLSpeechCapabilitiesSAPIPhonemes","abstract":"

    The SDL platform can speak SAPI Phonemes.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesLHPlusPhonemes":{"name":"SDLSpeechCapabilitiesLHPlusPhonemes","abstract":"

    The SDL platform can speak LHPlus Phonemes.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesPrerecorded":{"name":"SDLSpeechCapabilitiesPrerecorded","abstract":"

    The SDL platform can speak Prerecorded indicators and prompts.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesSilence":{"name":"SDLSpeechCapabilitiesSilence","abstract":"

    The SDL platform can speak Silence.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesFile":{"name":"SDLSpeechCapabilitiesFile","abstract":"

    The SDL platform can play a file

    "},"Constants.html#/c:@SDLStaticIconNameAcceptCall":{"name":"SDLStaticIconNameAcceptCall","abstract":"

    Static icon accept call / active phone call in progress / initiate a phone call

    "},"Constants.html#/c:@SDLStaticIconNameAddWaypoint":{"name":"SDLStaticIconNameAddWaypoint","abstract":"

    Static icon add waypoint

    "},"Constants.html#/c:@SDLStaticIconNameAlbum":{"name":"SDLStaticIconNameAlbum","abstract":"

    Static icon album

    "},"Constants.html#/c:@SDLStaticIconNameAmbientLighting":{"name":"SDLStaticIconNameAmbientLighting","abstract":"

    Static icon ambient lighting

    "},"Constants.html#/c:@SDLStaticIconNameArrowNorth":{"name":"SDLStaticIconNameArrowNorth","abstract":"

    Static icon arrow - north

    "},"Constants.html#/c:@SDLStaticIconNameAudioMute":{"name":"SDLStaticIconNameAudioMute","abstract":"

    Static icon audio mute

    "},"Constants.html#/c:@SDLStaticIconNameAudiobookEpisode":{"name":"SDLStaticIconNameAudiobookEpisode","abstract":"

    Static icon audiobook episode

    "},"Constants.html#/c:@SDLStaticIconNameAudiobookNarrator":{"name":"SDLStaticIconNameAudiobookNarrator","abstract":"

    Static icon audiobook narrator

    "},"Constants.html#/c:@SDLStaticIconNameAuxillaryAudio":{"name":"SDLStaticIconNameAuxillaryAudio","abstract":"

    Static icon auxillary audio

    "},"Constants.html#/c:@SDLStaticIconNameBack":{"name":"SDLStaticIconNameBack","abstract":"

    Static icon back / return

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity0Of5":{"name":"SDLStaticIconNameBatteryCapacity0Of5","abstract":"

    Static icon battery capacity 0 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity1Of5":{"name":"SDLStaticIconNameBatteryCapacity1Of5","abstract":"

    Static icon battery capacity 1 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity2Of5":{"name":"SDLStaticIconNameBatteryCapacity2Of5","abstract":"

    Static icon battery capacity 2 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity3Of5":{"name":"SDLStaticIconNameBatteryCapacity3Of5","abstract":"

    Static icon battery capacity 3 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity4Of5":{"name":"SDLStaticIconNameBatteryCapacity4Of5","abstract":"

    Static icon battery capacity 4 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity5Of5":{"name":"SDLStaticIconNameBatteryCapacity5Of5","abstract":"

    Static icon battery capacity 5 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBluetoothAudioSource":{"name":"SDLStaticIconNameBluetoothAudioSource","abstract":"

    Static icon bluetooth audio source

    "},"Constants.html#/c:@SDLStaticIconNameBluetooth1":{"name":"SDLStaticIconNameBluetooth1","abstract":"

    Static icon bluetooth1

    "},"Constants.html#/c:@SDLStaticIconNameBluetooth2":{"name":"SDLStaticIconNameBluetooth2","abstract":"

    Static icon bluetooth2

    "},"Constants.html#/c:@SDLStaticIconNameBrowse":{"name":"SDLStaticIconNameBrowse","abstract":"

    Static icon browse

    "},"Constants.html#/c:@SDLStaticIconNameCellPhoneInRoamingMode":{"name":"SDLStaticIconNameCellPhoneInRoamingMode","abstract":"

    Static icon cell phone in roaming mode

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength0Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength0Of5Bars","abstract":"

    Static icon cell service signal strength 0 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength1Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength1Of5Bars","abstract":"

    Static icon cell service signal strength 1 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength2Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength2Of5Bars","abstract":"

    Static icon cell service signal strength 2 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength3Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength3Of5Bars","abstract":"

    Static icon cell service signal strength 3 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength4Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength4Of5Bars","abstract":"

    Static icon cell service signal strength 4 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength5Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength5Of5Bars","abstract":"

    Static icon cell service signal strength 5 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameChangeLaneLeft":{"name":"SDLStaticIconNameChangeLaneLeft","abstract":"

    Static icon change lane left

    "},"Constants.html#/c:@SDLStaticIconNameChangeLaneRight":{"name":"SDLStaticIconNameChangeLaneRight","abstract":"

    Static icon change lane right

    "},"Constants.html#/c:@SDLStaticIconNameCheckBoxChecked":{"name":"SDLStaticIconNameCheckBoxChecked","abstract":"

    Static icon check box checked

    "},"Constants.html#/c:@SDLStaticIconNameCheckBoxUnchecked":{"name":"SDLStaticIconNameCheckBoxUnchecked","abstract":"

    Static icon check box unchecked

    "},"Constants.html#/c:@SDLStaticIconNameClimate":{"name":"SDLStaticIconNameClimate","abstract":"

    Static icon climate

    "},"Constants.html#/c:@SDLStaticIconNameClock":{"name":"SDLStaticIconNameClock","abstract":"

    Static icon clock

    "},"Constants.html#/c:@SDLStaticIconNameCompose":{"name":"SDLStaticIconNameCompose","abstract":"

    Static icon compose (e.g. message)

    "},"Constants.html#/c:@SDLStaticIconNameContact":{"name":"SDLStaticIconNameContact","abstract":"

    Static icon contact / person

    "},"Constants.html#/c:@SDLStaticIconNameContinue":{"name":"SDLStaticIconNameContinue","abstract":"

    Static icon continue

    "},"Constants.html#/c:@SDLStaticIconNameDash":{"name":"SDLStaticIconNameDash","abstract":"

    Static icon dash / bullet point

    "},"Constants.html#/c:@SDLStaticIconNameDate":{"name":"SDLStaticIconNameDate","abstract":"

    Static icon date / calendar

    "},"Constants.html#/c:@SDLStaticIconNameDelete":{"name":"SDLStaticIconNameDelete","abstract":"

    Static icon delete/remove - trash

    "},"Constants.html#/c:@SDLStaticIconNameDestination":{"name":"SDLStaticIconNameDestination","abstract":"

    Static icon destination

    "},"Constants.html#/c:@SDLStaticIconNameDestinationFerryAhead":{"name":"SDLStaticIconNameDestinationFerryAhead","abstract":"

    Static icon destination ferry ahead

    "},"Constants.html#/c:@SDLStaticIconNameEbookmark":{"name":"SDLStaticIconNameEbookmark","abstract":"

    Static icon ebookmark (e.g. message, feed)

    "},"Constants.html#/c:@SDLStaticIconNameEmpty":{"name":"SDLStaticIconNameEmpty","abstract":"

    Static icon empty (i.e. no image)

    "},"Constants.html#/c:@SDLStaticIconNameEndCall":{"name":"SDLStaticIconNameEndCall","abstract":"

    Static icon end call / reject call

    "},"Constants.html#/c:@SDLStaticIconNameFail":{"name":"SDLStaticIconNameFail","abstract":"

    Static icon fail / X

    "},"Constants.html#/c:@SDLStaticIconNameFastForward30Secs":{"name":"SDLStaticIconNameFastForward30Secs","abstract":"

    Static icon fast forward 30 secs

    "},"Constants.html#/c:@SDLStaticIconNameFavoriteHeart":{"name":"SDLStaticIconNameFavoriteHeart","abstract":"

    Static icon favorite / heart

    "},"Constants.html#/c:@SDLStaticIconNameFavoriteStar":{"name":"SDLStaticIconNameFavoriteStar","abstract":"

    Static icon favorite / star

    "},"Constants.html#/c:@SDLStaticIconNameFaxNumber":{"name":"SDLStaticIconNameFaxNumber","abstract":"

    Static icon fax number

    "},"Constants.html#/c:@SDLStaticIconNameFilename":{"name":"SDLStaticIconNameFilename","abstract":"

    Static icon filename

    "},"Constants.html#/c:@SDLStaticIconNameFilter":{"name":"SDLStaticIconNameFilter","abstract":"

    Static icon filter / search

    "},"Constants.html#/c:@SDLStaticIconNameFolder":{"name":"SDLStaticIconNameFolder","abstract":"

    Static icon folder

    "},"Constants.html#/c:@SDLStaticIconNameFuelPrices":{"name":"SDLStaticIconNameFuelPrices","abstract":"

    Static icon fuel prices

    "},"Constants.html#/c:@SDLStaticIconNameFullMap":{"name":"SDLStaticIconNameFullMap","abstract":"

    Static icon full map

    "},"Constants.html#/c:@SDLStaticIconNameGenericPhoneNumber":{"name":"SDLStaticIconNameGenericPhoneNumber","abstract":"

    Static icon generic phone number

    "},"Constants.html#/c:@SDLStaticIconNameGenre":{"name":"SDLStaticIconNameGenre","abstract":"

    Static icon genre

    "},"Constants.html#/c:@SDLStaticIconNameGlobalKeyboard":{"name":"SDLStaticIconNameGlobalKeyboard","abstract":"

    Static icon global keyboard

    "},"Constants.html#/c:@SDLStaticIconNameHighwayExitInformation":{"name":"SDLStaticIconNameHighwayExitInformation","abstract":"

    Static icon highway exit information

    "},"Constants.html#/c:@SDLStaticIconNameHomePhoneNumber":{"name":"SDLStaticIconNameHomePhoneNumber","abstract":"

    Static icon home phone number

    "},"Constants.html#/c:@SDLStaticIconNameHyperlink":{"name":"SDLStaticIconNameHyperlink","abstract":"

    Static icon hyperlink

    "},"Constants.html#/c:@SDLStaticIconNameID3TagUnknown":{"name":"SDLStaticIconNameID3TagUnknown","abstract":"

    Static icon ID3 tag unknown

    "},"Constants.html#/c:@SDLStaticIconNameIncomingCalls":{"name":"SDLStaticIconNameIncomingCalls","abstract":"

    Static icon incoming calls (in list of phone calls)

    "},"Constants.html#/c:@SDLStaticIconNameInformation":{"name":"SDLStaticIconNameInformation","abstract":"

    Static icon information

    "},"Constants.html#/c:@SDLStaticIconNameIPodMediaSource":{"name":"SDLStaticIconNameIPodMediaSource","abstract":"

    Static icon IPOD media source

    "},"Constants.html#/c:@SDLStaticIconNameJoinCalls":{"name":"SDLStaticIconNameJoinCalls","abstract":"

    Static icon join calls

    "},"Constants.html#/c:@SDLStaticIconNameKeepLeft":{"name":"SDLStaticIconNameKeepLeft","abstract":"

    Static icon keep left

    "},"Constants.html#/c:@SDLStaticIconNameKeepRight":{"name":"SDLStaticIconNameKeepRight","abstract":"

    Static icon keep right

    "},"Constants.html#/c:@SDLStaticIconNameKey":{"name":"SDLStaticIconNameKey","abstract":"

    Static icon key / keycode

    "},"Constants.html#/c:@SDLStaticIconNameLeft":{"name":"SDLStaticIconNameLeft","abstract":"

    Static icon left

    "},"Constants.html#/c:@SDLStaticIconNameLeftArrow":{"name":"SDLStaticIconNameLeftArrow","abstract":"

    Static icon left arrow / back

    "},"Constants.html#/c:@SDLStaticIconNameLeftExit":{"name":"SDLStaticIconNameLeftExit","abstract":"

    Static icon left exit

    "},"Constants.html#/c:@SDLStaticIconNameLineInAudioSource":{"name":"SDLStaticIconNameLineInAudioSource","abstract":"

    Static icon LINE IN audio source

    "},"Constants.html#/c:@SDLStaticIconNameLocked":{"name":"SDLStaticIconNameLocked","abstract":"

    Static icon locked

    "},"Constants.html#/c:@SDLStaticIconNameMediaControlLeftArrow":{"name":"SDLStaticIconNameMediaControlLeftArrow","abstract":"

    Static icon media control - left arrow

    "},"Constants.html#/c:@SDLStaticIconNameMediaControlRecording":{"name":"SDLStaticIconNameMediaControlRecording","abstract":"

    Static icon media control - recording

    "},"Constants.html#/c:@SDLStaticIconNameMediaControlRightArrow":{"name":"SDLStaticIconNameMediaControlRightArrow","abstract":"

    Static icon media control - right arrow

    "},"Constants.html#/c:@SDLStaticIconNameMediaControlStop":{"name":"SDLStaticIconNameMediaControlStop","abstract":"

    Static icon media control - stop (e.g. streaming)

    "},"Constants.html#/c:@SDLStaticIconNameMicrophone":{"name":"SDLStaticIconNameMicrophone","abstract":"

    Static icon microphone

    "},"Constants.html#/c:@SDLStaticIconNameMissedCalls":{"name":"SDLStaticIconNameMissedCalls","abstract":"

    Static icon missed calls (in list of phone calls)

    "},"Constants.html#/c:@SDLStaticIconNameMobilePhoneNumber":{"name":"SDLStaticIconNameMobilePhoneNumber","abstract":"

    Static icon mobile phone number

    "},"Constants.html#/c:@SDLStaticIconNameMoveDown":{"name":"SDLStaticIconNameMoveDown","abstract":"

    Static icon move down / download

    "},"Constants.html#/c:@SDLStaticIconNameMoveUp":{"name":"SDLStaticIconNameMoveUp","abstract":"

    Static icon move up

    "},"Constants.html#/c:@SDLStaticIconNameMP3TagArtist":{"name":"SDLStaticIconNameMP3TagArtist","abstract":"

    Static icon MP3 tag artist

    "},"Constants.html#/c:@SDLStaticIconNameNavigation":{"name":"SDLStaticIconNameNavigation","abstract":"

    Static icon navigation / navigation settings

    "},"Constants.html#/c:@SDLStaticIconNameNavigationCurrentDirection":{"name":"SDLStaticIconNameNavigationCurrentDirection","abstract":"

    Static icon navigation current direction

    "},"Constants.html#/c:@SDLStaticIconNameNegativeRatingThumbsDown":{"name":"SDLStaticIconNameNegativeRatingThumbsDown","abstract":"

    Static icon negative rating - thumbs down

    "},"Constants.html#/c:@SDLStaticIconNameNew":{"name":"SDLStaticIconNameNew","abstract":"

    Static icon new/unread text message/email

    "},"Constants.html#/c:@SDLStaticIconNameOfficePhoneNumber":{"name":"SDLStaticIconNameOfficePhoneNumber","abstract":"

    Static icon office phone number / work phone number

    "},"Constants.html#/c:@SDLStaticIconNameOpened":{"name":"SDLStaticIconNameOpened","abstract":"

    Static icon opened/read text message/email

    "},"Constants.html#/c:@SDLStaticIconNameOrigin":{"name":"SDLStaticIconNameOrigin","abstract":"

    Static icon origin / nearby locale / current position

    "},"Constants.html#/c:@SDLStaticIconNameOutgoingCalls":{"name":"SDLStaticIconNameOutgoingCalls","abstract":"

    Static icon outgoing calls (in list of phone calls)

    "},"Constants.html#/c:@SDLStaticIconNamePause":{"name":"SDLStaticIconNamePause","abstract":"

    Static icon play / pause - pause active

    "},"Constants.html#/c:@SDLStaticIconNamePhoneCall1":{"name":"SDLStaticIconNamePhoneCall1","abstract":"

    Static icon phone call 1

    "},"Constants.html#/c:@SDLStaticIconNamePhoneCall2":{"name":"SDLStaticIconNamePhoneCall2","abstract":"

    Static icon phone call 2

    "},"Constants.html#/c:@SDLStaticIconNamePhoneDevice":{"name":"SDLStaticIconNamePhoneDevice","abstract":"

    Static icon phone device

    "},"Constants.html#/c:@SDLStaticIconNamePhonebook":{"name":"SDLStaticIconNamePhonebook","abstract":"

    Static icon phonebook

    "},"Constants.html#/c:@SDLStaticIconNamePhoto":{"name":"SDLStaticIconNamePhoto","abstract":"

    Static icon photo / picture

    "},"Constants.html#/c:@SDLStaticIconNamePlay":{"name":"SDLStaticIconNamePlay","abstract":"

    Static icon play / pause - play active

    "},"Constants.html#/c:@SDLStaticIconNamePlaylist":{"name":"SDLStaticIconNamePlaylist","abstract":"

    Static icon playlist

    "},"Constants.html#/c:@SDLStaticIconNamePopUp":{"name":"SDLStaticIconNamePopUp","abstract":"

    Static icon pop-up

    "},"Constants.html#/c:@SDLStaticIconNamePositiveRatingThumbsUp":{"name":"SDLStaticIconNamePositiveRatingThumbsUp","abstract":"

    Static icon positive rating - thumbs up

    "},"Constants.html#/c:@SDLStaticIconNamePower":{"name":"SDLStaticIconNamePower","abstract":"

    Static icon power

    "},"Constants.html#/c:@SDLStaticIconNamePrimaryPhone":{"name":"SDLStaticIconNamePrimaryPhone","abstract":"

    Static icon primary phone (favorite)

    "},"Constants.html#/c:@SDLStaticIconNameRadioButtonChecked":{"name":"SDLStaticIconNameRadioButtonChecked","abstract":"

    Static icon radio button checked

    "},"Constants.html#/c:@SDLStaticIconNameRadioButtonUnchecked":{"name":"SDLStaticIconNameRadioButtonUnchecked","abstract":"

    Static icon radio button unchecked

    "},"Constants.html#/c:@SDLStaticIconNameRecentCalls":{"name":"SDLStaticIconNameRecentCalls","abstract":"

    Static icon recent calls / history

    "},"Constants.html#/c:@SDLStaticIconNameRecentDestinations":{"name":"SDLStaticIconNameRecentDestinations","abstract":"

    Static icon recent destinations

    "},"Constants.html#/c:@SDLStaticIconNameRedo":{"name":"SDLStaticIconNameRedo","abstract":"

    Static icon redo

    "},"Constants.html#/c:@SDLStaticIconNameRefresh":{"name":"SDLStaticIconNameRefresh","abstract":"

    Static icon refresh

    "},"Constants.html#/c:@SDLStaticIconNameRemoteDiagnosticsCheckEngine":{"name":"SDLStaticIconNameRemoteDiagnosticsCheckEngine","abstract":"

    Static icon remote diagnostics - check engine

    "},"Constants.html#/c:@SDLStaticIconNameRendered911Assist":{"name":"SDLStaticIconNameRendered911Assist","abstract":"

    Static icon rendered 911 assist / emergency assistance

    "},"Constants.html#/c:@SDLStaticIconNameRepeat":{"name":"SDLStaticIconNameRepeat","abstract":"

    Static icon repeat

    "},"Constants.html#/c:@SDLStaticIconNameRepeatPlay":{"name":"SDLStaticIconNameRepeatPlay","abstract":"

    Static icon repeat play

    "},"Constants.html#/c:@SDLStaticIconNameReply":{"name":"SDLStaticIconNameReply","abstract":"

    Static icon reply

    "},"Constants.html#/c:@SDLStaticIconNameRewind30Secs":{"name":"SDLStaticIconNameRewind30Secs","abstract":"

    Static icon rewind 30 secs

    "},"Constants.html#/c:@SDLStaticIconNameRight":{"name":"SDLStaticIconNameRight","abstract":"

    Static icon right

    "},"Constants.html#/c:@SDLStaticIconNameRightExit":{"name":"SDLStaticIconNameRightExit","abstract":"

    Static icon right exit

    "},"Constants.html#/c:@SDLStaticIconNameRingtones":{"name":"SDLStaticIconNameRingtones","abstract":"

    Static icon ringtones

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand1":{"name":"SDLStaticIconNameRoundaboutLeftHand1","abstract":"

    Static icon roundabout left hand 1

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand2":{"name":"SDLStaticIconNameRoundaboutLeftHand2","abstract":"

    Static icon roundabout left hand 2

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand3":{"name":"SDLStaticIconNameRoundaboutLeftHand3","abstract":"

    Static icon roundabout left hand 3

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand4":{"name":"SDLStaticIconNameRoundaboutLeftHand4","abstract":"

    Static icon roundabout left hand 4

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand5":{"name":"SDLStaticIconNameRoundaboutLeftHand5","abstract":"

    Static icon roundabout left hand 5

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand6":{"name":"SDLStaticIconNameRoundaboutLeftHand6","abstract":"

    Static icon roundabout left hand 6

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand7":{"name":"SDLStaticIconNameRoundaboutLeftHand7","abstract":"

    Static icon roundabout left hand 7

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand1":{"name":"SDLStaticIconNameRoundaboutRightHand1","abstract":"

    Static icon roundabout right hand 1

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand2":{"name":"SDLStaticIconNameRoundaboutRightHand2","abstract":"

    Static icon roundabout right hand 2

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand3":{"name":"SDLStaticIconNameRoundaboutRightHand3","abstract":"

    Static icon roundabout right hand 3

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand4":{"name":"SDLStaticIconNameRoundaboutRightHand4","abstract":"

    Static icon roundabout right hand 4

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand5":{"name":"SDLStaticIconNameRoundaboutRightHand5","abstract":"

    Static icon roundabout right hand 5

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand6":{"name":"SDLStaticIconNameRoundaboutRightHand6","abstract":"

    Static icon roundabout right hand 6

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand7":{"name":"SDLStaticIconNameRoundaboutRightHand7","abstract":"

    Static icon roundabout right hand 7

    "},"Constants.html#/c:@SDLStaticIconNameRSS":{"name":"SDLStaticIconNameRSS","abstract":"

    Static icon RSS

    "},"Constants.html#/c:@SDLStaticIconNameSettings":{"name":"SDLStaticIconNameSettings","abstract":"

    Static icon settings / menu

    "},"Constants.html#/c:@SDLStaticIconNameSharpLeft":{"name":"SDLStaticIconNameSharpLeft","abstract":"

    Static icon sharp left

    "},"Constants.html#/c:@SDLStaticIconNameSharpRight":{"name":"SDLStaticIconNameSharpRight","abstract":"

    Static icon sharp right

    "},"Constants.html#/c:@SDLStaticIconNameShow":{"name":"SDLStaticIconNameShow","abstract":"

    Static icon show

    "},"Constants.html#/c:@SDLStaticIconNameShufflePlay":{"name":"SDLStaticIconNameShufflePlay","abstract":"

    Static icon shuffle play

    "},"Constants.html#/c:@SDLStaticIconNameSkiPlaces":{"name":"SDLStaticIconNameSkiPlaces","abstract":"

    Static icon ski places / elevation / altitude

    "},"Constants.html#/c:@SDLStaticIconNameSlightLeft":{"name":"SDLStaticIconNameSlightLeft","abstract":"

    Static icon slight left

    "},"Constants.html#/c:@SDLStaticIconNameSlightRight":{"name":"SDLStaticIconNameSlightRight","abstract":"

    Static icon slight right

    "},"Constants.html#/c:@SDLStaticIconNameSmartphone":{"name":"SDLStaticIconNameSmartphone","abstract":"

    Static icon smartphone

    "},"Constants.html#/c:@SDLStaticIconNameSortList":{"name":"SDLStaticIconNameSortList","abstract":"

    Static icon sort list

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber0":{"name":"SDLStaticIconNameSpeedDialNumbersNumber0","abstract":"

    Static icon speed dial numbers - number 0

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber1":{"name":"SDLStaticIconNameSpeedDialNumbersNumber1","abstract":"

    Static icon speed dial numbers - number 1

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber2":{"name":"SDLStaticIconNameSpeedDialNumbersNumber2","abstract":"

    Static icon speed dial numbers - number 2

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber3":{"name":"SDLStaticIconNameSpeedDialNumbersNumber3","abstract":"

    Static icon speed dial numbers - number 3

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber4":{"name":"SDLStaticIconNameSpeedDialNumbersNumber4","abstract":"

    Static icon speed dial numbers - number 4

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber5":{"name":"SDLStaticIconNameSpeedDialNumbersNumber5","abstract":"

    Static icon speed dial numbers - number 5

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber6":{"name":"SDLStaticIconNameSpeedDialNumbersNumber6","abstract":"

    Static icon speed dial numbers - number 6

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber7":{"name":"SDLStaticIconNameSpeedDialNumbersNumber7","abstract":"

    Static icon speed dial numbers - number 7

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber8":{"name":"SDLStaticIconNameSpeedDialNumbersNumber8","abstract":"

    Static icon speed dial numbers - number 8

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber9":{"name":"SDLStaticIconNameSpeedDialNumbersNumber9","abstract":"

    Static icon speed dial numbers - number 9

    "},"Constants.html#/c:@SDLStaticIconNameSuccess":{"name":"SDLStaticIconNameSuccess","abstract":"

    Static icon success / check

    "},"Constants.html#/c:@SDLStaticIconNameTrackTitle":{"name":"SDLStaticIconNameTrackTitle","abstract":"

    Static icon track title / song title

    "},"Constants.html#/c:@SDLStaticIconNameTrafficReport":{"name":"SDLStaticIconNameTrafficReport","abstract":"

    Static icon traffic report

    "},"Constants.html#/c:@SDLStaticIconNameTurnList":{"name":"SDLStaticIconNameTurnList","abstract":"

    Static icon turn list

    "},"Constants.html#/c:@SDLStaticIconNameUTurnLeftTraffic":{"name":"SDLStaticIconNameUTurnLeftTraffic","abstract":"

    Static icon u-turn left traffic

    "},"Constants.html#/c:@SDLStaticIconNameUTurnRightTraffic":{"name":"SDLStaticIconNameUTurnRightTraffic","abstract":"

    Static icon u-turn right traffic

    "},"Constants.html#/c:@SDLStaticIconNameUndo":{"name":"SDLStaticIconNameUndo","abstract":"

    Static icon undo

    "},"Constants.html#/c:@SDLStaticIconNameUnlocked":{"name":"SDLStaticIconNameUnlocked","abstract":"

    Static icon unlocked

    "},"Constants.html#/c:@SDLStaticIconNameUSBMediaAudioSource":{"name":"SDLStaticIconNameUSBMediaAudioSource","abstract":"

    Static icon USB media audio source

    "},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo1":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo1","abstract":"

    Static icon voice control scrollbar - list item no. 1

    "},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo2":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo2","abstract":"

    Static icon voice control scrollbar - list item no. 2

    "},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo3":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo3","abstract":"

    Static icon voice control scrollbar - list item no. 3

    "},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo4":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo4","abstract":"

    Static icon voice control scrollbar - list item no. 4

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionFailed":{"name":"SDLStaticIconNameVoiceRecognitionFailed","abstract":"

    Static icon voice recognition - failed

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionPause":{"name":"SDLStaticIconNameVoiceRecognitionPause","abstract":"

    Static icon voice recognition - pause

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSuccessful":{"name":"SDLStaticIconNameVoiceRecognitionSuccessful","abstract":"

    Static icon voice recognition - successful

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemActive":{"name":"SDLStaticIconNameVoiceRecognitionSystemActive","abstract":"

    Static icon voice recognition - system active

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemListening":{"name":"SDLStaticIconNameVoiceRecognitionSystemListening","abstract":"

    Static icon voice recognition - system listening

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionTryAgain":{"name":"SDLStaticIconNameVoiceRecognitionTryAgain","abstract":"

    Static icon voice recognition - try again

    "},"Constants.html#/c:@SDLStaticIconNameWarning":{"name":"SDLStaticIconNameWarning","abstract":"

    Static icon warning / safety alert

    "},"Constants.html#/c:@SDLStaticIconNameWeather":{"name":"SDLStaticIconNameWeather","abstract":"

    Static icon weather

    "},"Constants.html#/c:@SDLStaticIconNameWifiFull":{"name":"SDLStaticIconNameWifiFull","abstract":"

    Static icon wifi full

    "},"Constants.html#/c:@SDLStaticIconNameZoomIn":{"name":"SDLStaticIconNameZoomIn","abstract":"

    Static icon zoom in

    "},"Constants.html#/c:@SDLStaticIconNameZoomOut":{"name":"SDLStaticIconNameZoomOut","abstract":"

    Static icon zoom out

    "},"Constants.html#/c:@SDLVideoStreamDidStartNotification":{"name":"SDLVideoStreamDidStartNotification","abstract":"

    Name of video stream start notification

    "},"Constants.html#/c:@SDLVideoStreamDidStopNotification":{"name":"SDLVideoStreamDidStopNotification","abstract":"

    Name of video stream stop notification

    "},"Constants.html#/c:@SDLVideoStreamSuspendedNotification":{"name":"SDLVideoStreamSuspendedNotification","abstract":"

    Name of video stream suspended notification

    "},"Constants.html#/c:@SDLAudioStreamDidStartNotification":{"name":"SDLAudioStreamDidStartNotification","abstract":"

    Name of audio stream start notification

    "},"Constants.html#/c:@SDLAudioStreamDidStopNotification":{"name":"SDLAudioStreamDidStopNotification","abstract":"

    Name of audio stream stop notification

    "},"Constants.html#/c:@SDLLockScreenManagerWillPresentLockScreenViewController":{"name":"SDLLockScreenManagerWillPresentLockScreenViewController","abstract":"

    Lockscreen will present notification

    "},"Constants.html#/c:@SDLLockScreenManagerDidPresentLockScreenViewController":{"name":"SDLLockScreenManagerDidPresentLockScreenViewController","abstract":"

    Lockscreen did present notification

    "},"Constants.html#/c:@SDLLockScreenManagerWillDismissLockScreenViewController":{"name":"SDLLockScreenManagerWillDismissLockScreenViewController","abstract":"

    Lockscreen will dismiss notification

    "},"Constants.html#/c:@SDLLockScreenManagerDidDismissLockScreenViewController":{"name":"SDLLockScreenManagerDidDismissLockScreenViewController","abstract":"

    Lockscreen did dismiss notification

    "},"Constants.html#/c:@SDLVideoStreamManagerStateStopped":{"name":"SDLVideoStreamManagerStateStopped","abstract":"

    Streaming state stopped

    "},"Constants.html#/c:@SDLVideoStreamManagerStateStarting":{"name":"SDLVideoStreamManagerStateStarting","abstract":"

    Streaming state starting

    "},"Constants.html#/c:@SDLVideoStreamManagerStateReady":{"name":"SDLVideoStreamManagerStateReady","abstract":"

    Streaming state ready

    "},"Constants.html#/c:@SDLVideoStreamManagerStateSuspended":{"name":"SDLVideoStreamManagerStateSuspended","abstract":"

    Streaming state suspended

    "},"Constants.html#/c:@SDLVideoStreamManagerStateShuttingDown":{"name":"SDLVideoStreamManagerStateShuttingDown","abstract":"

    Streaming state shutting down

    "},"Constants.html#/c:@SDLAudioStreamManagerStateStopped":{"name":"SDLAudioStreamManagerStateStopped","abstract":"

    Audio state stopped

    "},"Constants.html#/c:@SDLAudioStreamManagerStateStarting":{"name":"SDLAudioStreamManagerStateStarting","abstract":"

    Audio state starting

    "},"Constants.html#/c:@SDLAudioStreamManagerStateReady":{"name":"SDLAudioStreamManagerStateReady","abstract":"

    Audio state ready

    "},"Constants.html#/c:@SDLAudioStreamManagerStateShuttingDown":{"name":"SDLAudioStreamManagerStateShuttingDown","abstract":"

    Audio state shutting down

    "},"Constants.html#/c:@SDLAppStateInactive":{"name":"SDLAppStateInactive","abstract":"

    App state inactive

    "},"Constants.html#/c:@SDLAppStateActive":{"name":"SDLAppStateActive","abstract":"

    App state active

    "},"Constants.html#/c:@SDLSupportedSeatDriver":{"name":"SDLSupportedSeatDriver","abstract":"

    Save current seat positions and settings to seat memory.

    "},"Constants.html#/c:@SDLSupportedSeatFrontPassenger":{"name":"SDLSupportedSeatFrontPassenger","abstract":"

    Restore / apply the seat memory settings to the current seat.

    "},"Constants.html#/c:@SDLSystemActionDefaultAction":{"name":"SDLSystemActionDefaultAction","abstract":"

    A default soft button action

    "},"Constants.html#/c:@SDLSystemActionStealFocus":{"name":"SDLSystemActionStealFocus","abstract":"

    An action causing your app to steal HMI focus

    "},"Constants.html#/c:@SDLSystemActionKeepContext":{"name":"SDLSystemActionKeepContext","abstract":"

    An action causing you to keep context

    "},"Constants.html#/c:@SDLSystemCapabilityTypeAppServices":{"name":"SDLSystemCapabilityTypeAppServices","abstract":"

    The app services capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypeNavigation":{"name":"SDLSystemCapabilityTypeNavigation","abstract":"

    The navigation capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypePhoneCall":{"name":"SDLSystemCapabilityTypePhoneCall","abstract":"

    The phone call capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypeVideoStreaming":{"name":"SDLSystemCapabilityTypeVideoStreaming","abstract":"

    The video streaming capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypeRemoteControl":{"name":"SDLSystemCapabilityTypeRemoteControl","abstract":"

    The remote control capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypeSeatLocation":{"name":"SDLSystemCapabilityTypeSeatLocation","abstract":"

    Contains information about the locations of each seat

    "},"Constants.html#/c:@SDLSystemCapabilityTypeDisplays":{"name":"SDLSystemCapabilityTypeDisplays","abstract":"

    The Display type capability

    "},"Constants.html#/c:@SDLSystemContextMain":{"name":"SDLSystemContextMain","abstract":"

    No user interaction (user-initiated or app-initiated) is in progress.

    "},"Constants.html#/c:@SDLSystemContextVoiceRecognitionSession":{"name":"SDLSystemContextVoiceRecognitionSession","abstract":"

    VR-oriented, user-initiated or app-initiated interaction is in-progress.

    "},"Constants.html#/c:@SDLSystemContextMenu":{"name":"SDLSystemContextMenu","abstract":"

    Menu-oriented, user-initiated or app-initiated interaction is in-progress.

    "},"Constants.html#/c:@SDLSystemContextHMIObscured":{"name":"SDLSystemContextHMIObscured","abstract":"

    The app’s display HMI is currently being obscured by either a system or other app’s overlay.

    "},"Constants.html#/c:@SDLSystemContextAlert":{"name":"SDLSystemContextAlert","abstract":"

    Broadcast only to whichever app has an alert currently being displayed.

    "},"Constants.html#/c:@SDLTBTStateRouteUpdateRequest":{"name":"SDLTBTStateRouteUpdateRequest","abstract":"

    The route should be updated

    "},"Constants.html#/c:@SDLTBTStateRouteAccepted":{"name":"SDLTBTStateRouteAccepted","abstract":"

    The route is accepted

    "},"Constants.html#/c:@SDLTBTStateRouteRefused":{"name":"SDLTBTStateRouteRefused","abstract":"

    The route is refused

    "},"Constants.html#/c:@SDLTBTStateRouteCancelled":{"name":"SDLTBTStateRouteCancelled","abstract":"

    The route is cancelled

    "},"Constants.html#/c:@SDLTBTStateETARequest":{"name":"SDLTBTStateETARequest","abstract":"

    The route should update its Estimated Time of Arrival

    "},"Constants.html#/c:@SDLTBTStateNextTurnRequest":{"name":"SDLTBTStateNextTurnRequest","abstract":"

    The route should update its next turn

    "},"Constants.html#/c:@SDLTBTStateRouteStatusRequest":{"name":"SDLTBTStateRouteStatusRequest","abstract":"

    The route should update its status

    "},"Constants.html#/c:@SDLTBTStateRouteSummaryRequest":{"name":"SDLTBTStateRouteSummaryRequest","abstract":"

    The route update its summary

    "},"Constants.html#/c:@SDLTBTStateTripStatusRequest":{"name":"SDLTBTStateTripStatusRequest","abstract":"

    The route should update the trip’s status

    "},"Constants.html#/c:@SDLTBTStateRouteUpdateRequestTimeout":{"name":"SDLTBTStateRouteUpdateRequestTimeout","abstract":"

    The route update timed out

    "},"Constants.html#/c:@SDLTPMSUnknown":{"name":"SDLTPMSUnknown","abstract":"

    If set the status of the tire is not known.

    "},"Constants.html#/c:@SDLTPMSSystemFault":{"name":"SDLTPMSSystemFault","abstract":"

    TPMS does not function.

    "},"Constants.html#/c:@SDLTPMSSensorFault":{"name":"SDLTPMSSensorFault","abstract":"

    The sensor of the tire does not function.

    "},"Constants.html#/c:@SDLTPMSLow":{"name":"SDLTPMSLow","abstract":"

    TPMS is reporting a low tire pressure for the tire.

    "},"Constants.html#/c:@SDLTPMSSystemActive":{"name":"SDLTPMSSystemActive","abstract":"

    TPMS is active and the tire pressure is monitored.

    "},"Constants.html#/c:@SDLTPMSTrain":{"name":"SDLTPMSTrain","abstract":"

    TPMS is reporting that the tire must be trained.

    "},"Constants.html#/c:@SDLTPMSTrainingComplete":{"name":"SDLTPMSTrainingComplete","abstract":"

    TPMS reports the training for the tire is completed.

    "},"Constants.html#/c:@SDLTPMSNotTrained":{"name":"SDLTPMSNotTrained","abstract":"

    TPMS reports the tire is not trained.

    "},"Constants.html#/c:@SDLTemperatureUnitCelsius":{"name":"SDLTemperatureUnitCelsius","abstract":"

    Reflects the current HMI setting for temperature unit in Celsius

    "},"Constants.html#/c:@SDLTemperatureUnitFahrenheit":{"name":"SDLTemperatureUnitFahrenheit","abstract":"

    Reflects the current HMI setting for temperature unit in Fahrenheit

    "},"Constants.html#/c:@SDLTextAlignmentLeft":{"name":"SDLTextAlignmentLeft","abstract":"

    Text aligned left.

    "},"Constants.html#/c:@SDLTextAlignmentRight":{"name":"SDLTextAlignmentRight","abstract":"

    Text aligned right.

    "},"Constants.html#/c:@SDLTextAlignmentCenter":{"name":"SDLTextAlignmentCenter","abstract":"

    Text aligned centered.

    "},"Constants.html#/c:@SDLTextFieldNameMainField1":{"name":"SDLTextFieldNameMainField1","abstract":"

    The first line of the first set of main fields of the persistent display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMainField2":{"name":"SDLTextFieldNameMainField2","abstract":"

    The second line of the first set of main fields of the persistent display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMainField3":{"name":"SDLTextFieldNameMainField3","abstract":"

    The first line of the second set of main fields of the persistent display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMainField4":{"name":"SDLTextFieldNameMainField4"},"Constants.html#/c:@SDLTextFieldNameTemplateTitle":{"name":"SDLTextFieldNameTemplateTitle","abstract":"

    The title line of the persistent display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameStatusBar":{"name":"SDLTextFieldNameStatusBar","abstract":"

    The status bar on the NGN display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMediaClock":{"name":"SDLTextFieldNameMediaClock","abstract":"

    Text value for MediaClock field. Must be properly formatted according to MediaClockFormat. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMediaTrack":{"name":"SDLTextFieldNameMediaTrack","abstract":"

    The track field of NGN type ACMs. This field is only available for media applications on a NGN display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameAlertText1":{"name":"SDLTextFieldNameAlertText1","abstract":"

    The first line of the alert text field. Applies to SDLAlert.

    "},"Constants.html#/c:@SDLTextFieldNameAlertText2":{"name":"SDLTextFieldNameAlertText2","abstract":"

    The second line of the alert text field. Applies to SDLAlert.

    "},"Constants.html#/c:@SDLTextFieldNameAlertText3":{"name":"SDLTextFieldNameAlertText3","abstract":"

    The third line of the alert text field. Applies to SDLAlert.

    "},"Constants.html#/c:@SDLTextFieldNameScrollableMessageBody":{"name":"SDLTextFieldNameScrollableMessageBody","abstract":"

    Long form body of text that can include newlines and tabs. Applies to SDLScrollableMessage.

    "},"Constants.html#/c:@SDLTextFieldNameInitialInteractionText":{"name":"SDLTextFieldNameInitialInteractionText","abstract":"

    First line suggestion for a user response (in the case of VR enabled interaction).

    "},"Constants.html#/c:@SDLTextFieldNameNavigationText1":{"name":"SDLTextFieldNameNavigationText1","abstract":"

    First line of navigation text.

    "},"Constants.html#/c:@SDLTextFieldNameNavigationText2":{"name":"SDLTextFieldNameNavigationText2","abstract":"

    Second line of navigation text.

    "},"Constants.html#/c:@SDLTextFieldNameETA":{"name":"SDLTextFieldNameETA","abstract":"

    Estimated Time of Arrival time for navigation.

    "},"Constants.html#/c:@SDLTextFieldNameTotalDistance":{"name":"SDLTextFieldNameTotalDistance","abstract":"

    Total distance to destination for navigation.

    "},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText1":{"name":"SDLTextFieldNameAudioPassThruDisplayText1","abstract":"

    First line of text for audio pass thru.

    "},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText2":{"name":"SDLTextFieldNameAudioPassThruDisplayText2","abstract":"

    Second line of text for audio pass thru.

    "},"Constants.html#/c:@SDLTextFieldNameSliderHeader":{"name":"SDLTextFieldNameSliderHeader","abstract":"

    Header text for slider.

    "},"Constants.html#/c:@SDLTextFieldNameSliderFooter":{"name":"SDLTextFieldNameSliderFooter","abstract":"

    Footer text for slider

    "},"Constants.html#/c:@SDLTextFieldNameMenuName":{"name":"SDLTextFieldNameMenuName","abstract":"

    Primary text for SDLChoice

    "},"Constants.html#/c:@SDLTextFieldNameSecondaryText":{"name":"SDLTextFieldNameSecondaryText","abstract":"

    Secondary text for SDLChoice

    "},"Constants.html#/c:@SDLTextFieldNameTertiaryText":{"name":"SDLTextFieldNameTertiaryText","abstract":"

    Tertiary text for SDLChoice

    "},"Constants.html#/c:@SDLTextFieldNameMenuTitle":{"name":"SDLTextFieldNameMenuTitle","abstract":"

    Optional text to label an app menu button (for certain touchscreen platforms)

    "},"Constants.html#/c:@SDLTextFieldNameLocationName":{"name":"SDLTextFieldNameLocationName","abstract":"

    Optional name / title of intended location for SDLSendLocation

    "},"Constants.html#/c:@SDLTextFieldNameLocationDescription":{"name":"SDLTextFieldNameLocationDescription","abstract":"

    Optional description of intended location / establishment (if applicable) for SDLSendLocation

    "},"Constants.html#/c:@SDLTextFieldNameAddressLines":{"name":"SDLTextFieldNameAddressLines","abstract":"

    Optional location address (if applicable) for SDLSendLocation

    "},"Constants.html#/c:@SDLTextFieldNamePhoneNumber":{"name":"SDLTextFieldNamePhoneNumber","abstract":"

    Optional hone number of intended location / establishment (if applicable) for SDLSendLocation

    "},"Constants.html#/c:@SDLTimerModeUp":{"name":"SDLTimerModeUp","abstract":"

    The timer should count up.

    "},"Constants.html#/c:@SDLTimerModeDown":{"name":"SDLTimerModeDown","abstract":"

    The timer should count down.

    "},"Constants.html#/c:@SDLTimerModeNone":{"name":"SDLTimerModeNone","abstract":"

    The timer should not count.

    "},"Constants.html#/c:@SDLTouchTypeBegin":{"name":"SDLTouchTypeBegin","abstract":"

    The touch is the beginning of a finger pressed on the display.

    "},"Constants.html#/c:@SDLTouchTypeMove":{"name":"SDLTouchTypeMove","abstract":"

    The touch is the movement of a finger pressed on the display.

    "},"Constants.html#/c:@SDLTouchTypeEnd":{"name":"SDLTouchTypeEnd","abstract":"

    The touch is the ending of a finger pressed on the display.

    "},"Constants.html#/c:@SDLTouchTypeCancel":{"name":"SDLTouchTypeCancel","abstract":"

    The touch is the cancellation of a finger pressed on the display.

    "},"Constants.html#/c:@SDLTriggerSourceMenu":{"name":"SDLTriggerSourceMenu","abstract":"

    Selection made via menu

    "},"Constants.html#/c:@SDLTriggerSourceVoiceRecognition":{"name":"SDLTriggerSourceVoiceRecognition","abstract":"

    Selection made via Voice session

    "},"Constants.html#/c:@SDLTriggerSourceKeyboard":{"name":"SDLTriggerSourceKeyboard","abstract":"

    Selection made via Keyboard

    "},"Constants.html#/c:@SDLTurnSignalOff":{"name":"SDLTurnSignalOff","abstract":"

    Turn signal is OFF

    "},"Constants.html#/c:@SDLTurnSignalLeft":{"name":"SDLTurnSignalLeft","abstract":"

    Left turn signal is on

    "},"Constants.html#/c:@SDLTurnSignalRight":{"name":"SDLTurnSignalRight","abstract":"

    Right turn signal is on

    "},"Constants.html#/c:@SDLTurnSignalBoth":{"name":"SDLTurnSignalBoth","abstract":"

    Both signals (left and right) are on

    "},"Constants.html#/c:@SDLUpdateModeCountUp":{"name":"SDLUpdateModeCountUp","abstract":"

    Starts the media clock timer counting upward, in increments of 1 second.

    "},"Constants.html#/c:@SDLUpdateModeCountDown":{"name":"SDLUpdateModeCountDown","abstract":"

    Starts the media clock timer counting downward, in increments of 1 second.

    "},"Constants.html#/c:@SDLUpdateModePause":{"name":"SDLUpdateModePause","abstract":"

    Pauses the media clock timer.

    "},"Constants.html#/c:@SDLUpdateModeResume":{"name":"SDLUpdateModeResume","abstract":"

    Resumes the media clock timer. The timer resumes counting in whatever mode was in effect before pausing (i.e. COUNTUP or COUNTDOWN).

    "},"Constants.html#/c:@SDLUpdateModeClear":{"name":"SDLUpdateModeClear","abstract":"

    Clear the media clock timer.

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveNotConfirmed","abstract":"

    Inactive not confirmed

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveConfirmed","abstract":"

    Inactive confirmed

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusActiveNotConfirmed","abstract":"

    Active not confirmed

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveConfirmed":{"name":"SDLVehicleDataActiveStatusActiveConfirmed","abstract":"

    Active confirmed

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusFault":{"name":"SDLVehicleDataActiveStatusFault","abstract":"

    Fault

    "},"Constants.html#/c:@SDLVehicleDataEventStatusNoEvent":{"name":"SDLVehicleDataEventStatusNoEvent","abstract":"

    No event

    "},"Constants.html#/c:@SDLVehicleDataEventStatusNo":{"name":"SDLVehicleDataEventStatusNo","abstract":"

    The event is a No status

    "},"Constants.html#/c:@SDLVehicleDataEventStatusYes":{"name":"SDLVehicleDataEventStatusYes","abstract":"

    The event is a Yes status

    "},"Constants.html#/c:@SDLVehicleDataEventStatusNotSupported":{"name":"SDLVehicleDataEventStatusNotSupported","abstract":"

    Vehicle data event is not supported

    "},"Constants.html#/c:@SDLVehicleDataEventStatusFault":{"name":"SDLVehicleDataEventStatusFault","abstract":"

    The event is a Fault status

    "},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotSupported":{"name":"SDLVehicleDataNotificationStatusNotSupported","abstract":"

    The vehicle data notification status is not supported

    "},"Constants.html#/c:@SDLVehicleDataNotificationStatusNormal":{"name":"SDLVehicleDataNotificationStatusNormal","abstract":"

    The vehicle data notification status is normal

    "},"Constants.html#/c:@SDLVehicleDataNotificationStatusActive":{"name":"SDLVehicleDataNotificationStatusActive","abstract":"

    The vehicle data notification status is active

    "},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotUsed":{"name":"SDLVehicleDataNotificationStatusNotUsed","abstract":"

    The vehicle data notification status is not used

    "},"Constants.html#/c:@SDLVehicleDataResultCodeSuccess":{"name":"SDLVehicleDataResultCodeSuccess","abstract":"

    Individual vehicle data item / DTC / DID request or subscription successful

    "},"Constants.html#/c:@SDLVehicleDataResultCodeTruncatedData":{"name":"SDLVehicleDataResultCodeTruncatedData","abstract":"

    DTC / DID request successful, however, not all active DTCs or full contents of DID location available

    "},"Constants.html#/c:@SDLVehicleDataResultCodeDisallowed":{"name":"SDLVehicleDataResultCodeDisallowed","abstract":"

    This vehicle data item is not allowed for this app by SDL

    "},"Constants.html#/c:@SDLVehicleDataResultCodeUserDisallowed":{"name":"SDLVehicleDataResultCodeUserDisallowed","abstract":"

    The user has not granted access to this type of vehicle data item at this time

    "},"Constants.html#/c:@SDLVehicleDataResultCodeInvalidId":{"name":"SDLVehicleDataResultCodeInvalidId","abstract":"

    The ECU ID referenced is not a valid ID on the bus / system

    "},"Constants.html#/c:@SDLVehicleDataResultCodeVehicleDataNotAvailable":{"name":"SDLVehicleDataResultCodeVehicleDataNotAvailable","abstract":"

    The requested vehicle data item / DTC / DID is not currently available or responding on the bus / system

    "},"Constants.html#/c:@SDLVehicleDataResultCodeDataAlreadySubscribed":{"name":"SDLVehicleDataResultCodeDataAlreadySubscribed","abstract":"

    The vehicle data item is already subscribed

    "},"Constants.html#/c:@SDLVehicleDataResultCodeDataNotSubscribed":{"name":"SDLVehicleDataResultCodeDataNotSubscribed","abstract":"

    The vehicle data item cannot be unsubscribed because it is not currently subscribed

    "},"Constants.html#/c:@SDLVehicleDataResultCodeIgnored":{"name":"SDLVehicleDataResultCodeIgnored","abstract":"

    The request for this item is ignored because it is already in progress

    "},"Constants.html#/c:@SDLVehicleDataStatusNoDataExists":{"name":"SDLVehicleDataStatusNoDataExists","abstract":"

    No data avaliable

    "},"Constants.html#/c:@SDLVehicleDataStatusOff":{"name":"SDLVehicleDataStatusOff","abstract":"

    The status is Off

    "},"Constants.html#/c:@SDLVehicleDataStatusOn":{"name":"SDLVehicleDataStatusOn","abstract":"

    The status is On

    "},"Constants.html#/c:@SDLVehicleDataTypeGPS":{"name":"SDLVehicleDataTypeGPS","abstract":"

    GPS vehicle data

    "},"Constants.html#/c:@SDLVehicleDataTypeSpeed":{"name":"SDLVehicleDataTypeSpeed","abstract":"

    Vehicle speed data

    "},"Constants.html#/c:@SDLVehicleDataTypeRPM":{"name":"SDLVehicleDataTypeRPM","abstract":"

    Vehicle RPM data

    "},"Constants.html#/c:@SDLVehicleDataTypeFuelLevel":{"name":"SDLVehicleDataTypeFuelLevel","abstract":"

    Vehicle fuel level data

    "},"Constants.html#/c:@SDLVehicleDataTypeFuelLevelState":{"name":"SDLVehicleDataTypeFuelLevelState","abstract":"

    Vehicle fuel level state data

    "},"Constants.html#/c:@SDLVehicleDataTypeFuelConsumption":{"name":"SDLVehicleDataTypeFuelConsumption","abstract":"

    Vehicle fuel consumption data

    "},"Constants.html#/c:@SDLVehicleDataTypeExternalTemperature":{"name":"SDLVehicleDataTypeExternalTemperature","abstract":"

    Vehicle external temperature data

    "},"Constants.html#/c:@SDLVehicleDataTypeVIN":{"name":"SDLVehicleDataTypeVIN","abstract":"

    Vehicle VIN data

    "},"Constants.html#/c:@SDLVehicleDataTypePRNDL":{"name":"SDLVehicleDataTypePRNDL","abstract":"

    Vehicle PRNDL data

    "},"Constants.html#/c:@SDLVehicleDataTypeTirePressure":{"name":"SDLVehicleDataTypeTirePressure","abstract":"

    Vehicle tire pressure data

    "},"Constants.html#/c:@SDLVehicleDataTypeOdometer":{"name":"SDLVehicleDataTypeOdometer","abstract":"

    Vehicle odometer data

    "},"Constants.html#/c:@SDLVehicleDataTypeBeltStatus":{"name":"SDLVehicleDataTypeBeltStatus","abstract":"

    Vehicle belt status data

    "},"Constants.html#/c:@SDLVehicleDataTypeBodyInfo":{"name":"SDLVehicleDataTypeBodyInfo","abstract":"

    Vehicle body info data

    "},"Constants.html#/c:@SDLVehicleDataTypeDeviceStatus":{"name":"SDLVehicleDataTypeDeviceStatus","abstract":"

    Vehicle device status data

    "},"Constants.html#/c:@SDLVehicleDataTypeECallInfo":{"name":"SDLVehicleDataTypeECallInfo","abstract":"

    Vehicle emergency call info data

    "},"Constants.html#/c:@SDLVehicleDataTypeFuelRange":{"name":"SDLVehicleDataTypeFuelRange","abstract":"

    Vehicle fuel range data

    "},"Constants.html#/c:@SDLVehicleDataTypeAirbagStatus":{"name":"SDLVehicleDataTypeAirbagStatus","abstract":"

    Vehicle airbag status data

    "},"Constants.html#/c:@SDLVehicleDataTypeEmergencyEvent":{"name":"SDLVehicleDataTypeEmergencyEvent","abstract":"

    Vehicle emergency event info

    "},"Constants.html#/c:@SDLVehicleDataTypeClusterModeStatus":{"name":"SDLVehicleDataTypeClusterModeStatus","abstract":"

    Vehicle cluster mode status data

    "},"Constants.html#/c:@SDLVehicleDataTypeMyKey":{"name":"SDLVehicleDataTypeMyKey","abstract":"

    Vehicle MyKey data

    "},"Constants.html#/c:@SDLVehicleDataTypeBraking":{"name":"SDLVehicleDataTypeBraking","abstract":"

    Vehicle braking data

    "},"Constants.html#/c:@SDLVehicleDataTypeWiperStatus":{"name":"SDLVehicleDataTypeWiperStatus","abstract":"

    Vehicle wiper status data

    "},"Constants.html#/c:@SDLVehicleDataTypeHeadlampStatus":{"name":"SDLVehicleDataTypeHeadlampStatus","abstract":"

    Vehicle headlamp status

    "},"Constants.html#/c:@SDLVehicleDataTypeBatteryVoltage":{"name":"SDLVehicleDataTypeBatteryVoltage","abstract":"

    Vehicle battery voltage data

    "},"Constants.html#/c:@SDLVehicleDataTypeEngineOilLife":{"name":"SDLVehicleDataTypeEngineOilLife","abstract":"

    Vehicle engine oil life data

    "},"Constants.html#/c:@SDLVehicleDataTypeEngineTorque":{"name":"SDLVehicleDataTypeEngineTorque","abstract":"

    Vehicle engine torque data

    "},"Constants.html#/c:@SDLVehicleDataTypeAccelerationPedal":{"name":"SDLVehicleDataTypeAccelerationPedal","abstract":"

    Vehicle accleration pedal data

    "},"Constants.html#/c:@SDLVehicleDataTypeSteeringWheel":{"name":"SDLVehicleDataTypeSteeringWheel","abstract":"

    Vehicle steering wheel data

    "},"Constants.html#/c:@SDLVehicleDataTypeElectronicParkBrakeStatus":{"name":"SDLVehicleDataTypeElectronicParkBrakeStatus","abstract":"

    Vehicle electronic parking brake status data

    "},"Constants.html#/c:@SDLVehicleDataTypeTurnSignal":{"name":"SDLVehicleDataTypeTurnSignal","abstract":"

    Vehicle turn signal data

    "},"Constants.html#/c:@SDLVehicleDataTypeCloudAppVehicleID":{"name":"SDLVehicleDataTypeCloudAppVehicleID","abstract":"

    The cloud application vehicle id. Used by cloud apps to identify a head unit

    "},"Constants.html#/c:@SDLVehicleDataTypeOEMVehicleDataType":{"name":"SDLVehicleDataTypeOEMVehicleDataType","abstract":"

    Custom OEM Vehicle data

    "},"Constants.html#/c:@SDLVentilationModeUpper":{"name":"SDLVentilationModeUpper","abstract":"

    The upper ventilation mode

    "},"Constants.html#/c:@SDLVentilationModeLower":{"name":"SDLVentilationModeLower","abstract":"

    The lower ventilation mode

    "},"Constants.html#/c:@SDLVentilationModeBoth":{"name":"SDLVentilationModeBoth","abstract":"

    The both ventilation mode

    "},"Constants.html#/c:@SDLVentilationModeNone":{"name":"SDLVentilationModeNone","abstract":"

    No ventilation mode

    "},"Constants.html#/c:@SDLVideoStreamingCodecH264":{"name":"SDLVideoStreamingCodecH264","abstract":"

    H264

    "},"Constants.html#/c:@SDLVideoStreamingCodecH265":{"name":"SDLVideoStreamingCodecH265","abstract":"

    H265

    "},"Constants.html#/c:@SDLVideoStreamingCodecTheora":{"name":"SDLVideoStreamingCodecTheora","abstract":"

    Theora

    "},"Constants.html#/c:@SDLVideoStreamingCodecVP8":{"name":"SDLVideoStreamingCodecVP8","abstract":"

    VP8

    "},"Constants.html#/c:@SDLVideoStreamingCodecVP9":{"name":"SDLVideoStreamingCodecVP9","abstract":"

    VP9

    "},"Constants.html#/c:@SDLVideoStreamingProtocolRAW":{"name":"SDLVideoStreamingProtocolRAW","abstract":"

    RAW

    "},"Constants.html#/c:@SDLVideoStreamingProtocolRTP":{"name":"SDLVideoStreamingProtocolRTP","abstract":"

    RTP

    "},"Constants.html#/c:@SDLVideoStreamingProtocolRTSP":{"name":"SDLVideoStreamingProtocolRTSP","abstract":"

    RTSP

    "},"Constants.html#/c:@SDLVideoStreamingProtocolRTMP":{"name":"SDLVideoStreamingProtocolRTMP","abstract":"

    RTMP

    "},"Constants.html#/c:@SDLVideoStreamingProtocolWebM":{"name":"SDLVideoStreamingProtocolWebM","abstract":"

    WebM

    "},"Constants.html#/c:@SDLVideoStreamingStateStreamable":{"name":"SDLVideoStreamingStateStreamable","abstract":"

    STREAMABLE, the current app is allowed to stream video

    "},"Constants.html#/c:@SDLVideoStreamingStateNotStreamable":{"name":"SDLVideoStreamingStateNotStreamable","abstract":"

    NOT_STREAMABLE, the current app is not allowed to stream video

    "},"Constants.html#/c:@SDLVRCapabilitiesText":{"name":"SDLVRCapabilitiesText","abstract":"

    The SDL platform is capable of recognizing spoken text in the current language.

    "},"Constants.html#/c:@SDLWarningLightStatusOff":{"name":"SDLWarningLightStatusOff","abstract":"

    The warning light is off

    "},"Constants.html#/c:@SDLWarningLightStatusOn":{"name":"SDLWarningLightStatusOn","abstract":"

    The warning light is off

    "},"Constants.html#/c:@SDLWarningLightStatusFlash":{"name":"SDLWarningLightStatusFlash","abstract":"

    The warning light is flashing

    "},"Constants.html#/c:@SDLWarningLightStatusNotUsed":{"name":"SDLWarningLightStatusNotUsed","abstract":"

    The warning light is unused

    "},"Constants.html#/c:@SDLWayPointTypeAll":{"name":"SDLWayPointTypeAll","abstract":"

    All other waypoint types

    "},"Constants.html#/c:@SDLWayPointTypeDestination":{"name":"SDLWayPointTypeDestination","abstract":"

    The destination waypoint

    "},"Constants.html#/c:@SDLWindowTypeMain":{"name":"SDLWindowTypeMain","abstract":"

    This window type describes the main window on a display.

    "},"Constants.html#/c:@SDLWindowTypeWidget":{"name":"SDLWindowTypeWidget","abstract":"

    A widget is a small window that the app can create to provide information and soft buttons for quick app control.

    "},"Constants.html#/c:@SDLWiperStatusOff":{"name":"SDLWiperStatusOff","abstract":"

    Wiper is off

    "},"Constants.html#/c:@SDLWiperStatusAutomaticOff":{"name":"SDLWiperStatusAutomaticOff","abstract":"

    Wiper is off automatically

    "},"Constants.html#/c:@SDLWiperStatusOffMoving":{"name":"SDLWiperStatusOffMoving","abstract":"

    Wiper is moving but off

    "},"Constants.html#/c:@SDLWiperStatusManualIntervalOff":{"name":"SDLWiperStatusManualIntervalOff","abstract":"

    Wiper is off due to a manual interval

    "},"Constants.html#/c:@SDLWiperStatusManualIntervalOn":{"name":"SDLWiperStatusManualIntervalOn","abstract":"

    Wiper is on due to a manual interval

    "},"Constants.html#/c:@SDLWiperStatusManualLow":{"name":"SDLWiperStatusManualLow","abstract":"

    Wiper is on low manually

    "},"Constants.html#/c:@SDLWiperStatusManualHigh":{"name":"SDLWiperStatusManualHigh","abstract":"

    Wiper is on high manually

    "},"Constants.html#/c:@SDLWiperStatusManualFlick":{"name":"SDLWiperStatusManualFlick","abstract":"

    Wiper is on for a single wipe manually

    "},"Constants.html#/c:@SDLWiperStatusWash":{"name":"SDLWiperStatusWash","abstract":"

    Wiper is in wash mode

    "},"Constants.html#/c:@SDLWiperStatusAutomaticLow":{"name":"SDLWiperStatusAutomaticLow","abstract":"

    Wiper is on low automatically

    "},"Constants.html#/c:@SDLWiperStatusAutomaticHigh":{"name":"SDLWiperStatusAutomaticHigh","abstract":"

    Wiper is on high automatically

    "},"Constants.html#/c:@SDLWiperStatusCourtesyWipe":{"name":"SDLWiperStatusCourtesyWipe","abstract":"

    Wiper is performing a courtesy wipe

    "},"Constants.html#/c:@SDLWiperStatusAutomaticAdjust":{"name":"SDLWiperStatusAutomaticAdjust","abstract":"

    Wiper is on automatic adjust

    "},"Constants.html#/c:@SDLWiperStatusStalled":{"name":"SDLWiperStatusStalled","abstract":"

    Wiper is stalled

    "},"Constants.html#/c:@SDLWiperStatusNoDataExists":{"name":"SDLWiperStatusNoDataExists","abstract":"

    Wiper data is not available

    "},"Constants.html#/c:@SmartDeviceLinkVersionNumber":{"name":"SmartDeviceLinkVersionNumber","abstract":"

    Project version number for SmartDeviceLink.

    "},"Constants.html#/c:@SmartDeviceLinkVersionString":{"name":"SmartDeviceLinkVersionString","abstract":"

    Project version string for SmartDeviceLink.

    "},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(im)initWithType:maximumNumberOfWindows:":{"name":"-initWithType:maximumNumberOfWindows:","abstract":"

    Init with required parameters

    ","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(py)type":{"name":"type","abstract":"

    Type of windows available, to create.

    ","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(py)maximumNumberOfWindows":{"name":"maximumNumberOfWindows","abstract":"

    Number of windows available, to create.

    ","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)windowID":{"name":"windowID","abstract":"

    The specified ID of the window. Can be set to a predefined window, or omitted for the main window on the main display.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)textFields":{"name":"textFields","abstract":"

    A set of all fields that support text data. - see: TextField

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)imageFields":{"name":"imageFields","abstract":"

    A set of all fields that support images. - see: ImageField

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"

    Provides information about image types supported by the system.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)templatesAvailable":{"name":"templatesAvailable","abstract":"

    A set of all window templates available on the head unit.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"

    The number of on-window custom presets available (if any); otherwise omitted.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"

    The number of buttons and the capabilities of each on-window button.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"

    The number of soft buttons available on-window and the capabilities for each button.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)menuLayoutsAvailable":{"name":"menuLayoutsAvailable","abstract":"

    An array of available menu layouts. If this parameter is not provided, only the LIST layout is assumed to be available.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(im)initWithCurrentForecastSupported:maxMultidayForecastAmount:maxHourlyForecastAmount:maxMinutelyForecastAmount:weatherForLocationSupported:":{"name":"-initWithCurrentForecastSupported:maxMultidayForecastAmount:maxHourlyForecastAmount:maxMinutelyForecastAmount:weatherForLocationSupported:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)currentForecastSupported":{"name":"currentForecastSupported","abstract":"

    Whether or not the current forcast is supported.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxMultidayForecastAmount":{"name":"maxMultidayForecastAmount","abstract":"

    The maximum number of day-by-day forecasts.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxHourlyForecastAmount":{"name":"maxHourlyForecastAmount","abstract":"

    The maximum number of hour-by-hour forecasts.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxMinutelyForecastAmount":{"name":"maxMinutelyForecastAmount","abstract":"

    The maximum number of minute-by-minute forecasts.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)weatherForLocationSupported":{"name":"weatherForLocationSupported","abstract":"

    Whether or not the weather for location is supported.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(im)initWithLocation:":{"name":"-initWithLocation:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(im)initWithLocation:currentForecast:minuteForecast:hourlyForecast:multidayForecast:alerts:":{"name":"-initWithLocation:currentForecast:minuteForecast:hourlyForecast:multidayForecast:alerts:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)location":{"name":"location","abstract":"

    The location.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)currentForecast":{"name":"currentForecast","abstract":"

    The current forecast.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)minuteForecast":{"name":"minuteForecast","abstract":"

    A minute-by-minute array of forecasts.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)hourlyForecast":{"name":"hourlyForecast","abstract":"

    An hour-by-hour array of forecasts.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)multidayForecast":{"name":"multidayForecast","abstract":"

    A day-by-day array of forecasts.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)alerts":{"name":"alerts","abstract":"

    An array of weather alerts. This array should be ordered with the first object being the current day.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(im)initWithCurrentTemperature:temperatureHigh:temperatureLow:apparentTemperature:apparentTemperatureHigh:apparentTemperatureLow:weatherSummary:time:humidity:cloudCover:moonPhase:windBearing:windGust:windSpeed:nearestStormBearing:nearestStormDistance:precipAccumulation:precipIntensity:precipProbability:precipType:visibility:weatherIcon:":{"name":"-initWithCurrentTemperature:temperatureHigh:temperatureLow:apparentTemperature:apparentTemperatureHigh:apparentTemperatureLow:weatherSummary:time:humidity:cloudCover:moonPhase:windBearing:windGust:windSpeed:nearestStormBearing:nearestStormDistance:precipAccumulation:precipIntensity:precipProbability:precipType:visibility:weatherIcon:","abstract":"

    Convenience init for all parameters

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)currentTemperature":{"name":"currentTemperature","abstract":"

    The current temperature.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)temperatureHigh":{"name":"temperatureHigh","abstract":"

    The predicted high temperature for the day.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)temperatureLow":{"name":"temperatureLow","abstract":"

    The predicted low temperature for the day.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperature":{"name":"apparentTemperature","abstract":"

    The apparent temperature.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperatureHigh":{"name":"apparentTemperatureHigh","abstract":"

    The predicted high apparent temperature for the day.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperatureLow":{"name":"apparentTemperatureLow","abstract":"

    The predicted low apparent temperature for the day.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)weatherSummary":{"name":"weatherSummary","abstract":"

    A summary of the weather.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)time":{"name":"time","abstract":"

    The time this data refers to.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)humidity":{"name":"humidity","abstract":"

    From 0 to 1, percentage humidity.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)cloudCover":{"name":"cloudCover","abstract":"

    From 0 to 1, percentage cloud cover.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)moonPhase":{"name":"moonPhase","abstract":"

    From 0 to 1, percentage of the moon seen, e.g. 0 = no moon, 0.25 = quarter moon

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windBearing":{"name":"windBearing","abstract":"

    In degrees, true north at 0 degrees.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windGust":{"name":"windGust","abstract":"

    In km/hr

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windSpeed":{"name":"windSpeed","abstract":"

    In km/hr

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)nearestStormBearing":{"name":"nearestStormBearing","abstract":"

    In degrees, true north at 0 degrees.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)nearestStormDistance":{"name":"nearestStormDistance","abstract":"

    In km

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipAccumulation":{"name":"precipAccumulation","abstract":"

    In cm

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipIntensity":{"name":"precipIntensity","abstract":"

    In cm of water per hour.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipProbability":{"name":"precipProbability","abstract":"

    From 0 to 1, percentage chance.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipType":{"name":"precipType","abstract":"

    A description of the precipitation type (e.g. “rain”, “snow”, “sleet”, “hail”)

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)visibility":{"name":"visibility","abstract":"

    In km

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)weatherIcon":{"name":"weatherIcon","abstract":"

    The weather icon image.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(im)initWithTitle:summary:expires:regions:severity:timeIssued:":{"name":"-initWithTitle:summary:expires:regions:severity:timeIssued:","abstract":"

    Convenience init for all parameters

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)title":{"name":"title","abstract":"

    The title of the alert.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)summary":{"name":"summary","abstract":"

    A summary for the alert.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)expires":{"name":"expires","abstract":"

    The date the alert expires.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)regions":{"name":"regions","abstract":"

    Regions affected.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)severity":{"name":"severity","abstract":"

    Severity of the weather alert.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)timeIssued":{"name":"timeIssued","abstract":"

    The date the alert was issued.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:":{"name":"-initWithText:image:","abstract":"

    Convenience init to create a VR help item with the following parameters

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:position:":{"name":"-initWithText:image:position:","abstract":"

    Convenience init to create a VR help item with all parameters

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)text":{"name":"text","abstract":"

    Text to display for VR Help item

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)image":{"name":"image","abstract":"

    Image for VR Help item

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)position":{"name":"position","abstract":"

    Position to display item in VR Help list

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)voiceCommands":{"name":"voiceCommands","abstract":"

    The strings the user can say to activate this voice command

    ","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)handler":{"name":"handler","abstract":"

    The handler that will be called when the command is activated

    ","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(im)initWithVoiceCommands:handler:":{"name":"-initWithVoiceCommands:handler:","abstract":"

    Convenience init

    ","parent_name":"SDLVoiceCommand"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)protocol":{"name":"protocol","abstract":"

    Protocol type, see VideoStreamingProtocol

    ","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)codec":{"name":"codec","abstract":"

    Codec type, see VideoStreamingCodec

    ","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(im)initWithCodec:protocol:":{"name":"-initWithCodec:protocol:","abstract":"

    Convenience init

    ","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:","abstract":"

    Convenience init for creating a video streaming capability.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:diagonalScreenSize:pixelPerInch:scale:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:diagonalScreenSize:pixelPerInch:scale:","abstract":"

    Convenience init for creating a video streaming capability with all parameters.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)preferredResolution":{"name":"preferredResolution","abstract":"

    The preferred resolution of a video stream for decoding and rendering on HMI

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)maxBitrate":{"name":"maxBitrate","abstract":"

    The maximum bitrate of video stream that is supported, in kbps, optional

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)supportedFormats":{"name":"supportedFormats","abstract":"

    Detailed information on each format supported by this system, in its preferred order

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)hapticSpatialDataSupported":{"name":"hapticSpatialDataSupported","abstract":"

    True if the system can utilize the haptic spatial data from the source being streamed.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)diagonalScreenSize":{"name":"diagonalScreenSize","abstract":"

    The diagonal screen size in inches.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)pixelPerInch":{"name":"pixelPerInch","abstract":"

    The diagonal resolution in pixels divided by the diagonal screen size in inches.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)scale":{"name":"scale","abstract":"

    The scaling factor the app should use to change the size of the projecting view.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)major":{"name":"major","abstract":"

    Major version (e.g. X.0.0)

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)minor":{"name":"minor","abstract":"

    Minor version (e.g. 0.X.0)

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)patch":{"name":"patch","abstract":"

    Patch version (e.g. 0.0.X)

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)stringVersion":{"name":"stringVersion","abstract":"

    A String format of the current SDLVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithMajor:minor:patch:":{"name":"-initWithMajor:minor:patch:","abstract":"

    Convenience init

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithMajor:minor:patch:":{"name":"+versionWithMajor:minor:patch:","abstract":"

    Convenience init

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithString:":{"name":"-initWithString:","abstract":"

    Convenience init

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithString:":{"name":"+versionWithString:","abstract":"

    Convenience init

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithSyncMsgVersion:":{"name":"-initWithSyncMsgVersion:","abstract":"

    Deprecated convenience init to set version using SDLSyncMsgVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithSyncMsgVersion:":{"name":"+versionWithSyncMsgVersion:","abstract":"

    Deprecated convenience init to set version using SDLSyncMsgVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithSDLMsgVersion:":{"name":"-initWithSDLMsgVersion:","abstract":"

    Convenience init to set version using SDLMsgVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithSDLMsgVersion:":{"name":"+versionWithSDLMsgVersion:","abstract":"

    Convenience init to set version using SDLMsgVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)compare:":{"name":"-compare:","abstract":"

    Compare two SDLVersions

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isLessThanVersion:":{"name":"-isLessThanVersion:","abstract":"

    Compare is less than

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isEqualToVersion:":{"name":"-isEqualToVersion:","abstract":"

    Compare is equal to

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isGreaterThanVersion:":{"name":"-isGreaterThanVersion:","abstract":"

    Compare is greater than

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isGreaterThanOrEqualToVersion:":{"name":"-isGreaterThanOrEqualToVersion:","abstract":"

    Compare is greater than or equal to

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isLessThanOrEqualToVersion:":{"name":"-isLessThanOrEqualToVersion:","abstract":"

    Compare is less than or equal to

    ","parent_name":"SDLVersion"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)make":{"name":"make","abstract":"

    The make of the vehicle

    ","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)model":{"name":"model","abstract":"

    The model of the vehicle

    ","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)modelYear":{"name":"modelYear","abstract":"

    The model year of the vehicle

    ","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)trim":{"name":"trim","abstract":"

    The trim of the vehicle

    ","parent_name":"SDLVehicleType"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(im)initWithDataType:resultCode:":{"name":"-initWithDataType:resultCode:","abstract":"

    Convenience init for creating a SDLVehicleDataResult with a dataType

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(im)initWithCustomOEMDataType:resultCode:":{"name":"-initWithCustomOEMDataType:resultCode:","abstract":"

    Convenience init for creating a SDLVehicleDataResult with a customDataType

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)dataType":{"name":"dataType","abstract":"

    Defined published data element type

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)customOEMDataType":{"name":"customOEMDataType","abstract":"

    OEM custom defined published data element type

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)resultCode":{"name":"resultCode","abstract":"

    Published data result code

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(im)initWithTurnList:softButtons:":{"name":"-initWithTurnList:softButtons:","abstract":"

    Convenience init to update a list of maneuvers for navigation

    ","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)turnList":{"name":"turnList","abstract":"

    Optional, SDLTurn, 1 - 100 entries

    ","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)softButtons":{"name":"softButtons","abstract":"

    Required, SDLSoftButton, 0 - 1 Entries

    ","parent_name":"SDLUpdateTurnList"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"

    The result of requesting to unsubscribe to the GPSData.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"

    The result of requesting to unsubscribe to the vehicle speed in kilometers per hour.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"

    The result of requesting to unsubscribe to the number of revolutions per minute of the engine.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"

    The result of requesting to unsubscribe to the fuel level in the tank (percentage)

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    The result of requesting to unsubscribe to the fuel level state.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"

    The result of requesting to unsubscribe to the fuel range.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    The result of requesting to unsubscribe to the instantaneous fuel consumption in microlitres.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"

    The result of requesting to unsubscribe to the external temperature in degrees celsius.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"

    The result of requesting to unsubscribe to the PRNDL status.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"

    The result of requesting to unsubscribe to the tireStatus.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"

    The result of requesting to unsubscribe to the odometer in km.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"

    The result of requesting to unsubscribe to the status of the seat belts.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"

    The result of requesting to unsubscribe to the body information including power modes.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"

    The result of requesting to unsubscribe to the device status including signal and battery strength.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"

    The result of requesting to unsubscribe to the status of the brake pedal.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"

    The result of requesting to unsubscribe to the status of the wipers.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"

    The result of requesting to unsubscribe to the status of the head lamps.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"

    The result of requesting to unsubscribe to the estimated percentage of remaining oil life of the engine.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"

    The result of requesting to unsubscribe to the torque value for engine (in Nm) on non-diesel variants.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    The result of requesting to unsubscribe to the accelerator pedal position (percentage depressed)

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    The result of requesting to unsubscribe to the current angle of the steering wheel (in deg)

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"

    The result of requesting to unsubscribe to the emergency call info

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"

    The result of requesting to unsubscribe to the airbag status

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    The result of requesting to unsubscribe to the emergency event

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"

    The result of requesting to unsubscribe to the cluster modes

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"

    The result of requesting to unsubscribe to the myKey status

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    The result of requesting to unsubscribe to the electronic parking brake status

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"

    The result of requesting to unsubscribe to the turn signal

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    The result of requesting to unsubscribe to the cloud app vehicle id

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:","abstract":"

    Convenience init for unsubscribing to all possible vehicle data items.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"

    Convenience init for unsubscribing to all possible vehicle data items.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"

    Convenience init for unsubscribing to all possible vehicle data items.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)gps":{"name":"gps","abstract":"

    If true, unsubscribes from GPS

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)speed":{"name":"speed","abstract":"

    If true, unsubscribes from Speed

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"

    If true, unsubscribes from RPM

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"

    If true, unsubscribes from Fuel Level

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    If true, unsubscribes from Fuel Level State

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"

    If true, unsubscribes from Fuel Range

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    If true, unsubscribes from Instant Fuel Consumption

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"

    If true, unsubscribes from External Temperature

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"

    If true, unsubscribes from PRNDL

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"

    If true, unsubscribes from Tire Pressure

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"

    If true, unsubscribes from Odometer

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"

    If true, unsubscribes from Belt Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"

    If true, unsubscribes from Body Information

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"

    If true, unsubscribes from Device Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"

    If true, unsubscribes from Driver Braking

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"

    If true, unsubscribes from Wiper Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"

    If true, unsubscribes from Head Lamp Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"

    If true, unsubscribes from Engine Oil Life

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"

    If true, unsubscribes from Engine Torque

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    If true, unsubscribes from Acc Pedal Position

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    If true, unsubscribes from Steering Wheel Angle data

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"

    If true, unsubscribes from eCallInfo

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"

    If true, unsubscribes from Airbag Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    If true, unsubscribes from Emergency Event

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    If true, unsubscribes from Cluster Mode Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"

    If true, unsubscribes from My Key

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    A boolean value. If true, unsubscribes to the Electronic Parking Brake Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"

    A boolean value. If true, unsubscribes to the Turn Signal

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    A boolean value. If true, unsubscribes to the Cloud App Vehicle ID

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(im)initWithButtonName:":{"name":"-initWithButtonName:","abstract":"

    Convenience init to unsubscribe from a subscription button

    ","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(py)buttonName":{"name":"buttonName","abstract":"

    A name of the button to unsubscribe from","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnpublishAppService.html#/c:objc(cs)SDLUnpublishAppService(im)initWithServiceID:":{"name":"-initWithServiceID:","abstract":"

    Create an instance of UnpublishAppService with the serviceID that corresponds with the service to be unpublished

    ","parent_name":"SDLUnpublishAppService"},"Classes/SDLUnpublishAppService.html#/c:objc(cs)SDLUnpublishAppService(py)serviceID":{"name":"serviceID","abstract":"

    The ID of the service to be unpublished.

    ","parent_name":"SDLUnpublishAppService"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(im)initWithNavigationText:turnIcon:":{"name":"-initWithNavigationText:turnIcon:","abstract":"

    Convenience init to UpdateTurnList for navigation

    ","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)navigationText":{"name":"navigationText","abstract":"

    Individual turn text. Must provide at least text or icon for a given turn

    ","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)turnIcon":{"name":"turnIcon","abstract":"

    Individual turn icon. Must provide at least text or icon for a given turn

    ","parent_name":"SDLTurn"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventDelegate":{"name":"touchEventDelegate","abstract":"

    Notified of processed touches such as pinches, pans, and taps

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventHandler":{"name":"touchEventHandler","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapDistanceThreshold":{"name":"tapDistanceThreshold","abstract":"

    Distance between two taps on the screen, in the head unit’s coordinate system, used for registering double-tap callbacks.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)panDistanceThreshold":{"name":"panDistanceThreshold","abstract":"

    Minimum distance for a pan gesture in the head unit’s coordinate system, used for registering pan callbacks.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapTimeThreshold":{"name":"tapTimeThreshold","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold":{"name":"movementTimeThreshold","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)enableSyncedPanning":{"name":"enableSyncedPanning","abstract":"

    If set to NO, the display link syncing will be ignored and movementTimeThreshold will be used. Defaults to YES.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEnabled":{"name":"touchEnabled","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)cancelPendingTouches":{"name":"-cancelPendingTouches","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:":{"name":"-initWithHitTester:","abstract":"

    Initialize a touch manager with a hit tester if available

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:videoScaleManager:":{"name":"-initWithHitTester:videoScaleManager:","abstract":"

    Initialize a touch manager with a hit tester and a video scale manager.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)syncFrame":{"name":"-syncFrame","abstract":"

    Called by SDLStreamingMediaManager in sync with the streaming framerate. This helps to moderate panning gestures by allowing the UI to be modified in time with the framerate.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)pressAvailable":{"name":"pressAvailable","abstract":"

    Whether or not long presses are available

    ","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)multiTouchAvailable":{"name":"multiTouchAvailable","abstract":"

    Whether or not multi-touch (e.g. a pinch gesture) is available

    ","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)doublePressAvailable":{"name":"doublePressAvailable","abstract":"

    Whether or not a double tap is available

    ","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)touchEventId":{"name":"touchEventId","abstract":"

    A touch’s unique identifier. The application can track the current touch events by id.

    ","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)timeStamp":{"name":"timeStamp","abstract":"

    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.

    ","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)coord":{"name":"coord","abstract":"

    The touch’s coordinate

    ","parent_name":"SDLTouchEvent"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)x":{"name":"x","abstract":"

    The x value of the touch coordinate

    ","parent_name":"SDLTouchCoord"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)y":{"name":"y","abstract":"

    The y value of the touch coordinate

    ","parent_name":"SDLTouchCoord"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(im)initWithTouchEvent:":{"name":"-initWithTouchEvent:","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)identifier":{"name":"identifier","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)location":{"name":"location","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)timeStamp":{"name":"timeStamp","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isFirstFinger":{"name":"isFirstFinger","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isSecondFinger":{"name":"isSecondFinger","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)pressureTelltale":{"name":"pressureTelltale","abstract":"

    Status of the Tire Pressure Telltale. See WarningLightStatus.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftFront":{"name":"leftFront","abstract":"

    The status of the left front tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightFront":{"name":"rightFront","abstract":"

    The status of the right front tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftRear":{"name":"leftRear","abstract":"

    The status of the left rear tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightRear":{"name":"rightRear","abstract":"

    The status of the right rear tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerLeftRear":{"name":"innerLeftRear","abstract":"

    The status of the inner left rear tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerRightRear":{"name":"innerRightRear","abstract":"

    The status of the innter right rear tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)name":{"name":"name","abstract":"

    The enumeration identifying the field.

    ","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)characterSet":{"name":"characterSet","abstract":"

    The character set that is supported in this field.

    ","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)width":{"name":"width","abstract":"

    The number of characters in one row of this field.

    ","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)rows":{"name":"rows","abstract":"

    The number of rows for this text field.

    ","parent_name":"SDLTextField"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"

    Constructor with the required values.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithTemplate:":{"name":"-initWithTemplate:","abstract":"

    Init with the required values.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithTemplate:dayColorScheme:nightColorScheme:":{"name":"-initWithTemplate:dayColorScheme:nightColorScheme:","abstract":"

    Convinience constructor with all the parameters.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)template":{"name":"template","abstract":"

    Predefined or dynamically created window template. Currently only predefined window template layouts are defined.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"

    The color scheme to use when the head unit is in a light / day situation.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"

    The color scheme to use when the head unit is in a dark / night situation.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:":{"name":"-initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:","abstract":"

    Convenience init

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryColor:secondaryColor:backgroundColor:":{"name":"-initWithPrimaryColor:secondaryColor:backgroundColor:","abstract":"

    Convenience init

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)primaryColor":{"name":"primaryColor","abstract":"

    The “primary” color. This must always be your primary brand color. If the OEM only uses one color, this will be the color. It is recommended to the OEMs that the primaryColor should change the mediaClockTimer bar and the highlight color of soft buttons.

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)secondaryColor":{"name":"secondaryColor","abstract":"

    The “secondary” color. This may be an accent or complimentary color to your primary brand color. If the OEM uses this color, they must also use the primary color. It is recommended to the OEMs that the secondaryColor should change the background color of buttons, such as soft buttons.

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)backgroundColor":{"name":"backgroundColor","abstract":"

    The background color to be used on the template. If the OEM does not support this parameter, assume on “dayColorScheme” that this will be a light color, and on “nightColorScheme” a dark color. You should do the same for your custom schemes.

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithFahrenheitValue:":{"name":"-initWithFahrenheitValue:","abstract":"

    Convenience init for a fahrenheit temperature value.

    ","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithCelsiusValue:":{"name":"-initWithCelsiusValue:","abstract":"

    Convenience init for a celsius temperature value.

    ","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithUnit:value:":{"name":"-initWithUnit:value:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)unit":{"name":"unit","abstract":"

    Temperature unit

    ","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)value":{"name":"value","abstract":"

    Temperature value in specified unit. Range depends on OEM and is not checked by SDL.

    ","parent_name":"SDLTemperature"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(im)initWithText:type:":{"name":"-initWithText:type:","abstract":"

    Initialize with text and a type

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)textChunksFromString:":{"name":"+textChunksFromString:","abstract":"

    Create TTS using text

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)sapiChunksFromString:":{"name":"+sapiChunksFromString:","abstract":"

    Create TTS using SAPI

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)lhPlusChunksFromString:":{"name":"+lhPlusChunksFromString:","abstract":"

    Create TTS using LH Plus

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)prerecordedChunksFromString:":{"name":"+prerecordedChunksFromString:","abstract":"

    Create TTS using prerecorded chunks

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)silenceChunks":{"name":"+silenceChunks","abstract":"

    Create TTS using silence

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)fileChunksWithName:":{"name":"+fileChunksWithName:","abstract":"

    Create “TTS” to play an audio file previously uploaded to the system.

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)text":{"name":"text","abstract":"

    Text to be spoken, a phoneme specification, or the name of a pre-recorded / pre-uploaded sound. The contents of this field are indicated by the “type” field.

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)type":{"name":"type","abstract":"

    The type of information in the “text” field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).

    ","parent_name":"SDLTTSChunk"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(im)initWithType:fileName:":{"name":"-initWithType:fileName:","abstract":"

    Create a generic system request with a file name

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(im)initWithProprietaryType:fileName:":{"name":"-initWithProprietaryType:fileName:","abstract":"

    Create an OEM_PROPRIETARY system request with a subtype and file name

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestType":{"name":"requestType","abstract":"

    The type of system request. Note that Proprietary requests should forward the binary data to the known proprietary module on the system.

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"

    A request subType used when the requestType is OEM_SPECIFIC.

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)fileName":{"name":"fileName","abstract":"

    Filename of HTTP data to store in predefined system staging area.

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)supportsSubscriptions":{"name":"supportsSubscriptions","abstract":"

    YES if subscriptions are available on the connected head unit. If NO, calls to subscribeToCapabilityType:withBlock and subscribeToCapabilityType:withObserver:selector will fail.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displays":{"name":"displays","abstract":"

    Provides window capabilities of all displays connected with SDL. By default, one display is connected and supported which includes window capability information of the default main window of the display. May be nil if the system has not provided display and window capability information yet.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displayCapabilities":{"name":"displayCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"

    If returned, the platform supports on-screen SoftButtons

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"

    If returned, the platform supports custom on-screen Presets

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)speechCapabilities":{"name":"speechCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)prerecordedSpeechCapabilities":{"name":"prerecordedSpeechCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)vrCapability":{"name":"vrCapability","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)pcmStreamCapability":{"name":"pcmStreamCapability","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)appServicesCapabilities":{"name":"appServicesCapabilities","abstract":"

    If returned, the platform supports app services

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability":{"name":"navigationCapability","abstract":"

    If returned, the platform supports navigation

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability":{"name":"phoneCapability","abstract":"

    If returned, the platform supports making phone calls

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"

    If returned, the platform supports video streaming

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"

    If returned, the platform supports remote control capabilities

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)seatLocationCapability":{"name":"seatLocationCapability","abstract":"

    If returned, the platform supports remote control capabilities for seats

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)defaultMainWindowCapability":{"name":"defaultMainWindowCapability","abstract":"

    Returns the window capability object of the default main window which is always pre-created by the connected system. This is a convenience method for easily accessing the capabilities of the default main window.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)init":{"name":"-init","abstract":"

    Init is unavailable. Dependencies must be injected using initWithConnectionManager:

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"

    Creates a new system capability manager with a specified connection manager

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)start":{"name":"-start","abstract":"

    Starts the manager. This method is used internally.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)stop":{"name":"-stop","abstract":"

    Stops the manager. This method is used internally.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)updateCapabilityType:completionHandler:":{"name":"-updateCapabilityType:completionHandler:","abstract":"

    Retrieves a capability type from the remote system. This function must be called in order to retrieve the values for navigationCapability, phoneCapability, videoStreamingCapability, remoteControlCapability, and appServicesCapabilities. If you do not call this method first, those values will be nil. After calling this method, assuming there is no error in the handler, you may retrieve the capability you requested from the manager within the handler.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withBlock:":{"name":"-subscribeToCapabilityType:withBlock:","abstract":"

    Subscribe to a particular capability type using a block callback

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withObserver:selector:":{"name":"-subscribeToCapabilityType:withObserver:selector:","abstract":"

    Subscribe to a particular capability type with a selector callback. The selector supports the following parameters:

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)unsubscribeFromCapabilityType:withObserver:":{"name":"-unsubscribeFromCapabilityType:withObserver:","abstract":"

    Unsubscribe from a particular capability type. If it was subscribed with a block, the return value should be passed to the observer to unsubscribe the block. If it was subscribed with a selector, the observer object should be passed to unsubscribe the object selector.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)windowCapabilityWithWindowID:":{"name":"-windowCapabilityWithWindowID:","abstract":"

    Returns the window capability object of the primary display with the specified window ID. This is a convenient method to easily access capabilities of windows for instance widget windows of the main display.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithAppServicesCapabilities:":{"name":"-initWithAppServicesCapabilities:","abstract":"

    Convenience init for an App Service Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithNavigationCapability:":{"name":"-initWithNavigationCapability:","abstract":"

    Convenience init for a Navigation Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithPhoneCapability:":{"name":"-initWithPhoneCapability:","abstract":"

    Convenience init for a Phone Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithVideoStreamingCapability:":{"name":"-initWithVideoStreamingCapability:","abstract":"

    Convenience init for a Video Streaming Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithRemoteControlCapability:":{"name":"-initWithRemoteControlCapability:","abstract":"

    Convenience init for a Remote Control Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithDisplayCapabilities:":{"name":"-initWithDisplayCapabilities:","abstract":"

    Convenience init for DisplayCapability list

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithSeatLocationCapability:":{"name":"-initWithSeatLocationCapability:","abstract":"

    Convenience init for a Remote Control Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"

    Used as a descriptor of what data to expect in this struct. The corresponding param to this enum should be included and the only other parameter included.

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)appServicesCapabilities":{"name":"appServicesCapabilities","abstract":"

    Describes the capabilities of app services including what service types are supported and the current state of services.

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)navigationCapability":{"name":"navigationCapability","abstract":"

    Describes the extended capabilities of the onboard navigation system

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)phoneCapability":{"name":"phoneCapability","abstract":"

    Describes the extended capabilities of the module’s phone feature

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"

    Describes the capabilities of the module’s video streaming feature

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"

    Describes the extended capabilities of the module’s remote control feature

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)seatLocationCapability":{"name":"seatLocationCapability","abstract":"

    Describes information about the locations of each seat

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)displayCapabilities":{"name":"displayCapabilities","abstract":"

    Contain the display related information and all windows related to that display

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"

    Convenience init to describe the SDL version

    ","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"

    The major version indicates versions that is not-compatible to previous versions

    ","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"

    The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)

    ","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"

    Allows backward-compatible fixes to the API without increasing the minor version of the interface

    ","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"

    The result of requesting to subscribe to the GPSData.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"

    The result of requesting to subscribe to the vehicle speed in kilometers per hour.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"

    The result of requesting to subscribe to the number of revolutions per minute of the engine.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"

    The result of requesting to subscribe to the fuel level in the tank (percentage)

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    The result of requesting to subscribe to the fuel level state.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"

    The result of requesting to subscribe to the fuel range.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"

    The result of requesting to subscribe to the external temperature in degrees celsius.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"

    The result of requesting to subscribe to the PRNDL status.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"

    The result of requesting to subscribe to the tireStatus.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"

    The result of requesting to subscribe to the odometer in km.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"

    The result of requesting to subscribe to the status of the seat belts.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"

    The result of requesting to subscribe to the body information including power modes.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"

    The result of requesting to subscribe to the device status including signal and battery strength.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"

    The result of requesting to subscribe to the status of the brake pedal.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"

    The result of requesting to subscribe to the status of the wipers.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"

    The result of requesting to subscribe to the status of the head lamps.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"

    The result of requesting to subscribe to the estimated percentage of remaining oil life of the engine.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"

    The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    The result of requesting to subscribe to the accelerator pedal position (percentage depressed)

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    The result of requesting to subscribe to the current angle of the steering wheel (in deg)

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"

    The result of requesting to subscribe to the emergency call info

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"

    The result of requesting to subscribe to the airbag status

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    The result of requesting to subscribe to the emergency event

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"

    The result of requesting to subscribe to the cluster modes

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"

    The result of requesting to subscribe to the myKey status

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    The result of requesting to subscribe to the electronic parking brake status

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"

    The result of requesting to subscribe to the turn signal

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    The result of requesting to subscribe to the cloud app vehicle ID

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:","abstract":"

    Convenience init for subscribing to all possible vehicle data items.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"

    Convenience init for subscribing to all possible vehicle data items.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"

    Convenience init for subscribing to all possible vehicle data items.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)gps":{"name":"gps","abstract":"

    A boolean value. If true, subscribes GPS data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)speed":{"name":"speed","abstract":"

    A boolean value. If true, subscribes Speed data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"

    A boolean value. If true, subscribes RPM data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"

    A boolean value. If true, subscribes Fuel Level data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    A boolean value. If true, subscribes Fuel Level State data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"

    A boolean value. If true, subscribes Fuel Range data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    A boolean value. If true, subscribes Instant Fuel Consumption data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"

    A boolean value. If true, subscribes External Temperature data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"

    A boolean value. If true, subscribes PRNDL data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"

    A boolean value. If true, subscribes Tire Pressure status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"

    A boolean value. If true, subscribes Odometer data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"

    A boolean value. If true, subscribes Belt Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"

    A boolean value. If true, subscribes Body Information data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"

    A boolean value. If true, subscribes Device Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"

    A boolean value. If true, subscribes Driver Braking data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"

    A boolean value. If true, subscribes Wiper Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"

    A boolean value. If true, subscribes Head Lamp Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"

    A boolean value. If true, subscribes to Engine Oil Life data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"

    A boolean value. If true, subscribes Engine Torque data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    A boolean value. If true, subscribes Acc Pedal Position data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    A boolean value. If true, subscribes Steering Wheel Angle data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"

    A boolean value. If true, subscribes eCall Info data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"

    A boolean value. If true, subscribes Airbag Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    A boolean value. If true, subscribes Emergency Event data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    A boolean value. If true, subscribes Cluster Mode Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"

    A boolean value. If true, subscribes myKey data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    A boolean value. If true, subscribes to the electronic parking brake status.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"

    A boolean value. If true, subscribes to the turn signal status.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    A boolean value. If true, subscribes to the cloud app vehicle ID.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"

    Construct a SDLSubscribeButton with a handler callback when an event occurs.

    ","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithButtonName:handler:":{"name":"-initWithButtonName:handler:","abstract":"

    Construct a SDLSubscribeButton with a handler callback when an event occurs with a button name.

    ","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)handler":{"name":"handler","abstract":"

    A handler that will let you know when the button you subscribed to is selected.

    ","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)buttonName":{"name":"buttonName","abstract":"

    The name of the button to subscribe to","parent_name":"SDLSubscribeButton"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)scale":{"name":"scale","abstract":"

    The scaling factor the app should use to change the size of the projecting view.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)displayViewportResolution":{"name":"displayViewportResolution","abstract":"

    The screen resolution of the connected display. The units are pixels.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)appViewportFrame":{"name":"appViewportFrame","abstract":"

    The frame of the app’s projecting view. This is calculated by dividing the display’s viewport resolution by the scale. The units are points.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)init":{"name":"-init","abstract":"

    Creates a default streaming video scale manager.","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)initWithScale:displayViewportResolution:":{"name":"-initWithScale:displayViewportResolution:","abstract":"

    Convenience init for creating the manager with a scale and connected display viewport resolution.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)scaleTouchEventCoordinates:":{"name":"-scaleTouchEventCoordinates:","abstract":"

    Scales the coordinates of an OnTouchEvent from the display’s coordinate system to the app’s viewport coordinate system. If the scale value is less than 1.0, the touch events will be returned without being scaled.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)scaleHapticRect:":{"name":"-scaleHapticRect:","abstract":"

    Scales a haptic rectangle from the app’s viewport coordinate system to the display’s coordinate system. If the scale value is less than 1.0, the haptic rectangle will be returned without being scaled.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)stop":{"name":"-stop","abstract":"

    Stops the manager. This method is used internally.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager":{"name":"touchManager","abstract":"

    Touch Manager responsible for providing touch event notifications.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioManager":{"name":"audioManager","abstract":"

    Audio Manager responsible for managing streaming audio.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)rootViewController":{"name":"rootViewController","abstract":"

    This property is used for SDLCarWindow, the ability to stream any view controller. To start, you must set an initial view controller on SDLStreamingMediaConfiguration rootViewController. After streaming begins, you can replace that view controller with a new root by placing the new view controller into this property.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)focusableItemManager":{"name":"focusableItemManager","abstract":"

    A haptic interface that can be updated to reparse views within the window you’ve provided. Send a SDLDidUpdateProjectionView notification or call the updateInterfaceLayout method to reparse. The “output” of this haptic interface occurs in the touchManager property where it will call the delegate.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)streamingSupported":{"name":"streamingSupported","abstract":"

    Whether or not video streaming is supported

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoConnected":{"name":"videoConnected","abstract":"

    Whether or not the video session is connected.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoEncrypted":{"name":"videoEncrypted","abstract":"

    Whether or not the video session is encrypted. This may be different than the requestedEncryptionType.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioConnected":{"name":"audioConnected","abstract":"

    Whether or not the audio session is connected.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioEncrypted":{"name":"audioEncrypted","abstract":"

    Whether or not the audio session is encrypted. This may be different than the requestedEncryptionType.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoStreamingPaused":{"name":"videoStreamingPaused","abstract":"

    Whether or not the video stream is paused due to either the application being backgrounded, the HMI state being either NONE or BACKGROUND, or the video stream not being ready.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)screenSize":{"name":"screenSize","abstract":"

    The current screen resolution of the connected display in pixels.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoFormat":{"name":"videoFormat","abstract":"

    This is the agreed upon format of video encoder that is in use, or nil if not currently connected.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)supportedFormats":{"name":"supportedFormats","abstract":"

    A list of all supported video formats by this manager

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)pixelBufferPool":{"name":"pixelBufferPool","abstract":"

    The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)requestedEncryptionType":{"name":"requestedEncryptionType","abstract":"

    The requested encryption type when a session attempts to connect. This setting applies to both video and audio sessions.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)showVideoBackgroundDisplay":{"name":"showVideoBackgroundDisplay","abstract":"

    When YES, the StreamingMediaManager will send a black screen with “Video Backgrounded String”. Defaults to YES.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"

    Create a new streaming media manager for navigation and VPM apps with a specified configuration

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startWithProtocol:":{"name":"-startWithProtocol:","abstract":"

    Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startAudioWithProtocol:":{"name":"-startAudioWithProtocol:","abstract":"

    Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startVideoWithProtocol:":{"name":"-startVideoWithProtocol:","abstract":"

    Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stop":{"name":"-stop","abstract":"

    Stop the manager. This method is used internally.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopAudio":{"name":"-stopAudio","abstract":"

    Stop the audio feature of the manager. This method is used internally.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopVideo":{"name":"-stopVideo","abstract":"

    Stop the video feature of the manager. This method is used internally.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:":{"name":"-sendVideoData:","abstract":"

    This method receives raw image data and will run iOS8+‘s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:presentationTimestamp:":{"name":"-sendVideoData:presentationTimestamp:","abstract":"

    This method receives raw image data and will run iOS8+‘s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"

    This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"

    Set security managers which could be used. This is primarily used with video streaming applications to authenticate and perhaps encrypt traffic data.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)maximumDesiredEncryption":{"name":"maximumDesiredEncryption","abstract":"

    What encryption level video/audio streaming should be. The default is SDLStreamingEncryptionFlagAuthenticateAndEncrypt.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)customVideoEncoderSettings":{"name":"customVideoEncoderSettings","abstract":"

    Properties to use for applications that utilize the video encoder for streaming. See VTCompressionProperties.h for more details. For example, you can set kVTCompressionPropertyKey_ExpectedFrameRate to set your framerate. Setting the framerate this way will also set the framerate if you use CarWindow automatic streaming.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)dataSource":{"name":"dataSource","abstract":"

    Usable to change run time video stream setup behavior. Only use this and modify the results if you really know what you’re doing. The head unit defaults are generally good.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController":{"name":"rootViewController","abstract":"

    Set the initial view controller your video streaming content is within.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)carWindowRenderingType":{"name":"carWindowRenderingType","abstract":"

    Declares if CarWindow will use layer rendering or view rendering. Defaults to layer rendering.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)enableForcedFramerateSync":{"name":"enableForcedFramerateSync","abstract":"

    When YES, the StreamingMediaManager will run a CADisplayLink with the framerate set to the video encoder settings kVTCompressionPropertyKey_ExpectedFrameRate. This then forces TouchManager (and CarWindow, if used) to sync their callbacks to the framerate. If using CarWindow, this must be YES. If NO, enableSyncedPanning on SDLTouchManager will be set to NO. Defaults to YES.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)allowMultipleViewControllerOrientations":{"name":"allowMultipleViewControllerOrientations","abstract":"

    When YES, the StreamingMediaManager will disable its internal checks that the rootViewController only has one supportedOrientation. Having multiple orientations can cause streaming issues. If you wish to disable this check, set it to YES. Defaults to NO.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)init":{"name":"-init","abstract":"

    Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you’d like custom video encoder settings, you can set the property manually.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfiguration":{"name":"+secureConfiguration","abstract":"

    Create a secure video streaming configuration. Security managers will be provided from SDLEncryptionConfiguration and the encryption flag will be set to SDLStreamingEncryptionFlagAuthenticateAndEncrypt. If you’d like custom video encoder settings, you can set the property manually.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"

    Manually set all the properties to the streaming media configuration

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithEncryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithEncryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"

    Manually set all the properties to the streaming media configuration

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:":{"name":"-initWithSecurityManagers:","abstract":"

    Create a secure configuration for each of the security managers provided.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfigurationWithSecurityManagers:":{"name":"+secureConfigurationWithSecurityManagers:","abstract":"

    Create a secure configuration for each of the security managers provided.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)insecureConfiguration":{"name":"+insecureConfiguration","abstract":"

    Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you’d like custom video encoder settings, you can set the property manually. This is equivalent to init.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingInsecureConfigurationWithInitialViewController:":{"name":"+autostreamingInsecureConfigurationWithInitialViewController:","abstract":"

    Create a CarWindow insecure configuration with a view controller

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithSecurityManagers:initialViewController:":{"name":"+autostreamingSecureConfigurationWithSecurityManagers:initialViewController:","abstract":"

    Create a CarWindow secure configuration with a view controller and security managers

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithInitialViewController:":{"name":"+autostreamingSecureConfigurationWithInitialViewController:","abstract":"

    Create a CarWindow secure configuration with a view controller.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(im)initWithCountryCode:fccFacilityId:":{"name":"-initWithCountryCode:fccFacilityId:","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)countryCode":{"name":"countryCode","abstract":"

    @abstract Binary Representation of ITU Country Code. USA Code is 001.

    ","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)fccFacilityId":{"name":"fccFacilityId","abstract":"

    @abstract Binary representation of unique facility ID assigned by the FCC","parent_name":"SDLStationIDNumber"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithTimeInterval:":{"name":"-initWithTimeInterval:","abstract":"

    Create a time struct with a time interval (time in seconds). Fractions of the second will be eliminated and rounded down.

    ","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithHours:minutes:seconds:":{"name":"-initWithHours:minutes:seconds:","abstract":"

    Create a time struct with hours, minutes, and seconds

    ","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)hours":{"name":"hours","abstract":"

    The hour of the media clock

    ","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)minutes":{"name":"minutes","abstract":"

    The minute of the media clock

    ","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)seconds":{"name":"seconds","abstract":"

    The second of the media clock

    ","parent_name":"SDLStartTime"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTS:":{"name":"-initWithTTS:","abstract":"

    Convenience init to create a speak message

    ","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTSChunks:":{"name":"-initWithTTSChunks:","abstract":"

    Convenience init to create a speak message

    ","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(py)ttsChunks":{"name":"ttsChunks","abstract":"

    An array of TTSChunk structs which, taken together, specify the phrase to be spoken

    ","parent_name":"SDLSpeak"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)name":{"name":"name","abstract":"

    The name of this soft button state

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)artwork":{"name":"artwork","abstract":"

    The artwork to be used with this button or nil if it is text-only

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)text":{"name":"text","abstract":"

    The text to be used with this button or nil if it is image-only

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)highlighted":{"name":"highlighted","abstract":"

    Whether or not the button should be highlighted on the UI

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)systemAction":{"name":"systemAction","abstract":"

    A special system action

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)softButton":{"name":"softButton","abstract":"

    An SDLSoftButton describing this state

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:image:":{"name":"-initWithStateName:text:image:","abstract":"

    Create the soft button state. Either the text or artwork or both may be set.

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:artwork:":{"name":"-initWithStateName:text:artwork:","abstract":"

    Create the soft button state. Either the text or artwork or both may be set.

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)name":{"name":"name","abstract":"

    The name of this button

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states":{"name":"states","abstract":"

    All states available to this button

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentState":{"name":"currentState","abstract":"

    The name of the current state of this soft button

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentStateSoftButton":{"name":"currentStateSoftButton","abstract":"

    Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)eventHandler":{"name":"eventHandler","abstract":"

    The handler to be called when the button is in the current state and is pressed

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:states:initialStateName:handler:":{"name":"-initWithName:states:initialStateName:handler:","abstract":"

    Create a multi-state (or single-state, but you should use initWithName:state: instead for that case) soft button. For example, a button that changes its image or text, such as a repeat or shuffle button.

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:state:handler:":{"name":"-initWithName:state:handler:","abstract":"

    Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:text:artwork:handler:":{"name":"-initWithName:text:artwork:handler:","abstract":"

    Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToStateNamed:":{"name":"-transitionToStateNamed:","abstract":"

    Transition the soft button to another state in the states property. The wrapper considers all transitions valid (assuming a state with that name exists).

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToNextState":{"name":"-transitionToNextState","abstract":"

    Transition the soft button to the next state of the array set when in the states property

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)stateWithName:":{"name":"-stateWithName:","abstract":"

    Return a state from the state array with a specific name.

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"

    The button supports a short press.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"

    The button supports a LONG press.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"

    The button supports “button down” and “button up”.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)imageSupported":{"name":"imageSupported","abstract":"

    The button supports referencing a static or dynamic image.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)textSupported":{"name":"textSupported","abstract":"

    The button supports the use of text. If not included, the default value should be considered true that the button will support text.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"

    Convenience init

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithType:text:image:highlighted:buttonId:systemAction:handler:":{"name":"-initWithType:text:image:highlighted:buttonId:systemAction:handler:","abstract":"

    Convenience init

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)handler":{"name":"handler","abstract":"

    A handler that may optionally be run when the SDLSoftButton has a corresponding notification occur.

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)type":{"name":"type","abstract":"

    Describes whether this soft button displays only text, only an image, or both

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)text":{"name":"text","abstract":"

    Optional text to display (if defined as TEXT or BOTH type)

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)image":{"name":"image","abstract":"

    Optional image struct for SoftButton (if defined as IMAGE or BOTH type)

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)isHighlighted":{"name":"isHighlighted","abstract":"

    Displays in an alternate mode, e.g. with a colored background or foreground. Depends on the IVI system.

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)softButtonID":{"name":"softButtonID","abstract":"

    Value which is returned via OnButtonPress / OnButtonEvent

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)systemAction":{"name":"systemAction","abstract":"

    Parameter indicating whether selecting a SoftButton shall call a specific system action. This is intended to allow Notifications to bring the callee into full / focus; or in the case of persistent overlays, the overlay can persist when a SoftButton is pressed.

    ","parent_name":"SDLSoftButton"},"Classes/SDLSliderResponse.html#/c:objc(cs)SDLSliderResponse(py)sliderPosition":{"name":"sliderPosition","abstract":"

    The selected position of the slider.

    ","parent_name":"SDLSliderResponse"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:cancelID:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:cancelID:","abstract":"

    Convenience init with all parameters.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:":{"name":"-initWithNumTicks:position:","abstract":"

    Creates a slider with only the number of ticks and position. Note that this is not enough to get a SUCCESS response. You must supply additional data. See below for required parameters.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooter:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooter:timeout:","abstract":"

    Creates a slider with all required data and a static footer (or no footer).

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:","abstract":"

    Creates an slider with all required data and a dynamic footer (or no footer).

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)numTicks":{"name":"numTicks","abstract":"

    Represents a number of selectable items on a horizontal axis.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)position":{"name":"position","abstract":"

    Initial position of slider control (cannot exceed numTicks).

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderHeader":{"name":"sliderHeader","abstract":"

    Text header to display.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderFooter":{"name":"sliderFooter","abstract":"

    Text footer to display.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)timeout":{"name":"timeout","abstract":"

    App defined timeout. Indicates how long of a timeout from the last action (i.e. sliding control resets timeout). If omitted, the value is set to 10 seconds.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)cancelID":{"name":"cancelID","abstract":"

    An ID for this specific slider to allow cancellation through the CancelInteraction RPC.

    ","parent_name":"SDLSlider"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)status":{"name":"status","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)monitoringSystemStatus":{"name":"monitoringSystemStatus","abstract":"

    The status of TPMS for this particular tire

    ","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)pressure":{"name":"pressure","abstract":"

    The pressure value of this particular tire in kPa (kilopascals)

    ","parent_name":"SDLSingleTireStatus"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(im)initWithNavigationText1:navigationText2:eta:timeToDestination:totalDistance:turnIcon:nextTurnIcon:distanceToManeuver:distanceToManeuverScale:maneuverComplete:softButtons:":{"name":"-initWithNavigationText1:navigationText2:eta:timeToDestination:totalDistance:turnIcon:nextTurnIcon:distanceToManeuver:distanceToManeuverScale:maneuverComplete:softButtons:","abstract":"

    Convenience init to create navigation directions

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText1":{"name":"navigationText1","abstract":"

    The first line of text in a multi-line overlay screen.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText2":{"name":"navigationText2","abstract":"

    The second line of text in a multi-line overlay screen.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)eta":{"name":"eta","abstract":"

    Estimated Time of Arrival time at final destination

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)timeToDestination":{"name":"timeToDestination","abstract":"

    The amount of time needed to reach the final destination

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)totalDistance":{"name":"totalDistance","abstract":"

    The distance to the final destination

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)turnIcon":{"name":"turnIcon","abstract":"

    An icon to show with the turn description

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)nextTurnIcon":{"name":"nextTurnIcon","abstract":"

    An icon to show with the next turn description

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuver":{"name":"distanceToManeuver","abstract":"

    Fraction of distance till next maneuver (starting from when AlertManeuver is triggered). Used to calculate progress bar.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuverScale":{"name":"distanceToManeuverScale","abstract":"

    Distance till next maneuver (starting from) from previous maneuver. Used to calculate progress bar.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)maneuverComplete":{"name":"maneuverComplete","abstract":"

    If and when a maneuver has completed while an AlertManeuver is active, the app must send this value set to TRUE in order to clear the AlertManeuver overlay. If omitted the value will be assumed as FALSE.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)softButtons":{"name":"softButtons","abstract":"

    Three dynamic SoftButtons available (first SoftButton is fixed to “Turns”). If omitted on supported displays, the currently displayed SoftButton values will not change.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowAppMenu.html#/c:objc(cs)SDLShowAppMenu(im)initWithMenuID:":{"name":"-initWithMenuID:","abstract":"

    Creates a ShowAppMenu RPC to open the app menu directly to a AddSubMenu RPC’s submenu.

    ","parent_name":"SDLShowAppMenu"},"Classes/SDLShowAppMenu.html#/c:objc(cs)SDLShowAppMenu(py)menuID":{"name":"menuID","abstract":"

    A Menu ID that identifies the AddSubMenu to open if it correlates with the AddSubMenu menuID parameter. If not set the top level menu will be opened.

    ","parent_name":"SDLShowAppMenu"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:":{"name":"-initWithMainField1:mainField2:alignment:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:mainField3:mainField3Type:mainField4:mainField4Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:mainField3:mainField3Type:mainField4:mainField4Type:alignment:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:statusBar:mediaClock:mediaTrack:":{"name":"-initWithMainField1:mainField2:alignment:statusBar:mediaClock:mediaTrack:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:statusBar:mediaClock:mediaTrack:graphic:softButtons:customPresets:textFieldMetadata:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:statusBar:mediaClock:mediaTrack:graphic:softButtons:customPresets:textFieldMetadata:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField1":{"name":"mainField1","abstract":"

    The text displayed in a single-line display, or in the upper display","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField2":{"name":"mainField2","abstract":"

    The text displayed on the second display line of a two-line display

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField3":{"name":"mainField3","abstract":"

    The text displayed on the first display line of the second page

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField4":{"name":"mainField4","abstract":"

    The text displayed on the second display line of the second page

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)alignment":{"name":"alignment","abstract":"

    The alignment that Specifies how mainField1 and mainField2 text","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)statusBar":{"name":"statusBar","abstract":"

    Text in the Status Bar

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaClock":{"name":"mediaClock","abstract":"

    This property is deprecated use SetMediaClockTimer instead.","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaTrack":{"name":"mediaTrack","abstract":"

    The text in the track field

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)graphic":{"name":"graphic","abstract":"

    An image to be shown on supported displays

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"

    An image to be shown on supported displays

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)softButtons":{"name":"softButtons","abstract":"

    The the Soft buttons defined by the App

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)customPresets":{"name":"customPresets","abstract":"

    The Custom Presets defined by the App

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)metadataTags":{"name":"metadataTags","abstract":"

    Text Field Metadata

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)windowID":{"name":"windowID","abstract":"

    This is the unique ID assigned to the window that this RPC is intended. If this param is not included, it will be assumed that this request is specifically for the main window on the main display. - see: PredefinedWindows enum.

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)templateConfiguration":{"name":"templateConfiguration","abstract":"

    Used to set an alternate template layout to a window.

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)templateTitle":{"name":"templateTitle","abstract":"

    The title of the current template.

    ","parent_name":"SDLShow"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countUpFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:":{"name":"+countUpFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:","abstract":"

    Create a media clock timer that counts up, e.g from 0:00 to 4:18.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countUpFromStartTime:toEndTime:playPauseIndicator:":{"name":"+countUpFromStartTime:toEndTime:playPauseIndicator:","abstract":"

    Create a media clock timer that counts up, e.g from 0:00 to 4:18.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countDownFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:":{"name":"+countDownFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:","abstract":"

    Create a media clock timer that counts down, e.g. from 4:18 to 0:00

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countDownFromStartTime:toEndTime:playPauseIndicator:":{"name":"+countDownFromStartTime:toEndTime:playPauseIndicator:","abstract":"

    Create a media clock timer that counts down, e.g. from 4:18 to 0:00

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)pauseWithPlayPauseIndicator:":{"name":"+pauseWithPlayPauseIndicator:","abstract":"

    Pause an existing (counting up / down) media clock timer

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)updatePauseWithNewStartTimeInterval:endTimeInterval:playPauseIndicator:":{"name":"+updatePauseWithNewStartTimeInterval:endTimeInterval:playPauseIndicator:","abstract":"

    Update a pause time (or pause and update the time) on a media clock timer

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)updatePauseWithNewStartTime:endTime:playPauseIndicator:":{"name":"+updatePauseWithNewStartTime:endTime:playPauseIndicator:","abstract":"

    Update a pause time (or pause and update the time) on a media clock timer

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)resumeWithPlayPauseIndicator:":{"name":"+resumeWithPlayPauseIndicator:","abstract":"

    Resume a paused media clock timer. It resumes at the same time at which it was paused.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)clearWithPlayPauseIndicator:":{"name":"+clearWithPlayPauseIndicator:","abstract":"

    Remove a media clock timer from the screen

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:":{"name":"-initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:","abstract":"

    Convenience init to create a SDLSetMediaClockTimer object

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:":{"name":"-initWithUpdateMode:hours:minutes:seconds:","abstract":"

    Convenience init to create a SDLSetMediaClockTimer object

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:":{"name":"-initWithUpdateMode:","abstract":"

    Convenience init to create a SDLSetMediaClockTimer object

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:startTime:endTime:playPauseIndicator:":{"name":"-initWithUpdateMode:startTime:endTime:playPauseIndicator:","abstract":"

    Create a SetMediaClockTimer RPC with all available parameters. It’s recommended to use the specific initializers above.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)startTime":{"name":"startTime","abstract":"

    A Start Time with specifying hour, minute, second values

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)endTime":{"name":"endTime","abstract":"

    An END time of type SDLStartTime, specifying hour, minute, second values

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)updateMode":{"name":"updateMode","abstract":"

    The media clock/timer update mode (COUNTUP/COUNTDOWN/PAUSE/RESUME)

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)audioStreamingIndicator":{"name":"audioStreamingIndicator","abstract":"

    The audio streaming indicator used for a play/pause button.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetInteriorVehicleDataResponse.html#/c:objc(cs)SDLSetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"

    The new module data for the requested module

    ","parent_name":"SDLSetInteriorVehicleDataResponse"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(im)initWithModuleData:":{"name":"-initWithModuleData:","abstract":"

    Convenience init to change settings of a module

    ","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"

    The module data to set for the requested RC module.

    ","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:":{"name":"-initWithHelpText:timeoutText:","abstract":"

    Initialize SetGlobalProperties with help text and timeout text

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:","abstract":"

    Initialize SetGlobalProperties with help text, timeout text, help title, and help items

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:","abstract":"

    Initialize SetGlobalProperties with all possible items

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:menuLayout:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:menuLayout:","abstract":"

    Initialize SetGlobalProperties with all possible items

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)helpPrompt":{"name":"helpPrompt","abstract":"

    Help prompt for when the user asks for help with an interface prompt

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"

    Help prompt for when an interface prompt times out

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelpTitle":{"name":"vrHelpTitle","abstract":"

    Sets a voice recognition Help Title

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelp":{"name":"vrHelp","abstract":"

    Sets the items listed in the VR help screen used in an interaction started by Push to Talk

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuTitle":{"name":"menuTitle","abstract":"

    Text for the menu button label

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuIcon":{"name":"menuIcon","abstract":"

    Icon for the menu button

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)keyboardProperties":{"name":"keyboardProperties","abstract":"

    On-screen keyboard (perform interaction) configuration

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)userLocation":{"name":"userLocation","abstract":"

    Location of the user’s seat. Default is driver’s seat location if it is not set yet

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuLayout":{"name":"menuLayout","abstract":"

    The main menu layout. If this is sent while a menu is already on-screen, the head unit will change the display to the new layout type. See available menu layouts on DisplayCapabilities.menuLayoutsAvailable. Defaults to the head unit default.

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"

    The display capabilities of the new template layout

    ","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"

    The button capabilities of the new template layout

    ","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"

    The soft button capabilities of the new template layout

    ","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"

    The preset bank capabilities of the new template layout

    ","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"

    Convenience init to set a display layout

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithLayout:":{"name":"-initWithLayout:","abstract":"

    Convenience init to set a display layout

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:dayColorScheme:nightColorScheme:":{"name":"-initWithPredefinedLayout:dayColorScheme:nightColorScheme:","abstract":"

    Convenience init to set a display layout

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)displayLayout":{"name":"displayLayout","abstract":"

    A display layout. Predefined or dynamically created screen layout.","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)dayColorScheme":{"name":"dayColorScheme","abstract":"

    The color scheme to be used on a head unit using a “light” or “day” color scheme. The OEM may only support this theme if their head unit only has a light color scheme.

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)nightColorScheme":{"name":"nightColorScheme","abstract":"

    The color scheme to be used on a head unit using a “dark” or “night” color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetCloudAppProperties.html#/c:objc(cs)SDLSetCloudAppProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"

    Convenience init.

    ","parent_name":"SDLSetCloudAppProperties"},"Classes/SDLSetCloudAppProperties.html#/c:objc(cs)SDLSetCloudAppProperties(py)properties":{"name":"properties","abstract":"

    The new cloud application properties.

    ","parent_name":"SDLSetCloudAppProperties"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"

    Convenience init to set an image icon from a file name. The file must already be uploaded to the head unit.

    ","parent_name":"SDLSetAppIcon"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(py)syncFileName":{"name":"syncFileName","abstract":"

    A file reference name","parent_name":"SDLSetAppIcon"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithAddress:addressLines:locationName:locationDescription:phoneNumber:image:deliveryMode:timeStamp:":{"name":"-initWithAddress:addressLines:locationName:locationDescription:phoneNumber:image:deliveryMode:timeStamp:","abstract":"

    Create a SendLocation request with an address object, without Lat/Long coordinates.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:","abstract":"

    Create a SendLocation request with Lat/Long coordinate, not an address object

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:displayAddressLines:phoneNumber:image:deliveryMode:timeStamp:address:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:displayAddressLines:phoneNumber:image:deliveryMode:timeStamp:address:","abstract":"

    Create a SendLocation request with Lat/Long coordinate and an address object and let the nav system decide how to parse it

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"

    The longitudinal coordinate of the location. Either the latitude / longitude OR the address must be provided.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"

    The latitudinal coordinate of the location. Either the latitude / longitude OR the address must be provided.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationName":{"name":"locationName","abstract":"

    Name / title of intended location

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationDescription":{"name":"locationDescription","abstract":"

    Description of the intended location / establishment

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)addressLines":{"name":"addressLines","abstract":"

    Location address for display purposes only.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)phoneNumber":{"name":"phoneNumber","abstract":"

    Phone number of intended location / establishment

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationImage":{"name":"locationImage","abstract":"

    Image / icon of intended location

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)deliveryMode":{"name":"deliveryMode","abstract":"

    Mode in which the sendLocation request is sent

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)timeStamp":{"name":"timeStamp","abstract":"

    Arrival time of Location. If multiple SendLocations are sent, this will be used for sorting as well.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address":{"name":"address","abstract":"

    Address to be used for setting destination. Either the latitude / longitude OR the address must be provided.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(im)initWithHapticRectData:":{"name":"-initWithHapticRectData:","abstract":"

    Constructs a new SDLSendHapticData object indicated by the hapticSpatialData parameter

    ","parent_name":"SDLSendHapticData"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(py)hapticRectData":{"name":"hapticRectData","abstract":"

    Array of spatial 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 spatial data previously sent through RPC. If an empty array is sent, the existing spatial data will be cleared

    ","parent_name":"SDLSendHapticData"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:action:":{"name":"-initWithId:action:","abstract":"

    @abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:label:action:":{"name":"-initWithId:label:action:","abstract":"

    @abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)id":{"name":"id","abstract":"

    @abstract id of the action to be performed.

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)label":{"name":"label","abstract":"

    @abstract label of the action to be performed.

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)action":{"name":"action","abstract":"

    @abstract type of action to be performed

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(im)initWithSeats:cols:rows:levels:":{"name":"-initWithSeats:cols:rows:levels:","abstract":"

    Constructs a newly allocated SDLSeatLocationCapability object with all parameters

    ","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)cols":{"name":"cols","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)rows":{"name":"rows","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)levels":{"name":"levels","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)seats":{"name":"seats","abstract":"

    Contains a list of SeatLocation in the vehicle, the first element is the driver’s seat","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocation.html#/c:objc(cs)SDLSeatLocation(py)grid":{"name":"grid","abstract":"

    Optional

    ","parent_name":"SDLSeatLocation"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:":{"name":"-initWithId:","abstract":"

    Constructs a newly allocated SDLSeatControlData object with cushion and firmness

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:":{"name":"-initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:","abstract":"

    Constructs a newly allocated SDLSeatControlData object with cushion and firmness

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)id":{"name":"id","abstract":"

    @abstract id of seat that is a remote controllable seat.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingEnabled":{"name":"heatingEnabled","abstract":"

    @abstract Whether or not heating is enabled.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingEnabled":{"name":"coolingEnabled","abstract":"

    @abstract Whether or not cooling is enabled.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingLevel":{"name":"heatingLevel","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingLevel":{"name":"coolingLevel","abstract":"

    @abstract cooling level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)horizontalPosition":{"name":"horizontalPosition","abstract":"

    @abstract horizontal Position in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)verticalPosition":{"name":"verticalPosition","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)frontVerticalPosition":{"name":"frontVerticalPosition","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backVerticalPosition":{"name":"backVerticalPosition","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backTiltAngle":{"name":"backTiltAngle","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportHorizontalPosition":{"name":"headSupportHorizontalPosition","abstract":"

    @abstract head Support Horizontal Position in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportVerticalPosition":{"name":"headSupportVerticalPosition","abstract":"

    @abstract head Support Vertical Position in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageEnabled":{"name":"massageEnabled","abstract":"

    @abstract Whether or not massage is enabled.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageMode":{"name":"massageMode","abstract":"

    @abstract Array of massage mode data.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageCushionFirmness":{"name":"massageCushionFirmness","abstract":"

    @abstract Array of firmness of a cushion.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)memory":{"name":"memory","abstract":"

    @abstract type of action to be performed

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"

    Constructs a newly allocated SDLSeatControlCapabilities object with moduleName

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:moduleInfo:":{"name":"-initWithName:moduleInfo:","abstract":"

    Constructs a newly allocated SDLSeatControlCapabilities object with moduleName and moduleInfo

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:":{"name":"-initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:","abstract":"

    Constructs a newly allocated SDLSeatControlCapabilities object with given parameters

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:moduleInfo:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:":{"name":"-initWithName:moduleInfo:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:","abstract":"

    Constructs a newly allocated SDLSeatControlCapabilities object with all parameters

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    @abstract The short friendly name of the light control module.","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingEnabledAvailable":{"name":"heatingEnabledAvailable","abstract":"

    @abstract Whether or not heating is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingEnabledAvailable":{"name":"coolingEnabledAvailable","abstract":"

    @abstract Whether or not cooling is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingLevelAvailable":{"name":"heatingLevelAvailable","abstract":"

    @abstract Whether or not heating level is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingLevelAvailable":{"name":"coolingLevelAvailable","abstract":"

    @abstract Whether or not cooling level is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)horizontalPositionAvailable":{"name":"horizontalPositionAvailable","abstract":"

    @abstract Whether or not horizontal Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)verticalPositionAvailable":{"name":"verticalPositionAvailable","abstract":"

    @abstract Whether or not vertical Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)frontVerticalPositionAvailable":{"name":"frontVerticalPositionAvailable","abstract":"

    @abstract Whether or not front Vertical Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backVerticalPositionAvailable":{"name":"backVerticalPositionAvailable","abstract":"

    @abstract Whether or not back Vertical Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backTiltAngleAvailable":{"name":"backTiltAngleAvailable","abstract":"

    @abstract Whether or not backTilt Angle Available is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportHorizontalPositionAvailable":{"name":"headSupportHorizontalPositionAvailable","abstract":"

    @abstract Whether or not head Supports for Horizontal Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportVerticalPositionAvailable":{"name":"headSupportVerticalPositionAvailable","abstract":"

    @abstract Whether or not head Supports for Vertical Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageEnabledAvailable":{"name":"massageEnabledAvailable","abstract":"

    @abstract Whether or not massage Enabled is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageModeAvailable":{"name":"massageModeAvailable","abstract":"

    @abstract Whether or not massage Mode is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageCushionFirmnessAvailable":{"name":"massageCushionFirmnessAvailable","abstract":"

    @abstract Whether or not massage Cushion Firmness is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)memoryAvailable":{"name":"memoryAvailable","abstract":"

    @abstract Whether or not memory is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    @abstract Information about a RC module, including its id.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:":{"name":"-initWithMessage:","abstract":"

    Convenience init for creating a scrolling message with text.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:cancelID:":{"name":"-initWithMessage:timeout:softButtons:cancelID:","abstract":"

    Convenience init for creating a scrolling message with text and buttons.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:":{"name":"-initWithMessage:timeout:softButtons:","abstract":"

    Convenience init for creating a scrolling message with text and buttons.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)scrollableMessageBody":{"name":"scrollableMessageBody","abstract":"

    Body of text that can include newlines and tabs.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)timeout":{"name":"timeout","abstract":"

    App defined timeout. Indicates how long of a timeout from the last action (i.e. scrolling message resets timeout). If not set, a default value of 30 seconds is used by Core.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)softButtons":{"name":"softButtons","abstract":"

    Buttons for the displayed scrollable message. If omitted on supported displays, only the system defined “Close” SoftButton will be displayed.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)cancelID":{"name":"cancelID","abstract":"

    An ID for this specific scrollable message to allow cancellation through the CancelInteraction RPC.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)resolution":{"name":"resolution","abstract":"

    The resolution of the prescribed screen area

    ","parent_name":"SDLScreenParams"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)touchEventAvailable":{"name":"touchEventAvailable","abstract":"

    Types of screen touch events available in screen area

    ","parent_name":"SDLScreenParams"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1":{"name":"textField1","abstract":"

    The top text field within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2":{"name":"textField2","abstract":"

    The second text field within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3":{"name":"textField3","abstract":"

    The third text field within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4":{"name":"textField4","abstract":"

    The fourth text field within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)mediaTrackTextField":{"name":"mediaTrackTextField","abstract":"

    The media text field available within the media layout. Often less emphasized than textField(1-4)

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)primaryGraphic":{"name":"primaryGraphic","abstract":"

    The primary graphic within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"

    A secondary graphic used in some template layouts

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textAlignment":{"name":"textAlignment","abstract":"

    What alignment textField(1-4) should use

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1Type":{"name":"textField1Type","abstract":"

    The type of data textField1 describes

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2Type":{"name":"textField2Type","abstract":"

    The type of data textField2 describes

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3Type":{"name":"textField3Type","abstract":"

    The type of data textField3 describes

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4Type":{"name":"textField4Type","abstract":"

    The type of data textField4 describes

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)title":{"name":"title","abstract":"

    The title of the current template layout.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)softButtonObjects":{"name":"softButtonObjects","abstract":"

    The current list of soft buttons within a template layout. Set this array to change the displayed soft buttons.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menuConfiguration":{"name":"menuConfiguration","abstract":"

    Configures the layout of the menu and sub-menus. If set after a menu already exists, the existing main menu layout will be updated.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menu":{"name":"menu","abstract":"

    The current list of menu cells displayed in the app’s menu.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)dynamicMenuUpdatesMode":{"name":"dynamicMenuUpdatesMode","abstract":"

    Change the mode of the dynamic menu updater to be enabled, disabled, or enabled on known compatible head units.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)voiceCommands":{"name":"voiceCommands","abstract":"

    The current list of voice commands available for the user to speak and be recognized by the IVI’s voice recognition engine.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)keyboardConfiguration":{"name":"keyboardConfiguration","abstract":"

    The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)preloadedChoices":{"name":"preloadedChoices","abstract":"

    Cells will be hashed by their text, image names, and VR command text. When assembling an SDLChoiceSet, you can pull objects from here, or recreate them. The preloaded versions will be used so long as their text, image names, and VR commands are the same.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)initWithConnectionManager:fileManager:systemCapabilityManager:":{"name":"-initWithConnectionManager:fileManager:systemCapabilityManager:","abstract":"

    Initialize a screen manager

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"

    Starts the manager and all sub-managers

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)stop":{"name":"-stop","abstract":"

    Stops the manager.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)beginUpdates":{"name":"-beginUpdates","abstract":"

    Delays all screen updates until endUpdatesWithCompletionHandler: is called.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdates":{"name":"-endUpdates","abstract":"

    Update text fields with new text set into the text field properties. Pass an empty string \\@"" to clear the text field.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdatesWithCompletionHandler:":{"name":"-endUpdatesWithCompletionHandler:","abstract":"

    Update text fields with new text set into the text field properties. Pass an empty string \\@"" to clear the text field.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)softButtonObjectNamed:":{"name":"-softButtonObjectNamed:","abstract":"

    Retrieve a SoftButtonObject based on its name.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)preloadChoices:withCompletionHandler:":{"name":"-preloadChoices:withCompletionHandler:","abstract":"

    Preload cells to the head unit. This will greatly reduce the time taken to present a choice set. Any already matching a choice already on the head unit will be ignored. You do not need to wait until the completion handler is called to present a choice set containing choices being loaded. The choice set will wait until the preload completes and then immediately present.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)deleteChoices:":{"name":"-deleteChoices:","abstract":"

    Delete loaded cells from the head unit. If the cells don’t exist on the head unit they will be ignored.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentChoiceSet:mode:":{"name":"-presentChoiceSet:mode:","abstract":"

    Present a choice set on the head unit with a certain interaction mode. You should present in VR only if the user reached this choice set by using their voice, in Manual only if the user used touch to reach this choice set. Use Both if you’re lazy…for real though, it’s kind of confusing to the user and isn’t recommended.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentSearchableChoiceSet:mode:withKeyboardDelegate:":{"name":"-presentSearchableChoiceSet:mode:withKeyboardDelegate:","abstract":"

    Present a choice set on the head unit with a certain interaction mode. You should present in VR only if the user reached this choice set by using their voice, in Manual only if the user used touch to reach this choice set. Use Both if you’re lazy…for real though, it’s kind of confusing to the user and isn’t recommended.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentKeyboardWithInitialText:delegate:":{"name":"-presentKeyboardWithInitialText:delegate:","abstract":"

    Present a keyboard-only interface to the user and receive input. The user will be able to input text in the keyboard when in a non-driver distraction situation.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)dismissKeyboardWithCancelID:":{"name":"-dismissKeyboardWithCancelID:","abstract":"

    Cancels the keyboard-only interface if it is currently showing. If the keyboard has not yet been sent to Core, it will not be sent.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)openMenu":{"name":"-openMenu","abstract":"

    Present the top-level of your application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)openSubmenu:":{"name":"-openSubmenu:","abstract":"

    Present the application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden. You must update the menu with the proper cells before calling this method. This RPC will fail if the cell does not contain a sub menu, or is not in the menu array.

    ","parent_name":"SDLScreenManager"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(im)initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:":{"name":"-initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:","abstract":"

    Convenience init to SISData

    ","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationShortName":{"name":"stationShortName","abstract":"

    @abstract Identifies the 4-alpha-character station call sign","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationIDNumber":{"name":"stationIDNumber","abstract":"

    @abstract Used for network Application.","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLongName":{"name":"stationLongName","abstract":"

    @abstract Identifies the station call sign or other identifying","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLocation":{"name":"stationLocation","abstract":"

    @abstract Provides the 3-dimensional geographic station location

    ","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationMessage":{"name":"stationMessage","abstract":"

    @abstract May be used to convey textual information of general interest","parent_name":"SDLSISData"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"

    Convenience init to reset global properties.

    ","parent_name":"SDLResetGlobalProperties"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(py)properties":{"name":"properties","abstract":"

    An array of one or more GlobalProperty enumeration elements","parent_name":"SDLResetGlobalProperties"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(im)initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:":{"name":"-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:","abstract":"

    Constructs a newly allocated SDLRemoteControlCapabilities object

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(im)initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:":{"name":"-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:","abstract":"

    Constructs a newly allocated SDLRemoteControlCapabilities object with given parameters

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)climateControlCapabilities":{"name":"climateControlCapabilities","abstract":"

    If included, the platform supports RC climate controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)radioControlCapabilities":{"name":"radioControlCapabilities","abstract":"

    If included, the platform supports RC radio controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"

    If included, the platform supports RC button controls with the included button names.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)seatControlCapabilities":{"name":"seatControlCapabilities","abstract":"

    If included, the platform supports seat controls.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)audioControlCapabilities":{"name":"audioControlCapabilities","abstract":"

    If included, the platform supports audio controls.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)hmiSettingsControlCapabilities":{"name":"hmiSettingsControlCapabilities","abstract":"

    If included, the platform supports hmi setting controls.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)lightControlCapabilities":{"name":"lightControlCapabilities","abstract":"

    If included, the platform supports light controls.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(im)initWithModuleType:moduleId:":{"name":"-initWithModuleType:moduleId:","abstract":"

    Convenience init to release a controlled module

    ","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(py)moduleType":{"name":"moduleType","abstract":"

    The module type that the app requests to control.

    ","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(py)moduleId":{"name":"moduleId","abstract":"

    Id of a module, published by System Capability.

    ","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"

    Specifies the negotiated version number of the SmartDeviceLink protocol that is to be supported by the mobile application.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlMsgVersion":{"name":"sdlMsgVersion","abstract":"

    Specifies the negotiated version number of the SmartDeviceLink protocol that is to be supported by the mobile application.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)language":{"name":"language","abstract":"

    The currently active VR+TTS language on the module. See “Language” for options.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"

    The currently active display language on the module. See “Language” for options.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"

    Contains information about the display’s capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"

    Contains information about the head unit button capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"

    Contains information about the head unit soft button capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"

    If returned, the platform supports custom on-screen Presets

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"

    Contains information about the HMI zone capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)speechCapabilities":{"name":"speechCapabilities","abstract":"

    Contains information about the text-to-speech capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)prerecordedSpeech":{"name":"prerecordedSpeech","abstract":"

    Contains a list of prerecorded speech items present on the platform.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vrCapabilities":{"name":"vrCapabilities","abstract":"

    Contains information about the VR capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"

    Describes different audio type configurations for PerformAudioPassThru, e.g. {8kHz,8-bit,PCM}. The audio is recorded in monaural.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)pcmStreamCapabilities":{"name":"pcmStreamCapabilities","abstract":"

    Describes different audio type configurations for the audio PCM stream service, e.g. {8kHz,8-bit,PCM}

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vehicleType":{"name":"vehicleType","abstract":"

    Specifies the connected vehicle’s type.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)supportedDiagModes":{"name":"supportedDiagModes","abstract":"

    Specifies the white-list of supported diagnostic modes (0x00-0xFF) capable for DiagnosticMessage requests. If a mode outside this list is requested, it will be rejected.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"

    Specifies the HMI capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlVersion":{"name":"sdlVersion","abstract":"

    The version of SDL Core running on the connected head unit

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)systemSoftwareVersion":{"name":"systemSoftwareVersion","abstract":"

    The software version of the system that implements the SmartDeviceLink core.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)iconResumed":{"name":"iconResumed","abstract":"

    Existence of apps icon at system. If true, apps icon was resumed at system. If false, apps icon is not resumed at system.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithLifecycleConfiguration:":{"name":"-initWithLifecycleConfiguration:","abstract":"

    Convenience init for registering the application with a lifecycle configuration.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:":{"name":"-initWithAppName:appId:languageDesired:","abstract":"

    Convenience init for registering the application with an app name, app id, and desired language.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:":{"name":"-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:","abstract":"

    Convenience init for registering the application with an app name, app id, desired language, whether or not the app is a media app, app types, and the short app name.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:":{"name":"-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:","abstract":"

    Convenience init for registering the application with an app name, app id, desired language, whether or not the app is a media app, app types, the short app name, tts name, voice recognition synonyms, the hmi display language desired, and the resume hash.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:":{"name":"-initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:","abstract":"

    Convenience init for registering the application with all possible options.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"

    Specifies the version number of the SmartDeviceLink protocol that is supported by the mobile application.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)sdlMsgVersion":{"name":"sdlMsgVersion","abstract":"

    Specifies the version number of the SmartDeviceLink protocol that is supported by the mobile application.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appName":{"name":"appName","abstract":"

    The mobile application’s name. This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SmartDeviceLink. Applications with the same name will be rejected.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ttsName":{"name":"ttsName","abstract":"

    Text-to-speech string for voice recognition of the mobile application name. Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"

    Provides an abbreviated version of the app name (if needed), that will be displayed on head units that support very few characters. If not provided, the appName is used instead (and will be truncated if too long). It’s recommended that this string be no longer than 5 characters.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)vrSynonyms":{"name":"vrSynonyms","abstract":"

    Defines additional voice recognition commands

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)isMediaApplication":{"name":"isMediaApplication","abstract":"

    Indicates if the application is a media or a non-media application. Media applications will appear in the head unit’s media source list and can use the MEDIA template.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)languageDesired":{"name":"languageDesired","abstract":"

    App’s starting VR+TTS language. If there is a mismatch with the head unit, the app will be able to change its language with ChangeRegistration prior to app being brought into focus.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hmiDisplayLanguageDesired":{"name":"hmiDisplayLanguageDesired","abstract":"

    Current app’s expected display language. If there is a mismatch with the head unit, the app will be able to change its language with ChangeRegistration prior to app being brought into focus.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appHMIType":{"name":"appHMIType","abstract":"

    List of all applicable app HMI types stating which HMI classifications to be given to the app.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hashID":{"name":"hashID","abstract":"

    ID used to uniquely identify a previous state of all app data that can persist through connection cycles (e.g. ignition cycles). This registered data (commands, submenus, choice sets, etc.) can be reestablished without needing to explicitly re-send each piece. If omitted, then the previous state of an app’s commands, etc. will not be restored.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)deviceInfo":{"name":"deviceInfo","abstract":"

    Information about the connecting device.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appID":{"name":"appID","abstract":"

    ID used to validate app with policy table entries.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)fullAppID":{"name":"fullAppID","abstract":"

    A full UUID appID used to validate app with policy table entries.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appInfo":{"name":"appInfo","abstract":"

    Contains detailed information about the registered application.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)dayColorScheme":{"name":"dayColorScheme","abstract":"

    The color scheme to be used on a head unit using a “light” or “day” color scheme. The OEM may only support this theme if their head unit only has a light color scheme.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)nightColorScheme":{"name":"nightColorScheme","abstract":"

    The color scheme to be used on a head unit using a “dark” or “night” color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithX:y:width:height:":{"name":"-initWithX:y:width:height:","abstract":"

    Create a Rectangle

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithCGRect:":{"name":"-initWithCGRect:","abstract":"

    Create a Rectangle from a CGRect

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)x":{"name":"x","abstract":"

    The X-coordinate of the user control

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)y":{"name":"y","abstract":"

    The Y-coordinate of the user control

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)width":{"name":"width","abstract":"

    The width of the user control’s bounding rectangle

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)height":{"name":"height","abstract":"

    The height of the user control’s bounding rectangle

    ","parent_name":"SDLRectangle"},"Classes/SDLReadDIDResponse.html#/c:objc(cs)SDLReadDIDResponse(py)didResult":{"name":"didResult","abstract":"

    Array of requested DID results (with data if available).

    ","parent_name":"SDLReadDIDResponse"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(im)initWithECUName:didLocation:":{"name":"-initWithECUName:didLocation:","abstract":"

    Convenience init

    ","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)ecuName":{"name":"ecuName","abstract":"

    An ID of the vehicle module","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)didLocation":{"name":"didLocation","abstract":"

    Raw data from vehicle data DID location(s)","parent_name":"SDLReadDID"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:":{"name":"-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:":{"name":"-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyInteger":{"name":"frequencyInteger","abstract":"

    The integer part of the frequency ie for 101.7 this value should be 101

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyFraction":{"name":"frequencyFraction","abstract":"

    The fractional part of the frequency for 101.7 is 7

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)band":{"name":"band","abstract":"

    Radio band value

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)rdsData":{"name":"rdsData","abstract":"

    Read only parameter. See RDSData data type for details.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDs":{"name":"availableHDs","abstract":"

    number of HD sub-channels if available

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDChannels":{"name":"availableHDChannels","abstract":"

    the list of available hd sub-channel indexes, empty list means no Hd channel is available, read-only

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdChannel":{"name":"hdChannel","abstract":"

    Current HD sub-channel if available

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalStrength":{"name":"signalStrength","abstract":"

    Signal Strength Value

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalChangeThreshold":{"name":"signalChangeThreshold","abstract":"

    If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)radioEnable":{"name":"radioEnable","abstract":"

    True if the radio is on, false is the radio is off. When the radio is disabled, no data other than radioEnable is included in a GetInteriorVehicleData response

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)state":{"name":"state","abstract":"

    Read only parameter. See RadioState data type for details.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdRadioEnable":{"name":"hdRadioEnable","abstract":"

    True if the hd radio is on, false is the radio is off

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)sisData":{"name":"sisData","abstract":"

    Read Read-only Station Information Service (SIS) data provides basic information","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:moduleInfo:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:moduleInfo:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    The short friendly name of the radio control module.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioEnableAvailable":{"name":"radioEnableAvailable","abstract":"

    Availability of the control of enable/disable radio.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioBandAvailable":{"name":"radioBandAvailable","abstract":"

    Availability of the control of radio band.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioFrequencyAvailable":{"name":"radioFrequencyAvailable","abstract":"

    Availability of the control of radio frequency.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdChannelAvailable":{"name":"hdChannelAvailable","abstract":"

    Availability of the control of HD radio channel.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)rdsDataAvailable":{"name":"rdsDataAvailable","abstract":"

    Availability of the getting Radio Data System (RDS) data.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDsAvailable":{"name":"availableHDsAvailable","abstract":"

    Availability of the getting the number of available HD channels.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDChannelsAvailable":{"name":"availableHDChannelsAvailable","abstract":"

    Availability of the list of available HD sub-channel indexes.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)stateAvailable":{"name":"stateAvailable","abstract":"

    Availability of the getting the Radio state.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalStrengthAvailable":{"name":"signalStrengthAvailable","abstract":"

    Availability of the getting the signal strength.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalChangeThresholdAvailable":{"name":"signalChangeThresholdAvailable","abstract":"

    Availability of the getting the signal Change Threshold

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdRadioEnableAvailable":{"name":"hdRadioEnableAvailable","abstract":"

    Availability of the control of enable/disable HD radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)siriusXMRadioAvailable":{"name":"siriusXMRadioAvailable","abstract":"

    Availability of sirius XM radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)sisDataAvailable":{"name":"sisDataAvailable","abstract":"

    Availability of the getting HD radio Station Information Service (SIS) data.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(py)store":{"name":"store","abstract":"

    The store that contains RPC data

    ","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(py)payloadProtected":{"name":"payloadProtected","abstract":"

    Declares if the RPC payload ought to be protected

    ","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)initWithDictionary:":{"name":"-initWithDictionary:","abstract":"

    Convenience init

    ","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)serializeAsDictionary:":{"name":"-serializeAsDictionary:","abstract":"

    Converts struct to JSON formatted data

    ","parent_name":"SDLRPCStruct"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(py)response":{"name":"response","abstract":"

    The response to be included within the userinfo dictionary

    ","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)initWithName:object:rpcResponse:":{"name":"-initWithName:object:rpcResponse:","abstract":"

    Create an NSNotification object containing an SDLRPCResponse

    ","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseMemberOfClass:":{"name":"-isResponseMemberOfClass:","abstract":"

    Returns whether or not the containing response is equal to a class, not including subclasses.

    ","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseKindOfClass:":{"name":"-isResponseKindOfClass:","abstract":"

    Returns whether or not the containing response is a kind of class, including subclasses.

    ","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)correlationID":{"name":"correlationID","abstract":"

    The correlation id of the corresponding SDLRPCRequest.

    ","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)success":{"name":"success","abstract":"

    Whether or not the SDLRPCRequest was successful.

    ","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)resultCode":{"name":"resultCode","abstract":"

    The result of the SDLRPCRequest. If the request failed, the result code contains the failure reason.

    ","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)info":{"name":"info","abstract":"

    More detailed success or error message.

    ","parent_name":"SDLRPCResponse"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(py)request":{"name":"request","abstract":"

    The request to be included in the userinfo dictionary

    ","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)initWithName:object:rpcRequest:":{"name":"-initWithName:object:rpcRequest:","abstract":"

    Create an NSNotification object containing an SDLRPCRequest

    ","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)isRequestMemberOfClass:":{"name":"-isRequestMemberOfClass:","abstract":"

    Returns whether or not the containing request is equal to a class, not including subclasses.

    ","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)isRequestKindOfClass:":{"name":"-isRequestKindOfClass:","abstract":"

    Returns whether or not the containing request is a kind of class, including subclasses.

    ","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequest.html#/c:objc(cs)SDLRPCRequest(py)correlationID":{"name":"correlationID","abstract":"

    A unique id assigned to message sent to Core. The Correlation ID is used to map a request to its response.

    ","parent_name":"SDLRPCRequest"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(py)notification":{"name":"notification","abstract":"

    The notification within the userinfo dictionary

    ","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)initWithName:object:rpcNotification:":{"name":"-initWithName:object:rpcNotification:","abstract":"

    Create an NSNotification object caontaining an SDLRPCNotification

    ","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationMemberOfClass:":{"name":"-isNotificationMemberOfClass:","abstract":"

    Returns whether or not the containing notification is equal to a class, not including subclasses.

    ","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationKindOfClass:":{"name":"-isNotificationKindOfClass:","abstract":"

    Returns whether or not the containing notification is a kind of class, including subclasses.

    ","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)initWithName:":{"name":"-initWithName:","abstract":"

    Convenience init

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getFunctionName":{"name":"-getFunctionName","abstract":"

    Returns the function name.

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setFunctionName:":{"name":"-setFunctionName:","abstract":"

    Sets the function name.

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getParameters:":{"name":"-getParameters:","abstract":"

    Returns the value associated with the provided key. If the key does not exist, null is returned.

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setParameters:value:":{"name":"-setParameters:value:","abstract":"

    Sets a key-value pair using the function name as the key.

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)bulkData":{"name":"bulkData","abstract":"

    The data in the message

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)name":{"name":"name","abstract":"

    The name of the message

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)parameters":{"name":"parameters","abstract":"

    The JSON-RPC parameters

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)messageType":{"name":"messageType","abstract":"

    The type of data in the message

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithRed:green:blue:":{"name":"-initWithRed:green:blue:","abstract":"

    Create an SDL color object with red / green / blue values between 0-255

    ","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithColor:":{"name":"-initWithColor:","abstract":"

    Create an SDL color object with a UIColor object.

    ","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)red":{"name":"red","abstract":"

    The red value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)green":{"name":"green","abstract":"

    The green value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)blue":{"name":"blue","abstract":"

    The blue value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(im)initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:":{"name":"-initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:","abstract":"

    Convenience init

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programService":{"name":"programService","abstract":"

    Program Service Name

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)radioText":{"name":"radioText","abstract":"

    Radio Text

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)clockText":{"name":"clockText","abstract":"

    The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programIdentification":{"name":"programIdentification","abstract":"

    Program Identification - the call sign for the radio station

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programType":{"name":"programType","abstract":"

    The program type - The region should be used to differentiate between EU","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficProgramIdentification":{"name":"trafficProgramIdentification","abstract":"

    Traffic Program Identification - Identifies a station that offers traffic

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficAnnouncementIdentification":{"name":"trafficAnnouncementIdentification","abstract":"

    Traffic Announcement Identification - Indicates an ongoing traffic announcement

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)region":{"name":"region","abstract":"

    Region

    ","parent_name":"SDLRDSData"},"Classes/SDLPutFileResponse.html#/c:objc(cs)SDLPutFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"

    Provides the total local space available in SDL Core for the registered app. If the transfer has systemFile enabled, then the value will be set to 0 automatically.

    ","parent_name":"SDLPutFileResponse"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)init":{"name":"-init","abstract":"

    Init

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:":{"name":"-initWithFileName:fileType:","abstract":"

    Convenience init for creating a putfile with a name and file format.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:":{"name":"-initWithFileName:fileType:persistentFile:","abstract":"

    Convenience init for creating a putfile with a name, file format, and persistance.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:","abstract":"

    Convenience init for creating a putfile that is part of a multiple frame payload.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:","abstract":"

    Convenience init for creating a putfile that is part of a multiple frame payload.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:","abstract":"

    Convenience init for creating a putfile that is part of a multiple frame payload. A CRC checksum is calculated for the bulk data.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)syncFileName":{"name":"syncFileName","abstract":"

    File reference name

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)fileType":{"name":"fileType","abstract":"

    A FileType value representing a selected file type

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)persistentFile":{"name":"persistentFile","abstract":"

    A value to 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.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)systemFile":{"name":"systemFile","abstract":"

    Indicates if the file is meant to be passed through core to elsewhere on the system. If set to TRUE, then the system will instead pass the data thru as it arrives to a predetermined area outside of core.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)offset":{"name":"offset","abstract":"

    Offset in bytes for resuming partial data chunks.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)length":{"name":"length","abstract":"

    Length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)crc":{"name":"crc","abstract":"

    Additional CRC32 checksum to protect data integrity up to 512 Mbits.

    ","parent_name":"SDLPutFile"},"Classes/SDLPublishAppServiceResponse.html#/c:objc(cs)SDLPublishAppServiceResponse(im)initWithAppServiceRecord:":{"name":"-initWithAppServiceRecord:","abstract":"

    Convenience init.

    ","parent_name":"SDLPublishAppServiceResponse"},"Classes/SDLPublishAppServiceResponse.html#/c:objc(cs)SDLPublishAppServiceResponse(py)appServiceRecord":{"name":"appServiceRecord","abstract":"

    If the request was successful, this object will be the current status of the service record for the published service. This will include the Core supplied service ID.

    ","parent_name":"SDLPublishAppServiceResponse"},"Classes/SDLPublishAppService.html#/c:objc(cs)SDLPublishAppService(im)initWithAppServiceManifest:":{"name":"-initWithAppServiceManifest:","abstract":"

    Convenience init.

    ","parent_name":"SDLPublishAppService"},"Classes/SDLPublishAppService.html#/c:objc(cs)SDLPublishAppService(py)appServiceManifest":{"name":"appServiceManifest","abstract":"

    The manifest of the service that wishes to be published.","parent_name":"SDLPublishAppService"},"Classes/SDLPresetBankCapabilities.html#/c:objc(cs)SDLPresetBankCapabilities(py)onScreenPresetsAvailable":{"name":"onScreenPresetsAvailable","abstract":"

    If Onscreen custom presets are available.

    ","parent_name":"SDLPresetBankCapabilities"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(im)initWithFirstTouch:secondTouch:":{"name":"-initWithFirstTouch:secondTouch:","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)firstTouch":{"name":"firstTouch","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)secondTouch":{"name":"secondTouch","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)distance":{"name":"distance","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)center":{"name":"center","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)isValid":{"name":"isValid","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(im)initWithDialNumber:":{"name":"-initWithDialNumber:","abstract":"

    Convenience init for defining the phone capability

    ","parent_name":"SDLPhoneCapability"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(py)dialNumberEnabled":{"name":"dialNumberEnabled","abstract":"

    Whether or not the DialNumber RPC is enabled.

    ","parent_name":"SDLPhoneCapability"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(py)requiresEncryption":{"name":"requiresEncryption","abstract":"

    Flag indicating if the app requires an encryption service to be active.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"

    Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLPermissionManager, you should use the manager found on SDLManager.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)stop":{"name":"-stop","abstract":"

    Stop the manager. This method is used internally.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)isRPCAllowed:":{"name":"-isRPCAllowed:","abstract":"

    Determine if an individual RPC is allowed for the current HMI level

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)groupStatusOfRPCs:":{"name":"-groupStatusOfRPCs:","abstract":"

    Determine if all RPCs are allowed for the current HMI level

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)statusOfRPCs:":{"name":"-statusOfRPCs:","abstract":"

    Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber specifying if that RPC is currently allowed

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)addObserverForRPCs:groupType:withHandler:":{"name":"-addObserverForRPCs:groupType:withHandler:","abstract":"

    Add an observer for specified RPC names, with a callback that will be called whenever the value changes, as well as immediately with the current status.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeAllObservers":{"name":"-removeAllObservers","abstract":"

    Remove every current observer

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeObserverForIdentifier:":{"name":"-removeObserverForIdentifier:","abstract":"

    Remove block observers for the specified RPC

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)rpcRequiresEncryption:":{"name":"-rpcRequiresEncryption:","abstract":"

    Check whether or not an RPC needs encryption.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)rpcName":{"name":"rpcName","abstract":"

    Name of the individual RPC in the policy table.

    ","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)hmiPermissions":{"name":"hmiPermissions","abstract":"

    HMI Permissions for the individual RPC; i.e. which HMI levels may it be used in

    ","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)parameterPermissions":{"name":"parameterPermissions","abstract":"

    RPC parameters for the individual RPC

    ","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)requireEncryption":{"name":"requireEncryption","abstract":"

    Describes whether or not the RPC needs encryption

    ","parent_name":"SDLPermissionItem"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)choiceID":{"name":"choiceID","abstract":"

    ID of the choice that was selected in response to PerformInteraction. Only is valid if general result is “success:true”.

    ","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)manualTextEntry":{"name":"manualTextEntry","abstract":"

    Manually entered text selection, e.g. through keyboard. Can be returned in lieu of choiceID, depending on the trigger source.

    ","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)triggerSource":{"name":"triggerSource","abstract":"

    A SDLTriggerSource object which will be shown in the HMI. Only is valid if resultCode is SUCCESS.

    ","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialText:interactionMode:interactionChoiceSetIDList:cancelID:":{"name":"-initWithInitialText:interactionMode:interactionChoiceSetIDList:cancelID:","abstract":"

    Convenience init for creating a basic display or voice-recognition menu.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialText:initialPrompt:interactionMode:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:timeout:vrHelp:interactionLayout:cancelID:":{"name":"-initWithInitialText:initialPrompt:interactionMode:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:timeout:vrHelp:interactionLayout:cancelID:","abstract":"

    Convenience init for setting all parameters of a display or voice-recognition menu.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetId:":{"name":"-initWithInteractionChoiceSetId:","abstract":"

    Convenience init for setting the a single visual or voice-recognition menu choice.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetIdList:":{"name":"-initWithInteractionChoiceSetIdList:","abstract":"

    Convenience init for setting the a visual or voice-recognition menu choices.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:","abstract":"

    Convenience init for creating a visual or voice-recognition menu with one choice.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:","abstract":"

    Convenience init for creating a visual or voice-recognition menu with one choice and VR help items.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:","abstract":"

    Convenience init for creating a visual or voice-recognition menu using the default display layout and VR help items. Prompts are created from the passed strings.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:vrHelp:","abstract":"

    Convenience init for creating a visual or voice-recognition menu using the default display layout. Prompts are created from the passed strings.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:":{"name":"-initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:","abstract":"

    Convenience init for creating a visual or voice-recognition menu using the default display layout.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:interactionLayout:":{"name":"-initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:interactionLayout:","abstract":"

    Convenience init for setting all parameters of a visual or voice-recognition menu.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialText":{"name":"initialText","abstract":"

    Text to be displayed first.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialPrompt":{"name":"initialPrompt","abstract":"

    This is the TTS prompt spoken to the user at the start of an interaction.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionMode":{"name":"interactionMode","abstract":"

    For application-requested interactions, this mode indicates the method in which the user is notified and uses the interaction. Users can choose either only by voice (VR_ONLY), by tactile selection from the menu (MANUAL_ONLY), or by either mode (BOTH).

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionChoiceSetIDList":{"name":"interactionChoiceSetIDList","abstract":"

    List of interaction choice set IDs to use with an interaction.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)helpPrompt":{"name":"helpPrompt","abstract":"

    Help text. This is the spoken text when a user speaks “help” while the interaction is occurring.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"

    Timeout text. This text is spoken when a VR interaction times out.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeout":{"name":"timeout","abstract":"

    Timeout in milliseconds. Applies only to the menu portion of the interaction. The VR timeout will be handled by the platform. If omitted a standard value of 10 seconds is used.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)vrHelp":{"name":"vrHelp","abstract":"

    Suggested voice recognition help items to display on-screen during a perform interaction. If omitted on supported displays, the default generated list of suggested choices shall be displayed.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionLayout":{"name":"interactionLayout","abstract":"

    For tactile interaction modes (MANUAL_ONLY, or BOTH), the layout mode of how the choices are presented.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)cancelID":{"name":"cancelID","abstract":"

    An ID for this specific perform interaction to allow cancellation through the CancelInteraction RPC.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:","abstract":"

    Convenience init to perform an audio pass thru

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:":{"name":"-initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:","abstract":"

    Convenience init to perform an audio pass thru

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:","abstract":"

    Convenience init to perform an audio pass thru

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:audioDataHandler:":{"name":"-initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:audioDataHandler:","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)initialPrompt":{"name":"initialPrompt","abstract":"

    initial prompt which will be spoken before opening the audio pass","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText1":{"name":"audioPassThruDisplayText1","abstract":"

    a line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText2":{"name":"audioPassThruDisplayText2","abstract":"

    A line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)samplingRate":{"name":"samplingRate","abstract":"

    A samplingRate

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)maxDuration":{"name":"maxDuration","abstract":"

    the maximum duration of audio recording in milliseconds

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)bitsPerSample":{"name":"bitsPerSample","abstract":"

    the quality the audio is recorded - 8 bit or 16 bit

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioType":{"name":"audioType","abstract":"

    an audioType

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)muteAudio":{"name":"muteAudio","abstract":"

    a Boolean value representing if the current audio source should be","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioDataHandler":{"name":"audioDataHandler","abstract":"

    A handler that will be called whenever an onAudioPassThru notification is received.

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAppServiceInteractionResponse.html#/c:objc(cs)SDLPerformAppServiceInteractionResponse(im)initWithServiceSpecificResult:":{"name":"-initWithServiceSpecificResult:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLPerformAppServiceInteractionResponse"},"Classes/SDLPerformAppServiceInteractionResponse.html#/c:objc(cs)SDLPerformAppServiceInteractionResponse(py)serviceSpecificResult":{"name":"serviceSpecificResult","abstract":"

    The service can provide specific result strings to the consumer through this param.

    ","parent_name":"SDLPerformAppServiceInteractionResponse"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(im)initWithServiceUri:serviceID:originApp:":{"name":"-initWithServiceUri:serviceID:originApp:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(im)initWithServiceUri:serviceID:originApp:requestServiceActive:":{"name":"-initWithServiceUri:serviceID:originApp:requestServiceActive:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)serviceUri":{"name":"serviceUri","abstract":"

    Fully qualified URI based on a predetermined scheme provided by the app service. SDL makes no guarantee that this URI is correct.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)serviceID":{"name":"serviceID","abstract":"

    The service ID that the app consumer wishes to send this URI.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)originApp":{"name":"originApp","abstract":"

    This string is the appID of the app requesting the app service provider take the specific action.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)requestServiceActive":{"name":"requestServiceActive","abstract":"

    This flag signals the requesting consumer would like this service to become the active primary service of the destination’s type.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)allowed":{"name":"allowed","abstract":"

    A set of all parameters that are permitted for this given RPC.

    ","parent_name":"SDLParameterPermissions"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"

    A set of all parameters that are prohibited for this given RPC.

    ","parent_name":"SDLParameterPermissions"},"Classes/SDLOnWayPointChange.html#/c:objc(cs)SDLOnWayPointChange(py)waypoints":{"name":"waypoints","abstract":"

    Location address for display purposes only

    ","parent_name":"SDLOnWayPointChange"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)gps":{"name":"gps","abstract":"

    The car current GPS coordinates

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)speed":{"name":"speed","abstract":"

    The vehicle speed in kilometers per hour

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)rpm":{"name":"rpm","abstract":"

    The number of revolutions per minute of the engine.

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"

    The fuel level in the tank (percentage)

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    The fuel level state

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"

    The estimate range in KM the vehicle can travel based on fuel level and consumption

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    The instantaneous fuel consumption in microlitres

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"

    The external temperature in degrees celsius.

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)vin":{"name":"vin","abstract":"

    The Vehicle Identification Number

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)prndl":{"name":"prndl","abstract":"

    The current gear shift state of the user’s vehicle

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"

    The current pressure warnings for the user’s vehicle

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)odometer":{"name":"odometer","abstract":"

    Odometer reading in km

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"

    The status of the seat belts

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"

    The body information including power modes

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"

    The IVI system status including signal and battery strength

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"

    The status of the brake pedal

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"

    The status of the wipers

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"

    Status of the head lamps

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"

    The estimated percentage (0% - 100%) of remaining oil life of the engine

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"

    Torque value for engine (in Nm) on non-diesel variants

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    Accelerator pedal position (percentage depressed)

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    Current angle of the steering wheel (in deg)

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"

    Emergency Call notification and confirmation data

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"

    The status of the air bags

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    Information related to an emergency event (and if it occurred)

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    The status modes of the cluster

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)myKey":{"name":"myKey","abstract":"

    Information related to the MyKey feature

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    The status of the electronic parking brake

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"

    The status of the turn signal

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    The cloud app vehicle ID

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)type":{"name":"type","abstract":"

    The type of touch event.

    ","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)event":{"name":"event","abstract":"

    List of all individual touches involved in this event.

    ","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTBTClientState.html#/c:objc(cs)SDLOnTBTClientState(py)state":{"name":"state","abstract":"

    Current State of TBT client

    ","parent_name":"SDLOnTBTClientState"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType":{"name":"requestType","abstract":"

    The type of system request.

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"

    A request subType used when the requestType is OEM_SPECIFIC.

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)url":{"name":"url","abstract":"

    Optional URL for HTTP requests. If blank, the binary data shall be forwarded to the app. If not blank, the binary data shall be forwarded to the url with a provided timeout in seconds.

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)timeout":{"name":"timeout","abstract":"

    Optional timeout for HTTP requests Required if a URL is provided

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)fileType":{"name":"fileType","abstract":"

    Optional file type (meant for HTTP file requests).

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)offset":{"name":"offset","abstract":"

    Optional offset in bytes for resuming partial data chunks

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)length":{"name":"length","abstract":"

    Optional length in bytes for resuming partial data chunks

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemCapabilityUpdated.html#/c:objc(cs)SDLOnSystemCapabilityUpdated(im)initWithSystemCapability:":{"name":"-initWithSystemCapability:","abstract":"

    Convenience init for required parameters

    ","parent_name":"SDLOnSystemCapabilityUpdated"},"Classes/SDLOnSystemCapabilityUpdated.html#/c:objc(cs)SDLOnSystemCapabilityUpdated(py)systemCapability":{"name":"systemCapability","abstract":"

    The system capability that has been updated.

    ","parent_name":"SDLOnSystemCapabilityUpdated"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)URL":{"name":"URL","abstract":"

    The url

    ","parent_name":"SDLOnSyncPData"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)Timeout":{"name":"Timeout","abstract":"

    How long until a timeout

    ","parent_name":"SDLOnSyncPData"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allocatedModules":{"name":"allocatedModules","abstract":"

    @abstract Contains a list (zero or more) of module types that","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)freeModules":{"name":"freeModules","abstract":"

    @abstract Contains a list (zero or more) of module types that are free to access for the application.

    ","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allowed":{"name":"allowed","abstract":"

    Issued by SDL to notify the application about remote control status change on SDL","parent_name":"SDLOnRCStatus"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)permissionItem":{"name":"permissionItem","abstract":"

    Describes change in permissions for a given set of RPCs

    ","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)requireEncryption":{"name":"requireEncryption","abstract":"

    Describes whether or not the app needs the encryption permission

    ","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)driverDistractionStatus":{"name":"driverDistractionStatus","abstract":"

    Get the current driver distraction status(i.e. whether driver distraction rules are in effect, or not)

    ","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)userSelected":{"name":"userSelected","abstract":"

    Get user selection status for the application (has the app been selected via hmi or voice command)

    ","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)lockScreenStatus":{"name":"lockScreenStatus","abstract":"

    Indicates if the lockscreen should be required, optional or off

    ","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"

    Get HMILevel in effect for the application

    ","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)language":{"name":"language","abstract":"

    Current SDL voice engine (VR+TTS) language

    ","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"

    Current display language

    ","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)event":{"name":"event","abstract":"

    The type of keyboard input

    ","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)data":{"name":"data","abstract":"

    The current keyboard string input from the user

    ","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnInteriorVehicleData.html#/c:objc(cs)SDLOnInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"

    The subscribed module data that changed

    ","parent_name":"SDLOnInteriorVehicleData"},"Classes/SDLOnHashChange.html#/c:objc(cs)SDLOnHashChange(py)hashID":{"name":"hashID","abstract":"

    Calculated hash ID to be referenced during RegisterAppInterface request.

    ","parent_name":"SDLOnHashChange"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"

    SDLHMILevel in effect for the application

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)audioStreamingState":{"name":"audioStreamingState","abstract":"

    Current state of audio streaming for the application. When this parameter has a value of NOT_AUDIBLE, the application must stop streaming audio to SDL.

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)videoStreamingState":{"name":"videoStreamingState","abstract":"

    Current availablility of video streaming for the application. When this parameter is NOT_STREAMABLE, the application must stop video streaming to SDL.

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)systemContext":{"name":"systemContext","abstract":"

    Whether a user-initiated interaction is in-progress (VRSESSION or MENU), or not (MAIN)

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)windowID":{"name":"windowID","abstract":"

    This is the unique ID assigned to the window that this RPC is intended for. If this param is not included, it will be assumed that this request is specifically for the main window on the main display. - see: PredefinedWindows enum.

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)data":{"name":"data","abstract":"

    Contains base64 encoded string of SyncP packets.

    ","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)URL":{"name":"URL","abstract":"

    If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded to the provided URL.

    ","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)Timeout":{"name":"Timeout","abstract":"

    If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded with the provided timeout in seconds.

    ","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)state":{"name":"state","abstract":"

    The driver distraction state (i.e. whether driver distraction rules are in effect, or not)

    ","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)lockScreenDismissalEnabled":{"name":"lockScreenDismissalEnabled","abstract":"

    If enabled, the lock screen will be able to be dismissed while connected to SDL, allowing users the ability to interact with the app.

    ","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)lockScreenDismissalWarning":{"name":"lockScreenDismissalWarning","abstract":"

    Warning message to be displayed on the lock screen when dismissal is enabled. This warning should be used to ensure that the user is not the driver of the vehicle, ex. Swipe up to dismiss, acknowledging that you are not the driver.. This parameter must be present if “lockScreenDismissalEnabled” is set to true.

    ","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)cmdID":{"name":"cmdID","abstract":"

    The command ID of the command the user selected. This is the command ID value provided by the application in the SDLAddCommand operation that created the command.

    ","parent_name":"SDLOnCommand"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)triggerSource":{"name":"triggerSource","abstract":"

    Indicates whether command was selected via voice or via a menu selection (using the OK button).

    ","parent_name":"SDLOnCommand"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonName":{"name":"buttonName","abstract":"

    The button’s name

    ","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"

    Indicates whether this is a LONG or SHORT button press event

    ","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)customButtonID":{"name":"customButtonID","abstract":"

    If ButtonName is “CUSTOM_BUTTON”, this references the integer ID passed by a custom button. (e.g. softButton ID)

    ","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonName":{"name":"buttonName","abstract":"

    The name of the button

    ","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonEventMode":{"name":"buttonEventMode","abstract":"

    Indicates whether this is an UP or DOWN event

    ","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)customButtonID":{"name":"customButtonID","abstract":"

    If ButtonName is “CUSTOM_BUTTON”, this references the integer ID passed by a custom button. (e.g. softButton ID)

    ","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnAppServiceData.html#/c:objc(cs)SDLOnAppServiceData(im)initWithServiceData:":{"name":"-initWithServiceData:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLOnAppServiceData"},"Classes/SDLOnAppServiceData.html#/c:objc(cs)SDLOnAppServiceData(py)serviceData":{"name":"serviceData","abstract":"

    The updated app service data.

    ","parent_name":"SDLOnAppServiceData"},"Classes/SDLOnAppInterfaceUnregistered.html#/c:objc(cs)SDLOnAppInterfaceUnregistered(py)reason":{"name":"reason","abstract":"

    The reason application’s interface was terminated

    ","parent_name":"SDLOnAppInterfaceUnregistered"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(im)initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:":{"name":"-initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:","abstract":"

    Convenience init to describe an oasis address

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(im)initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:countryName:subAdministrativeArea:subLocality:":{"name":"-initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:countryName:subAdministrativeArea:subLocality:","abstract":"

    Convenience init to describe an oasis address with all parameters

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryName":{"name":"countryName","abstract":"

    Name of the country (localized)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryCode":{"name":"countryCode","abstract":"

    countryCode of the country(ISO 3166-2)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)postalCode":{"name":"postalCode","abstract":"

    postalCode of location (PLZ, ZIP, PIN, CAP etc.)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)administrativeArea":{"name":"administrativeArea","abstract":"

    Portion of country (e.g. state)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subAdministrativeArea":{"name":"subAdministrativeArea","abstract":"

    Portion of administrativeArea (e.g. county)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)locality":{"name":"locality","abstract":"

    Hypernym for city/village

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subLocality":{"name":"subLocality","abstract":"

    Hypernym for district

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)thoroughfare":{"name":"thoroughfare","abstract":"

    Hypernym for street, road etc.

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subThoroughfare":{"name":"subThoroughfare","abstract":"

    Portion of thoroughfare (e.g. house number)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allResponseNames":{"name":"+allResponseNames","abstract":"

    All of the possible SDL RPC Response notification names

    ","parent_name":"SDLNotificationConstants"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allButtonEventNotifications":{"name":"+allButtonEventNotifications","abstract":"

    All of the possible SDL Button event notification names

    ","parent_name":"SDLNotificationConstants"},"Classes/SDLNavigationServiceManifest.html#/c:objc(cs)SDLNavigationServiceManifest(im)initWithAcceptsWayPoints:":{"name":"-initWithAcceptsWayPoints:","abstract":"

    Convenience init.

    ","parent_name":"SDLNavigationServiceManifest"},"Classes/SDLNavigationServiceManifest.html#/c:objc(cs)SDLNavigationServiceManifest(py)acceptsWayPoints":{"name":"acceptsWayPoints","abstract":"

    Informs the subscriber if this service can actually accept way points.

    ","parent_name":"SDLNavigationServiceManifest"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(im)initWithTimestamp:":{"name":"-initWithTimestamp:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(im)initWithTimestamp:origin:destination:destinationETA:instructions:nextInstructionETA:nextInstructionDistance:nextInstructionDistanceScale:prompt:":{"name":"-initWithTimestamp:origin:destination:destinationETA:instructions:nextInstructionETA:nextInstructionDistance:nextInstructionDistanceScale:prompt:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)timestamp":{"name":"timestamp","abstract":"

    This is the timestamp of when the data was generated. This is to ensure any time or distance given in the data can accurately be adjusted if necessary.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)origin":{"name":"origin","abstract":"

    The start location.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)destination":{"name":"destination","abstract":"

    The final destination location.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)destinationETA":{"name":"destinationETA","abstract":"

    The estimated time of arrival at the final destination location.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)instructions":{"name":"instructions","abstract":"

    This array should be ordered with all remaining instructions. The start of this array should always contain the next instruction.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionETA":{"name":"nextInstructionETA","abstract":"

    The estimated time of arrival at the next destination.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionDistance":{"name":"nextInstructionDistance","abstract":"

    The distance to this instruction from current location. This should only be updated ever .1 unit of distance. For more accuracy the consumer can use the GPS location of itself and the next instruction.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionDistanceScale":{"name":"nextInstructionDistanceScale","abstract":"

    Distance till next maneuver (starting from) from previous maneuver.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)prompt":{"name":"prompt","abstract":"

    This is a prompt message that should be conveyed to the user through either display or voice (TTS). This param will change often as it should represent the following: approaching instruction, post instruction, alerts that affect the current navigation session, etc.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(im)initWithLocationDetails:action:":{"name":"-initWithLocationDetails:action:","abstract":"

    Convenience init for required parameters

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(im)initWithLocationDetails:action:eta:bearing:junctionType:drivingSide:details:image:":{"name":"-initWithLocationDetails:action:eta:bearing:junctionType:drivingSide:details:image:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)locationDetails":{"name":"locationDetails","abstract":"

    The location details.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)action":{"name":"action","abstract":"

    The navigation action.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)eta":{"name":"eta","abstract":"

    The estimated time of arrival.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)bearing":{"name":"bearing","abstract":"

    The angle at which this instruction takes place. For example, 0 would mean straight, <=45 is bearing right, >= 135 is sharp right, between 45 and 135 is a regular right, and 180 is a U-Turn, etc.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)junctionType":{"name":"junctionType","abstract":"

    The navigation junction type.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)drivingSide":{"name":"drivingSide","abstract":"

    Used to infer which side of the road this instruction takes place. For a U-Turn (action=TURN, bearing=180) this will determine which direction the turn should take place.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)details":{"name":"details","abstract":"

    This is a string representation of this instruction, used to display instructions to the users. This is not intended to be read aloud to the users, see the param prompt in NavigationServiceData for that.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)image":{"name":"image","abstract":"

    An image representation of this instruction.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(im)initWithSendLocation:waypoints:":{"name":"-initWithSendLocation:waypoints:","abstract":"

    Convenience init with all parameters

    ","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)sendLocationEnabled":{"name":"sendLocationEnabled","abstract":"

    Whether or not the SendLocation RPC is enabled.

    ","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)getWayPointsEnabled":{"name":"getWayPointsEnabled","abstract":"

    Whether or not Waypoint related RPCs are enabled.

    ","parent_name":"SDLNavigationCapability"},"Classes/SDLMyKey.html#/c:objc(cs)SDLMyKey(py)e911Override":{"name":"e911Override","abstract":"

    Indicates whether e911 override is on. References signal “MyKey_e911Override_St”. See VehicleDataStatus.

    ","parent_name":"SDLMyKey"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"

    The major version indicates versions that is not-compatible to previous versions

    ","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"

    The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)

    ","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"

    Allows backward-compatible fixes to the API without increasing the minor version of the interface

    ","parent_name":"SDLMsgVersion"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)moduleId":{"name":"moduleId","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)location":{"name":"location","abstract":"

    Location of a module.","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)serviceArea":{"name":"serviceArea","abstract":"

    Service area of a module.","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)allowMultipleAccess":{"name":"allowMultipleAccess","abstract":"

    Allow multiple users/apps to access the module or not

    ","parent_name":"SDLModuleInfo"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithRadioControlData:":{"name":"-initWithRadioControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with radio control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithClimateControlData:":{"name":"-initWithClimateControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with climate control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithAudioControlData:":{"name":"-initWithAudioControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with audio control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithLightControlData:":{"name":"-initWithLightControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with light control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithHMISettingsControlData:":{"name":"-initWithHMISettingsControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with hmi settings data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithSeatControlData:":{"name":"-initWithSeatControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with seat control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleType":{"name":"moduleType","abstract":"

    The moduleType indicates which type of data should be changed and identifies which data object exists in this struct.

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleId":{"name":"moduleId","abstract":"

    Id of a module, published by System Capability.

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)radioControlData":{"name":"radioControlData","abstract":"

    The radio control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)climateControlData":{"name":"climateControlData","abstract":"

    The climate control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)seatControlData":{"name":"seatControlData","abstract":"

    The seat control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)audioControlData":{"name":"audioControlData","abstract":"

    The audio control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)lightControlData":{"name":"lightControlData","abstract":"

    The light control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)hmiSettingsControlData":{"name":"hmiSettingsControlData","abstract":"

    The hmi control data

    ","parent_name":"SDLModuleData"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:":{"name":"-initWithTextFieldTypes:mainField2:","abstract":"

    Constructs a newly allocated SDLMetadataType object with NSArrays

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:mainField3:mainField4:":{"name":"-initWithTextFieldTypes:mainField2:mainField3:mainField4:","abstract":"

    Constructs a newly allocated SDLMetadataType with all parameters

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField1":{"name":"mainField1","abstract":"

    The type of data contained in the “mainField1” text field.

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField2":{"name":"mainField2","abstract":"

    The type of data contained in the “mainField2” text field.

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField3":{"name":"mainField3","abstract":"

    The type of data contained in the “mainField3” text field.

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField4":{"name":"mainField4","abstract":"

    The type of data contained in the “mainField4” text field.

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:":{"name":"-initWithMenuName:","abstract":"

    Convenience init with required parameters.

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:parentId:position:":{"name":"-initWithMenuName:parentId:position:","abstract":"

    Convenience init with all parameters.

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)parentID":{"name":"parentID","abstract":"

    The unique ID of an existing submenu to which a command will be added

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)position":{"name":"position","abstract":"

    The position within the items of the parent Command Menu

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)menuName":{"name":"menuName","abstract":"

    The menu name which appears in menu, representing this command

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(py)mainMenuLayout":{"name":"mainMenuLayout","abstract":"

    Changes the default main menu layout. Defaults to SDLMenuLayoutList.

    ","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(py)defaultSubmenuLayout":{"name":"defaultSubmenuLayout","abstract":"

    Changes the default submenu layout. To change this for an individual submenu, set the menuLayout property on the SDLMenuCell initializer for creating a cell with sub-cells. Defaults to SDLMenuLayoutList.

    ","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(im)initWithMainMenuLayout:defaultSubmenuLayout:":{"name":"-initWithMainMenuLayout:defaultSubmenuLayout:","abstract":"

    Initialize a new menu configuration with a main menu layout and a default submenu layout which can be overriden per-submenu if desired.

    ","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)title":{"name":"title","abstract":"

    The cell’s text to be displayed

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)icon":{"name":"icon","abstract":"

    The cell’s icon to be displayed

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)voiceCommands":{"name":"voiceCommands","abstract":"

    The strings the user can say to activate this voice command

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)handler":{"name":"handler","abstract":"

    The handler that will be called when the command is activated

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)subCells":{"name":"subCells","abstract":"

    If this is non-nil, this cell will be a sub-menu button, displaying the subcells in a menu when pressed.

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)submenuLayout":{"name":"submenuLayout","abstract":"

    The layout in which the subCells will be displayed.

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:voiceCommands:handler:":{"name":"-initWithTitle:icon:voiceCommands:handler:","abstract":"

    Create a menu cell that has no subcells.

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:subCells:":{"name":"-initWithTitle:subCells:","abstract":"

    Create a menu cell that has subcells and when selected will go into a deeper part of the menu

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:subCells:":{"name":"-initWithTitle:icon:subCells:","abstract":"

    Create a menu cell that has subcells and when selected will go into a deeper part of the menu

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:submenuLayout:subCells:":{"name":"-initWithTitle:icon:submenuLayout:subCells:","abstract":"

    Create a menu cell that has subcells and when selected will go into a deeper part of the menu

    ","parent_name":"SDLMenuCell"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(im)initWithMediaType:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:":{"name":"-initWithMediaType:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:","abstract":"

    Convenience init

    ","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(im)initWithMediaType:mediaImage:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:":{"name":"-initWithMediaType:mediaImage:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:","abstract":"

    Convenience init

    ","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaImage":{"name":"mediaImage","abstract":"

    Sets the media image associated with the currently playing media","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaType":{"name":"mediaType","abstract":"

    The type of the currently playing or paused track.

    ","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaTitle":{"name":"mediaTitle","abstract":"

    Music: The name of the current track","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaArtist":{"name":"mediaArtist","abstract":"

    Music: The name of the current album artist","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaAlbum":{"name":"mediaAlbum","abstract":"

    Music: The name of the current album","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)playlistName":{"name":"playlistName","abstract":"

    Music: The name of the playlist or radio station, if the user is playing from a playlist, otherwise, Null","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)isExplicit":{"name":"isExplicit","abstract":"

    Whether or not the content currently playing (e.g. the track, episode, or book) contains explicit content.

    ","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)trackPlaybackProgress":{"name":"trackPlaybackProgress","abstract":"

    Music: The current progress of the track in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)trackPlaybackDuration":{"name":"trackPlaybackDuration","abstract":"

    Music: The total duration of the track in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queuePlaybackProgress":{"name":"queuePlaybackProgress","abstract":"

    Music: The current progress of the playback queue in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queuePlaybackDuration":{"name":"queuePlaybackDuration","abstract":"

    Music: The total duration of the playback queue in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queueCurrentTrackNumber":{"name":"queueCurrentTrackNumber","abstract":"

    Music: The current number (1 based) of the track in the playback queue","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queueTotalTrackCount":{"name":"queueTotalTrackCount","abstract":"

    Music: The total number of tracks in the playback queue","parent_name":"SDLMediaServiceData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(im)initWithMassageMode:massageZone:":{"name":"-initWithMassageMode:massageZone:","abstract":"

    @abstract Constructs a newly allocated SDLMassageModeData object with massageMode and massageZone

    ","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageMode":{"name":"massageMode","abstract":"

    @abstract mode of a massage zone

    ","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageZone":{"name":"massageZone","abstract":"

    @abstract zone of a multi-contour massage seat.

    ","parent_name":"SDLMassageModeData"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(im)initWithMassageCushion:firmness:":{"name":"-initWithMassageCushion:firmness:","abstract":"

    Constructs a newly allocated SDLMassageCushionFirmness object with cushion and firmness

    ","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)cushion":{"name":"cushion","abstract":"

    @abstract cushion of a multi-contour massage seat.

    ","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)firmness":{"name":"firmness","abstract":"

    @abstract zone of a multi-contour massage seat.

    ","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)configuration":{"name":"configuration","abstract":"

    The configuration the manager was set up with.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)hmiLevel":{"name":"hmiLevel","abstract":"

    The current HMI level of the running app.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)audioStreamingState":{"name":"audioStreamingState","abstract":"

    The current audio streaming state of the running app.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemContext":{"name":"systemContext","abstract":"

    The current system context of the running app.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)fileManager":{"name":"fileManager","abstract":"

    The file manager to be used by the running app.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)permissionManager":{"name":"permissionManager","abstract":"

    The permission manager monitoring RPC permissions.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)streamManager":{"name":"streamManager","abstract":"

    The streaming media manager to be used for starting video sessions.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)screenManager":{"name":"screenManager","abstract":"

    The screen manager for sending UI related RPCs.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemCapabilityManager":{"name":"systemCapabilityManager","abstract":"

    Centralized manager for retrieving all system capabilities.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)registerResponse":{"name":"registerResponse","abstract":"

    The response of a register call after it has been received.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)authToken":{"name":"authToken","abstract":"

    The auth token, if received. This should be used to log into a user account. Primarily used for cloud apps with companion app stores.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)delegate":{"name":"delegate","abstract":"

    The manager’s delegate.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)pendingRPCTransactions":{"name":"pendingRPCTransactions","abstract":"

    The currently pending RPC request send transactions

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)proxy":{"name":"proxy","abstract":"

    Deprecated internal proxy object. This should only be accessed when the Manager is READY. This property may go to nil at any time.","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)initWithConfiguration:delegate:":{"name":"-initWithConfiguration:delegate:","abstract":"

    Initialize the manager with a configuration. Call startWithHandler to begin waiting for a connection.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startWithReadyHandler:":{"name":"-startWithReadyHandler:","abstract":"

    Start the manager, which will tell it to start looking for a connection. Once one does, it will automatically run the setup process and call the readyBlock when done.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)stop":{"name":"-stop","abstract":"

    Stop the manager, it will disconnect if needed and no longer look for a connection. You probably don’t need to call this method ever.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startRPCEncryption":{"name":"-startRPCEncryption","abstract":"

    Start the encryption lifecycle manager, which will attempt to open a secure service.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRPC:":{"name":"-sendRPC:","abstract":"

    Send an RPC of type Response, Notification or Request. Responses and notifications sent to Core do not a response back from Core. Each request sent to Core does get a response, so if you need the response and/or error, call sendRequest:withResponseHandler: instead.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:":{"name":"-sendRequest:","abstract":"

    Send an RPC request and don’t bother with the response or error. If you need the response or error, call sendRequest:withCompletionHandler: instead.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:withResponseHandler:":{"name":"-sendRequest:withResponseHandler:","abstract":"

    Send an RPC request and set a completion handler that will be called with the response when the response returns.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequests:progressHandler:completionHandler:":{"name":"-sendRequests:progressHandler:completionHandler:","abstract":"

    Send all of the requests given as quickly as possible, but in order. Call the completionHandler after all requests have either failed or given a response.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendSequentialRequests:progressHandler:completionHandler:":{"name":"-sendSequentialRequests:progressHandler:completionHandler:","abstract":"

    Send all of the requests one at a time, with the next one going out only after the previous one has received a response. Call the completionHandler after all requests have either failed or given a response.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)subscribeToRPC:withBlock:":{"name":"-subscribeToRPC:withBlock:","abstract":"

    Subscribe to callbacks about a particular RPC request, notification, or response with a block callback.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)subscribeToRPC:withObserver:selector:":{"name":"-subscribeToRPC:withObserver:selector:","abstract":"

    Subscribe to callbacks about a particular RPC request, notification, or response with a selector callback.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)unsubscribeFromRPC:withObserver:":{"name":"-unsubscribeFromRPC:withObserver:","abstract":"

    Unsubscribe to callbacks about a particular RPC request, notification, or response.

    ","parent_name":"SDLManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)modules":{"name":"modules","abstract":"

    Active log modules

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)targets":{"name":"targets","abstract":"

    Active log targets

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)filters":{"name":"filters","abstract":"

    Active log filters

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)globalLogLevel":{"name":"globalLogLevel","abstract":"

    Any modules that do not have an explicitly specified level will by default use this log level

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)formatType":{"name":"formatType","abstract":"

    Active log format

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)asynchronous":{"name":"asynchronous","abstract":"

    Whether or not verbose, debug, and warning logs are logged asynchronously. If logs are performed async, then some may be missed in the event of a terminating signal such as an exception, but performance is improved and your code will not be slowed by logging.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"

    Whether or not error logs are logged asynchronously. If logs are performed async, then some may be missed in the event of a terminating signal such as an exception, but performance is improved and your code will not be slowed by logging.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)disableAssertions":{"name":"disableAssertions","abstract":"

    Whether or not assert logs will fire assertions in DEBUG mode. Assertions are always disabled in RELEASE builds. If assertions are disabled, only an error log will fire instead. Defaults to NO.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)dateFormatter":{"name":"dateFormatter","abstract":"

    Active date formatter

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)logQueue":{"name":"logQueue","abstract":"

    The queue asynchronously logged logs are logged on. Say that 10 times fast.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)sharedManager":{"name":"+sharedManager","abstract":"

    The singleton object

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)setConfiguration:":{"name":"+setConfiguration:","abstract":"

    Sets a configuration to be used by the log manager’s sharedManager. This is generally for internal use and you should set your configuration using SDLManager’s startWithConfiguration: method.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)setConfiguration:":{"name":"-setConfiguration:","abstract":"

    Sets a configuration to be used by the log manager. This is generally for internal use and you should set your configuration using SDLManager’s startWithConfiguration: method.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logWithLevel:timestamp:file:functionName:line:queue:formatMessage:":{"name":"+logWithLevel:timestamp:file:functionName:line:queue:formatMessage:","abstract":"

    Log to the sharedManager’s active log targets. This is used internally to log. If you want to create a log, you should use macros such as SDLLogD.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logWithLevel:timestamp:file:functionName:line:queue:formatMessage:":{"name":"-logWithLevel:timestamp:file:functionName:line:queue:formatMessage:","abstract":"

    Log to this log manager’s active log targets. This is used internally to log. If you want to create a log, you should use macros such as SDLLogD.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logWithLevel:timestamp:file:functionName:line:queue:message:":{"name":"+logWithLevel:timestamp:file:functionName:line:queue:message:","abstract":"

    Log to this sharedManager’s active log targets. This is used internally to log. If you want to create a log, you should use macros such as SDLLogD.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logWithLevel:timestamp:file:functionName:line:queue:message:":{"name":"-logWithLevel:timestamp:file:functionName:line:queue:message:","abstract":"

    Log to this log manager’s active log targets. This is used internally to log. If you want to create a log, you should use macros such as SDLLogD.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logBytes:direction:timestamp:file:functionName:line:queue:":{"name":"+logBytes:direction:timestamp:file:functionName:line:queue:","abstract":"

    Log to this sharedManager’s active log targets. This is used internally to log.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logBytes:direction:timestamp:file:functionName:line:queue:":{"name":"-logBytes:direction:timestamp:file:functionName:line:queue:","abstract":"

    Log to this manager’s active log targets. This is used internally to log.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logAssertWithTimestamp:file:functionName:line:queue:formatMessage:":{"name":"+logAssertWithTimestamp:file:functionName:line:queue:formatMessage:","abstract":"

    Log an error to the sharedManager’s active log targets and assert. This is used internally to log.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logAssertWithTimestamp:file:functionName:line:queue:formatMessage:":{"name":"-logAssertWithTimestamp:file:functionName:line:queue:formatMessage:","abstract":"

    Log an error to this manager’s active log targets and assert. This is used internally to log.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(py)filter":{"name":"filter","abstract":"

    A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)initWithCustomFilter:":{"name":"-initWithCustomFilter:","abstract":"

    Create a new filter with a custom filter block. The filter block will take a log model and return a BOOL of pass / fail.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingString:caseSensitive:":{"name":"+filterByDisallowingString:caseSensitive:","abstract":"

    Returns a filter that only allows logs not containing the passed string within their message.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingString:caseSensitive:":{"name":"+filterByAllowingString:caseSensitive:","abstract":"

    Returns a filter that only allows logs containing the passed string within their message.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingRegex:":{"name":"+filterByDisallowingRegex:","abstract":"

    Returns a filter that only allows logs not passing the passed regex against their message.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingRegex:":{"name":"+filterByAllowingRegex:","abstract":"

    Returns a filter that only allows logs passing the passed regex against their message.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingModules:":{"name":"+filterByDisallowingModules:","abstract":"

    Returns a filter that only allows logs not within the specified file modules to be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingModules:":{"name":"+filterByAllowingModules:","abstract":"

    Returns a filter that only allows logs of the specified file modules to be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingFileNames:":{"name":"+filterByDisallowingFileNames:","abstract":"

    Returns a filter that only allows logs not within the specified files to be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingFileNames:":{"name":"+filterByAllowingFileNames:","abstract":"

    Returns a filter that only allows logs within the specified files to be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)name":{"name":"name","abstract":"

    The name of the this module, e.g. “Transport”

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)files":{"name":"files","abstract":"

    All of the files contained within this module. When a log is logged, the __FILE__ (in Obj-C) or #file (in Swift) is automatically captured and checked to see if any module has a file in this set that matches. If it does, it will be logged using the module’s log level and the module’s name will be printed in the formatted log.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)logLevel":{"name":"logLevel","abstract":"

    The custom level of the log. This is SDLLogLevelDefault (whatever the current global log level is) by default.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)init":{"name":"-init","abstract":"

    This method is unavailable and may not be used.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:level:":{"name":"-initWithName:files:level:","abstract":"

    Returns an initialized SDLLogFileModule that contains a custom name, set of files, and associated log level.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:":{"name":"-initWithName:files:","abstract":"

    Returns an initialized SDLLogFileModule that contains a custom name and set of files. The logging level is the same as the current global logging file by using SDLLogLevelDefault.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(cm)moduleWithName:files:":{"name":"+moduleWithName:files:","abstract":"

    Returns an initialized SDLLogFileModule that contains a custom name and set of files. The logging level is the same as the current global logging file by using SDLLogLevelDefault.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)containsFile:":{"name":"-containsFile:","abstract":"

    Returns whether or not this module contains a given file.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)modules":{"name":"modules","abstract":"

    Any custom logging modules used by the developer’s code. Defaults to none.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)targets":{"name":"targets","abstract":"

    Where the logs will attempt to output. Defaults to Console.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)filters":{"name":"filters","abstract":"

    What log filters will run over this session. Defaults to none.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)formatType":{"name":"formatType","abstract":"

    How detailed of logs will be output. Defaults to Default.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)asynchronous":{"name":"asynchronous","abstract":"

    Whether or not logs will be run on a separate queue, asynchronously, allowing the following code to run before the log completes. Or if it will occur synchronously, which will prevent logs from being missed, but will slow down surrounding code. Defaults to YES.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"

    Whether or not error logs will be dispatched to loggers asynchronously. Defaults to NO.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)disableAssertions":{"name":"disableAssertions","abstract":"

    Whether or not assert logs will fire assertions in DEBUG mode. Assertions are always disabled in RELEASE builds. If assertions are disabled, only an error log will fire instead. Defaults to NO.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)globalLogLevel":{"name":"globalLogLevel","abstract":"

    Any modules that do not have an explicitly specified level will by default use the global log level. Defaults to Error.","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"

    A default logger for production. This sets the format type to Default, the log level to Error, and only enables the ASL logger.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)debugConfiguration":{"name":"+debugConfiguration","abstract":"

    A debug logger for use in development. This sets the format type to Detailed, the log level to Debug, and enables the Console and ASL loggers.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)appIcon":{"name":"appIcon","abstract":"

    The app’s icon. This will be set by the lock screen configuration.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)vehicleIcon":{"name":"vehicleIcon","abstract":"

    The vehicle’s designated icon. This will be set by the lock screen manager when it is notified that a lock screen icon has been downloaded.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)backgroundColor":{"name":"backgroundColor","abstract":"

    The designated background color set in the lock screen configuration, or the default SDL gray-blue.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)lockedLabelText":{"name":"lockedLabelText","abstract":"

    The locked label string. This will be set by the lock screen manager to inform the user about the dismissable state.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(im)addDismissGestureWithCallback:":{"name":"-addDismissGestureWithCallback:","abstract":"

    Adds a swipe gesture to the lock screen view controller.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(im)removeDismissGesture":{"name":"-removeDismissGesture","abstract":"

    Remove swipe gesture to the lock screen view controller.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)displayMode":{"name":"displayMode","abstract":"

    Describes when the lock screen will be displayed. Defaults to SDLLockScreenConfigurationDisplayModeRequiredOnly.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showInOptionalState":{"name":"showInOptionalState","abstract":"

    Whether or not the lock screen should be shown in the “lock screen optional” state. Defaults to NO.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableDismissGesture":{"name":"enableDismissGesture","abstract":"

    If YES, then the lock screen can be dismissed with a downward swipe on compatible head units. Requires a connection of SDL 6.0+ and the head unit to enable the feature. Defaults to YES.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showDeviceLogo":{"name":"showDeviceLogo","abstract":"

    If YES, then the lockscreen will show the vehicle’s logo if the vehicle has made it available. If NO, then the lockscreen will not show the vehicle logo. Defaults to YES.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableAutomaticLockScreen":{"name":"enableAutomaticLockScreen","abstract":"

    If YES, the lock screen should be managed by SDL and automatically engage when necessary. If NO, then the lock screen will never be engaged. Defaults to YES.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)backgroundColor":{"name":"backgroundColor","abstract":"

    The background color of the lock screen. This could be a branding color, or leave at the default for a dark blue-gray.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)appIcon":{"name":"appIcon","abstract":"

    Your app icon as it will appear on the lock screen.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)customViewController":{"name":"customViewController","abstract":"

    A custom view controller that the lock screen will manage the presentation of.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)disabledConfiguration":{"name":"+disabledConfiguration","abstract":"

    Use this configuration if you wish to manage a lock screen yourself. This may be useful if the automatic presentation feature of SDLLockScreenManager is failing for some reason.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfiguration":{"name":"+enabledConfiguration","abstract":"

    Use this configuration for the basic default lock screen. A custom app icon will not be used.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithAppIcon:backgroundColor:":{"name":"+enabledConfigurationWithAppIcon:backgroundColor:","abstract":"

    Use this configuration to provide a custom lock screen icon and a custom background color, or nil if you wish to use the default background color. This will use the default lock screen layout.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithViewController:":{"name":"+enabledConfigurationWithViewController:","abstract":"

    Use this configuration if you wish to provide your own view controller for the lock screen. This view controller’s presentation and dismissal will still be managed by the lock screen manager. Note that you may subclass SDLLockScreenViewController and pass it here to continue to have the vehicle icon set to your view controller by the manager.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(im)initWithCoordinate:":{"name":"-initWithCoordinate:","abstract":"

    Convenience init for location coordinate.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(im)initWithCoordinate:locationName:addressLines:locationDescription:phoneNumber:locationImage:searchAddress:":{"name":"-initWithCoordinate:locationName:addressLines:locationDescription:phoneNumber:locationImage:searchAddress:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)coordinate":{"name":"coordinate","abstract":"

    Latitude/Longitude of the location

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationName":{"name":"locationName","abstract":"

    Name of location.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)addressLines":{"name":"addressLines","abstract":"

    Location address for display purposes only.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationDescription":{"name":"locationDescription","abstract":"

    Description intended location / establishment.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)phoneNumber":{"name":"phoneNumber","abstract":"

    Phone number of location / establishment.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationImage":{"name":"locationImage","abstract":"

    Image / icon of intended location.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)searchAddress":{"name":"searchAddress","abstract":"

    Address to be used by navigation engines for search.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(im)initWithLatitudeDegrees:longitudeDegrees:":{"name":"-initWithLatitudeDegrees:longitudeDegrees:","abstract":"

    Convenience init for location coordinates

    ","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"

    Latitude of the location

    ","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"

    Latitude of the location

    ","parent_name":"SDLLocationCoordinate"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)filenames":{"name":"filenames","abstract":"

    An array of all filenames resident on the module for the given registered app. If omitted, then no files currently reside on the system.

    ","parent_name":"SDLListFilesResponse"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"

    Provides the total local space available on the module for the registered app.

    ","parent_name":"SDLListFilesResponse"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:":{"name":"-initWithId:status:","abstract":"

    Constructs a newly allocated SDLLightState object with given parameters

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:density:color:":{"name":"-initWithId:status:density:color:","abstract":"

    Constructs a newly allocated SDLLightState object with given parameters

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:lightStatus:lightDensity:lightColor:":{"name":"-initWithId:lightStatus:lightDensity:lightColor:","abstract":"

    Constructs a newly allocated SDLLightState object with given parameters

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)id":{"name":"id","abstract":"

    @abstract The name of a light or a group of lights

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)status":{"name":"status","abstract":"

    @abstract Reflects the status of Light.

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)density":{"name":"density","abstract":"

    @abstract Reflects the density of Light.

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)color":{"name":"color","abstract":"

    @abstract Reflects the color of Light.

    ","parent_name":"SDLLightState"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(im)initWithLightStates:":{"name":"-initWithLightStates:","abstract":"

    Constructs a newly allocated SDLLightControlData object with lightState

    ","parent_name":"SDLLightControlData"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(py)lightState":{"name":"lightState","abstract":"

    @abstract An array of LightNames and their current or desired status.","parent_name":"SDLLightControlData"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(im)initWithModuleName:supportedLights:":{"name":"-initWithModuleName:supportedLights:","abstract":"

    Constructs a newly allocated SDLLightControlCapabilities object with given parameters

    ","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(im)initWithModuleName:moduleInfo:supportedLights:":{"name":"-initWithModuleName:moduleInfo:supportedLights:","abstract":"

    Constructs a newly allocated SDLLightControlCapabilities object with given parameters

    ","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    @abstract The short friendly name of the light control module.","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)supportedLights":{"name":"supportedLights","abstract":"

    @abstract An array of available LightCapabilities that are controllable.

    ","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"

    Constructs a newly allocated SDLLightCapabilities object with the name of the light or group of lights

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:densityAvailable:colorAvailable:statusAvailable:":{"name":"-initWithName:densityAvailable:colorAvailable:statusAvailable:","abstract":"

    Constructs a newly allocated SDLLightCapabilities object with given parameters

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)name":{"name":"name","abstract":"

    @abstract The name of a light or a group of lights

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)densityAvailable":{"name":"densityAvailable","abstract":"

    @abstract Indicates if the light’s density can be set remotely (similar to a dimmer).

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)colorAvailable":{"name":"colorAvailable","abstract":"

    @abstract Indicates if the light’s color can be set remotely by using the RGB color space.

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)statusAvailable":{"name":"statusAvailable","abstract":"

    @abstract Indicates if the status (ON/OFF) can be set remotely.","parent_name":"SDLLightCapabilities"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)appName":{"name":"appName","abstract":"

    The full name of the app to that the configuration should be updated to.

    ","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)shortAppName":{"name":"shortAppName","abstract":"

    An abbrevited application name that will be used on the app launching screen if the full one would be truncated.

    ","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)ttsName":{"name":"ttsName","abstract":"

    A Text to Speech String for voice recognition of the mobile application name.

    ","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"

    Additional voice recognition commands. May not interfere with any other app name or global commands.

    ","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(im)initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:":{"name":"-initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:","abstract":"

    Initializes and returns a newly allocated lifecycle configuration update object with the specified app data.","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:appId:":{"name":"+defaultConfigurationWithAppName:appId:","abstract":"

    A production configuration that runs using IAP. Additional functionality should be customized on the properties.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:fullAppId:":{"name":"+defaultConfigurationWithAppName:fullAppId:","abstract":"

    A production configuration that runs using IAP. Additional functionality should be customized on the properties.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:appId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:appId:ipAddress:port:","abstract":"

    A debug configuration that runs using TCP. Additional functionality should be customized on the properties.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:fullAppId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:fullAppId:ipAddress:port:","abstract":"

    A debug configuration that runs using TCP. Additional functionality should be customized on the properties.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugMode":{"name":"tcpDebugMode","abstract":"

    Whether or not debug mode is enabled

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugIPAddress":{"name":"tcpDebugIPAddress","abstract":"

    The ip address at which the library will look for a server

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugPort":{"name":"tcpDebugPort","abstract":"

    The port at which the library will look for a server

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appName":{"name":"appName","abstract":"

    The full name of the app

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId":{"name":"appId","abstract":"

    The app id. This must be the same as the app id received from the SDL developer portal.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)fullAppId":{"name":"fullAppId","abstract":"

    The full app id. This must be the same as the full app id received from the SDL developer portal.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)resumeHash":{"name":"resumeHash","abstract":"

    A hash id which should be passed to the remote system in the RegisterAppInterface

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)isMedia":{"name":"isMedia","abstract":"

    This is an automatically set based on the app type

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType":{"name":"appType","abstract":"

    The application type

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)additionalAppTypes":{"name":"additionalAppTypes","abstract":"

    Additional application types beyond appType

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)language":{"name":"language","abstract":"

    The default language to use

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)languagesSupported":{"name":"languagesSupported","abstract":"

    An array of all the supported languages

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appIcon":{"name":"appIcon","abstract":"

    The application icon to be used on an app launching screen

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)shortAppName":{"name":"shortAppName","abstract":"

    An abbrevited application name that will be used on the app launching screen if the full one would be truncated

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)ttsName":{"name":"ttsName","abstract":"

    A Text to Speech String for voice recognition of the mobile application name.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"

    Additional voice recognition commands. May not interfere with any other app name or global commands.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"

    The color scheme to use when the head unit is in a light / day situation.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"

    The color scheme to use when the head unit is in a dark / night situation.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)minimumProtocolVersion":{"name":"minimumProtocolVersion","abstract":"

    The minimum protocol version that will be permitted to connect. This defaults to 1.0.0. If the protocol version of the head unit connected is below this version, the app will disconnect with an EndService protocol message and will not register.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)minimumRPCVersion":{"name":"minimumRPCVersion","abstract":"

    The minimum RPC version that will be permitted to connect. This defaults to 1.0.0. If the RPC version of the head unit connected is below this version, an UnregisterAppInterface will be sent.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)allowedSecondaryTransports":{"name":"allowedSecondaryTransports","abstract":"

    Which transports are permitted to be used as secondary transports. A secondary transport is a transport that is connected as an alternate, higher bandwidth transport for situations when a low-bandwidth primary transport (such as Bluetooth) will restrict certain features (such as video streaming navigation).

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:","abstract":"

    Create a Keyboard Properties RPC object

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:autoCompleteList:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:autoCompleteList:","abstract":"

    Create a Keyboard Properties RPC object

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)language":{"name":"language","abstract":"

    The keyboard language

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keyboardLayout":{"name":"keyboardLayout","abstract":"

    Desired keyboard layout

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keypressMode":{"name":"keypressMode","abstract":"

    Desired keypress mode.

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)limitedCharacterList":{"name":"limitedCharacterList","abstract":"

    Array of keyboard characters to enable. All omitted characters will be greyed out (disabled) on the keyboard. If omitted, the entire keyboard will be enabled.

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteText":{"name":"autoCompleteText","abstract":"

    Allows an app to prepopulate the text field with a suggested or completed entry as the user types

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteList":{"name":"autoCompleteList","abstract":"

    Allows an app to show a list of possible autocomplete suggestions as the user types

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionWidth":{"name":"resolutionWidth","abstract":"

    Resolution width

    ","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionHeight":{"name":"resolutionHeight","abstract":"

    Resolution height

    ","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(im)initWithWidth:height:":{"name":"-initWithWidth:height:","abstract":"

    Convenience init with all parameters

    ","parent_name":"SDLImageResolution"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)name":{"name":"name","abstract":"

    The name that identifies the field.

    ","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"

    The image types that are supported in this field.

    ","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageResolution":{"name":"imageResolution","abstract":"

    The image resolution of this field

    ","parent_name":"SDLImageField"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:":{"name":"-initWithName:ofType:","abstract":"

    Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:isTemplate:":{"name":"-initWithName:ofType:isTemplate:","abstract":"

    Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:":{"name":"-initWithName:","abstract":"

    Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:isTemplate:":{"name":"-initWithName:isTemplate:","abstract":"

    Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticImageValue:":{"name":"-initWithStaticImageValue:","abstract":"

    Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image’s value.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticIconName:":{"name":"-initWithStaticIconName:","abstract":"

    Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image’s value.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)value":{"name":"value","abstract":"

    The static hex icon value or the binary image file name identifier (sent by SDLPutFile)

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)imageType":{"name":"imageType","abstract":"

    Describes whether the image is static or dynamic

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)isTemplate":{"name":"isTemplate","abstract":"

    Indicates that this image can be (re)colored by the HMI to best fit the current color scheme.

    ","parent_name":"SDLImage"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)lowBeamsOn":{"name":"lowBeamsOn","abstract":"

    Low beams are on or off.

    ","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)highBeamsOn":{"name":"highBeamsOn","abstract":"

    High beams are on or off

    ","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)ambientLightSensorStatus":{"name":"ambientLightSensorStatus","abstract":"

    Status of the ambient light senser

    ","parent_name":"SDLHeadLampStatus"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(im)initWithId:rect:":{"name":"-initWithId:rect:","abstract":"

    Convenience init with all parameters

    ","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)id":{"name":"id","abstract":"

    A user control spatial identifier

    ","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)rect":{"name":"rect","abstract":"

    The position of the haptic rectangle to be highlighted. The center of this rectangle will be “touched” when a press occurs.

    ","parent_name":"SDLHapticRect"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(im)initWithDisplaymode:temperatureUnit:distanceUnit:":{"name":"-initWithDisplaymode:temperatureUnit:distanceUnit:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters

    ","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)displayMode":{"name":"displayMode","abstract":"

    @abstract Display the Display Mode used HMI setting

    ","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)temperatureUnit":{"name":"temperatureUnit","abstract":"

    @abstract Display the temperature unit used HMI setting

    ","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)distanceUnit":{"name":"distanceUnit","abstract":"

    @abstract Display the distance unit used HMI setting

    ","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:moduleInfo:":{"name":"-initWithModuleName:moduleInfo:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:moduleInfo:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:moduleInfo:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    @abstract The short friendly name of the hmi setting module.","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)distanceUnitAvailable":{"name":"distanceUnitAvailable","abstract":"

    @abstract Availability of the control of distance unit.

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)temperatureUnitAvailable":{"name":"temperatureUnitAvailable","abstract":"

    @abstract Availability of the control of temperature unit.

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)displayModeUnitAvailable":{"name":"displayModeUnitAvailable","abstract":"

    @abstract Availability of the control of HMI display mode.

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)allowed":{"name":"allowed","abstract":"

    A set of all HMI levels that are permitted for this given RPC

    ","parent_name":"SDLHMIPermissions"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"

    A set of all HMI levels that are prohibited for this given RPC

    ","parent_name":"SDLHMIPermissions"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)navigation":{"name":"navigation","abstract":"

    Availability of built in Nav. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)phoneCall":{"name":"phoneCall","abstract":"

    Availability of built in phone. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)videoStreaming":{"name":"videoStreaming","abstract":"

    Availability of built in video streaming. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)remoteControl":{"name":"remoteControl","abstract":"

    Availability of built in remote control. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)appServices":{"name":"appServices","abstract":"

    Availability of app services. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)displays":{"name":"displays","abstract":"

    Availability of displays. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)seatLocation":{"name":"seatLocation","abstract":"

    Availability of seatLocation. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)col":{"name":"col","abstract":"

    Required, Integer, -1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)row":{"name":"row","abstract":"

    Required, Integer, -1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)level":{"name":"level","abstract":"

    Optional, Integer, -1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)colspan":{"name":"colspan","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)rowspan":{"name":"rowspan","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)levelspan":{"name":"levelspan","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGetWayPointsResponse.html#/c:objc(cs)SDLGetWayPointsResponse(py)waypoints":{"name":"waypoints","abstract":"

    Provides additional human readable info regarding the result.

    ","parent_name":"SDLGetWayPointsResponse"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(im)initWithType:":{"name":"-initWithType:","abstract":"

    Convenience init to get waypoints.

    ","parent_name":"SDLGetWayPoints"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(py)waypointType":{"name":"waypointType","abstract":"

    To request for either the destination","parent_name":"SDLGetWayPoints"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)gps":{"name":"gps","abstract":"

    The car current GPS coordinates

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)speed":{"name":"speed","abstract":"

    The vehicle speed in kilometers per hour

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"

    The number of revolutions per minute of the engine.

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"

    The fuel level in the tank (percentage)

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    The fuel level state

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"

    The estimate range in KM the vehicle can travel based on fuel level and consumption

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    The instantaneous fuel consumption in microlitres

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"

    The external temperature in degrees celsius.

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)vin":{"name":"vin","abstract":"

    The Vehicle Identification Number

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"

    The current gear shift state of the user’s vehicle

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"

    The current pressure warnings for the user’s vehicle

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"

    Odometer reading in km

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"

    The status of the seat belts

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"

    The body information including power modes

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"

    The IVI system status including signal and battery strength

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"

    The status of the brake pedal

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"

    The status of the wipers

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"

    Status of the head lamps

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"

    The estimated percentage (0% - 100%) of remaining oil life of the engine

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"

    Torque value for engine (in Nm) on non-diesel variants

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    Accelerator pedal position (percentage depressed)

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    Current angle of the steering wheel (in deg)

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"

    Emergency Call notification and confirmation data

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"

    The status of the air bags

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    Information related to an emergency event (and if it occurred)

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    The status modes of the cluster

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"

    Information related to the MyKey feature

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    The status of the electronic parking brake

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"

    The status of the turn signal

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    The cloud app vehicle ID

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:vin:wiperStatus:","abstract":"

    Convenience init for getting data for all possible vehicle data items.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:","abstract":"

    Convenience init for getting data for all possible vehicle data items.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:","abstract":"

    Convenience init for getting data for all possible vehicle data items.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)gps":{"name":"gps","abstract":"

    A boolean value. If true, requests GPS data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)speed":{"name":"speed","abstract":"

    A boolean value. If true, requests Speed data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)rpm":{"name":"rpm","abstract":"

    A boolean value. If true, requests RPM data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"

    A boolean value. If true, requests Fuel Level data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    A boolean value. If true, requests Fuel Level State data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"

    A boolean value. If true, requests Fuel Range data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    A boolean value. If true, requests Instant Fuel Consumption data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"

    A boolean value. If true, requests External Temperature data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)vin":{"name":"vin","abstract":"

    A boolean value. If true, requests the Vehicle Identification Number.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)prndl":{"name":"prndl","abstract":"

    A boolean value. If true, requests PRNDL data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"

    A boolean value. If true, requests Tire Pressure data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)odometer":{"name":"odometer","abstract":"

    A boolean value. If true, requests Odometer data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"

    A boolean value. If true, requests Belt Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"

    A boolean value. If true, requests Body Information data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"

    A boolean value. If true, requests Device Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"

    A boolean value. If true, requests Driver Braking data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"

    A boolean value. If true, requests Wiper Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"

    A boolean value. If true, requests Head Lamp Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"

    A boolean value. If true, requests Engine Oil Life data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"

    A boolean value. If true, requests Engine Torque data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    A boolean value. If true, requests Acc Pedal Position data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    A boolean value. If true, requests Steering Wheel Angle data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"

    A boolean value. If true, requests Emergency Call Info data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"

    A boolean value. If true, requests Air Bag Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    A boolean value. If true, requests Emergency Event (if it occurred) data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    A boolean value. If true, requests Cluster Mode Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)myKey":{"name":"myKey","abstract":"

    A boolean value. If true, requests MyKey data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    A boolean value. If true, requests Electronic Parking Brake status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"

    A boolean value. If true, requests Turn Signal data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    A boolean value. If true, requests the Cloud App Vehicle ID.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetSystemCapabilityResponse.html#/c:objc(cs)SDLGetSystemCapabilityResponse(py)systemCapability":{"name":"systemCapability","abstract":"

    The requested system capability, of the type that was sent in the request

    ","parent_name":"SDLGetSystemCapabilityResponse"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:":{"name":"-initWithType:","abstract":"

    Convenience init

    ","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:subscribe:":{"name":"-initWithType:subscribe:","abstract":"

    Convenience init

    ","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"

    The type of system capability to get more information on

    ","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)subscribe":{"name":"subscribe","abstract":"

    Flag to subscribe to updates of the supplied service capability type. If true, the requester will be subscribed. If false, the requester will not be subscribed and be removed as a subscriber if it was previously subscribed.

    ","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"

    The requested data

    ","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)isSubscribed":{"name":"isSubscribed","abstract":"

    It is a conditional-mandatory parameter: must be returned in case “subscribe” parameter was present in the related request.

    ","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataConsentResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataConsentResponse(py)allowed":{"name":"allowed","abstract":"

    This array has the same size as “moduleIds” in the request; each element corresponding to one moduleId","parent_name":"SDLGetInteriorVehicleDataConsentResponse"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(im)initWithModuleType:moduleIds:":{"name":"-initWithModuleType:moduleIds:","abstract":"

    Convenience init to get consent to control a module

    ","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(py)moduleType":{"name":"moduleType","abstract":"

    The module type that the app requests to control.

    ","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(py)moduleIds":{"name":"moduleIds","abstract":"

    Ids of a module of same type, published by System Capability.

    ","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:moduleId:":{"name":"-initWithModuleType:moduleId:","abstract":"

    Convenience init to get information of a particular module type with a module ID.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:moduleId:":{"name":"-initAndSubscribeToModuleType:moduleId:","abstract":"

    Convenience init to get information and subscribe to a particular module type with a module ID.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:moduleId:":{"name":"-initAndUnsubscribeToModuleType:moduleId:","abstract":"

    Convenience init to unsubscribe from particular module with a module ID.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:":{"name":"-initWithModuleType:","abstract":"

    Convenience init to get information of a particular module type.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:":{"name":"-initAndSubscribeToModuleType:","abstract":"

    Convenience init to get information and subscribe to a particular module type.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:":{"name":"-initAndUnsubscribeToModuleType:","abstract":"

    Convenience init to unsubscribe from particular module type.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleType":{"name":"moduleType","abstract":"

    The type of a RC module to retrieve module data from the vehicle.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleId":{"name":"moduleId","abstract":"

    Id of a module, published by System Capability.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)subscribe":{"name":"subscribe","abstract":"

    If subscribe is true, the head unit will register OnInteriorVehicleData notifications for the requested module (moduleId and moduleType).","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(im)initWithOffset:length:fileType:crc:":{"name":"-initWithOffset:length:fileType:crc:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)offset":{"name":"offset","abstract":"

    Optional offset in bytes for resuming partial data chunks.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)length":{"name":"length","abstract":"

    Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)fileType":{"name":"fileType","abstract":"

    File type that is being sent in response.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)crc":{"name":"crc","abstract":"

    Additional CRC32 checksum to protect data integrity up to 512 Mbits.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:appServiceId:fileType:":{"name":"-initWithFileName:appServiceId:fileType:","abstract":"

    Convenience init for sending a small file.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:appServiceId:fileType:offset:length:":{"name":"-initWithFileName:appServiceId:fileType:offset:length:","abstract":"

    Convenience init for sending a large file in multiple data chunks.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)fileName":{"name":"fileName","abstract":"

    File name that should be retrieved.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)appServiceId":{"name":"appServiceId","abstract":"

    ID of the service that should have uploaded the requested file.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)fileType":{"name":"fileType","abstract":"

    Selected file type.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)offset":{"name":"offset","abstract":"

    Optional offset in bytes for resuming partial data chunks.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)length":{"name":"length","abstract":"

    Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)ecuHeader":{"name":"ecuHeader","abstract":"

    2 byte ECU Header for DTC response (as defined in VHR_Layout_Specification_DTCs.pdf)

    ","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)dtc":{"name":"dtc","abstract":"

    Array of all reported DTCs on module (ecuHeader contains information if list is truncated). Each DTC is represented by 4 bytes (3 bytes of data and 1 byte status as defined in VHR_Layout_Specification_DTCs.pdf).

    ","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:":{"name":"-initWithECUName:","abstract":"

    Convenience init

    ","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:mask:":{"name":"-initWithECUName:mask:","abstract":"

    Convenience init with all properties

    ","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)ecuName":{"name":"ecuName","abstract":"

    a name of the module to receive the DTC form","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)dtcMask":{"name":"dtcMask","abstract":"

    DTC Mask Byte to be sent in diagnostic request to module. NSNumber* dtcMask Minvalue:0; Maxvalue:255

    ","parent_name":"SDLGetDTCs"},"Classes/SDLGetCloudAppPropertiesResponse.html#/c:objc(cs)SDLGetCloudAppPropertiesResponse(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"

    Convenience init.

    ","parent_name":"SDLGetCloudAppPropertiesResponse"},"Classes/SDLGetCloudAppPropertiesResponse.html#/c:objc(cs)SDLGetCloudAppPropertiesResponse(py)properties":{"name":"properties","abstract":"

    The requested cloud application properties.

    ","parent_name":"SDLGetCloudAppPropertiesResponse"},"Classes/SDLGetCloudAppProperties.html#/c:objc(cs)SDLGetCloudAppProperties(im)initWithAppID:":{"name":"-initWithAppID:","abstract":"

    Convenience init.

    ","parent_name":"SDLGetCloudAppProperties"},"Classes/SDLGetCloudAppProperties.html#/c:objc(cs)SDLGetCloudAppProperties(py)appID":{"name":"appID","abstract":"

    The id of the cloud app.

    ","parent_name":"SDLGetCloudAppProperties"},"Classes/SDLGetAppServiceDataResponse.html#/c:objc(cs)SDLGetAppServiceDataResponse(im)initWithAppServiceData:":{"name":"-initWithAppServiceData:","abstract":"

    Convenience init.

    ","parent_name":"SDLGetAppServiceDataResponse"},"Classes/SDLGetAppServiceDataResponse.html#/c:objc(cs)SDLGetAppServiceDataResponse(py)serviceData":{"name":"serviceData","abstract":"

    Contains all the current data of the app service.

    ","parent_name":"SDLGetAppServiceDataResponse"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initWithAppServiceType:":{"name":"-initWithAppServiceType:","abstract":"

    Convenience init for service type.

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initAndSubscribeToAppServiceType:":{"name":"-initAndSubscribeToAppServiceType:","abstract":"

    Convenience init for subscribing to a service type.

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initAndUnsubscribeToAppServiceType:":{"name":"-initAndUnsubscribeToAppServiceType:","abstract":"

    Convenience init for unsubscribing to a service type

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(py)serviceType":{"name":"serviceType","abstract":"

    The type of service that is to be offered by this app. See AppServiceType for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(py)subscribe":{"name":"subscribe","abstract":"

    If true, the consumer is requesting to subscribe to all future updates from the service publisher. If false, the consumer doesn’t wish to subscribe and should be unsubscribed if it was previously subscribed.

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"

    longitude degrees

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"

    latitude degrees

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcYear":{"name":"utcYear","abstract":"

    utc year

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMonth":{"name":"utcMonth","abstract":"

    utc month

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcDay":{"name":"utcDay","abstract":"

    utc day

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcHours":{"name":"utcHours","abstract":"

    utc hours

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMinutes":{"name":"utcMinutes","abstract":"

    utc minutes

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcSeconds":{"name":"utcSeconds","abstract":"

    utc seconds

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)compassDirection":{"name":"compassDirection","abstract":"

    Optional, Potential Compass Directions

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)pdop":{"name":"pdop","abstract":"

    The 3D positional dilution of precision.

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)hdop":{"name":"hdop","abstract":"

    The horizontal dilution of precision

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)vdop":{"name":"vdop","abstract":"

    the vertical dilution of precision

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)actual":{"name":"actual","abstract":"

    What the coordinates are based on

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)satellites":{"name":"satellites","abstract":"

    The number of satellites in view

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)dimension":{"name":"dimension","abstract":"

    The supported dimensions of the GPS

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)altitude":{"name":"altitude","abstract":"

    Altitude in meters

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)heading":{"name":"heading","abstract":"

    Heading based on the GPS data.

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)speed":{"name":"speed","abstract":"

    Speed in KPH

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)shifted":{"name":"shifted","abstract":"

    True, if GPS lat/long, time, and altitude have been purposefully shifted (requires a proprietary algorithm to unshift).","parent_name":"SDLGPSData"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(cm)sharedInstance":{"name":"+sharedInstance","abstract":"

    The shared object for pulling function id information

    ","parent_name":"SDLFunctionID"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(im)functionNameForId:":{"name":"-functionNameForId:","abstract":"

    Gets the function name for a given SDL RPC function ID

    ","parent_name":"SDLFunctionID"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(im)functionIdForName:":{"name":"-functionIdForName:","abstract":"

    Gets the function ID for a given SDL RPC function name

    ","parent_name":"SDLFunctionID"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)type":{"name":"type","abstract":"

    The vehicle’s fuel type

    ","parent_name":"SDLFuelRange"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)range":{"name":"range","abstract":"

    The estimate range in KM the vehicle can travel based on fuel level and consumption.

    ","parent_name":"SDLFuelRange"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)artworkRetryCount":{"name":"artworkRetryCount","abstract":"

    Defines the number of times the file manager will attempt to reupload SDLArtwork files in the event of a failed upload to Core.

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)fileRetryCount":{"name":"fileRetryCount","abstract":"

    Defines the number of times the file manager will attempt to reupload general SDLFiles in the event of a failed upload to Core.

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"

    Creates a default file manager configuration.

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)init":{"name":"-init","abstract":"

    Use defaultConfiguration instead

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)initWithArtworkRetryCount:fileRetryCount:":{"name":"-initWithArtworkRetryCount:fileRetryCount:","abstract":"

    Creates a file manager configuration with customized upload retry counts.

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)remoteFileNames":{"name":"remoteFileNames","abstract":"

    A set of all names of files known on the remote head unit. Known files can be used or deleted on the remote system.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)bytesAvailable":{"name":"bytesAvailable","abstract":"

    The number of bytes still available for files for this app.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)currentState":{"name":"currentState","abstract":"

    The state of the file manager.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)pendingTransactions":{"name":"pendingTransactions","abstract":"

    The currently pending transactions (Upload, Delete, and List Files) in the file manager

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)suspended":{"name":"suspended","abstract":"

    Whether or not the file manager is suspended. If suspended, the file manager can continue to queue uploads and deletes, but will not actually perform any of those until it is no longer suspended. This can be used for throttling down the file manager if other, important operations are taking place over the accessory connection.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)init":{"name":"-init","abstract":"

    Initialize the class…or not, since this method is unavailable. Dependencies must be injected using initWithConnectionManager:

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"

    Creates a new file manager with a specified connection manager

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"

    Creates a new file manager with a specified connection manager and configuration

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"

    The manager stars up and attempts to fetch its initial list and transfer initial files.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)stop":{"name":"-stop","abstract":"

    Cancels all file manager operations and deletes all associated data.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)hasUploadedFile:":{"name":"-hasUploadedFile:","abstract":"

    Check if the remote system contains a file

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFileWithName:completionHandler:":{"name":"-deleteRemoteFileWithName:completionHandler:","abstract":"

    Delete a file stored on the remote system

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFilesWithNames:completionHandler:":{"name":"-deleteRemoteFilesWithNames:completionHandler:","abstract":"

    Deletes an array of files on the remote file system. The files are deleted in the order in which they are added to the array, with the first file to be deleted at index 0. The delete queue is sequential, meaning that once a delete request is sent to Core, the queue waits until a response is received from Core before the next the next delete request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFile:completionHandler:":{"name":"-uploadFile:completionHandler:","abstract":"

    Upload a file to the remote file system. If a file with the [SDLFile name] already exists, this will overwrite that file. If you do not want that to happen, check remoteFileNames before uploading, or change allowOverwrite to NO.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:progressHandler:completionHandler:":{"name":"-uploadFiles:progressHandler:completionHandler:","abstract":"

    Uploads an array of files to the remote file system. The files will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:completionHandler:":{"name":"-uploadFiles:completionHandler:","abstract":"

    Uploads an array of files to the remote file system. The files will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtwork:completionHandler:":{"name":"-uploadArtwork:completionHandler:","abstract":"

    Uploads an artwork file to the remote file system and returns the name of the uploaded artwork once completed. If an artwork with the same name is already on the remote system, the artwork is not uploaded and the artwork name is simply returned.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:completionHandler:":{"name":"-uploadArtworks:completionHandler:","abstract":"

    Uploads an array of artworks to the remote file system. The artworks will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:progressHandler:completionHandler:":{"name":"-uploadArtworks:progressHandler:completionHandler:","abstract":"

    Uploads an array of artworks to the remote file system. The artworks will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(cm)temporaryFileDirectory":{"name":"+temporaryFileDirectory","abstract":"

    A URL to the directory where temporary files are stored. When an SDLFile is created with NSData, it writes to a temporary file until the file manager finishes uploading it.

    ","parent_name":"SDLFileManager"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)persistent":{"name":"persistent","abstract":"

    Whether or not the file should persist on disk between car ignition cycles.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)overwrite":{"name":"overwrite","abstract":"

    Whether or not the file should overwrite an existing file on the remote disk with the same name.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)name":{"name":"name","abstract":"

    The name the file should be stored under on the remote disk. This is how the file will be referenced in all later calls.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileURL":{"name":"fileURL","abstract":"

    The url the local file is stored at while waiting to push it to the remote system. If the data has not been passed to the file URL, this will be nil.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)data":{"name":"data","abstract":"

    The binary data of the SDLFile. If initialized with data, this will be a relatively quick call, but if initialized with a file URL, this is a rather expensive call the first time. The data will be cached in RAM after the first call.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileSize":{"name":"fileSize","abstract":"

    The size of the binary data of the SDLFile.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileType":{"name":"fileType","abstract":"

    The system will attempt to determine the type of file that you have passed in. It will default to BINARY if it does not recognize the file type or the file type is not supported by SDL.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)inputStream":{"name":"inputStream","abstract":"

    A stream to pull binary data from a SDLFile. The stream only pulls required data from the file on disk or in memory. This reduces memory usage while uploading a large file to the remote system as each chunk of data can be released immediately after it is uploaded.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)isStaticIcon":{"name":"isStaticIcon","abstract":"

    Describes whether or not this file is represented by static icon data. The head unit will present its representation of the static icon concept when sent this data.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithFileURL:name:persistent:":{"name":"-initWithFileURL:name:persistent:","abstract":"

    The designated initializer for an SDL File. The only major property that is not set using this is “overwrite”, which defaults to NO.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileAtFileURL:name:":{"name":"+persistentFileAtFileURL:name:","abstract":"

    Create an SDL file using a local file URL.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileAtFileURL:name:":{"name":"+fileAtFileURL:name:","abstract":"

    Create an SDL file using a local file URL.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithData:name:fileExtension:persistent:":{"name":"-initWithData:name:fileExtension:persistent:","abstract":"

    Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileWithData:name:fileExtension:":{"name":"+persistentFileWithData:name:fileExtension:","abstract":"

    Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileWithData:name:fileExtension:":{"name":"+fileWithData:name:fileExtension:","abstract":"

    Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.

    ","parent_name":"SDLFile"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(im)initWithChannelId:channelSetting:":{"name":"-initWithChannelId:channelSetting:","abstract":"

    Convenience init

    ","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelName":{"name":"channelName","abstract":"

    @abstract Read-only channel / frequency name","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelSetting":{"name":"channelSetting","abstract":"

    @abstract Reflects the setting, from 0%-100%.

    ","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelId":{"name":"channelId","abstract":"

    @abstract id of the channel.

    ","parent_name":"SDLEqualizerSettings"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"

    A set of security managers used to encrypt traffic data. Each OEM has their own proprietary security manager.

    ","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(py)delegate":{"name":"delegate","abstract":"

    A delegate callback that will tell you when an acknowledgement has occurred for starting as secure service.

    ","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"

    Creates a default encryption configuration.

    ","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(im)initWithSecurityManagers:delegate:":{"name":"-initWithSecurityManagers:delegate:","abstract":"

    Creates a secure configuration for each of the security managers provided.

    ","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncodedSyncPData.html#/c:objc(cs)SDLEncodedSyncPData(py)data":{"name":"data","abstract":"

    Contains base64 encoded string of SyncP packets.

    ","parent_name":"SDLEncodedSyncPData"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)emergencyEventType":{"name":"emergencyEventType","abstract":"

    References signal “VedsEvntType_D_Ltchd”. See EmergencyEventType.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)fuelCutoffStatus":{"name":"fuelCutoffStatus","abstract":"

    References signal “RCM_FuelCutoff”. See FuelCutoffStatus.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)rolloverEvent":{"name":"rolloverEvent","abstract":"

    References signal “VedsEvntRoll_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)maximumChangeVelocity":{"name":"maximumChangeVelocity","abstract":"

    References signal “VedsMaxDeltaV_D_Ltchd”. Change in velocity in KPH.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)multipleEvents":{"name":"multipleEvents","abstract":"

    References signal “VedsMultiEvnt_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallNotificationStatus":{"name":"eCallNotificationStatus","abstract":"

    References signal “eCallNotification_4A”. See VehicleDataNotificationStatus.

    ","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)auxECallNotificationStatus":{"name":"auxECallNotificationStatus","abstract":"

    References signal “eCallNotification”. See VehicleDataNotificationStatus.

    ","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallConfirmationStatus":{"name":"eCallConfirmationStatus","abstract":"

    References signal “eCallConfirmation”. See ECallConfirmationStatus.

    ","parent_name":"SDLECallInfo"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:":{"name":"-initWithDisplayName:","abstract":"

    Init with required properties

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:windowTypeSupported:windowCapabilities:":{"name":"-initWithDisplayName:windowTypeSupported:windowCapabilities:","abstract":"

    Init with all the properities

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)displayName":{"name":"displayName","abstract":"

    Name of the display.

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)windowTypeSupported":{"name":"windowTypeSupported","abstract":"

    Informs the application how many windows the app is allowed to create per type.

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)windowCapabilities":{"name":"windowCapabilities","abstract":"

    Contains a list of capabilities of all windows related to the app. Once the app has registered the capabilities of all windows will be provided, but GetSystemCapability still allows requesting window capabilities of all windows.

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayType":{"name":"displayType","abstract":"

    The type of display

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayName":{"name":"displayName","abstract":"

    The name of the connected display

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)textFields":{"name":"textFields","abstract":"

    An array of SDLTextField structures, each of which describes a field in the HMI which the application can write to using operations such as SDLShow, SDLSetMediaClockTimer, etc.

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)imageFields":{"name":"imageFields","abstract":"

    An array of SDLImageField elements

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)mediaClockFormats":{"name":"mediaClockFormats","abstract":"

    An array of SDLMediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)graphicSupported":{"name":"graphicSupported","abstract":"

    The display’s persistent screen supports.

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)templatesAvailable":{"name":"templatesAvailable","abstract":"

    An array of all predefined persistent display templates available on the head unit.

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)screenParams":{"name":"screenParams","abstract":"

    A set of all parameters related to a prescribed screen area (e.g. for video / touch input)

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"

    The number of on-screen custom presets available (if any); otherwise omitted

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(im)initWithNumber:":{"name":"-initWithNumber:","abstract":"

    Convenience init to initiate a dial number request

    ","parent_name":"SDLDialNumber"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(py)number":{"name":"number","abstract":"

    Up to 40 character string representing the phone number. All characters stripped except for ‘0’-‘9’, ‘*’, ‘#’, ‘,’, ‘;’, and ‘+’

    ","parent_name":"SDLDialNumber"},"Classes/SDLDiagnosticMessageResponse.html#/c:objc(cs)SDLDiagnosticMessageResponse(py)messageDataResult":{"name":"messageDataResult","abstract":"

    Array of bytes comprising CAN message result.

    ","parent_name":"SDLDiagnosticMessageResponse"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(im)initWithTargetId:length:data:":{"name":"-initWithTargetId:length:data:","abstract":"

    Convenience init

    ","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)targetID":{"name":"targetID","abstract":"

    Name of target ECU

    ","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageLength":{"name":"messageLength","abstract":"

    Length of message (in bytes)

    ","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageData":{"name":"messageData","abstract":"

    Array of bytes comprising CAN message.

    ","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)voiceRecOn":{"name":"voiceRecOn","abstract":"

    Indicates whether the voice recognition is on or off

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)btIconOn":{"name":"btIconOn","abstract":"

    Indicates whether the bluetooth connection established

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)callActive":{"name":"callActive","abstract":"

    Indicates whether a call is being active

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)phoneRoaming":{"name":"phoneRoaming","abstract":"

    Indicates whether the phone is in roaming mode

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)textMsgAvailable":{"name":"textMsgAvailable","abstract":"

    Indicates whether a textmessage is available

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)battLevelStatus":{"name":"battLevelStatus","abstract":"

    Battery level status

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)stereoAudioOutputMuted":{"name":"stereoAudioOutputMuted","abstract":"

    The status of the stereo audio output channel

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)monoAudioOutputMuted":{"name":"monoAudioOutputMuted","abstract":"

    The status of the mono audio output channel

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)signalLevelStatus":{"name":"signalLevelStatus","abstract":"

    Signal level status

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)primaryAudioSource":{"name":"primaryAudioSource","abstract":"

    The current primary audio source of SDL (if selected).

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)eCallEventActive":{"name":"eCallEventActive","abstract":"

    Indicates if an emergency call is active

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(cm)currentDevice":{"name":"+currentDevice","abstract":"

    Convenience init. Object will contain all information about the connected device automatically.

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)hardware":{"name":"hardware","abstract":"

    Device model

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)firmwareRev":{"name":"firmwareRev","abstract":"

    Device firmware version

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)os":{"name":"os","abstract":"

    Device OS

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)osVersion":{"name":"osVersion","abstract":"

    Device OS version

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)carrier":{"name":"carrier","abstract":"

    Device mobile carrier

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)maxNumberRFCOMMPorts":{"name":"maxNumberRFCOMMPorts","abstract":"

    Number of bluetooth RFCOMM ports available.

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeleteWindow.html#/c:objc(cs)SDLDeleteWindow(im)initWithId:":{"name":"-initWithId:","parent_name":"SDLDeleteWindow"},"Classes/SDLDeleteWindow.html#/c:objc(cs)SDLDeleteWindow(py)windowID":{"name":"windowID","abstract":"

    A unique ID to identify the window.

    ","parent_name":"SDLDeleteWindow"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(im)initWithId:":{"name":"-initWithId:","abstract":"

    Convenience init to delete a submenu

    ","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(py)menuID":{"name":"menuID","abstract":"

    the MenuID that identifies the SDLSubMenu to be delete","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(im)initWithId:":{"name":"-initWithId:","abstract":"

    Convenience init to delete a choice set

    ","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"

    a unique ID that identifies the Choice Set","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteFileResponse.html#/c:objc(cs)SDLDeleteFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"

    The remaining available space for your application to store data on the remote system.

    ","parent_name":"SDLDeleteFileResponse"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"

    Convenience init to delete a file

    ","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(py)syncFileName":{"name":"syncFileName","abstract":"

    a file reference name","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(im)initWithId:":{"name":"-initWithId:","abstract":"

    Convenience init to remove a command from the menu

    ","parent_name":"SDLDeleteCommand"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(py)cmdID":{"name":"cmdID","abstract":"

    the Command ID that identifies the Command to be deleted from Command Menu","parent_name":"SDLDeleteCommand"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:":{"name":"-initWithHour:minute:","abstract":"

    Convenience init for creating a date

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:":{"name":"-initWithHour:minute:second:millisecond:","abstract":"

    Convenience init for creating a date

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:day:month:year:":{"name":"-initWithHour:minute:second:millisecond:day:month:year:","abstract":"

    Convenience init for creating a date

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:day:month:year:timezoneMinuteOffset:timezoneHourOffset:":{"name":"-initWithHour:minute:second:millisecond:day:month:year:timezoneMinuteOffset:timezoneHourOffset:","abstract":"

    Convenience init for creating a date with all properties

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)millisecond":{"name":"millisecond","abstract":"

    Milliseconds part of time

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)second":{"name":"second","abstract":"

    Seconds part of time

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)minute":{"name":"minute","abstract":"

    Minutes part of time

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)hour":{"name":"hour","abstract":"

    Hour part of time

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)day":{"name":"day","abstract":"

    Day of the month

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)month":{"name":"month","abstract":"

    Month of the year

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)year":{"name":"year","abstract":"

    The year in YYYY format

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneMinuteOffset":{"name":"timezoneMinuteOffset","abstract":"

    Time zone offset in Min with regard to UTC

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneHourOffset":{"name":"timezoneHourOffset","abstract":"

    Time zone offset in Hours with regard to UTC

    ","parent_name":"SDLDateTime"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)resultCode":{"name":"resultCode","abstract":"

    Individual DID result code.

    ","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)didLocation":{"name":"didLocation","abstract":"

    Location of raw data from vehicle data DID

    ","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)data":{"name":"data","abstract":"

    Raw DID-based data returned for requested element.

    ","parent_name":"SDLDIDResult"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(im)initWithId:windowName:windowType:":{"name":"-initWithId:windowName:windowType:","abstract":"

    Constructor with the required parameters

    ","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(im)initWithId:windowName:windowType:associatedServiceType:duplicateUpdatesFromWindowID:":{"name":"-initWithId:windowName:windowType:associatedServiceType:duplicateUpdatesFromWindowID:","abstract":"

    Convinience constructor with all the parameters.

    ","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)windowID":{"name":"windowID","abstract":"

    A unique ID to identify the window.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)windowName":{"name":"windowName","abstract":"

    The window name to be used by the HMI.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)type":{"name":"type","abstract":"

    The type of the window to be created. Main window or widget.

    ","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)associatedServiceType":{"name":"associatedServiceType","abstract":"

    Allows an app to create a widget related to a specific service type.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)duplicateUpdatesFromWindowID":{"name":"duplicateUpdatesFromWindowID","abstract":"

    Optional parameter. Specify whether the content sent to an existing window should be duplicated to the created window. If there isn’t a window with the ID, the request will be rejected with INVALID_DATA.

    ","parent_name":"SDLCreateWindow"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(im)initWithId:choiceSet:":{"name":"-initWithId:choiceSet:","abstract":"

    Convenience init for creating a choice set RPC

    ","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"

    A unique ID that identifies the Choice Set

    ","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)choiceSet":{"name":"choiceSet","abstract":"

    Array of choices, which the user can select by menu or voice recognition

    ","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lifecycleConfig":{"name":"lifecycleConfig","abstract":"

    The lifecycle configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lockScreenConfig":{"name":"lockScreenConfig","abstract":"

    The lock screen configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)loggingConfig":{"name":"loggingConfig","abstract":"

    The log configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)streamingMediaConfig":{"name":"streamingMediaConfig","abstract":"

    The streaming media configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig":{"name":"fileManagerConfig","abstract":"

    The file manager configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)encryptionConfig":{"name":"encryptionConfig","abstract":"

    The encryption configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:":{"name":"-initWithLifecycle:lockScreen:logging:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:encryption:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:encryption:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, file manager and encryption configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:":{"name":"+configurationWithLifecycle:lockScreen:logging:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:fileManager:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media, file manager and encryption configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeActive":{"name":"powerModeActive","abstract":"

    References signal “PowerMode_UB”.

    ","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeQualificationStatus":{"name":"powerModeQualificationStatus","abstract":"

    References signal “PowerModeQF”. See PowerModeQualificationStatus.

    ","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)carModeStatus":{"name":"carModeStatus","abstract":"

    References signal “CarMode”. See CarMode.

    ","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeStatus":{"name":"powerModeStatus","abstract":"

    References signal “PowerMode”. See PowerMode.

    ","parent_name":"SDLClusterModeStatus"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(im)initWithAppID:":{"name":"-initWithAppID:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(im)initWithAppID:nicknames:enabled:authToken:cloudTransportType:hybridAppPreference:endpoint:":{"name":"-initWithAppID:nicknames:enabled:authToken:cloudTransportType:hybridAppPreference:endpoint:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)nicknames":{"name":"nicknames","abstract":"

    An array of app names a cloud app is allowed to register with. If included in a SetCloudAppProperties request, this value will overwrite the existing “nicknames” field in the app policies section of the policy table.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)appID":{"name":"appID","abstract":"

    The id of the cloud app.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)enabled":{"name":"enabled","abstract":"

    If true, the cloud app will appear in the HMI’s app list; if false, the cloud app will not appear in the HMI’s app list.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)authToken":{"name":"authToken","abstract":"

    Used to authenticate websocket connection on app activation.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)cloudTransportType":{"name":"cloudTransportType","abstract":"

    Specifies the connection type Core should use. Currently the ones that work in SDL Core are WS or WSS, but an OEM can implement their own transport adapter to handle different values.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)hybridAppPreference":{"name":"hybridAppPreference","abstract":"

    Specifies the user preference to use the cloud app version or mobile app version when both are available.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)endpoint":{"name":"endpoint","abstract":"

    The websocket endpoint.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:","abstract":"

    Convenience init for climate control data.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:","abstract":"

    Convenience init for climate control data.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:climateEnable:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:climateEnable:","abstract":"

    Convenience init for climate control data with all properties.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)fanSpeed":{"name":"fanSpeed","abstract":"

    Speed of Fan in integer

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)currentTemperature":{"name":"currentTemperature","abstract":"

    The Current Temperature in SDLTemperature

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)desiredTemperature":{"name":"desiredTemperature","abstract":"

    Desired Temperature in SDLTemperature

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acEnable":{"name":"acEnable","abstract":"

    Represents if AC is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)circulateAirEnable":{"name":"circulateAirEnable","abstract":"

    Represents if circulation of air is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)autoModeEnable":{"name":"autoModeEnable","abstract":"

    Represents if auto mode is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)defrostZone":{"name":"defrostZone","abstract":"

    Represents the kind of defrost zone.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)dualModeEnable":{"name":"dualModeEnable","abstract":"

    Represents if dual mode is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acMaxEnable":{"name":"acMaxEnable","abstract":"

    Represents if ac max is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)ventilationMode":{"name":"ventilationMode","abstract":"

    Represents the kind of Ventilation zone.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedSteeringWheelEnable":{"name":"heatedSteeringWheelEnable","abstract":"

    @abstract value false means disabled/turn off, value true means enabled/turn on.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedWindshieldEnable":{"name":"heatedWindshieldEnable","abstract":"

    @abstract value false means disabled, value true means enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedRearWindowEnable":{"name":"heatedRearWindowEnable","abstract":"

    @abstract value false means disabled, value true means enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedMirrorsEnable":{"name":"heatedMirrorsEnable","abstract":"

    @abstract Value false means disabled, value true means enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)climateEnable":{"name":"climateEnable","abstract":"

    @abstract Value false means disabled, value true means enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:","abstract":"

    Convenience init to describe the climate control capabilities.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:","abstract":"

    Convenience init to describe the climate control capabilities.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:","abstract":"

    Convenience init to describe the climate control capabilities.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:moduleInfo:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:":{"name":"-initWithModuleName:moduleInfo:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:","abstract":"

    Convenience init to describe the climate control capabilities with all properities.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)moduleName":{"name":"moduleName","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)fanSpeedAvailable":{"name":"fanSpeedAvailable","abstract":"

    Availability of the control of fan speed.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)desiredTemperatureAvailable":{"name":"desiredTemperatureAvailable","abstract":"

    Availability of the control of desired temperature.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acEnableAvailable":{"name":"acEnableAvailable","abstract":"

    Availability of the control of turn on/off AC.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acMaxEnableAvailable":{"name":"acMaxEnableAvailable","abstract":"

    Availability of the control of enable/disable air conditioning is ON on the maximum level.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)circulateAirEnableAvailable":{"name":"circulateAirEnableAvailable","abstract":"

    Availability of the control of enable/disable circulate Air mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)autoModeEnableAvailable":{"name":"autoModeEnableAvailable","abstract":"

    Availability of the control of enable/disable auto mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)dualModeEnableAvailable":{"name":"dualModeEnableAvailable","abstract":"

    Availability of the control of enable/disable dual mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZoneAvailable":{"name":"defrostZoneAvailable","abstract":"

    Availability of the control of defrost zones.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZone":{"name":"defrostZone","abstract":"

    A set of all defrost zones that are controllable.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationModeAvailable":{"name":"ventilationModeAvailable","abstract":"

    Availability of the control of air ventilation mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationMode":{"name":"ventilationMode","abstract":"

    A set of all ventilation modes that are controllable.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedSteeringWheelAvailable":{"name":"heatedSteeringWheelAvailable","abstract":"

    @abstract Availability of the control (enable/disable) of heated Steering Wheel.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedWindshieldAvailable":{"name":"heatedWindshieldAvailable","abstract":"

    @abstract Availability of the control (enable/disable) of heated Windshield.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedRearWindowAvailable":{"name":"heatedRearWindowAvailable","abstract":"

    @abstract Availability of the control (enable/disable) of heated Rear Window.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedMirrorsAvailable":{"name":"heatedMirrorsAvailable","abstract":"

    @abstract Availability of the control (enable/disable) of heated Mirrors.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)climateEnableAvailable":{"name":"climateEnableAvailable","abstract":"

    @abstract Availability of the control of enable/disable climate control.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout":{"name":"defaultTimeout","abstract":"

    Set this to change the default timeout for all choice sets. If a timeout is not set on an individual choice set object (or if it is set to 0.0), then it will use this timeout instead. See timeout for more details. If this is not set by you, it will default to 10 seconds.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultLayout":{"name":"defaultLayout","abstract":"

    Set this to change the default layout for all choice sets. If a layout is not set on an individual choice set object, then it will use this layout instead. See layout for more details. If this is not set by you, it will default to SDLChoiceSetLayoutList.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)title":{"name":"title","abstract":"

    Maps to PerformInteraction.initialText. The title of the choice set, and/or the initial text on a keyboard prompt.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)initialPrompt":{"name":"initialPrompt","abstract":"

    Maps to PerformInteraction.initialPrompt. The initial prompt spoken to the user at the start of an interaction.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout":{"name":"layout","abstract":"

    Maps to PerformInteraction.interactionLayout. Whether the presented choices are arranged as a set of tiles or a list.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout":{"name":"timeout","abstract":"

    Maps to PerformInteraction.timeout. This applies only to a manual selection (not a voice selection, which has its timeout handled by the system). Defaults to defaultTimeout.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"

    Maps to PerformInteraction.timeoutPrompt. This text is spoken when a VR interaction times out. If this set is presented in a manual (non-voice) only interaction, this will be ignored.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpPrompt":{"name":"helpPrompt","abstract":"

    Maps to PerformInteraction.helpPrompt. This is the spoken string when a user speaks “help” when the interaction is occurring.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpList":{"name":"helpList","abstract":"

    Maps to PerformInteraction.vrHelp. This is a list of help text presented to the user when they are in a voice recognition interaction from your choice set of options. If this set is presented in a touch only interaction, this will be ignored.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)delegate":{"name":"delegate","abstract":"

    The delegate of this choice set, called when the user interacts with it.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)choices":{"name":"choices","abstract":"

    The choices to be displayed to the user within this choice set. These choices could match those already preloaded via SDLScreenManager preloadChoices:withCompletionHandler:.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:choices:":{"name":"-initWithTitle:delegate:choices:","abstract":"

    Initialize with a title, delegate, and choices. It will use the default timeout and layout, all other properties (such as prompts) will be nil.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:":{"name":"-initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:","abstract":"

    Initializer with all possible properties.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:":{"name":"-initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:","abstract":"

    Initializer with all possible properties.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)cancel":{"name":"-cancel","abstract":"

    Cancels the choice set. If the choice set has not yet been sent to Core, it will not be sent. If the choice set is already presented on Core, the choice set will be immediately dismissed. Canceling an already presented choice set will only work if connected to Core versions 6.0+. On older versions of Core, the choice set will not be dismissed.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)text":{"name":"text","abstract":"

    Maps to Choice.menuName. The primary text of the cell. Duplicates within an SDLChoiceSet are not permitted and will result in the SDLChoiceSet failing to initialize.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryText":{"name":"secondaryText","abstract":"

    Maps to Choice.secondaryText. Optional secondary text of the cell, if available. Duplicates within an SDLChoiceSet are permitted.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)tertiaryText":{"name":"tertiaryText","abstract":"

    Maps to Choice.tertiaryText. Optional tertitary text of the cell, if available. Duplicates within an SDLChoiceSet are permitted.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)voiceCommands":{"name":"voiceCommands","abstract":"

    Maps to Choice.vrCommands. Optional voice commands the user can speak to activate the cell. If not set and the head unit requires it, this will be set to the number in the list that this item appears. However, this would be a very poor experience for a user if the choice set is presented as a voice only interaction or both interaction mode. Therefore, consider not setting this only when you know the choice set will be presented as a touch only interaction.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)artwork":{"name":"artwork","abstract":"

    Maps to Choice.image. Optional image for the cell. This will be uploaded before the cell is used when the cell is preloaded or presented for the first time.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryArtwork":{"name":"secondaryArtwork","abstract":"

    Maps to Choice.secondaryImage. Optional secondary image for the cell. This will be uploaded before the cell is used when the cell is preloaded or presented for the first time.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)init":{"name":"-init","abstract":"

    Initialize the cell with nothing. This is unavailable

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:":{"name":"-initWithText:","abstract":"

    Initialize the cell with text and nothing else.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:artwork:voiceCommands:":{"name":"-initWithText:artwork:voiceCommands:","abstract":"

    Initialize the cell with text, optional artwork, and optional voice commands

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:":{"name":"-initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:","abstract":"

    Initialize the cell with all optional items

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:":{"name":"-initWithId:menuName:vrCommands:","abstract":"

    Constructs a newly allocated SDLChangeRegistration object with the required parameters

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:image:secondaryText:secondaryImage:tertiaryText:":{"name":"-initWithId:menuName:vrCommands:image:secondaryText:secondaryImage:tertiaryText:","abstract":"

    Constructs a newly allocated SDLChangeRegistration object with all parameters

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)choiceID":{"name":"choiceID","abstract":"

    The application-scoped identifier that uniquely identifies this choice

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)menuName":{"name":"menuName","abstract":"

    Text which appears in menu, representing this choice

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)vrCommands":{"name":"vrCommands","abstract":"

    VR synonyms for this choice

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)image":{"name":"image","abstract":"

    The image of the choice

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryText":{"name":"secondaryText","abstract":"

    Secondary text to display; e.g. address of POI in a search result entry

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)tertiaryText":{"name":"tertiaryText","abstract":"

    Tertiary text to display; e.g. distance to POI for a search result entry

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryImage":{"name":"secondaryImage","abstract":"

    Secondary image for choice

    ","parent_name":"SDLChoice"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:":{"name":"-initWithLanguage:hmiDisplayLanguage:","abstract":"

    Constructs a newly allocated SDLChangeRegistration object with required parameters

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:appName:ttsName:ngnMediaScreenAppName:vrSynonyms:":{"name":"-initWithLanguage:hmiDisplayLanguage:appName:ttsName:ngnMediaScreenAppName:vrSynonyms:","abstract":"

    Constructs a newly allocated SDLChangeRegistration object with all parameters

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)language":{"name":"language","abstract":"

    The language the app wants to change to

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"

    HMI display language

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)appName":{"name":"appName","abstract":"

    Request a new app name registration

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ttsName":{"name":"ttsName","abstract":"

    Request a new TTSName registration.

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"

    Request a new app short name registration

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)vrSynonyms":{"name":"vrSynonyms","abstract":"

    Request a new VR synonyms registration

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLCarWindowViewController.html#/c:objc(cs)SDLCarWindowViewController(py)supportedOrientation":{"name":"supportedOrientation","abstract":"

    The supported interface orientation you wish to use. Defaults to MaskPortrait.

    ","parent_name":"SDLCarWindowViewController"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithFunctionID:":{"name":"-initWithFunctionID:","abstract":"

    Convenience init for dismissing the currently presented modal view (either an alert, slider, scrollable message, or perform interation).

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithFunctionID:cancelID:":{"name":"-initWithFunctionID:cancelID:","abstract":"

    Convenience init for dismissing a specific view.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithAlertCancelID:":{"name":"-initWithAlertCancelID:","abstract":"

    Convenience init for dismissing an alert.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithSliderCancelID:":{"name":"-initWithSliderCancelID:","abstract":"

    Convenience init for dismissing a slider.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithScrollableMessageCancelID:":{"name":"-initWithScrollableMessageCancelID:","abstract":"

    Convenience init for dismissing a scrollable message.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithPerformInteractionCancelID:":{"name":"-initWithPerformInteractionCancelID:","abstract":"

    Convenience init for dismissing a perform interaction.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)alert":{"name":"+alert","abstract":"

    Convenience init for dismissing the currently presented alert.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)slider":{"name":"+slider","abstract":"

    Convenience init for dismissing the currently presented slider.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)scrollableMessage":{"name":"+scrollableMessage","abstract":"

    Convenience init for dismissing the currently presented scrollable message.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)performInteraction":{"name":"+performInteraction","abstract":"

    Convenience init for dismissing the currently presented perform interaction.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(py)cancelID":{"name":"cancelID","abstract":"

    The ID of the specific interaction to dismiss. If not set, the most recent of the RPC type set in functionID will be dismissed.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(py)functionID":{"name":"functionID","abstract":"

    The ID of the type of interaction to dismiss.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:":{"name":"-initWithButtonName:moduleType:","abstract":"

    Constructs a newly allocated SDLButtonPress object with the given parameters

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:moduleId:":{"name":"-initWithButtonName:moduleType:moduleId:","abstract":"

    Constructs a newly allocated SDLButtonPress object with the given parameters

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleType":{"name":"moduleType","abstract":"

    The module where the button should be pressed.

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleId":{"name":"moduleId","abstract":"

    Id of a module, published by System Capability.

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonName":{"name":"buttonName","abstract":"

    The name of supported RC climate or radio button.

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"

    Indicates whether this is a LONG or SHORT button press event.

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)name":{"name":"name","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"

    A NSNumber value indicates whether the button supports a SHORT press

    ","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"

    A NSNumber value indicates whether the button supports a LONG press

    ","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"

    A NSNumber value indicates whether the button supports “button down” and “button up”

    ","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLButtonCapabilities"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)parkBrakeActive":{"name":"parkBrakeActive","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)ignitionStableStatus":{"name":"ignitionStableStatus","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)ignitionStatus":{"name":"ignitionStatus","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)driverDoorAjar":{"name":"driverDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)passengerDoorAjar":{"name":"passengerDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)rearLeftDoorAjar":{"name":"rearLeftDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)rearRightDoorAjar":{"name":"rearRightDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBeltDeployed":{"name":"driverBeltDeployed","abstract":"

    References signal “VedsDrvBelt_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBeltDeployed":{"name":"passengerBeltDeployed","abstract":"

    References signal “VedsPasBelt_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBuckleBelted":{"name":"passengerBuckleBelted","abstract":"

    References signal “VedsRw1PasBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBuckleBelted":{"name":"driverBuckleBelted","abstract":"

    References signal “VedsRw1DrvBckl_D_Ltchd”. See VehicleDataEventStatus

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow2BuckleBelted":{"name":"leftRow2BuckleBelted","abstract":"

    References signal “VedsRw2lBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerChildDetected":{"name":"passengerChildDetected","abstract":"

    References signal “VedsRw1PasChld_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow2BuckleBelted":{"name":"rightRow2BuckleBelted","abstract":"

    References signal “VedsRw2rBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow2BuckleBelted":{"name":"middleRow2BuckleBelted","abstract":"

    References signal “VedsRw2mBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow3BuckleBelted":{"name":"middleRow3BuckleBelted","abstract":"

    References signal “VedsRw3mBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow3BuckleBelted":{"name":"leftRow3BuckleBelted","abstract":"

    References signal “VedsRw3lBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow3BuckleBelted":{"name":"rightRow3BuckleBelted","abstract":"

    References signal “VedsRw3rBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRearInflatableBelted":{"name":"leftRearInflatableBelted","abstract":"

    References signal “VedsRw2lRib_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRearInflatableBelted":{"name":"rightRearInflatableBelted","abstract":"

    References signal “VedsRw2rRib_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BeltDeployed":{"name":"middleRow1BeltDeployed","abstract":"

    References signal “VedsRw1mBelt_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BuckleBelted":{"name":"middleRow1BuckleBelted","abstract":"

    References signal “VedsRw1mBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)delegate":{"name":"delegate","abstract":"

    The delegate describing when files are done playing or any errors that occur

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)playing":{"name":"playing","abstract":"

    Whether or not we are currently playing audio

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)queue":{"name":"queue","abstract":"

    The queue of audio files that will be played in sequence

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)init":{"name":"-init","abstract":"

    Init should only occur with dependencies. use initWithManager:

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)initWithManager:":{"name":"-initWithManager:","abstract":"

    Create an audio stream manager with a reference to the parent stream manager.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithFileURL:":{"name":"-pushWithFileURL:","abstract":"

    Push a new file URL onto the queue after converting it into the correct PCM format for streaming binary data. Call playNextWhenReady to start playing the next completed pushed file.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithData:":{"name":"-pushWithData:","abstract":"

    Push a new audio buffer onto the queue. Call playNextWhenReady to start playing the pushed audio buffer.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)playNextWhenReady":{"name":"-playNextWhenReady","abstract":"

    Play the next item in the queue. If an item is currently playing, it will continue playing and this item will begin playing after it is completed.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)stop":{"name":"-stop","abstract":"

    Stop playing the queue after the current item completes and clear the queue. If nothing is playing, the queue will be cleared.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)samplingRate":{"name":"samplingRate","abstract":"

    The sampling rate for AudioPassThru

    ","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)bitsPerSample":{"name":"bitsPerSample","abstract":"

    The sample depth in bit for AudioPassThru

    ","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)audioType":{"name":"audioType","abstract":"

    The audiotype for AudioPassThru

    ","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)inputFileURL":{"name":"inputFileURL","abstract":"

    If initialized with a file URL, the file URL it came from

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)outputFileURL":{"name":"outputFileURL","abstract":"

    If initialized with a file URL, where the transcoder should produce the transcoded PCM audio file

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)estimatedDuration":{"name":"estimatedDuration","abstract":"

    In seconds. UINT32_MAX if unknown.

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)data":{"name":"data","abstract":"

    The PCM audio data to be transferred and played

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)fileSize":{"name":"fileSize","abstract":"

    The size of the PCM audio data in bytes

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(im)initWithInputFileURL:outputFileURL:estimatedDuration:":{"name":"-initWithInputFileURL:outputFileURL:estimatedDuration:","abstract":"

    Initialize an audio file to be queued and played

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(im)initWithData:":{"name":"-initWithData:","abstract":"

    Initialize a buffer of PCM audio data to be queued and played

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(im)initWithSource:keepContext:volume:equalizerSettings:":{"name":"-initWithSource:keepContext:volume:equalizerSettings:","abstract":"

    Constructs a newly allocated SDLAudioControlData object with given parameters

    ","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)source":{"name":"source","abstract":"

    @abstract In a getter response or a notification,","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)keepContext":{"name":"keepContext","abstract":"

    @abstract This parameter shall not be present in any getter responses or notifications.","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)volume":{"name":"volume","abstract":"

    @abstract Reflects the volume of audio, from 0%-100%.

    ","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)equalizerSettings":{"name":"equalizerSettings","abstract":"

    @abstract Defines the list of supported channels (band) and their current/desired settings on HMI

    ","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"

    Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:moduleInfo:":{"name":"-initWithModuleName:moduleInfo:","abstract":"

    Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:":{"name":"-initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:","abstract":"

    Constructs a newly allocated SDLAudioControlCapabilities object with given parameters

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:moduleInfo:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:":{"name":"-initWithModuleName:moduleInfo:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:","abstract":"

    Constructs a newly allocated SDLAudioControlCapabilities object with given parameters

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    @abstract The short friendly name of the audio control module.","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)sourceAvailable":{"name":"sourceAvailable","abstract":"

    @abstract Availability of the control of audio source.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)keepContextAvailable":{"name":"keepContextAvailable","abstract":"

    Availability of the keepContext parameter.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)volumeAvailable":{"name":"volumeAvailable","abstract":"

    @abstract Availability of the control of audio volume.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerAvailable":{"name":"equalizerAvailable","abstract":"

    @abstract Availability of the control of Equalizer Settings.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerMaxChannelId":{"name":"equalizerMaxChannelId","abstract":"

    @abstract Must be included if equalizerAvailable=true,","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)isTemplate":{"name":"isTemplate","abstract":"

    Describes whether or not the image is a template that can be (re)colored by the SDL HMI. To make the artwork a template, set the UIImages rendering mode to UIImageRenderingModeAlwaysTemplate. In order for templates to work successfully, the icon must be one solid color with a clear background. The artwork should be created using the PNG image format.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)imageRPC":{"name":"imageRPC","abstract":"

    The Image RPC representing this artwork. Generally for use internally, you should instead pass an artwork to a Screen Manager method.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:name:asImageFormat:":{"name":"+artworkWithImage:name:asImageFormat:","abstract":"

    Convenience helper to create an ephemeral artwork from an image.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:asImageFormat:":{"name":"+artworkWithImage:asImageFormat:","abstract":"

    Convenience helper to create an ephemeral artwork from an image. A unique name will be assigned to the image. This name is a string representation of the image’s data which is created by hashing the data using the MD5 algorithm.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithStaticIcon:":{"name":"+artworkWithStaticIcon:","abstract":"

    Create an SDLArtwork that represents a static icon. This can only be passed to the screen manager; passing this directly to the file manager will fail.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:name:asImageFormat:":{"name":"+persistentArtworkWithImage:name:asImageFormat:","abstract":"

    Convenience helper to create a persistent artwork from an image.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:asImageFormat:":{"name":"+persistentArtworkWithImage:asImageFormat:","abstract":"

    Convenience helper to create a persistent artwork from an image. A unique name will be assigned to the image. This name is a string representation of the image’s data which is created by hashing the data using the MD5 algorithm.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:name:persistent:asImageFormat:":{"name":"-initWithImage:name:persistent:asImageFormat:","abstract":"

    Create a file for transmission to the remote system from a UIImage.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:persistent:asImageFormat:":{"name":"-initWithImage:persistent:asImageFormat:","abstract":"

    Create a file for transmission to the remote system from a UIImage. A unique name will be assigned to the image. This name is a string representation of the image’s data which is created by hashing the data using the MD5 algorithm.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithStaticIcon:":{"name":"-initWithStaticIcon:","abstract":"

    Create an SDLArtwork that represents a static icon. This can only be passed to the screen manager; passing this directly to the file manager will fail.

    ","parent_name":"SDLArtwork"},"Classes/SDLAppServicesCapabilities.html#/c:objc(cs)SDLAppServicesCapabilities(im)initWithAppServices:":{"name":"-initWithAppServices:","abstract":"

    Convenience init.

    ","parent_name":"SDLAppServicesCapabilities"},"Classes/SDLAppServicesCapabilities.html#/c:objc(cs)SDLAppServicesCapabilities(py)appServices":{"name":"appServices","abstract":"

    An array of currently available services. If this is an update to the capability the affected services will include an update reason in that item.

    ","parent_name":"SDLAppServicesCapabilities"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(im)initWithServiceID:serviceManifest:servicePublished:serviceActive:":{"name":"-initWithServiceID:serviceManifest:servicePublished:serviceActive:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceID":{"name":"serviceID","abstract":"

    A unique ID tied to this specific service record. The ID is supplied by the module that services publish themselves.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceManifest":{"name":"serviceManifest","abstract":"

    Manifest for the service that this record is for.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)servicePublished":{"name":"servicePublished","abstract":"

    If true, the service is published and available. If false, the service has likely just been unpublished, and should be considered unavailable.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceActive":{"name":"serviceActive","abstract":"

    If true, the service is the active primary service of the supplied service type. It will receive all potential RPCs that are passed through to that service type. If false, it is not the primary service of the supplied type. See servicePublished for its availability.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithAppServiceType:":{"name":"-initWithAppServiceType:","abstract":"

    Convenience init for serviceType.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithMediaServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:":{"name":"-initWithMediaServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:","abstract":"

    Convenience init for a media service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithMediaServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:":{"name":"-initWithMediaServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:","abstract":"

    Convenience init for a media service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithWeatherServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:weatherServiceManifest:":{"name":"-initWithWeatherServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:weatherServiceManifest:","abstract":"

    Convenience init for a weather service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithWeatherServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:weatherServiceManifest:":{"name":"-initWithWeatherServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:weatherServiceManifest:","abstract":"

    Convenience init for a weather service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithNavigationServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:navigationServiceManifest:":{"name":"-initWithNavigationServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:navigationServiceManifest:","abstract":"

    Convenience init for a navigation service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithNavigationServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:navigationServiceManifest:":{"name":"-initWithNavigationServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:navigationServiceManifest:","abstract":"

    Convenience init for a navigation service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithServiceName:serviceType:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:":{"name":"-initWithServiceName:serviceType:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithServiceName:serviceType:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:":{"name":"-initWithServiceName:serviceType:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceName":{"name":"serviceName","abstract":"

    Unique name of this service.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceType":{"name":"serviceType","abstract":"

    The type of service that is to be offered by this app. See AppServiceType for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceIcon":{"name":"serviceIcon","abstract":"

    The file name of the icon to be associated with this service. Most likely the same as the appIcon.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)allowAppConsumers":{"name":"allowAppConsumers","abstract":"

    If true, app service consumers beyond the IVI system will be able to access this service. If false, only the IVI system will be able consume the service. If not provided, it is assumed to be false.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)rpcSpecVersion":{"name":"rpcSpecVersion","abstract":"

    This is the max RPC Spec version the app service understands. This is important during the RPC passthrough functionality. If not included, it is assumed the max version of the module is acceptable.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)maxRPCSpecVersion":{"name":"maxRPCSpecVersion","abstract":"

    This is the max RPC Spec version the app service understands. This is important during the RPC passthrough functionality. If not included, it is assumed the max version of the module is acceptable.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)handledRPCs":{"name":"handledRPCs","abstract":"

    This field contains the Function IDs for the RPCs that this service intends to handle correctly. This means the service will provide meaningful responses. See FunctionID for enum equivalent values. This parameter is an integer to allow for new function IDs to be used by apps on older versions of SDL Core.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)mediaServiceManifest":{"name":"mediaServiceManifest","abstract":"

    A media service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)weatherServiceManifest":{"name":"weatherServiceManifest","abstract":"

    A weather service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)navigationServiceManifest":{"name":"navigationServiceManifest","abstract":"

    A navigation service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithAppServiceType:serviceId:":{"name":"-initWithAppServiceType:serviceId:","abstract":"

    Convenience init for service type and service id.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithMediaServiceData:serviceId:":{"name":"-initWithMediaServiceData:serviceId:","abstract":"

    Convenience init for media service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithWeatherServiceData:serviceId:":{"name":"-initWithWeatherServiceData:serviceId:","abstract":"

    Convenience init for weather service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithNavigationServiceData:serviceId:":{"name":"-initWithNavigationServiceData:serviceId:","abstract":"

    Convenience init for navigation service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithAppServiceType:serviceId:mediaServiceData:weatherServiceData:navigationServiceData:":{"name":"-initWithAppServiceType:serviceId:mediaServiceData:weatherServiceData:navigationServiceData:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)serviceType":{"name":"serviceType","abstract":"

    The type of service that is to be offered by this app. See AppServiceType for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)serviceId":{"name":"serviceId","abstract":"

    A unique ID tied to this specific service record. The ID is supplied by the module that services publish themselves.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)mediaServiceData":{"name":"mediaServiceData","abstract":"

    The media service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)weatherServiceData":{"name":"weatherServiceData","abstract":"

    The weather service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)navigationServiceData":{"name":"navigationServiceData","abstract":"

    The navigation service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(im)initWithUpdatedAppServiceRecord:":{"name":"-initWithUpdatedAppServiceRecord:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(im)initWithUpdateReason:updatedAppServiceRecord:":{"name":"-initWithUpdateReason:updatedAppServiceRecord:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(py)updateReason":{"name":"updateReason","abstract":"

    Only included in OnSystemCapbilityUpdated. Update reason for this service record.

    ","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(py)updatedAppServiceRecord":{"name":"updatedAppServiceRecord","abstract":"

    Service record for a specific app service provider.

    ","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(cm)currentAppInfo":{"name":"+currentAppInfo","abstract":"

    Convenience init with no parameters

    ","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appDisplayName":{"name":"appDisplayName","abstract":"

    The name displayed for the mobile application on the mobile device (can differ from the app name set in the initial RAI request).

    ","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appBundleID":{"name":"appBundleID","abstract":"

    The AppBundleID of an iOS application or package name of the Android application. This supports App Launch strategies for each platform.

    ","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appVersion":{"name":"appVersion","abstract":"

    Represents the build version number of this particular mobile app.

    ","parent_name":"SDLAppInfo"},"Classes/SDLAlertResponse.html#/c:objc(cs)SDLAlertResponse(py)tryAgainTime":{"name":"tryAgainTime","abstract":"

    Amount of time (in seconds) that an app must wait before resending an alert.

    ","parent_name":"SDLAlertResponse"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTS:softButtons:":{"name":"-initWithTTS:softButtons:","abstract":"

    Convenience init to create an alert maneuver with required parameters

    ","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTSChunks:softButtons:":{"name":"-initWithTTSChunks:softButtons:","abstract":"

    Convenience init to create an alert maneuver with all parameters

    ","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)ttsChunks":{"name":"ttsChunks","abstract":"

    An array of text chunks.

    ","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)softButtons":{"name":"softButtons","abstract":"

    An arry of soft buttons. If omitted on supported displays, only the system defined “Close” SoftButton shall be displayed.

    ","parent_name":"SDLAlertManeuver"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText:softButtons:playTone:ttsChunks:alertIcon:cancelID:":{"name":"-initWithAlertText:softButtons:playTone:ttsChunks:alertIcon:cancelID:","abstract":"

    Convenience init for creating a modal view with text, buttons, and optional sound cues.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:playTone:":{"name":"-initWithTTSChunks:playTone:","abstract":"

    Convenience init for creating a sound-only alert.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:softButtons:playTone:ttsChunks:duration:progressIndicator:alertIcon:cancelID:":{"name":"-initWithAlertText1:alertText2:alertText3:softButtons:playTone:ttsChunks:duration:progressIndicator:alertIcon:cancelID:","abstract":"

    Convenience init for setting all alert parameters.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:duration:":{"name":"-initWithAlertText1:alertText2:duration:","abstract":"

    Convenience init for creating an alert with two lines of text and a timeout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:":{"name":"-initWithAlertText1:alertText2:alertText3:","abstract":"

    Convenience init for creating an alert with three lines of text.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:","abstract":"

    Convenience init for creating an alert with three lines of text and a timeout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:softButtons:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:softButtons:","abstract":"

    Convenience init for creating an alert with three lines of text and a timeout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:playTone:":{"name":"-initWithTTS:playTone:","abstract":"

    Convenience init for creating a speech-only alert.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:playTone:duration:","abstract":"

    Convenience init for creating an alert with two lines of text, optional sound cues, and a timout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:alertText3:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:alertText3:playTone:duration:","abstract":"

    Convenience init for creating an alert with three lines of text, optional sound cues, and a timout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:alertText1:alertText2:alertText3:playTone:softButtons:":{"name":"-initWithTTSChunks:alertText1:alertText2:alertText3:playTone:softButtons:","abstract":"

    Convenience init for creating an alert with three lines of text, soft buttons, and optional sound cues.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:alertText1:alertText2:alertText3:playTone:duration:softButtons:":{"name":"-initWithTTSChunks:alertText1:alertText2:alertText3:playTone:duration:softButtons:","abstract":"

    Convenience init for creating an alert with three lines of text, soft buttons, optional sound cues, and a timout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText1":{"name":"alertText1","abstract":"

    The first line of the alert text field.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText2":{"name":"alertText2","abstract":"

    The second line of the alert text field.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText3":{"name":"alertText3","abstract":"

    The optional third line of the alert text field.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)ttsChunks":{"name":"ttsChunks","abstract":"

    An array of text chunks to be spoken or a prerecorded sound file.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)duration":{"name":"duration","abstract":"

    The duration of the displayed portion of the alert, in milliseconds. Typical timeouts are 3 - 5 seconds. If omitted, the timeout is set to a default of 5 seconds.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)playTone":{"name":"playTone","abstract":"

    Whether the alert tone should be played before the TTS (if any) is spoken. If omitted or set to false, no tone is played.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)progressIndicator":{"name":"progressIndicator","abstract":"

    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.).

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)softButtons":{"name":"softButtons","abstract":"

    Buttons for the displayed alert. If omitted on supported displays, the displayed alert shall not have any buttons.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)cancelID":{"name":"cancelID","abstract":"

    An ID for this specific alert to allow cancellation through the CancelInteraction RPC.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertIcon":{"name":"alertIcon","abstract":"

    Image to be displayed in the alert. If omitted on supported displays, no (or the default if applicable) icon should be displayed.

    ","parent_name":"SDLAlert"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverAirbagDeployed":{"name":"driverAirbagDeployed","abstract":"

    References signal “VedsDrvBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverSideAirbagDeployed":{"name":"driverSideAirbagDeployed","abstract":"

    References signal “VedsDrvSideBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverCurtainAirbagDeployed":{"name":"driverCurtainAirbagDeployed","abstract":"

    References signal “VedsDrvCrtnBag_D_Ltchd”. See VehicleDataEventStatus

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerAirbagDeployed":{"name":"passengerAirbagDeployed","abstract":"

    References signal “VedsPasBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerCurtainAirbagDeployed":{"name":"passengerCurtainAirbagDeployed","abstract":"

    References signal “VedsPasCrtnBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverKneeAirbagDeployed":{"name":"driverKneeAirbagDeployed","abstract":"

    References signal “VedsKneeDrvBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerSideAirbagDeployed":{"name":"passengerSideAirbagDeployed","abstract":"

    References signal “VedsPasSideBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerKneeAirbagDeployed":{"name":"passengerKneeAirbagDeployed","abstract":"

    References signal “VedsKneePasBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:":{"name":"-initWithId:menuName:","abstract":"

    Convenience init for creating an add submenu

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:position:":{"name":"-initWithId:menuName:position:","abstract":"

    Convenience init for creating an add submenu

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuIcon:position:":{"name":"-initWithId:menuName:menuIcon:position:","abstract":"

    Convenience init for creating an add submenu

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuLayout:menuIcon:position:":{"name":"-initWithId:menuName:menuLayout:menuIcon:position:","abstract":"

    Convenience init for creating an add submenu with all properties.

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuID":{"name":"menuID","abstract":"

    a Menu ID that identifies a sub menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)position":{"name":"position","abstract":"

    a position of menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuName":{"name":"menuName","abstract":"

    a menuName which is displayed representing this submenu item","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuIcon":{"name":"menuIcon","abstract":"

    An image that is displayed alongside this submenu item

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuLayout":{"name":"menuLayout","abstract":"

    The sub-menu layout. See available menu layouts on SDLWindowCapability.menuLayoutsAvailable. Defaults to LIST.

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"

    Constructs a SDLAddCommand with a handler callback when an event occurs.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:handler:":{"name":"-initWithId:vrCommands:handler:","abstract":"

    Convenience init for creating a voice command menu item.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:handler:":{"name":"-initWithId:vrCommands:menuName:handler:","abstract":"

    Convenience init for creating a menu item with text.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:","abstract":"

    Convenience init for creating a menu item with text and a custom icon.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:","abstract":"

    Convenience init for creating a menu item with text and a custom icon.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:icon:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:icon:handler:","abstract":"

    Convenience init for creating a menu item with text and a custom icon.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler":{"name":"handler","abstract":"

    A handler that will let you know when the button you created is subscribed.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdID":{"name":"cmdID","abstract":"

    A unique id that identifies the command.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)menuParams":{"name":"menuParams","abstract":"

    A SDLMenuParams pointer which defines the command and how it is added to the command menu.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands":{"name":"vrCommands","abstract":"

    An array of strings to be used as VR synonyms for this command.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdIcon":{"name":"cmdIcon","abstract":"

    Image struct containing a static or dynamic icon.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html":{"name":"SDLAddCommand","abstract":"

    This class will add a command to the application’s Command Menu

    "},"Classes.html#/c:objc(cs)SDLAddCommandResponse":{"name":"SDLAddCommandResponse","abstract":"

    Response to SDLAddCommand

    "},"Classes/SDLAddSubMenu.html":{"name":"SDLAddSubMenu","abstract":"

    Add a SDLSubMenu to the Command Menu"},"Classes.html#/c:objc(cs)SDLAddSubMenuResponse":{"name":"SDLAddSubMenuResponse","abstract":"

    Response to SDLAddSubMenu

    "},"Classes/SDLAirbagStatus.html":{"name":"SDLAirbagStatus","abstract":"

    A vehicle data status struct for airbags

    "},"Classes/SDLAlert.html":{"name":"SDLAlert","abstract":"

    Shows an alert which typically consists of text-to-speech message and text on the display. Either alertText1, alertText2 or TTSChunks needs to be set or the request will be rejected.

    "},"Classes/SDLAlertManeuver.html":{"name":"SDLAlertManeuver","abstract":"

    Shows a SDLShowConstantTBT message with an optional voice command. This message is shown as an overlay over the display’s base screen.

    "},"Classes.html#/c:objc(cs)SDLAlertManeuverResponse":{"name":"SDLAlertManeuverResponse","abstract":"

    Response to SDLAlertManeuver

    "},"Classes/SDLAlertResponse.html":{"name":"SDLAlertResponse","abstract":"

    Response to SDLAlert

    "},"Classes/SDLAppInfo.html":{"name":"SDLAppInfo","abstract":"

    A struct used in register app interface. Contains detailed information about the registered application.

    "},"Classes/SDLAppServiceCapability.html":{"name":"SDLAppServiceCapability","abstract":"

    A currently available service.

    "},"Classes/SDLAppServiceData.html":{"name":"SDLAppServiceData","abstract":"

    Contains all the current data of the app service. The serviceType will link to which of the service data objects are included in this object (e.g. if the service type is MEDIA, the mediaServiceData param should be included).

    "},"Classes/SDLAppServiceManifest.html":{"name":"SDLAppServiceManifest","abstract":"

    This manifest contains all the information necessary for the service to be published, activated, and allow consumers to interact with it

    "},"Classes/SDLAppServiceRecord.html":{"name":"SDLAppServiceRecord","abstract":"

    This is the record of an app service publisher that the module has. It should contain the most up to date information including the service’s active state.

    "},"Classes/SDLAppServicesCapabilities.html":{"name":"SDLAppServicesCapabilities","abstract":"

    Capabilities of app services including what service types are supported and the current state of services.

    "},"Classes/SDLArtwork.html":{"name":"SDLArtwork","abstract":"

    An SDLFile subclass specifically designed for images

    "},"Classes/SDLAudioControlCapabilities.html":{"name":"SDLAudioControlCapabilities","abstract":"

    Describes a head unit’s audio control capabilities.

    "},"Classes/SDLAudioControlData.html":{"name":"SDLAudioControlData","abstract":"

    The audio control data information.

    "},"Classes/SDLAudioFile.html":{"name":"SDLAudioFile","abstract":"

    Includes inforamtion about a given audio file

    "},"Classes/SDLAudioPassThruCapabilities.html":{"name":"SDLAudioPassThruCapabilities","abstract":"

    Describes different audio type configurations for SDLPerformAudioPassThru, e.g. {8kHz,8-bit,PCM}

    "},"Classes/SDLAudioStreamManager.html":{"name":"SDLAudioStreamManager","abstract":"

    The manager to control the audio stream

    "},"Classes/SDLBeltStatus.html":{"name":"SDLBeltStatus","abstract":"

    Vehicle data struct for the seat belt status

    "},"Classes/SDLBodyInformation.html":{"name":"SDLBodyInformation","abstract":"

    The body information including power modes.

    "},"Classes/SDLButtonCapabilities.html":{"name":"SDLButtonCapabilities","abstract":"

    Provides information about the capabilities of a SDL HMI button.

    "},"Classes/SDLButtonPress.html":{"name":"SDLButtonPress","abstract":"

    This RPC allows a remote control type mobile application to simulate a hardware button press event.

    "},"Classes.html#/c:objc(cs)SDLButtonPressResponse":{"name":"SDLButtonPressResponse","abstract":"

    Response to SDLButtonPress

    "},"Classes/SDLCancelInteraction.html":{"name":"SDLCancelInteraction","abstract":"

    Used to dismiss a modal view programmatically without needing to wait for the timeout to complete. Can be used to dismiss alerts, scrollable messages, sliders, and perform interactions (i.e. pop-up menus).

    "},"Classes.html#/c:objc(cs)SDLCancelInteractionResponse":{"name":"SDLCancelInteractionResponse","abstract":"

    Response to the request to dismiss a modal view. If no applicable request can be dismissed, the resultCode will be IGNORED.

    "},"Classes/SDLCarWindowViewController.html":{"name":"SDLCarWindowViewController","abstract":"

    Note that if this is embedded in a UINavigationController and UITabBarController, it will not lock orientation. You must lock your container controller to a specific orientation.

    "},"Classes/SDLChangeRegistration.html":{"name":"SDLChangeRegistration","abstract":"

    If the app recognizes during the app registration that the SDL HMI language (voice/TTS and/or display) does not match the app language, the app will be able (but does not need) to change this registration with changeRegistration prior to app being brought into focus.

    "},"Classes.html#/c:objc(cs)SDLChangeRegistrationResponse":{"name":"SDLChangeRegistrationResponse","abstract":"

    Response to SDLChangeRegistrations

    "},"Classes/SDLChoice.html":{"name":"SDLChoice","abstract":"

    A choice is an option which a user can select either via the menu or via voice recognition (VR) during an application initiated interaction.

    "},"Classes/SDLChoiceCell.html":{"name":"SDLChoiceCell","abstract":"

    A selectable item within an SDLChoiceSet

    "},"Classes/SDLChoiceSet.html":{"name":"SDLChoiceSet","abstract":"

    The choice set to be displayed to the user. Contains a list of selectable options.

    "},"Classes/SDLClimateControlCapabilities.html":{"name":"SDLClimateControlCapabilities","abstract":"

    Contains information about a climate control module’s capabilities.

    "},"Classes/SDLClimateControlData.html":{"name":"SDLClimateControlData","abstract":"

    The current information for the Climate Remote Control Module

    "},"Classes.html#/c:objc(cs)SDLCloseApplication":{"name":"SDLCloseApplication","abstract":"

    Used by an app to set itself to a HMILevel of NONE. The app will close but will still be registered. If the app is a navigation app it will no longer be used as the preferred mobile-navigation application by the module.

    "},"Classes.html#/c:objc(cs)SDLCloseApplicationResponse":{"name":"SDLCloseApplicationResponse","abstract":"

    Response to the request to close this app on the module.

    "},"Classes/SDLCloudAppProperties.html":{"name":"SDLCloudAppProperties","abstract":"

    The cloud application properties.

    "},"Classes/SDLClusterModeStatus.html":{"name":"SDLClusterModeStatus","abstract":"

    A vehicle data struct for the cluster mode and power status

    "},"Classes/SDLConfiguration.html":{"name":"SDLConfiguration","abstract":"

    Contains information about the app’s configurtion, such as lifecycle, lockscreen, encryption, etc.

    "},"Classes/SDLCreateInteractionChoiceSet.html":{"name":"SDLCreateInteractionChoiceSet","abstract":"

    Creates a Choice Set which can be used in subsequent SDLPerformInteraction Operations.

    "},"Classes.html#/c:objc(cs)SDLCreateInteractionChoiceSetResponse":{"name":"SDLCreateInteractionChoiceSetResponse","abstract":"

    Response to SDLCreateInteractionChoiceSet has been called

    "},"Classes/SDLCreateWindow.html":{"name":"SDLCreateWindow","abstract":"

    Create a new window on the display with the specified window type."},"Classes.html#/c:objc(cs)SDLCreateWindowResponse":{"name":"SDLCreateWindowResponse","abstract":"

    Response to SDLCreateWindow

    "},"Classes/SDLDIDResult.html":{"name":"SDLDIDResult","abstract":"

    A vehicle data struct

    "},"Classes/SDLDateTime.html":{"name":"SDLDateTime","abstract":"

    A struct referenced in SendLocation for an absolute date

    "},"Classes/SDLDeleteCommand.html":{"name":"SDLDeleteCommand","abstract":"

    Removes a command from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteCommandResponse":{"name":"SDLDeleteCommandResponse","abstract":"

    Response to SDLDeleteCommand

    "},"Classes/SDLDeleteFile.html":{"name":"SDLDeleteFile","abstract":"

    Used to delete a file resident on the SDL module in the app’s local cache."},"Classes/SDLDeleteFileResponse.html":{"name":"SDLDeleteFileResponse","abstract":"

    Response to SDLDeleteFile

    "},"Classes/SDLDeleteInteractionChoiceSet.html":{"name":"SDLDeleteInteractionChoiceSet","abstract":"

    Deletes an existing Choice Set identified by the parameter"},"Classes.html#/c:objc(cs)SDLDeleteInteractionChoiceSetResponse":{"name":"SDLDeleteInteractionChoiceSetResponse","abstract":"

    SDLDeleteInteractionChoiceSetResponse is sent, when SDLDeleteInteractionChoiceSet has been called

    "},"Classes/SDLDeleteSubMenu.html":{"name":"SDLDeleteSubMenu","abstract":"

    Deletes a submenu from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteSubMenuResponse":{"name":"SDLDeleteSubMenuResponse","abstract":"

    Response to SDLDeleteSubMenu

    "},"Classes/SDLDeleteWindow.html":{"name":"SDLDeleteWindow","abstract":"

    Deletes previously created window of the SDL application.

    "},"Classes.html#/c:objc(cs)SDLDeleteWindowResponse":{"name":"SDLDeleteWindowResponse","abstract":"

    Response to DeleteWindow

    "},"Classes/SDLDeviceInfo.html":{"name":"SDLDeviceInfo","abstract":"

    Various information about connecting device. Referenced in RegisterAppInterface

    "},"Classes/SDLDeviceStatus.html":{"name":"SDLDeviceStatus","abstract":"

    Describes the status related to a connected mobile device or SDL and if or how it is represented in the vehicle.

    "},"Classes/SDLDiagnosticMessage.html":{"name":"SDLDiagnosticMessage","abstract":"

    Non periodic vehicle diagnostic request

    "},"Classes/SDLDiagnosticMessageResponse.html":{"name":"SDLDiagnosticMessageResponse","abstract":"

    Response to SDLDiagnosticMessage

    "},"Classes/SDLDialNumber.html":{"name":"SDLDialNumber","abstract":"

    This RPC is used to tell the head unit to use bluetooth to dial a phone number using the phone.

    "},"Classes.html#/c:objc(cs)SDLDialNumberResponse":{"name":"SDLDialNumberResponse","abstract":"

    The response to SDLDialNumber

    "},"Classes/SDLDisplayCapabilities.html":{"name":"SDLDisplayCapabilities","abstract":"

    Contains information about the display for the SDL system to which the application is currently connected.

    "},"Classes/SDLDisplayCapability.html":{"name":"SDLDisplayCapability","abstract":"

    Contain the display related information and all windows related to that display.

    "},"Classes/SDLECallInfo.html":{"name":"SDLECallInfo","abstract":"

    A vehicle data struct for emergency call information

    "},"Classes/SDLEmergencyEvent.html":{"name":"SDLEmergencyEvent","abstract":"

    A vehicle data struct for an emergency event

    "},"Classes/SDLEncodedSyncPData.html":{"name":"SDLEncodedSyncPData","abstract":"

    Allows encoded data in the form of SyncP packets to be sent to the SYNC module. Legacy / v1 Protocol implementation; use SyncPData instead.

    "},"Classes.html#/c:objc(cs)SDLEncodedSyncPDataResponse":{"name":"SDLEncodedSyncPDataResponse","abstract":"

    The response to SDLEncodedSyncPData

    "},"Classes/SDLEncryptionConfiguration.html":{"name":"SDLEncryptionConfiguration","abstract":"

    The encryption configuration data

    "},"Classes.html#/c:objc(cs)SDLEndAudioPassThru":{"name":"SDLEndAudioPassThru","abstract":"

    When this request is invoked, the audio capture stops

    "},"Classes.html#/c:objc(cs)SDLEndAudioPassThruResponse":{"name":"SDLEndAudioPassThruResponse","abstract":"

    Response to SDLEndAudioPassThru

    "},"Classes/SDLEqualizerSettings.html":{"name":"SDLEqualizerSettings","abstract":"

    Defines the each Equalizer channel settings.

    "},"Classes/SDLFile.html":{"name":"SDLFile","abstract":"

    Crates an SDLFile from a file

    "},"Classes/SDLFileManager.html":{"name":"SDLFileManager","abstract":"

    The SDLFileManager is an RPC manager for the remote file system. After it starts, it will attempt to communicate with the remote file system to get the names of all files. Deleting and Uploading will them queue these changes as transactions. If a delete succeeds, the local list of remote files will remove that file name, and likewise, if an upload succeeds, the local list of remote files will now include that file name.

    "},"Classes/SDLFileManagerConfiguration.html":{"name":"SDLFileManagerConfiguration","abstract":"

    File manager configuration information

    "},"Classes/SDLFuelRange.html":{"name":"SDLFuelRange","abstract":"

    Describes the distance a vehicle can travel with the current level of fuel.

    "},"Classes/SDLFunctionID.html":{"name":"SDLFunctionID","abstract":"

    A function ID for an SDL RPC

    "},"Classes/SDLGPSData.html":{"name":"SDLGPSData","abstract":"

    Describes the GPS data. Not all data will be available on all carlines.

    "},"Classes.html#/c:objc(cs)SDLGenericResponse":{"name":"SDLGenericResponse","abstract":"

    Generic Response is sent when the name of a received request is unknown. It is only used in case of an error. It will have an INVALID_DATA result code.

    "},"Classes/SDLGetAppServiceData.html":{"name":"SDLGetAppServiceData","abstract":"

    This request asks the module for current data related to the specific service. It also includes an option to subscribe to that service for future updates.

    "},"Classes/SDLGetAppServiceDataResponse.html":{"name":"SDLGetAppServiceDataResponse","abstract":"

    This response includes the data that was requested from the specific service.

    "},"Classes/SDLGetCloudAppProperties.html":{"name":"SDLGetCloudAppProperties","abstract":"

    RPC used to get the current properties of a cloud application.

    "},"Classes/SDLGetCloudAppPropertiesResponse.html":{"name":"SDLGetCloudAppPropertiesResponse","abstract":"

    The response to GetCloudAppProperties

    "},"Classes/SDLGetDTCs.html":{"name":"SDLGetDTCs","abstract":"

    This RPC allows to request diagnostic module trouble codes from a certain"},"Classes/SDLGetDTCsResponse.html":{"name":"SDLGetDTCsResponse","abstract":"

    Response to SDLGetDTCs

    "},"Classes/SDLGetFile.html":{"name":"SDLGetFile","abstract":"

    This request is sent to the module to retrieve a file.

    "},"Classes/SDLGetFileResponse.html":{"name":"SDLGetFileResponse","abstract":"

    Response to GetFiles

    "},"Classes/SDLGetInteriorVehicleData.html":{"name":"SDLGetInteriorVehicleData","abstract":"

    Reads the current status value of specified remote control module (type)."},"Classes/SDLGetInteriorVehicleDataConsent.html":{"name":"SDLGetInteriorVehicleDataConsent","abstract":"

    This RPC allows you to get consent to control a certian module

    "},"Classes/SDLGetInteriorVehicleDataConsentResponse.html":{"name":"SDLGetInteriorVehicleDataConsentResponse","abstract":"

    Response to GetInteriorVehicleDataConsent

    "},"Classes/SDLGetInteriorVehicleDataResponse.html":{"name":"SDLGetInteriorVehicleDataResponse","abstract":"

    A response to SDLGetInteriorVehicleData

    "},"Classes/SDLGetSystemCapability.html":{"name":"SDLGetSystemCapability","abstract":"

    SDL RPC Request for expanded information about a supported system/HMI capability

    "},"Classes/SDLGetSystemCapabilityResponse.html":{"name":"SDLGetSystemCapabilityResponse","abstract":"

    Response to SDLGetSystemCapability

    "},"Classes/SDLGetVehicleData.html":{"name":"SDLGetVehicleData","abstract":"

    Requests current values of specific published vehicle data items.

    "},"Classes/SDLGetVehicleDataResponse.html":{"name":"SDLGetVehicleDataResponse","abstract":"

    Response to SDLGetVehicleData

    "},"Classes/SDLGetWayPoints.html":{"name":"SDLGetWayPoints","abstract":"

    This RPC allows you to get navigation waypoint data

    "},"Classes/SDLGetWayPointsResponse.html":{"name":"SDLGetWayPointsResponse","abstract":"

    Response to SDLGetWayPoints

    "},"Classes/SDLGrid.html":{"name":"SDLGrid","abstract":"

    Describes a location (origin coordinates and span) of a vehicle component.

    "},"Classes/SDLHMICapabilities.html":{"name":"SDLHMICapabilities","abstract":"

    Contains information about the HMI capabilities.

    "},"Classes/SDLHMIPermissions.html":{"name":"SDLHMIPermissions","abstract":"

    Defining sets of HMI levels, which are permitted or prohibited for a given RPC.

    "},"Classes/SDLHMISettingsControlCapabilities.html":{"name":"SDLHMISettingsControlCapabilities","abstract":"

    HMI data struct for HMI control settings

    "},"Classes/SDLHMISettingsControlData.html":{"name":"SDLHMISettingsControlData","abstract":"

    Corresponds to “HMI_SETTINGS” ModuleType

    "},"Classes/SDLHapticRect.html":{"name":"SDLHapticRect","abstract":"

    Defines spatial for each user control object for video streaming application

    "},"Classes/SDLHeadLampStatus.html":{"name":"SDLHeadLampStatus","abstract":"

    Vehicle data struct for status of head lamps

    "},"Classes/SDLImage.html":{"name":"SDLImage","abstract":"

    Specifies which image shall be used e.g. in SDLAlerts or on SDLSoftbuttons provided the display supports it.

    "},"Classes/SDLImageField.html":{"name":"SDLImageField","abstract":"

    A struct used in DisplayCapabilities describing the capability of an image field

    "},"Classes/SDLImageResolution.html":{"name":"SDLImageResolution","abstract":"

    The resolution of an image

    "},"Classes/SDLKeyboardProperties.html":{"name":"SDLKeyboardProperties","abstract":"

    Configuration of on-screen keyboard (if available)

    "},"Classes/SDLLifecycleConfiguration.html":{"name":"SDLLifecycleConfiguration","abstract":"

    Configuration options for SDLManager

    "},"Classes/SDLLifecycleConfigurationUpdate.html":{"name":"SDLLifecycleConfigurationUpdate","abstract":"

    Configuration update options for SDLManager. This class can be used to update the lifecycle configuration in"},"Classes/SDLLightCapabilities.html":{"name":"SDLLightCapabilities","abstract":"

    Current Light capabilities.

    "},"Classes/SDLLightControlCapabilities.html":{"name":"SDLLightControlCapabilities","abstract":"

    Current light control capabilities.

    "},"Classes/SDLLightControlData.html":{"name":"SDLLightControlData","abstract":"

    Data about the current light controls

    "},"Classes/SDLLightState.html":{"name":"SDLLightState","abstract":"

    Current light control state

    "},"Classes.html#/c:objc(cs)SDLListFiles":{"name":"SDLListFiles","abstract":"

    Requests the current list of resident filenames for the registered app. Not"},"Classes/SDLListFilesResponse.html":{"name":"SDLListFilesResponse","abstract":"

    Response to SDLListFiles

    "},"Classes/SDLLocationCoordinate.html":{"name":"SDLLocationCoordinate","abstract":"

    Describes a coordinate on earth

    "},"Classes/SDLLocationDetails.html":{"name":"SDLLocationDetails","abstract":"

    Describes a location, including its coordinate, name, etc. Used in WayPoints.

    "},"Classes/SDLLockScreenConfiguration.html":{"name":"SDLLockScreenConfiguration","abstract":"

    A configuration describing how the lock screen should be used by the internal SDL system for your application. This configuration is provided before SDL starts and will govern the entire SDL lifecycle of your application.

    "},"Classes/SDLLockScreenViewController.html":{"name":"SDLLockScreenViewController","abstract":"

    The view controller for the lockscreen.

    "},"Classes/SDLLogConfiguration.html":{"name":"SDLLogConfiguration","abstract":"

    Information about the current logging configuration

    "},"Classes/SDLLogFileModule.html":{"name":"SDLLogFileModule","abstract":"

    A log file module is a collection of source code files that form a cohesive unit and that logs can all use to describe themselves. E.g. a “transport” module, or a “Screen Manager” module.

    "},"Classes/SDLLogFilter.html":{"name":"SDLLogFilter","abstract":"

    Represents a filter over which SDL logs should be logged

    "},"Classes/SDLLogManager.html":{"name":"SDLLogManager","abstract":"

    This is the central manager of logging. A developer should not have to interact with this class, it is exclusively used internally.

    "},"Classes.html#/c:objc(cs)SDLLogTargetAppleSystemLog":{"name":"SDLLogTargetAppleSystemLog","abstract":"

    The Apple System Log target is an iOS 2.0+ compatible log target that logs to both the Console and to the System Log.

    "},"Classes.html#/c:objc(cs)SDLLogTargetFile":{"name":"SDLLogTargetFile","abstract":"

    The File log will log to a text file on the iPhone in Documents/smartdevicelink/log/#appName##datetime##.log. It will log up to 3 logs which will rollover.

    "},"Classes.html#/c:objc(cs)SDLLogTargetOSLog":{"name":"SDLLogTargetOSLog","abstract":"

    OS_LOG is an iOS 10+ only logging system that logs to the Console and the Apple system console. This is an improved replacement for Apple SysLog (SDLLogTargetAppleSystemLog).

    "},"Classes/SDLManager.html":{"name":"SDLManager","abstract":"

    The top level manager object for all of SDL’s interactions with the app and the head unit

    "},"Classes/SDLMassageCushionFirmness.html":{"name":"SDLMassageCushionFirmness","abstract":"

    The intensity or firmness of a cushion.

    "},"Classes/SDLMassageModeData.html":{"name":"SDLMassageModeData","abstract":"

    Specify the mode of a massage zone.

    "},"Classes/SDLMediaServiceData.html":{"name":"SDLMediaServiceData","abstract":"

    This data is related to what a media service should provide.

    "},"Classes.html#/c:objc(cs)SDLMediaServiceManifest":{"name":"SDLMediaServiceManifest","abstract":"

    A media service manifest.

    "},"Classes/SDLMenuCell.html":{"name":"SDLMenuCell","abstract":"

    A menu cell item for the main menu or sub-menu.

    "},"Classes/SDLMenuConfiguration.html":{"name":"SDLMenuConfiguration","abstract":"

    Defines how the menu is configured

    "},"Classes/SDLMenuParams.html":{"name":"SDLMenuParams","abstract":"

    Used when adding a sub menu to an application menu or existing sub menu.

    "},"Classes/SDLMetadataTags.html":{"name":"SDLMetadataTags","abstract":"

    Metadata for Show fields

    "},"Classes/SDLModuleData.html":{"name":"SDLModuleData","abstract":"

    Describes a remote control module’s data

    "},"Classes/SDLModuleInfo.html":{"name":"SDLModuleInfo","abstract":"

    Contains information about a RC module.

    "},"Classes/SDLMsgVersion.html":{"name":"SDLMsgVersion","abstract":"

    Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.

    "},"Classes/SDLMyKey.html":{"name":"SDLMyKey","abstract":"

    Vehicle Data struct

    "},"Classes/SDLNavigationCapability.html":{"name":"SDLNavigationCapability","abstract":"

    Extended capabilities for an onboard navigation system

    "},"Classes/SDLNavigationInstruction.html":{"name":"SDLNavigationInstruction","abstract":"

    A navigation instruction.

    "},"Classes/SDLNavigationServiceData.html":{"name":"SDLNavigationServiceData","abstract":"

    This data is related to what a navigation service would provide.

    "},"Classes/SDLNavigationServiceManifest.html":{"name":"SDLNavigationServiceManifest","abstract":"

    A navigation service manifest.

    "},"Classes/SDLNotificationConstants.html":{"name":"SDLNotificationConstants","abstract":"

    This class defines methods for getting groups of notifications

    "},"Classes/SDLOasisAddress.html":{"name":"SDLOasisAddress","abstract":"

    Struct used in SendLocation describing an address

    "},"Classes/SDLOnAppInterfaceUnregistered.html":{"name":"SDLOnAppInterfaceUnregistered","abstract":"

    Notifies an application that its interface registration has been terminated. This means that all SDL resources associated with the application are discarded, including the Command Menu, Choice Sets, button subscriptions, etc.

    "},"Classes/SDLOnAppServiceData.html":{"name":"SDLOnAppServiceData","abstract":"

    This notification includes the data that is updated from the specific service.

    "},"Classes.html#/c:objc(cs)SDLOnAudioPassThru":{"name":"SDLOnAudioPassThru","abstract":"

    Binary data is in binary part of hybrid msg.

    "},"Classes/SDLOnButtonEvent.html":{"name":"SDLOnButtonEvent","abstract":"

    Notifies application that user has depressed or released a button to which"},"Classes/SDLOnButtonPress.html":{"name":"SDLOnButtonPress","abstract":"

    Notifies application of button press events for buttons to which the application is subscribed. SDL supports two button press events defined as follows:

    "},"Classes/SDLOnCommand.html":{"name":"SDLOnCommand","abstract":"

    This is called when a command was selected via VR after pressing the PTT button, or selected from the menu after pressing the MENU button.

    "},"Classes/SDLOnDriverDistraction.html":{"name":"SDLOnDriverDistraction","abstract":"

    Notifies the application of the current driver distraction state (whether driver distraction rules are in effect, or not).

    "},"Classes/SDLOnEncodedSyncPData.html":{"name":"SDLOnEncodedSyncPData","abstract":"

    Callback including encoded data of any SyncP packets that SYNC needs to send back to the mobile device. Legacy / v1 Protocol implementation; responds to EncodedSyncPData. *** DEPRECATED ***

    "},"Classes/SDLOnHMIStatus.html":{"name":"SDLOnHMIStatus"},"Classes/SDLOnHashChange.html":{"name":"SDLOnHashChange","abstract":"

    Notification containing an updated hashID which can be used over connection cycles (i.e. loss of connection, ignition cycles, etc.). Sent after initial registration and subsequently after any change in the calculated hash of all persisted app data.

    "},"Classes/SDLOnInteriorVehicleData.html":{"name":"SDLOnInteriorVehicleData","abstract":"

    Notifications when subscribed vehicle data changes.

    "},"Classes/SDLOnKeyboardInput.html":{"name":"SDLOnKeyboardInput","abstract":"

    Sent when a keyboard presented by a PerformInteraction has a keyboard input.

    "},"Classes/SDLOnLanguageChange.html":{"name":"SDLOnLanguageChange","abstract":"

    Provides information to what language the SDL HMI language was changed

    "},"Classes/SDLOnLockScreenStatus.html":{"name":"SDLOnLockScreenStatus","abstract":"

    To help prevent driver distraction, any SmartDeviceLink application is required to implement a lockscreen that must be enforced while the application is active on the system while the vehicle is in motion.

    "},"Classes/SDLOnPermissionsChange.html":{"name":"SDLOnPermissionsChange","abstract":"

    Provides update to app of which sets of functions are available

    "},"Classes/SDLOnRCStatus.html":{"name":"SDLOnRCStatus","abstract":"

    OnRCStatus notifications to all registered mobile applications and the HMI whenever"},"Classes/SDLOnSyncPData.html":{"name":"SDLOnSyncPData","abstract":"

    DEPRECATED

    "},"Classes/SDLOnSystemCapabilityUpdated.html":{"name":"SDLOnSystemCapabilityUpdated","abstract":"

    A notification to inform the connected device that a specific system capability has changed.

    "},"Classes/SDLOnSystemRequest.html":{"name":"SDLOnSystemRequest","abstract":"

    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)

    "},"Classes/SDLOnTBTClientState.html":{"name":"SDLOnTBTClientState","abstract":"

    Provides applications with notifications specific to the current TBT client status on the module

    "},"Classes/SDLOnTouchEvent.html":{"name":"SDLOnTouchEvent","abstract":"

    Notifies about touch events on the screen’s prescribed area during video streaming

    "},"Classes/SDLOnVehicleData.html":{"name":"SDLOnVehicleData","abstract":"

    Callback for the periodic and non periodic vehicle data read function.

    "},"Classes/SDLOnWayPointChange.html":{"name":"SDLOnWayPointChange","abstract":"

    Notification which provides the entire LocationDetails when there is a change to any waypoints or destination.

    "},"Classes/SDLParameterPermissions.html":{"name":"SDLParameterPermissions","abstract":"

    Defining sets of parameters, which are permitted or prohibited for a given RPC.

    "},"Classes/SDLPerformAppServiceInteraction.html":{"name":"SDLPerformAppServiceInteraction","abstract":"

    App service providers will likely have different actions exposed to the module and app service consumers. It will be difficult to standardize these actions by RPC versions and can easily become stale. Therefore, we introduce a best-effort attempt to take actions on a service.

    "},"Classes/SDLPerformAppServiceInteractionResponse.html":{"name":"SDLPerformAppServiceInteractionResponse","abstract":"

    Response to the request to request an app service.

    "},"Classes/SDLPerformAudioPassThru.html":{"name":"SDLPerformAudioPassThru","abstract":"

    This will open an audio pass thru session. By doing so the app can receive"},"Classes.html#/c:objc(cs)SDLPerformAudioPassThruResponse":{"name":"SDLPerformAudioPassThruResponse","abstract":"

    Response to SDLPerformAudioPassThru

    "},"Classes/SDLPerformInteraction.html":{"name":"SDLPerformInteraction","abstract":"

    Performs an application-initiated interaction in which the user can select a choice from the passed choice set.

    "},"Classes/SDLPerformInteractionResponse.html":{"name":"SDLPerformInteractionResponse","abstract":"

    PerformInteraction Response is sent, when SDLPerformInteraction has been called

    "},"Classes/SDLPermissionItem.html":{"name":"SDLPermissionItem","abstract":"

    Permissions for a given set of RPCs

    "},"Classes/SDLPermissionManager.html":{"name":"SDLPermissionManager","abstract":"

    The permission manager monitoring RPC permissions.

    "},"Classes/SDLPhoneCapability.html":{"name":"SDLPhoneCapability","abstract":"

    Extended capabilities of the module’s phone feature

    "},"Classes/SDLPinchGesture.html":{"name":"SDLPinchGesture","abstract":"

    Pinch Gesture information

    "},"Classes/SDLPresetBankCapabilities.html":{"name":"SDLPresetBankCapabilities","abstract":"

    Contains information about on-screen preset capabilities.

    "},"Classes/SDLPublishAppService.html":{"name":"SDLPublishAppService","abstract":"

    Registers a service offered by this app on the module."},"Classes/SDLPublishAppServiceResponse.html":{"name":"SDLPublishAppServiceResponse","abstract":"

    Response to the request to register a service offered by this app on the module.

    "},"Classes/SDLPutFile.html":{"name":"SDLPutFile","abstract":"

    Used to push a binary data onto the SDL module from a mobile device, such as icons and album art.

    "},"Classes/SDLPutFileResponse.html":{"name":"SDLPutFileResponse","abstract":"

    Response to SDLPutFile

    "},"Classes/SDLRDSData.html":{"name":"SDLRDSData","abstract":"

    Include the data defined in Radio Data System, which is a communications protocol standard for embedding small amounts of digital information in conventional FM radio broadcasts.

    "},"Classes/SDLRGBColor.html":{"name":"SDLRGBColor","abstract":"

    Represents an RGB color

    "},"Classes/SDLRPCMessage.html":{"name":"SDLRPCMessage","abstract":"

    Parent class of all RPC messages.

    "},"Classes.html#/c:objc(cs)SDLRPCNotification":{"name":"SDLRPCNotification","abstract":"

    An RPC sent from the head unit to the app about some data change, such as a button was pressed

    "},"Classes/SDLRPCNotificationNotification.html":{"name":"SDLRPCNotificationNotification","abstract":"

    An NSNotification object that makes retrieving internal SDLRPCNotification data easier

    "},"Classes/SDLRPCRequest.html":{"name":"SDLRPCRequest","abstract":"

    Superclass of RPC requests

    "},"Classes/SDLRPCRequestNotification.html":{"name":"SDLRPCRequestNotification","abstract":"

    A NSNotification object that makes retrieving internal SDLRPCRequest data easier

    "},"Classes/SDLRPCResponse.html":{"name":"SDLRPCResponse","abstract":"

    Superclass of RPC responses

    "},"Classes/SDLRPCResponseNotification.html":{"name":"SDLRPCResponseNotification","abstract":"

    A NSNotification object that makes retrieving internal SDLRPCResponse data easier

    "},"Classes/SDLRPCStruct.html":{"name":"SDLRPCStruct","abstract":"

    Superclass of all RPC-related structs and messages

    "},"Classes/SDLRadioControlCapabilities.html":{"name":"SDLRadioControlCapabilities","abstract":"

    Contains information about a radio control module’s capabilities.

    "},"Classes/SDLRadioControlData.html":{"name":"SDLRadioControlData","abstract":"

    Include information (both read-only and changeable data) about a remote control radio module.

    "},"Classes/SDLReadDID.html":{"name":"SDLReadDID","abstract":"

    Non periodic vehicle data read request. This is an RPC to get diagnostics"},"Classes/SDLReadDIDResponse.html":{"name":"SDLReadDIDResponse","abstract":"

    A response to ReadDID

    "},"Classes/SDLRectangle.html":{"name":"SDLRectangle","abstract":"

    A struct describing a rectangle

    "},"Classes/SDLRegisterAppInterface.html":{"name":"SDLRegisterAppInterface","abstract":"

    Registers the application’s interface with SDL. The RegisterAppInterface RPC declares the properties of the app, including the messaging interface version, the app name, etc. The mobile application must establish its interface registration with SDL before any other interaction with SDL can take place. The registration lasts until it is terminated either by the application calling the SDLUnregisterAppInterface method, or by SDL sending an SDLOnAppInterfaceUnregistered notification, or by loss of the underlying transport connection, or closing of the underlying message transmission protocol RPC session.

    "},"Classes/SDLRegisterAppInterfaceResponse.html":{"name":"SDLRegisterAppInterfaceResponse","abstract":"

    Response to SDLRegisterAppInterface

    "},"Classes/SDLReleaseInteriorVehicleDataModule.html":{"name":"SDLReleaseInteriorVehicleDataModule","abstract":"

    Releases a controlled remote control module so others can take control

    "},"Classes.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModuleResponse":{"name":"SDLReleaseInteriorVehicleDataModuleResponse","abstract":"

    Response to ReleaseInteriorVehicleDataModule

    "},"Classes/SDLRemoteControlCapabilities.html":{"name":"SDLRemoteControlCapabilities","abstract":"

    Capabilities of the remote control feature

    "},"Classes/SDLResetGlobalProperties.html":{"name":"SDLResetGlobalProperties","abstract":"

    Resets the passed global properties to their default values as defined by"},"Classes.html#/c:objc(cs)SDLResetGlobalPropertiesResponse":{"name":"SDLResetGlobalPropertiesResponse","abstract":"

    Response to ResetGlobalProperties

    "},"Classes/SDLSISData.html":{"name":"SDLSISData","abstract":"

    HD radio Station Information Service (SIS) data.

    "},"Classes/SDLScreenManager.html":{"name":"SDLScreenManager","abstract":"

    The SDLScreenManager is a manager to control SDL UI features. Use the screen manager for setting up the UI of the template, creating a menu for your users, creating softbuttons, setting textfields, etc..

    "},"Classes/SDLScreenParams.html":{"name":"SDLScreenParams","abstract":"

    A struct in DisplayCapabilities describing parameters related to a video / touch input area

    "},"Classes/SDLScrollableMessage.html":{"name":"SDLScrollableMessage","abstract":"

    Creates a full screen overlay containing a large block of formatted text that can be scrolled with buttons available.

    "},"Classes.html#/c:objc(cs)SDLScrollableMessageResponse":{"name":"SDLScrollableMessageResponse","abstract":"

    Response to SDLScrollableMessage

    "},"Classes/SDLSeatControlCapabilities.html":{"name":"SDLSeatControlCapabilities","abstract":"

    Include information about a seat control capabilities.

    "},"Classes/SDLSeatControlData.html":{"name":"SDLSeatControlData","abstract":"

    Seat control data corresponds to “SEAT” ModuleType.

    "},"Classes/SDLSeatLocation.html":{"name":"SDLSeatLocation","abstract":"

    Describes the location of a seat

    "},"Classes/SDLSeatLocationCapability.html":{"name":"SDLSeatLocationCapability","abstract":"

    Contains information about the locations of each seat.

    "},"Classes/SDLSeatMemoryAction.html":{"name":"SDLSeatMemoryAction","abstract":"

    Specify the action to be performed.

    "},"Classes/SDLSendHapticData.html":{"name":"SDLSendHapticData","abstract":"

    Sends the spatial data gathered from SDLCarWindow or VirtualDisplayEncoder to the HMI. This data will be utilized by the HMI to determine how and when haptic events should occur.

    "},"Classes.html#/c:objc(cs)SDLSendHapticDataResponse":{"name":"SDLSendHapticDataResponse","abstract":"

    Response to SDLSendHapticData

    "},"Classes/SDLSendLocation.html":{"name":"SDLSendLocation","abstract":"

    SendLocation is used to send a location to the navigation system for navigation

    "},"Classes.html#/c:objc(cs)SDLSendLocationResponse":{"name":"SDLSendLocationResponse","abstract":"

    Response to SDLSendLocation

    "},"Classes/SDLSetAppIcon.html":{"name":"SDLSetAppIcon","abstract":"

    Used to set existing local file on SDL as the app’s icon. Not supported on"},"Classes.html#/c:objc(cs)SDLSetAppIconResponse":{"name":"SDLSetAppIconResponse","abstract":"

    Response to SDLSetAppIcon

    "},"Classes/SDLSetCloudAppProperties.html":{"name":"SDLSetCloudAppProperties","abstract":"

    RPC used to enable/disable a cloud application and set authentication data

    "},"Classes.html#/c:objc(cs)SDLSetCloudAppPropertiesResponse":{"name":"SDLSetCloudAppPropertiesResponse","abstract":"

    The response to SetCloudAppProperties

    "},"Classes/SDLSetDisplayLayout.html":{"name":"SDLSetDisplayLayout","abstract":"

    Used to set an alternate display layout. If not sent, default screen for"},"Classes/SDLSetDisplayLayoutResponse.html":{"name":"SDLSetDisplayLayoutResponse","abstract":"

    Response to SDLSetDisplayLayout

    "},"Classes/SDLSetGlobalProperties.html":{"name":"SDLSetGlobalProperties","abstract":"

    Sets global property values

    "},"Classes.html#/c:objc(cs)SDLSetGlobalPropertiesResponse":{"name":"SDLSetGlobalPropertiesResponse","abstract":"

    Response to SDLSetGlobalProperties

    "},"Classes/SDLSetInteriorVehicleData.html":{"name":"SDLSetInteriorVehicleData","abstract":"

    This RPC allows a remote control type mobile application to"},"Classes/SDLSetInteriorVehicleDataResponse.html":{"name":"SDLSetInteriorVehicleDataResponse","abstract":"

    Response to SDLSetInteriorVehicleData

    "},"Classes/SDLSetMediaClockTimer.html":{"name":"SDLSetMediaClockTimer","abstract":"

    Sets the media clock/timer value and the update method (e.g.count-up,"},"Classes.html#/c:objc(cs)SDLSetMediaClockTimerResponse":{"name":"SDLSetMediaClockTimerResponse","abstract":"

    Response to SDLSetMediaClockTimer

    "},"Classes/SDLShow.html":{"name":"SDLShow","abstract":"

    Updates the application’s display text area, regardless of whether or not"},"Classes/SDLShowAppMenu.html":{"name":"SDLShowAppMenu","abstract":"

    Used by an app to show the app’s menu, typically this is used by a navigation app if the menu button is hidden.

    "},"Classes.html#/c:objc(cs)SDLShowAppMenuResponse":{"name":"SDLShowAppMenuResponse","abstract":"

    Response to the request to show the app menu.

    "},"Classes/SDLShowConstantTBT.html":{"name":"SDLShowConstantTBT","abstract":"

    This RPC is used to update the user with navigation information for the constantly shown screen (base screen), but also for the alert maneuver screen.

    "},"Classes.html#/c:objc(cs)SDLShowConstantTBTResponse":{"name":"SDLShowConstantTBTResponse","abstract":"

    Response to SDLShowConstantTBT

    "},"Classes.html#/c:objc(cs)SDLShowResponse":{"name":"SDLShowResponse","abstract":"

    Response to SDLShow

    "},"Classes/SDLSingleTireStatus.html":{"name":"SDLSingleTireStatus","abstract":"

    Tire pressure status of a single tire.

    "},"Classes/SDLSlider.html":{"name":"SDLSlider","abstract":"

    Creates a full screen or pop-up overlay (depending on platform) with a single user controlled slider.

    "},"Classes/SDLSliderResponse.html":{"name":"SDLSliderResponse","abstract":"

    Response to SDLSlider

    "},"Classes/SDLSoftButton.html":{"name":"SDLSoftButton","abstract":"

    Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts

    "},"Classes/SDLSoftButtonCapabilities.html":{"name":"SDLSoftButtonCapabilities","abstract":"

    Contains information about a SoftButton’s capabilities.

    "},"Classes/SDLSoftButtonObject.html":{"name":"SDLSoftButtonObject","abstract":"

    A soft button wrapper object that is capable of storing and switching between states

    "},"Classes/SDLSoftButtonState.html":{"name":"SDLSoftButtonState","abstract":"

    A soft button state including data such as text, name and artwork

    "},"Classes/SDLSpeak.html":{"name":"SDLSpeak","abstract":"

    Speaks a phrase over the vehicle audio system using SDL’s TTS (text-to-speech) engine. The provided text to be spoken can be simply a text phrase, or it can consist of phoneme specifications to direct SDL’s TTS engine to speak a “speech-sculpted” phrase.

    "},"Classes.html#/c:objc(cs)SDLSpeakResponse":{"name":"SDLSpeakResponse","abstract":"

    Response to SDLSpeak

    "},"Classes/SDLStartTime.html":{"name":"SDLStartTime","abstract":"

    Describes the hour, minute and second values used to set the media clock.

    "},"Classes/SDLStationIDNumber.html":{"name":"SDLStationIDNumber","abstract":"

    Describes the hour, minute and second values used to set the media clock.

    "},"Classes/SDLStreamingMediaConfiguration.html":{"name":"SDLStreamingMediaConfiguration","abstract":"

    The streaming media configuration. Use this class to configure streaming media information.

    "},"Classes/SDLStreamingMediaManager.html":{"name":"SDLStreamingMediaManager","abstract":"

    Manager to help control streaming media services.

    "},"Classes/SDLStreamingVideoScaleManager.html":{"name":"SDLStreamingVideoScaleManager","abstract":"

    This class consolidates the logic of scaling between the view controller’s coordinate system and the display’s coordinate system.

    "},"Classes/SDLSubscribeButton.html":{"name":"SDLSubscribeButton","abstract":"

    Establishes a subscription to button notifications for HMI buttons. Buttons"},"Classes.html#/c:objc(cs)SDLSubscribeButtonResponse":{"name":"SDLSubscribeButtonResponse","abstract":"

    Response to SDLSubscribeButton

    "},"Classes/SDLSubscribeVehicleData.html":{"name":"SDLSubscribeVehicleData","abstract":"

    Subscribes to specific published vehicle 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. The update rate is dependent on sensors, vehicle architecture and vehicle type.

    "},"Classes/SDLSubscribeVehicleDataResponse.html":{"name":"SDLSubscribeVehicleDataResponse","abstract":"

    Response to SDLSubscribeVehicleData

    "},"Classes.html#/c:objc(cs)SDLSubscribeWayPoints":{"name":"SDLSubscribeWayPoints","abstract":"

    A SDLSubscribeWaypoints can be sent to subscribe"},"Classes.html#/c:objc(cs)SDLSubscribeWayPointsResponse":{"name":"SDLSubscribeWayPointsResponse","abstract":"

    Response to SubscribeWayPoints

    "},"Classes/SDLSyncMsgVersion.html":{"name":"SDLSyncMsgVersion","abstract":"

    Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.

    "},"Classes.html#/c:objc(cs)SDLSyncPData":{"name":"SDLSyncPData","abstract":"

    Allows binary data in the form of SyncP packets to be sent to the SYNC module. Binary data is in binary part of hybrid msg.

    "},"Classes.html#/c:objc(cs)SDLSyncPDataResponse":{"name":"SDLSyncPDataResponse","abstract":"

    Response to SyncPData

    "},"Classes/SDLSystemCapability.html":{"name":"SDLSystemCapability","abstract":"

    The systemCapabilityType indicates which type of data should be changed and identifies which data object exists in this struct. For example, if the SystemCapability Type is NAVIGATION then a “navigationCapability” should exist.

    "},"Classes/SDLSystemCapabilityManager.html":{"name":"SDLSystemCapabilityManager","abstract":"

    A manager that handles updating and subscribing to SDL capabilities.

    "},"Classes/SDLSystemRequest.html":{"name":"SDLSystemRequest","abstract":"

    An asynchronous request from the device; binary data can be included in hybrid part of message for some requests (such as HTTP, Proprietary, or Authentication requests)

    "},"Classes/SDLTTSChunk.html":{"name":"SDLTTSChunk","abstract":"

    Specifies what is to be spoken. This can be simply a text phrase, which SDL will speak according to its own rules. It can also be phonemes from either the Microsoft SAPI phoneme set, or from the LHPLUS phoneme set. It can also be a pre-recorded sound in WAV format (either developer-defined, or provided by the SDL platform).

    "},"Classes/SDLTemperature.html":{"name":"SDLTemperature","abstract":"

    Struct representing a temperature.

    "},"Classes/SDLTemplateColorScheme.html":{"name":"SDLTemplateColorScheme","abstract":"

    A color scheme for all display layout templates.

    "},"Classes/SDLTemplateConfiguration.html":{"name":"SDLTemplateConfiguration","abstract":"

    Used to set an alternate template layout to a window.

    "},"Classes/SDLTextField.html":{"name":"SDLTextField","abstract":"

    Struct defining the characteristics of a displayed field on the HMI.

    "},"Classes/SDLTireStatus.html":{"name":"SDLTireStatus","abstract":"

    Struct used in Vehicle Data; the status and pressure of the tires.

    "},"Classes/SDLTouch.html":{"name":"SDLTouch","abstract":"

    Describes a touch location

    "},"Classes/SDLTouchCoord.html":{"name":"SDLTouchCoord","abstract":"

    The coordinate of a touch, used in a touch event

    "},"Classes/SDLTouchEvent.html":{"name":"SDLTouchEvent","abstract":"

    A touch which occurred on the IVI system during projection

    "},"Classes/SDLTouchEventCapabilities.html":{"name":"SDLTouchEventCapabilities","abstract":"

    The capabilities of touches during projection applications

    "},"Classes/SDLTouchManager.html":{"name":"SDLTouchManager","abstract":"

    Touch Manager responsible for processing touch event notifications.

    "},"Classes/SDLTurn.html":{"name":"SDLTurn","abstract":"

    A struct used in UpdateTurnList for Turn-by-Turn navigation applications

    "},"Classes/SDLUnpublishAppService.html":{"name":"SDLUnpublishAppService","abstract":"

    Unpublish an existing service published by this application.

    "},"Classes.html#/c:objc(cs)SDLUnpublishAppServiceResponse":{"name":"SDLUnpublishAppServiceResponse","abstract":"

    The response to UnpublishAppService

    "},"Classes.html#/c:objc(cs)SDLUnregisterAppInterface":{"name":"SDLUnregisterAppInterface","abstract":"

    Terminates an application’s interface registration. This causes SDL® to"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterfaceResponse":{"name":"SDLUnregisterAppInterfaceResponse","abstract":"

    Response to UnregisterAppInterface

    "},"Classes/SDLUnsubscribeButton.html":{"name":"SDLUnsubscribeButton","abstract":"

    Deletes a subscription to button notifications for the specified button. For"},"Classes.html#/c:objc(cs)SDLUnsubscribeButtonResponse":{"name":"SDLUnsubscribeButtonResponse","abstract":"

    Response to UnsubscribeButton

    "},"Classes/SDLUnsubscribeVehicleData.html":{"name":"SDLUnsubscribeVehicleData","abstract":"

    This function is used to unsubscribe the notifications from the"},"Classes/SDLUnsubscribeVehicleDataResponse.html":{"name":"SDLUnsubscribeVehicleDataResponse","abstract":"

    Response to UnsubscribeVehicleData

    "},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPoints":{"name":"SDLUnsubscribeWayPoints","abstract":"

    Request to unsubscribe from navigation WayPoints and Destination

    "},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPointsResponse":{"name":"SDLUnsubscribeWayPointsResponse","abstract":"

    Response to UnsubscribeWayPoints

    "},"Classes/SDLUpdateTurnList.html":{"name":"SDLUpdateTurnList","abstract":"

    Updates the list of next maneuvers, which can be requested by the user pressing the softbutton

    "},"Classes.html#/c:objc(cs)SDLUpdateTurnListResponse":{"name":"SDLUpdateTurnListResponse","abstract":"

    Response to UpdateTurnList

    "},"Classes/SDLVehicleDataResult.html":{"name":"SDLVehicleDataResult","abstract":"

    Individual published data request result

    "},"Classes/SDLVehicleType.html":{"name":"SDLVehicleType","abstract":"

    Describes the type of vehicle the mobile phone is connected with.

    "},"Classes/SDLVersion.html":{"name":"SDLVersion","abstract":"

    Specifies a major / minor / patch version number for semantic versioning purposes and comparisons

    "},"Classes/SDLVideoStreamingCapability.html":{"name":"SDLVideoStreamingCapability","abstract":"

    Contains information about this system’s video streaming capabilities

    "},"Classes/SDLVideoStreamingFormat.html":{"name":"SDLVideoStreamingFormat","abstract":"

    An available format for video streaming in projection applications

    "},"Classes/SDLVoiceCommand.html":{"name":"SDLVoiceCommand","abstract":"

    Voice commands available for the user to speak and be recognized by the IVI’s voice recognition engine.

    "},"Classes/SDLVRHelpItem.html":{"name":"SDLVRHelpItem","abstract":"

    A help item for voice commands, used locally in interaction lists and globally

    "},"Classes/SDLWeatherAlert.html":{"name":"SDLWeatherAlert","abstract":"

    Contains information about a weather alert

    "},"Classes/SDLWeatherData.html":{"name":"SDLWeatherData","abstract":"

    Contains information about the current weather

    "},"Classes/SDLWeatherServiceData.html":{"name":"SDLWeatherServiceData","abstract":"

    This data is related to what a weather service would provide.

    "},"Classes/SDLWeatherServiceManifest.html":{"name":"SDLWeatherServiceManifest","abstract":"

    A weather service manifest.

    "},"Classes/SDLWindowCapability.html":{"name":"SDLWindowCapability","abstract":"

    Reflects content of DisplayCapabilities, ButtonCapabilities and SoftButtonCapabilities

    "},"Classes/SDLWindowTypeCapabilities.html":{"name":"SDLWindowTypeCapabilities","abstract":"

    Used to inform an app how many window instances per type that can be created.

    "},"Categories/NSString%28SDLEnum%29.html#/c:objc(cs)NSString(im)isEqualToEnum:":{"name":"-isEqualToEnum:","abstract":"

    Returns whether or not two enums are equal.

    ","parent_name":"NSString(SDLEnum)"},"Categories/NSString%28SDLEnum%29.html":{"name":"NSString(SDLEnum)","abstract":"

    Extensions to NSString specifically for SDL string enums

    "},"Categories.html":{"name":"Categories","abstract":"

    The following categories are available globally.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Constants.html":{"name":"Constants","abstract":"

    The following constants are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Type%20Definitions.html":{"name":"Type Definitions","abstract":"

    The following type definitions are available globally.

    "}} \ No newline at end of file +{"Type%20Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierFirstFinger":{"name":"SDLTouchIdentifierFirstFinger","abstract":"

    Touch was first finger

    "},"Type%20Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierSecondFinger":{"name":"SDLTouchIdentifierSecondFinger","abstract":"

    Touch was second finger

    "},"Type%20Definitions.html#/c:SDLAmbientLightStatus.h@T@SDLAmbientLightStatus":{"name":"SDLAmbientLightStatus","abstract":"

    Reflects the status of the ambient light sensor for headlamps

    "},"Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType":{"name":"SDLAppHMIType","abstract":"

    Enumeration listing possible app hmi types.

    "},"Type%20Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason":{"name":"SDLAppInterfaceUnregisteredReason","abstract":"

    Indicates reason why app interface was unregistered. The application is being disconnected by SDL.

    "},"Type%20Definitions.html#/c:SDLAppServiceType.h@T@SDLAppServiceType":{"name":"SDLAppServiceType","abstract":"

    Enumeration listing possible app service types.

    "},"Type%20Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator":{"name":"SDLAudioStreamingIndicator","abstract":"

    Enumeration listing possible indicators of audio streaming changes

    "},"Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState":{"name":"SDLAudioStreamingState","abstract":"

    Describes whether or not streaming audio is currently audible to the user. Though provided in every OnHMIStatus notification, this information is only relevant for applications that declare themselves as media apps in RegisterAppInterface

    "},"Type%20Definitions.html#/c:SDLAudioType.h@T@SDLAudioType":{"name":"SDLAudioType","abstract":"

    Describes different audio type options for PerformAudioPassThru

    "},"Type%20Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample":{"name":"SDLBitsPerSample","abstract":"

    Describes different bit depth options for PerformAudioPassThru

    "},"Type%20Definitions.html#/c:SDLButtonEventMode.h@T@SDLButtonEventMode":{"name":"SDLButtonEventMode","abstract":"

    Indicates whether the button was depressed or released. A BUTTONUP event will always be preceded by a BUTTONDOWN event.

    "},"Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName":{"name":"SDLButtonName","abstract":"

    Defines logical buttons which, on a given SDL unit, would correspond to either physical or soft (touchscreen) buttons. These logical buttons present a standard functional abstraction which the developer can rely upon, independent of the SDL unit. For example, the developer can rely upon the OK button having the same meaning to the user across SDL platforms.

    "},"Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode":{"name":"SDLButtonPressMode","abstract":"

    Indicates whether this is a LONG or SHORT button press

    "},"Type%20Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus":{"name":"SDLCarModeStatus","abstract":"

    Describes the carmode the vehicle is in. Used in ClusterModeStatus

    "},"Type%20Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet":{"name":"SDLCharacterSet","abstract":"

    Character sets supported by SDL. Used to describe text field capabilities.

    "},"Type%20Definitions.html#/c:SDLChoiceSet.h@T@SDLChoiceSetCanceledHandler":{"name":"SDLChoiceSetCanceledHandler","abstract":"

    Notifies the subscriber that the choice set should be cancelled.

    "},"Type%20Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection":{"name":"SDLCompassDirection","abstract":"

    The list of potential compass directions. Used in GPS data

    "},"Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus":{"name":"SDLComponentVolumeStatus","abstract":"

    The volume status of a vehicle component. Used in SingleTireStatus and VehicleData Fuel Level

    "},"Type%20Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone":{"name":"SDLDefrostZone","abstract":"

    Enumeration listing possible defrost zones. Used in ClimateControlCapabilities and Data.

    "},"Type%20Definitions.html#/c:SDLDeliveryMode.h@T@SDLDeliveryMode":{"name":"SDLDeliveryMode","abstract":"

    Specifies the mode in which the sendLocation request is sent. Used in SendLocation.

    "},"Type%20Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus":{"name":"SDLDeviceLevelStatus","abstract":"

    Reflects the reported battery status of the connected device, if reported. Used in DeviceStatus.

    "},"Type%20Definitions.html#/c:SDLDimension.h@T@SDLDimension":{"name":"SDLDimension","abstract":"

    The supported dimensions of the GPS. Used in GPSData

    "},"Type%20Definitions.html#/c:SDLDirection.h@T@SDLDirection":{"name":"SDLDirection","abstract":"

    A navigation direction.

    "},"Type%20Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode":{"name":"SDLDisplayMode","abstract":"

    Identifies the various display types used by SDL.

    "},"Type%20Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType":{"name":"SDLDisplayType","abstract":"

    Identifies the various display types used by SDL. Used in DisplayCapabilities.

    "},"Type%20Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit":{"name":"SDLDistanceUnit","abstract":"

    Wiper Status

    "},"Type%20Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState":{"name":"SDLDriverDistractionState","abstract":"

    Enumeration that describes possible states of driver distraction. Used in OnDriverDistraction.

    "},"Type%20Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus":{"name":"SDLECallConfirmationStatus","abstract":"

    Reflects the status of the eCall Notification. Used in ECallInfo

    "},"Type%20Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus":{"name":"SDLElectronicParkBrakeStatus","abstract":"

    Reflects the status of the Electronic Parking Brake. A Vehicle Data Type.

    "},"Type%20Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType":{"name":"SDLEmergencyEventType","abstract":"

    Reflects the emergency event status of the vehicle. Used in EmergencyEvent

    "},"Type%20Definitions.html#/c:SDLEnum.h@T@SDLEnum":{"name":"SDLEnum","abstract":"

    NSString SDLEnum typedef

    "},"Type%20Definitions.html#/c:SDLFileManager.h@T@SDLFileManagerStartupCompletionHandler":{"name":"SDLFileManagerStartupCompletionHandler","abstract":"

    The handler that is called when the manager is set up or failed to set up with an error."},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileName":{"name":"SDLFileName","abstract":"

    Typedef SDLFileName

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadCompletionHandler":{"name":"SDLFileManagerUploadCompletionHandler","abstract":"

    A completion handler called after a response from Core to a upload request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadCompletionHandler":{"name":"SDLFileManagerMultiUploadCompletionHandler","abstract":"

    A completion handler called after a set of upload requests has completed.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadProgressHandler":{"name":"SDLFileManagerMultiUploadProgressHandler","abstract":"

    In a multiple request send, a handler called after each response from Core to a upload request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerDeleteCompletionHandler":{"name":"SDLFileManagerDeleteCompletionHandler","abstract":"

    A completion handler called after a response from Core to a delete request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiDeleteCompletionHandler":{"name":"SDLFileManagerMultiDeleteCompletionHandler","abstract":"

    A completion handler called after a set of delete requests has completed.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerListFilesCompletionHandler":{"name":"SDLFileManagerListFilesCompletionHandler","abstract":"

    A completion handler called after response from Core to a list files request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadArtworkCompletionHandler":{"name":"SDLFileManagerUploadArtworkCompletionHandler","abstract":"

    A completion handler called after a response from Core to a artwork upload request.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkCompletionHandler":{"name":"SDLFileManagerMultiUploadArtworkCompletionHandler","abstract":"

    A completion handler called after a set of upload artwork requests has completed.

    "},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkProgressHandler":{"name":"SDLFileManagerMultiUploadArtworkProgressHandler","abstract":"

    In a multiple request send, a handler called after each response from Core to an artwork upload request.

    "},"Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType":{"name":"SDLFileType","abstract":"

    Enumeration listing possible file types. Used in SDLFile, PutFile, ImageField, OnSystemRequest

    "},"Type%20Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus":{"name":"SDLFuelCutoffStatus","abstract":"

    Reflects the status of the Restraints Control Module fuel pump cutoff. The fuel pump is cut off typically after the vehicle has had a collision. Used in EmergencyEvent.

    "},"Type%20Definitions.html#/c:SDLFuelType.h@T@SDLFuelType":{"name":"SDLFuelType","abstract":"

    Enumeration listing possible fuel types.

    "},"Type%20Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty":{"name":"SDLGlobalProperty","abstract":"

    Properties of a user-initiated VR interaction (i.e. interactions started by the user pressing the PTT button). Used in RPCs related to ResetGlobalProperties

    "},"Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel":{"name":"SDLHMILevel","abstract":"

    Specifies current level of the HMI. An HMI level indicates the degree of user interaction possible through the HMI (e.g. TTS only, display only, VR, etc.). The HMI level varies for an application based on the type of display (i.e. Nav or non-Nav) and the user directing “focus” to other applications (e.g. phone, other mobile applications, etc.). Used in OnHMIStatus

    "},"Type%20Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities":{"name":"SDLHMIZoneCapabilities","abstract":"

    Specifies HMI Zones in the vehicle. Used in RegisterAppInterfaceResponse

    "},"Type%20Definitions.html#/c:SDLHybridAppPreference.h@T@SDLHybridAppPreference":{"name":"SDLHybridAppPreference","abstract":"

    Enumeration for the user’s preference of which app type to use when both are available.

    "},"Type%20Definitions.html#/c:SDLIgnitionStableStatus.h@T@SDLIgnitionStableStatus":{"name":"SDLIgnitionStableStatus","abstract":"

    Reflects the ignition switch stability. Used in BodyInformation

    "},"Type%20Definitions.html#/c:SDLIgnitionStatus.h@T@SDLIgnitionStatus":{"name":"SDLIgnitionStatus","abstract":"

    Reflects the status of ignition. Used in BodyInformation.

    "},"Type%20Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName":{"name":"SDLImageFieldName","abstract":"

    The name that identifies the filed. Used in DisplayCapabilities.

    "},"Type%20Definitions.html#/c:SDLImageType.h@T@SDLImageType":{"name":"SDLImageType","abstract":"

    Contains information about the type of image. Used in Image.

    "},"Type%20Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode":{"name":"SDLInteractionMode","abstract":"

    For application-initiated interactions (SDLPerformInteraction), this specifies the mode by which the user is prompted and by which the user’s selection is indicated. Used in PerformInteraction.

    "},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler":{"name":"SDLKeyboardAutocompleteCompletionHandler","abstract":"

    This handler is called when you wish to update your autocomplete text in response to the user’s input

    "},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutoCompleteResultsHandler":{"name":"SDLKeyboardAutoCompleteResultsHandler","abstract":"

    This handler is called when you wish to update your autocomplete text in response to the user’s input.

    "},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler":{"name":"SDLKeyboardCharacterSetCompletionHandler","abstract":"

    This handler is called when you wish to update your keyboard’s limitedCharacterSet in response to the user’s input

    "},"Type%20Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent":{"name":"SDLKeyboardEvent","abstract":"

    Enumeration listing possible keyboard events. Used in OnKeyboardInput.

    "},"Type%20Definitions.html#/c:SDLKeyboardLayout.h@T@SDLKeyboardLayout":{"name":"SDLKeyboardLayout","abstract":"

    Enumeration listing possible keyboard layouts. Used in KeyboardProperties.

    "},"Type%20Definitions.html#/c:SDLKeypressMode.h@T@SDLKeypressMode":{"name":"SDLKeypressMode","abstract":"

    Enumeration listing possible keyboard events.

    "},"Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage":{"name":"SDLLanguage","abstract":"

    Specifies the language to be used for TTS, VR, displayed messages/menus. Used in ChangeRegistration and RegisterAppInterface.

    "},"Type%20Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode":{"name":"SDLLayoutMode","abstract":"

    For touchscreen interactions, the mode of how the choices are presented. Used in PerformInteraction.

    "},"Type%20Definitions.html#/c:SDLLightName.h@T@SDLLightName":{"name":"SDLLightName","abstract":"

    The name that identifies the Light

    "},"Type%20Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus":{"name":"SDLLightStatus","abstract":"

    Reflects the status of Light.

    "},"Type%20Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus":{"name":"SDLLockScreenStatus","abstract":"

    Describes what the status of the lock screen should be

    "},"Type%20Definitions.html#/c:SDLLockScreenViewController.h@T@SwipeGestureCallbackBlock":{"name":"SwipeGestureCallbackBlock","abstract":"

    A block that can be used to close the lockscreen when the user swipes on the lockscreen. Override this in your own custom view controllers if you build a custom lock screen.

    "},"Type%20Definitions.html#/c:SDLLogConstants.h@T@SDLLogFilterBlock":{"name":"SDLLogFilterBlock","abstract":"

    A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.

    "},"Type%20Definitions.html#/c:SDLMaintenanceModeStatus.h@T@SDLMaintenanceModeStatus":{"name":"SDLMaintenanceModeStatus","abstract":"

    Describes the maintenence mode. Used in nothing.

    "},"Type%20Definitions.html#/c:SDLManager.h@T@SDLManagerReadyBlock":{"name":"SDLManagerReadyBlock","abstract":"

    The block called when the manager is ready to be used or an error occurs while attempting to become ready.

    "},"Type%20Definitions.html#/c:SDLManager.h@T@SDLRPCUpdatedBlock":{"name":"SDLRPCUpdatedBlock","abstract":"

    The block that will be called every time an RPC is received when subscribed to an RPC.

    "},"Type%20Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion":{"name":"SDLMassageCushion","abstract":"

    The List possible cushions of a multi-contour massage seat.

    "},"Type%20Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode":{"name":"SDLMassageMode","abstract":"

    The List possible modes of a massage zone.

    "},"Type%20Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone":{"name":"SDLMassageZone","abstract":"

    List possible zones of a multi-contour massage seat.

    "},"Type%20Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat":{"name":"SDLMediaClockFormat","abstract":"

    Indicates the format of the time displayed on the connected SDL unit.

    "},"Type%20Definitions.html#/c:SDLMediaType.h@T@SDLMediaType":{"name":"SDLMediaType","abstract":"

    Enumeration listing possible media types.

    "},"Type%20Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler":{"name":"SDLMenuCellSelectionHandler","abstract":"

    The handler to run when a menu item is selected.

    "},"Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout":{"name":"SDLMenuLayout","abstract":"

    Enum for each type of video streaming protocol, used in VideoStreamingFormat

    "},"Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType":{"name":"SDLMetadataType","abstract":"

    Text Field metadata types. Used in Show.

    "},"Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType":{"name":"SDLModuleType","abstract":"

    The type of remote control data. Used in ButtonPress, GetInteriorVehicleData, and ModuleData

    "},"Type%20Definitions.html#/c:SDLNavigationAction.h@T@SDLNavigationAction":{"name":"SDLNavigationAction","abstract":"

    A navigation action.

    "},"Type%20Definitions.html#/c:SDLNavigationJunction.h@T@SDLNavigationJunction":{"name":"SDLNavigationJunction","abstract":"

    A navigation junction type.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName":{"name":"SDLNotificationName","abstract":"

    NSNotification names specific to incoming SDL RPC

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationUserInfoKey":{"name":"SDLNotificationUserInfoKey","abstract":"

    The key used in all SDL NSNotifications to extract the response or notification from the userInfo dictionary.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler":{"name":"SDLAudioPassThruHandler","abstract":"

    A handler used on SDLPerformAudioPassThru.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLResponseHandler":{"name":"SDLResponseHandler","abstract":"

    A handler used on all RPC requests which fires when the response is received.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleRequestCompletionHandler":{"name":"SDLMultipleRequestCompletionHandler","abstract":"

    A completion handler called after a sequential or simultaneous set of requests have completed sending.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleSequentialRequestProgressHandler":{"name":"SDLMultipleSequentialRequestProgressHandler","abstract":"

    A handler called after each response to a request comes in in a multiple request send.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleAsyncRequestProgressHandler":{"name":"SDLMultipleAsyncRequestProgressHandler","abstract":"

    A handler called after each response to a request comes in in a multiple request send.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler":{"name":"SDLRPCButtonNotificationHandler","abstract":"

    A handler that may optionally be run when an SDLSubscribeButton or SDLSoftButton has a corresponding notification occur.

    "},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler":{"name":"SDLRPCCommandNotificationHandler","abstract":"

    A handler that may optionally be run when an SDLAddCommand has a corresponding notification occur.

    "},"Type%20Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL":{"name":"SDLPRNDL","abstract":"

    The selected gear the car is in. Used in retrieving vehicle data.

    "},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionRPCName":{"name":"SDLPermissionRPCName","abstract":"

    NSString typedef

    "},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionObserverIdentifier":{"name":"SDLPermissionObserverIdentifier","abstract":"

    NSUUID typedef

    "},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionsChangedHandler":{"name":"SDLPermissionsChangedHandler","abstract":"

    The PermissionObserver is a block that is passed in to some methods that will be stored and called when specified permissions change.

    "},"Type%20Definitions.html#/c:SDLPermissionStatus.h@T@SDLPermissionStatus":{"name":"SDLPermissionStatus","abstract":"

    Enumeration that describes possible permission states of a policy table entry. Used in nothing.

    "},"Type%20Definitions.html#/c:SDLPowerModeQualificationStatus.h@T@SDLPowerModeQualificationStatus":{"name":"SDLPowerModeQualificationStatus","abstract":"

    Describes the power mode qualification status. Used in ClusterModeStatus.

    "},"Type%20Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus":{"name":"SDLPowerModeStatus","abstract":"

    The status of the car’s power. Used in ClusterModeStatus.

    "},"Type%20Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout":{"name":"SDLPredefinedLayout","abstract":"

    A template layout an app uses to display information. The broad details of the layout are defined, but the details depend on the IVI system. Used in SetDisplayLayout.

    "},"Type%20Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech":{"name":"SDLPrerecordedSpeech","abstract":"

    Contains information about the speech capabilities on the SDL platform. Used in RegisterAppInterfaceResponse to indicate capability.

    "},"Type%20Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource":{"name":"SDLPrimaryAudioSource","abstract":"

    Reflects the current primary audio source of SDL (if selected). Used in DeviceStatus.

    "},"Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName":{"name":"SDLRPCFunctionName","abstract":"

    All RPC request / response / notification names

    "},"Type%20Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand":{"name":"SDLRadioBand","abstract":"

    Radio bands, such as AM and FM, used in RadioControlData

    "},"Type%20Definitions.html#/c:SDLRadioState.h@T@SDLRadioState":{"name":"SDLRadioState","abstract":"

    List possible states of a remote control radio module. Used in RadioControlData.

    "},"Type%20Definitions.html#/c:SDLRequestType.h@T@SDLRequestType":{"name":"SDLRequestType","abstract":"

    A type of system request. Used in SystemRequest.

    "},"Type%20Definitions.html#/c:SDLResult.h@T@SDLResult":{"name":"SDLResult","abstract":"

    Defines the possible result codes returned by SDL to the application in a response to a requested operation. Used in RPC responses

    "},"Type%20Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate":{"name":"SDLSamplingRate","abstract":"

    Describes different sampling rates for PerformAudioPassThru and AudioPassThruCapabilities

    "},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler":{"name":"SDLScreenManagerUpdateCompletionHandler","abstract":"

    The handler run when the update has completed

    "},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler":{"name":"SDLPreloadChoiceCompletionHandler","abstract":"

    Return an error with userinfo [key: SDLChoiceCell, value: NSError] if choices failed to upload

    "},"Type%20Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType":{"name":"SDLSeatMemoryActionType","abstract":"

    List of possible actions on Seat Meomry

    "},"Type%20Definitions.html#/c:SDLServiceUpdateReason.h@T@SDLServiceUpdateReason":{"name":"SDLServiceUpdateReason","abstract":"

    Enumeration listing possible service update reasons.

    "},"Type%20Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType":{"name":"SDLSoftButtonType","abstract":"

    SoftButtonType (TEXT / IMAGE / BOTH). Used by SoftButton.

    "},"Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities":{"name":"SDLSpeechCapabilities","abstract":"

    Contains information about TTS capabilities on the SDL platform. Used in RegisterAppInterfaceResponse, and TTSChunk.

    "},"Type%20Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName":{"name":"SDLStaticIconName","abstract":"

    Static icon names

    "},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState":{"name":"SDLVideoStreamManagerState","abstract":"

    The current state of the video stream manager

    "},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState":{"name":"SDLAudioStreamManagerState","abstract":"

    The current state of the audio stream manager

    "},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAppState":{"name":"SDLAppState","abstract":"

    Typedef SDLAppState

    "},"Type%20Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat":{"name":"SDLSupportedSeat","abstract":"

    List possible seats that is a remote controllable seat.

    "},"Type%20Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction":{"name":"SDLSystemAction","abstract":"

    Enumeration that describes system actions that can be triggered. Used in SoftButton.

    "},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLUpdateCapabilityHandler":{"name":"SDLUpdateCapabilityHandler","abstract":"

    A completion handler called after a request for the capability type is returned from the remote system.

    "},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateHandler":{"name":"SDLCapabilityUpdateHandler","abstract":"

    An observer block for whenever a subscription is called.

    "},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateWithErrorHandler":{"name":"SDLCapabilityUpdateWithErrorHandler","abstract":"

    An observer block for whenever a subscription or value is retrieved.

    "},"Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType":{"name":"SDLSystemCapabilityType","abstract":"

    The type of system capability to get more information on. Used in GetSystemCapability.

    "},"Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext":{"name":"SDLSystemContext","abstract":"

    Indicates whether or not a user-initiated interaction is in progress, and if so, in what mode (i.e. MENU or VR). Used in OnHMIStatus

    "},"Type%20Definitions.html#/c:SDLTBTState.h@T@SDLTBTState":{"name":"SDLTBTState","abstract":"

    The turn-by-turn state, used in OnTBTClientState.

    "},"Type%20Definitions.html#/c:SDLTPMS.h@T@SDLTPMS":{"name":"SDLTPMS","abstract":"

    An enum representing values of the tire pressure monitoring system

    "},"Type%20Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit":{"name":"SDLTemperatureUnit","abstract":"

    The unit of temperature to display. Used in Temperature.

    "},"Type%20Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment":{"name":"SDLTextAlignment","abstract":"

    The list of possible alignments of text in a field. May only work on some display types. used in Show.

    "},"Type%20Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName":{"name":"SDLTextFieldName","abstract":"

    Names of the text fields that can appear on a SDL display. Used in TextFieldName.

    "},"Type%20Definitions.html#/c:SDLTimerMode.h@T@SDLTimerMode":{"name":"SDLTimerMode","abstract":"

    The direction of a timer. Used in nothing.

    "},"Type%20Definitions/SDLTouchIdentifier.html":{"name":"SDLTouchIdentifier","abstract":"

    Undocumented

    "},"Type%20Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler":{"name":"SDLTouchEventHandler","abstract":"

    Handler for touch events

    "},"Type%20Definitions.html#/c:SDLTouchType.h@T@SDLTouchType":{"name":"SDLTouchType","abstract":"

    The type of a touch in a projection application. Used in OnTouchEvent.

    "},"Type%20Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource":{"name":"SDLTriggerSource","abstract":"

    Indicates whether choice/command was selected via VR or via a menu selection (using SEEKRIGHT/SEEKLEFT, TUNEUP, TUNEDOWN, OK buttons). Used in PerformInteractionResponse and OnCommand.

    "},"Type%20Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal":{"name":"SDLTurnSignal","abstract":"

    Enumeration that describes the status of the turn light indicator.

    "},"Type%20Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode":{"name":"SDLUpdateMode","abstract":"

    Specifies what function should be performed on the media clock/counter. Used in SetMediaClockTimer.

    "},"Type%20Definitions.html#/c:SDLVehicleDataActiveStatus.h@T@SDLVehicleDataActiveStatus":{"name":"SDLVehicleDataActiveStatus","abstract":"

    Vehicle Data Activity Status. Used in nothing.

    "},"Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus":{"name":"SDLVehicleDataEventStatus","abstract":"

    Reflects the status of a vehicle data event; e.g. a seat belt event status. Used in retrieving vehicle data.

    "},"Type%20Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus":{"name":"SDLVehicleDataNotificationStatus","abstract":"

    Reflects the status of a vehicle data notification. Used in ECallInfo

    "},"Type%20Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode":{"name":"SDLVehicleDataResultCode","abstract":"

    Vehicle Data Result Code. Used in DIDResult.

    "},"Type%20Definitions.html#/c:SDLVehicleDataStatus.h@T@SDLVehicleDataStatus":{"name":"SDLVehicleDataStatus","abstract":"

    Reflects the status of a binary vehicle data item. Used in MyKey.

    "},"Type%20Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType":{"name":"SDLVehicleDataType","abstract":"

    Defines the vehicle data types that can be published and/or subscribed to using SDLSubscribeVehicleData. Used in VehicleDataResult

    "},"Type%20Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode":{"name":"SDLVentilationMode","abstract":"

    The ventilation mode. Used in ClimateControlCapabilities

    "},"Type%20Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec":{"name":"SDLVideoStreamingCodec","abstract":"

    Enum for each type of video streaming codec. Used in VideoStreamingFormat.

    "},"Type%20Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol":{"name":"SDLVideoStreamingProtocol","abstract":"

    Enum for each type of video streaming protocol, used in VideoStreamingFormat

    "},"Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState":{"name":"SDLVideoStreamingState","abstract":"

    Enum for each type of video streaming protocol, used in VideoStreamingFormat

    "},"Type%20Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler":{"name":"SDLVoiceCommandSelectionHandler","abstract":"

    The handler that will be called when the command is activated

    "},"Type%20Definitions.html#/c:SDLVrCapabilities.h@T@SDLVRCapabilities":{"name":"SDLVRCapabilities","abstract":"

    The VR capabilities of the connected SDL platform. Used in RegisterAppInterfaceResponse.

    "},"Type%20Definitions.html#/c:SDLWarningLightStatus.h@T@SDLWarningLightStatus":{"name":"SDLWarningLightStatus","abstract":"

    Reflects the status of a cluster instrument warning light. Used in TireStatus

    "},"Type%20Definitions.html#/c:SDLWayPointType.h@T@SDLWayPointType":{"name":"SDLWayPointType","abstract":"

    The type of a navigation waypoint. Used in GetWayPoints.

    "},"Type%20Definitions.html#/c:SDLWindowType.h@T@SDLWindowType":{"name":"SDLWindowType","abstract":"

    The type of the window to be created. Main window or widget.

    "},"Type%20Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus":{"name":"SDLWiperStatus","abstract":"

    The status of the windshield wipers. Used in retrieving vehicle data.

    "},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveSingleTapForView:atPoint:":{"name":"-touchManager:didReceiveSingleTapForView:atPoint:","abstract":"

    A single tap was received

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveDoubleTapForView:atPoint:":{"name":"-touchManager:didReceiveDoubleTapForView:atPoint:","abstract":"

    A double tap was received

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidStartInView:atPoint:":{"name":"-touchManager:panningDidStartInView:atPoint:","abstract":"

    Panning started

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePanningFromPoint:toPoint:":{"name":"-touchManager:didReceivePanningFromPoint:toPoint:","abstract":"

    Panning moved between points

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidEndInView:atPoint:":{"name":"-touchManager:panningDidEndInView:atPoint:","abstract":"

    Panning ended

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningCanceledAtPoint:":{"name":"-touchManager:panningCanceledAtPoint:","abstract":"

    Panning canceled

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidStartInView:atCenterPoint:":{"name":"-touchManager:pinchDidStartInView:atCenterPoint:","abstract":"

    Pinch did start

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchAtCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchAtCenterPoint:withScale:","abstract":"

    @abstract","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchInView:atCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchInView:atCenterPoint:withScale:","abstract":"

    Pinch moved and changed scale

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidEndInView:atCenterPoint:":{"name":"-touchManager:pinchDidEndInView:atCenterPoint:","abstract":"

    Pinch did end

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchCanceledAtCenterPoint:":{"name":"-touchManager:pinchCanceledAtCenterPoint:","abstract":"

    Pinch canceled

    ","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)preferredVideoFormatOrderFromHeadUnitPreferredOrder:":{"name":"-preferredVideoFormatOrderFromHeadUnitPreferredOrder:","abstract":"

    Implement to return a different preferred order of attempted format usage than the head unit’s preferred order. In nearly all cases, it’s best to simply return the head unit’s preferred order, or not implement this method (which does the same thing).

    ","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)resolutionFromHeadUnitPreferredResolution:":{"name":"-resolutionFromHeadUnitPreferredResolution:","abstract":"

    Implement to return a different resolution to use for video streaming than the head unit’s requested resolution. If you return a resolution that the head unit does not like, the manager will fail to start up. In nearly all cases, it’s best to simply return the head unit’s preferred order, or not implement this method (which does the same thing), and adapt your UI to the head unit’s preferred resolution instead.

    ","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(py)audioConnected":{"name":"audioConnected","abstract":"

    Whether or not the audio byte stream is currently connected

    ","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"

    Send audio data bytes over the audio byte stream

    ","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLServiceEncryptionDelegate.html#/c:objc(pl)SDLServiceEncryptionDelegate(im)serviceEncryptionUpdatedOnService:encrypted:error:":{"name":"-serviceEncryptionUpdatedOnService:encrypted:error:","abstract":"

    Called when the encryption service has been.

    ","parent_name":"SDLServiceEncryptionDelegate"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(py)appId":{"name":"appId","abstract":"

    The app id of the app

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)initializeWithAppId:completionHandler:":{"name":"-initializeWithAppId:completionHandler:","abstract":"

    Initialize the SDL security library with the app’s id and a completion handler

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)stop":{"name":"-stop","abstract":"

    Stop the security library

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)runHandshakeWithClientData:error:":{"name":"-runHandshakeWithClientData:error:","abstract":"

    Run the SSL/TLS handshake

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)encryptData:withError:":{"name":"-encryptData:withError:","abstract":"

    Encrypt data using SSL/TLS

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)decryptData:withError:":{"name":"-decryptData:withError:","abstract":"

    Decrypt data using SSL/TLS

    ","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(cm)availableMakes":{"name":"+availableMakes","abstract":"

    The vehicle makes this security library covers

    ","parent_name":"SDLSecurityType"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerDidDisconnect":{"name":"-managerDidDisconnect","abstract":"

    Called upon a disconnection from the remote system.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)hmiLevel:didChangeToLevel:":{"name":"-hmiLevel:didChangeToLevel:","abstract":"

    Called when the HMI level state of this application changes on the remote system. This is equivalent to the application’s state changes in iOS such as foreground, background, or closed.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)audioStreamingState:didChangeToState:":{"name":"-audioStreamingState:didChangeToState:","abstract":"

    Called when the audio streaming state of this application changes on the remote system. This refers to when streaming audio is audible to the user.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)videoStreamingState:didChangetoState:":{"name":"-videoStreamingState:didChangetoState:","abstract":"

    Called when the video streaming state of this application changes. This refers to streaming video for navigation purposes. If you are “autostreaming” via CarWindow, you should not do anything with this method. Everything should be handled for you automatically.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)systemContext:didChangeToContext:":{"name":"-systemContext:didChangeToContext:","abstract":"

    Called when the system context of this application changes on the remote system. This refers to whether or not a user-initiated interaction is in progress, and if so, what it is.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerShouldUpdateLifecycleToLanguage:":{"name":"-managerShouldUpdateLifecycleToLanguage:","abstract":"

    Called when the lifecycle manager detected a language mismatch. In case of a language mismatch the manager should change the apps registration by updating the lifecycle configuration to the specified language. If the app can support the specified language it should return an Object of SDLLifecycleConfigurationUpdate, otherwise it should return nil to indicate that the language is not supported.

    ","parent_name":"SDLManagerDelegate"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(cm)logger":{"name":"+logger","abstract":"

    A simple convenience initializer to create the object. This should not start up the logger.

    ","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)setupLogger":{"name":"-setupLogger","abstract":"

    A call to setup the logger in whatever manner it needs to do so.

    ","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)logWithLog:formattedLog:":{"name":"-logWithLog:formattedLog:","abstract":"

    Log a particular log using the model and the formatted log message to the target.

    ","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)teardownLogger":{"name":"-teardownLogger","abstract":"

    The log target should be torn down. e.g. file handles should be closed

    ","parent_name":"SDLLogTarget"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)userDidSubmitInput:withEvent:":{"name":"-userDidSubmitInput:withEvent:","abstract":"

    The keyboard session completed with some input.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidAbortWithReason:":{"name":"-keyboardDidAbortWithReason:","abstract":"

    The keyboard session aborted.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)customKeyboardConfiguration":{"name":"-customKeyboardConfiguration","abstract":"

    Implement this in order to provide a custom keyboard configuration to just this keyboard. To apply default settings to all keyboards, see SDLScreenManager.keyboardConfiguration

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:completionHandler:":{"name":"-updateAutocompleteWithInput:completionHandler:","abstract":"

    Implement this if you wish to update the KeyboardProperties.autoCompleteText as the user updates their input. This is called upon a KEYPRESS event.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:autoCompleteResultsHandler:":{"name":"-updateAutocompleteWithInput:autoCompleteResultsHandler:","abstract":"

    Implement this if you wish to updated the KeyboardProperties.autoCompleteList as the user updates their input. This is called upon a KEYPRESS event.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateCharacterSetWithInput:completionHandler:":{"name":"-updateCharacterSetWithInput:completionHandler:","abstract":"

    Implement this if you wish to update the limitedCharacterSet as the user updates their input. This is called upon a KEYPRESS event.

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidSendEvent:text:":{"name":"-keyboardDidSendEvent:text:","abstract":"

    Implement this to be notified of all events occurring on the keyboard

    ","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didSelectChoice:withSource:atRowIndex:":{"name":"-choiceSet:didSelectChoice:withSource:atRowIndex:","abstract":"

    Delegate method called after a choice set item is selected

    ","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didReceiveError:":{"name":"-choiceSet:didReceiveError:","abstract":"

    Delegate method called on an error

    ","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:fileDidFinishPlaying:successfully:":{"name":"-audioStreamManager:fileDidFinishPlaying:successfully:","abstract":"

    Called when a file from the SDLAudioStreamManager finishes playing

    ","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForFile:error:":{"name":"-audioStreamManager:errorDidOccurForFile:error:","abstract":"

    Called when a file from the SDLAudioStreamManager could not play

    ","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:dataBufferDidFinishPlayingSuccessfully:":{"name":"-audioStreamManager:dataBufferDidFinishPlayingSuccessfully:","abstract":"

    Called when a data buffer from the SDLAudioStreamManager finishes playing

    ","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForDataBuffer:":{"name":"-audioStreamManager:errorDidOccurForDataBuffer:","abstract":"

    Called when a data buffer from the SDLAudioStreamManager could not play

    ","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols.html#/c:objc(pl)SDLInt":{"name":"SDLInt","abstract":"

    A declaration that this NSNumber contains an NSInteger.

    "},"Protocols.html#/c:objc(pl)SDLUInt":{"name":"SDLUInt","abstract":"

    A declaration that this NSNumber contains an NSUInteger.

    "},"Protocols.html#/c:objc(pl)SDLBool":{"name":"SDLBool","abstract":"

    A declaration that this NSNumber contains a BOOL.

    "},"Protocols.html#/c:objc(pl)SDLFloat":{"name":"SDLFloat","abstract":"

    A declaration that this NSNumber contains a float.

    "},"Protocols/SDLAudioStreamManagerDelegate.html":{"name":"SDLAudioStreamManagerDelegate","abstract":"

    Delegate for the AudioStreamManager

    "},"Protocols/SDLChoiceSetDelegate.html":{"name":"SDLChoiceSetDelegate","abstract":"

    Delegate for the the SDLChoiceSet. Contains methods that get called when an action is taken on a choice cell.

    "},"Protocols/SDLKeyboardDelegate.html":{"name":"SDLKeyboardDelegate","abstract":"

    They delegate of a keyboard popup allowing customization at runtime of the keyboard.

    "},"Protocols/SDLLogTarget.html":{"name":"SDLLogTarget","abstract":"

    A protocol describing a place logs from SDLLogManager are logged to

    "},"Protocols/SDLManagerDelegate.html":{"name":"SDLManagerDelegate","abstract":"

    The manager’s delegate

    "},"Protocols/SDLSecurityType.html":{"name":"SDLSecurityType","abstract":"

    A protocol used by SDL Security libraries.

    "},"Protocols/SDLServiceEncryptionDelegate.html":{"name":"SDLServiceEncryptionDelegate","abstract":"

    Delegate for the encryption service.

    "},"Protocols/SDLStreamingAudioManagerType.html":{"name":"SDLStreamingAudioManagerType","abstract":"

    Streaming audio manager

    "},"Protocols/SDLStreamingMediaManagerDataSource.html":{"name":"SDLStreamingMediaManagerDataSource","abstract":"

    A data source for the streaming manager’s preferred resolutions and preferred formats.

    "},"Protocols/SDLTouchManagerDelegate.html":{"name":"SDLTouchManagerDelegate","abstract":"

    The delegate to be notified of processed touches such as pinches, pans, and taps

    "},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagNone":{"name":"SDLStreamingEncryptionFlagNone","abstract":"

    It should not be encrypted at all

    ","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateOnly":{"name":"SDLStreamingEncryptionFlagAuthenticateOnly","abstract":"

    It should use SSL/TLS only to authenticate

    ","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateAndEncrypt":{"name":"SDLStreamingEncryptionFlagAuthenticateAndEncrypt","abstract":"

    All data on these services should be encrypted using SSL/TLS

    ","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeLayer":{"name":"SDLCarWindowRenderingTypeLayer","abstract":"

    Instead of rendering your UIViewController’s view, this will render the layer using renderInContext

    ","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewAfterScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewAfterScreenUpdates","abstract":"

    Renders your UIViewController’s view using drawViewHierarchyInRect:bounds afterScreenUpdates:YES

    ","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewBeforeScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewBeforeScreenUpdates","abstract":"

    Renders your UIViewController’s view using drawViewHierarchyInRect:bounds afterScreenUpdates:NO

    ","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeRequest":{"name":"SDLRPCMessageTypeRequest","abstract":"

    A request that will require a response

    ","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeResponse":{"name":"SDLRPCMessageTypeResponse","abstract":"

    A response to a request

    ","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeNotification":{"name":"SDLRPCMessageTypeNotification","abstract":"

    A message that does not have a response

    ","parent_name":"SDLRPCMessageType"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoHeartbeat":{"name":"SDLFrameInfoHeartbeat","abstract":"

    A ping packet that is sent to ensure the connection is still active and the service is still valid.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartService":{"name":"SDLFrameInfoStartService","abstract":"

    Requests that a specific type of service is started.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartServiceACK":{"name":"SDLFrameInfoStartServiceACK","abstract":"

    Acknowledges that the specific service has been started successfully.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartServiceNACK":{"name":"SDLFrameInfoStartServiceNACK","abstract":"

    Negatively acknowledges that the specific service was not started.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndService":{"name":"SDLFrameInfoEndService","abstract":"

    Requests that a specific type of service is ended.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndServiceACK":{"name":"SDLFrameInfoEndServiceACK","abstract":"

    Acknowledges that the specific service has been ended successfully.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndServiceNACK":{"name":"SDLFrameInfoEndServiceNACK","abstract":"

    Negatively acknowledges that the specific service was not ended or has not yet been started.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransport":{"name":"SDLFrameInfoRegisterSecondaryTransport","abstract":"

    Notifies that a Secondary Transport has been established.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransportACK":{"name":"SDLFrameInfoRegisterSecondaryTransportACK","abstract":"

    Acknowledges that the Secondary Transport has been recognized.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransportNACK":{"name":"SDLFrameInfoRegisterSecondaryTransportNACK","abstract":"

    Negatively acknowledges that the Secondary Transport has not been recognized.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoTransportEventUpdate":{"name":"SDLFrameInfoTransportEventUpdate","abstract":"

    Indicates the status or configuration of transport(s) is/are updated.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoServiceDataAck":{"name":"SDLFrameInfoServiceDataAck","abstract":"

    Deprecated.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoHeartbeatACK":{"name":"SDLFrameInfoHeartbeatACK","abstract":"

    Acknowledges that a Heartbeat control packet has been received.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoSingleFrame":{"name":"SDLFrameInfoSingleFrame","abstract":"

    Payload contains a single packet.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoFirstFrame":{"name":"SDLFrameInfoFirstFrame","abstract":"

    First frame in a multiple frame payload.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoConsecutiveLastFrame":{"name":"SDLFrameInfoConsecutiveLastFrame","abstract":"

    Frame in a multiple frame payload.

    ","parent_name":"SDLFrameInfo"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeControl":{"name":"SDLServiceTypeControl","abstract":"

    The lowest level service available.

    ","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeRPC":{"name":"SDLServiceTypeRPC","abstract":"

    Used to send requests, responses, and notifications between an application and a head unit.

    ","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeAudio":{"name":"SDLServiceTypeAudio","abstract":"

    The application can start the audio service to send PCM audio data to the head unit. After the StartService packet is sent and the ACK received, the payload for the Audio Service is only PCM audio data.

    ","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeVideo":{"name":"SDLServiceTypeVideo","abstract":"

    The application can start the video service to send H.264 video data to the head unit. After the StartService packet is sent and the ACK received, the payload for the Video Service is only H.264 video data.

    ","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeBulkData":{"name":"SDLServiceTypeBulkData","abstract":"

    Similar to the RPC Service but adds a bulk data field. The payload of a message sent via the Hybrid service consists of a Binary Header, JSON Data, and Bulk Data.

    ","parent_name":"SDLServiceType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeControl":{"name":"SDLFrameTypeControl","abstract":"

    Lowest-level type of packets. They can be sent over any of the defined services. They are used for the control of the services in which they are sent.

    ","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeSingle":{"name":"SDLFrameTypeSingle","abstract":"

    Contains all the data for a particular packet in the payload. The majority of frames sent over the protocol utilize this frame type.

    ","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeFirst":{"name":"SDLFrameTypeFirst","abstract":"

    The First Frame in a multiple frame payload contains information about the entire sequence of frames so that the receiving end can correctly parse all the frames and reassemble the entire payload. The payload of this frame is only eight bytes and contains information regarding the rest of the sequence.

    ","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeConsecutive":{"name":"SDLFrameTypeConsecutive","abstract":"

    The Consecutive Frames in a multiple frame payload contain the actual raw data of the original payload. The parsed payload contained in each of the Consecutive Frames’ payloads should be buffered until the entire sequence is complete.

    ","parent_name":"SDLFrameType"},"Enums/SDLPredefinedWindows.html#/c:@E@SDLPredefinedWindows@SDLPredefinedWindowsDefaultWindow":{"name":"SDLPredefinedWindowsDefaultWindow","abstract":"

    The default window is a main window pre-created on behalf of the app.

    ","parent_name":"SDLPredefinedWindows"},"Enums/SDLPredefinedWindows.html#/c:@E@SDLPredefinedWindows@SDLPredefinedWindowsPrimaryWidget":{"name":"SDLPredefinedWindowsPrimaryWidget","abstract":"

    The primary widget of the app.

    ","parent_name":"SDLPredefinedWindows"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusAllowed":{"name":"SDLPermissionGroupStatusAllowed","abstract":"

    Every RPC in the group is currently allowed.

    ","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusDisallowed":{"name":"SDLPermissionGroupStatusDisallowed","abstract":"

    Every RPC in the group is currently disallowed.

    ","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusMixed":{"name":"SDLPermissionGroupStatusMixed","abstract":"

    Some RPCs in the group are allowed and some disallowed.

    ","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusUnknown":{"name":"SDLPermissionGroupStatusUnknown","abstract":"

    The current status of the group is unknown.

    ","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAllAllowed":{"name":"SDLPermissionGroupTypeAllAllowed","abstract":"

    Be notified when all of the RPC in the group are allowed, or, when they all stop being allowed in some sense, that is, when they were all allowed, and now they are not.

    ","parent_name":"SDLPermissionGroupType"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAny":{"name":"SDLPermissionGroupTypeAny","abstract":"

    Be notified when any change in availability occurs among the group.

    ","parent_name":"SDLPermissionGroupType"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateDelete":{"name":"MenuCellStateDelete","abstract":"

    Marks the cell to be deleted

    ","parent_name":"MenuCellState"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateAdd":{"name":"MenuCellStateAdd","abstract":"

    Marks the cell to be added

    ","parent_name":"MenuCellState"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateKeep":{"name":"MenuCellStateKeep","abstract":"

    Marks the cell to be kept

    ","parent_name":"MenuCellState"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeForceOn":{"name":"SDLDynamicMenuUpdatesModeForceOn","abstract":"

    Forces on compatibility mode. This will force the menu manager to delete and re-add each menu item for every menu update. This mode is generally not advised due to performance issues.

    ","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeForceOff":{"name":"SDLDynamicMenuUpdatesModeForceOff","abstract":"

    This mode forces the menu manager to always dynamically update menu items for each menu update. This will provide the best performance but may cause ordering issues on some SYNC Gen 3 head units.

    ","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeOnWithCompatibility":{"name":"SDLDynamicMenuUpdatesModeOnWithCompatibility","abstract":"

    This mode checks whether the phone is connected to a SYNC Gen 3 head unit, which has known menu ordering issues. If it is, it will always delete and re-add every menu item, if not, it will dynamically update the menus.

    ","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeSimple":{"name":"SDLLogFormatTypeSimple","abstract":"

    A bare-bones log format: 09:52:07:324 🔹 (SDL)Protocol – a random test i guess

    ","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDefault":{"name":"SDLLogFormatTypeDefault","abstract":"

    A middle detail default log format: 09:52:07:324 🔹 (SDL)Protocol:SDLV2ProtocolHeader:25 – Some log message

    ","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDetailed":{"name":"SDLLogFormatTypeDetailed","abstract":"

    A very detailed log format: 09:52:07:324 🔹 DEBUG com.apple.main-thread:(SDL)Protocol:[SDLV2ProtocolHeader parse:]:74 – Some log message

    ","parent_name":"SDLLogFormatType"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDefault":{"name":"SDLLogLevelDefault","abstract":"

    This is used to describe that a “specific” logging will instead use the global log level, for example, a module may use the global log level instead of its own by specifying this level.

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelOff":{"name":"SDLLogLevelOff","abstract":"

    This is used to describe a level that involves absolutely no logs being output.

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelError":{"name":"SDLLogLevelError","abstract":"

    Only error level logs will be output

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelWarning":{"name":"SDLLogLevelWarning","abstract":"

    Both error and warning level logs will be output

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDebug":{"name":"SDLLogLevelDebug","abstract":"

    Error, warning, and debug level logs will be output. This level will never be output in RELEASE environments

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelVerbose":{"name":"SDLLogLevelVerbose","abstract":"

    All level logs will be output. This level will never be output in RELEASE environments

    ","parent_name":"SDLLogLevel"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagError":{"name":"SDLLogFlagError","abstract":"

    Error level logging

    ","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagWarning":{"name":"SDLLogFlagWarning","abstract":"

    Warning level logging

    ","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagDebug":{"name":"SDLLogFlagDebug","abstract":"

    Debug level logging

    ","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagVerbose":{"name":"SDLLogFlagVerbose","abstract":"

    Verbose level logging

    ","parent_name":"SDLLogFlag"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionTransmit":{"name":"SDLLogBytesDirectionTransmit","abstract":"

    Transmit from the app

    ","parent_name":"SDLLogBytesDirection"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionReceive":{"name":"SDLLogBytesDirectionReceive","abstract":"

    Receive from the module

    ","parent_name":"SDLLogBytesDirection"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeNever":{"name":"SDLLockScreenConfigurationDisplayModeNever","abstract":"

    The lock screen should never be shown. This should almost always mean that you will build your own lock screen.

    ","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeRequiredOnly":{"name":"SDLLockScreenConfigurationDisplayModeRequiredOnly","abstract":"

    The lock screen should only be shown when it is required by the head unit.

    ","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeOptionalOrRequired":{"name":"SDLLockScreenConfigurationDisplayModeOptionalOrRequired","abstract":"

    The lock screen should be shown when required by the head unit or when the head unit says that its optional, but not in other cases, such as before the user has interacted with your app on the head unit.

    ","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeAlways":{"name":"SDLLockScreenConfigurationDisplayModeAlways","abstract":"

    The lock screen should always be shown after connection.

    ","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLSecondaryTransports.html#/c:@E@SDLSecondaryTransports@SDLSecondaryTransportsNone":{"name":"SDLSecondaryTransportsNone","abstract":"

    No secondary transport

    ","parent_name":"SDLSecondaryTransports"},"Enums/SDLSecondaryTransports.html#/c:@E@SDLSecondaryTransports@SDLSecondaryTransportsTCP":{"name":"SDLSecondaryTransportsTCP","abstract":"

    TCP as secondary transport

    ","parent_name":"SDLSecondaryTransports"},"Enums/SDLCacheFileManagerError.html#/c:@E@SDLCacheFileManagerError@SDLCacheManagerErrorUpdateIconArchiveFileFailure":{"name":"SDLCacheManagerErrorUpdateIconArchiveFileFailure","abstract":"

    Failed to update archive file

    ","parent_name":"SDLCacheFileManagerError"},"Enums/SDLRPCStoreError.html#/c:@E@SDLRPCStoreError@SDLRPCStoreErrorGetInvalidObject":{"name":"SDLRPCStoreErrorGetInvalidObject","abstract":"

    In dictionary stored value with unexpected type

    ","parent_name":"SDLRPCStoreError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorUnknown":{"name":"SDLTransportErrorUnknown","abstract":"

    Connection cannot be established due to a reason not listed here.

    ","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionRefused":{"name":"SDLTransportErrorConnectionRefused","abstract":"

    TCP connection is refused.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionTimedOut":{"name":"SDLTransportErrorConnectionTimedOut","abstract":"

    TCP connection cannot be established within given time.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorNetworkDown":{"name":"SDLTransportErrorNetworkDown","abstract":"

    TCP connection cannot be established since network is down.","parent_name":"SDLTransportError"},"Enums/SDLSystemCapabilityManagerError.html#/c:@E@SDLSystemCapabilityManagerError@SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities":{"name":"SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities","abstract":"

    Undocumented

    ","parent_name":"SDLSystemCapabilityManagerError"},"Enums/SDLSystemCapabilityManagerError.html#/c:@E@SDLSystemCapabilityManagerError@SDLSystemCapabilityManagerErrorHMINone":{"name":"SDLSystemCapabilityManagerErrorHMINone","abstract":"

    Undocumented

    ","parent_name":"SDLSystemCapabilityManagerError"},"Enums/SDLSystemCapabilityManagerError.html#/c:@E@SDLSystemCapabilityManagerError@SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays":{"name":"SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays","abstract":"

    Undocumented

    ","parent_name":"SDLSystemCapabilityManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorPendingPresentationDeleted":{"name":"SDLChoiceSetManagerErrorPendingPresentationDeleted","abstract":"

    The choice set has been deleted before it was presented

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorDeletionFailed":{"name":"SDLChoiceSetManagerErrorDeletionFailed","abstract":"

    The choice set failed to delete

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorUploadFailed":{"name":"SDLChoiceSetManagerErrorUploadFailed","abstract":"

    The upload failed

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorFailedToCreateMenuItems":{"name":"SDLChoiceSetManagerErrorFailedToCreateMenuItems","abstract":"

    The menu items failed to be created

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorInvalidState":{"name":"SDLChoiceSetManagerErrorInvalidState","abstract":"

    Invalid state

    ","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLMenuManagerError.html#/c:@E@SDLMenuManagerError@SDLMenuManagerErrorRPCsFailed":{"name":"SDLMenuManagerErrorRPCsFailed","abstract":"

    Sending menu-related RPCs returned an error from the remote system

    ","parent_name":"SDLMenuManagerError"},"Enums/SDLSoftButtonManagerError.html#/c:@E@SDLSoftButtonManagerError@SDLSoftButtonManagerErrorPendingUpdateSuperseded":{"name":"SDLSoftButtonManagerErrorPendingUpdateSuperseded","abstract":"

    A pending update was superseded by a newer requested update. The old update will not be sent

    ","parent_name":"SDLSoftButtonManagerError"},"Enums/SDLTextAndGraphicManagerError.html#/c:@E@SDLTextAndGraphicManagerError@SDLTextAndGraphicManagerErrorPendingUpdateSuperseded":{"name":"SDLTextAndGraphicManagerErrorPendingUpdateSuperseded","abstract":"

    A pending update was superseded by a newer requested update. The old update will not be sent

    ","parent_name":"SDLTextAndGraphicManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorCannotOverwrite":{"name":"SDLFileManagerErrorCannotOverwrite","abstract":"

    A file attempted to send, but a file with that name already exists on the remote head unit, and the file was not configured to overwrite.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorNoKnownFile":{"name":"SDLFileManagerErrorNoKnownFile","abstract":"

    A file was attempted to be accessed but it does not exist.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToStart":{"name":"SDLFileManagerErrorUnableToStart","abstract":"

    The file manager attempted to start but encountered an error.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToUpload":{"name":"SDLFileManagerErrorUnableToUpload","abstract":"

    The file manager was unable to send this file.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDoesNotExist":{"name":"SDLFileManagerErrorFileDoesNotExist","abstract":"

    The file manager could not find the local file.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerUploadCanceled":{"name":"SDLFileManagerUploadCanceled","abstract":"

    The file upload was canceled.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileUploadTasksFailed":{"name":"SDLFileManagerMultipleFileUploadTasksFailed","abstract":"

    One or more of multiple files being uploaded or deleted failed.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileDeleteTasksFailed":{"name":"SDLFileManagerMultipleFileDeleteTasksFailed","abstract":"

    One or more of multiple files being uploaded or deleted failed.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDataMissing":{"name":"SDLFileManagerErrorFileDataMissing","abstract":"

    The file data is nil or empty.

    ","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorStaticIcon":{"name":"SDLFileManagerErrorStaticIcon","abstract":"

    The file is a static icon, which cannot be uploaded

    ","parent_name":"SDLFileManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRPCRequestFailed":{"name":"SDLManagerErrorRPCRequestFailed","abstract":"

    An RPC request failed to send.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotConnected":{"name":"SDLManagerErrorNotConnected","abstract":"

    Some action was attempted that requires a connection to the remote head unit.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotReady":{"name":"SDLManagerErrorNotReady","abstract":"

    Some action was attempted before the ready state was reached.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorUnknownRemoteError":{"name":"SDLManagerErrorUnknownRemoteError","abstract":"

    The remote system encountered an unknown error.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorManagersFailedToStart":{"name":"SDLManagerErrorManagersFailedToStart","abstract":"

    One or more of the sub-managers failed to start.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationFailed":{"name":"SDLManagerErrorRegistrationFailed","abstract":"

    Registering with the remote system failed.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationSuccessWithWarning":{"name":"SDLManagerErrorRegistrationSuccessWithWarning","abstract":"

    Registering with the remote system was successful, but had a warning.

    ","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorCancelled":{"name":"SDLManagerErrorCancelled","abstract":"

    Request operations were cancelled before they could be sent

    ","parent_name":"SDLManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorNotConnected":{"name":"SDLEncryptionLifecycleManagerErrorNotConnected","abstract":"

    Some action was attempted that requires a connection to the remote head unit.

    ","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorEncryptionOff":{"name":"SDLEncryptionLifecycleManagerErrorEncryptionOff","abstract":"

    Received ACK with encryption bit set to false from the remote head unit

    ","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorNAK":{"name":"SDLEncryptionLifecycleManagerErrorNAK","abstract":"

    Received NAK from the remote head unit.

    ","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutList":{"name":"SDLChoiceSetLayoutList","abstract":"

    Menu items will be displayed in a list

    ","parent_name":"SDLChoiceSetLayout"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutTiles":{"name":"SDLChoiceSetLayoutTiles","abstract":"

    Menu items will be displayed as a tiled list

    ","parent_name":"SDLChoiceSetLayout"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNotConnected":{"name":"SDLAudioStreamManagerErrorNotConnected","abstract":"

    The audio stream is not currently connected

    ","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNoQueuedAudio":{"name":"SDLAudioStreamManagerErrorNoQueuedAudio","abstract":"

    Attempted to play but there’s no audio in the queue

    ","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatPNG":{"name":"SDLArtworkImageFormatPNG","abstract":"

    Image format: PNG

    ","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatJPG":{"name":"SDLArtworkImageFormatJPG","abstract":"

    Image format: JPG

    ","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html":{"name":"SDLArtworkImageFormat","abstract":"

    Image format of an artwork file

    "},"Enums/SDLAudioStreamManagerError.html":{"name":"SDLAudioStreamManagerError","abstract":"

    AudioStreamManager errors

    "},"Enums/SDLChoiceSetLayout.html":{"name":"SDLChoiceSetLayout","abstract":"

    The layout to use when a choice set is displayed

    "},"Enums/SDLEncryptionLifecycleManagerError.html":{"name":"SDLEncryptionLifecycleManagerError","abstract":"

    Errors associated with the SDLManager class.

    "},"Enums/SDLManagerError.html":{"name":"SDLManagerError","abstract":"

    Errors associated with the SDLManager class.

    "},"Enums/SDLFileManagerError.html":{"name":"SDLFileManagerError","abstract":"

    Errors associated with the SDLFileManager class.

    "},"Enums/SDLTextAndGraphicManagerError.html":{"name":"SDLTextAndGraphicManagerError","abstract":"

    Errors associated with the ScreenManager class

    "},"Enums/SDLSoftButtonManagerError.html":{"name":"SDLSoftButtonManagerError","abstract":"

    Errors associated with the ScreenManager class

    "},"Enums/SDLMenuManagerError.html":{"name":"SDLMenuManagerError","abstract":"

    Errors associated with the ScreenManager class

    "},"Enums/SDLChoiceSetManagerError.html":{"name":"SDLChoiceSetManagerError","abstract":"

    Errors associated with Choice Set class

    "},"Enums/SDLSystemCapabilityManagerError.html":{"name":"SDLSystemCapabilityManagerError","abstract":"

    Undocumented

    "},"Enums/SDLTransportError.html":{"name":"SDLTransportError","abstract":"

    Errors associated with transport.

    "},"Enums/SDLRPCStoreError.html":{"name":"SDLRPCStoreError","abstract":"

    Errors associated with store.

    "},"Enums/SDLCacheFileManagerError.html":{"name":"SDLCacheFileManagerError","abstract":"

    Undocumented

    "},"Enums/SDLSecondaryTransports.html":{"name":"SDLSecondaryTransports","abstract":"

    List of secondary transports

    "},"Enums/SDLLockScreenConfigurationDisplayMode.html":{"name":"SDLLockScreenConfigurationDisplayMode","abstract":"

    Describes when the lock screen should be shown.

    "},"Enums/SDLLogBytesDirection.html":{"name":"SDLLogBytesDirection","abstract":"

    An enum describing log bytes direction

    "},"Enums/SDLLogFlag.html":{"name":"SDLLogFlag","abstract":"

    Flags used for SDLLogLevel to provide correct enum values. This is purely for internal use.

    "},"Enums/SDLLogLevel.html":{"name":"SDLLogLevel","abstract":"

    An enum describing a level of logging.

    "},"Enums/SDLLogFormatType.html":{"name":"SDLLogFormatType","abstract":"

    The output format of logs; how they will appear when printed out into a string.

    "},"Enums/SDLDynamicMenuUpdatesMode.html":{"name":"SDLDynamicMenuUpdatesMode","abstract":"

    Dynamic Menu Manager Mode

    "},"Enums/MenuCellState.html":{"name":"MenuCellState","abstract":"

    Menu cell state

    "},"Enums/SDLPermissionGroupType.html":{"name":"SDLPermissionGroupType","abstract":"

    A permission group type which will be used to tell the system what type of changes you want to be notified about for the group.

    "},"Enums/SDLPermissionGroupStatus.html":{"name":"SDLPermissionGroupStatus","abstract":"

    The status of the group of RPCs permissions.

    "},"Enums/SDLPredefinedWindows.html":{"name":"SDLPredefinedWindows","abstract":"

    Specifies which windows and IDs are predefined and pre-created on behalf of the app. The default window is always available and represents the app window on the main display. It’s an equivalent to today’s app window. For backward compatibility, this will ensure the app always has at least the default window on the main display. The app can choose to use this predefined enum element to specifically address app’s main window or to duplicate window content. It is not possible to duplicate another window to the default window. The primary widget is a special widget, that can be associated with a service type, which is used by the HMI whenever a single widget needs to represent the whole app. The primary widget should be named as the app and can be pre-created by the HMI.

    "},"Enums/SDLFrameType.html":{"name":"SDLFrameType","abstract":"

    The data packet’s header and payload combination.

    "},"Enums/SDLServiceType.html":{"name":"SDLServiceType","abstract":"

    The data packet’s format and priority.

    "},"Enums/SDLFrameInfo.html":{"name":"SDLFrameInfo","abstract":"

    The data packet’s available data.

    "},"Enums/SDLRPCMessageType.html":{"name":"SDLRPCMessageType","abstract":"

    The type of RPC message

    "},"Enums/SDLCarWindowRenderingType.html":{"name":"SDLCarWindowRenderingType","abstract":"

    The type of rendering that CarWindow will perform. Depending on your app, you may need to try different ones for best performance

    "},"Enums/SDLStreamingEncryptionFlag.html":{"name":"SDLStreamingEncryptionFlag","abstract":"

    A flag determining how video and audio streaming should be encrypted

    "},"Constants.html#/c:@SDLAmbientLightStatusNight":{"name":"SDLAmbientLightStatusNight","abstract":"

    Represents a “night” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusTwilight1":{"name":"SDLAmbientLightStatusTwilight1","abstract":"

    Represents a “twilight 1” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusTwilight2":{"name":"SDLAmbientLightStatusTwilight2","abstract":"

    Represents a “twilight 2” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusTwilight3":{"name":"SDLAmbientLightStatusTwilight3","abstract":"

    Represents a “twilight 3” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusTwilight4":{"name":"SDLAmbientLightStatusTwilight4","abstract":"

    Represents a “twilight 4” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusDay":{"name":"SDLAmbientLightStatusDay","abstract":"

    Represents a “day” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusUnknown":{"name":"SDLAmbientLightStatusUnknown","abstract":"

    Represents an “unknown” ambient light status

    "},"Constants.html#/c:@SDLAmbientLightStatusInvalid":{"name":"SDLAmbientLightStatusInvalid","abstract":"

    Represents a “invalid” ambient light status

    "},"Constants.html#/c:@SDLAppHMITypeDefault":{"name":"SDLAppHMITypeDefault","abstract":"

    The App will have default rights.

    "},"Constants.html#/c:@SDLAppHMITypeCommunication":{"name":"SDLAppHMITypeCommunication","abstract":"

    Communication type of App

    "},"Constants.html#/c:@SDLAppHMITypeMedia":{"name":"SDLAppHMITypeMedia","abstract":"

    App dealing with Media

    "},"Constants.html#/c:@SDLAppHMITypeMessaging":{"name":"SDLAppHMITypeMessaging","abstract":"

    Messaging App

    "},"Constants.html#/c:@SDLAppHMITypeNavigation":{"name":"SDLAppHMITypeNavigation","abstract":"

    Navigation App

    "},"Constants.html#/c:@SDLAppHMITypeInformation":{"name":"SDLAppHMITypeInformation","abstract":"

    Information App

    "},"Constants.html#/c:@SDLAppHMITypeSocial":{"name":"SDLAppHMITypeSocial","abstract":"

    App dealing with social media

    "},"Constants.html#/c:@SDLAppHMITypeProjection":{"name":"SDLAppHMITypeProjection","abstract":"

    App dealing with Mobile Projection applications

    "},"Constants.html#/c:@SDLAppHMITypeBackgroundProcess":{"name":"SDLAppHMITypeBackgroundProcess","abstract":"

    App designed for use in the background

    "},"Constants.html#/c:@SDLAppHMITypeTesting":{"name":"SDLAppHMITypeTesting","abstract":"

    App only for Testing purposes

    "},"Constants.html#/c:@SDLAppHMITypeSystem":{"name":"SDLAppHMITypeSystem","abstract":"

    System App

    "},"Constants.html#/c:@SDLAppHMITypeRemoteControl":{"name":"SDLAppHMITypeRemoteControl","abstract":"

    Remote control

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonIgnitionOff":{"name":"SDLAppInterfaceUnregisteredReasonIgnitionOff","abstract":"

    Vehicle ignition turned off.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonBluetoothOff":{"name":"SDLAppInterfaceUnregisteredReasonBluetoothOff","abstract":"

    Bluetooth was turned off, causing termination of a necessary Bluetooth connection.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUSBDisconnected":{"name":"SDLAppInterfaceUnregisteredReasonUSBDisconnected","abstract":"

    USB was disconnected, causing termination of a necessary iAP connection.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel":{"name":"SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel","abstract":"

    Application attempted SmartDeviceLink RPC request while HMILevel = NONE. App must have HMILevel other than NONE to issue RPC requests or get notifications or RPC responses.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonTooManyRequests":{"name":"SDLAppInterfaceUnregisteredReasonTooManyRequests","abstract":"

    Either too many – or too many per unit of time – requests were made by the application.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonDriverDistractionViolation":{"name":"SDLAppInterfaceUnregisteredReasonDriverDistractionViolation","abstract":"

    The application has issued requests which cause driver distraction rules to be violated.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonLanguageChange":{"name":"SDLAppInterfaceUnregisteredReasonLanguageChange","abstract":"

    The user performed a language change on the SDL platform, causing the application to need to be reregistered for the new language.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonMasterReset":{"name":"SDLAppInterfaceUnregisteredReasonMasterReset","abstract":"

    The user performed a MASTER RESET on the SDL platform, causing removal of a necessary Bluetooth pairing.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonFactoryDefaults":{"name":"SDLAppInterfaceUnregisteredReasonFactoryDefaults","abstract":"

    The user restored settings to FACTORY DEFAULTS on the SDL platform.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonAppUnauthorized":{"name":"SDLAppInterfaceUnregisteredReasonAppUnauthorized","abstract":"

    The app is not being authorized to be connected to SDL.

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonProtocolViolation":{"name":"SDLAppInterfaceUnregisteredReasonProtocolViolation","abstract":"

    The app could not register due to a protocol violation

    "},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource":{"name":"SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource","abstract":"

    The HMI resource is unsupported

    "},"Constants.html#/c:@SDLAppServiceTypeMedia":{"name":"SDLAppServiceTypeMedia","abstract":"

    The app will have a service type of media.

    "},"Constants.html#/c:@SDLAppServiceTypeWeather":{"name":"SDLAppServiceTypeWeather","abstract":"

    The app will have a service type of weather.

    "},"Constants.html#/c:@SDLAppServiceTypeNavigation":{"name":"SDLAppServiceTypeNavigation","abstract":"

    The app will have a service type of navigation.

    "},"Constants.html#/c:@SDLErrorDomainAudioStreamManager":{"name":"SDLErrorDomainAudioStreamManager","abstract":"

    Error relates to AudioStreamManager

    "},"Constants.html#/c:@SDLAudioStreamingIndicatorPlayPause":{"name":"SDLAudioStreamingIndicatorPlayPause","abstract":"

    Default playback indicator."},"Constants.html#/c:@SDLAudioStreamingIndicatorPlay":{"name":"SDLAudioStreamingIndicatorPlay","abstract":"

    Indicates that a button press of the Play/Pause button starts the audio playback.

    "},"Constants.html#/c:@SDLAudioStreamingIndicatorPause":{"name":"SDLAudioStreamingIndicatorPause","abstract":"

    Indicates that a button press of the Play/Pause button pauses the current audio playback.

    "},"Constants.html#/c:@SDLAudioStreamingIndicatorStop":{"name":"SDLAudioStreamingIndicatorStop","abstract":"

    Indicates that a button press of the Play/Pause button stops the current audio playback.

    "},"Constants.html#/c:@SDLAudioStreamingStateAudible":{"name":"SDLAudioStreamingStateAudible","abstract":"

    Currently streaming audio, if any, is audible to user.

    "},"Constants.html#/c:@SDLAudioStreamingStateAttenuated":{"name":"SDLAudioStreamingStateAttenuated","abstract":"

    Some kind of audio mixing is taking place. Currently streaming audio, if any, is audible to the user at a lowered volume.

    "},"Constants.html#/c:@SDLAudioStreamingStateNotAudible":{"name":"SDLAudioStreamingStateNotAudible","abstract":"

    Currently streaming audio, if any, is not audible to user. made via VR session.

    "},"Constants.html#/c:@SDLAudioTypePCM":{"name":"SDLAudioTypePCM","abstract":"

    PCM raw audio

    "},"Constants.html#/c:@SDLBitsPerSample8Bit":{"name":"SDLBitsPerSample8Bit","abstract":"

    8 bits per sample

    "},"Constants.html#/c:@SDLBitsPerSample16Bit":{"name":"SDLBitsPerSample16Bit","abstract":"

    16 bits per sample

    "},"Constants.html#/c:@SDLButtonEventModeButtonUp":{"name":"SDLButtonEventModeButtonUp","abstract":"

    The button was released

    "},"Constants.html#/c:@SDLButtonEventModeButtonDown":{"name":"SDLButtonEventModeButtonDown","abstract":"

    The button was depressed

    "},"Constants.html#/c:@SDLButtonNameOk":{"name":"SDLButtonNameOk","abstract":"

    Represents the button usually labeled “OK”. A typical use of this button is for the user to press it to make a selection. Prior to SDL Core 5.0 (iOS Proxy v.6.1), Ok was used for both “OK” buttons AND PlayPause. In 5.0, PlayPause was introduced to reduce confusion, and you should use the one you intend for your use case (usually PlayPause). Until the next proxy breaking change, however, subscribing to this button name will continue to subscribe you to PlayPause so that your code does not break. That means that if you subscribe to both Ok and PlayPause, you will receive duplicate notifications.

    "},"Constants.html#/c:@SDLButtonNamePlayPause":{"name":"SDLButtonNamePlayPause","abstract":"

    Represents the play/pause button for media apps. Replaces “OK” on sub-5.0 head units, compliments it on 5.0 head units and later.

    "},"Constants.html#/c:@SDLButtonNameSeekLeft":{"name":"SDLButtonNameSeekLeft","abstract":"

    Represents the seek-left button. A typical use of this button is for the user to scroll to the left through menu choices one menu item per press.

    "},"Constants.html#/c:@SDLButtonNameSeekRight":{"name":"SDLButtonNameSeekRight","abstract":"

    Represents the seek-right button. A typical use of this button is for the user to scroll to the right through menu choices one menu item per press.

    "},"Constants.html#/c:@SDLButtonNameTuneUp":{"name":"SDLButtonNameTuneUp","abstract":"

    Represents a turn of the tuner knob in the clockwise direction one tick.

    "},"Constants.html#/c:@SDLButtonNameTuneDown":{"name":"SDLButtonNameTuneDown","abstract":"

    Represents a turn of the tuner knob in the counter-clockwise direction one tick.

    "},"Constants.html#/c:@SDLButtonNamePreset0":{"name":"SDLButtonNamePreset0","abstract":"

    Represents the preset 0 button.

    "},"Constants.html#/c:@SDLButtonNamePreset1":{"name":"SDLButtonNamePreset1","abstract":"

    Represents the preset 1 button.

    "},"Constants.html#/c:@SDLButtonNamePreset2":{"name":"SDLButtonNamePreset2","abstract":"

    Represents the preset 2 button.

    "},"Constants.html#/c:@SDLButtonNamePreset3":{"name":"SDLButtonNamePreset3","abstract":"

    Represents the preset 3 button.

    "},"Constants.html#/c:@SDLButtonNamePreset4":{"name":"SDLButtonNamePreset4","abstract":"

    Represents the preset 4 button.

    "},"Constants.html#/c:@SDLButtonNamePreset5":{"name":"SDLButtonNamePreset5","abstract":"

    Represents the preset 5 button.

    "},"Constants.html#/c:@SDLButtonNamePreset6":{"name":"SDLButtonNamePreset6","abstract":"

    Represents the preset 6 button.

    "},"Constants.html#/c:@SDLButtonNamePreset7":{"name":"SDLButtonNamePreset7","abstract":"

    Represents the preset 7 button.

    "},"Constants.html#/c:@SDLButtonNamePreset8":{"name":"SDLButtonNamePreset8","abstract":"

    Represents the preset 8 button.

    "},"Constants.html#/c:@SDLButtonNamePreset9":{"name":"SDLButtonNamePreset9","abstract":"

    Represents the preset 9 button.

    "},"Constants.html#/c:@SDLButtonNameCustomButton":{"name":"SDLButtonNameCustomButton","abstract":"

    Represents the Custom button.

    "},"Constants.html#/c:@SDLButtonNameSearch":{"name":"SDLButtonNameSearch","abstract":"

    Represents the SEARCH button.

    "},"Constants.html#/c:@SDLButtonNameACMax":{"name":"SDLButtonNameACMax","abstract":"

    Represents AC max button *

    "},"Constants.html#/c:@SDLButtonNameAC":{"name":"SDLButtonNameAC","abstract":"

    Represents AC button *

    "},"Constants.html#/c:@SDLButtonNameRecirculate":{"name":"SDLButtonNameRecirculate","abstract":"

    Represents a Recirculate button

    "},"Constants.html#/c:@SDLButtonNameFanUp":{"name":"SDLButtonNameFanUp","abstract":"

    Represents a Fan up button

    "},"Constants.html#/c:@SDLButtonNameFanDown":{"name":"SDLButtonNameFanDown","abstract":"

    Represents a fan down button

    "},"Constants.html#/c:@SDLButtonNameTempUp":{"name":"SDLButtonNameTempUp","abstract":"

    Represents a temperature up button

    "},"Constants.html#/c:@SDLButtonNameTempDown":{"name":"SDLButtonNameTempDown","abstract":"

    Represents a temperature down button

    "},"Constants.html#/c:@SDLButtonNameDefrostMax":{"name":"SDLButtonNameDefrostMax","abstract":"

    Represents a Defrost max button.

    "},"Constants.html#/c:@SDLButtonNameDefrost":{"name":"SDLButtonNameDefrost","abstract":"

    Represents a Defrost button.

    "},"Constants.html#/c:@SDLButtonNameDefrostRear":{"name":"SDLButtonNameDefrostRear","abstract":"

    Represents a Defrost rear button.

    "},"Constants.html#/c:@SDLButtonNameUpperVent":{"name":"SDLButtonNameUpperVent","abstract":"

    Represents a Upper Vent button.

    "},"Constants.html#/c:@SDLButtonNameLowerVent":{"name":"SDLButtonNameLowerVent","abstract":"

    Represents a Lower vent button.

    "},"Constants.html#/c:@SDLButtonNameVolumeUp":{"name":"SDLButtonNameVolumeUp","abstract":"

    Represents a volume up button.

    "},"Constants.html#/c:@SDLButtonNameVolumeDown":{"name":"SDLButtonNameVolumeDown","abstract":"

    Represents a volume down button.

    "},"Constants.html#/c:@SDLButtonNameEject":{"name":"SDLButtonNameEject","abstract":"

    Represents a Eject Button.

    "},"Constants.html#/c:@SDLButtonNameSource":{"name":"SDLButtonNameSource","abstract":"

    Represents a Source button.

    "},"Constants.html#/c:@SDLButtonNameShuffle":{"name":"SDLButtonNameShuffle","abstract":"

    Represents a SHUFFLE button.

    "},"Constants.html#/c:@SDLButtonNameRepeat":{"name":"SDLButtonNameRepeat","abstract":"

    Represents a Repeat button.

    "},"Constants.html#/c:@SDLButtonNameNavCenterLocation":{"name":"SDLButtonNameNavCenterLocation","abstract":"

    Represents a Navigate to center button.

    "},"Constants.html#/c:@SDLButtonNameNavZoomIn":{"name":"SDLButtonNameNavZoomIn","abstract":"

    Represents a Zoom in button.

    "},"Constants.html#/c:@SDLButtonNameNavZoomOut":{"name":"SDLButtonNameNavZoomOut","abstract":"

    Represents a Zoom out button.

    "},"Constants.html#/c:@SDLButtonNameNavPanUp":{"name":"SDLButtonNameNavPanUp","abstract":"

    Represents a Pan up button

    "},"Constants.html#/c:@SDLButtonNameNavPanUpRight":{"name":"SDLButtonNameNavPanUpRight","abstract":"

    Represents a Pan up/right button

    "},"Constants.html#/c:@SDLButtonNameNavPanRight":{"name":"SDLButtonNameNavPanRight","abstract":"

    Represents a Pan right button

    "},"Constants.html#/c:@SDLButtonNameNavPanDownRight":{"name":"SDLButtonNameNavPanDownRight","abstract":"

    Represents a Pan down/right button

    "},"Constants.html#/c:@SDLButtonNameNavPanDown":{"name":"SDLButtonNameNavPanDown","abstract":"

    Represents a Pan down button

    "},"Constants.html#/c:@SDLButtonNameNavPanDownLeft":{"name":"SDLButtonNameNavPanDownLeft","abstract":"

    Represents a Pan down left button

    "},"Constants.html#/c:@SDLButtonNameNavPanLeft":{"name":"SDLButtonNameNavPanLeft","abstract":"

    Represents a Pan left button

    "},"Constants.html#/c:@SDLButtonNameNavPanUpLeft":{"name":"SDLButtonNameNavPanUpLeft","abstract":"

    Represents a Pan up left button

    "},"Constants.html#/c:@SDLButtonNameNavTiltToggle":{"name":"SDLButtonNameNavTiltToggle","abstract":"

    Represents a Tilt button. If supported, this toggles between a top-down view and an angled/3D view. If your app supports different, but substantially similar options, then you may implement those. If you don’t implement these or similar options, do not subscribe to this button.

    "},"Constants.html#/c:@SDLButtonNameNavRotateClockwise":{"name":"SDLButtonNameNavRotateClockwise","abstract":"

    Represents a Rotate clockwise button

    "},"Constants.html#/c:@SDLButtonNameNavRotateCounterClockwise":{"name":"SDLButtonNameNavRotateCounterClockwise","abstract":"

    Represents a Rotate counterclockwise button

    "},"Constants.html#/c:@SDLButtonNameNavHeadingToggle":{"name":"SDLButtonNameNavHeadingToggle","abstract":"

    Represents a Heading toggle button. If supported, this toggles between locking the orientation to north or to the vehicle’s heading. If your app supports different, but substantially similar options, then you may implement those. If you don’t implement these or similar options, do not subscribe to this button.

    "},"Constants.html#/c:@SDLButtonPressModeLong":{"name":"SDLButtonPressModeLong","abstract":"

    A button was released, after it was pressed for a long time. Actual timing is defined by the head unit and may vary.

    "},"Constants.html#/c:@SDLButtonPressModeShort":{"name":"SDLButtonPressModeShort","abstract":"

    A button was released, after it was pressed for a short time. Actual timing is defined by the head unit and may vary.

    "},"Constants.html#/c:@SDLCarModeStatusNormal":{"name":"SDLCarModeStatusNormal","abstract":"

    Provides carmode NORMAL to each module.

    "},"Constants.html#/c:@SDLCarModeStatusFactory":{"name":"SDLCarModeStatusFactory","abstract":"

    Provides carmode FACTORY to each module.

    "},"Constants.html#/c:@SDLCarModeStatusTransport":{"name":"SDLCarModeStatusTransport","abstract":"

    Provides carmode TRANSPORT to each module.

    "},"Constants.html#/c:@SDLCarModeStatusCrash":{"name":"SDLCarModeStatusCrash","abstract":"

    Provides carmode CRASH to each module.

    "},"Constants.html#/c:@SDLCharacterSetType2":{"name":"SDLCharacterSetType2","abstract":"

    Character Set Type 2

    "},"Constants.html#/c:@SDLCharacterSetType5":{"name":"SDLCharacterSetType5","abstract":"

    Character Set Type 5

    "},"Constants.html#/c:@SDLCharacterSetCID1":{"name":"SDLCharacterSetCID1","abstract":"

    Character Set CID1

    "},"Constants.html#/c:@SDLCharacterSetCID2":{"name":"SDLCharacterSetCID2","abstract":"

    Character Set CID2

    "},"Constants.html#/c:@SDLCompassDirectionNorth":{"name":"SDLCompassDirectionNorth","abstract":"

    Direction North

    "},"Constants.html#/c:@SDLCompassDirectionNorthwest":{"name":"SDLCompassDirectionNorthwest","abstract":"

    Direction Northwest

    "},"Constants.html#/c:@SDLCompassDirectionWest":{"name":"SDLCompassDirectionWest","abstract":"

    Direction West

    "},"Constants.html#/c:@SDLCompassDirectionSouthwest":{"name":"SDLCompassDirectionSouthwest","abstract":"

    Direction Southwest

    "},"Constants.html#/c:@SDLCompassDirectionSouth":{"name":"SDLCompassDirectionSouth","abstract":"

    Direction South

    "},"Constants.html#/c:@SDLCompassDirectionSoutheast":{"name":"SDLCompassDirectionSoutheast","abstract":"

    Direction Southeast

    "},"Constants.html#/c:@SDLCompassDirectionEast":{"name":"SDLCompassDirectionEast","abstract":"

    Direction East

    "},"Constants.html#/c:@SDLCompassDirectionNortheast":{"name":"SDLCompassDirectionNortheast","abstract":"

    Direction Northeast

    "},"Constants.html#/c:@SDLComponentVolumeStatusUnknown":{"name":"SDLComponentVolumeStatusUnknown","abstract":"

    Unknown SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusNormal":{"name":"SDLComponentVolumeStatusNormal","abstract":"

    Normal SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusLow":{"name":"SDLComponentVolumeStatusLow","abstract":"

    Low SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusFault":{"name":"SDLComponentVolumeStatusFault","abstract":"

    Fault SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusAlert":{"name":"SDLComponentVolumeStatusAlert","abstract":"

    Alert SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLComponentVolumeStatusNotSupported":{"name":"SDLComponentVolumeStatusNotSupported","abstract":"

    Not supported SDLComponentVolumeStatus

    "},"Constants.html#/c:@SDLDefrostZoneFront":{"name":"SDLDefrostZoneFront","abstract":"

    A SDLDefrostZone with the value of FRONT

    "},"Constants.html#/c:@SDLDefrostZoneRear":{"name":"SDLDefrostZoneRear","abstract":"

    A SDLDefrostZone with the value of REAR

    "},"Constants.html#/c:@SDLDefrostZoneAll":{"name":"SDLDefrostZoneAll","abstract":"

    A SDLDefrostZone with the value of All

    "},"Constants.html#/c:@SDLDefrostZoneNone":{"name":"SDLDefrostZoneNone","abstract":"

    A SDLDefrostZone with the value of None

    "},"Constants.html#/c:@SDLDeliveryModePrompt":{"name":"SDLDeliveryModePrompt","abstract":"

    User is prompted on HMI

    "},"Constants.html#/c:@SDLDeliveryModeDestination":{"name":"SDLDeliveryModeDestination","abstract":"

    Set the location as destination without prompting the user

    "},"Constants.html#/c:@SDLDeliveryModeQueue":{"name":"SDLDeliveryModeQueue","abstract":"

    Adds the current location to navigation queue

    "},"Constants.html#/c:@SDLDeviceLevelStatusZeroBars":{"name":"SDLDeviceLevelStatusZeroBars","abstract":"

    Device battery level is zero bars

    "},"Constants.html#/c:@SDLDeviceLevelStatusOneBar":{"name":"SDLDeviceLevelStatusOneBar","abstract":"

    Device battery level is one bar

    "},"Constants.html#/c:@SDLDeviceLevelStatusTwoBars":{"name":"SDLDeviceLevelStatusTwoBars","abstract":"

    Device battery level is two bars

    "},"Constants.html#/c:@SDLDeviceLevelStatusThreeBars":{"name":"SDLDeviceLevelStatusThreeBars","abstract":"

    Device battery level is three bars

    "},"Constants.html#/c:@SDLDeviceLevelStatusFourBars":{"name":"SDLDeviceLevelStatusFourBars","abstract":"

    Device battery level is four bars

    "},"Constants.html#/c:@SDLDeviceLevelStatusNotProvided":{"name":"SDLDeviceLevelStatusNotProvided","abstract":"

    Device battery level is unknown

    "},"Constants.html#/c:@SDLDimensionNoFix":{"name":"SDLDimensionNoFix","abstract":"

    No GPS at all

    "},"Constants.html#/c:@SDLDimension2D":{"name":"SDLDimension2D","abstract":"

    Longitude and latitude of the GPS

    "},"Constants.html#/c:@SDLDimension3D":{"name":"SDLDimension3D","abstract":"

    Longitude and latitude and altitude of the GPS

    "},"Constants.html#/c:@SDLDirectionLeft":{"name":"SDLDirectionLeft","abstract":"

    Direction left

    "},"Constants.html#/c:@SDLDirectionRight":{"name":"SDLDirectionRight","abstract":"

    Direction right

    "},"Constants.html#/c:@SDLDisplayModeDay":{"name":"SDLDisplayModeDay","abstract":"

    @abstract Display Mode : DAY

    "},"Constants.html#/c:@SDLDisplayModeNight":{"name":"SDLDisplayModeNight","abstract":"

    @abstract Display Mode : NIGHT.

    "},"Constants.html#/c:@SDLDisplayModeAuto":{"name":"SDLDisplayModeAuto","abstract":"

    @abstract Display Mode : AUTO.

    "},"Constants.html#/c:@SDLDisplayTypeCID":{"name":"SDLDisplayTypeCID","abstract":"

    This display type provides a 2-line x 20 character “dot matrix” display.

    "},"Constants.html#/c:@SDLDisplayTypeType2":{"name":"SDLDisplayTypeType2","abstract":"

    Display type 2

    "},"Constants.html#/c:@SDLDisplayTypeType5":{"name":"SDLDisplayTypeType5","abstract":"

    Display type 5

    "},"Constants.html#/c:@SDLDisplayTypeNGN":{"name":"SDLDisplayTypeNGN","abstract":"

    This display type provides an 8 inch touchscreen display.

    "},"Constants.html#/c:@SDLDisplayTypeGen28DMA":{"name":"SDLDisplayTypeGen28DMA","abstract":"

    Display type Gen 28 DMA

    "},"Constants.html#/c:@SDLDisplayTypeGen26DMA":{"name":"SDLDisplayTypeGen26DMA","abstract":"

    Display type Gen 26 DMA

    "},"Constants.html#/c:@SDLDisplayTypeMFD3":{"name":"SDLDisplayTypeMFD3","abstract":"

    Display type MFD3

    "},"Constants.html#/c:@SDLDisplayTypeMFD4":{"name":"SDLDisplayTypeMFD4","abstract":"

    Display type MFD4

    "},"Constants.html#/c:@SDLDisplayTypeMFD5":{"name":"SDLDisplayTypeMFD5","abstract":"

    Display type MFD5

    "},"Constants.html#/c:@SDLDisplayTypeGen38Inch":{"name":"SDLDisplayTypeGen38Inch","abstract":"

    Display type Gen 3 8-inch

    "},"Constants.html#/c:@SDLDisplayTypeGeneric":{"name":"SDLDisplayTypeGeneric","abstract":"

    Display type Generic

    "},"Constants.html#/c:@SDLDistanceUnitMiles":{"name":"SDLDistanceUnitMiles","abstract":"

    @abstract SDLDistanceUnit: MILES

    "},"Constants.html#/c:@SDLDistanceUnitKilometers":{"name":"SDLDistanceUnitKilometers","abstract":"

    @abstract SDLDistanceUnit: KILOMETERS

    "},"Constants.html#/c:@SDLDriverDistractionStateOn":{"name":"SDLDriverDistractionStateOn","abstract":"

    Driver distraction rules are in effect.

    "},"Constants.html#/c:@SDLDriverDistractionStateOff":{"name":"SDLDriverDistractionStateOff","abstract":"

    Driver distraction rules are NOT in effect.

    "},"Constants.html#/c:@SDLECallConfirmationStatusNormal":{"name":"SDLECallConfirmationStatusNormal","abstract":"

    No E-Call signal triggered.

    "},"Constants.html#/c:@SDLECallConfirmationStatusInProgress":{"name":"SDLECallConfirmationStatusInProgress","abstract":"

    An E-Call is being in progress.

    "},"Constants.html#/c:@SDLECallConfirmationStatusCancelled":{"name":"SDLECallConfirmationStatusCancelled","abstract":"

    An E-Call was cancelled by the user.

    "},"Constants.html#/c:@SDLECallConfirmationStatusCompleted":{"name":"SDLECallConfirmationStatusCompleted","abstract":"

    The E-Call sequence is completed.

    "},"Constants.html#/c:@SDLECallConfirmationStatusUnsuccessful":{"name":"SDLECallConfirmationStatusUnsuccessful","abstract":"

    An E-Call could not be connected.

    "},"Constants.html#/c:@SDLECallConfirmationStatusConfiguredOff":{"name":"SDLECallConfirmationStatusConfiguredOff","abstract":"

    E-Call is not configured on this vehicle.

    "},"Constants.html#/c:@SDLECallConfirmationStatusCompleteDTMFTimeout":{"name":"SDLECallConfirmationStatusCompleteDTMFTimeout","abstract":"

    E-Call is considered to be complete without Emergency Operator contact.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusClosed":{"name":"SDLElectronicParkBrakeStatusClosed","abstract":"

    Parking brake actuators have been fully applied.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusTransition":{"name":"SDLElectronicParkBrakeStatusTransition","abstract":"

    Parking brake actuators are transitioning to either Apply/Closed or Release/Open state.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusOpen":{"name":"SDLElectronicParkBrakeStatusOpen","abstract":"

    Parking brake actuators are released.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusDriveActive":{"name":"SDLElectronicParkBrakeStatusDriveActive","abstract":"

    When driver pulls the Electronic Parking Brake switch while driving “at speed”.

    "},"Constants.html#/c:@SDLElectronicParkBrakeStatusFault":{"name":"SDLElectronicParkBrakeStatusFault","abstract":"

    When system has a fault or is under maintenance.

    "},"Constants.html#/c:@SDLEmergencyEventTypeNoEvent":{"name":"SDLEmergencyEventTypeNoEvent","abstract":"

    No emergency event has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeFrontal":{"name":"SDLEmergencyEventTypeFrontal","abstract":"

    Frontal collision has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeSide":{"name":"SDLEmergencyEventTypeSide","abstract":"

    Side collision has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeRear":{"name":"SDLEmergencyEventTypeRear","abstract":"

    Rear collision has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeRollover":{"name":"SDLEmergencyEventTypeRollover","abstract":"

    A rollover event has happened.

    "},"Constants.html#/c:@SDLEmergencyEventTypeNotSupported":{"name":"SDLEmergencyEventTypeNotSupported","abstract":"

    The signal is not supported

    "},"Constants.html#/c:@SDLEmergencyEventTypeFault":{"name":"SDLEmergencyEventTypeFault","abstract":"

    Emergency status cannot be determined

    "},"Constants.html#/c:@SDLFileTypeBMP":{"name":"SDLFileTypeBMP","abstract":"

    file type: Bitmap (BMP)

    "},"Constants.html#/c:@SDLFileTypeJPEG":{"name":"SDLFileTypeJPEG","abstract":"

    file type: JPEG

    "},"Constants.html#/c:@SDLFileTypePNG":{"name":"SDLFileTypePNG","abstract":"

    file type: PNG

    "},"Constants.html#/c:@SDLFileTypeWAV":{"name":"SDLFileTypeWAV","abstract":"

    file type: WAVE (WAV)

    "},"Constants.html#/c:@SDLFileTypeMP3":{"name":"SDLFileTypeMP3","abstract":"

    file type: MP3

    "},"Constants.html#/c:@SDLFileTypeAAC":{"name":"SDLFileTypeAAC","abstract":"

    file type: AAC

    "},"Constants.html#/c:@SDLFileTypeBinary":{"name":"SDLFileTypeBinary","abstract":"

    file type: BINARY

    "},"Constants.html#/c:@SDLFileTypeJSON":{"name":"SDLFileTypeJSON","abstract":"

    file type: JSON

    "},"Constants.html#/c:@SDLFuelCutoffStatusTerminateFuel":{"name":"SDLFuelCutoffStatusTerminateFuel","abstract":"

    Fuel is cut off

    "},"Constants.html#/c:@SDLFuelCutoffStatusNormalOperation":{"name":"SDLFuelCutoffStatusNormalOperation","abstract":"

    Fuel is not cut off

    "},"Constants.html#/c:@SDLFuelCutoffStatusFault":{"name":"SDLFuelCutoffStatusFault","abstract":"

    Status of the fuel pump cannot be determined

    "},"Constants.html#/c:@SDLFuelTypeGasoline":{"name":"SDLFuelTypeGasoline","abstract":"

    Fuel type: Gasoline

    "},"Constants.html#/c:@SDLFuelTypeDiesel":{"name":"SDLFuelTypeDiesel","abstract":"

    Fuel type: Diesel

    "},"Constants.html#/c:@SDLFuelTypeCNG":{"name":"SDLFuelTypeCNG","abstract":"

    Fuel type: CNG

    "},"Constants.html#/c:@SDLFuelTypeLPG":{"name":"SDLFuelTypeLPG","abstract":"

    Fuel type: LPG

    "},"Constants.html#/c:@SDLFuelTypeHydrogen":{"name":"SDLFuelTypeHydrogen","abstract":"

    Fuel type: Hydrogen

    "},"Constants.html#/c:@SDLFuelTypeBattery":{"name":"SDLFuelTypeBattery","abstract":"

    Fuel type: Battery

    "},"Constants.html#/c:@SDLGlobalPropertyHelpPrompt":{"name":"SDLGlobalPropertyHelpPrompt","abstract":"

    The help prompt to be spoken if the user needs assistance during a user-initiated interaction.

    "},"Constants.html#/c:@SDLGlobalPropertyTimeoutPrompt":{"name":"SDLGlobalPropertyTimeoutPrompt","abstract":"

    The prompt to be spoken if the user-initiated interaction times out waiting for the user’s verbal input.

    "},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpTitle":{"name":"SDLGlobalPropertyVoiceRecognitionHelpTitle","abstract":"

    The title of the menu displayed when the user requests help via voice recognition.

    "},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpItems":{"name":"SDLGlobalPropertyVoiceRecognitionHelpItems","abstract":"

    Items of the menu displayed when the user requests help via voice recognition.

    "},"Constants.html#/c:@SDLGlobalPropertyMenuName":{"name":"SDLGlobalPropertyMenuName","abstract":"

    The name of the menu button displayed in templates

    "},"Constants.html#/c:@SDLGlobalPropertyMenuIcon":{"name":"SDLGlobalPropertyMenuIcon","abstract":"

    An icon on the menu button displayed in templates

    "},"Constants.html#/c:@SDLGlobalPropertyKeyboard":{"name":"SDLGlobalPropertyKeyboard","abstract":"

    Property related to the keyboard

    "},"Constants.html#/c:@SDLGlobalPropertyUserLocation":{"name":"SDLGlobalPropertyUserLocation","abstract":"

    Location of the user’s seat of setGlobalProperties

    "},"Constants.html#/c:@SDLHMILevelFull":{"name":"SDLHMILevelFull","abstract":"

    The application has full use of the SDL HMI. The app may output via TTS, display, or streaming audio and may gather input via VR, Menu, and button presses

    "},"Constants.html#/c:@SDLHMILevelLimited":{"name":"SDLHMILevelLimited","abstract":"

    This HMI Level is only defined for a media application using an HMI with an 8 inch touchscreen (Nav) system. The application’s Show text is displayed and it receives button presses from media-oriented buttons (SEEKRIGHT, SEEKLEFT, TUNEUP, TUNEDOWN, PRESET_0-9)

    "},"Constants.html#/c:@SDLHMILevelBackground":{"name":"SDLHMILevelBackground","abstract":"

    App cannot interact with user via TTS, VR, Display or Button Presses. App can perform the following operations:

    "},"Constants.html#/c:@SDLHMILevelNone":{"name":"SDLHMILevelNone","abstract":"

    Application has been discovered by SDL, but it cannot send any requests or receive any notifications

    "},"Constants.html#/c:@SDLHMIZoneCapabilitiesFront":{"name":"SDLHMIZoneCapabilitiesFront","abstract":"

    Indicates HMI available for front seat passengers.

    "},"Constants.html#/c:@SDLHMIZoneCapabilitiesBack":{"name":"SDLHMIZoneCapabilitiesBack","abstract":"

    Indicates HMI available for rear seat passengers.

    "},"Constants.html#/c:@SDLHybridAppPreferenceMobile":{"name":"SDLHybridAppPreferenceMobile","abstract":"

    App preference of mobile.

    "},"Constants.html#/c:@SDLHybridAppPreferenceCloud":{"name":"SDLHybridAppPreferenceCloud","abstract":"

    App preference of cloud.

    "},"Constants.html#/c:@SDLHybridAppPreferenceBoth":{"name":"SDLHybridAppPreferenceBoth","abstract":"

    App preference of both. Allows both the mobile and the cloud versions of the app to attempt to connect at the same time, however the first app that is registered is the one that is allowed to stay registered.

    "},"Constants.html#/c:@SDLIgnitionStableStatusNotStable":{"name":"SDLIgnitionStableStatusNotStable","abstract":"

    The current ignition switch status is considered not to be stable.

    "},"Constants.html#/c:@SDLIgnitionStableStatusStable":{"name":"SDLIgnitionStableStatusStable","abstract":"

    The current ignition switch status is considered to be stable.

    "},"Constants.html#/c:@SDLIgnitionStableStatusMissingFromTransmitter":{"name":"SDLIgnitionStableStatusMissingFromTransmitter","abstract":"

    The current ignition switch status is considered to be missing from the transmitter

    "},"Constants.html#/c:@SDLIgnitionStatusUnknown":{"name":"SDLIgnitionStatusUnknown","abstract":"

    Ignition status currently unknown

    "},"Constants.html#/c:@SDLIgnitionStatusOff":{"name":"SDLIgnitionStatusOff","abstract":"

    Ignition is off

    "},"Constants.html#/c:@SDLIgnitionStatusAccessory":{"name":"SDLIgnitionStatusAccessory","abstract":"

    Ignition is in mode accessory

    "},"Constants.html#/c:@SDLIgnitionStatusRun":{"name":"SDLIgnitionStatusRun","abstract":"

    Ignition is in mode run

    "},"Constants.html#/c:@SDLIgnitionStatusStart":{"name":"SDLIgnitionStatusStart","abstract":"

    Ignition is in mode start

    "},"Constants.html#/c:@SDLIgnitionStatusInvalid":{"name":"SDLIgnitionStatusInvalid","abstract":"

    Signal is invalid

    "},"Constants.html#/c:@SDLImageFieldNameAlertIcon":{"name":"SDLImageFieldNameAlertIcon","abstract":"

    The image field for Alert

    "},"Constants.html#/c:@SDLImageFieldNameSoftButtonImage":{"name":"SDLImageFieldNameSoftButtonImage","abstract":"

    The image field for SoftButton

    "},"Constants.html#/c:@SDLImageFieldNameChoiceImage":{"name":"SDLImageFieldNameChoiceImage","abstract":"

    The first image field for Choice.

    "},"Constants.html#/c:@SDLImageFieldNameChoiceSecondaryImage":{"name":"SDLImageFieldNameChoiceSecondaryImage","abstract":"

    The scondary image field for Choice.

    "},"Constants.html#/c:@SDLImageFieldNameVoiceRecognitionHelpItem":{"name":"SDLImageFieldNameVoiceRecognitionHelpItem","abstract":"

    The image field for vrHelpItem.

    "},"Constants.html#/c:@SDLImageFieldNameTurnIcon":{"name":"SDLImageFieldNameTurnIcon","abstract":"

    The image field for Turn.

    "},"Constants.html#/c:@SDLImageFieldNameMenuIcon":{"name":"SDLImageFieldNameMenuIcon","abstract":"

    The image field for the menu icon in SetGlobalProperties.

    "},"Constants.html#/c:@SDLImageFieldNameCommandIcon":{"name":"SDLImageFieldNameCommandIcon","abstract":"

    The image field for AddCommand."},"Constants.html#/c:@SDLImageFieldNameAppIcon":{"name":"SDLImageFieldNameAppIcon","abstract":"

    The image field for the app icon (set by setAppIcon).

    "},"Constants.html#/c:@SDLImageFieldNameGraphic":{"name":"SDLImageFieldNameGraphic","abstract":"

    The primary image field for Show."},"Constants.html#/c:@SDLImageFieldNameSecondaryGraphic":{"name":"SDLImageFieldNameSecondaryGraphic","abstract":"

    The secondary image field for Show."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTIcon":{"name":"SDLImageFieldNameShowConstantTBTIcon","abstract":"

    The primary image field for ShowConstant TBT."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTNextTurnIcon":{"name":"SDLImageFieldNameShowConstantTBTNextTurnIcon","abstract":"

    The secondary image field for ShowConstant TBT.

    "},"Constants.html#/c:@SDLImageFieldNameLocationImage":{"name":"SDLImageFieldNameLocationImage","abstract":"

    The optional image of a destination / location

    "},"Constants.html#/c:@SDLImageTypeStatic":{"name":"SDLImageTypeStatic","abstract":"

    Activate an icon that shipped with the IVI system by passing a hex value.

    "},"Constants.html#/c:@SDLImageTypeDynamic":{"name":"SDLImageTypeDynamic","abstract":"

    An icon referencing an image uploaded by the app (identifier to be sent by SDLPutFile)

    "},"Constants.html#/c:@SDLInteractionModeManualOnly":{"name":"SDLInteractionModeManualOnly","abstract":"

    Interaction Mode : Manual Only

    "},"Constants.html#/c:@SDLInteractionModeVoiceRecognitionOnly":{"name":"SDLInteractionModeVoiceRecognitionOnly","abstract":"

    Interaction Mode : VR Only

    "},"Constants.html#/c:@SDLInteractionModeBoth":{"name":"SDLInteractionModeBoth","abstract":"

    Interaction Mode : Manual & VR

    "},"Constants.html#/c:@SDLKeyboardEventKeypress":{"name":"SDLKeyboardEventKeypress","abstract":"

    The use has pressed the keyboard key (applies to both SINGLE_KEYPRESS and RESEND_CURRENT_ENTRY modes).

    "},"Constants.html#/c:@SDLKeyboardEventSubmitted":{"name":"SDLKeyboardEventSubmitted","abstract":"

    The User has finished entering text from the keyboard and submitted the entry.

    "},"Constants.html#/c:@SDLKeyboardEventCancelled":{"name":"SDLKeyboardEventCancelled","abstract":"

    The User has pressed the HMI-defined “Cancel” button.

    "},"Constants.html#/c:@SDLKeyboardEventAborted":{"name":"SDLKeyboardEventAborted","abstract":"

    The User has not finished entering text and the keyboard is aborted with the event of higher priority.

    "},"Constants.html#/c:@SDLKeyboardEventVoice":{"name":"SDLKeyboardEventVoice","abstract":"

    The user used voice as input for the keyboard

    "},"Constants.html#/c:@SDLKeyboardLayoutQWERTY":{"name":"SDLKeyboardLayoutQWERTY","abstract":"

    QWERTY layout (the name comes from the first six keys
    appearing on the top left letter row of the keyboard and read from left to right)

    "},"Constants.html#/c:@SDLKeyboardLayoutQWERTZ":{"name":"SDLKeyboardLayoutQWERTZ","abstract":"

    QWERTZ layout (the name comes from the first six keys
    appearing on the top left letter row of the keyboard and read from left to right)

    "},"Constants.html#/c:@SDLKeyboardLayoutAZERTY":{"name":"SDLKeyboardLayoutAZERTY","abstract":"

    AZERTY layout (the name comes from the first six keys
    appearing on the top left letter row of the keyboard and read from left to right)

    "},"Constants.html#/c:@SDLKeypressModeSingleKeypress":{"name":"SDLKeypressModeSingleKeypress","abstract":"

    SINGLE_KEYPRESS:
    Each and every User`s keypress must be reported (new notification for every newly entered single symbol).

    "},"Constants.html#/c:@SDLKeypressModeQueueKeypresses":{"name":"SDLKeypressModeQueueKeypresses","abstract":"

    QUEUE_KEYPRESSES:
    The whole entry is reported only after the User submits it (by ‘Search’ button click displayed on touchscreen keyboard)

    "},"Constants.html#/c:@SDLKeypressModeResendCurrentEntry":{"name":"SDLKeypressModeResendCurrentEntry","abstract":"

    RESEND_CURRENT_ENTRY:
    The whole entry must be reported each and every time the User makes a new keypress
    (new notification with all previously entered symbols and a newly entered one appended).

    "},"Constants.html#/c:@SDLLanguageEnSa":{"name":"SDLLanguageEnSa","abstract":"

    English_SA

    "},"Constants.html#/c:@SDLLanguageHeIl":{"name":"SDLLanguageHeIl","abstract":"

    Hebrew_IL

    "},"Constants.html#/c:@SDLLanguageRoRo":{"name":"SDLLanguageRoRo","abstract":"

    Romainian_RO

    "},"Constants.html#/c:@SDLLanguageUkUa":{"name":"SDLLanguageUkUa","abstract":"

    Ukrainian_UA

    "},"Constants.html#/c:@SDLLanguageIdId":{"name":"SDLLanguageIdId","abstract":"

    Indonesian_ID

    "},"Constants.html#/c:@SDLLanguageViVn":{"name":"SDLLanguageViVn","abstract":"

    Vietnamese_VN

    "},"Constants.html#/c:@SDLLanguageMsMy":{"name":"SDLLanguageMsMy","abstract":"

    Malay_MY

    "},"Constants.html#/c:@SDLLanguageHiIn":{"name":"SDLLanguageHiIn","abstract":"

    Hindi_IN

    "},"Constants.html#/c:@SDLLanguageNlBe":{"name":"SDLLanguageNlBe","abstract":"

    Dutch(Flemish)_BE

    "},"Constants.html#/c:@SDLLanguageElGr":{"name":"SDLLanguageElGr","abstract":"

    Greek_GR

    "},"Constants.html#/c:@SDLLanguageHuHu":{"name":"SDLLanguageHuHu","abstract":"

    Hungarian_HU

    "},"Constants.html#/c:@SDLLanguageFiFi":{"name":"SDLLanguageFiFi","abstract":"

    Finnish_FI

    "},"Constants.html#/c:@SDLLanguageSkSk":{"name":"SDLLanguageSkSk","abstract":"

    Slovak_SK

    "},"Constants.html#/c:@SDLLanguageEnUs":{"name":"SDLLanguageEnUs","abstract":"

    English_US

    "},"Constants.html#/c:@SDLLanguageEnIn":{"name":"SDLLanguageEnIn","abstract":"

    English - India

    "},"Constants.html#/c:@SDLLanguageThTh":{"name":"SDLLanguageThTh","abstract":"

    Thai - Thailand

    "},"Constants.html#/c:@SDLLanguageEsMx":{"name":"SDLLanguageEsMx","abstract":"

    Spanish - Mexico

    "},"Constants.html#/c:@SDLLanguageFrCa":{"name":"SDLLanguageFrCa","abstract":"

    French - Canada

    "},"Constants.html#/c:@SDLLanguageDeDe":{"name":"SDLLanguageDeDe","abstract":"

    German - Germany

    "},"Constants.html#/c:@SDLLanguageEsEs":{"name":"SDLLanguageEsEs","abstract":"

    Spanish - Spain

    "},"Constants.html#/c:@SDLLanguageEnGb":{"name":"SDLLanguageEnGb","abstract":"

    English - Great Britain

    "},"Constants.html#/c:@SDLLanguageRuRu":{"name":"SDLLanguageRuRu","abstract":"

    Russian - Russia

    "},"Constants.html#/c:@SDLLanguageTrTr":{"name":"SDLLanguageTrTr","abstract":"

    Turkish - Turkey

    "},"Constants.html#/c:@SDLLanguagePlPl":{"name":"SDLLanguagePlPl","abstract":"

    Polish - Poland

    "},"Constants.html#/c:@SDLLanguageFrFr":{"name":"SDLLanguageFrFr","abstract":"

    French - France

    "},"Constants.html#/c:@SDLLanguageItIt":{"name":"SDLLanguageItIt","abstract":"

    Italian - Italy

    "},"Constants.html#/c:@SDLLanguageSvSe":{"name":"SDLLanguageSvSe","abstract":"

    Swedish - Sweden

    "},"Constants.html#/c:@SDLLanguagePtPt":{"name":"SDLLanguagePtPt","abstract":"

    Portuguese - Portugal

    "},"Constants.html#/c:@SDLLanguageNlNl":{"name":"SDLLanguageNlNl","abstract":"

    Dutch (Standard) - Netherlands

    "},"Constants.html#/c:@SDLLanguageEnAu":{"name":"SDLLanguageEnAu","abstract":"

    English - Australia

    "},"Constants.html#/c:@SDLLanguageZhCn":{"name":"SDLLanguageZhCn","abstract":"

    Mandarin - China

    "},"Constants.html#/c:@SDLLanguageZhTw":{"name":"SDLLanguageZhTw","abstract":"

    Mandarin - Taiwan

    "},"Constants.html#/c:@SDLLanguageJaJp":{"name":"SDLLanguageJaJp","abstract":"

    Japanese - Japan

    "},"Constants.html#/c:@SDLLanguageArSa":{"name":"SDLLanguageArSa","abstract":"

    Arabic - Saudi Arabia

    "},"Constants.html#/c:@SDLLanguageKoKr":{"name":"SDLLanguageKoKr","abstract":"

    Korean - South Korea

    "},"Constants.html#/c:@SDLLanguagePtBr":{"name":"SDLLanguagePtBr","abstract":"

    Portuguese - Brazil

    "},"Constants.html#/c:@SDLLanguageCsCz":{"name":"SDLLanguageCsCz","abstract":"

    Czech - Czech Republic

    "},"Constants.html#/c:@SDLLanguageDaDk":{"name":"SDLLanguageDaDk","abstract":"

    Danish - Denmark

    "},"Constants.html#/c:@SDLLanguageNoNo":{"name":"SDLLanguageNoNo","abstract":"

    Norwegian - Norway

    "},"Constants.html#/c:@SDLLayoutModeIconOnly":{"name":"SDLLayoutModeIconOnly","abstract":"

    This mode causes the interaction to display the previous set of choices as icons.

    "},"Constants.html#/c:@SDLLayoutModeIconWithSearch":{"name":"SDLLayoutModeIconWithSearch","abstract":"

    This mode causes the interaction to display the previous set of choices as icons along with a search field in the HMI.

    "},"Constants.html#/c:@SDLLayoutModeListOnly":{"name":"SDLLayoutModeListOnly","abstract":"

    This mode causes the interaction to display the previous set of choices as a list.

    "},"Constants.html#/c:@SDLLayoutModeListWithSearch":{"name":"SDLLayoutModeListWithSearch","abstract":"

    This mode causes the interaction to display the previous set of choices as a list along with a search field in the HMI.

    "},"Constants.html#/c:@SDLLayoutModeKeyboard":{"name":"SDLLayoutModeKeyboard","abstract":"

    This mode causes the interaction to immediately display a keyboard entry through the HMI.

    "},"Constants.html#/c:@SDLLightNameFrontLeftHighBeam":{"name":"SDLLightNameFrontLeftHighBeam","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_HIGH_BEAM.

    "},"Constants.html#/c:@SDLLightNameFrontRightHighBeam":{"name":"SDLLightNameFrontRightHighBeam","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_HIGH_BEAM.

    "},"Constants.html#/c:@SDLLightNameFrontLeftLowBeam":{"name":"SDLLightNameFrontLeftLowBeam","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_LOW_BEAM.

    "},"Constants.html#/c:@SDLLightNameFrontRightLowBeam":{"name":"SDLLightNameFrontRightLowBeam","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_LOW_BEAM.

    "},"Constants.html#/c:@SDLLightNameFrontLeftParkingLight":{"name":"SDLLightNameFrontLeftParkingLight","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_PARKING_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontRightParkingLight":{"name":"SDLLightNameFrontRightParkingLight","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_PARKING_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontLeftFogLight":{"name":"SDLLightNameFrontLeftFogLight","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_FOG_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontRightFogLight":{"name":"SDLLightNameFrontRightFogLight","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_FOG_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontLeftDaytimeRunningLight":{"name":"SDLLightNameFrontLeftDaytimeRunningLight","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_DAYTIME_RUNNING_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontRightDaytimeRunningLight":{"name":"SDLLightNameFrontRightDaytimeRunningLight","abstract":"

    @abstract Represents the Light with name FRONT_RIGHT_DAYTIME_RUNNING_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontLeftTurnLight":{"name":"SDLLightNameFrontLeftTurnLight","abstract":"

    @abstract Represents the Light with name FRONT_LEFT_TURN_LIGHT

    "},"Constants.html#/c:@SDLLightNameFrontRightTurnLight":{"name":"SDLLightNameFrontRightTurnLight","abstract":"

    @abstract Represents the Light with name FRONT_Right_TURN_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearLeftFogLight":{"name":"SDLLightNameRearLeftFogLight","abstract":"

    @abstract Represents the Light with name REAR_LEFT_FOG_LIGHT.

    "},"Constants.html#/c:@SDLLightNameRearRightFogLight":{"name":"SDLLightNameRearRightFogLight","abstract":"

    @abstract Represents the Light with name REAR_RIGHT_FOG_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearLeftTailLight":{"name":"SDLLightNameRearLeftTailLight","abstract":"

    @abstract Represents the Light with name REAR_LEFT_TAIL_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearRightTailLight":{"name":"SDLLightNameRearRightTailLight","abstract":"

    @abstract Represents the Light with name REAR_RIGHT_TAIL_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearLeftBrakeLight":{"name":"SDLLightNameRearLeftBrakeLight","abstract":"

    @abstract Represents the Light with name REAR_LEFT_BRAKE_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearRightBrakeLight":{"name":"SDLLightNameRearRightBrakeLight","abstract":"

    @abstract Represents the Light with name REAR_RIGHT_BRAKE_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearLeftTurnLight":{"name":"SDLLightNameRearLeftTurnLight","abstract":"

    @abstract Represents the Light with name REAR_LEFT_TURN_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearRightTurnLight":{"name":"SDLLightNameRearRightTurnLight","abstract":"

    @abstract Represents the Light with name REAR_RIGHT_TURN_LIGHT

    "},"Constants.html#/c:@SDLLightNameRearRegistrationPlateLight":{"name":"SDLLightNameRearRegistrationPlateLight","abstract":"

    @abstract Represents the Light with name REAR_REGISTRATION_PLATE_LIGHT

    "},"Constants.html#/c:@SDLLightNameHighBeams":{"name":"SDLLightNameHighBeams","abstract":"

    @abstract Include all high beam lights: front_left and front_right.

    "},"Constants.html#/c:@SDLLightNameLowBeams":{"name":"SDLLightNameLowBeams","abstract":"

    @abstract Include all low beam lights: front_left and front_right.

    "},"Constants.html#/c:@SDLLightNameFogLights":{"name":"SDLLightNameFogLights","abstract":"

    @abstract Include all fog lights: front_left, front_right, rear_left and rear_right.

    "},"Constants.html#/c:@SDLLightNameRunningLights":{"name":"SDLLightNameRunningLights","abstract":"

    @abstract Include all daytime running lights: front_left and front_right.

    "},"Constants.html#/c:@SDLLightNameParkingLights":{"name":"SDLLightNameParkingLights","abstract":"

    @abstract Include all parking lights: front_left and front_right.

    "},"Constants.html#/c:@SDLLightNameBrakeLights":{"name":"SDLLightNameBrakeLights","abstract":"

    @abstract Include all brake lights: rear_left and rear_right.

    "},"Constants.html#/c:@SDLLightNameRearReversingLights":{"name":"SDLLightNameRearReversingLights","abstract":"

    @abstract Represents the Light with name REAR_REVERSING_LIGHTS

    "},"Constants.html#/c:@SDLLightNameSideMarkerLights":{"name":"SDLLightNameSideMarkerLights","abstract":"

    @abstract Represents the Light with name SIDE_MARKER_LIGHTS

    "},"Constants.html#/c:@SDLLightNameLeftTurnLights":{"name":"SDLLightNameLeftTurnLights","abstract":"

    @abstract Include all left turn signal lights: front_left, rear_left, left_side and mirror_mounted.

    "},"Constants.html#/c:@SDLLightNameRightTurnLights":{"name":"SDLLightNameRightTurnLights","abstract":"

    @abstract Include all right turn signal lights: front_right, rear_right, right_side and mirror_mounted.

    "},"Constants.html#/c:@SDLLightNameHazardLights":{"name":"SDLLightNameHazardLights","abstract":"

    @abstract Include all hazard lights: front_left, front_right, rear_left and rear_right.

    "},"Constants.html#/c:@SDLLightNameAmbientLights":{"name":"SDLLightNameAmbientLights","abstract":"

    @abstract Represents the Light with name AMBIENT_LIGHTS

    "},"Constants.html#/c:@SDLLightNameOverHeadLights":{"name":"SDLLightNameOverHeadLights","abstract":"

    @abstract Represents the Light with name OVERHEAD_LIGHTS

    "},"Constants.html#/c:@SDLLightNameReadingLights":{"name":"SDLLightNameReadingLights","abstract":"

    @abstract Represents the Light with name READING_LIGHTS

    "},"Constants.html#/c:@SDLLightNameTrunkLights":{"name":"SDLLightNameTrunkLights","abstract":"

    @abstract Represents the Light with name TRUNK_LIGHTS

    "},"Constants.html#/c:@SDLLightNameExteriorFrontLights":{"name":"SDLLightNameExteriorFrontLights","abstract":"

    @abstract Include exterior lights located in front of the vehicle. For example, fog lights and low beams.

    "},"Constants.html#/c:@SDLLightNameExteriorRearLights":{"name":"SDLLightNameExteriorRearLights","abstract":"

    @abstract Include exterior lights located at the back of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorLeftLights":{"name":"SDLLightNameExteriorLeftLights","abstract":"

    @abstract Include exterior lights located at the left side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRightLights":{"name":"SDLLightNameExteriorRightLights","abstract":"

    @abstract Include exterior lights located at the right side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRearCargoLights":{"name":"SDLLightNameExteriorRearCargoLights","abstract":"

    @abstract Cargo lamps illuminate the cargo area.

    "},"Constants.html#/c:@SDLLightNameExteriorRearTruckBedLights":{"name":"SDLLightNameExteriorRearTruckBedLights","abstract":"

    @abstract Truck bed lamps light up the bed of the truck.

    "},"Constants.html#/c:@SDLLightNameExteriorRearTrailerLights":{"name":"SDLLightNameExteriorRearTrailerLights","abstract":"

    @abstract Trailer lights are lamps mounted on a trailer hitch.

    "},"Constants.html#/c:@SDLLightNameExteriorLeftSpotLights":{"name":"SDLLightNameExteriorLeftSpotLights","abstract":"

    @abstract It is the spotlights mounted on the left side of a vehicle.

    "},"Constants.html#/c:@SDLLightNameExteriorRightSpotLights":{"name":"SDLLightNameExteriorRightSpotLights","abstract":"

    @abstract It is the spotlights mounted on the right side of a vehicle.

    "},"Constants.html#/c:@SDLLightNameExteriorLeftPuddleLights":{"name":"SDLLightNameExteriorLeftPuddleLights","abstract":"

    @abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.

    "},"Constants.html#/c:@SDLLightNameExteriorRightPuddleLights":{"name":"SDLLightNameExteriorRightPuddleLights","abstract":"

    @abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.

    "},"Constants.html#/c:@SDLLightNameExteriorAllLights":{"name":"SDLLightNameExteriorAllLights","abstract":"

    @abstract Include all exterior lights around the vehicle.

    "},"Constants.html#/c:@SDLLightStatusOn":{"name":"SDLLightStatusOn","abstract":"

    @abstract Light status currently on.

    "},"Constants.html#/c:@SDLLightStatusOFF":{"name":"SDLLightStatusOFF","abstract":"

    @abstract Light status currently Off.

    "},"Constants.html#/c:@SDLLightStatusRampUp":{"name":"SDLLightStatusRampUp","abstract":"

    @abstract Light status currently RAMP_UP.

    "},"Constants.html#/c:@SDLLightStatusRampDown":{"name":"SDLLightStatusRampDown","abstract":"

    @abstract Light status currently RAMP_DOWN.

    "},"Constants.html#/c:@SDLLightStatusUnknown":{"name":"SDLLightStatusUnknown","abstract":"

    @abstract Light status currently UNKNOWN.

    "},"Constants.html#/c:@SDLLightStatusInvalid":{"name":"SDLLightStatusInvalid","abstract":"

    @abstract Light status currently INVALID.

    "},"Constants.html#/c:@SDLLockScreenStatusOff":{"name":"SDLLockScreenStatusOff","abstract":"

    LockScreen is Not Required

    "},"Constants.html#/c:@SDLLockScreenStatusOptional":{"name":"SDLLockScreenStatusOptional","abstract":"

    LockScreen is Optional

    "},"Constants.html#/c:@SDLLockScreenStatusRequired":{"name":"SDLLockScreenStatusRequired","abstract":"

    LockScreen is Required

    "},"Constants.html#/c:@SDLMaintenanceModeStatusNormal":{"name":"SDLMaintenanceModeStatusNormal","abstract":"

    Maintenance Mode Status : Normal

    "},"Constants.html#/c:@SDLMaintenanceModeStatusNear":{"name":"SDLMaintenanceModeStatusNear","abstract":"

    Maintenance Mode Status : Near

    "},"Constants.html#/c:@SDLMaintenanceModeStatusActive":{"name":"SDLMaintenanceModeStatusActive","abstract":"

    Maintenance Mode Status : Active

    "},"Constants.html#/c:@SDLMaintenanceModeStatusFeatureNotPresent":{"name":"SDLMaintenanceModeStatusFeatureNotPresent","abstract":"

    Maintenance Mode Status : Feature not present

    "},"Constants.html#/c:@SDLMassageCushionTopLumbar":{"name":"SDLMassageCushionTopLumbar","abstract":"

    @abstract TOP LUMBAR cushions of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageCushionMiddleLumbar":{"name":"SDLMassageCushionMiddleLumbar","abstract":"

    @abstract MIDDLE LUMBAR cushion of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageCushionBottomLumbar":{"name":"SDLMassageCushionBottomLumbar","abstract":"

    @abstract BOTTOM LUMBAR cushion of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageCushionBackBolsters":{"name":"SDLMassageCushionBackBolsters","abstract":"

    @abstract BACK BOLSTERS cushion of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageCushionSeatBolsters":{"name":"SDLMassageCushionSeatBolsters","abstract":"

    @abstract SEAT BOLSTERS cushion of a multi-contour massage seat

    "},"Constants.html#/c:@SDLMassageModeOff":{"name":"SDLMassageModeOff","abstract":"

    @abstract Massage Mode Status : OFF

    "},"Constants.html#/c:@SDLMassageModeLow":{"name":"SDLMassageModeLow","abstract":"

    @abstract Massage Mode Status : LOW

    "},"Constants.html#/c:@SDLMassageModeHigh":{"name":"SDLMassageModeHigh","abstract":"

    @abstract Massage Mode Status : HIGH

    "},"Constants.html#/c:@SDLMassageZoneLumbar":{"name":"SDLMassageZoneLumbar","abstract":"

    @abstract The back of a multi-contour massage seat. or SEAT_BACK

    "},"Constants.html#/c:@SDLMassageZoneSeatCushion":{"name":"SDLMassageZoneSeatCushion","abstract":"

    @abstract The bottom a multi-contour massage seat. or SEAT_BOTTOM

    "},"Constants.html#/c:@SDLMediaClockFormatClock1":{"name":"SDLMediaClockFormatClock1","abstract":"

    Media clock format: Clock1

    "},"Constants.html#/c:@SDLMediaClockFormatClock2":{"name":"SDLMediaClockFormatClock2","abstract":"

    Media clock format: Clock2

    "},"Constants.html#/c:@SDLMediaClockFormatClock3":{"name":"SDLMediaClockFormatClock3","abstract":"

    Media clock format: Clock3

    "},"Constants.html#/c:@SDLMediaClockFormatClockText1":{"name":"SDLMediaClockFormatClockText1","abstract":"

    Media clock format: ClockText1

    "},"Constants.html#/c:@SDLMediaClockFormatClockText2":{"name":"SDLMediaClockFormatClockText2","abstract":"

    Media clock format: ClockText2

    "},"Constants.html#/c:@SDLMediaClockFormatClockText3":{"name":"SDLMediaClockFormatClockText3","abstract":"

    Media clock format: ClockText3

    "},"Constants.html#/c:@SDLMediaClockFormatClockText4":{"name":"SDLMediaClockFormatClockText4","abstract":"

    Media clock format: ClockText4

    "},"Constants.html#/c:@SDLMediaTypeMusic":{"name":"SDLMediaTypeMusic","abstract":"

    The app will have a media type of music.

    "},"Constants.html#/c:@SDLMediaTypePodcast":{"name":"SDLMediaTypePodcast","abstract":"

    The app will have a media type of podcast.

    "},"Constants.html#/c:@SDLMediaTypeAudiobook":{"name":"SDLMediaTypeAudiobook","abstract":"

    The app will have a media type of audiobook.

    "},"Constants.html#/c:@SDLMediaTypeOther":{"name":"SDLMediaTypeOther","abstract":"

    The app will have a media type of other.

    "},"Constants.html#/c:@SDLMenuLayoutList":{"name":"SDLMenuLayoutList","abstract":"

    The menu should be laid out in a scrollable list format with one menu cell below the previous, each is stretched across the view

    "},"Constants.html#/c:@SDLMenuLayoutTiles":{"name":"SDLMenuLayoutTiles","abstract":"

    The menu should be laid out in a scrollable tiles format with each menu cell laid out in a square-ish format next to each other horizontally

    "},"Constants.html#/c:@SDLMetadataTypeMediaTitle":{"name":"SDLMetadataTypeMediaTitle","abstract":"

    The song / media title name

    "},"Constants.html#/c:@SDLMetadataTypeMediaArtist":{"name":"SDLMetadataTypeMediaArtist","abstract":"

    The “artist” of the media

    "},"Constants.html#/c:@SDLMetadataTypeMediaAlbum":{"name":"SDLMetadataTypeMediaAlbum","abstract":"

    The “album” of the media"

    "},"Constants.html#/c:@SDLMetadataTypeMediaYear":{"name":"SDLMetadataTypeMediaYear","abstract":"

    The “year” that the media was created

    "},"Constants.html#/c:@SDLMetadataTypeMediaGenre":{"name":"SDLMetadataTypeMediaGenre","abstract":"

    The “genre” of the media

    "},"Constants.html#/c:@SDLMetadataTypeMediaStation":{"name":"SDLMetadataTypeMediaStation","abstract":"

    The “station” that the media is playing on

    "},"Constants.html#/c:@SDLMetadataTypeRating":{"name":"SDLMetadataTypeRating","abstract":"

    The “rating” given to the media

    "},"Constants.html#/c:@SDLMetadataTypeCurrentTemperature":{"name":"SDLMetadataTypeCurrentTemperature","abstract":"

    The current temperature of the weather information

    "},"Constants.html#/c:@SDLMetadataTypeMaximumTemperature":{"name":"SDLMetadataTypeMaximumTemperature","abstract":"

    The high / maximum temperature of the weather information for the current period

    "},"Constants.html#/c:@SDLMetadataTypeMinimumTemperature":{"name":"SDLMetadataTypeMinimumTemperature","abstract":"

    The low / minimum temperature of the weather information for the current period

    "},"Constants.html#/c:@SDLMetadataTypeWeatherTerm":{"name":"SDLMetadataTypeWeatherTerm","abstract":"

    A description of the weather for the current period

    "},"Constants.html#/c:@SDLMetadataTypeHumidity":{"name":"SDLMetadataTypeHumidity","abstract":"

    The humidity of the weather information for the current period

    "},"Constants.html#/c:@SDLModuleTypeClimate":{"name":"SDLModuleTypeClimate","abstract":"

    A SDLModuleType with the value of CLIMATE

    "},"Constants.html#/c:@SDLModuleTypeRadio":{"name":"SDLModuleTypeRadio","abstract":"

    A SDLModuleType with the value of RADIO

    "},"Constants.html#/c:@SDLModuleTypeSeat":{"name":"SDLModuleTypeSeat","abstract":"

    A SDLModuleType with the value of SEAT

    "},"Constants.html#/c:@SDLModuleTypeAudio":{"name":"SDLModuleTypeAudio","abstract":"

    A SDLModuleType with the value of AUDIO

    "},"Constants.html#/c:@SDLModuleTypeLight":{"name":"SDLModuleTypeLight","abstract":"

    A SDLModuleType with the value of LIGHT

    "},"Constants.html#/c:@SDLModuleTypeHMISettings":{"name":"SDLModuleTypeHMISettings","abstract":"

    A SDLModuleType with the value of HMI_SETTINGS

    "},"Constants.html#/c:@SDLNavigationActionTurn":{"name":"SDLNavigationActionTurn","abstract":"

    Using this action plus a supplied direction can give the type of turn.

    "},"Constants.html#/c:@SDLNavigationActionExit":{"name":"SDLNavigationActionExit","abstract":"

    A navigation action of exit.

    "},"Constants.html#/c:@SDLNavigationActionStay":{"name":"SDLNavigationActionStay","abstract":"

    A navigation action of stay.

    "},"Constants.html#/c:@SDLNavigationActionMerge":{"name":"SDLNavigationActionMerge","abstract":"

    A navigation action of merge.

    "},"Constants.html#/c:@SDLNavigationActionFerry":{"name":"SDLNavigationActionFerry","abstract":"

    A navigation action of ferry.

    "},"Constants.html#/c:@SDLNavigationActionCarShuttleTrain":{"name":"SDLNavigationActionCarShuttleTrain","abstract":"

    A navigation action of car shuttle train.

    "},"Constants.html#/c:@SDLNavigationActionWaypoint":{"name":"SDLNavigationActionWaypoint","abstract":"

    A navigation action of waypoint.

    "},"Constants.html#/c:@SDLNavigationJunctionRegular":{"name":"SDLNavigationJunctionRegular","abstract":"

    A junction that represents a standard intersection with a single road crossing another.

    "},"Constants.html#/c:@SDLNavigationJunctionBifurcation":{"name":"SDLNavigationJunctionBifurcation","abstract":"

    A junction where the road splits off into two paths; a fork in the road.

    "},"Constants.html#/c:@SDLNavigationJunctionMultiCarriageway":{"name":"SDLNavigationJunctionMultiCarriageway","abstract":"

    A junction that has multiple intersections and paths.

    "},"Constants.html#/c:@SDLNavigationJunctionRoundabout":{"name":"SDLNavigationJunctionRoundabout","abstract":"

    A junction where traffic moves in a single direction around a central, non-traversable point to reach one of the connecting roads.

    "},"Constants.html#/c:@SDLNavigationJunctionTraversableRoundabout":{"name":"SDLNavigationJunctionTraversableRoundabout","abstract":"

    Similar to a roundabout, however the center of the roundabout is fully traversable. Also known as a mini-roundabout.

    "},"Constants.html#/c:@SDLNavigationJunctionJughandle":{"name":"SDLNavigationJunctionJughandle","abstract":"

    A junction where lefts diverge to the right, then curve to the left, converting a left turn to a crossing maneuver.

    "},"Constants.html#/c:@SDLNavigationJunctionAllWayYield":{"name":"SDLNavigationJunctionAllWayYield","abstract":"

    Multiple way intersection that allows traffic to flow based on priority; most commonly right of way and first in, first out.

    "},"Constants.html#/c:@SDLNavigationJunctionTurnAround":{"name":"SDLNavigationJunctionTurnAround","abstract":"

    A junction designated for traffic turn arounds.

    "},"Constants.html#/c:@SDLNotificationUserInfoObject":{"name":"SDLNotificationUserInfoObject","abstract":"

    The key used in all SDL NSNotifications to extract the response or notification from the userinfo dictionary.

    "},"Constants.html#/c:@SDLTransportDidDisconnect":{"name":"SDLTransportDidDisconnect","abstract":"

    Name for a disconnection notification

    "},"Constants.html#/c:@SDLTransportDidConnect":{"name":"SDLTransportDidConnect","abstract":"

    Name for a connection notification

    "},"Constants.html#/c:@SDLTransportConnectError":{"name":"SDLTransportConnectError","abstract":"

    Name for a error during connection notification

    "},"Constants.html#/c:@SDLDidReceiveError":{"name":"SDLDidReceiveError","abstract":"

    Name for a general error notification

    "},"Constants.html#/c:@SDLDidReceiveLockScreenIcon":{"name":"SDLDidReceiveLockScreenIcon","abstract":"

    Name for an incoming lock screen icon notification

    "},"Constants.html#/c:@SDLDidBecomeReady":{"name":"SDLDidBecomeReady","abstract":"

    Name for an SDL became ready notification

    "},"Constants.html#/c:@SDLDidUpdateProjectionView":{"name":"SDLDidUpdateProjectionView","abstract":"

    Name for a notification sent by the user when their CarWindow view has been updated

    "},"Constants.html#/c:@SDLDidReceiveAddCommandResponse":{"name":"SDLDidReceiveAddCommandResponse","abstract":"

    Name for an AddCommand response RPC

    "},"Constants.html#/c:@SDLDidReceiveAddSubMenuResponse":{"name":"SDLDidReceiveAddSubMenuResponse","abstract":"

    Name for an AddSubMenu response RPC

    "},"Constants.html#/c:@SDLDidReceiveAlertResponse":{"name":"SDLDidReceiveAlertResponse","abstract":"

    Name for an Alert response RPC

    "},"Constants.html#/c:@SDLDidReceiveAlertManeuverResponse":{"name":"SDLDidReceiveAlertManeuverResponse","abstract":"

    Name for an AlertManeuver response RPC

    "},"Constants.html#/c:@SDLDidReceiveButtonPressResponse":{"name":"SDLDidReceiveButtonPressResponse","abstract":"

    Name for an ButtonPress response RPC

    "},"Constants.html#/c:@SDLDidReceiveCancelInteractionResponse":{"name":"SDLDidReceiveCancelInteractionResponse","abstract":"

    Name for aa CancelInteraction response RPC

    "},"Constants.html#/c:@SDLDidReceiveChangeRegistrationResponse":{"name":"SDLDidReceiveChangeRegistrationResponse","abstract":"

    Name for a ChangeRegistration response RPC

    "},"Constants.html#/c:@SDLDidReceiveCloseApplicationResponse":{"name":"SDLDidReceiveCloseApplicationResponse","abstract":"

    Name for a CloseApplication response RPC

    "},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetResponse":{"name":"SDLDidReceiveCreateInteractionChoiceSetResponse","abstract":"

    Name for a CreateInteractionChoiceSet response RPC

    "},"Constants.html#/c:@SDLDidReceiveCreateWindowResponse":{"name":"SDLDidReceiveCreateWindowResponse","abstract":"

    Name for a CreateWindow response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteCommandResponse":{"name":"SDLDidReceiveDeleteCommandResponse","abstract":"

    Name for a DeleteCommand response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteFileResponse":{"name":"SDLDidReceiveDeleteFileResponse","abstract":"

    Name for a DeleteFile response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetResponse":{"name":"SDLDidReceiveDeleteInteractionChoiceSetResponse","abstract":"

    Name for a DeleteInteractionChoiceSet response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteSubmenuResponse":{"name":"SDLDidReceiveDeleteSubmenuResponse","abstract":"

    Name for a DeleteSubmenu response RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteWindowResponse":{"name":"SDLDidReceiveDeleteWindowResponse","abstract":"

    Name for a DeleteWindow response RPC

    "},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageResponse":{"name":"SDLDidReceiveDiagnosticMessageResponse","abstract":"

    Name for a DiagnosticMessage response RPC

    "},"Constants.html#/c:@SDLDidReceiveDialNumberResponse":{"name":"SDLDidReceiveDialNumberResponse","abstract":"

    Name for a DialNumber response RPC

    "},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataResponse":{"name":"SDLDidReceiveEncodedSyncPDataResponse","abstract":"

    Name for an EncodedSyncPData response RPC

    "},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruResponse":{"name":"SDLDidReceiveEndAudioPassThruResponse","abstract":"

    Name for an EndAudioPassThru response RPC

    "},"Constants.html#/c:@SDLDidReceiveGenericResponse":{"name":"SDLDidReceiveGenericResponse","abstract":"

    Name for a Generic response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetCloudAppPropertiesResponse":{"name":"SDLDidReceiveGetCloudAppPropertiesResponse","abstract":"

    Name for a GetCloudAppProperties response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetAppServiceDataResponse":{"name":"SDLDidReceiveGetAppServiceDataResponse","abstract":"

    Name for a GetAppServiceData response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetDTCsResponse":{"name":"SDLDidReceiveGetDTCsResponse","abstract":"

    Name for a GetDTCs response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetFileResponse":{"name":"SDLDidReceiveGetFileResponse","abstract":"

    Name for a GetFile response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataResponse","abstract":"

    Name for a GetInteriorVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataConsentResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataConsentResponse","abstract":"

    Name for a GetInteriorVehicleDataConsent response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilitiesResponse":{"name":"SDLDidReceiveGetSystemCapabilitiesResponse","abstract":"

    Name for a GetSystemCapabilities response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetVehicleDataResponse":{"name":"SDLDidReceiveGetVehicleDataResponse","abstract":"

    Name for a GetVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveGetWaypointsResponse":{"name":"SDLDidReceiveGetWaypointsResponse","abstract":"

    Name for a GetWaypoints response RPC

    "},"Constants.html#/c:@SDLDidReceiveListFilesResponse":{"name":"SDLDidReceiveListFilesResponse","abstract":"

    Name for a ListFiles response RPC

    "},"Constants.html#/c:@SDLDidReceivePerformAppServiceInteractionResponse":{"name":"SDLDidReceivePerformAppServiceInteractionResponse","abstract":"

    Name for a PerformAppServiceInteraction response RPC

    "},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruResponse":{"name":"SDLDidReceivePerformAudioPassThruResponse","abstract":"

    Name for a PerformAudioPassThru response RPC

    "},"Constants.html#/c:@SDLDidReceivePerformInteractionResponse":{"name":"SDLDidReceivePerformInteractionResponse","abstract":"

    Name for a PerformInteraction response RPC

    "},"Constants.html#/c:@SDLDidReceivePublishAppServiceResponse":{"name":"SDLDidReceivePublishAppServiceResponse","abstract":"

    Name for a PublishAppService response RPC

    "},"Constants.html#/c:@SDLDidReceivePutFileResponse":{"name":"SDLDidReceivePutFileResponse","abstract":"

    Name for a ReceivePutFile response RPC

    "},"Constants.html#/c:@SDLDidReceiveReadDIDResponse":{"name":"SDLDidReceiveReadDIDResponse","abstract":"

    Name for a ReceiveReadDID response RPC

    "},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceResponse":{"name":"SDLDidReceiveRegisterAppInterfaceResponse","abstract":"

    Name for a RegisterAppInterface response RPC

    "},"Constants.html#/c:@SDLDidReceiveReleaseInteriorVehicleDataModuleResponse":{"name":"SDLDidReceiveReleaseInteriorVehicleDataModuleResponse","abstract":"

    Name for a ReleaseInteriorVehicleDataModule response RPC

    "},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesResponse":{"name":"SDLDidReceiveResetGlobalPropertiesResponse","abstract":"

    Name for a ResetGlobalProperties response RPC

    "},"Constants.html#/c:@SDLDidReceiveScrollableMessageResponse":{"name":"SDLDidReceiveScrollableMessageResponse","abstract":"

    Name for a ScrollableMessage response RPC

    "},"Constants.html#/c:@SDLDidReceiveSendHapticDataResponse":{"name":"SDLDidReceiveSendHapticDataResponse","abstract":"

    Name for a SendHapticData response RPC

    "},"Constants.html#/c:@SDLDidReceiveSendLocationResponse":{"name":"SDLDidReceiveSendLocationResponse","abstract":"

    Name for a SendLocation response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetAppIconResponse":{"name":"SDLDidReceiveSetAppIconResponse","abstract":"

    Name for a SetAppIcon response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetCloudAppPropertiesResponse":{"name":"SDLDidReceiveSetCloudAppPropertiesResponse","abstract":"

    Name for a SetCloudAppProperties response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutResponse":{"name":"SDLDidReceiveSetDisplayLayoutResponse","abstract":"

    Name for a SetDisplayLayout response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesResponse":{"name":"SDLDidReceiveSetGlobalPropertiesResponse","abstract":"

    Name for a SetGlobalProperties response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataResponse":{"name":"SDLDidReceiveSetInteriorVehicleDataResponse","abstract":"

    Name for a SetInteriorVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerResponse":{"name":"SDLDidReceiveSetMediaClockTimerResponse","abstract":"

    Name for a SetMediaClockTimer response RPC

    "},"Constants.html#/c:@SDLDidReceiveShowConstantTBTResponse":{"name":"SDLDidReceiveShowConstantTBTResponse","abstract":"

    Name for a ShowConstantTBT response RPC

    "},"Constants.html#/c:@SDLDidReceiveShowResponse":{"name":"SDLDidReceiveShowResponse","abstract":"

    Name for a Show response RPC

    "},"Constants.html#/c:@SDLDidReceiveShowAppMenuResponse":{"name":"SDLDidReceiveShowAppMenuResponse","abstract":"

    Name for a ShowAppMenu response RPC

    "},"Constants.html#/c:@SDLDidReceiveSliderResponse":{"name":"SDLDidReceiveSliderResponse","abstract":"

    Name for a Slider response RPC

    "},"Constants.html#/c:@SDLDidReceiveSpeakResponse":{"name":"SDLDidReceiveSpeakResponse","abstract":"

    Name for a Speak response RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeButtonResponse":{"name":"SDLDidReceiveSubscribeButtonResponse","abstract":"

    Name for a SubscribeButton response RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataResponse":{"name":"SDLDidReceiveSubscribeVehicleDataResponse","abstract":"

    Name for a SubscribeVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeWaypointsResponse":{"name":"SDLDidReceiveSubscribeWaypointsResponse","abstract":"

    Name for a SubscribeWaypoints response RPC

    "},"Constants.html#/c:@SDLDidReceiveSyncPDataResponse":{"name":"SDLDidReceiveSyncPDataResponse","abstract":"

    Name for a SyncPData response RPC

    "},"Constants.html#/c:@SDLDidReceiveUpdateTurnListResponse":{"name":"SDLDidReceiveUpdateTurnListResponse","abstract":"

    Name for an UpdateTurnList response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnpublishAppServiceResponse":{"name":"SDLDidReceiveUnpublishAppServiceResponse","abstract":"

    Name for an UnpublishAppService response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceResponse":{"name":"SDLDidReceiveUnregisterAppInterfaceResponse","abstract":"

    Name for an UnregisterAppInterface response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonResponse":{"name":"SDLDidReceiveUnsubscribeButtonResponse","abstract":"

    Name for an UnsubscribeButton response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataResponse":{"name":"SDLDidReceiveUnsubscribeVehicleDataResponse","abstract":"

    Name for an UnsubscribeVehicleData response RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeWaypointsResponse":{"name":"SDLDidReceiveUnsubscribeWaypointsResponse","abstract":"

    Name for an UnsubscribeWaypoints response RPC

    "},"Constants.html#/c:@SDLDidReceiveAddCommandRequest":{"name":"SDLDidReceiveAddCommandRequest","abstract":"

    Name for an AddCommand request RPC

    "},"Constants.html#/c:@SDLDidReceiveAddSubMenuRequest":{"name":"SDLDidReceiveAddSubMenuRequest","abstract":"

    Name for an AddSubMenu request RPC

    "},"Constants.html#/c:@SDLDidReceiveAlertRequest":{"name":"SDLDidReceiveAlertRequest","abstract":"

    Name for an Alert request RPC

    "},"Constants.html#/c:@SDLDidReceiveAlertManeuverRequest":{"name":"SDLDidReceiveAlertManeuverRequest","abstract":"

    Name for an AlertManeuver request RPC

    "},"Constants.html#/c:@SDLDidReceiveButtonPressRequest":{"name":"SDLDidReceiveButtonPressRequest","abstract":"

    Name for a ButtonPress request RPC

    "},"Constants.html#/c:@SDLDidReceiveCancelInteractionRequest":{"name":"SDLDidReceiveCancelInteractionRequest","abstract":"

    Name for a CancelInteraction request RPC

    "},"Constants.html#/c:@SDLDidReceiveChangeRegistrationRequest":{"name":"SDLDidReceiveChangeRegistrationRequest","abstract":"

    Name for a ChangeRegistration request RPC

    "},"Constants.html#/c:@SDLDidReceiveCloseApplicationRequest":{"name":"SDLDidReceiveCloseApplicationRequest","abstract":"

    Name for a CloseApplication request RPC

    "},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetRequest":{"name":"SDLDidReceiveCreateInteractionChoiceSetRequest","abstract":"

    Name for a CreateInteractionChoiceSet request RPC

    "},"Constants.html#/c:@SDLDidReceiveCreateWindowRequest":{"name":"SDLDidReceiveCreateWindowRequest","abstract":"

    Name for a CreateWindow request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteCommandRequest":{"name":"SDLDidReceiveDeleteCommandRequest","abstract":"

    Name for a DeleteCommand request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteFileRequest":{"name":"SDLDidReceiveDeleteFileRequest","abstract":"

    Name for a DeleteFile request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetRequest":{"name":"SDLDidReceiveDeleteInteractionChoiceSetRequest","abstract":"

    Name for a DeleteInteractionChoiceSet request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteSubMenuRequest":{"name":"SDLDidReceiveDeleteSubMenuRequest","abstract":"

    Name for a DeleteSubMenu request RPC

    "},"Constants.html#/c:@SDLDidReceiveDeleteWindowRequest":{"name":"SDLDidReceiveDeleteWindowRequest","abstract":"

    Name for a DeleteSubMenu request RPC

    "},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageRequest":{"name":"SDLDidReceiveDiagnosticMessageRequest","abstract":"

    Name for a DiagnosticMessage request RPC

    "},"Constants.html#/c:@SDLDidReceiveDialNumberRequest":{"name":"SDLDidReceiveDialNumberRequest","abstract":"

    Name for a DialNumberR request RPC

    "},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataRequest":{"name":"SDLDidReceiveEncodedSyncPDataRequest","abstract":"

    Name for an EncodedSyncPData request RPC

    "},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruRequest":{"name":"SDLDidReceiveEndAudioPassThruRequest","abstract":"

    Name for a EndAudioPass request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetAppServiceDataRequest":{"name":"SDLDidReceiveGetAppServiceDataRequest","abstract":"

    Name for a GetAppServiceData request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetCloudAppPropertiesRequest":{"name":"SDLDidReceiveGetCloudAppPropertiesRequest","abstract":"

    Name for a GetCloudAppProperties request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetDTCsRequest":{"name":"SDLDidReceiveGetDTCsRequest","abstract":"

    Name for a ReceiveGetDTCs request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetFileRequest":{"name":"SDLDidReceiveGetFileRequest","abstract":"

    Name for a GetFile request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataRequest":{"name":"SDLDidReceiveGetInteriorVehicleDataRequest","abstract":"

    Name for a GetInteriorVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataConsentRequest":{"name":"SDLDidReceiveGetInteriorVehicleDataConsentRequest","abstract":"

    Name for a GetInteriorVehicleDataConsent request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilityRequest":{"name":"SDLDidReceiveGetSystemCapabilityRequest","abstract":"

    Name for a GetSystemCapability request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetVehicleDataRequest":{"name":"SDLDidReceiveGetVehicleDataRequest","abstract":"

    Name for a GetVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveGetWayPointsRequest":{"name":"SDLDidReceiveGetWayPointsRequest","abstract":"

    Name for a GetWayPoints request RPC

    "},"Constants.html#/c:@SDLDidReceiveListFilesRequest":{"name":"SDLDidReceiveListFilesRequest","abstract":"

    Name for a ListFiles request RPC

    "},"Constants.html#/c:@SDLDidReceivePerformAppServiceInteractionRequest":{"name":"SDLDidReceivePerformAppServiceInteractionRequest","abstract":"

    Name for a PerformAppServiceInteraction request RPC

    "},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruRequest":{"name":"SDLDidReceivePerformAudioPassThruRequest","abstract":"

    Name for a PerformAudioPassThru request RPC

    "},"Constants.html#/c:@SDLDidReceivePerformInteractionRequest":{"name":"SDLDidReceivePerformInteractionRequest","abstract":"

    Name for a PerformInteraction request RPC

    "},"Constants.html#/c:@SDLDidReceivePublishAppServiceRequest":{"name":"SDLDidReceivePublishAppServiceRequest","abstract":"

    Name for a PublishAppService request RPC

    "},"Constants.html#/c:@SDLDidReceivePutFileRequest":{"name":"SDLDidReceivePutFileRequest","abstract":"

    Name for a PutFile request RPC

    "},"Constants.html#/c:@SDLDidReceiveReadDIDRequest":{"name":"SDLDidReceiveReadDIDRequest","abstract":"

    Name for a ReadDID request RPC

    "},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceRequest":{"name":"SDLDidReceiveRegisterAppInterfaceRequest","abstract":"

    Name for a RegisterAppInterfacr request RPC

    "},"Constants.html#/c:@SDLDidReceiveReleaseInteriorVehicleDataModuleRequest":{"name":"SDLDidReceiveReleaseInteriorVehicleDataModuleRequest","abstract":"

    Name for a ReleaseInteriorVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesRequest":{"name":"SDLDidReceiveResetGlobalPropertiesRequest","abstract":"

    Name for a ResetGlobalProperties request RPC

    "},"Constants.html#/c:@SDLDidReceiveScrollableMessageRequest":{"name":"SDLDidReceiveScrollableMessageRequest","abstract":"

    Name for a ScrollableMessage request RPC

    "},"Constants.html#/c:@SDLDidReceiveSendHapticDataRequest":{"name":"SDLDidReceiveSendHapticDataRequest","abstract":"

    Name for a SendHapticData request RPC

    "},"Constants.html#/c:@SDLDidReceiveSendLocationRequest":{"name":"SDLDidReceiveSendLocationRequest","abstract":"

    Name for a SendLocation request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetAppIconRequest":{"name":"SDLDidReceiveSetAppIconRequest","abstract":"

    Name for a SetAppIcon request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetCloudAppPropertiesRequest":{"name":"SDLDidReceiveSetCloudAppPropertiesRequest","abstract":"

    Name for a SetCloudProperties request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutRequest":{"name":"SDLDidReceiveSetDisplayLayoutRequest","abstract":"

    Name for a SetDisplayLayout request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesRequest":{"name":"SDLDidReceiveSetGlobalPropertiesRequest","abstract":"

    Name for a SetGlobalProperties request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataRequest":{"name":"SDLDidReceiveSetInteriorVehicleDataRequest","abstract":"

    Name for a SetInteriorVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerRequest":{"name":"SDLDidReceiveSetMediaClockTimerRequest","abstract":"

    Name for a SetMediaClockTimer request RPC

    "},"Constants.html#/c:@SDLDidReceiveShowRequest":{"name":"SDLDidReceiveShowRequest","abstract":"

    Name for a Show request RPC

    "},"Constants.html#/c:@SDLDidReceiveShowAppMenuRequest":{"name":"SDLDidReceiveShowAppMenuRequest","abstract":"

    Name for a ShowAppMenu request RPC

    "},"Constants.html#/c:@SDLDidReceiveShowConstantTBTRequest":{"name":"SDLDidReceiveShowConstantTBTRequest","abstract":"

    Name for a ShowConstantTBT request RPC

    "},"Constants.html#/c:@SDLDidReceiveSliderRequest":{"name":"SDLDidReceiveSliderRequest","abstract":"

    Name for a Slider request RPC

    "},"Constants.html#/c:@SDLDidReceiveSpeakRequest":{"name":"SDLDidReceiveSpeakRequest","abstract":"

    Name for a Speak request RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeButtonRequest":{"name":"SDLDidReceiveSubscribeButtonRequest","abstract":"

    Name for a SubscribeButton request RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataRequest":{"name":"SDLDidReceiveSubscribeVehicleDataRequest","abstract":"

    Name for a SubscribeVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveSubscribeWayPointsRequest":{"name":"SDLDidReceiveSubscribeWayPointsRequest","abstract":"

    Name for a ubscribeWayPoints request RPC

    "},"Constants.html#/c:@SDLDidReceiveSyncPDataRequest":{"name":"SDLDidReceiveSyncPDataRequest","abstract":"

    Name for a SyncPData request RPC

    "},"Constants.html#/c:@SDLDidReceiveSystemRequestRequest":{"name":"SDLDidReceiveSystemRequestRequest","abstract":"

    Name for a SystemRequest request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnpublishAppServiceRequest":{"name":"SDLDidReceiveUnpublishAppServiceRequest","abstract":"

    Name for an UnpublishAppService request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceRequest":{"name":"SDLDidReceiveUnregisterAppInterfaceRequest","abstract":"

    Name for an UnregisterAppInterface request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonRequest":{"name":"SDLDidReceiveUnsubscribeButtonRequest","abstract":"

    Name for an UnsubscribeButton request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataRequest":{"name":"SDLDidReceiveUnsubscribeVehicleDataRequest","abstract":"

    Name for an UnsubscribeVehicleData request RPC

    "},"Constants.html#/c:@SDLDidReceiveUnsubscribeWayPointsRequest":{"name":"SDLDidReceiveUnsubscribeWayPointsRequest","abstract":"

    Name for an UnsubscribeWayPoints request RPC

    "},"Constants.html#/c:@SDLDidReceiveUpdateTurnListRequest":{"name":"SDLDidReceiveUpdateTurnListRequest","abstract":"

    Name for an UpdateTurnList request RPC

    "},"Constants.html#/c:@SDLDidChangeDriverDistractionStateNotification":{"name":"SDLDidChangeDriverDistractionStateNotification","abstract":"

    Name for a DriverDistractionState notification RPC

    "},"Constants.html#/c:@SDLDidChangeHMIStatusNotification":{"name":"SDLDidChangeHMIStatusNotification","abstract":"

    Name for a HMIStatus notification RPC

    "},"Constants.html#/c:@SDLDidReceiveAppServiceDataNotification":{"name":"SDLDidReceiveAppServiceDataNotification","abstract":"

    Name for an AppServiceData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveAppUnregisteredNotification":{"name":"SDLDidReceiveAppUnregisteredNotification","abstract":"

    Name for an AppUnregistered notification RPC

    "},"Constants.html#/c:@SDLDidReceiveAudioPassThruNotification":{"name":"SDLDidReceiveAudioPassThruNotification","abstract":"

    Name for an AudioPassThru notification RPC

    "},"Constants.html#/c:@SDLDidReceiveButtonEventNotification":{"name":"SDLDidReceiveButtonEventNotification","abstract":"

    Name for a ButtonEvent notification RPC

    "},"Constants.html#/c:@SDLDidReceiveButtonPressNotification":{"name":"SDLDidReceiveButtonPressNotification","abstract":"

    Name for a ButtonPress notification RPC

    "},"Constants.html#/c:@SDLDidReceiveCommandNotification":{"name":"SDLDidReceiveCommandNotification","abstract":"

    Name for a Command notification RPC

    "},"Constants.html#/c:@SDLDidReceiveEncodedDataNotification":{"name":"SDLDidReceiveEncodedDataNotification","abstract":"

    Name for a EncodedData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveInteriorVehicleDataNotification":{"name":"SDLDidReceiveInteriorVehicleDataNotification","abstract":"

    Name for a InteriorVehicleData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveKeyboardInputNotification":{"name":"SDLDidReceiveKeyboardInputNotification","abstract":"

    Name for a KeyboardInput notification RPC

    "},"Constants.html#/c:@SDLDidChangeLanguageNotification":{"name":"SDLDidChangeLanguageNotification","abstract":"

    Name for a Language notification RPC

    "},"Constants.html#/c:@SDLDidChangeLockScreenStatusNotification":{"name":"SDLDidChangeLockScreenStatusNotification","abstract":"

    Name for a LockScreenStatus notification RPC

    "},"Constants.html#/c:@SDLDidReceiveNewHashNotification":{"name":"SDLDidReceiveNewHashNotification","abstract":"

    Name for a NewHash notification RPC

    "},"Constants.html#/c:@SDLDidReceiveVehicleIconNotification":{"name":"SDLDidReceiveVehicleIconNotification","abstract":"

    Name for a VehicleIcon notification RPC

    "},"Constants.html#/c:@SDLDidChangePermissionsNotification":{"name":"SDLDidChangePermissionsNotification","abstract":"

    Name for a ChangePermissions notification RPC

    "},"Constants.html#/c:@SDLDidReceiveRemoteControlStatusNotification":{"name":"SDLDidReceiveRemoteControlStatusNotification","abstract":"

    Name for a RemoteControlStatus notification RPC

    "},"Constants.html#/c:@SDLDidReceiveSyncPDataNotification":{"name":"SDLDidReceiveSyncPDataNotification","abstract":"

    Name for an OnSyncPData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveSystemCapabilityUpdatedNotification":{"name":"SDLDidReceiveSystemCapabilityUpdatedNotification","abstract":"

    Name for a SystemCapability notification RPC

    "},"Constants.html#/c:@SDLDidReceiveSystemRequestNotification":{"name":"SDLDidReceiveSystemRequestNotification","abstract":"

    Name for a SystemRequest notification RPC

    "},"Constants.html#/c:@SDLDidChangeTurnByTurnStateNotification":{"name":"SDLDidChangeTurnByTurnStateNotification","abstract":"

    Name for a TurnByTurnStat notification RPC

    "},"Constants.html#/c:@SDLDidReceiveTouchEventNotification":{"name":"SDLDidReceiveTouchEventNotification","abstract":"

    Name for a TouchEvent notification RPC

    "},"Constants.html#/c:@SDLDidReceiveVehicleDataNotification":{"name":"SDLDidReceiveVehicleDataNotification","abstract":"

    Name for a VehicleData notification RPC

    "},"Constants.html#/c:@SDLDidReceiveWaypointNotification":{"name":"SDLDidReceiveWaypointNotification","abstract":"

    Name for a Waypoint notification RPC

    "},"Constants.html#/c:@SDLPRNDLPark":{"name":"SDLPRNDLPark","abstract":"

    Park

    "},"Constants.html#/c:@SDLPRNDLReverse":{"name":"SDLPRNDLReverse","abstract":"

    Reverse gear

    "},"Constants.html#/c:@SDLPRNDLNeutral":{"name":"SDLPRNDLNeutral","abstract":"

    No gear

    "},"Constants.html#/c:@SDLPRNDLDrive":{"name":"SDLPRNDLDrive","abstract":"

    @abstract: Drive gear

    "},"Constants.html#/c:@SDLPRNDLSport":{"name":"SDLPRNDLSport","abstract":"

    Drive Sport mode

    "},"Constants.html#/c:@SDLPRNDLLowGear":{"name":"SDLPRNDLLowGear","abstract":"

    1st gear hold

    "},"Constants.html#/c:@SDLPRNDLFirst":{"name":"SDLPRNDLFirst","abstract":"

    First gear

    "},"Constants.html#/c:@SDLPRNDLSecond":{"name":"SDLPRNDLSecond","abstract":"

    Second gear

    "},"Constants.html#/c:@SDLPRNDLThird":{"name":"SDLPRNDLThird","abstract":"

    Third gear

    "},"Constants.html#/c:@SDLPRNDLFourth":{"name":"SDLPRNDLFourth","abstract":"

    Fourth gear

    "},"Constants.html#/c:@SDLPRNDLFifth":{"name":"SDLPRNDLFifth","abstract":"

    Fifth gear

    "},"Constants.html#/c:@SDLPRNDLSixth":{"name":"SDLPRNDLSixth","abstract":"

    Sixth gear

    "},"Constants.html#/c:@SDLPRNDLSeventh":{"name":"SDLPRNDLSeventh","abstract":"

    Seventh gear

    "},"Constants.html#/c:@SDLPRNDLEighth":{"name":"SDLPRNDLEighth","abstract":"

    Eighth gear

    "},"Constants.html#/c:@SDLPRNDLUnknown":{"name":"SDLPRNDLUnknown","abstract":"

    Unknown

    "},"Constants.html#/c:@SDLPRNDLFault":{"name":"SDLPRNDLFault","abstract":"

    Fault

    "},"Constants.html#/c:@SDLPermissionStatusAllowed":{"name":"SDLPermissionStatusAllowed","abstract":"

    permission: allowed

    "},"Constants.html#/c:@SDLPermissionStatusDisallowed":{"name":"SDLPermissionStatusDisallowed","abstract":"

    permission: disallowed

    "},"Constants.html#/c:@SDLPermissionStatusUserDisallowed":{"name":"SDLPermissionStatusUserDisallowed","abstract":"

    permission: user disallowed

    "},"Constants.html#/c:@SDLPermissionStatusUserConsentPending":{"name":"SDLPermissionStatusUserConsentPending","abstract":"

    permission: user consent pending

    "},"Constants.html#/c:@SDLPowerModeQualificationStatusUndefined":{"name":"SDLPowerModeQualificationStatusUndefined","abstract":"

    An undefined status

    "},"Constants.html#/c:@SDLPowerModeQualificationStatusEvaluationInProgress":{"name":"SDLPowerModeQualificationStatusEvaluationInProgress","abstract":"

    An “evaluation in progress” status

    "},"Constants.html#/c:@SDLPowerModeQualificationStatusNotDefined":{"name":"SDLPowerModeQualificationStatusNotDefined","abstract":"

    A “not defined” status

    "},"Constants.html#/c:@SDLPowerModeQualificationStatusOk":{"name":"SDLPowerModeQualificationStatusOk","abstract":"

    An “ok” status

    "},"Constants.html#/c:@SDLPowerModeStatusKeyOut":{"name":"SDLPowerModeStatusKeyOut","abstract":"

    The key is not in the ignition, and the power is off

    "},"Constants.html#/c:@SDLPowerModeStatusKeyRecentlyOut":{"name":"SDLPowerModeStatusKeyRecentlyOut","abstract":"

    The key is not in the ignition and it was just recently removed

    "},"Constants.html#/c:@SDLPowerModeStatusKeyApproved":{"name":"SDLPowerModeStatusKeyApproved","abstract":"

    The key is not in the ignition, but an approved key is available

    "},"Constants.html#/c:@SDLPowerModeStatusPostAccessory":{"name":"SDLPowerModeStatusPostAccessory","abstract":"

    We are in a post-accessory power situation

    "},"Constants.html#/c:@SDLPowerModeStatusAccessory":{"name":"SDLPowerModeStatusAccessory","abstract":"

    The car is in accessory power mode

    "},"Constants.html#/c:@SDLPowerModeStatusPostIgnition":{"name":"SDLPowerModeStatusPostIgnition","abstract":"

    We are in a post-ignition power situation

    "},"Constants.html#/c:@SDLPowerModeStatusIgnitionOn":{"name":"SDLPowerModeStatusIgnitionOn","abstract":"

    The ignition is on but the car is not yet running

    "},"Constants.html#/c:@SDLPowerModeStatusRunning":{"name":"SDLPowerModeStatusRunning","abstract":"

    The ignition is on and the car is running

    "},"Constants.html#/c:@SDLPowerModeStatusCrank":{"name":"SDLPowerModeStatusCrank","abstract":"

    We are in a crank power situation

    "},"Constants.html#/c:@SDLPredefinedLayoutDefault":{"name":"SDLPredefinedLayoutDefault","abstract":"

    A default layout

    "},"Constants.html#/c:@SDLPredefinedLayoutMedia":{"name":"SDLPredefinedLayoutMedia","abstract":"

    The default media layout

    "},"Constants.html#/c:@SDLPredefinedLayoutNonMedia":{"name":"SDLPredefinedLayoutNonMedia","abstract":"

    The default non-media layout

    "},"Constants.html#/c:@SDLPredefinedLayoutOnscreenPresets":{"name":"SDLPredefinedLayoutOnscreenPresets","abstract":"

    A media layout containing preset buttons

    "},"Constants.html#/c:@SDLPredefinedLayoutNavigationFullscreenMap":{"name":"SDLPredefinedLayoutNavigationFullscreenMap","abstract":"

    The default navigation layout with a fullscreen map

    "},"Constants.html#/c:@SDLPredefinedLayoutNavigationList":{"name":"SDLPredefinedLayoutNavigationList","abstract":"

    A list layout used for navigation apps

    "},"Constants.html#/c:@SDLPredefinedLayoutNavigationKeyboard":{"name":"SDLPredefinedLayoutNavigationKeyboard","abstract":"

    A keyboard layout used for navigation apps

    "},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithText":{"name":"SDLPredefinedLayoutGraphicWithText","abstract":"

    A layout with a single graphic on the left and text on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTextWithGraphic":{"name":"SDLPredefinedLayoutTextWithGraphic","abstract":"

    A layout with text on the left and a single graphic on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTilesOnly":{"name":"SDLPredefinedLayoutTilesOnly","abstract":"

    A layout with only softbuttons placed in a tile layout

    "},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsOnly":{"name":"SDLPredefinedLayoutTextButtonsOnly","abstract":"

    A layout with only soft buttons that only accept text

    "},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTiles":{"name":"SDLPredefinedLayoutGraphicWithTiles","abstract":"

    A layout with a single graphic on the left and soft buttons in a tile layout on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTilesWithGraphic":{"name":"SDLPredefinedLayoutTilesWithGraphic","abstract":"

    A layout with soft buttons in a tile layout on the left and a single graphic on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextAndSoftButtons":{"name":"SDLPredefinedLayoutGraphicWithTextAndSoftButtons","abstract":"

    A layout with a single graphic on the left and both text and soft buttons on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTextAndSoftButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextAndSoftButtonsWithGraphic","abstract":"

    A layout with both text and soft buttons on the left and a single graphic on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextButtons":{"name":"SDLPredefinedLayoutGraphicWithTextButtons","abstract":"

    A layout with a single graphic on the left and text-only soft buttons on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextButtonsWithGraphic","abstract":"

    A layout with text-only soft buttons on the left and a single graphic on the right

    "},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutLargeGraphicWithSoftButtons","abstract":"

    A layout with a single large graphic and soft buttons

    "},"Constants.html#/c:@SDLPredefinedLayoutDoubleGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutDoubleGraphicWithSoftButtons","abstract":"

    A layout with two graphics and soft buttons

    "},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicOnly":{"name":"SDLPredefinedLayoutLargeGraphicOnly","abstract":"

    A layout with only a single large graphic

    "},"Constants.html#/c:@SDLPrerecordedSpeechHelp":{"name":"SDLPrerecordedSpeechHelp","abstract":"

    A prerecorded help prompt

    "},"Constants.html#/c:@SDLPrerecordedSpeechInitial":{"name":"SDLPrerecordedSpeechInitial","abstract":"

    A prerecorded initial prompt

    "},"Constants.html#/c:@SDLPrerecordedSpeechListen":{"name":"SDLPrerecordedSpeechListen","abstract":"

    A prerecorded listen prompt is available

    "},"Constants.html#/c:@SDLPrerecordedSpeechPositive":{"name":"SDLPrerecordedSpeechPositive","abstract":"

    A prerecorded positive indicator noise is available

    "},"Constants.html#/c:@SDLPrerecordedSpeechNegative":{"name":"SDLPrerecordedSpeechNegative","abstract":"

    A prerecorded negative indicator noise is available

    "},"Constants.html#/c:@SDLPrimaryAudioSourceNoSourceSelected":{"name":"SDLPrimaryAudioSourceNoSourceSelected","abstract":"

    Currently no source selected

    "},"Constants.html#/c:@SDLPrimaryAudioSourceUSB":{"name":"SDLPrimaryAudioSourceUSB","abstract":"

    USB is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceUSB2":{"name":"SDLPrimaryAudioSourceUSB2","abstract":"

    USB2 is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceBluetoothStereo":{"name":"SDLPrimaryAudioSourceBluetoothStereo","abstract":"

    Bluetooth Stereo is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceLineIn":{"name":"SDLPrimaryAudioSourceLineIn","abstract":"

    Line in is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceIpod":{"name":"SDLPrimaryAudioSourceIpod","abstract":"

    iPod is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceMobileApp":{"name":"SDLPrimaryAudioSourceMobileApp","abstract":"

    Mobile app is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceCD":{"name":"SDLPrimaryAudioSourceCD","abstract":"

    @abstract CD is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceAM":{"name":"SDLPrimaryAudioSourceAM","abstract":"

    @abstract Radio frequency AM is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceFM":{"name":"SDLPrimaryAudioSourceFM","abstract":"

    @abstract Radio frequency FM is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceXM":{"name":"SDLPrimaryAudioSourceXM","abstract":"

    @abstract Radio frequency XM is current source

    "},"Constants.html#/c:@SDLPrimaryAudioSourceDAB":{"name":"SDLPrimaryAudioSourceDAB","abstract":"

    @abstract Radio frequency DAB is current source

    "},"Constants.html#/c:@SDLRPCFunctionNameAddCommand":{"name":"SDLRPCFunctionNameAddCommand","abstract":"

    Function name for an AddCommand RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameAddSubMenu":{"name":"SDLRPCFunctionNameAddSubMenu","abstract":"

    Function name for an AddSubMenu RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameAlert":{"name":"SDLRPCFunctionNameAlert","abstract":"

    Function name for an Alert RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameAlertManeuver":{"name":"SDLRPCFunctionNameAlertManeuver","abstract":"

    Function name for an AlertManeuver RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameButtonPress":{"name":"SDLRPCFunctionNameButtonPress","abstract":"

    Function name for a ButtonPress RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameCancelInteraction":{"name":"SDLRPCFunctionNameCancelInteraction","abstract":"

    Function name for a CancelInteraction RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameChangeRegistration":{"name":"SDLRPCFunctionNameChangeRegistration","abstract":"

    Function name for a ChangeRegistration RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameCloseApplication":{"name":"SDLRPCFunctionNameCloseApplication","abstract":"

    Function name for a CloseApplication RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameCreateInteractionChoiceSet":{"name":"SDLRPCFunctionNameCreateInteractionChoiceSet","abstract":"

    Function name for a CreateInteractionChoiceSet RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteCommand":{"name":"SDLRPCFunctionNameDeleteCommand","abstract":"

    Function name for a DeleteCommand RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteFile":{"name":"SDLRPCFunctionNameDeleteFile","abstract":"

    Function name for a DeleteFile RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteInteractionChoiceSet":{"name":"SDLRPCFunctionNameDeleteInteractionChoiceSet","abstract":"

    Function name for a DeleteInteractionChoiceSet RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteSubMenu":{"name":"SDLRPCFunctionNameDeleteSubMenu","abstract":"

    Function name for a DeleteSubMenu RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDiagnosticMessage":{"name":"SDLRPCFunctionNameDiagnosticMessage","abstract":"

    Function name for a DiagnosticMessage RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDialNumber":{"name":"SDLRPCFunctionNameDialNumber","abstract":"

    Function name for a DialNumber RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameEncodedSyncPData":{"name":"SDLRPCFunctionNameEncodedSyncPData","abstract":"

    Function name for an CreateInteractionChoiceSet RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameEndAudioPassThru":{"name":"SDLRPCFunctionNameEndAudioPassThru","abstract":"

    Function name for an EndAudioPassThru RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGenericResponse":{"name":"SDLRPCFunctionNameGenericResponse","abstract":"

    Function name for an GenricResponse Response RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetAppServiceData":{"name":"SDLRPCFunctionNameGetAppServiceData","abstract":"

    Function name for an CreateInteractionChoiceSet RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetDTCs":{"name":"SDLRPCFunctionNameGetDTCs","abstract":"

    Function name for a GetDTCs RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetFile":{"name":"SDLRPCFunctionNameGetFile","abstract":"

    Function name for a GetFile RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetCloudAppProperties":{"name":"SDLRPCFunctionNameGetCloudAppProperties","abstract":"

    Function name for a GetCloudAppProperties RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetInteriorVehicleData":{"name":"SDLRPCFunctionNameGetInteriorVehicleData","abstract":"

    Function name for a GetInteriorVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetInteriorVehicleDataConsent":{"name":"SDLRPCFunctionNameGetInteriorVehicleDataConsent","abstract":"

    Function name for a GetInteriorVehicleDataConsent RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetSystemCapability":{"name":"SDLRPCFunctionNameGetSystemCapability","abstract":"

    Function name for a GetSystemCapability RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetVehicleData":{"name":"SDLRPCFunctionNameGetVehicleData","abstract":"

    Function name for a GetVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameGetWayPoints":{"name":"SDLRPCFunctionNameGetWayPoints","abstract":"

    Function name for a GetWayPoints RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameListFiles":{"name":"SDLRPCFunctionNameListFiles","abstract":"

    Function name for a ListFiles RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnAppInterfaceUnregistered":{"name":"SDLRPCFunctionNameOnAppInterfaceUnregistered","abstract":"

    Function name for an OnAppInterfaceUnregistered notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnAppServiceData":{"name":"SDLRPCFunctionNameOnAppServiceData","abstract":"

    Function name for an OnAppServiceData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnAudioPassThru":{"name":"SDLRPCFunctionNameOnAudioPassThru","abstract":"

    Function name for an OnAudioPassThru notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnButtonEvent":{"name":"SDLRPCFunctionNameOnButtonEvent","abstract":"

    Function name for an OnButtonEvent notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnButtonPress":{"name":"SDLRPCFunctionNameOnButtonPress","abstract":"

    Function name for an OnButtonPress notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnCommand":{"name":"SDLRPCFunctionNameOnCommand","abstract":"

    Function name for an OnCommand notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnDriverDistraction":{"name":"SDLRPCFunctionNameOnDriverDistraction","abstract":"

    Function name for an OnDriverDistraction notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnEncodedSyncPData":{"name":"SDLRPCFunctionNameOnEncodedSyncPData","abstract":"

    Function name for an OnEncodedSyncPData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnHashChange":{"name":"SDLRPCFunctionNameOnHashChange","abstract":"

    Function name for an OnHashChange notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnHMIStatus":{"name":"SDLRPCFunctionNameOnHMIStatus","abstract":"

    Function name for an OnHMIStatus notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnInteriorVehicleData":{"name":"SDLRPCFunctionNameOnInteriorVehicleData","abstract":"

    Function name for an OnInteriorVehicleData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnKeyboardInput":{"name":"SDLRPCFunctionNameOnKeyboardInput","abstract":"

    Function name for an OnKeyboardInput notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnLanguageChange":{"name":"SDLRPCFunctionNameOnLanguageChange","abstract":"

    Function name for an OnLanguageChange notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnLockScreenStatus":{"name":"SDLRPCFunctionNameOnLockScreenStatus","abstract":"

    Function name for an OnLockScreenStatus notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnPermissionsChange":{"name":"SDLRPCFunctionNameOnPermissionsChange","abstract":"

    Function name for an OnPermissionsChange notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnRCStatus":{"name":"SDLRPCFunctionNameOnRCStatus","abstract":"

    Function name for an OnRCStatus notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnSyncPData":{"name":"SDLRPCFunctionNameOnSyncPData","abstract":"

    Function name for an OnSyncPData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnSystemCapabilityUpdated":{"name":"SDLRPCFunctionNameOnSystemCapabilityUpdated","abstract":"

    Function name for an OnSystemCapabilityUpdated notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnSystemRequest":{"name":"SDLRPCFunctionNameOnSystemRequest","abstract":"

    Function name for an OnSystemRequest notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnTBTClientState":{"name":"SDLRPCFunctionNameOnTBTClientState","abstract":"

    Function name for an OnTBTClientState notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnTouchEvent":{"name":"SDLRPCFunctionNameOnTouchEvent","abstract":"

    Function name for an OnTouchEvent notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnVehicleData":{"name":"SDLRPCFunctionNameOnVehicleData","abstract":"

    Function name for an OnVehicleData notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameOnWayPointChange":{"name":"SDLRPCFunctionNameOnWayPointChange","abstract":"

    Function name for an OnWayPointChange notification RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePerformAppServiceInteraction":{"name":"SDLRPCFunctionNamePerformAppServiceInteraction","abstract":"

    Function name for a PerformAppServiceInteraction RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePerformAudioPassThru":{"name":"SDLRPCFunctionNamePerformAudioPassThru","abstract":"

    Function name for a PerformAppServiceInteraction RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePerformInteraction":{"name":"SDLRPCFunctionNamePerformInteraction","abstract":"

    Function name for a PerformInteraction RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePublishAppService":{"name":"SDLRPCFunctionNamePublishAppService","abstract":"

    Function name for a PublishAppService RPC

    "},"Constants.html#/c:@SDLRPCFunctionNamePutFile":{"name":"SDLRPCFunctionNamePutFile","abstract":"

    Function name for a PutFile RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameReadDID":{"name":"SDLRPCFunctionNameReadDID","abstract":"

    Function name for a ReadDID RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameReleaseInteriorVehicleDataModule":{"name":"SDLRPCFunctionNameReleaseInteriorVehicleDataModule","abstract":"

    Function name for a ReleaseInteriorVehicleDataModule RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameRegisterAppInterface":{"name":"SDLRPCFunctionNameRegisterAppInterface","abstract":"

    Function name for a RegisterAppInterface RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameReserved":{"name":"SDLRPCFunctionNameReserved","abstract":"

    Function name for a Reserved RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameResetGlobalProperties":{"name":"SDLRPCFunctionNameResetGlobalProperties","abstract":"

    Function name for a ResetGlobalProperties RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameScrollableMessage":{"name":"SDLRPCFunctionNameScrollableMessage","abstract":"

    Function name for a ScrollableMessage RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSendHapticData":{"name":"SDLRPCFunctionNameSendHapticData","abstract":"

    Function name for a SendHapticData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSendLocation":{"name":"SDLRPCFunctionNameSendLocation","abstract":"

    Function name for a SendLocation RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetAppIcon":{"name":"SDLRPCFunctionNameSetAppIcon","abstract":"

    Function name for a SetAppIcon RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetCloudAppProperties":{"name":"SDLRPCFunctionNameSetCloudAppProperties","abstract":"

    Function name for a SetCloudProperties RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetDisplayLayout":{"name":"SDLRPCFunctionNameSetDisplayLayout","abstract":"

    Function name for a SetDisplayLayout RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetGlobalProperties":{"name":"SDLRPCFunctionNameSetGlobalProperties","abstract":"

    Function name for a SetGlobalProperties RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetInteriorVehicleData":{"name":"SDLRPCFunctionNameSetInteriorVehicleData","abstract":"

    Function name for a SetInteriorVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSetMediaClockTimer":{"name":"SDLRPCFunctionNameSetMediaClockTimer","abstract":"

    Function name for a SetMediaClockTimer RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameShow":{"name":"SDLRPCFunctionNameShow","abstract":"

    Function name for a Show RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameShowAppMenu":{"name":"SDLRPCFunctionNameShowAppMenu","abstract":"

    Function name for a ShowAppMenu RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameShowConstantTBT":{"name":"SDLRPCFunctionNameShowConstantTBT","abstract":"

    Function name for a ShowConstantTBT RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSlider":{"name":"SDLRPCFunctionNameSlider","abstract":"

    Function name for a Slider RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSpeak":{"name":"SDLRPCFunctionNameSpeak","abstract":"

    Function name for a Speak RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSubscribeButton":{"name":"SDLRPCFunctionNameSubscribeButton","abstract":"

    Function name for a SubscribeButton RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSubscribeVehicleData":{"name":"SDLRPCFunctionNameSubscribeVehicleData","abstract":"

    Function name for a SubscribeVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSubscribeWayPoints":{"name":"SDLRPCFunctionNameSubscribeWayPoints","abstract":"

    Function name for a SubscribeWayPoints RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSyncPData":{"name":"SDLRPCFunctionNameSyncPData","abstract":"

    Function name for a SyncPData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameSystemRequest":{"name":"SDLRPCFunctionNameSystemRequest","abstract":"

    Function name for a SystemRequest RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnpublishAppService":{"name":"SDLRPCFunctionNameUnpublishAppService","abstract":"

    Function name for an UnpublishAppService RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnregisterAppInterface":{"name":"SDLRPCFunctionNameUnregisterAppInterface","abstract":"

    Function name for an UnregisterAppInterface RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeButton":{"name":"SDLRPCFunctionNameUnsubscribeButton","abstract":"

    Function name for an UnsubscribeButton RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeVehicleData":{"name":"SDLRPCFunctionNameUnsubscribeVehicleData","abstract":"

    Function name for an UnsubscribeVehicleData RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeWayPoints":{"name":"SDLRPCFunctionNameUnsubscribeWayPoints","abstract":"

    Function name for an UnsubscribeWayPoints RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameUpdateTurnList":{"name":"SDLRPCFunctionNameUpdateTurnList","abstract":"

    Function name for an UpdateTurnList RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameCreateWindow":{"name":"SDLRPCFunctionNameCreateWindow","abstract":"

    Function name for a CreateWindow RPC

    "},"Constants.html#/c:@SDLRPCFunctionNameDeleteWindow":{"name":"SDLRPCFunctionNameDeleteWindow","abstract":"

    Function name for a DeleteWindow RPC

    "},"Constants.html#/c:@SDLRadioBandAM":{"name":"SDLRadioBandAM","abstract":"

    Represents AM radio band

    "},"Constants.html#/c:@SDLRadioBandFM":{"name":"SDLRadioBandFM","abstract":"

    Represents FM radio band

    "},"Constants.html#/c:@SDLRadioBandXM":{"name":"SDLRadioBandXM","abstract":"

    Represents XM radio band

    "},"Constants.html#/c:@SDLRadioStateAcquiring":{"name":"SDLRadioStateAcquiring","abstract":"

    Represents Radio state as ACQUIRING

    "},"Constants.html#/c:@SDLRadioStateAcquired":{"name":"SDLRadioStateAcquired","abstract":"

    Represents Radio state as ACQUIRED

    "},"Constants.html#/c:@SDLRadioStateMulticast":{"name":"SDLRadioStateMulticast","abstract":"

    Represents Radio state as MULTICAST

    "},"Constants.html#/c:@SDLRadioStateNotFound":{"name":"SDLRadioStateNotFound","abstract":"

    Represents Radio state as NOT_FOUND

    "},"Constants.html#/c:@SDLRequestTypeHTTP":{"name":"SDLRequestTypeHTTP","abstract":"

    An HTTP request

    "},"Constants.html#/c:@SDLRequestTypeFileResume":{"name":"SDLRequestTypeFileResume","abstract":"

    A file resumption request

    "},"Constants.html#/c:@SDLRequestTypeAuthenticationRequest":{"name":"SDLRequestTypeAuthenticationRequest","abstract":"

    An authentication request

    "},"Constants.html#/c:@SDLRequestTypeAuthenticationChallenge":{"name":"SDLRequestTypeAuthenticationChallenge","abstract":"

    An authentication challenge

    "},"Constants.html#/c:@SDLRequestTypeAuthenticationAck":{"name":"SDLRequestTypeAuthenticationAck","abstract":"

    An authentication acknowledgment

    "},"Constants.html#/c:@SDLRequestTypeProprietary":{"name":"SDLRequestTypeProprietary","abstract":"

    An proprietary formatted request

    "},"Constants.html#/c:@SDLRequestTypeQueryApps":{"name":"SDLRequestTypeQueryApps","abstract":"

    An Query Apps request

    "},"Constants.html#/c:@SDLRequestTypeLaunchApp":{"name":"SDLRequestTypeLaunchApp","abstract":"

    A Launch Apps request

    "},"Constants.html#/c:@SDLRequestTypeLockScreenIconURL":{"name":"SDLRequestTypeLockScreenIconURL","abstract":"

    The URL for a lock screen icon

    "},"Constants.html#/c:@SDLRequestTypeTrafficMessageChannel":{"name":"SDLRequestTypeTrafficMessageChannel","abstract":"

    A traffic message channel request

    "},"Constants.html#/c:@SDLRequestTypeDriverProfile":{"name":"SDLRequestTypeDriverProfile","abstract":"

    A driver profile request

    "},"Constants.html#/c:@SDLRequestTypeVoiceSearch":{"name":"SDLRequestTypeVoiceSearch","abstract":"

    A voice search request

    "},"Constants.html#/c:@SDLRequestTypeNavigation":{"name":"SDLRequestTypeNavigation","abstract":"

    A navigation request

    "},"Constants.html#/c:@SDLRequestTypePhone":{"name":"SDLRequestTypePhone","abstract":"

    A phone request

    "},"Constants.html#/c:@SDLRequestTypeClimate":{"name":"SDLRequestTypeClimate","abstract":"

    A climate request

    "},"Constants.html#/c:@SDLRequestTypeSettings":{"name":"SDLRequestTypeSettings","abstract":"

    A settings request

    "},"Constants.html#/c:@SDLRequestTypeVehicleDiagnostics":{"name":"SDLRequestTypeVehicleDiagnostics","abstract":"

    A vehicle diagnostics request

    "},"Constants.html#/c:@SDLRequestTypeEmergency":{"name":"SDLRequestTypeEmergency","abstract":"

    An emergency request

    "},"Constants.html#/c:@SDLRequestTypeMedia":{"name":"SDLRequestTypeMedia","abstract":"

    A media request

    "},"Constants.html#/c:@SDLRequestTypeFOTA":{"name":"SDLRequestTypeFOTA","abstract":"

    A firmware over-the-air request

    "},"Constants.html#/c:@SDLRequestTypeOEMSpecific":{"name":"SDLRequestTypeOEMSpecific","abstract":"

    A request that is OEM specific using the RequestSubType in SystemRequest

    "},"Constants.html#/c:@SDLRequestTypeIconURL":{"name":"SDLRequestTypeIconURL","abstract":"

    A request for an icon url

    "},"Constants.html#/c:@SDLResultSuccess":{"name":"SDLResultSuccess","abstract":"

    The request succeeded

    "},"Constants.html#/c:@SDLResultInvalidData":{"name":"SDLResultInvalidData","abstract":"

    The request contained invalid data

    "},"Constants.html#/c:@SDLResultCharacterLimitExceeded":{"name":"SDLResultCharacterLimitExceeded","abstract":"

    The request had a string containing too many characters

    "},"Constants.html#/c:@SDLResultUnsupportedRequest":{"name":"SDLResultUnsupportedRequest","abstract":"

    The request is not supported by the IVI unit implementing SDL

    "},"Constants.html#/c:@SDLResultOutOfMemory":{"name":"SDLResultOutOfMemory","abstract":"

    The system could not process the request because the necessary memory couldn’t be allocated

    "},"Constants.html#/c:@SDLResultTooManyPendingRequests":{"name":"SDLResultTooManyPendingRequests","abstract":"

    There are too many requests pending (means that the response has not been delivered yet).

    "},"Constants.html#/c:@SDLResultInvalidId":{"name":"SDLResultInvalidId","abstract":"

    One of the provided IDs is not valid.

    "},"Constants.html#/c:@SDLResultDuplicateName":{"name":"SDLResultDuplicateName","abstract":"

    The provided name or synonym is a duplicate of some already-defined name or synonym.

    "},"Constants.html#/c:@SDLResultTooManyApplications":{"name":"SDLResultTooManyApplications","abstract":"

    There are already too many registered applications.

    "},"Constants.html#/c:@SDLResultApplicationRegisteredAlready":{"name":"SDLResultApplicationRegisteredAlready","abstract":"

    RegisterAppInterface has been called, but this app is already registered

    "},"Constants.html#/c:@SDLResultUnsupportedVersion":{"name":"SDLResultUnsupportedVersion","abstract":"

    The Head Unit doesn’t support the SDL version that is requested by the mobile application.

    "},"Constants.html#/c:@SDLResultWrongLanguage":{"name":"SDLResultWrongLanguage","abstract":"

    The requested language is currently not supported. This might be because of a mismatch of the currently active language on the head unit and the requested language.

    "},"Constants.html#/c:@SDLResultApplicationNotRegistered":{"name":"SDLResultApplicationNotRegistered","abstract":"

    A command can not be executed because no application has been registered with RegisterApplication.

    "},"Constants.html#/c:@SDLResultInUse":{"name":"SDLResultInUse","abstract":"

    The data may not be changed, because it is currently in use. For example when trying to delete a choice set that is currently involved in an interaction.

    "},"Constants.html#/c:@SDLResultVehicleDataNotAllowed":{"name":"SDLResultVehicleDataNotAllowed","abstract":"

    The user has turned off access to vehicle data, and it is globally unavailable to mobile applications.

    "},"Constants.html#/c:@SDLResultVehicleDataNotAvailable":{"name":"SDLResultVehicleDataNotAvailable","abstract":"

    The requested vehicle data is not available on this vehicle or is not published.

    "},"Constants.html#/c:@SDLResultRejected":{"name":"SDLResultRejected","abstract":"

    The requested command was rejected, e.g. because the mobile app is in background and cannot perform any HMI commands, or an HMI command (e.g. Speak) is rejected because a higher priority HMI command (e.g. Alert) is playing.

    "},"Constants.html#/c:@SDLResultAborted":{"name":"SDLResultAborted","abstract":"

    A command was aborted, e.g. due to user interaction (user pressed button), or an HMI command (e.g. Speak) is aborted because a higher priority HMI command (e.g. Alert) was requested.

    "},"Constants.html#/c:@SDLResultIgnored":{"name":"SDLResultIgnored","abstract":"

    A command was ignored, because the intended result is already in effect. For example, SetMediaClockTimer was used to pause the media clock although the clock is paused already.

    "},"Constants.html#/c:@SDLResultUnsupportedResource":{"name":"SDLResultUnsupportedResource","abstract":"

    A button that was requested for subscription is not supported under the current system.

    "},"Constants.html#/c:@SDLResultFileNotFound":{"name":"SDLResultFileNotFound","abstract":"

    A specified file could not be found on the head unit.

    "},"Constants.html#/c:@SDLResultGenericError":{"name":"SDLResultGenericError","abstract":"

    Provided data is valid but something went wrong in the lower layers.

    "},"Constants.html#/c:@SDLResultDisallowed":{"name":"SDLResultDisallowed","abstract":"

    RPC is not authorized in local policy table.

    "},"Constants.html#/c:@SDLResultUserDisallowed":{"name":"SDLResultUserDisallowed","abstract":"

    RPC is included in a functional group explicitly blocked by the user.

    "},"Constants.html#/c:@SDLResultTimedOut":{"name":"SDLResultTimedOut","abstract":"

    Overlay reached the maximum timeout and closed.

    "},"Constants.html#/c:@SDLResultCancelRoute":{"name":"SDLResultCancelRoute","abstract":"

    User selected to Cancel Route.

    "},"Constants.html#/c:@SDLResultCorruptedData":{"name":"SDLResultCorruptedData","abstract":"

    The data sent failed to pass CRC check in receiver end.

    "},"Constants.html#/c:@SDLResultTruncatedData":{"name":"SDLResultTruncatedData","abstract":"

    The RPC (e.g. ReadDID) executed successfully but the data exceeded the platform maximum threshold and thus, only part of the data is available.

    "},"Constants.html#/c:@SDLResultRetry":{"name":"SDLResultRetry","abstract":"

    The user interrupted the RPC (e.g. PerformAudioPassThru) and indicated to start over. Note, the app must issue the new RPC.

    "},"Constants.html#/c:@SDLResultWarnings":{"name":"SDLResultWarnings","abstract":"

    The RPC (e.g. SubscribeVehicleData) executed successfully but one or more items have a warning or failure.

    "},"Constants.html#/c:@SDLResultSaved":{"name":"SDLResultSaved","abstract":"

    The RPC (e.g. Slider) executed successfully and the user elected to save the current position / value.

    "},"Constants.html#/c:@SDLResultInvalidCertificate":{"name":"SDLResultInvalidCertificate","abstract":"

    The certificate provided during authentication is invalid.

    "},"Constants.html#/c:@SDLResultExpiredCertificate":{"name":"SDLResultExpiredCertificate","abstract":"

    The certificate provided during authentication is expired.

    "},"Constants.html#/c:@SDLResultResumeFailed":{"name":"SDLResultResumeFailed","abstract":"

    The provided hash ID does not match the hash of the current set of registered data or the core could not resume the previous data.

    "},"Constants.html#/c:@SDLResultDataNotAvailable":{"name":"SDLResultDataNotAvailable","abstract":"

    The requested data is not available on this vehicle or is not published for the connected app.

    "},"Constants.html#/c:@SDLResultReadOnly":{"name":"SDLResultReadOnly","abstract":"

    The requested data is read only thus cannot be change via remote control .

    "},"Constants.html#/c:@SDLResultEncryptionNeeded":{"name":"SDLResultEncryptionNeeded","abstract":"

    The RPC request needs to be encrypted.

    "},"Constants.html#/c:@SDLSamplingRate8KHZ":{"name":"SDLSamplingRate8KHZ","abstract":"

    Sampling rate of 8 kHz

    "},"Constants.html#/c:@SDLSamplingRate16KHZ":{"name":"SDLSamplingRate16KHZ","abstract":"

    Sampling rate of 16 kHz

    "},"Constants.html#/c:@SDLSamplingRate22KHZ":{"name":"SDLSamplingRate22KHZ","abstract":"

    Sampling rate of 22 kHz

    "},"Constants.html#/c:@SDLSamplingRate44KHZ":{"name":"SDLSamplingRate44KHZ","abstract":"

    Sampling rate of 44 kHz

    "},"Constants.html#/c:@SDLSeatMemoryActionTypeSave":{"name":"SDLSeatMemoryActionTypeSave","abstract":"

    @abstract Save current seat postions and settings to seat memory.

    "},"Constants.html#/c:@SDLSeatMemoryActionTypeRestore":{"name":"SDLSeatMemoryActionTypeRestore","abstract":"

    @abstract Restore / apply the seat memory settings to the current seat.

    "},"Constants.html#/c:@SDLSeatMemoryActionTypeNone":{"name":"SDLSeatMemoryActionTypeNone","abstract":"

    @abstract No action to be performed.

    "},"Constants.html#/c:@SDLServiceUpdatePublished":{"name":"SDLServiceUpdatePublished","abstract":"

    The service has just been published with the module and once activated to the primary service of its type, it will be ready for possible consumption.

    "},"Constants.html#/c:@SDLServiceUpdateRemoved":{"name":"SDLServiceUpdateRemoved","abstract":"

    The service has just been unpublished with the module and is no longer accessible.

    "},"Constants.html#/c:@SDLServiceUpdateActivated":{"name":"SDLServiceUpdateActivated","abstract":"

    The service is activated as the primary service of this type. All requests dealing with this service type will be handled by this service.

    "},"Constants.html#/c:@SDLServiceUpdateDeactivated":{"name":"SDLServiceUpdateDeactivated","abstract":"

    The service has been deactivated as the primary service of its type.

    "},"Constants.html#/c:@SDLServiceUpdateManifestUpdate":{"name":"SDLServiceUpdateManifestUpdate","abstract":"

    The service has updated its manifest. This could imply updated capabilities.

    "},"Constants.html#/c:@SDLSoftButtonTypeText":{"name":"SDLSoftButtonTypeText","abstract":"

    Text kind Softbutton

    "},"Constants.html#/c:@SDLSoftButtonTypeImage":{"name":"SDLSoftButtonTypeImage","abstract":"

    Image kind Softbutton

    "},"Constants.html#/c:@SDLSoftButtonTypeBoth":{"name":"SDLSoftButtonTypeBoth","abstract":"

    Both (Text & Image) kind Softbutton

    "},"Constants.html#/c:@SDLSpeechCapabilitiesText":{"name":"SDLSpeechCapabilitiesText","abstract":"

    The SDL platform can speak text phrases.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesSAPIPhonemes":{"name":"SDLSpeechCapabilitiesSAPIPhonemes","abstract":"

    The SDL platform can speak SAPI Phonemes.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesLHPlusPhonemes":{"name":"SDLSpeechCapabilitiesLHPlusPhonemes","abstract":"

    The SDL platform can speak LHPlus Phonemes.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesPrerecorded":{"name":"SDLSpeechCapabilitiesPrerecorded","abstract":"

    The SDL platform can speak Prerecorded indicators and prompts.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesSilence":{"name":"SDLSpeechCapabilitiesSilence","abstract":"

    The SDL platform can speak Silence.

    "},"Constants.html#/c:@SDLSpeechCapabilitiesFile":{"name":"SDLSpeechCapabilitiesFile","abstract":"

    The SDL platform can play a file

    "},"Constants.html#/c:@SDLStaticIconNameAcceptCall":{"name":"SDLStaticIconNameAcceptCall","abstract":"

    Static icon accept call / active phone call in progress / initiate a phone call

    "},"Constants.html#/c:@SDLStaticIconNameAddWaypoint":{"name":"SDLStaticIconNameAddWaypoint","abstract":"

    Static icon add waypoint

    "},"Constants.html#/c:@SDLStaticIconNameAlbum":{"name":"SDLStaticIconNameAlbum","abstract":"

    Static icon album

    "},"Constants.html#/c:@SDLStaticIconNameAmbientLighting":{"name":"SDLStaticIconNameAmbientLighting","abstract":"

    Static icon ambient lighting

    "},"Constants.html#/c:@SDLStaticIconNameArrowNorth":{"name":"SDLStaticIconNameArrowNorth","abstract":"

    Static icon arrow - north

    "},"Constants.html#/c:@SDLStaticIconNameAudioMute":{"name":"SDLStaticIconNameAudioMute","abstract":"

    Static icon audio mute

    "},"Constants.html#/c:@SDLStaticIconNameAudiobookEpisode":{"name":"SDLStaticIconNameAudiobookEpisode","abstract":"

    Static icon audiobook episode

    "},"Constants.html#/c:@SDLStaticIconNameAudiobookNarrator":{"name":"SDLStaticIconNameAudiobookNarrator","abstract":"

    Static icon audiobook narrator

    "},"Constants.html#/c:@SDLStaticIconNameAuxillaryAudio":{"name":"SDLStaticIconNameAuxillaryAudio","abstract":"

    Static icon auxillary audio

    "},"Constants.html#/c:@SDLStaticIconNameBack":{"name":"SDLStaticIconNameBack","abstract":"

    Static icon back / return

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity0Of5":{"name":"SDLStaticIconNameBatteryCapacity0Of5","abstract":"

    Static icon battery capacity 0 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity1Of5":{"name":"SDLStaticIconNameBatteryCapacity1Of5","abstract":"

    Static icon battery capacity 1 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity2Of5":{"name":"SDLStaticIconNameBatteryCapacity2Of5","abstract":"

    Static icon battery capacity 2 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity3Of5":{"name":"SDLStaticIconNameBatteryCapacity3Of5","abstract":"

    Static icon battery capacity 3 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity4Of5":{"name":"SDLStaticIconNameBatteryCapacity4Of5","abstract":"

    Static icon battery capacity 4 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity5Of5":{"name":"SDLStaticIconNameBatteryCapacity5Of5","abstract":"

    Static icon battery capacity 5 of 5

    "},"Constants.html#/c:@SDLStaticIconNameBluetoothAudioSource":{"name":"SDLStaticIconNameBluetoothAudioSource","abstract":"

    Static icon bluetooth audio source

    "},"Constants.html#/c:@SDLStaticIconNameBluetooth1":{"name":"SDLStaticIconNameBluetooth1","abstract":"

    Static icon bluetooth1

    "},"Constants.html#/c:@SDLStaticIconNameBluetooth2":{"name":"SDLStaticIconNameBluetooth2","abstract":"

    Static icon bluetooth2

    "},"Constants.html#/c:@SDLStaticIconNameBrowse":{"name":"SDLStaticIconNameBrowse","abstract":"

    Static icon browse

    "},"Constants.html#/c:@SDLStaticIconNameCellPhoneInRoamingMode":{"name":"SDLStaticIconNameCellPhoneInRoamingMode","abstract":"

    Static icon cell phone in roaming mode

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength0Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength0Of5Bars","abstract":"

    Static icon cell service signal strength 0 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength1Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength1Of5Bars","abstract":"

    Static icon cell service signal strength 1 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength2Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength2Of5Bars","abstract":"

    Static icon cell service signal strength 2 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength3Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength3Of5Bars","abstract":"

    Static icon cell service signal strength 3 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength4Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength4Of5Bars","abstract":"

    Static icon cell service signal strength 4 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength5Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength5Of5Bars","abstract":"

    Static icon cell service signal strength 5 of 5 bars

    "},"Constants.html#/c:@SDLStaticIconNameChangeLaneLeft":{"name":"SDLStaticIconNameChangeLaneLeft","abstract":"

    Static icon change lane left

    "},"Constants.html#/c:@SDLStaticIconNameChangeLaneRight":{"name":"SDLStaticIconNameChangeLaneRight","abstract":"

    Static icon change lane right

    "},"Constants.html#/c:@SDLStaticIconNameCheckBoxChecked":{"name":"SDLStaticIconNameCheckBoxChecked","abstract":"

    Static icon check box checked

    "},"Constants.html#/c:@SDLStaticIconNameCheckBoxUnchecked":{"name":"SDLStaticIconNameCheckBoxUnchecked","abstract":"

    Static icon check box unchecked

    "},"Constants.html#/c:@SDLStaticIconNameClimate":{"name":"SDLStaticIconNameClimate","abstract":"

    Static icon climate

    "},"Constants.html#/c:@SDLStaticIconNameClock":{"name":"SDLStaticIconNameClock","abstract":"

    Static icon clock

    "},"Constants.html#/c:@SDLStaticIconNameCompose":{"name":"SDLStaticIconNameCompose","abstract":"

    Static icon compose (e.g. message)

    "},"Constants.html#/c:@SDLStaticIconNameContact":{"name":"SDLStaticIconNameContact","abstract":"

    Static icon contact / person

    "},"Constants.html#/c:@SDLStaticIconNameContinue":{"name":"SDLStaticIconNameContinue","abstract":"

    Static icon continue

    "},"Constants.html#/c:@SDLStaticIconNameDash":{"name":"SDLStaticIconNameDash","abstract":"

    Static icon dash / bullet point

    "},"Constants.html#/c:@SDLStaticIconNameDate":{"name":"SDLStaticIconNameDate","abstract":"

    Static icon date / calendar

    "},"Constants.html#/c:@SDLStaticIconNameDelete":{"name":"SDLStaticIconNameDelete","abstract":"

    Static icon delete/remove - trash

    "},"Constants.html#/c:@SDLStaticIconNameDestination":{"name":"SDLStaticIconNameDestination","abstract":"

    Static icon destination

    "},"Constants.html#/c:@SDLStaticIconNameDestinationFerryAhead":{"name":"SDLStaticIconNameDestinationFerryAhead","abstract":"

    Static icon destination ferry ahead

    "},"Constants.html#/c:@SDLStaticIconNameEbookmark":{"name":"SDLStaticIconNameEbookmark","abstract":"

    Static icon ebookmark (e.g. message, feed)

    "},"Constants.html#/c:@SDLStaticIconNameEmpty":{"name":"SDLStaticIconNameEmpty","abstract":"

    Static icon empty (i.e. no image)

    "},"Constants.html#/c:@SDLStaticIconNameEndCall":{"name":"SDLStaticIconNameEndCall","abstract":"

    Static icon end call / reject call

    "},"Constants.html#/c:@SDLStaticIconNameFail":{"name":"SDLStaticIconNameFail","abstract":"

    Static icon fail / X

    "},"Constants.html#/c:@SDLStaticIconNameFastForward30Secs":{"name":"SDLStaticIconNameFastForward30Secs","abstract":"

    Static icon fast forward 30 secs

    "},"Constants.html#/c:@SDLStaticIconNameFavoriteHeart":{"name":"SDLStaticIconNameFavoriteHeart","abstract":"

    Static icon favorite / heart

    "},"Constants.html#/c:@SDLStaticIconNameFavoriteStar":{"name":"SDLStaticIconNameFavoriteStar","abstract":"

    Static icon favorite / star

    "},"Constants.html#/c:@SDLStaticIconNameFaxNumber":{"name":"SDLStaticIconNameFaxNumber","abstract":"

    Static icon fax number

    "},"Constants.html#/c:@SDLStaticIconNameFilename":{"name":"SDLStaticIconNameFilename","abstract":"

    Static icon filename

    "},"Constants.html#/c:@SDLStaticIconNameFilter":{"name":"SDLStaticIconNameFilter","abstract":"

    Static icon filter / search

    "},"Constants.html#/c:@SDLStaticIconNameFolder":{"name":"SDLStaticIconNameFolder","abstract":"

    Static icon folder

    "},"Constants.html#/c:@SDLStaticIconNameFuelPrices":{"name":"SDLStaticIconNameFuelPrices","abstract":"

    Static icon fuel prices

    "},"Constants.html#/c:@SDLStaticIconNameFullMap":{"name":"SDLStaticIconNameFullMap","abstract":"

    Static icon full map

    "},"Constants.html#/c:@SDLStaticIconNameGenericPhoneNumber":{"name":"SDLStaticIconNameGenericPhoneNumber","abstract":"

    Static icon generic phone number

    "},"Constants.html#/c:@SDLStaticIconNameGenre":{"name":"SDLStaticIconNameGenre","abstract":"

    Static icon genre

    "},"Constants.html#/c:@SDLStaticIconNameGlobalKeyboard":{"name":"SDLStaticIconNameGlobalKeyboard","abstract":"

    Static icon global keyboard

    "},"Constants.html#/c:@SDLStaticIconNameHighwayExitInformation":{"name":"SDLStaticIconNameHighwayExitInformation","abstract":"

    Static icon highway exit information

    "},"Constants.html#/c:@SDLStaticIconNameHomePhoneNumber":{"name":"SDLStaticIconNameHomePhoneNumber","abstract":"

    Static icon home phone number

    "},"Constants.html#/c:@SDLStaticIconNameHyperlink":{"name":"SDLStaticIconNameHyperlink","abstract":"

    Static icon hyperlink

    "},"Constants.html#/c:@SDLStaticIconNameID3TagUnknown":{"name":"SDLStaticIconNameID3TagUnknown","abstract":"

    Static icon ID3 tag unknown

    "},"Constants.html#/c:@SDLStaticIconNameIncomingCalls":{"name":"SDLStaticIconNameIncomingCalls","abstract":"

    Static icon incoming calls (in list of phone calls)

    "},"Constants.html#/c:@SDLStaticIconNameInformation":{"name":"SDLStaticIconNameInformation","abstract":"

    Static icon information

    "},"Constants.html#/c:@SDLStaticIconNameIPodMediaSource":{"name":"SDLStaticIconNameIPodMediaSource","abstract":"

    Static icon IPOD media source

    "},"Constants.html#/c:@SDLStaticIconNameJoinCalls":{"name":"SDLStaticIconNameJoinCalls","abstract":"

    Static icon join calls

    "},"Constants.html#/c:@SDLStaticIconNameKeepLeft":{"name":"SDLStaticIconNameKeepLeft","abstract":"

    Static icon keep left

    "},"Constants.html#/c:@SDLStaticIconNameKeepRight":{"name":"SDLStaticIconNameKeepRight","abstract":"

    Static icon keep right

    "},"Constants.html#/c:@SDLStaticIconNameKey":{"name":"SDLStaticIconNameKey","abstract":"

    Static icon key / keycode

    "},"Constants.html#/c:@SDLStaticIconNameLeft":{"name":"SDLStaticIconNameLeft","abstract":"

    Static icon left

    "},"Constants.html#/c:@SDLStaticIconNameLeftArrow":{"name":"SDLStaticIconNameLeftArrow","abstract":"

    Static icon left arrow / back

    "},"Constants.html#/c:@SDLStaticIconNameLeftExit":{"name":"SDLStaticIconNameLeftExit","abstract":"

    Static icon left exit

    "},"Constants.html#/c:@SDLStaticIconNameLineInAudioSource":{"name":"SDLStaticIconNameLineInAudioSource","abstract":"

    Static icon LINE IN audio source

    "},"Constants.html#/c:@SDLStaticIconNameLocked":{"name":"SDLStaticIconNameLocked","abstract":"

    Static icon locked

    "},"Constants.html#/c:@SDLStaticIconNameMediaControlLeftArrow":{"name":"SDLStaticIconNameMediaControlLeftArrow","abstract":"

    Static icon media control - left arrow

    "},"Constants.html#/c:@SDLStaticIconNameMediaControlRecording":{"name":"SDLStaticIconNameMediaControlRecording","abstract":"

    Static icon media control - recording

    "},"Constants.html#/c:@SDLStaticIconNameMediaControlRightArrow":{"name":"SDLStaticIconNameMediaControlRightArrow","abstract":"

    Static icon media control - right arrow

    "},"Constants.html#/c:@SDLStaticIconNameMediaControlStop":{"name":"SDLStaticIconNameMediaControlStop","abstract":"

    Static icon media control - stop (e.g. streaming)

    "},"Constants.html#/c:@SDLStaticIconNameMicrophone":{"name":"SDLStaticIconNameMicrophone","abstract":"

    Static icon microphone

    "},"Constants.html#/c:@SDLStaticIconNameMissedCalls":{"name":"SDLStaticIconNameMissedCalls","abstract":"

    Static icon missed calls (in list of phone calls)

    "},"Constants.html#/c:@SDLStaticIconNameMobilePhoneNumber":{"name":"SDLStaticIconNameMobilePhoneNumber","abstract":"

    Static icon mobile phone number

    "},"Constants.html#/c:@SDLStaticIconNameMoveDown":{"name":"SDLStaticIconNameMoveDown","abstract":"

    Static icon move down / download

    "},"Constants.html#/c:@SDLStaticIconNameMoveUp":{"name":"SDLStaticIconNameMoveUp","abstract":"

    Static icon move up

    "},"Constants.html#/c:@SDLStaticIconNameMP3TagArtist":{"name":"SDLStaticIconNameMP3TagArtist","abstract":"

    Static icon MP3 tag artist

    "},"Constants.html#/c:@SDLStaticIconNameNavigation":{"name":"SDLStaticIconNameNavigation","abstract":"

    Static icon navigation / navigation settings

    "},"Constants.html#/c:@SDLStaticIconNameNavigationCurrentDirection":{"name":"SDLStaticIconNameNavigationCurrentDirection","abstract":"

    Static icon navigation current direction

    "},"Constants.html#/c:@SDLStaticIconNameNegativeRatingThumbsDown":{"name":"SDLStaticIconNameNegativeRatingThumbsDown","abstract":"

    Static icon negative rating - thumbs down

    "},"Constants.html#/c:@SDLStaticIconNameNew":{"name":"SDLStaticIconNameNew","abstract":"

    Static icon new/unread text message/email

    "},"Constants.html#/c:@SDLStaticIconNameOfficePhoneNumber":{"name":"SDLStaticIconNameOfficePhoneNumber","abstract":"

    Static icon office phone number / work phone number

    "},"Constants.html#/c:@SDLStaticIconNameOpened":{"name":"SDLStaticIconNameOpened","abstract":"

    Static icon opened/read text message/email

    "},"Constants.html#/c:@SDLStaticIconNameOrigin":{"name":"SDLStaticIconNameOrigin","abstract":"

    Static icon origin / nearby locale / current position

    "},"Constants.html#/c:@SDLStaticIconNameOutgoingCalls":{"name":"SDLStaticIconNameOutgoingCalls","abstract":"

    Static icon outgoing calls (in list of phone calls)

    "},"Constants.html#/c:@SDLStaticIconNamePause":{"name":"SDLStaticIconNamePause","abstract":"

    Static icon play / pause - pause active

    "},"Constants.html#/c:@SDLStaticIconNamePhoneCall1":{"name":"SDLStaticIconNamePhoneCall1","abstract":"

    Static icon phone call 1

    "},"Constants.html#/c:@SDLStaticIconNamePhoneCall2":{"name":"SDLStaticIconNamePhoneCall2","abstract":"

    Static icon phone call 2

    "},"Constants.html#/c:@SDLStaticIconNamePhoneDevice":{"name":"SDLStaticIconNamePhoneDevice","abstract":"

    Static icon phone device

    "},"Constants.html#/c:@SDLStaticIconNamePhonebook":{"name":"SDLStaticIconNamePhonebook","abstract":"

    Static icon phonebook

    "},"Constants.html#/c:@SDLStaticIconNamePhoto":{"name":"SDLStaticIconNamePhoto","abstract":"

    Static icon photo / picture

    "},"Constants.html#/c:@SDLStaticIconNamePlay":{"name":"SDLStaticIconNamePlay","abstract":"

    Static icon play / pause - play active

    "},"Constants.html#/c:@SDLStaticIconNamePlaylist":{"name":"SDLStaticIconNamePlaylist","abstract":"

    Static icon playlist

    "},"Constants.html#/c:@SDLStaticIconNamePopUp":{"name":"SDLStaticIconNamePopUp","abstract":"

    Static icon pop-up

    "},"Constants.html#/c:@SDLStaticIconNamePositiveRatingThumbsUp":{"name":"SDLStaticIconNamePositiveRatingThumbsUp","abstract":"

    Static icon positive rating - thumbs up

    "},"Constants.html#/c:@SDLStaticIconNamePower":{"name":"SDLStaticIconNamePower","abstract":"

    Static icon power

    "},"Constants.html#/c:@SDLStaticIconNamePrimaryPhone":{"name":"SDLStaticIconNamePrimaryPhone","abstract":"

    Static icon primary phone (favorite)

    "},"Constants.html#/c:@SDLStaticIconNameRadioButtonChecked":{"name":"SDLStaticIconNameRadioButtonChecked","abstract":"

    Static icon radio button checked

    "},"Constants.html#/c:@SDLStaticIconNameRadioButtonUnchecked":{"name":"SDLStaticIconNameRadioButtonUnchecked","abstract":"

    Static icon radio button unchecked

    "},"Constants.html#/c:@SDLStaticIconNameRecentCalls":{"name":"SDLStaticIconNameRecentCalls","abstract":"

    Static icon recent calls / history

    "},"Constants.html#/c:@SDLStaticIconNameRecentDestinations":{"name":"SDLStaticIconNameRecentDestinations","abstract":"

    Static icon recent destinations

    "},"Constants.html#/c:@SDLStaticIconNameRedo":{"name":"SDLStaticIconNameRedo","abstract":"

    Static icon redo

    "},"Constants.html#/c:@SDLStaticIconNameRefresh":{"name":"SDLStaticIconNameRefresh","abstract":"

    Static icon refresh

    "},"Constants.html#/c:@SDLStaticIconNameRemoteDiagnosticsCheckEngine":{"name":"SDLStaticIconNameRemoteDiagnosticsCheckEngine","abstract":"

    Static icon remote diagnostics - check engine

    "},"Constants.html#/c:@SDLStaticIconNameRendered911Assist":{"name":"SDLStaticIconNameRendered911Assist","abstract":"

    Static icon rendered 911 assist / emergency assistance

    "},"Constants.html#/c:@SDLStaticIconNameRepeat":{"name":"SDLStaticIconNameRepeat","abstract":"

    Static icon repeat

    "},"Constants.html#/c:@SDLStaticIconNameRepeatPlay":{"name":"SDLStaticIconNameRepeatPlay","abstract":"

    Static icon repeat play

    "},"Constants.html#/c:@SDLStaticIconNameReply":{"name":"SDLStaticIconNameReply","abstract":"

    Static icon reply

    "},"Constants.html#/c:@SDLStaticIconNameRewind30Secs":{"name":"SDLStaticIconNameRewind30Secs","abstract":"

    Static icon rewind 30 secs

    "},"Constants.html#/c:@SDLStaticIconNameRight":{"name":"SDLStaticIconNameRight","abstract":"

    Static icon right

    "},"Constants.html#/c:@SDLStaticIconNameRightExit":{"name":"SDLStaticIconNameRightExit","abstract":"

    Static icon right exit

    "},"Constants.html#/c:@SDLStaticIconNameRingtones":{"name":"SDLStaticIconNameRingtones","abstract":"

    Static icon ringtones

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand1":{"name":"SDLStaticIconNameRoundaboutLeftHand1","abstract":"

    Static icon roundabout left hand 1

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand2":{"name":"SDLStaticIconNameRoundaboutLeftHand2","abstract":"

    Static icon roundabout left hand 2

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand3":{"name":"SDLStaticIconNameRoundaboutLeftHand3","abstract":"

    Static icon roundabout left hand 3

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand4":{"name":"SDLStaticIconNameRoundaboutLeftHand4","abstract":"

    Static icon roundabout left hand 4

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand5":{"name":"SDLStaticIconNameRoundaboutLeftHand5","abstract":"

    Static icon roundabout left hand 5

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand6":{"name":"SDLStaticIconNameRoundaboutLeftHand6","abstract":"

    Static icon roundabout left hand 6

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand7":{"name":"SDLStaticIconNameRoundaboutLeftHand7","abstract":"

    Static icon roundabout left hand 7

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand1":{"name":"SDLStaticIconNameRoundaboutRightHand1","abstract":"

    Static icon roundabout right hand 1

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand2":{"name":"SDLStaticIconNameRoundaboutRightHand2","abstract":"

    Static icon roundabout right hand 2

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand3":{"name":"SDLStaticIconNameRoundaboutRightHand3","abstract":"

    Static icon roundabout right hand 3

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand4":{"name":"SDLStaticIconNameRoundaboutRightHand4","abstract":"

    Static icon roundabout right hand 4

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand5":{"name":"SDLStaticIconNameRoundaboutRightHand5","abstract":"

    Static icon roundabout right hand 5

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand6":{"name":"SDLStaticIconNameRoundaboutRightHand6","abstract":"

    Static icon roundabout right hand 6

    "},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand7":{"name":"SDLStaticIconNameRoundaboutRightHand7","abstract":"

    Static icon roundabout right hand 7

    "},"Constants.html#/c:@SDLStaticIconNameRSS":{"name":"SDLStaticIconNameRSS","abstract":"

    Static icon RSS

    "},"Constants.html#/c:@SDLStaticIconNameSettings":{"name":"SDLStaticIconNameSettings","abstract":"

    Static icon settings / menu

    "},"Constants.html#/c:@SDLStaticIconNameSharpLeft":{"name":"SDLStaticIconNameSharpLeft","abstract":"

    Static icon sharp left

    "},"Constants.html#/c:@SDLStaticIconNameSharpRight":{"name":"SDLStaticIconNameSharpRight","abstract":"

    Static icon sharp right

    "},"Constants.html#/c:@SDLStaticIconNameShow":{"name":"SDLStaticIconNameShow","abstract":"

    Static icon show

    "},"Constants.html#/c:@SDLStaticIconNameShufflePlay":{"name":"SDLStaticIconNameShufflePlay","abstract":"

    Static icon shuffle play

    "},"Constants.html#/c:@SDLStaticIconNameSkiPlaces":{"name":"SDLStaticIconNameSkiPlaces","abstract":"

    Static icon ski places / elevation / altitude

    "},"Constants.html#/c:@SDLStaticIconNameSlightLeft":{"name":"SDLStaticIconNameSlightLeft","abstract":"

    Static icon slight left

    "},"Constants.html#/c:@SDLStaticIconNameSlightRight":{"name":"SDLStaticIconNameSlightRight","abstract":"

    Static icon slight right

    "},"Constants.html#/c:@SDLStaticIconNameSmartphone":{"name":"SDLStaticIconNameSmartphone","abstract":"

    Static icon smartphone

    "},"Constants.html#/c:@SDLStaticIconNameSortList":{"name":"SDLStaticIconNameSortList","abstract":"

    Static icon sort list

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber0":{"name":"SDLStaticIconNameSpeedDialNumbersNumber0","abstract":"

    Static icon speed dial numbers - number 0

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber1":{"name":"SDLStaticIconNameSpeedDialNumbersNumber1","abstract":"

    Static icon speed dial numbers - number 1

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber2":{"name":"SDLStaticIconNameSpeedDialNumbersNumber2","abstract":"

    Static icon speed dial numbers - number 2

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber3":{"name":"SDLStaticIconNameSpeedDialNumbersNumber3","abstract":"

    Static icon speed dial numbers - number 3

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber4":{"name":"SDLStaticIconNameSpeedDialNumbersNumber4","abstract":"

    Static icon speed dial numbers - number 4

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber5":{"name":"SDLStaticIconNameSpeedDialNumbersNumber5","abstract":"

    Static icon speed dial numbers - number 5

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber6":{"name":"SDLStaticIconNameSpeedDialNumbersNumber6","abstract":"

    Static icon speed dial numbers - number 6

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber7":{"name":"SDLStaticIconNameSpeedDialNumbersNumber7","abstract":"

    Static icon speed dial numbers - number 7

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber8":{"name":"SDLStaticIconNameSpeedDialNumbersNumber8","abstract":"

    Static icon speed dial numbers - number 8

    "},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber9":{"name":"SDLStaticIconNameSpeedDialNumbersNumber9","abstract":"

    Static icon speed dial numbers - number 9

    "},"Constants.html#/c:@SDLStaticIconNameSuccess":{"name":"SDLStaticIconNameSuccess","abstract":"

    Static icon success / check

    "},"Constants.html#/c:@SDLStaticIconNameTrackTitle":{"name":"SDLStaticIconNameTrackTitle","abstract":"

    Static icon track title / song title

    "},"Constants.html#/c:@SDLStaticIconNameTrafficReport":{"name":"SDLStaticIconNameTrafficReport","abstract":"

    Static icon traffic report

    "},"Constants.html#/c:@SDLStaticIconNameTurnList":{"name":"SDLStaticIconNameTurnList","abstract":"

    Static icon turn list

    "},"Constants.html#/c:@SDLStaticIconNameUTurnLeftTraffic":{"name":"SDLStaticIconNameUTurnLeftTraffic","abstract":"

    Static icon u-turn left traffic

    "},"Constants.html#/c:@SDLStaticIconNameUTurnRightTraffic":{"name":"SDLStaticIconNameUTurnRightTraffic","abstract":"

    Static icon u-turn right traffic

    "},"Constants.html#/c:@SDLStaticIconNameUndo":{"name":"SDLStaticIconNameUndo","abstract":"

    Static icon undo

    "},"Constants.html#/c:@SDLStaticIconNameUnlocked":{"name":"SDLStaticIconNameUnlocked","abstract":"

    Static icon unlocked

    "},"Constants.html#/c:@SDLStaticIconNameUSBMediaAudioSource":{"name":"SDLStaticIconNameUSBMediaAudioSource","abstract":"

    Static icon USB media audio source

    "},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo1":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo1","abstract":"

    Static icon voice control scrollbar - list item no. 1

    "},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo2":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo2","abstract":"

    Static icon voice control scrollbar - list item no. 2

    "},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo3":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo3","abstract":"

    Static icon voice control scrollbar - list item no. 3

    "},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo4":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo4","abstract":"

    Static icon voice control scrollbar - list item no. 4

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionFailed":{"name":"SDLStaticIconNameVoiceRecognitionFailed","abstract":"

    Static icon voice recognition - failed

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionPause":{"name":"SDLStaticIconNameVoiceRecognitionPause","abstract":"

    Static icon voice recognition - pause

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSuccessful":{"name":"SDLStaticIconNameVoiceRecognitionSuccessful","abstract":"

    Static icon voice recognition - successful

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemActive":{"name":"SDLStaticIconNameVoiceRecognitionSystemActive","abstract":"

    Static icon voice recognition - system active

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemListening":{"name":"SDLStaticIconNameVoiceRecognitionSystemListening","abstract":"

    Static icon voice recognition - system listening

    "},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionTryAgain":{"name":"SDLStaticIconNameVoiceRecognitionTryAgain","abstract":"

    Static icon voice recognition - try again

    "},"Constants.html#/c:@SDLStaticIconNameWarning":{"name":"SDLStaticIconNameWarning","abstract":"

    Static icon warning / safety alert

    "},"Constants.html#/c:@SDLStaticIconNameWeather":{"name":"SDLStaticIconNameWeather","abstract":"

    Static icon weather

    "},"Constants.html#/c:@SDLStaticIconNameWifiFull":{"name":"SDLStaticIconNameWifiFull","abstract":"

    Static icon wifi full

    "},"Constants.html#/c:@SDLStaticIconNameZoomIn":{"name":"SDLStaticIconNameZoomIn","abstract":"

    Static icon zoom in

    "},"Constants.html#/c:@SDLStaticIconNameZoomOut":{"name":"SDLStaticIconNameZoomOut","abstract":"

    Static icon zoom out

    "},"Constants.html#/c:@SDLVideoStreamDidStartNotification":{"name":"SDLVideoStreamDidStartNotification","abstract":"

    Name of video stream start notification

    "},"Constants.html#/c:@SDLVideoStreamDidStopNotification":{"name":"SDLVideoStreamDidStopNotification","abstract":"

    Name of video stream stop notification

    "},"Constants.html#/c:@SDLVideoStreamSuspendedNotification":{"name":"SDLVideoStreamSuspendedNotification","abstract":"

    Name of video stream suspended notification

    "},"Constants.html#/c:@SDLAudioStreamDidStartNotification":{"name":"SDLAudioStreamDidStartNotification","abstract":"

    Name of audio stream start notification

    "},"Constants.html#/c:@SDLAudioStreamDidStopNotification":{"name":"SDLAudioStreamDidStopNotification","abstract":"

    Name of audio stream stop notification

    "},"Constants.html#/c:@SDLLockScreenManagerWillPresentLockScreenViewController":{"name":"SDLLockScreenManagerWillPresentLockScreenViewController","abstract":"

    Lockscreen will present notification

    "},"Constants.html#/c:@SDLLockScreenManagerDidPresentLockScreenViewController":{"name":"SDLLockScreenManagerDidPresentLockScreenViewController","abstract":"

    Lockscreen did present notification

    "},"Constants.html#/c:@SDLLockScreenManagerWillDismissLockScreenViewController":{"name":"SDLLockScreenManagerWillDismissLockScreenViewController","abstract":"

    Lockscreen will dismiss notification

    "},"Constants.html#/c:@SDLLockScreenManagerDidDismissLockScreenViewController":{"name":"SDLLockScreenManagerDidDismissLockScreenViewController","abstract":"

    Lockscreen did dismiss notification

    "},"Constants.html#/c:@SDLVideoStreamManagerStateStopped":{"name":"SDLVideoStreamManagerStateStopped","abstract":"

    Streaming state stopped

    "},"Constants.html#/c:@SDLVideoStreamManagerStateStarting":{"name":"SDLVideoStreamManagerStateStarting","abstract":"

    Streaming state starting

    "},"Constants.html#/c:@SDLVideoStreamManagerStateReady":{"name":"SDLVideoStreamManagerStateReady","abstract":"

    Streaming state ready

    "},"Constants.html#/c:@SDLVideoStreamManagerStateSuspended":{"name":"SDLVideoStreamManagerStateSuspended","abstract":"

    Streaming state suspended

    "},"Constants.html#/c:@SDLVideoStreamManagerStateShuttingDown":{"name":"SDLVideoStreamManagerStateShuttingDown","abstract":"

    Streaming state shutting down

    "},"Constants.html#/c:@SDLAudioStreamManagerStateStopped":{"name":"SDLAudioStreamManagerStateStopped","abstract":"

    Audio state stopped

    "},"Constants.html#/c:@SDLAudioStreamManagerStateStarting":{"name":"SDLAudioStreamManagerStateStarting","abstract":"

    Audio state starting

    "},"Constants.html#/c:@SDLAudioStreamManagerStateReady":{"name":"SDLAudioStreamManagerStateReady","abstract":"

    Audio state ready

    "},"Constants.html#/c:@SDLAudioStreamManagerStateShuttingDown":{"name":"SDLAudioStreamManagerStateShuttingDown","abstract":"

    Audio state shutting down

    "},"Constants.html#/c:@SDLAppStateInactive":{"name":"SDLAppStateInactive","abstract":"

    App state inactive

    "},"Constants.html#/c:@SDLAppStateActive":{"name":"SDLAppStateActive","abstract":"

    App state active

    "},"Constants.html#/c:@SDLSupportedSeatDriver":{"name":"SDLSupportedSeatDriver","abstract":"

    Save current seat positions and settings to seat memory.

    "},"Constants.html#/c:@SDLSupportedSeatFrontPassenger":{"name":"SDLSupportedSeatFrontPassenger","abstract":"

    Restore / apply the seat memory settings to the current seat.

    "},"Constants.html#/c:@SDLSystemActionDefaultAction":{"name":"SDLSystemActionDefaultAction","abstract":"

    A default soft button action

    "},"Constants.html#/c:@SDLSystemActionStealFocus":{"name":"SDLSystemActionStealFocus","abstract":"

    An action causing your app to steal HMI focus

    "},"Constants.html#/c:@SDLSystemActionKeepContext":{"name":"SDLSystemActionKeepContext","abstract":"

    An action causing you to keep context

    "},"Constants.html#/c:@SDLSystemCapabilityTypeAppServices":{"name":"SDLSystemCapabilityTypeAppServices","abstract":"

    The app services capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypeNavigation":{"name":"SDLSystemCapabilityTypeNavigation","abstract":"

    The navigation capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypePhoneCall":{"name":"SDLSystemCapabilityTypePhoneCall","abstract":"

    The phone call capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypeVideoStreaming":{"name":"SDLSystemCapabilityTypeVideoStreaming","abstract":"

    The video streaming capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypeRemoteControl":{"name":"SDLSystemCapabilityTypeRemoteControl","abstract":"

    The remote control capability

    "},"Constants.html#/c:@SDLSystemCapabilityTypeSeatLocation":{"name":"SDLSystemCapabilityTypeSeatLocation","abstract":"

    Contains information about the locations of each seat

    "},"Constants.html#/c:@SDLSystemCapabilityTypeDisplays":{"name":"SDLSystemCapabilityTypeDisplays","abstract":"

    The Display type capability

    "},"Constants.html#/c:@SDLSystemContextMain":{"name":"SDLSystemContextMain","abstract":"

    No user interaction (user-initiated or app-initiated) is in progress.

    "},"Constants.html#/c:@SDLSystemContextVoiceRecognitionSession":{"name":"SDLSystemContextVoiceRecognitionSession","abstract":"

    VR-oriented, user-initiated or app-initiated interaction is in-progress.

    "},"Constants.html#/c:@SDLSystemContextMenu":{"name":"SDLSystemContextMenu","abstract":"

    Menu-oriented, user-initiated or app-initiated interaction is in-progress.

    "},"Constants.html#/c:@SDLSystemContextHMIObscured":{"name":"SDLSystemContextHMIObscured","abstract":"

    The app’s display HMI is currently being obscured by either a system or other app’s overlay.

    "},"Constants.html#/c:@SDLSystemContextAlert":{"name":"SDLSystemContextAlert","abstract":"

    Broadcast only to whichever app has an alert currently being displayed.

    "},"Constants.html#/c:@SDLTBTStateRouteUpdateRequest":{"name":"SDLTBTStateRouteUpdateRequest","abstract":"

    The route should be updated

    "},"Constants.html#/c:@SDLTBTStateRouteAccepted":{"name":"SDLTBTStateRouteAccepted","abstract":"

    The route is accepted

    "},"Constants.html#/c:@SDLTBTStateRouteRefused":{"name":"SDLTBTStateRouteRefused","abstract":"

    The route is refused

    "},"Constants.html#/c:@SDLTBTStateRouteCancelled":{"name":"SDLTBTStateRouteCancelled","abstract":"

    The route is cancelled

    "},"Constants.html#/c:@SDLTBTStateETARequest":{"name":"SDLTBTStateETARequest","abstract":"

    The route should update its Estimated Time of Arrival

    "},"Constants.html#/c:@SDLTBTStateNextTurnRequest":{"name":"SDLTBTStateNextTurnRequest","abstract":"

    The route should update its next turn

    "},"Constants.html#/c:@SDLTBTStateRouteStatusRequest":{"name":"SDLTBTStateRouteStatusRequest","abstract":"

    The route should update its status

    "},"Constants.html#/c:@SDLTBTStateRouteSummaryRequest":{"name":"SDLTBTStateRouteSummaryRequest","abstract":"

    The route update its summary

    "},"Constants.html#/c:@SDLTBTStateTripStatusRequest":{"name":"SDLTBTStateTripStatusRequest","abstract":"

    The route should update the trip’s status

    "},"Constants.html#/c:@SDLTBTStateRouteUpdateRequestTimeout":{"name":"SDLTBTStateRouteUpdateRequestTimeout","abstract":"

    The route update timed out

    "},"Constants.html#/c:@SDLTPMSUnknown":{"name":"SDLTPMSUnknown","abstract":"

    If set the status of the tire is not known.

    "},"Constants.html#/c:@SDLTPMSSystemFault":{"name":"SDLTPMSSystemFault","abstract":"

    TPMS does not function.

    "},"Constants.html#/c:@SDLTPMSSensorFault":{"name":"SDLTPMSSensorFault","abstract":"

    The sensor of the tire does not function.

    "},"Constants.html#/c:@SDLTPMSLow":{"name":"SDLTPMSLow","abstract":"

    TPMS is reporting a low tire pressure for the tire.

    "},"Constants.html#/c:@SDLTPMSSystemActive":{"name":"SDLTPMSSystemActive","abstract":"

    TPMS is active and the tire pressure is monitored.

    "},"Constants.html#/c:@SDLTPMSTrain":{"name":"SDLTPMSTrain","abstract":"

    TPMS is reporting that the tire must be trained.

    "},"Constants.html#/c:@SDLTPMSTrainingComplete":{"name":"SDLTPMSTrainingComplete","abstract":"

    TPMS reports the training for the tire is completed.

    "},"Constants.html#/c:@SDLTPMSNotTrained":{"name":"SDLTPMSNotTrained","abstract":"

    TPMS reports the tire is not trained.

    "},"Constants.html#/c:@SDLTemperatureUnitCelsius":{"name":"SDLTemperatureUnitCelsius","abstract":"

    Reflects the current HMI setting for temperature unit in Celsius

    "},"Constants.html#/c:@SDLTemperatureUnitFahrenheit":{"name":"SDLTemperatureUnitFahrenheit","abstract":"

    Reflects the current HMI setting for temperature unit in Fahrenheit

    "},"Constants.html#/c:@SDLTextAlignmentLeft":{"name":"SDLTextAlignmentLeft","abstract":"

    Text aligned left.

    "},"Constants.html#/c:@SDLTextAlignmentRight":{"name":"SDLTextAlignmentRight","abstract":"

    Text aligned right.

    "},"Constants.html#/c:@SDLTextAlignmentCenter":{"name":"SDLTextAlignmentCenter","abstract":"

    Text aligned centered.

    "},"Constants.html#/c:@SDLTextFieldNameMainField1":{"name":"SDLTextFieldNameMainField1","abstract":"

    The first line of the first set of main fields of the persistent display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMainField2":{"name":"SDLTextFieldNameMainField2","abstract":"

    The second line of the first set of main fields of the persistent display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMainField3":{"name":"SDLTextFieldNameMainField3","abstract":"

    The first line of the second set of main fields of the persistent display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMainField4":{"name":"SDLTextFieldNameMainField4"},"Constants.html#/c:@SDLTextFieldNameTemplateTitle":{"name":"SDLTextFieldNameTemplateTitle","abstract":"

    The title line of the persistent display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameStatusBar":{"name":"SDLTextFieldNameStatusBar","abstract":"

    The status bar on the NGN display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMediaClock":{"name":"SDLTextFieldNameMediaClock","abstract":"

    Text value for MediaClock field. Must be properly formatted according to MediaClockFormat. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameMediaTrack":{"name":"SDLTextFieldNameMediaTrack","abstract":"

    The track field of NGN type ACMs. This field is only available for media applications on a NGN display. Applies to SDLShow.

    "},"Constants.html#/c:@SDLTextFieldNameAlertText1":{"name":"SDLTextFieldNameAlertText1","abstract":"

    The first line of the alert text field. Applies to SDLAlert.

    "},"Constants.html#/c:@SDLTextFieldNameAlertText2":{"name":"SDLTextFieldNameAlertText2","abstract":"

    The second line of the alert text field. Applies to SDLAlert.

    "},"Constants.html#/c:@SDLTextFieldNameAlertText3":{"name":"SDLTextFieldNameAlertText3","abstract":"

    The third line of the alert text field. Applies to SDLAlert.

    "},"Constants.html#/c:@SDLTextFieldNameScrollableMessageBody":{"name":"SDLTextFieldNameScrollableMessageBody","abstract":"

    Long form body of text that can include newlines and tabs. Applies to SDLScrollableMessage.

    "},"Constants.html#/c:@SDLTextFieldNameInitialInteractionText":{"name":"SDLTextFieldNameInitialInteractionText","abstract":"

    First line suggestion for a user response (in the case of VR enabled interaction).

    "},"Constants.html#/c:@SDLTextFieldNameNavigationText1":{"name":"SDLTextFieldNameNavigationText1","abstract":"

    First line of navigation text.

    "},"Constants.html#/c:@SDLTextFieldNameNavigationText2":{"name":"SDLTextFieldNameNavigationText2","abstract":"

    Second line of navigation text.

    "},"Constants.html#/c:@SDLTextFieldNameETA":{"name":"SDLTextFieldNameETA","abstract":"

    Estimated Time of Arrival time for navigation.

    "},"Constants.html#/c:@SDLTextFieldNameTotalDistance":{"name":"SDLTextFieldNameTotalDistance","abstract":"

    Total distance to destination for navigation.

    "},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText1":{"name":"SDLTextFieldNameAudioPassThruDisplayText1","abstract":"

    First line of text for audio pass thru.

    "},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText2":{"name":"SDLTextFieldNameAudioPassThruDisplayText2","abstract":"

    Second line of text for audio pass thru.

    "},"Constants.html#/c:@SDLTextFieldNameSliderHeader":{"name":"SDLTextFieldNameSliderHeader","abstract":"

    Header text for slider.

    "},"Constants.html#/c:@SDLTextFieldNameSliderFooter":{"name":"SDLTextFieldNameSliderFooter","abstract":"

    Footer text for slider

    "},"Constants.html#/c:@SDLTextFieldNameMenuName":{"name":"SDLTextFieldNameMenuName","abstract":"

    Primary text for SDLChoice

    "},"Constants.html#/c:@SDLTextFieldNameSecondaryText":{"name":"SDLTextFieldNameSecondaryText","abstract":"

    Secondary text for SDLChoice

    "},"Constants.html#/c:@SDLTextFieldNameTertiaryText":{"name":"SDLTextFieldNameTertiaryText","abstract":"

    Tertiary text for SDLChoice

    "},"Constants.html#/c:@SDLTextFieldNameMenuTitle":{"name":"SDLTextFieldNameMenuTitle","abstract":"

    Optional text to label an app menu button (for certain touchscreen platforms)

    "},"Constants.html#/c:@SDLTextFieldNameLocationName":{"name":"SDLTextFieldNameLocationName","abstract":"

    Optional name / title of intended location for SDLSendLocation

    "},"Constants.html#/c:@SDLTextFieldNameLocationDescription":{"name":"SDLTextFieldNameLocationDescription","abstract":"

    Optional description of intended location / establishment (if applicable) for SDLSendLocation

    "},"Constants.html#/c:@SDLTextFieldNameAddressLines":{"name":"SDLTextFieldNameAddressLines","abstract":"

    Optional location address (if applicable) for SDLSendLocation

    "},"Constants.html#/c:@SDLTextFieldNamePhoneNumber":{"name":"SDLTextFieldNamePhoneNumber","abstract":"

    Optional hone number of intended location / establishment (if applicable) for SDLSendLocation

    "},"Constants.html#/c:@SDLTimerModeUp":{"name":"SDLTimerModeUp","abstract":"

    The timer should count up.

    "},"Constants.html#/c:@SDLTimerModeDown":{"name":"SDLTimerModeDown","abstract":"

    The timer should count down.

    "},"Constants.html#/c:@SDLTimerModeNone":{"name":"SDLTimerModeNone","abstract":"

    The timer should not count.

    "},"Constants.html#/c:@SDLTouchTypeBegin":{"name":"SDLTouchTypeBegin","abstract":"

    The touch is the beginning of a finger pressed on the display.

    "},"Constants.html#/c:@SDLTouchTypeMove":{"name":"SDLTouchTypeMove","abstract":"

    The touch is the movement of a finger pressed on the display.

    "},"Constants.html#/c:@SDLTouchTypeEnd":{"name":"SDLTouchTypeEnd","abstract":"

    The touch is the ending of a finger pressed on the display.

    "},"Constants.html#/c:@SDLTouchTypeCancel":{"name":"SDLTouchTypeCancel","abstract":"

    The touch is the cancellation of a finger pressed on the display.

    "},"Constants.html#/c:@SDLTriggerSourceMenu":{"name":"SDLTriggerSourceMenu","abstract":"

    Selection made via menu

    "},"Constants.html#/c:@SDLTriggerSourceVoiceRecognition":{"name":"SDLTriggerSourceVoiceRecognition","abstract":"

    Selection made via Voice session

    "},"Constants.html#/c:@SDLTriggerSourceKeyboard":{"name":"SDLTriggerSourceKeyboard","abstract":"

    Selection made via Keyboard

    "},"Constants.html#/c:@SDLTurnSignalOff":{"name":"SDLTurnSignalOff","abstract":"

    Turn signal is OFF

    "},"Constants.html#/c:@SDLTurnSignalLeft":{"name":"SDLTurnSignalLeft","abstract":"

    Left turn signal is on

    "},"Constants.html#/c:@SDLTurnSignalRight":{"name":"SDLTurnSignalRight","abstract":"

    Right turn signal is on

    "},"Constants.html#/c:@SDLTurnSignalBoth":{"name":"SDLTurnSignalBoth","abstract":"

    Both signals (left and right) are on

    "},"Constants.html#/c:@SDLUpdateModeCountUp":{"name":"SDLUpdateModeCountUp","abstract":"

    Starts the media clock timer counting upward, in increments of 1 second.

    "},"Constants.html#/c:@SDLUpdateModeCountDown":{"name":"SDLUpdateModeCountDown","abstract":"

    Starts the media clock timer counting downward, in increments of 1 second.

    "},"Constants.html#/c:@SDLUpdateModePause":{"name":"SDLUpdateModePause","abstract":"

    Pauses the media clock timer.

    "},"Constants.html#/c:@SDLUpdateModeResume":{"name":"SDLUpdateModeResume","abstract":"

    Resumes the media clock timer. The timer resumes counting in whatever mode was in effect before pausing (i.e. COUNTUP or COUNTDOWN).

    "},"Constants.html#/c:@SDLUpdateModeClear":{"name":"SDLUpdateModeClear","abstract":"

    Clear the media clock timer.

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveNotConfirmed","abstract":"

    Inactive not confirmed

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveConfirmed","abstract":"

    Inactive confirmed

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusActiveNotConfirmed","abstract":"

    Active not confirmed

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveConfirmed":{"name":"SDLVehicleDataActiveStatusActiveConfirmed","abstract":"

    Active confirmed

    "},"Constants.html#/c:@SDLVehicleDataActiveStatusFault":{"name":"SDLVehicleDataActiveStatusFault","abstract":"

    Fault

    "},"Constants.html#/c:@SDLVehicleDataEventStatusNoEvent":{"name":"SDLVehicleDataEventStatusNoEvent","abstract":"

    No event

    "},"Constants.html#/c:@SDLVehicleDataEventStatusNo":{"name":"SDLVehicleDataEventStatusNo","abstract":"

    The event is a No status

    "},"Constants.html#/c:@SDLVehicleDataEventStatusYes":{"name":"SDLVehicleDataEventStatusYes","abstract":"

    The event is a Yes status

    "},"Constants.html#/c:@SDLVehicleDataEventStatusNotSupported":{"name":"SDLVehicleDataEventStatusNotSupported","abstract":"

    Vehicle data event is not supported

    "},"Constants.html#/c:@SDLVehicleDataEventStatusFault":{"name":"SDLVehicleDataEventStatusFault","abstract":"

    The event is a Fault status

    "},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotSupported":{"name":"SDLVehicleDataNotificationStatusNotSupported","abstract":"

    The vehicle data notification status is not supported

    "},"Constants.html#/c:@SDLVehicleDataNotificationStatusNormal":{"name":"SDLVehicleDataNotificationStatusNormal","abstract":"

    The vehicle data notification status is normal

    "},"Constants.html#/c:@SDLVehicleDataNotificationStatusActive":{"name":"SDLVehicleDataNotificationStatusActive","abstract":"

    The vehicle data notification status is active

    "},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotUsed":{"name":"SDLVehicleDataNotificationStatusNotUsed","abstract":"

    The vehicle data notification status is not used

    "},"Constants.html#/c:@SDLVehicleDataResultCodeSuccess":{"name":"SDLVehicleDataResultCodeSuccess","abstract":"

    Individual vehicle data item / DTC / DID request or subscription successful

    "},"Constants.html#/c:@SDLVehicleDataResultCodeTruncatedData":{"name":"SDLVehicleDataResultCodeTruncatedData","abstract":"

    DTC / DID request successful, however, not all active DTCs or full contents of DID location available

    "},"Constants.html#/c:@SDLVehicleDataResultCodeDisallowed":{"name":"SDLVehicleDataResultCodeDisallowed","abstract":"

    This vehicle data item is not allowed for this app by SDL

    "},"Constants.html#/c:@SDLVehicleDataResultCodeUserDisallowed":{"name":"SDLVehicleDataResultCodeUserDisallowed","abstract":"

    The user has not granted access to this type of vehicle data item at this time

    "},"Constants.html#/c:@SDLVehicleDataResultCodeInvalidId":{"name":"SDLVehicleDataResultCodeInvalidId","abstract":"

    The ECU ID referenced is not a valid ID on the bus / system

    "},"Constants.html#/c:@SDLVehicleDataResultCodeVehicleDataNotAvailable":{"name":"SDLVehicleDataResultCodeVehicleDataNotAvailable","abstract":"

    The requested vehicle data item / DTC / DID is not currently available or responding on the bus / system

    "},"Constants.html#/c:@SDLVehicleDataResultCodeDataAlreadySubscribed":{"name":"SDLVehicleDataResultCodeDataAlreadySubscribed","abstract":"

    The vehicle data item is already subscribed

    "},"Constants.html#/c:@SDLVehicleDataResultCodeDataNotSubscribed":{"name":"SDLVehicleDataResultCodeDataNotSubscribed","abstract":"

    The vehicle data item cannot be unsubscribed because it is not currently subscribed

    "},"Constants.html#/c:@SDLVehicleDataResultCodeIgnored":{"name":"SDLVehicleDataResultCodeIgnored","abstract":"

    The request for this item is ignored because it is already in progress

    "},"Constants.html#/c:@SDLVehicleDataStatusNoDataExists":{"name":"SDLVehicleDataStatusNoDataExists","abstract":"

    No data avaliable

    "},"Constants.html#/c:@SDLVehicleDataStatusOff":{"name":"SDLVehicleDataStatusOff","abstract":"

    The status is Off

    "},"Constants.html#/c:@SDLVehicleDataStatusOn":{"name":"SDLVehicleDataStatusOn","abstract":"

    The status is On

    "},"Constants.html#/c:@SDLVehicleDataTypeGPS":{"name":"SDLVehicleDataTypeGPS","abstract":"

    GPS vehicle data

    "},"Constants.html#/c:@SDLVehicleDataTypeSpeed":{"name":"SDLVehicleDataTypeSpeed","abstract":"

    Vehicle speed data

    "},"Constants.html#/c:@SDLVehicleDataTypeRPM":{"name":"SDLVehicleDataTypeRPM","abstract":"

    Vehicle RPM data

    "},"Constants.html#/c:@SDLVehicleDataTypeFuelLevel":{"name":"SDLVehicleDataTypeFuelLevel","abstract":"

    Vehicle fuel level data

    "},"Constants.html#/c:@SDLVehicleDataTypeFuelLevelState":{"name":"SDLVehicleDataTypeFuelLevelState","abstract":"

    Vehicle fuel level state data

    "},"Constants.html#/c:@SDLVehicleDataTypeFuelConsumption":{"name":"SDLVehicleDataTypeFuelConsumption","abstract":"

    Vehicle fuel consumption data

    "},"Constants.html#/c:@SDLVehicleDataTypeExternalTemperature":{"name":"SDLVehicleDataTypeExternalTemperature","abstract":"

    Vehicle external temperature data

    "},"Constants.html#/c:@SDLVehicleDataTypeVIN":{"name":"SDLVehicleDataTypeVIN","abstract":"

    Vehicle VIN data

    "},"Constants.html#/c:@SDLVehicleDataTypePRNDL":{"name":"SDLVehicleDataTypePRNDL","abstract":"

    Vehicle PRNDL data

    "},"Constants.html#/c:@SDLVehicleDataTypeTirePressure":{"name":"SDLVehicleDataTypeTirePressure","abstract":"

    Vehicle tire pressure data

    "},"Constants.html#/c:@SDLVehicleDataTypeOdometer":{"name":"SDLVehicleDataTypeOdometer","abstract":"

    Vehicle odometer data

    "},"Constants.html#/c:@SDLVehicleDataTypeBeltStatus":{"name":"SDLVehicleDataTypeBeltStatus","abstract":"

    Vehicle belt status data

    "},"Constants.html#/c:@SDLVehicleDataTypeBodyInfo":{"name":"SDLVehicleDataTypeBodyInfo","abstract":"

    Vehicle body info data

    "},"Constants.html#/c:@SDLVehicleDataTypeDeviceStatus":{"name":"SDLVehicleDataTypeDeviceStatus","abstract":"

    Vehicle device status data

    "},"Constants.html#/c:@SDLVehicleDataTypeECallInfo":{"name":"SDLVehicleDataTypeECallInfo","abstract":"

    Vehicle emergency call info data

    "},"Constants.html#/c:@SDLVehicleDataTypeFuelRange":{"name":"SDLVehicleDataTypeFuelRange","abstract":"

    Vehicle fuel range data

    "},"Constants.html#/c:@SDLVehicleDataTypeAirbagStatus":{"name":"SDLVehicleDataTypeAirbagStatus","abstract":"

    Vehicle airbag status data

    "},"Constants.html#/c:@SDLVehicleDataTypeEmergencyEvent":{"name":"SDLVehicleDataTypeEmergencyEvent","abstract":"

    Vehicle emergency event info

    "},"Constants.html#/c:@SDLVehicleDataTypeClusterModeStatus":{"name":"SDLVehicleDataTypeClusterModeStatus","abstract":"

    Vehicle cluster mode status data

    "},"Constants.html#/c:@SDLVehicleDataTypeMyKey":{"name":"SDLVehicleDataTypeMyKey","abstract":"

    Vehicle MyKey data

    "},"Constants.html#/c:@SDLVehicleDataTypeBraking":{"name":"SDLVehicleDataTypeBraking","abstract":"

    Vehicle braking data

    "},"Constants.html#/c:@SDLVehicleDataTypeWiperStatus":{"name":"SDLVehicleDataTypeWiperStatus","abstract":"

    Vehicle wiper status data

    "},"Constants.html#/c:@SDLVehicleDataTypeHeadlampStatus":{"name":"SDLVehicleDataTypeHeadlampStatus","abstract":"

    Vehicle headlamp status

    "},"Constants.html#/c:@SDLVehicleDataTypeBatteryVoltage":{"name":"SDLVehicleDataTypeBatteryVoltage","abstract":"

    Vehicle battery voltage data

    "},"Constants.html#/c:@SDLVehicleDataTypeEngineOilLife":{"name":"SDLVehicleDataTypeEngineOilLife","abstract":"

    Vehicle engine oil life data

    "},"Constants.html#/c:@SDLVehicleDataTypeEngineTorque":{"name":"SDLVehicleDataTypeEngineTorque","abstract":"

    Vehicle engine torque data

    "},"Constants.html#/c:@SDLVehicleDataTypeAccelerationPedal":{"name":"SDLVehicleDataTypeAccelerationPedal","abstract":"

    Vehicle accleration pedal data

    "},"Constants.html#/c:@SDLVehicleDataTypeSteeringWheel":{"name":"SDLVehicleDataTypeSteeringWheel","abstract":"

    Vehicle steering wheel data

    "},"Constants.html#/c:@SDLVehicleDataTypeElectronicParkBrakeStatus":{"name":"SDLVehicleDataTypeElectronicParkBrakeStatus","abstract":"

    Vehicle electronic parking brake status data

    "},"Constants.html#/c:@SDLVehicleDataTypeTurnSignal":{"name":"SDLVehicleDataTypeTurnSignal","abstract":"

    Vehicle turn signal data

    "},"Constants.html#/c:@SDLVehicleDataTypeCloudAppVehicleID":{"name":"SDLVehicleDataTypeCloudAppVehicleID","abstract":"

    The cloud application vehicle id. Used by cloud apps to identify a head unit

    "},"Constants.html#/c:@SDLVehicleDataTypeOEMVehicleDataType":{"name":"SDLVehicleDataTypeOEMVehicleDataType","abstract":"

    Custom OEM Vehicle data

    "},"Constants.html#/c:@SDLVentilationModeUpper":{"name":"SDLVentilationModeUpper","abstract":"

    The upper ventilation mode

    "},"Constants.html#/c:@SDLVentilationModeLower":{"name":"SDLVentilationModeLower","abstract":"

    The lower ventilation mode

    "},"Constants.html#/c:@SDLVentilationModeBoth":{"name":"SDLVentilationModeBoth","abstract":"

    The both ventilation mode

    "},"Constants.html#/c:@SDLVentilationModeNone":{"name":"SDLVentilationModeNone","abstract":"

    No ventilation mode

    "},"Constants.html#/c:@SDLVideoStreamingCodecH264":{"name":"SDLVideoStreamingCodecH264","abstract":"

    H264

    "},"Constants.html#/c:@SDLVideoStreamingCodecH265":{"name":"SDLVideoStreamingCodecH265","abstract":"

    H265

    "},"Constants.html#/c:@SDLVideoStreamingCodecTheora":{"name":"SDLVideoStreamingCodecTheora","abstract":"

    Theora

    "},"Constants.html#/c:@SDLVideoStreamingCodecVP8":{"name":"SDLVideoStreamingCodecVP8","abstract":"

    VP8

    "},"Constants.html#/c:@SDLVideoStreamingCodecVP9":{"name":"SDLVideoStreamingCodecVP9","abstract":"

    VP9

    "},"Constants.html#/c:@SDLVideoStreamingProtocolRAW":{"name":"SDLVideoStreamingProtocolRAW","abstract":"

    RAW

    "},"Constants.html#/c:@SDLVideoStreamingProtocolRTP":{"name":"SDLVideoStreamingProtocolRTP","abstract":"

    RTP

    "},"Constants.html#/c:@SDLVideoStreamingProtocolRTSP":{"name":"SDLVideoStreamingProtocolRTSP","abstract":"

    RTSP

    "},"Constants.html#/c:@SDLVideoStreamingProtocolRTMP":{"name":"SDLVideoStreamingProtocolRTMP","abstract":"

    RTMP

    "},"Constants.html#/c:@SDLVideoStreamingProtocolWebM":{"name":"SDLVideoStreamingProtocolWebM","abstract":"

    WebM

    "},"Constants.html#/c:@SDLVideoStreamingStateStreamable":{"name":"SDLVideoStreamingStateStreamable","abstract":"

    STREAMABLE, the current app is allowed to stream video

    "},"Constants.html#/c:@SDLVideoStreamingStateNotStreamable":{"name":"SDLVideoStreamingStateNotStreamable","abstract":"

    NOT_STREAMABLE, the current app is not allowed to stream video

    "},"Constants.html#/c:@SDLVRCapabilitiesText":{"name":"SDLVRCapabilitiesText","abstract":"

    The SDL platform is capable of recognizing spoken text in the current language.

    "},"Constants.html#/c:@SDLWarningLightStatusOff":{"name":"SDLWarningLightStatusOff","abstract":"

    The warning light is off

    "},"Constants.html#/c:@SDLWarningLightStatusOn":{"name":"SDLWarningLightStatusOn","abstract":"

    The warning light is off

    "},"Constants.html#/c:@SDLWarningLightStatusFlash":{"name":"SDLWarningLightStatusFlash","abstract":"

    The warning light is flashing

    "},"Constants.html#/c:@SDLWarningLightStatusNotUsed":{"name":"SDLWarningLightStatusNotUsed","abstract":"

    The warning light is unused

    "},"Constants.html#/c:@SDLWayPointTypeAll":{"name":"SDLWayPointTypeAll","abstract":"

    All other waypoint types

    "},"Constants.html#/c:@SDLWayPointTypeDestination":{"name":"SDLWayPointTypeDestination","abstract":"

    The destination waypoint

    "},"Constants.html#/c:@SDLWindowTypeMain":{"name":"SDLWindowTypeMain","abstract":"

    This window type describes the main window on a display.

    "},"Constants.html#/c:@SDLWindowTypeWidget":{"name":"SDLWindowTypeWidget","abstract":"

    A widget is a small window that the app can create to provide information and soft buttons for quick app control.

    "},"Constants.html#/c:@SDLWiperStatusOff":{"name":"SDLWiperStatusOff","abstract":"

    Wiper is off

    "},"Constants.html#/c:@SDLWiperStatusAutomaticOff":{"name":"SDLWiperStatusAutomaticOff","abstract":"

    Wiper is off automatically

    "},"Constants.html#/c:@SDLWiperStatusOffMoving":{"name":"SDLWiperStatusOffMoving","abstract":"

    Wiper is moving but off

    "},"Constants.html#/c:@SDLWiperStatusManualIntervalOff":{"name":"SDLWiperStatusManualIntervalOff","abstract":"

    Wiper is off due to a manual interval

    "},"Constants.html#/c:@SDLWiperStatusManualIntervalOn":{"name":"SDLWiperStatusManualIntervalOn","abstract":"

    Wiper is on due to a manual interval

    "},"Constants.html#/c:@SDLWiperStatusManualLow":{"name":"SDLWiperStatusManualLow","abstract":"

    Wiper is on low manually

    "},"Constants.html#/c:@SDLWiperStatusManualHigh":{"name":"SDLWiperStatusManualHigh","abstract":"

    Wiper is on high manually

    "},"Constants.html#/c:@SDLWiperStatusManualFlick":{"name":"SDLWiperStatusManualFlick","abstract":"

    Wiper is on for a single wipe manually

    "},"Constants.html#/c:@SDLWiperStatusWash":{"name":"SDLWiperStatusWash","abstract":"

    Wiper is in wash mode

    "},"Constants.html#/c:@SDLWiperStatusAutomaticLow":{"name":"SDLWiperStatusAutomaticLow","abstract":"

    Wiper is on low automatically

    "},"Constants.html#/c:@SDLWiperStatusAutomaticHigh":{"name":"SDLWiperStatusAutomaticHigh","abstract":"

    Wiper is on high automatically

    "},"Constants.html#/c:@SDLWiperStatusCourtesyWipe":{"name":"SDLWiperStatusCourtesyWipe","abstract":"

    Wiper is performing a courtesy wipe

    "},"Constants.html#/c:@SDLWiperStatusAutomaticAdjust":{"name":"SDLWiperStatusAutomaticAdjust","abstract":"

    Wiper is on automatic adjust

    "},"Constants.html#/c:@SDLWiperStatusStalled":{"name":"SDLWiperStatusStalled","abstract":"

    Wiper is stalled

    "},"Constants.html#/c:@SDLWiperStatusNoDataExists":{"name":"SDLWiperStatusNoDataExists","abstract":"

    Wiper data is not available

    "},"Constants.html#/c:@SmartDeviceLinkVersionNumber":{"name":"SmartDeviceLinkVersionNumber","abstract":"

    Project version number for SmartDeviceLink.

    "},"Constants.html#/c:@SmartDeviceLinkVersionString":{"name":"SmartDeviceLinkVersionString","abstract":"

    Project version string for SmartDeviceLink.

    "},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(im)initWithType:maximumNumberOfWindows:":{"name":"-initWithType:maximumNumberOfWindows:","abstract":"

    Init with required parameters

    ","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(py)type":{"name":"type","abstract":"

    Type of windows available, to create.

    ","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(py)maximumNumberOfWindows":{"name":"maximumNumberOfWindows","abstract":"

    Number of windows available, to create.

    ","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)windowID":{"name":"windowID","abstract":"

    The specified ID of the window. Can be set to a predefined window, or omitted for the main window on the main display.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)textFields":{"name":"textFields","abstract":"

    A set of all fields that support text data. - see: TextField

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)imageFields":{"name":"imageFields","abstract":"

    A set of all fields that support images. - see: ImageField

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"

    Provides information about image types supported by the system.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)templatesAvailable":{"name":"templatesAvailable","abstract":"

    A set of all window templates available on the head unit.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"

    The number of on-window custom presets available (if any); otherwise omitted.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"

    The number of buttons and the capabilities of each on-window button.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"

    The number of soft buttons available on-window and the capabilities for each button.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)menuLayoutsAvailable":{"name":"menuLayoutsAvailable","abstract":"

    An array of available menu layouts. If this parameter is not provided, only the LIST layout is assumed to be available.

    ","parent_name":"SDLWindowCapability"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(im)initWithCurrentForecastSupported:maxMultidayForecastAmount:maxHourlyForecastAmount:maxMinutelyForecastAmount:weatherForLocationSupported:":{"name":"-initWithCurrentForecastSupported:maxMultidayForecastAmount:maxHourlyForecastAmount:maxMinutelyForecastAmount:weatherForLocationSupported:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)currentForecastSupported":{"name":"currentForecastSupported","abstract":"

    Whether or not the current forcast is supported.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxMultidayForecastAmount":{"name":"maxMultidayForecastAmount","abstract":"

    The maximum number of day-by-day forecasts.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxHourlyForecastAmount":{"name":"maxHourlyForecastAmount","abstract":"

    The maximum number of hour-by-hour forecasts.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxMinutelyForecastAmount":{"name":"maxMinutelyForecastAmount","abstract":"

    The maximum number of minute-by-minute forecasts.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)weatherForLocationSupported":{"name":"weatherForLocationSupported","abstract":"

    Whether or not the weather for location is supported.

    ","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(im)initWithLocation:":{"name":"-initWithLocation:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(im)initWithLocation:currentForecast:minuteForecast:hourlyForecast:multidayForecast:alerts:":{"name":"-initWithLocation:currentForecast:minuteForecast:hourlyForecast:multidayForecast:alerts:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)location":{"name":"location","abstract":"

    The location.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)currentForecast":{"name":"currentForecast","abstract":"

    The current forecast.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)minuteForecast":{"name":"minuteForecast","abstract":"

    A minute-by-minute array of forecasts.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)hourlyForecast":{"name":"hourlyForecast","abstract":"

    An hour-by-hour array of forecasts.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)multidayForecast":{"name":"multidayForecast","abstract":"

    A day-by-day array of forecasts.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)alerts":{"name":"alerts","abstract":"

    An array of weather alerts. This array should be ordered with the first object being the current day.

    ","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(im)initWithCurrentTemperature:temperatureHigh:temperatureLow:apparentTemperature:apparentTemperatureHigh:apparentTemperatureLow:weatherSummary:time:humidity:cloudCover:moonPhase:windBearing:windGust:windSpeed:nearestStormBearing:nearestStormDistance:precipAccumulation:precipIntensity:precipProbability:precipType:visibility:weatherIcon:":{"name":"-initWithCurrentTemperature:temperatureHigh:temperatureLow:apparentTemperature:apparentTemperatureHigh:apparentTemperatureLow:weatherSummary:time:humidity:cloudCover:moonPhase:windBearing:windGust:windSpeed:nearestStormBearing:nearestStormDistance:precipAccumulation:precipIntensity:precipProbability:precipType:visibility:weatherIcon:","abstract":"

    Convenience init for all parameters

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)currentTemperature":{"name":"currentTemperature","abstract":"

    The current temperature.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)temperatureHigh":{"name":"temperatureHigh","abstract":"

    The predicted high temperature for the day.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)temperatureLow":{"name":"temperatureLow","abstract":"

    The predicted low temperature for the day.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperature":{"name":"apparentTemperature","abstract":"

    The apparent temperature.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperatureHigh":{"name":"apparentTemperatureHigh","abstract":"

    The predicted high apparent temperature for the day.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperatureLow":{"name":"apparentTemperatureLow","abstract":"

    The predicted low apparent temperature for the day.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)weatherSummary":{"name":"weatherSummary","abstract":"

    A summary of the weather.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)time":{"name":"time","abstract":"

    The time this data refers to.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)humidity":{"name":"humidity","abstract":"

    From 0 to 1, percentage humidity.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)cloudCover":{"name":"cloudCover","abstract":"

    From 0 to 1, percentage cloud cover.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)moonPhase":{"name":"moonPhase","abstract":"

    From 0 to 1, percentage of the moon seen, e.g. 0 = no moon, 0.25 = quarter moon

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windBearing":{"name":"windBearing","abstract":"

    In degrees, true north at 0 degrees.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windGust":{"name":"windGust","abstract":"

    In km/hr

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windSpeed":{"name":"windSpeed","abstract":"

    In km/hr

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)nearestStormBearing":{"name":"nearestStormBearing","abstract":"

    In degrees, true north at 0 degrees.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)nearestStormDistance":{"name":"nearestStormDistance","abstract":"

    In km

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipAccumulation":{"name":"precipAccumulation","abstract":"

    In cm

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipIntensity":{"name":"precipIntensity","abstract":"

    In cm of water per hour.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipProbability":{"name":"precipProbability","abstract":"

    From 0 to 1, percentage chance.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipType":{"name":"precipType","abstract":"

    A description of the precipitation type (e.g. “rain”, “snow”, “sleet”, “hail”)

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)visibility":{"name":"visibility","abstract":"

    In km

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)weatherIcon":{"name":"weatherIcon","abstract":"

    The weather icon image.

    ","parent_name":"SDLWeatherData"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(im)initWithTitle:summary:expires:regions:severity:timeIssued:":{"name":"-initWithTitle:summary:expires:regions:severity:timeIssued:","abstract":"

    Convenience init for all parameters

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)title":{"name":"title","abstract":"

    The title of the alert.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)summary":{"name":"summary","abstract":"

    A summary for the alert.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)expires":{"name":"expires","abstract":"

    The date the alert expires.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)regions":{"name":"regions","abstract":"

    Regions affected.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)severity":{"name":"severity","abstract":"

    Severity of the weather alert.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)timeIssued":{"name":"timeIssued","abstract":"

    The date the alert was issued.

    ","parent_name":"SDLWeatherAlert"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:":{"name":"-initWithText:image:","abstract":"

    Convenience init to create a VR help item with the following parameters

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:position:":{"name":"-initWithText:image:position:","abstract":"

    Convenience init to create a VR help item with all parameters

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)text":{"name":"text","abstract":"

    Text to display for VR Help item

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)image":{"name":"image","abstract":"

    Image for VR Help item

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)position":{"name":"position","abstract":"

    Position to display item in VR Help list

    ","parent_name":"SDLVRHelpItem"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)voiceCommands":{"name":"voiceCommands","abstract":"

    The strings the user can say to activate this voice command

    ","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)handler":{"name":"handler","abstract":"

    The handler that will be called when the command is activated

    ","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(im)initWithVoiceCommands:handler:":{"name":"-initWithVoiceCommands:handler:","abstract":"

    Convenience init

    ","parent_name":"SDLVoiceCommand"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)protocol":{"name":"protocol","abstract":"

    Protocol type, see VideoStreamingProtocol

    ","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)codec":{"name":"codec","abstract":"

    Codec type, see VideoStreamingCodec

    ","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(im)initWithCodec:protocol:":{"name":"-initWithCodec:protocol:","abstract":"

    Convenience init

    ","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:","abstract":"

    Convenience init for creating a video streaming capability.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:diagonalScreenSize:pixelPerInch:scale:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:diagonalScreenSize:pixelPerInch:scale:","abstract":"

    Convenience init for creating a video streaming capability with all parameters.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)preferredResolution":{"name":"preferredResolution","abstract":"

    The preferred resolution of a video stream for decoding and rendering on HMI

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)maxBitrate":{"name":"maxBitrate","abstract":"

    The maximum bitrate of video stream that is supported, in kbps, optional

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)supportedFormats":{"name":"supportedFormats","abstract":"

    Detailed information on each format supported by this system, in its preferred order

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)hapticSpatialDataSupported":{"name":"hapticSpatialDataSupported","abstract":"

    True if the system can utilize the haptic spatial data from the source being streamed.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)diagonalScreenSize":{"name":"diagonalScreenSize","abstract":"

    The diagonal screen size in inches.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)pixelPerInch":{"name":"pixelPerInch","abstract":"

    The diagonal resolution in pixels divided by the diagonal screen size in inches.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)scale":{"name":"scale","abstract":"

    The scaling factor the app should use to change the size of the projecting view.

    ","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)major":{"name":"major","abstract":"

    Major version (e.g. X.0.0)

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)minor":{"name":"minor","abstract":"

    Minor version (e.g. 0.X.0)

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)patch":{"name":"patch","abstract":"

    Patch version (e.g. 0.0.X)

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)stringVersion":{"name":"stringVersion","abstract":"

    A String format of the current SDLVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithMajor:minor:patch:":{"name":"-initWithMajor:minor:patch:","abstract":"

    Convenience init

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithMajor:minor:patch:":{"name":"+versionWithMajor:minor:patch:","abstract":"

    Convenience init

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithString:":{"name":"-initWithString:","abstract":"

    Convenience init

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithString:":{"name":"+versionWithString:","abstract":"

    Convenience init

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithSyncMsgVersion:":{"name":"-initWithSyncMsgVersion:","abstract":"

    Deprecated convenience init to set version using SDLSyncMsgVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithSyncMsgVersion:":{"name":"+versionWithSyncMsgVersion:","abstract":"

    Deprecated convenience init to set version using SDLSyncMsgVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithSDLMsgVersion:":{"name":"-initWithSDLMsgVersion:","abstract":"

    Convenience init to set version using SDLMsgVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithSDLMsgVersion:":{"name":"+versionWithSDLMsgVersion:","abstract":"

    Convenience init to set version using SDLMsgVersion

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)compare:":{"name":"-compare:","abstract":"

    Compare two SDLVersions

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isLessThanVersion:":{"name":"-isLessThanVersion:","abstract":"

    Compare is less than

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isEqualToVersion:":{"name":"-isEqualToVersion:","abstract":"

    Compare is equal to

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isGreaterThanVersion:":{"name":"-isGreaterThanVersion:","abstract":"

    Compare is greater than

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isGreaterThanOrEqualToVersion:":{"name":"-isGreaterThanOrEqualToVersion:","abstract":"

    Compare is greater than or equal to

    ","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isLessThanOrEqualToVersion:":{"name":"-isLessThanOrEqualToVersion:","abstract":"

    Compare is less than or equal to

    ","parent_name":"SDLVersion"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)make":{"name":"make","abstract":"

    The make of the vehicle

    ","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)model":{"name":"model","abstract":"

    The model of the vehicle

    ","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)modelYear":{"name":"modelYear","abstract":"

    The model year of the vehicle

    ","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)trim":{"name":"trim","abstract":"

    The trim of the vehicle

    ","parent_name":"SDLVehicleType"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(im)initWithDataType:resultCode:":{"name":"-initWithDataType:resultCode:","abstract":"

    Convenience init for creating a SDLVehicleDataResult with a dataType

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(im)initWithCustomOEMDataType:resultCode:":{"name":"-initWithCustomOEMDataType:resultCode:","abstract":"

    Convenience init for creating a SDLVehicleDataResult with a customDataType

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)dataType":{"name":"dataType","abstract":"

    Defined published data element type

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)customOEMDataType":{"name":"customOEMDataType","abstract":"

    OEM custom defined published data element type

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)resultCode":{"name":"resultCode","abstract":"

    Published data result code

    ","parent_name":"SDLVehicleDataResult"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(im)initWithTurnList:softButtons:":{"name":"-initWithTurnList:softButtons:","abstract":"

    Convenience init to update a list of maneuvers for navigation

    ","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)turnList":{"name":"turnList","abstract":"

    Optional, SDLTurn, 1 - 100 entries

    ","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)softButtons":{"name":"softButtons","abstract":"

    Required, SDLSoftButton, 0 - 1 Entries

    ","parent_name":"SDLUpdateTurnList"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"

    The result of requesting to unsubscribe to the GPSData.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"

    The result of requesting to unsubscribe to the vehicle speed in kilometers per hour.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"

    The result of requesting to unsubscribe to the number of revolutions per minute of the engine.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"

    The result of requesting to unsubscribe to the fuel level in the tank (percentage)

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    The result of requesting to unsubscribe to the fuel level state.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"

    The result of requesting to unsubscribe to the fuel range.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    The result of requesting to unsubscribe to the instantaneous fuel consumption in microlitres.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"

    The result of requesting to unsubscribe to the external temperature in degrees celsius.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"

    The result of requesting to unsubscribe to the PRNDL status.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"

    The result of requesting to unsubscribe to the tireStatus.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"

    The result of requesting to unsubscribe to the odometer in km.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"

    The result of requesting to unsubscribe to the status of the seat belts.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"

    The result of requesting to unsubscribe to the body information including power modes.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"

    The result of requesting to unsubscribe to the device status including signal and battery strength.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"

    The result of requesting to unsubscribe to the status of the brake pedal.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"

    The result of requesting to unsubscribe to the status of the wipers.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"

    The result of requesting to unsubscribe to the status of the head lamps.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"

    The result of requesting to unsubscribe to the estimated percentage of remaining oil life of the engine.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"

    The result of requesting to unsubscribe to the torque value for engine (in Nm) on non-diesel variants.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    The result of requesting to unsubscribe to the accelerator pedal position (percentage depressed)

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    The result of requesting to unsubscribe to the current angle of the steering wheel (in deg)

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"

    The result of requesting to unsubscribe to the emergency call info

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"

    The result of requesting to unsubscribe to the airbag status

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    The result of requesting to unsubscribe to the emergency event

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"

    The result of requesting to unsubscribe to the cluster modes

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"

    The result of requesting to unsubscribe to the myKey status

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    The result of requesting to unsubscribe to the electronic parking brake status

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"

    The result of requesting to unsubscribe to the turn signal

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    The result of requesting to unsubscribe to the cloud app vehicle id

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:","abstract":"

    Convenience init for unsubscribing to all possible vehicle data items.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"

    Convenience init for unsubscribing to all possible vehicle data items.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"

    Convenience init for unsubscribing to all possible vehicle data items.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)gps":{"name":"gps","abstract":"

    If true, unsubscribes from GPS

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)speed":{"name":"speed","abstract":"

    If true, unsubscribes from Speed

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"

    If true, unsubscribes from RPM

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"

    If true, unsubscribes from Fuel Level

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    If true, unsubscribes from Fuel Level State

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"

    If true, unsubscribes from Fuel Range

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    If true, unsubscribes from Instant Fuel Consumption

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"

    If true, unsubscribes from External Temperature

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"

    If true, unsubscribes from PRNDL

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"

    If true, unsubscribes from Tire Pressure

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"

    If true, unsubscribes from Odometer

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"

    If true, unsubscribes from Belt Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"

    If true, unsubscribes from Body Information

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"

    If true, unsubscribes from Device Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"

    If true, unsubscribes from Driver Braking

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"

    If true, unsubscribes from Wiper Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"

    If true, unsubscribes from Head Lamp Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"

    If true, unsubscribes from Engine Oil Life

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"

    If true, unsubscribes from Engine Torque

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    If true, unsubscribes from Acc Pedal Position

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    If true, unsubscribes from Steering Wheel Angle data

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"

    If true, unsubscribes from eCallInfo

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"

    If true, unsubscribes from Airbag Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    If true, unsubscribes from Emergency Event

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    If true, unsubscribes from Cluster Mode Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"

    If true, unsubscribes from My Key

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    A boolean value. If true, unsubscribes to the Electronic Parking Brake Status

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"

    A boolean value. If true, unsubscribes to the Turn Signal

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    A boolean value. If true, unsubscribes to the Cloud App Vehicle ID

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(im)initWithButtonName:":{"name":"-initWithButtonName:","abstract":"

    Convenience init to unsubscribe from a subscription button

    ","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(py)buttonName":{"name":"buttonName","abstract":"

    A name of the button to unsubscribe from","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnpublishAppService.html#/c:objc(cs)SDLUnpublishAppService(im)initWithServiceID:":{"name":"-initWithServiceID:","abstract":"

    Create an instance of UnpublishAppService with the serviceID that corresponds with the service to be unpublished

    ","parent_name":"SDLUnpublishAppService"},"Classes/SDLUnpublishAppService.html#/c:objc(cs)SDLUnpublishAppService(py)serviceID":{"name":"serviceID","abstract":"

    The ID of the service to be unpublished.

    ","parent_name":"SDLUnpublishAppService"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(im)initWithNavigationText:turnIcon:":{"name":"-initWithNavigationText:turnIcon:","abstract":"

    Convenience init to UpdateTurnList for navigation

    ","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)navigationText":{"name":"navigationText","abstract":"

    Individual turn text. Must provide at least text or icon for a given turn

    ","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)turnIcon":{"name":"turnIcon","abstract":"

    Individual turn icon. Must provide at least text or icon for a given turn

    ","parent_name":"SDLTurn"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventDelegate":{"name":"touchEventDelegate","abstract":"

    Notified of processed touches such as pinches, pans, and taps

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventHandler":{"name":"touchEventHandler","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapDistanceThreshold":{"name":"tapDistanceThreshold","abstract":"

    Distance between two taps on the screen, in the head unit’s coordinate system, used for registering double-tap callbacks.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)panDistanceThreshold":{"name":"panDistanceThreshold","abstract":"

    Minimum distance for a pan gesture in the head unit’s coordinate system, used for registering pan callbacks.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapTimeThreshold":{"name":"tapTimeThreshold","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold":{"name":"movementTimeThreshold","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)enableSyncedPanning":{"name":"enableSyncedPanning","abstract":"

    If set to NO, the display link syncing will be ignored and movementTimeThreshold will be used. Defaults to YES.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEnabled":{"name":"touchEnabled","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)cancelPendingTouches":{"name":"-cancelPendingTouches","abstract":"

    @abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:":{"name":"-initWithHitTester:","abstract":"

    Initialize a touch manager with a hit tester if available

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:videoScaleManager:":{"name":"-initWithHitTester:videoScaleManager:","abstract":"

    Initialize a touch manager with a hit tester and a video scale manager.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)syncFrame":{"name":"-syncFrame","abstract":"

    Called by SDLStreamingMediaManager in sync with the streaming framerate. This helps to moderate panning gestures by allowing the UI to be modified in time with the framerate.

    ","parent_name":"SDLTouchManager"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)pressAvailable":{"name":"pressAvailable","abstract":"

    Whether or not long presses are available

    ","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)multiTouchAvailable":{"name":"multiTouchAvailable","abstract":"

    Whether or not multi-touch (e.g. a pinch gesture) is available

    ","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)doublePressAvailable":{"name":"doublePressAvailable","abstract":"

    Whether or not a double tap is available

    ","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)touchEventId":{"name":"touchEventId","abstract":"

    A touch’s unique identifier. The application can track the current touch events by id.

    ","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)timeStamp":{"name":"timeStamp","abstract":"

    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.

    ","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)coord":{"name":"coord","abstract":"

    The touch’s coordinate

    ","parent_name":"SDLTouchEvent"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)x":{"name":"x","abstract":"

    The x value of the touch coordinate

    ","parent_name":"SDLTouchCoord"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)y":{"name":"y","abstract":"

    The y value of the touch coordinate

    ","parent_name":"SDLTouchCoord"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(im)initWithTouchEvent:":{"name":"-initWithTouchEvent:","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)identifier":{"name":"identifier","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)location":{"name":"location","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)timeStamp":{"name":"timeStamp","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isFirstFinger":{"name":"isFirstFinger","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isSecondFinger":{"name":"isSecondFinger","abstract":"

    @abstract","parent_name":"SDLTouch"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)pressureTelltale":{"name":"pressureTelltale","abstract":"

    Status of the Tire Pressure Telltale. See WarningLightStatus.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftFront":{"name":"leftFront","abstract":"

    The status of the left front tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightFront":{"name":"rightFront","abstract":"

    The status of the right front tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftRear":{"name":"leftRear","abstract":"

    The status of the left rear tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightRear":{"name":"rightRear","abstract":"

    The status of the right rear tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerLeftRear":{"name":"innerLeftRear","abstract":"

    The status of the inner left rear tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerRightRear":{"name":"innerRightRear","abstract":"

    The status of the innter right rear tire.

    ","parent_name":"SDLTireStatus"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)name":{"name":"name","abstract":"

    The enumeration identifying the field.

    ","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)characterSet":{"name":"characterSet","abstract":"

    The character set that is supported in this field.

    ","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)width":{"name":"width","abstract":"

    The number of characters in one row of this field.

    ","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)rows":{"name":"rows","abstract":"

    The number of rows for this text field.

    ","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(im)initWithName:characterSet:width:rows:":{"name":"-initWithName:characterSet:width:rows:","abstract":"

    Convenience initalizer for the TextField RPC struct

    ","parent_name":"SDLTextField"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"

    Constructor with the required values.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithTemplate:":{"name":"-initWithTemplate:","abstract":"

    Init with the required values.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithTemplate:dayColorScheme:nightColorScheme:":{"name":"-initWithTemplate:dayColorScheme:nightColorScheme:","abstract":"

    Convinience constructor with all the parameters.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)template":{"name":"template","abstract":"

    Predefined or dynamically created window template. Currently only predefined window template layouts are defined.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"

    The color scheme to use when the head unit is in a light / day situation.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"

    The color scheme to use when the head unit is in a dark / night situation.

    ","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:":{"name":"-initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:","abstract":"

    Convenience init

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryColor:secondaryColor:backgroundColor:":{"name":"-initWithPrimaryColor:secondaryColor:backgroundColor:","abstract":"

    Convenience init

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)primaryColor":{"name":"primaryColor","abstract":"

    The “primary” color. This must always be your primary brand color. If the OEM only uses one color, this will be the color. It is recommended to the OEMs that the primaryColor should change the mediaClockTimer bar and the highlight color of soft buttons.

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)secondaryColor":{"name":"secondaryColor","abstract":"

    The “secondary” color. This may be an accent or complimentary color to your primary brand color. If the OEM uses this color, they must also use the primary color. It is recommended to the OEMs that the secondaryColor should change the background color of buttons, such as soft buttons.

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)backgroundColor":{"name":"backgroundColor","abstract":"

    The background color to be used on the template. If the OEM does not support this parameter, assume on “dayColorScheme” that this will be a light color, and on “nightColorScheme” a dark color. You should do the same for your custom schemes.

    ","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithFahrenheitValue:":{"name":"-initWithFahrenheitValue:","abstract":"

    Convenience init for a fahrenheit temperature value.

    ","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithCelsiusValue:":{"name":"-initWithCelsiusValue:","abstract":"

    Convenience init for a celsius temperature value.

    ","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithUnit:value:":{"name":"-initWithUnit:value:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)unit":{"name":"unit","abstract":"

    Temperature unit

    ","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)value":{"name":"value","abstract":"

    Temperature value in specified unit. Range depends on OEM and is not checked by SDL.

    ","parent_name":"SDLTemperature"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(im)initWithText:type:":{"name":"-initWithText:type:","abstract":"

    Initialize with text and a type

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)textChunksFromString:":{"name":"+textChunksFromString:","abstract":"

    Create TTS using text

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)sapiChunksFromString:":{"name":"+sapiChunksFromString:","abstract":"

    Create TTS using SAPI

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)lhPlusChunksFromString:":{"name":"+lhPlusChunksFromString:","abstract":"

    Create TTS using LH Plus

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)prerecordedChunksFromString:":{"name":"+prerecordedChunksFromString:","abstract":"

    Create TTS using prerecorded chunks

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)silenceChunks":{"name":"+silenceChunks","abstract":"

    Create TTS using silence

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)fileChunksWithName:":{"name":"+fileChunksWithName:","abstract":"

    Create “TTS” to play an audio file previously uploaded to the system.

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)text":{"name":"text","abstract":"

    Text to be spoken, a phoneme specification, or the name of a pre-recorded / pre-uploaded sound. The contents of this field are indicated by the “type” field.

    ","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)type":{"name":"type","abstract":"

    The type of information in the “text” field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).

    ","parent_name":"SDLTTSChunk"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(im)initWithType:fileName:":{"name":"-initWithType:fileName:","abstract":"

    Create a generic system request with a file name

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(im)initWithProprietaryType:fileName:":{"name":"-initWithProprietaryType:fileName:","abstract":"

    Create an OEM_PROPRIETARY system request with a subtype and file name

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestType":{"name":"requestType","abstract":"

    The type of system request. Note that Proprietary requests should forward the binary data to the known proprietary module on the system.

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"

    A request subType used when the requestType is OEM_SPECIFIC.

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)fileName":{"name":"fileName","abstract":"

    Filename of HTTP data to store in predefined system staging area.

    ","parent_name":"SDLSystemRequest"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displays":{"name":"displays","abstract":"

    Provides window capabilities of all displays connected with SDL. By default, one display is connected and supported which includes window capability information of the default main window of the display. May be nil if the system has not provided display and window capability information yet.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displayCapabilities":{"name":"displayCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"

    If returned, the platform supports on-screen SoftButtons

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"

    If returned, the platform supports custom on-screen Presets

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)speechCapabilities":{"name":"speechCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)prerecordedSpeechCapabilities":{"name":"prerecordedSpeechCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)vrCapability":{"name":"vrCapability","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)pcmStreamCapability":{"name":"pcmStreamCapability","abstract":"
    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)appServicesCapabilities":{"name":"appServicesCapabilities","abstract":"

    If returned, the platform supports app services

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability":{"name":"navigationCapability","abstract":"

    If returned, the platform supports navigation

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability":{"name":"phoneCapability","abstract":"

    If returned, the platform supports making phone calls

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"

    If returned, the platform supports video streaming

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"

    If returned, the platform supports remote control capabilities

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)seatLocationCapability":{"name":"seatLocationCapability","abstract":"

    If returned, the platform supports remote control capabilities for seats

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)defaultMainWindowCapability":{"name":"defaultMainWindowCapability","abstract":"

    Returns the window capability object of the default main window which is always pre-created by the connected system. This is a convenience method for easily accessing the capabilities of the default main window.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)supportsSubscriptions":{"name":"supportsSubscriptions","abstract":"

    YES if subscriptions are available on the connected module and you will automatically be notified if the value changes on the module. If NO, calls to subscribe methods will subscribe to updates, but the module will not automatically notify you. You will need to call updateWithCapabilityType:completionHandler: to force an update if you need one (though this should be rare). This does not apply to the DISPLAYS capability type which you can always subscribe to.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)init":{"name":"-init","abstract":"

    Init is unavailable. Dependencies must be injected using initWithConnectionManager:

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"

    Creates a new system capability manager with a specified connection manager

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)start":{"name":"-start","abstract":"

    Starts the manager. This method is used internally.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)stop":{"name":"-stop","abstract":"

    Stops the manager. This method is used internally.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)windowCapabilityWithWindowID:":{"name":"-windowCapabilityWithWindowID:","abstract":"

    Returns the window capability of one of your app’s windows with the specified window ID that is on the primary display (i.e. the head unit itself). This is a convenience method to easily access capabilities of windows such as your apps’ widget windows.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)isCapabilitySupported:":{"name":"-isCapabilitySupported:","abstract":"

    Returns whether or not the capability type is supported on the module. You can use this to check if subscribing to the capability will work. If this returns NO, then the feature is not supported by the head unit. If YES, the feature is supported by the head unit. You can subscribe to the capability type to get more information about the capability’s support and features on the connected module.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)updateCapabilityType:completionHandler:":{"name":"-updateCapabilityType:completionHandler:","abstract":"

    This method has been superseded by the subscribeToCapabilityType: methods. You should use one of those methods instead unless you only want a value once (you don’t want to keep a long-lasting observer) and it must be current (most capabilities do not need to be updated). If you have a separate subscription observer and are connected to a head unit that does not support subscriptions, when this method returns, it will also call all subscription callbacks that you’ve set up with the new value if there is one. Therefore, you can use this method to force an update to all subscriptions of that particular type on head units that don’t support subscriptions (supportsSubscriptions == NO).

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withBlock:":{"name":"-subscribeToCapabilityType:withBlock:","abstract":"

    Subscribe to a particular capability type using a block callback.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withUpdateHandler:":{"name":"-subscribeToCapabilityType:withUpdateHandler:","abstract":"

    Subscribe to a particular capability type using a handler callback.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withObserver:selector:":{"name":"-subscribeToCapabilityType:withObserver:selector:","abstract":"

    Subscribe to a particular capability type with a selector callback.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)unsubscribeFromCapabilityType:withObserver:":{"name":"-unsubscribeFromCapabilityType:withObserver:","abstract":"

    Unsubscribe from a particular capability type. If it was subscribed with a block / handler, the return value should be passed to the observer to unsubscribe the block. If it was subscribed with a selector, the observer object (on which the selector exists and is called) should be passed to unsubscribe the object selector.

    ","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithAppServicesCapabilities:":{"name":"-initWithAppServicesCapabilities:","abstract":"

    Convenience init for an App Service Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithNavigationCapability:":{"name":"-initWithNavigationCapability:","abstract":"

    Convenience init for a Navigation Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithPhoneCapability:":{"name":"-initWithPhoneCapability:","abstract":"

    Convenience init for a Phone Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithVideoStreamingCapability:":{"name":"-initWithVideoStreamingCapability:","abstract":"

    Convenience init for a Video Streaming Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithRemoteControlCapability:":{"name":"-initWithRemoteControlCapability:","abstract":"

    Convenience init for a Remote Control Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithDisplayCapabilities:":{"name":"-initWithDisplayCapabilities:","abstract":"

    Convenience init for DisplayCapability list

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithSeatLocationCapability:":{"name":"-initWithSeatLocationCapability:","abstract":"

    Convenience init for a Remote Control Capability

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"

    Used as a descriptor of what data to expect in this struct. The corresponding param to this enum should be included and the only other parameter included.

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)appServicesCapabilities":{"name":"appServicesCapabilities","abstract":"

    Describes the capabilities of app services including what service types are supported and the current state of services.

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)navigationCapability":{"name":"navigationCapability","abstract":"

    Describes the extended capabilities of the onboard navigation system

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)phoneCapability":{"name":"phoneCapability","abstract":"

    Describes the extended capabilities of the module’s phone feature

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"

    Describes the capabilities of the module’s video streaming feature

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"

    Describes the extended capabilities of the module’s remote control feature

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)seatLocationCapability":{"name":"seatLocationCapability","abstract":"

    Describes information about the locations of each seat

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)displayCapabilities":{"name":"displayCapabilities","abstract":"

    Contain the display related information and all windows related to that display

    ","parent_name":"SDLSystemCapability"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"

    Convenience init to describe the SDL version

    ","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"

    The major version indicates versions that is not-compatible to previous versions

    ","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"

    The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)

    ","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"

    Allows backward-compatible fixes to the API without increasing the minor version of the interface

    ","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"

    The result of requesting to subscribe to the GPSData.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"

    The result of requesting to subscribe to the vehicle speed in kilometers per hour.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"

    The result of requesting to subscribe to the number of revolutions per minute of the engine.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"

    The result of requesting to subscribe to the fuel level in the tank (percentage)

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    The result of requesting to subscribe to the fuel level state.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"

    The result of requesting to subscribe to the fuel range.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"

    The result of requesting to subscribe to the external temperature in degrees celsius.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"

    The result of requesting to subscribe to the PRNDL status.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"

    The result of requesting to subscribe to the tireStatus.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"

    The result of requesting to subscribe to the odometer in km.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"

    The result of requesting to subscribe to the status of the seat belts.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"

    The result of requesting to subscribe to the body information including power modes.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"

    The result of requesting to subscribe to the device status including signal and battery strength.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"

    The result of requesting to subscribe to the status of the brake pedal.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"

    The result of requesting to subscribe to the status of the wipers.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"

    The result of requesting to subscribe to the status of the head lamps.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"

    The result of requesting to subscribe to the estimated percentage of remaining oil life of the engine.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"

    The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    The result of requesting to subscribe to the accelerator pedal position (percentage depressed)

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    The result of requesting to subscribe to the current angle of the steering wheel (in deg)

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"

    The result of requesting to subscribe to the emergency call info

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"

    The result of requesting to subscribe to the airbag status

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    The result of requesting to subscribe to the emergency event

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"

    The result of requesting to subscribe to the cluster modes

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"

    The result of requesting to subscribe to the myKey status

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    The result of requesting to subscribe to the electronic parking brake status

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"

    The result of requesting to subscribe to the turn signal

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    The result of requesting to subscribe to the cloud app vehicle ID

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:","abstract":"

    Convenience init for subscribing to all possible vehicle data items.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"

    Convenience init for subscribing to all possible vehicle data items.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"

    Convenience init for subscribing to all possible vehicle data items.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)gps":{"name":"gps","abstract":"

    A boolean value. If true, subscribes GPS data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)speed":{"name":"speed","abstract":"

    A boolean value. If true, subscribes Speed data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"

    A boolean value. If true, subscribes RPM data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"

    A boolean value. If true, subscribes Fuel Level data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    A boolean value. If true, subscribes Fuel Level State data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"

    A boolean value. If true, subscribes Fuel Range data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    A boolean value. If true, subscribes Instant Fuel Consumption data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"

    A boolean value. If true, subscribes External Temperature data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"

    A boolean value. If true, subscribes PRNDL data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"

    A boolean value. If true, subscribes Tire Pressure status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"

    A boolean value. If true, subscribes Odometer data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"

    A boolean value. If true, subscribes Belt Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"

    A boolean value. If true, subscribes Body Information data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"

    A boolean value. If true, subscribes Device Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"

    A boolean value. If true, subscribes Driver Braking data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"

    A boolean value. If true, subscribes Wiper Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"

    A boolean value. If true, subscribes Head Lamp Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"

    A boolean value. If true, subscribes to Engine Oil Life data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"

    A boolean value. If true, subscribes Engine Torque data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    A boolean value. If true, subscribes Acc Pedal Position data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    A boolean value. If true, subscribes Steering Wheel Angle data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"

    A boolean value. If true, subscribes eCall Info data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"

    A boolean value. If true, subscribes Airbag Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    A boolean value. If true, subscribes Emergency Event data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    A boolean value. If true, subscribes Cluster Mode Status data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"

    A boolean value. If true, subscribes myKey data.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    A boolean value. If true, subscribes to the electronic parking brake status.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"

    A boolean value. If true, subscribes to the turn signal status.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    A boolean value. If true, subscribes to the cloud app vehicle ID.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.

    ","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"

    Construct a SDLSubscribeButton with a handler callback when an event occurs.

    ","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithButtonName:handler:":{"name":"-initWithButtonName:handler:","abstract":"

    Construct a SDLSubscribeButton with a handler callback when an event occurs with a button name.

    ","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)handler":{"name":"handler","abstract":"

    A handler that will let you know when the button you subscribed to is selected.

    ","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)buttonName":{"name":"buttonName","abstract":"

    The name of the button to subscribe to","parent_name":"SDLSubscribeButton"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)scale":{"name":"scale","abstract":"

    The scaling factor the app should use to change the size of the projecting view.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)displayViewportResolution":{"name":"displayViewportResolution","abstract":"

    The screen resolution of the connected display. The units are pixels.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)appViewportFrame":{"name":"appViewportFrame","abstract":"

    The frame of the app’s projecting view. This is calculated by dividing the display’s viewport resolution by the scale. The units are points.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)init":{"name":"-init","abstract":"

    Creates a default streaming video scale manager.","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)initWithScale:displayViewportResolution:":{"name":"-initWithScale:displayViewportResolution:","abstract":"

    Convenience init for creating the manager with a scale and connected display viewport resolution.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)scaleTouchEventCoordinates:":{"name":"-scaleTouchEventCoordinates:","abstract":"

    Scales the coordinates of an OnTouchEvent from the display’s coordinate system to the app’s viewport coordinate system. If the scale value is less than 1.0, the touch events will be returned without being scaled.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)scaleHapticRect:":{"name":"-scaleHapticRect:","abstract":"

    Scales a haptic rectangle from the app’s viewport coordinate system to the display’s coordinate system. If the scale value is less than 1.0, the haptic rectangle will be returned without being scaled.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)stop":{"name":"-stop","abstract":"

    Stops the manager. This method is used internally.

    ","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager":{"name":"touchManager","abstract":"

    Touch Manager responsible for providing touch event notifications.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioManager":{"name":"audioManager","abstract":"

    Audio Manager responsible for managing streaming audio.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)rootViewController":{"name":"rootViewController","abstract":"

    This property is used for SDLCarWindow, the ability to stream any view controller. To start, you must set an initial view controller on SDLStreamingMediaConfiguration rootViewController. After streaming begins, you can replace that view controller with a new root by placing the new view controller into this property.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)focusableItemManager":{"name":"focusableItemManager","abstract":"

    A haptic interface that can be updated to reparse views within the window you’ve provided. Send a SDLDidUpdateProjectionView notification or call the updateInterfaceLayout method to reparse. The “output” of this haptic interface occurs in the touchManager property where it will call the delegate.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)streamingSupported":{"name":"streamingSupported","abstract":"

    Whether or not video streaming is supported

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoConnected":{"name":"videoConnected","abstract":"

    Whether or not the video session is connected.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoEncrypted":{"name":"videoEncrypted","abstract":"

    Whether or not the video session is encrypted. This may be different than the requestedEncryptionType.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioConnected":{"name":"audioConnected","abstract":"

    Whether or not the audio session is connected.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioEncrypted":{"name":"audioEncrypted","abstract":"

    Whether or not the audio session is encrypted. This may be different than the requestedEncryptionType.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoStreamingPaused":{"name":"videoStreamingPaused","abstract":"

    Whether or not the video stream is paused due to either the application being backgrounded, the HMI state being either NONE or BACKGROUND, or the video stream not being ready.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)screenSize":{"name":"screenSize","abstract":"

    The current screen resolution of the connected display in pixels.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoFormat":{"name":"videoFormat","abstract":"

    This is the agreed upon format of video encoder that is in use, or nil if not currently connected.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)supportedFormats":{"name":"supportedFormats","abstract":"

    A list of all supported video formats by this manager

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)pixelBufferPool":{"name":"pixelBufferPool","abstract":"

    The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)requestedEncryptionType":{"name":"requestedEncryptionType","abstract":"

    The requested encryption type when a session attempts to connect. This setting applies to both video and audio sessions.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)showVideoBackgroundDisplay":{"name":"showVideoBackgroundDisplay","abstract":"

    When YES, the StreamingMediaManager will send a black screen with “Video Backgrounded String”. Defaults to YES.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"

    Create a new streaming media manager for navigation and projection apps with a specified configuration.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)initWithConnectionManager:configuration:systemCapabilityManager:":{"name":"-initWithConnectionManager:configuration:systemCapabilityManager:","abstract":"

    Create a new streaming media manager for navigation and projection apps with a specified configuration.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stop":{"name":"-stop","abstract":"

    Stop the manager. This method is used internally.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopAudio":{"name":"-stopAudio","abstract":"

    Stop the audio feature of the manager. This method is used internally.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopVideo":{"name":"-stopVideo","abstract":"

    Stop the video feature of the manager. This method is used internally.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:":{"name":"-sendVideoData:","abstract":"

    This method receives raw image data and will run iOS8+‘s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:presentationTimestamp:":{"name":"-sendVideoData:presentationTimestamp:","abstract":"

    This method receives raw image data and will run iOS8+‘s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"

    This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startWithProtocol:":{"name":"-startWithProtocol:","abstract":"

    Start the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startAudioWithProtocol:":{"name":"-startAudioWithProtocol:","abstract":"

    Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startVideoWithProtocol:":{"name":"-startVideoWithProtocol:","abstract":"

    Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on SDLManager.

    ","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"

    Set security managers which could be used. This is primarily used with video streaming applications to authenticate and perhaps encrypt traffic data.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)maximumDesiredEncryption":{"name":"maximumDesiredEncryption","abstract":"

    What encryption level video/audio streaming should be. The default is SDLStreamingEncryptionFlagAuthenticateAndEncrypt.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)customVideoEncoderSettings":{"name":"customVideoEncoderSettings","abstract":"

    Properties to use for applications that utilize the video encoder for streaming. See VTCompressionProperties.h for more details. For example, you can set kVTCompressionPropertyKey_ExpectedFrameRate to set your framerate. Setting the framerate this way will also set the framerate if you use CarWindow automatic streaming.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)dataSource":{"name":"dataSource","abstract":"

    Usable to change run time video stream setup behavior. Only use this and modify the results if you really know what you’re doing. The head unit defaults are generally good.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController":{"name":"rootViewController","abstract":"

    Set the initial view controller your video streaming content is within.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)carWindowRenderingType":{"name":"carWindowRenderingType","abstract":"

    Declares if CarWindow will use layer rendering or view rendering. Defaults to layer rendering.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)enableForcedFramerateSync":{"name":"enableForcedFramerateSync","abstract":"

    When YES, the StreamingMediaManager will run a CADisplayLink with the framerate set to the video encoder settings kVTCompressionPropertyKey_ExpectedFrameRate. This then forces TouchManager (and CarWindow, if used) to sync their callbacks to the framerate. If using CarWindow, this must be YES. If NO, enableSyncedPanning on SDLTouchManager will be set to NO. Defaults to YES.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)allowMultipleViewControllerOrientations":{"name":"allowMultipleViewControllerOrientations","abstract":"

    When YES, the StreamingMediaManager will disable its internal checks that the rootViewController only has one supportedOrientation. Having multiple orientations can cause streaming issues. If you wish to disable this check, set it to YES. Defaults to NO.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)init":{"name":"-init","abstract":"

    Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you’d like custom video encoder settings, you can set the property manually.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfiguration":{"name":"+secureConfiguration","abstract":"

    Create a secure video streaming configuration. Security managers will be provided from SDLEncryptionConfiguration and the encryption flag will be set to SDLStreamingEncryptionFlagAuthenticateAndEncrypt. If you’d like custom video encoder settings, you can set the property manually.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"

    Manually set all the properties to the streaming media configuration

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithEncryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithEncryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"

    Manually set all the properties to the streaming media configuration

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:":{"name":"-initWithSecurityManagers:","abstract":"

    Create a secure configuration for each of the security managers provided.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfigurationWithSecurityManagers:":{"name":"+secureConfigurationWithSecurityManagers:","abstract":"

    Create a secure configuration for each of the security managers provided.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)insecureConfiguration":{"name":"+insecureConfiguration","abstract":"

    Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you’d like custom video encoder settings, you can set the property manually. This is equivalent to init.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingInsecureConfigurationWithInitialViewController:":{"name":"+autostreamingInsecureConfigurationWithInitialViewController:","abstract":"

    Create a CarWindow insecure configuration with a view controller

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithSecurityManagers:initialViewController:":{"name":"+autostreamingSecureConfigurationWithSecurityManagers:initialViewController:","abstract":"

    Create a CarWindow secure configuration with a view controller and security managers

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithInitialViewController:":{"name":"+autostreamingSecureConfigurationWithInitialViewController:","abstract":"

    Create a CarWindow secure configuration with a view controller.

    ","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(im)initWithCountryCode:fccFacilityId:":{"name":"-initWithCountryCode:fccFacilityId:","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)countryCode":{"name":"countryCode","abstract":"

    @abstract Binary Representation of ITU Country Code. USA Code is 001.

    ","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)fccFacilityId":{"name":"fccFacilityId","abstract":"

    @abstract Binary representation of unique facility ID assigned by the FCC","parent_name":"SDLStationIDNumber"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithTimeInterval:":{"name":"-initWithTimeInterval:","abstract":"

    Create a time struct with a time interval (time in seconds). Fractions of the second will be eliminated and rounded down.

    ","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithHours:minutes:seconds:":{"name":"-initWithHours:minutes:seconds:","abstract":"

    Create a time struct with hours, minutes, and seconds

    ","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)hours":{"name":"hours","abstract":"

    The hour of the media clock

    ","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)minutes":{"name":"minutes","abstract":"

    The minute of the media clock

    ","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)seconds":{"name":"seconds","abstract":"

    The second of the media clock

    ","parent_name":"SDLStartTime"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTS:":{"name":"-initWithTTS:","abstract":"

    Convenience init to create a speak message

    ","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTSChunks:":{"name":"-initWithTTSChunks:","abstract":"

    Convenience init to create a speak message

    ","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(py)ttsChunks":{"name":"ttsChunks","abstract":"

    An array of TTSChunk structs which, taken together, specify the phrase to be spoken

    ","parent_name":"SDLSpeak"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)name":{"name":"name","abstract":"

    The name of this soft button state

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)artwork":{"name":"artwork","abstract":"

    The artwork to be used with this button or nil if it is text-only

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)text":{"name":"text","abstract":"

    The text to be used with this button or nil if it is image-only

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)highlighted":{"name":"highlighted","abstract":"

    Whether or not the button should be highlighted on the UI

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)systemAction":{"name":"systemAction","abstract":"

    A special system action

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)softButton":{"name":"softButton","abstract":"

    An SDLSoftButton describing this state

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:image:":{"name":"-initWithStateName:text:image:","abstract":"

    Create the soft button state. Either the text or artwork or both may be set.

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:artwork:":{"name":"-initWithStateName:text:artwork:","abstract":"

    Create the soft button state. Either the text or artwork or both may be set.

    ","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)name":{"name":"name","abstract":"

    The name of this button

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states":{"name":"states","abstract":"

    All states available to this button

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentState":{"name":"currentState","abstract":"

    The name of the current state of this soft button

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentStateSoftButton":{"name":"currentStateSoftButton","abstract":"

    Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)eventHandler":{"name":"eventHandler","abstract":"

    The handler to be called when the button is in the current state and is pressed

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:states:initialStateName:handler:":{"name":"-initWithName:states:initialStateName:handler:","abstract":"

    Create a multi-state (or single-state, but you should use initWithName:state: instead for that case) soft button. For example, a button that changes its image or text, such as a repeat or shuffle button.

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:state:handler:":{"name":"-initWithName:state:handler:","abstract":"

    Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:text:artwork:handler:":{"name":"-initWithName:text:artwork:handler:","abstract":"

    Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToStateNamed:":{"name":"-transitionToStateNamed:","abstract":"

    Transition the soft button to another state in the states property. The wrapper considers all transitions valid (assuming a state with that name exists).

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToNextState":{"name":"-transitionToNextState","abstract":"

    Transition the soft button to the next state of the array set when in the states property

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)stateWithName:":{"name":"-stateWithName:","abstract":"

    Return a state from the state array with a specific name.

    ","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"

    The button supports a short press.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"

    The button supports a LONG press.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"

    The button supports “button down” and “button up”.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)imageSupported":{"name":"imageSupported","abstract":"

    The button supports referencing a static or dynamic image.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)textSupported":{"name":"textSupported","abstract":"

    The button supports the use of text. If not included, the default value should be considered true that the button will support text.

    ","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"

    Convenience init

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithType:text:image:highlighted:buttonId:systemAction:handler:":{"name":"-initWithType:text:image:highlighted:buttonId:systemAction:handler:","abstract":"

    Convenience init

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)handler":{"name":"handler","abstract":"

    A handler that may optionally be run when the SDLSoftButton has a corresponding notification occur.

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)type":{"name":"type","abstract":"

    Describes whether this soft button displays only text, only an image, or both

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)text":{"name":"text","abstract":"

    Optional text to display (if defined as TEXT or BOTH type)

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)image":{"name":"image","abstract":"

    Optional image struct for SoftButton (if defined as IMAGE or BOTH type)

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)isHighlighted":{"name":"isHighlighted","abstract":"

    Displays in an alternate mode, e.g. with a colored background or foreground. Depends on the IVI system.

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)softButtonID":{"name":"softButtonID","abstract":"

    Value which is returned via OnButtonPress / OnButtonEvent

    ","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)systemAction":{"name":"systemAction","abstract":"

    Parameter indicating whether selecting a SoftButton shall call a specific system action. This is intended to allow Notifications to bring the callee into full / focus; or in the case of persistent overlays, the overlay can persist when a SoftButton is pressed.

    ","parent_name":"SDLSoftButton"},"Classes/SDLSliderResponse.html#/c:objc(cs)SDLSliderResponse(py)sliderPosition":{"name":"sliderPosition","abstract":"

    The selected position of the slider.

    ","parent_name":"SDLSliderResponse"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:cancelID:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:cancelID:","abstract":"

    Convenience init with all parameters.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:":{"name":"-initWithNumTicks:position:","abstract":"

    Creates a slider with only the number of ticks and position. Note that this is not enough to get a SUCCESS response. You must supply additional data. See below for required parameters.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooter:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooter:timeout:","abstract":"

    Creates a slider with all required data and a static footer (or no footer).

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:","abstract":"

    Creates an slider with all required data and a dynamic footer (or no footer).

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)numTicks":{"name":"numTicks","abstract":"

    Represents a number of selectable items on a horizontal axis.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)position":{"name":"position","abstract":"

    Initial position of slider control (cannot exceed numTicks).

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderHeader":{"name":"sliderHeader","abstract":"

    Text header to display.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderFooter":{"name":"sliderFooter","abstract":"

    Text footer to display.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)timeout":{"name":"timeout","abstract":"

    App defined timeout. Indicates how long of a timeout from the last action (i.e. sliding control resets timeout). If omitted, the value is set to 10 seconds.

    ","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)cancelID":{"name":"cancelID","abstract":"

    An ID for this specific slider to allow cancellation through the CancelInteraction RPC.

    ","parent_name":"SDLSlider"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)status":{"name":"status","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)monitoringSystemStatus":{"name":"monitoringSystemStatus","abstract":"

    The status of TPMS for this particular tire

    ","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)pressure":{"name":"pressure","abstract":"

    The pressure value of this particular tire in kPa (kilopascals)

    ","parent_name":"SDLSingleTireStatus"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(im)initWithNavigationText1:navigationText2:eta:timeToDestination:totalDistance:turnIcon:nextTurnIcon:distanceToManeuver:distanceToManeuverScale:maneuverComplete:softButtons:":{"name":"-initWithNavigationText1:navigationText2:eta:timeToDestination:totalDistance:turnIcon:nextTurnIcon:distanceToManeuver:distanceToManeuverScale:maneuverComplete:softButtons:","abstract":"

    Convenience init to create navigation directions

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText1":{"name":"navigationText1","abstract":"

    The first line of text in a multi-line overlay screen.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText2":{"name":"navigationText2","abstract":"

    The second line of text in a multi-line overlay screen.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)eta":{"name":"eta","abstract":"

    Estimated Time of Arrival time at final destination

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)timeToDestination":{"name":"timeToDestination","abstract":"

    The amount of time needed to reach the final destination

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)totalDistance":{"name":"totalDistance","abstract":"

    The distance to the final destination

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)turnIcon":{"name":"turnIcon","abstract":"

    An icon to show with the turn description

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)nextTurnIcon":{"name":"nextTurnIcon","abstract":"

    An icon to show with the next turn description

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuver":{"name":"distanceToManeuver","abstract":"

    Fraction of distance till next maneuver (starting from when AlertManeuver is triggered). Used to calculate progress bar.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuverScale":{"name":"distanceToManeuverScale","abstract":"

    Distance till next maneuver (starting from) from previous maneuver. Used to calculate progress bar.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)maneuverComplete":{"name":"maneuverComplete","abstract":"

    If and when a maneuver has completed while an AlertManeuver is active, the app must send this value set to TRUE in order to clear the AlertManeuver overlay. If omitted the value will be assumed as FALSE.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)softButtons":{"name":"softButtons","abstract":"

    Three dynamic SoftButtons available (first SoftButton is fixed to “Turns”). If omitted on supported displays, the currently displayed SoftButton values will not change.

    ","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowAppMenu.html#/c:objc(cs)SDLShowAppMenu(im)initWithMenuID:":{"name":"-initWithMenuID:","abstract":"

    Creates a ShowAppMenu RPC to open the app menu directly to a AddSubMenu RPC’s submenu.

    ","parent_name":"SDLShowAppMenu"},"Classes/SDLShowAppMenu.html#/c:objc(cs)SDLShowAppMenu(py)menuID":{"name":"menuID","abstract":"

    A Menu ID that identifies the AddSubMenu to open if it correlates with the AddSubMenu menuID parameter. If not set the top level menu will be opened.

    ","parent_name":"SDLShowAppMenu"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:":{"name":"-initWithMainField1:mainField2:alignment:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:mainField3:mainField3Type:mainField4:mainField4Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:mainField3:mainField3Type:mainField4:mainField4Type:alignment:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:statusBar:mediaClock:mediaTrack:":{"name":"-initWithMainField1:mainField2:alignment:statusBar:mediaClock:mediaTrack:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:statusBar:mediaClock:mediaTrack:graphic:softButtons:customPresets:textFieldMetadata:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:statusBar:mediaClock:mediaTrack:graphic:softButtons:customPresets:textFieldMetadata:","abstract":"

    Convenience init to set template elements with the following parameters

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField1":{"name":"mainField1","abstract":"

    The text displayed in a single-line display, or in the upper display","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField2":{"name":"mainField2","abstract":"

    The text displayed on the second display line of a two-line display

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField3":{"name":"mainField3","abstract":"

    The text displayed on the first display line of the second page

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField4":{"name":"mainField4","abstract":"

    The text displayed on the second display line of the second page

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)alignment":{"name":"alignment","abstract":"

    The alignment that Specifies how mainField1 and mainField2 text","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)statusBar":{"name":"statusBar","abstract":"

    Text in the Status Bar

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaClock":{"name":"mediaClock","abstract":"

    This property is deprecated use SetMediaClockTimer instead.","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaTrack":{"name":"mediaTrack","abstract":"

    The text in the track field

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)graphic":{"name":"graphic","abstract":"

    An image to be shown on supported displays

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"

    An image to be shown on supported displays

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)softButtons":{"name":"softButtons","abstract":"

    The the Soft buttons defined by the App

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)customPresets":{"name":"customPresets","abstract":"

    The Custom Presets defined by the App

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)metadataTags":{"name":"metadataTags","abstract":"

    Text Field Metadata

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)windowID":{"name":"windowID","abstract":"

    This is the unique ID assigned to the window that this RPC is intended. If this param is not included, it will be assumed that this request is specifically for the main window on the main display. - see: PredefinedWindows enum.

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)templateConfiguration":{"name":"templateConfiguration","abstract":"

    Used to set an alternate template layout to a window.

    ","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)templateTitle":{"name":"templateTitle","abstract":"

    The title of the current template.

    ","parent_name":"SDLShow"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countUpFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:":{"name":"+countUpFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:","abstract":"

    Create a media clock timer that counts up, e.g from 0:00 to 4:18.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countUpFromStartTime:toEndTime:playPauseIndicator:":{"name":"+countUpFromStartTime:toEndTime:playPauseIndicator:","abstract":"

    Create a media clock timer that counts up, e.g from 0:00 to 4:18.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countDownFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:":{"name":"+countDownFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:","abstract":"

    Create a media clock timer that counts down, e.g. from 4:18 to 0:00

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countDownFromStartTime:toEndTime:playPauseIndicator:":{"name":"+countDownFromStartTime:toEndTime:playPauseIndicator:","abstract":"

    Create a media clock timer that counts down, e.g. from 4:18 to 0:00

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)pauseWithPlayPauseIndicator:":{"name":"+pauseWithPlayPauseIndicator:","abstract":"

    Pause an existing (counting up / down) media clock timer

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)updatePauseWithNewStartTimeInterval:endTimeInterval:playPauseIndicator:":{"name":"+updatePauseWithNewStartTimeInterval:endTimeInterval:playPauseIndicator:","abstract":"

    Update a pause time (or pause and update the time) on a media clock timer

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)updatePauseWithNewStartTime:endTime:playPauseIndicator:":{"name":"+updatePauseWithNewStartTime:endTime:playPauseIndicator:","abstract":"

    Update a pause time (or pause and update the time) on a media clock timer

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)resumeWithPlayPauseIndicator:":{"name":"+resumeWithPlayPauseIndicator:","abstract":"

    Resume a paused media clock timer. It resumes at the same time at which it was paused.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)clearWithPlayPauseIndicator:":{"name":"+clearWithPlayPauseIndicator:","abstract":"

    Remove a media clock timer from the screen

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:":{"name":"-initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:","abstract":"

    Convenience init to create a SDLSetMediaClockTimer object

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:":{"name":"-initWithUpdateMode:hours:minutes:seconds:","abstract":"

    Convenience init to create a SDLSetMediaClockTimer object

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:":{"name":"-initWithUpdateMode:","abstract":"

    Convenience init to create a SDLSetMediaClockTimer object

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:startTime:endTime:playPauseIndicator:":{"name":"-initWithUpdateMode:startTime:endTime:playPauseIndicator:","abstract":"

    Create a SetMediaClockTimer RPC with all available parameters. It’s recommended to use the specific initializers above.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)startTime":{"name":"startTime","abstract":"

    A Start Time with specifying hour, minute, second values

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)endTime":{"name":"endTime","abstract":"

    An END time of type SDLStartTime, specifying hour, minute, second values

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)updateMode":{"name":"updateMode","abstract":"

    The media clock/timer update mode (COUNTUP/COUNTDOWN/PAUSE/RESUME)

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)audioStreamingIndicator":{"name":"audioStreamingIndicator","abstract":"

    The audio streaming indicator used for a play/pause button.

    ","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetInteriorVehicleDataResponse.html#/c:objc(cs)SDLSetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"

    The new module data for the requested module

    ","parent_name":"SDLSetInteriorVehicleDataResponse"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(im)initWithModuleData:":{"name":"-initWithModuleData:","abstract":"

    Convenience init to change settings of a module

    ","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"

    The module data to set for the requested RC module.

    ","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:":{"name":"-initWithHelpText:timeoutText:","abstract":"

    Initialize SetGlobalProperties with help text and timeout text

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:","abstract":"

    Initialize SetGlobalProperties with help text, timeout text, help title, and help items

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:","abstract":"

    Initialize SetGlobalProperties with all possible items

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:menuLayout:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:menuLayout:","abstract":"

    Initialize SetGlobalProperties with all possible items

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)helpPrompt":{"name":"helpPrompt","abstract":"

    Help prompt for when the user asks for help with an interface prompt

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"

    Help prompt for when an interface prompt times out

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelpTitle":{"name":"vrHelpTitle","abstract":"

    Sets a voice recognition Help Title

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelp":{"name":"vrHelp","abstract":"

    Sets the items listed in the VR help screen used in an interaction started by Push to Talk

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuTitle":{"name":"menuTitle","abstract":"

    Text for the menu button label

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuIcon":{"name":"menuIcon","abstract":"

    Icon for the menu button

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)keyboardProperties":{"name":"keyboardProperties","abstract":"

    On-screen keyboard (perform interaction) configuration

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)userLocation":{"name":"userLocation","abstract":"

    Location of the user’s seat. Default is driver’s seat location if it is not set yet

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuLayout":{"name":"menuLayout","abstract":"

    The main menu layout. If this is sent while a menu is already on-screen, the head unit will change the display to the new layout type. See available menu layouts on DisplayCapabilities.menuLayoutsAvailable. Defaults to the head unit default.

    ","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"

    The display capabilities of the new template layout

    ","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"

    The button capabilities of the new template layout

    ","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"

    The soft button capabilities of the new template layout

    ","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"

    The preset bank capabilities of the new template layout

    ","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"

    Convenience init to set a display layout

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithLayout:":{"name":"-initWithLayout:","abstract":"

    Convenience init to set a display layout

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:dayColorScheme:nightColorScheme:":{"name":"-initWithPredefinedLayout:dayColorScheme:nightColorScheme:","abstract":"

    Convenience init to set a display layout

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)displayLayout":{"name":"displayLayout","abstract":"

    A display layout. Predefined or dynamically created screen layout.","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)dayColorScheme":{"name":"dayColorScheme","abstract":"

    The color scheme to be used on a head unit using a “light” or “day” color scheme. The OEM may only support this theme if their head unit only has a light color scheme.

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)nightColorScheme":{"name":"nightColorScheme","abstract":"

    The color scheme to be used on a head unit using a “dark” or “night” color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.

    ","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetCloudAppProperties.html#/c:objc(cs)SDLSetCloudAppProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"

    Convenience init.

    ","parent_name":"SDLSetCloudAppProperties"},"Classes/SDLSetCloudAppProperties.html#/c:objc(cs)SDLSetCloudAppProperties(py)properties":{"name":"properties","abstract":"

    The new cloud application properties.

    ","parent_name":"SDLSetCloudAppProperties"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"

    Convenience init to set an image icon from a file name. The file must already be uploaded to the head unit.

    ","parent_name":"SDLSetAppIcon"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(py)syncFileName":{"name":"syncFileName","abstract":"

    A file reference name","parent_name":"SDLSetAppIcon"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithAddress:addressLines:locationName:locationDescription:phoneNumber:image:deliveryMode:timeStamp:":{"name":"-initWithAddress:addressLines:locationName:locationDescription:phoneNumber:image:deliveryMode:timeStamp:","abstract":"

    Create a SendLocation request with an address object, without Lat/Long coordinates.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:","abstract":"

    Create a SendLocation request with Lat/Long coordinate, not an address object

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:displayAddressLines:phoneNumber:image:deliveryMode:timeStamp:address:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:displayAddressLines:phoneNumber:image:deliveryMode:timeStamp:address:","abstract":"

    Create a SendLocation request with Lat/Long coordinate and an address object and let the nav system decide how to parse it

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"

    The longitudinal coordinate of the location. Either the latitude / longitude OR the address must be provided.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"

    The latitudinal coordinate of the location. Either the latitude / longitude OR the address must be provided.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationName":{"name":"locationName","abstract":"

    Name / title of intended location

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationDescription":{"name":"locationDescription","abstract":"

    Description of the intended location / establishment

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)addressLines":{"name":"addressLines","abstract":"

    Location address for display purposes only.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)phoneNumber":{"name":"phoneNumber","abstract":"

    Phone number of intended location / establishment

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationImage":{"name":"locationImage","abstract":"

    Image / icon of intended location

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)deliveryMode":{"name":"deliveryMode","abstract":"

    Mode in which the sendLocation request is sent

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)timeStamp":{"name":"timeStamp","abstract":"

    Arrival time of Location. If multiple SendLocations are sent, this will be used for sorting as well.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address":{"name":"address","abstract":"

    Address to be used for setting destination. Either the latitude / longitude OR the address must be provided.

    ","parent_name":"SDLSendLocation"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(im)initWithHapticRectData:":{"name":"-initWithHapticRectData:","abstract":"

    Constructs a new SDLSendHapticData object indicated by the hapticSpatialData parameter

    ","parent_name":"SDLSendHapticData"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(py)hapticRectData":{"name":"hapticRectData","abstract":"

    Array of spatial 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 spatial data previously sent through RPC. If an empty array is sent, the existing spatial data will be cleared

    ","parent_name":"SDLSendHapticData"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:action:":{"name":"-initWithId:action:","abstract":"

    @abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:label:action:":{"name":"-initWithId:label:action:","abstract":"

    @abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)id":{"name":"id","abstract":"

    @abstract id of the action to be performed.

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)label":{"name":"label","abstract":"

    @abstract label of the action to be performed.

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)action":{"name":"action","abstract":"

    @abstract type of action to be performed

    ","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(im)initWithSeats:cols:rows:levels:":{"name":"-initWithSeats:cols:rows:levels:","abstract":"

    Constructs a newly allocated SDLSeatLocationCapability object with all parameters

    ","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)cols":{"name":"cols","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)rows":{"name":"rows","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)levels":{"name":"levels","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)seats":{"name":"seats","abstract":"

    Contains a list of SeatLocation in the vehicle, the first element is the driver’s seat","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocation.html#/c:objc(cs)SDLSeatLocation(py)grid":{"name":"grid","abstract":"

    Optional

    ","parent_name":"SDLSeatLocation"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:":{"name":"-initWithId:","abstract":"

    Constructs a newly allocated SDLSeatControlData object with cushion and firmness

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:":{"name":"-initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:","abstract":"

    Constructs a newly allocated SDLSeatControlData object with cushion and firmness

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)id":{"name":"id","abstract":"

    @abstract id of seat that is a remote controllable seat.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingEnabled":{"name":"heatingEnabled","abstract":"

    @abstract Whether or not heating is enabled.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingEnabled":{"name":"coolingEnabled","abstract":"

    @abstract Whether or not cooling is enabled.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingLevel":{"name":"heatingLevel","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingLevel":{"name":"coolingLevel","abstract":"

    @abstract cooling level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)horizontalPosition":{"name":"horizontalPosition","abstract":"

    @abstract horizontal Position in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)verticalPosition":{"name":"verticalPosition","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)frontVerticalPosition":{"name":"frontVerticalPosition","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backVerticalPosition":{"name":"backVerticalPosition","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backTiltAngle":{"name":"backTiltAngle","abstract":"

    @abstract heating level in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportHorizontalPosition":{"name":"headSupportHorizontalPosition","abstract":"

    @abstract head Support Horizontal Position in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportVerticalPosition":{"name":"headSupportVerticalPosition","abstract":"

    @abstract head Support Vertical Position in integer

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageEnabled":{"name":"massageEnabled","abstract":"

    @abstract Whether or not massage is enabled.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageMode":{"name":"massageMode","abstract":"

    @abstract Array of massage mode data.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageCushionFirmness":{"name":"massageCushionFirmness","abstract":"

    @abstract Array of firmness of a cushion.

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)memory":{"name":"memory","abstract":"

    @abstract type of action to be performed

    ","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"

    Constructs a newly allocated SDLSeatControlCapabilities object with moduleName

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:moduleInfo:":{"name":"-initWithName:moduleInfo:","abstract":"

    Constructs a newly allocated SDLSeatControlCapabilities object with moduleName and moduleInfo

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:":{"name":"-initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:","abstract":"

    Constructs a newly allocated SDLSeatControlCapabilities object with given parameters

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:moduleInfo:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:":{"name":"-initWithName:moduleInfo:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:","abstract":"

    Constructs a newly allocated SDLSeatControlCapabilities object with all parameters

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    @abstract The short friendly name of the light control module.","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingEnabledAvailable":{"name":"heatingEnabledAvailable","abstract":"

    @abstract Whether or not heating is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingEnabledAvailable":{"name":"coolingEnabledAvailable","abstract":"

    @abstract Whether or not cooling is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingLevelAvailable":{"name":"heatingLevelAvailable","abstract":"

    @abstract Whether or not heating level is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingLevelAvailable":{"name":"coolingLevelAvailable","abstract":"

    @abstract Whether or not cooling level is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)horizontalPositionAvailable":{"name":"horizontalPositionAvailable","abstract":"

    @abstract Whether or not horizontal Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)verticalPositionAvailable":{"name":"verticalPositionAvailable","abstract":"

    @abstract Whether or not vertical Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)frontVerticalPositionAvailable":{"name":"frontVerticalPositionAvailable","abstract":"

    @abstract Whether or not front Vertical Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backVerticalPositionAvailable":{"name":"backVerticalPositionAvailable","abstract":"

    @abstract Whether or not back Vertical Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backTiltAngleAvailable":{"name":"backTiltAngleAvailable","abstract":"

    @abstract Whether or not backTilt Angle Available is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportHorizontalPositionAvailable":{"name":"headSupportHorizontalPositionAvailable","abstract":"

    @abstract Whether or not head Supports for Horizontal Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportVerticalPositionAvailable":{"name":"headSupportVerticalPositionAvailable","abstract":"

    @abstract Whether or not head Supports for Vertical Position is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageEnabledAvailable":{"name":"massageEnabledAvailable","abstract":"

    @abstract Whether or not massage Enabled is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageModeAvailable":{"name":"massageModeAvailable","abstract":"

    @abstract Whether or not massage Mode is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageCushionFirmnessAvailable":{"name":"massageCushionFirmnessAvailable","abstract":"

    @abstract Whether or not massage Cushion Firmness is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)memoryAvailable":{"name":"memoryAvailable","abstract":"

    @abstract Whether or not memory is Available.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    @abstract Information about a RC module, including its id.

    ","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:":{"name":"-initWithMessage:","abstract":"

    Convenience init for creating a scrolling message with text.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:cancelID:":{"name":"-initWithMessage:timeout:softButtons:cancelID:","abstract":"

    Convenience init for creating a scrolling message with text and buttons.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:":{"name":"-initWithMessage:timeout:softButtons:","abstract":"

    Convenience init for creating a scrolling message with text and buttons.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)scrollableMessageBody":{"name":"scrollableMessageBody","abstract":"

    Body of text that can include newlines and tabs.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)timeout":{"name":"timeout","abstract":"

    App defined timeout. Indicates how long of a timeout from the last action (i.e. scrolling message resets timeout). If not set, a default value of 30 seconds is used by Core.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)softButtons":{"name":"softButtons","abstract":"

    Buttons for the displayed scrollable message. If omitted on supported displays, only the system defined “Close” SoftButton will be displayed.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)cancelID":{"name":"cancelID","abstract":"

    An ID for this specific scrollable message to allow cancellation through the CancelInteraction RPC.

    ","parent_name":"SDLScrollableMessage"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)resolution":{"name":"resolution","abstract":"

    The resolution of the prescribed screen area

    ","parent_name":"SDLScreenParams"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)touchEventAvailable":{"name":"touchEventAvailable","abstract":"

    Types of screen touch events available in screen area

    ","parent_name":"SDLScreenParams"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1":{"name":"textField1","abstract":"

    The top text field within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2":{"name":"textField2","abstract":"

    The second text field within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3":{"name":"textField3","abstract":"

    The third text field within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4":{"name":"textField4","abstract":"

    The fourth text field within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)mediaTrackTextField":{"name":"mediaTrackTextField","abstract":"

    The media text field available within the media layout. Often less emphasized than textField(1-4)

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)primaryGraphic":{"name":"primaryGraphic","abstract":"

    The primary graphic within a template layout

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"

    A secondary graphic used in some template layouts

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textAlignment":{"name":"textAlignment","abstract":"

    What alignment textField(1-4) should use

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1Type":{"name":"textField1Type","abstract":"

    The type of data textField1 describes

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2Type":{"name":"textField2Type","abstract":"

    The type of data textField2 describes

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3Type":{"name":"textField3Type","abstract":"

    The type of data textField3 describes

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4Type":{"name":"textField4Type","abstract":"

    The type of data textField4 describes

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)title":{"name":"title","abstract":"

    The title of the current template layout.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)softButtonObjects":{"name":"softButtonObjects","abstract":"

    The current list of soft buttons within a template layout. Set this array to change the displayed soft buttons.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menuConfiguration":{"name":"menuConfiguration","abstract":"

    Configures the layout of the menu and sub-menus. If set after a menu already exists, the existing main menu layout will be updated.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menu":{"name":"menu","abstract":"

    The current list of menu cells displayed in the app’s menu.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)dynamicMenuUpdatesMode":{"name":"dynamicMenuUpdatesMode","abstract":"

    Change the mode of the dynamic menu updater to be enabled, disabled, or enabled on known compatible head units.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)voiceCommands":{"name":"voiceCommands","abstract":"

    The current list of voice commands available for the user to speak and be recognized by the IVI’s voice recognition engine.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)keyboardConfiguration":{"name":"keyboardConfiguration","abstract":"

    The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)preloadedChoices":{"name":"preloadedChoices","abstract":"

    Cells will be hashed by their text, image names, and VR command text. When assembling an SDLChoiceSet, you can pull objects from here, or recreate them. The preloaded versions will be used so long as their text, image names, and VR commands are the same.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)initWithConnectionManager:fileManager:systemCapabilityManager:":{"name":"-initWithConnectionManager:fileManager:systemCapabilityManager:","abstract":"

    Initialize a screen manager

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"

    Starts the manager and all sub-managers

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)stop":{"name":"-stop","abstract":"

    Stops the manager.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)beginUpdates":{"name":"-beginUpdates","abstract":"

    Delays all screen updates until endUpdatesWithCompletionHandler: is called.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdates":{"name":"-endUpdates","abstract":"

    Update text fields with new text set into the text field properties. Pass an empty string \\@"" to clear the text field.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdatesWithCompletionHandler:":{"name":"-endUpdatesWithCompletionHandler:","abstract":"

    Update text fields with new text set into the text field properties. Pass an empty string \\@"" to clear the text field.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)softButtonObjectNamed:":{"name":"-softButtonObjectNamed:","abstract":"

    Retrieve a SoftButtonObject based on its name.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)preloadChoices:withCompletionHandler:":{"name":"-preloadChoices:withCompletionHandler:","abstract":"

    Preload cells to the head unit. This will greatly reduce the time taken to present a choice set. Any already matching a choice already on the head unit will be ignored. You do not need to wait until the completion handler is called to present a choice set containing choices being loaded. The choice set will wait until the preload completes and then immediately present.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)deleteChoices:":{"name":"-deleteChoices:","abstract":"

    Delete loaded cells from the head unit. If the cells don’t exist on the head unit they will be ignored.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentChoiceSet:mode:":{"name":"-presentChoiceSet:mode:","abstract":"

    Present a choice set on the head unit with a certain interaction mode. You should present in VR only if the user reached this choice set by using their voice, in Manual only if the user used touch to reach this choice set. Use Both if you’re lazy…for real though, it’s kind of confusing to the user and isn’t recommended.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentSearchableChoiceSet:mode:withKeyboardDelegate:":{"name":"-presentSearchableChoiceSet:mode:withKeyboardDelegate:","abstract":"

    Present a choice set on the head unit with a certain interaction mode. You should present in VR only if the user reached this choice set by using their voice, in Manual only if the user used touch to reach this choice set. Use Both if you’re lazy…for real though, it’s kind of confusing to the user and isn’t recommended.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentKeyboardWithInitialText:delegate:":{"name":"-presentKeyboardWithInitialText:delegate:","abstract":"

    Present a keyboard-only interface to the user and receive input. The user will be able to input text in the keyboard when in a non-driver distraction situation.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)dismissKeyboardWithCancelID:":{"name":"-dismissKeyboardWithCancelID:","abstract":"

    Cancels the keyboard-only interface if it is currently showing. If the keyboard has not yet been sent to Core, it will not be sent.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)openMenu":{"name":"-openMenu","abstract":"

    Present the top-level of your application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden.

    ","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)openSubmenu:":{"name":"-openSubmenu:","abstract":"

    Present the application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden. You must update the menu with the proper cells before calling this method. This RPC will fail if the cell does not contain a sub menu, or is not in the menu array.

    ","parent_name":"SDLScreenManager"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(im)initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:":{"name":"-initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:","abstract":"

    Convenience init to SISData

    ","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationShortName":{"name":"stationShortName","abstract":"

    @abstract Identifies the 4-alpha-character station call sign","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationIDNumber":{"name":"stationIDNumber","abstract":"

    @abstract Used for network Application.","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLongName":{"name":"stationLongName","abstract":"

    @abstract Identifies the station call sign or other identifying","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLocation":{"name":"stationLocation","abstract":"

    @abstract Provides the 3-dimensional geographic station location

    ","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationMessage":{"name":"stationMessage","abstract":"

    @abstract May be used to convey textual information of general interest","parent_name":"SDLSISData"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"

    Convenience init to reset global properties.

    ","parent_name":"SDLResetGlobalProperties"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(py)properties":{"name":"properties","abstract":"

    An array of one or more GlobalProperty enumeration elements","parent_name":"SDLResetGlobalProperties"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(im)initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:":{"name":"-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:","abstract":"

    Constructs a newly allocated SDLRemoteControlCapabilities object

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(im)initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:":{"name":"-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:","abstract":"

    Constructs a newly allocated SDLRemoteControlCapabilities object with given parameters

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)climateControlCapabilities":{"name":"climateControlCapabilities","abstract":"

    If included, the platform supports RC climate controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)radioControlCapabilities":{"name":"radioControlCapabilities","abstract":"

    If included, the platform supports RC radio controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"

    If included, the platform supports RC button controls with the included button names.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)seatControlCapabilities":{"name":"seatControlCapabilities","abstract":"

    If included, the platform supports seat controls.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)audioControlCapabilities":{"name":"audioControlCapabilities","abstract":"

    If included, the platform supports audio controls.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)hmiSettingsControlCapabilities":{"name":"hmiSettingsControlCapabilities","abstract":"

    If included, the platform supports hmi setting controls.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)lightControlCapabilities":{"name":"lightControlCapabilities","abstract":"

    If included, the platform supports light controls.

    ","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(im)initWithModuleType:moduleId:":{"name":"-initWithModuleType:moduleId:","abstract":"

    Convenience init to release a controlled module

    ","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(py)moduleType":{"name":"moduleType","abstract":"

    The module type that the app requests to control.

    ","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(py)moduleId":{"name":"moduleId","abstract":"

    Id of a module, published by System Capability.

    ","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"

    Specifies the negotiated version number of the SmartDeviceLink protocol that is to be supported by the mobile application.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlMsgVersion":{"name":"sdlMsgVersion","abstract":"

    Specifies the negotiated version number of the SmartDeviceLink protocol that is to be supported by the mobile application.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)language":{"name":"language","abstract":"

    The currently active VR+TTS language on the module. See “Language” for options.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"

    The currently active display language on the module. See “Language” for options.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"

    Contains information about the display’s capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"

    Contains information about the head unit button capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"

    Contains information about the head unit soft button capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"

    If returned, the platform supports custom on-screen Presets

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"

    Contains information about the HMI zone capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)speechCapabilities":{"name":"speechCapabilities","abstract":"

    Contains information about the text-to-speech capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)prerecordedSpeech":{"name":"prerecordedSpeech","abstract":"

    Contains a list of prerecorded speech items present on the platform.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vrCapabilities":{"name":"vrCapabilities","abstract":"

    Contains information about the VR capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"

    Describes different audio type configurations for PerformAudioPassThru, e.g. {8kHz,8-bit,PCM}. The audio is recorded in monaural.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)pcmStreamCapabilities":{"name":"pcmStreamCapabilities","abstract":"

    Describes different audio type configurations for the audio PCM stream service, e.g. {8kHz,8-bit,PCM}

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vehicleType":{"name":"vehicleType","abstract":"

    Specifies the connected vehicle’s type.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)supportedDiagModes":{"name":"supportedDiagModes","abstract":"

    Specifies the white-list of supported diagnostic modes (0x00-0xFF) capable for DiagnosticMessage requests. If a mode outside this list is requested, it will be rejected.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"

    Specifies the HMI capabilities.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlVersion":{"name":"sdlVersion","abstract":"

    The version of SDL Core running on the connected head unit

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)systemSoftwareVersion":{"name":"systemSoftwareVersion","abstract":"

    The software version of the system that implements the SmartDeviceLink core.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)iconResumed":{"name":"iconResumed","abstract":"

    Existence of apps icon at system. If true, apps icon was resumed at system. If false, apps icon is not resumed at system.

    ","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithLifecycleConfiguration:":{"name":"-initWithLifecycleConfiguration:","abstract":"

    Convenience init for registering the application with a lifecycle configuration.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:":{"name":"-initWithAppName:appId:languageDesired:","abstract":"

    Convenience init for registering the application with an app name, app id, and desired language.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:":{"name":"-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:","abstract":"

    Convenience init for registering the application with an app name, app id, desired language, whether or not the app is a media app, app types, and the short app name.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:":{"name":"-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:","abstract":"

    Convenience init for registering the application with an app name, app id, desired language, whether or not the app is a media app, app types, the short app name, tts name, voice recognition synonyms, the hmi display language desired, and the resume hash.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:":{"name":"-initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:","abstract":"

    Convenience init for registering the application with all possible options.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"

    Specifies the version number of the SmartDeviceLink protocol that is supported by the mobile application.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)sdlMsgVersion":{"name":"sdlMsgVersion","abstract":"

    Specifies the version number of the SmartDeviceLink protocol that is supported by the mobile application.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appName":{"name":"appName","abstract":"

    The mobile application’s name. This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SmartDeviceLink. Applications with the same name will be rejected.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ttsName":{"name":"ttsName","abstract":"

    Text-to-speech string for voice recognition of the mobile application name. Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"

    Provides an abbreviated version of the app name (if needed), that will be displayed on head units that support very few characters. If not provided, the appName is used instead (and will be truncated if too long). It’s recommended that this string be no longer than 5 characters.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)vrSynonyms":{"name":"vrSynonyms","abstract":"

    Defines additional voice recognition commands

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)isMediaApplication":{"name":"isMediaApplication","abstract":"

    Indicates if the application is a media or a non-media application. Media applications will appear in the head unit’s media source list and can use the MEDIA template.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)languageDesired":{"name":"languageDesired","abstract":"

    App’s starting VR+TTS language. If there is a mismatch with the head unit, the app will be able to change its language with ChangeRegistration prior to app being brought into focus.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hmiDisplayLanguageDesired":{"name":"hmiDisplayLanguageDesired","abstract":"

    Current app’s expected display language. If there is a mismatch with the head unit, the app will be able to change its language with ChangeRegistration prior to app being brought into focus.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appHMIType":{"name":"appHMIType","abstract":"

    List of all applicable app HMI types stating which HMI classifications to be given to the app.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hashID":{"name":"hashID","abstract":"

    ID used to uniquely identify a previous state of all app data that can persist through connection cycles (e.g. ignition cycles). This registered data (commands, submenus, choice sets, etc.) can be reestablished without needing to explicitly re-send each piece. If omitted, then the previous state of an app’s commands, etc. will not be restored.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)deviceInfo":{"name":"deviceInfo","abstract":"

    Information about the connecting device.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appID":{"name":"appID","abstract":"

    ID used to validate app with policy table entries.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)fullAppID":{"name":"fullAppID","abstract":"

    A full UUID appID used to validate app with policy table entries.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appInfo":{"name":"appInfo","abstract":"

    Contains detailed information about the registered application.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)dayColorScheme":{"name":"dayColorScheme","abstract":"

    The color scheme to be used on a head unit using a “light” or “day” color scheme. The OEM may only support this theme if their head unit only has a light color scheme.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)nightColorScheme":{"name":"nightColorScheme","abstract":"

    The color scheme to be used on a head unit using a “dark” or “night” color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.

    ","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithX:y:width:height:":{"name":"-initWithX:y:width:height:","abstract":"

    Create a Rectangle

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithCGRect:":{"name":"-initWithCGRect:","abstract":"

    Create a Rectangle from a CGRect

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)x":{"name":"x","abstract":"

    The X-coordinate of the user control

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)y":{"name":"y","abstract":"

    The Y-coordinate of the user control

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)width":{"name":"width","abstract":"

    The width of the user control’s bounding rectangle

    ","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)height":{"name":"height","abstract":"

    The height of the user control’s bounding rectangle

    ","parent_name":"SDLRectangle"},"Classes/SDLReadDIDResponse.html#/c:objc(cs)SDLReadDIDResponse(py)didResult":{"name":"didResult","abstract":"

    Array of requested DID results (with data if available).

    ","parent_name":"SDLReadDIDResponse"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(im)initWithECUName:didLocation:":{"name":"-initWithECUName:didLocation:","abstract":"

    Convenience init

    ","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)ecuName":{"name":"ecuName","abstract":"

    An ID of the vehicle module","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)didLocation":{"name":"didLocation","abstract":"

    Raw data from vehicle data DID location(s)","parent_name":"SDLReadDID"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:":{"name":"-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:":{"name":"-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initFMWithFrequencyInteger:frequencyFraction:hdChannel:":{"name":"-initFMWithFrequencyInteger:frequencyFraction:hdChannel:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initAMWithFrequencyInteger:hdChannel:":{"name":"-initAMWithFrequencyInteger:hdChannel:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initXMWithFrequencyInteger:":{"name":"-initXMWithFrequencyInteger:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyInteger":{"name":"frequencyInteger","abstract":"

    The integer part of the frequency ie for 101.7 this value should be 101

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyFraction":{"name":"frequencyFraction","abstract":"

    The fractional part of the frequency for 101.7 is 7

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)band":{"name":"band","abstract":"

    Radio band value

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)rdsData":{"name":"rdsData","abstract":"

    Read only parameter. See RDSData data type for details.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDs":{"name":"availableHDs","abstract":"

    number of HD sub-channels if available

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDChannels":{"name":"availableHDChannels","abstract":"

    the list of available hd sub-channel indexes, empty list means no Hd channel is available, read-only

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdChannel":{"name":"hdChannel","abstract":"

    Current HD sub-channel if available

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalStrength":{"name":"signalStrength","abstract":"

    Signal Strength Value

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalChangeThreshold":{"name":"signalChangeThreshold","abstract":"

    If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)radioEnable":{"name":"radioEnable","abstract":"

    True if the radio is on, false is the radio is off. When the radio is disabled, no data other than radioEnable is included in a GetInteriorVehicleData response

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)state":{"name":"state","abstract":"

    Read only parameter. See RadioState data type for details.

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdRadioEnable":{"name":"hdRadioEnable","abstract":"

    True if the hd radio is on, false is the radio is off

    ","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)sisData":{"name":"sisData","abstract":"

    Read Read-only Station Information Service (SIS) data provides basic information","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:moduleInfo:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:moduleInfo:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"

    Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    The short friendly name of the radio control module.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioEnableAvailable":{"name":"radioEnableAvailable","abstract":"

    Availability of the control of enable/disable radio.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioBandAvailable":{"name":"radioBandAvailable","abstract":"

    Availability of the control of radio band.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioFrequencyAvailable":{"name":"radioFrequencyAvailable","abstract":"

    Availability of the control of radio frequency.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdChannelAvailable":{"name":"hdChannelAvailable","abstract":"

    Availability of the control of HD radio channel.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)rdsDataAvailable":{"name":"rdsDataAvailable","abstract":"

    Availability of the getting Radio Data System (RDS) data.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDsAvailable":{"name":"availableHDsAvailable","abstract":"

    Availability of the getting the number of available HD channels.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDChannelsAvailable":{"name":"availableHDChannelsAvailable","abstract":"

    Availability of the list of available HD sub-channel indexes.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)stateAvailable":{"name":"stateAvailable","abstract":"

    Availability of the getting the Radio state.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalStrengthAvailable":{"name":"signalStrengthAvailable","abstract":"

    Availability of the getting the signal strength.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalChangeThresholdAvailable":{"name":"signalChangeThresholdAvailable","abstract":"

    Availability of the getting the signal Change Threshold

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdRadioEnableAvailable":{"name":"hdRadioEnableAvailable","abstract":"

    Availability of the control of enable/disable HD radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)siriusXMRadioAvailable":{"name":"siriusXMRadioAvailable","abstract":"

    Availability of sirius XM radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)sisDataAvailable":{"name":"sisDataAvailable","abstract":"

    Availability of the getting HD radio Station Information Service (SIS) data.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(py)store":{"name":"store","abstract":"

    The store that contains RPC data

    ","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(py)payloadProtected":{"name":"payloadProtected","abstract":"

    Declares if the RPC payload ought to be protected

    ","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)initWithDictionary:":{"name":"-initWithDictionary:","abstract":"

    Convenience init

    ","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)serializeAsDictionary:":{"name":"-serializeAsDictionary:","abstract":"

    Converts struct to JSON formatted data

    ","parent_name":"SDLRPCStruct"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(py)response":{"name":"response","abstract":"

    The response to be included within the userinfo dictionary

    ","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)initWithName:object:rpcResponse:":{"name":"-initWithName:object:rpcResponse:","abstract":"

    Create an NSNotification object containing an SDLRPCResponse

    ","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseMemberOfClass:":{"name":"-isResponseMemberOfClass:","abstract":"

    Returns whether or not the containing response is equal to a class, not including subclasses.

    ","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseKindOfClass:":{"name":"-isResponseKindOfClass:","abstract":"

    Returns whether or not the containing response is a kind of class, including subclasses.

    ","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)correlationID":{"name":"correlationID","abstract":"

    The correlation id of the corresponding SDLRPCRequest.

    ","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)success":{"name":"success","abstract":"

    Whether or not the SDLRPCRequest was successful.

    ","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)resultCode":{"name":"resultCode","abstract":"

    The result of the SDLRPCRequest. If the request failed, the result code contains the failure reason.

    ","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)info":{"name":"info","abstract":"

    More detailed success or error message.

    ","parent_name":"SDLRPCResponse"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(py)request":{"name":"request","abstract":"

    The request to be included in the userinfo dictionary

    ","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)initWithName:object:rpcRequest:":{"name":"-initWithName:object:rpcRequest:","abstract":"

    Create an NSNotification object containing an SDLRPCRequest

    ","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)isRequestMemberOfClass:":{"name":"-isRequestMemberOfClass:","abstract":"

    Returns whether or not the containing request is equal to a class, not including subclasses.

    ","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)isRequestKindOfClass:":{"name":"-isRequestKindOfClass:","abstract":"

    Returns whether or not the containing request is a kind of class, including subclasses.

    ","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequest.html#/c:objc(cs)SDLRPCRequest(py)correlationID":{"name":"correlationID","abstract":"

    A unique id assigned to message sent to Core. The Correlation ID is used to map a request to its response.

    ","parent_name":"SDLRPCRequest"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(py)notification":{"name":"notification","abstract":"

    The notification within the userinfo dictionary

    ","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)initWithName:object:rpcNotification:":{"name":"-initWithName:object:rpcNotification:","abstract":"

    Create an NSNotification object caontaining an SDLRPCNotification

    ","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationMemberOfClass:":{"name":"-isNotificationMemberOfClass:","abstract":"

    Returns whether or not the containing notification is equal to a class, not including subclasses.

    ","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationKindOfClass:":{"name":"-isNotificationKindOfClass:","abstract":"

    Returns whether or not the containing notification is a kind of class, including subclasses.

    ","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)initWithName:":{"name":"-initWithName:","abstract":"

    Convenience init

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getFunctionName":{"name":"-getFunctionName","abstract":"

    Returns the function name.

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setFunctionName:":{"name":"-setFunctionName:","abstract":"

    Sets the function name.

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getParameters:":{"name":"-getParameters:","abstract":"

    Returns the value associated with the provided key. If the key does not exist, null is returned.

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setParameters:value:":{"name":"-setParameters:value:","abstract":"

    Sets a key-value pair using the function name as the key.

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)bulkData":{"name":"bulkData","abstract":"

    The data in the message

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)name":{"name":"name","abstract":"

    The name of the message

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)parameters":{"name":"parameters","abstract":"

    The JSON-RPC parameters

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)messageType":{"name":"messageType","abstract":"

    The type of data in the message

    ","parent_name":"SDLRPCMessage"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithRed:green:blue:":{"name":"-initWithRed:green:blue:","abstract":"

    Create an SDL color object with red / green / blue values between 0-255

    ","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithColor:":{"name":"-initWithColor:","abstract":"

    Create an SDL color object with a UIColor object.

    ","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)red":{"name":"red","abstract":"

    The red value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)green":{"name":"green","abstract":"

    The green value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)blue":{"name":"blue","abstract":"

    The blue value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(im)initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:":{"name":"-initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:","abstract":"

    Convenience init

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programService":{"name":"programService","abstract":"

    Program Service Name

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)radioText":{"name":"radioText","abstract":"

    Radio Text

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)clockText":{"name":"clockText","abstract":"

    The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programIdentification":{"name":"programIdentification","abstract":"

    Program Identification - the call sign for the radio station

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programType":{"name":"programType","abstract":"

    The program type - The region should be used to differentiate between EU","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficProgramIdentification":{"name":"trafficProgramIdentification","abstract":"

    Traffic Program Identification - Identifies a station that offers traffic

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficAnnouncementIdentification":{"name":"trafficAnnouncementIdentification","abstract":"

    Traffic Announcement Identification - Indicates an ongoing traffic announcement

    ","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)region":{"name":"region","abstract":"

    Region

    ","parent_name":"SDLRDSData"},"Classes/SDLPutFileResponse.html#/c:objc(cs)SDLPutFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"

    Provides the total local space available in SDL Core for the registered app. If the transfer has systemFile enabled, then the value will be set to 0 automatically.

    ","parent_name":"SDLPutFileResponse"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)init":{"name":"-init","abstract":"

    Init

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:":{"name":"-initWithFileName:fileType:","abstract":"

    Convenience init for creating a putfile with a name and file format.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:":{"name":"-initWithFileName:fileType:persistentFile:","abstract":"

    Convenience init for creating a putfile with a name, file format, and persistance.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:","abstract":"

    Convenience init for creating a putfile that is part of a multiple frame payload.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:","abstract":"

    Convenience init for creating a putfile that is part of a multiple frame payload.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:","abstract":"

    Convenience init for creating a putfile that is part of a multiple frame payload. A CRC checksum is calculated for the bulk data.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)syncFileName":{"name":"syncFileName","abstract":"

    File reference name

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)fileType":{"name":"fileType","abstract":"

    A FileType value representing a selected file type

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)persistentFile":{"name":"persistentFile","abstract":"

    A value to 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.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)systemFile":{"name":"systemFile","abstract":"

    Indicates if the file is meant to be passed through core to elsewhere on the system. If set to TRUE, then the system will instead pass the data thru as it arrives to a predetermined area outside of core.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)offset":{"name":"offset","abstract":"

    Offset in bytes for resuming partial data chunks.

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)length":{"name":"length","abstract":"

    Length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded

    ","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)crc":{"name":"crc","abstract":"

    Additional CRC32 checksum to protect data integrity up to 512 Mbits.

    ","parent_name":"SDLPutFile"},"Classes/SDLPublishAppServiceResponse.html#/c:objc(cs)SDLPublishAppServiceResponse(im)initWithAppServiceRecord:":{"name":"-initWithAppServiceRecord:","abstract":"

    Convenience init.

    ","parent_name":"SDLPublishAppServiceResponse"},"Classes/SDLPublishAppServiceResponse.html#/c:objc(cs)SDLPublishAppServiceResponse(py)appServiceRecord":{"name":"appServiceRecord","abstract":"

    If the request was successful, this object will be the current status of the service record for the published service. This will include the Core supplied service ID.

    ","parent_name":"SDLPublishAppServiceResponse"},"Classes/SDLPublishAppService.html#/c:objc(cs)SDLPublishAppService(im)initWithAppServiceManifest:":{"name":"-initWithAppServiceManifest:","abstract":"

    Convenience init.

    ","parent_name":"SDLPublishAppService"},"Classes/SDLPublishAppService.html#/c:objc(cs)SDLPublishAppService(py)appServiceManifest":{"name":"appServiceManifest","abstract":"

    The manifest of the service that wishes to be published.","parent_name":"SDLPublishAppService"},"Classes/SDLPresetBankCapabilities.html#/c:objc(cs)SDLPresetBankCapabilities(py)onScreenPresetsAvailable":{"name":"onScreenPresetsAvailable","abstract":"

    If Onscreen custom presets are available.

    ","parent_name":"SDLPresetBankCapabilities"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(im)initWithFirstTouch:secondTouch:":{"name":"-initWithFirstTouch:secondTouch:","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)firstTouch":{"name":"firstTouch","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)secondTouch":{"name":"secondTouch","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)distance":{"name":"distance","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)center":{"name":"center","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)isValid":{"name":"isValid","abstract":"

    @abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(im)initWithDialNumber:":{"name":"-initWithDialNumber:","abstract":"

    Convenience init for defining the phone capability

    ","parent_name":"SDLPhoneCapability"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(py)dialNumberEnabled":{"name":"dialNumberEnabled","abstract":"

    Whether or not the DialNumber RPC is enabled.

    ","parent_name":"SDLPhoneCapability"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(py)requiresEncryption":{"name":"requiresEncryption","abstract":"

    Flag indicating if the app requires an encryption service to be active.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"

    Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLPermissionManager, you should use the manager found on SDLManager.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)stop":{"name":"-stop","abstract":"

    Stop the manager. This method is used internally.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)isRPCAllowed:":{"name":"-isRPCAllowed:","abstract":"

    Determine if an individual RPC is allowed for the current HMI level

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)groupStatusOfRPCs:":{"name":"-groupStatusOfRPCs:","abstract":"

    Determine if all RPCs are allowed for the current HMI level

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)statusOfRPCs:":{"name":"-statusOfRPCs:","abstract":"

    Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber specifying if that RPC is currently allowed

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)addObserverForRPCs:groupType:withHandler:":{"name":"-addObserverForRPCs:groupType:withHandler:","abstract":"

    Add an observer for specified RPC names, with a callback that will be called whenever the value changes, as well as immediately with the current status.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeAllObservers":{"name":"-removeAllObservers","abstract":"

    Remove every current observer

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeObserverForIdentifier:":{"name":"-removeObserverForIdentifier:","abstract":"

    Remove block observers for the specified RPC

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)rpcRequiresEncryption:":{"name":"-rpcRequiresEncryption:","abstract":"

    Check whether or not an RPC needs encryption.

    ","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)rpcName":{"name":"rpcName","abstract":"

    Name of the individual RPC in the policy table.

    ","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)hmiPermissions":{"name":"hmiPermissions","abstract":"

    HMI Permissions for the individual RPC; i.e. which HMI levels may it be used in

    ","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)parameterPermissions":{"name":"parameterPermissions","abstract":"

    RPC parameters for the individual RPC

    ","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)requireEncryption":{"name":"requireEncryption","abstract":"

    Describes whether or not the RPC needs encryption

    ","parent_name":"SDLPermissionItem"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)choiceID":{"name":"choiceID","abstract":"

    ID of the choice that was selected in response to PerformInteraction. Only is valid if general result is “success:true”.

    ","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)manualTextEntry":{"name":"manualTextEntry","abstract":"

    Manually entered text selection, e.g. through keyboard. Can be returned in lieu of choiceID, depending on the trigger source.

    ","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)triggerSource":{"name":"triggerSource","abstract":"

    A SDLTriggerSource object which will be shown in the HMI. Only is valid if resultCode is SUCCESS.

    ","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialText:interactionMode:interactionChoiceSetIDList:cancelID:":{"name":"-initWithInitialText:interactionMode:interactionChoiceSetIDList:cancelID:","abstract":"

    Convenience init for creating a basic display or voice-recognition menu.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialText:initialPrompt:interactionMode:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:timeout:vrHelp:interactionLayout:cancelID:":{"name":"-initWithInitialText:initialPrompt:interactionMode:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:timeout:vrHelp:interactionLayout:cancelID:","abstract":"

    Convenience init for setting all parameters of a display or voice-recognition menu.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetId:":{"name":"-initWithInteractionChoiceSetId:","abstract":"

    Convenience init for setting the a single visual or voice-recognition menu choice.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetIdList:":{"name":"-initWithInteractionChoiceSetIdList:","abstract":"

    Convenience init for setting the a visual or voice-recognition menu choices.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:","abstract":"

    Convenience init for creating a visual or voice-recognition menu with one choice.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:","abstract":"

    Convenience init for creating a visual or voice-recognition menu with one choice and VR help items.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:","abstract":"

    Convenience init for creating a visual or voice-recognition menu using the default display layout and VR help items. Prompts are created from the passed strings.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:vrHelp:","abstract":"

    Convenience init for creating a visual or voice-recognition menu using the default display layout. Prompts are created from the passed strings.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:":{"name":"-initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:","abstract":"

    Convenience init for creating a visual or voice-recognition menu using the default display layout.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:interactionLayout:":{"name":"-initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:interactionLayout:","abstract":"

    Convenience init for setting all parameters of a visual or voice-recognition menu.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialText":{"name":"initialText","abstract":"

    Text to be displayed first.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialPrompt":{"name":"initialPrompt","abstract":"

    This is the TTS prompt spoken to the user at the start of an interaction.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionMode":{"name":"interactionMode","abstract":"

    For application-requested interactions, this mode indicates the method in which the user is notified and uses the interaction. Users can choose either only by voice (VR_ONLY), by tactile selection from the menu (MANUAL_ONLY), or by either mode (BOTH).

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionChoiceSetIDList":{"name":"interactionChoiceSetIDList","abstract":"

    List of interaction choice set IDs to use with an interaction.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)helpPrompt":{"name":"helpPrompt","abstract":"

    Help text. This is the spoken text when a user speaks “help” while the interaction is occurring.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"

    Timeout text. This text is spoken when a VR interaction times out.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeout":{"name":"timeout","abstract":"

    Timeout in milliseconds. Applies only to the menu portion of the interaction. The VR timeout will be handled by the platform. If omitted a standard value of 10 seconds is used.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)vrHelp":{"name":"vrHelp","abstract":"

    Suggested voice recognition help items to display on-screen during a perform interaction. If omitted on supported displays, the default generated list of suggested choices shall be displayed.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionLayout":{"name":"interactionLayout","abstract":"

    For tactile interaction modes (MANUAL_ONLY, or BOTH), the layout mode of how the choices are presented.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)cancelID":{"name":"cancelID","abstract":"

    An ID for this specific perform interaction to allow cancellation through the CancelInteraction RPC.

    ","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:","abstract":"

    Convenience init to perform an audio pass thru

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:":{"name":"-initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:","abstract":"

    Convenience init to perform an audio pass thru

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:","abstract":"

    Convenience init to perform an audio pass thru

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:audioDataHandler:":{"name":"-initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:audioDataHandler:","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)initialPrompt":{"name":"initialPrompt","abstract":"

    initial prompt which will be spoken before opening the audio pass","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText1":{"name":"audioPassThruDisplayText1","abstract":"

    a line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText2":{"name":"audioPassThruDisplayText2","abstract":"

    A line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)samplingRate":{"name":"samplingRate","abstract":"

    A samplingRate

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)maxDuration":{"name":"maxDuration","abstract":"

    the maximum duration of audio recording in milliseconds

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)bitsPerSample":{"name":"bitsPerSample","abstract":"

    the quality the audio is recorded - 8 bit or 16 bit

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioType":{"name":"audioType","abstract":"

    an audioType

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)muteAudio":{"name":"muteAudio","abstract":"

    a Boolean value representing if the current audio source should be","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioDataHandler":{"name":"audioDataHandler","abstract":"

    A handler that will be called whenever an onAudioPassThru notification is received.

    ","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAppServiceInteractionResponse.html#/c:objc(cs)SDLPerformAppServiceInteractionResponse(im)initWithServiceSpecificResult:":{"name":"-initWithServiceSpecificResult:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLPerformAppServiceInteractionResponse"},"Classes/SDLPerformAppServiceInteractionResponse.html#/c:objc(cs)SDLPerformAppServiceInteractionResponse(py)serviceSpecificResult":{"name":"serviceSpecificResult","abstract":"

    The service can provide specific result strings to the consumer through this param.

    ","parent_name":"SDLPerformAppServiceInteractionResponse"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(im)initWithServiceUri:serviceID:originApp:":{"name":"-initWithServiceUri:serviceID:originApp:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(im)initWithServiceUri:serviceID:originApp:requestServiceActive:":{"name":"-initWithServiceUri:serviceID:originApp:requestServiceActive:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)serviceUri":{"name":"serviceUri","abstract":"

    Fully qualified URI based on a predetermined scheme provided by the app service. SDL makes no guarantee that this URI is correct.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)serviceID":{"name":"serviceID","abstract":"

    The service ID that the app consumer wishes to send this URI.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)originApp":{"name":"originApp","abstract":"

    This string is the appID of the app requesting the app service provider take the specific action.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)requestServiceActive":{"name":"requestServiceActive","abstract":"

    This flag signals the requesting consumer would like this service to become the active primary service of the destination’s type.

    ","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)allowed":{"name":"allowed","abstract":"

    A set of all parameters that are permitted for this given RPC.

    ","parent_name":"SDLParameterPermissions"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"

    A set of all parameters that are prohibited for this given RPC.

    ","parent_name":"SDLParameterPermissions"},"Classes/SDLOnWayPointChange.html#/c:objc(cs)SDLOnWayPointChange(py)waypoints":{"name":"waypoints","abstract":"

    Location address for display purposes only

    ","parent_name":"SDLOnWayPointChange"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)gps":{"name":"gps","abstract":"

    The car current GPS coordinates

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)speed":{"name":"speed","abstract":"

    The vehicle speed in kilometers per hour

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)rpm":{"name":"rpm","abstract":"

    The number of revolutions per minute of the engine.

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"

    The fuel level in the tank (percentage)

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    The fuel level state

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"

    The estimate range in KM the vehicle can travel based on fuel level and consumption

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    The instantaneous fuel consumption in microlitres

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"

    The external temperature in degrees celsius.

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)vin":{"name":"vin","abstract":"

    The Vehicle Identification Number

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)prndl":{"name":"prndl","abstract":"

    The current gear shift state of the user’s vehicle

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"

    The current pressure warnings for the user’s vehicle

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)odometer":{"name":"odometer","abstract":"

    Odometer reading in km

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"

    The status of the seat belts

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"

    The body information including power modes

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"

    The IVI system status including signal and battery strength

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"

    The status of the brake pedal

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"

    The status of the wipers

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"

    Status of the head lamps

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"

    The estimated percentage (0% - 100%) of remaining oil life of the engine

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"

    Torque value for engine (in Nm) on non-diesel variants

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    Accelerator pedal position (percentage depressed)

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    Current angle of the steering wheel (in deg)

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"

    Emergency Call notification and confirmation data

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"

    The status of the air bags

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    Information related to an emergency event (and if it occurred)

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    The status modes of the cluster

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)myKey":{"name":"myKey","abstract":"

    Information related to the MyKey feature

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    The status of the electronic parking brake

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"

    The status of the turn signal

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    The cloud app vehicle ID

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.

    ","parent_name":"SDLOnVehicleData"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)type":{"name":"type","abstract":"

    The type of touch event.

    ","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)event":{"name":"event","abstract":"

    List of all individual touches involved in this event.

    ","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTBTClientState.html#/c:objc(cs)SDLOnTBTClientState(py)state":{"name":"state","abstract":"

    Current State of TBT client

    ","parent_name":"SDLOnTBTClientState"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType":{"name":"requestType","abstract":"

    The type of system request.

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"

    A request subType used when the requestType is OEM_SPECIFIC.

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)url":{"name":"url","abstract":"

    Optional URL for HTTP requests. If blank, the binary data shall be forwarded to the app. If not blank, the binary data shall be forwarded to the url with a provided timeout in seconds.

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)timeout":{"name":"timeout","abstract":"

    Optional timeout for HTTP requests Required if a URL is provided

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)fileType":{"name":"fileType","abstract":"

    Optional file type (meant for HTTP file requests).

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)offset":{"name":"offset","abstract":"

    Optional offset in bytes for resuming partial data chunks

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)length":{"name":"length","abstract":"

    Optional length in bytes for resuming partial data chunks

    ","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemCapabilityUpdated.html#/c:objc(cs)SDLOnSystemCapabilityUpdated(im)initWithSystemCapability:":{"name":"-initWithSystemCapability:","abstract":"

    Convenience init for required parameters

    ","parent_name":"SDLOnSystemCapabilityUpdated"},"Classes/SDLOnSystemCapabilityUpdated.html#/c:objc(cs)SDLOnSystemCapabilityUpdated(py)systemCapability":{"name":"systemCapability","abstract":"

    The system capability that has been updated.

    ","parent_name":"SDLOnSystemCapabilityUpdated"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)URL":{"name":"URL","abstract":"

    The url

    ","parent_name":"SDLOnSyncPData"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)Timeout":{"name":"Timeout","abstract":"

    How long until a timeout

    ","parent_name":"SDLOnSyncPData"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allocatedModules":{"name":"allocatedModules","abstract":"

    @abstract Contains a list (zero or more) of module types that","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)freeModules":{"name":"freeModules","abstract":"

    @abstract Contains a list (zero or more) of module types that are free to access for the application.

    ","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allowed":{"name":"allowed","abstract":"

    Issued by SDL to notify the application about remote control status change on SDL","parent_name":"SDLOnRCStatus"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)permissionItem":{"name":"permissionItem","abstract":"

    Describes change in permissions for a given set of RPCs

    ","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)requireEncryption":{"name":"requireEncryption","abstract":"

    Describes whether or not the app needs the encryption permission

    ","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)driverDistractionStatus":{"name":"driverDistractionStatus","abstract":"

    Get the current driver distraction status(i.e. whether driver distraction rules are in effect, or not)

    ","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)userSelected":{"name":"userSelected","abstract":"

    Get user selection status for the application (has the app been selected via hmi or voice command)

    ","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)lockScreenStatus":{"name":"lockScreenStatus","abstract":"

    Indicates if the lockscreen should be required, optional or off

    ","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"

    Get HMILevel in effect for the application

    ","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)language":{"name":"language","abstract":"

    Current SDL voice engine (VR+TTS) language

    ","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"

    Current display language

    ","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)event":{"name":"event","abstract":"

    The type of keyboard input

    ","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)data":{"name":"data","abstract":"

    The current keyboard string input from the user

    ","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnInteriorVehicleData.html#/c:objc(cs)SDLOnInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"

    The subscribed module data that changed

    ","parent_name":"SDLOnInteriorVehicleData"},"Classes/SDLOnHashChange.html#/c:objc(cs)SDLOnHashChange(py)hashID":{"name":"hashID","abstract":"

    Calculated hash ID to be referenced during RegisterAppInterface request.

    ","parent_name":"SDLOnHashChange"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"

    SDLHMILevel in effect for the application

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)audioStreamingState":{"name":"audioStreamingState","abstract":"

    Current state of audio streaming for the application. When this parameter has a value of NOT_AUDIBLE, the application must stop streaming audio to SDL.

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)videoStreamingState":{"name":"videoStreamingState","abstract":"

    Current availablility of video streaming for the application. When this parameter is NOT_STREAMABLE, the application must stop video streaming to SDL.

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)systemContext":{"name":"systemContext","abstract":"

    Whether a user-initiated interaction is in-progress (VRSESSION or MENU), or not (MAIN)

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)windowID":{"name":"windowID","abstract":"

    This is the unique ID assigned to the window that this RPC is intended for. If this param is not included, it will be assumed that this request is specifically for the main window on the main display. - see: PredefinedWindows enum.

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(im)initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:":{"name":"-initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:","abstract":"

    Initialize an SDLOnHMIStatus RPC with initial parameters

    ","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)data":{"name":"data","abstract":"

    Contains base64 encoded string of SyncP packets.

    ","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)URL":{"name":"URL","abstract":"

    If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded to the provided URL.

    ","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)Timeout":{"name":"Timeout","abstract":"

    If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded with the provided timeout in seconds.

    ","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)state":{"name":"state","abstract":"

    The driver distraction state (i.e. whether driver distraction rules are in effect, or not)

    ","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)lockScreenDismissalEnabled":{"name":"lockScreenDismissalEnabled","abstract":"

    If enabled, the lock screen will be able to be dismissed while connected to SDL, allowing users the ability to interact with the app.

    ","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)lockScreenDismissalWarning":{"name":"lockScreenDismissalWarning","abstract":"

    Warning message to be displayed on the lock screen when dismissal is enabled. This warning should be used to ensure that the user is not the driver of the vehicle, ex. Swipe up to dismiss, acknowledging that you are not the driver.. This parameter must be present if “lockScreenDismissalEnabled” is set to true.

    ","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)cmdID":{"name":"cmdID","abstract":"

    The command ID of the command the user selected. This is the command ID value provided by the application in the SDLAddCommand operation that created the command.

    ","parent_name":"SDLOnCommand"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)triggerSource":{"name":"triggerSource","abstract":"

    Indicates whether command was selected via voice or via a menu selection (using the OK button).

    ","parent_name":"SDLOnCommand"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonName":{"name":"buttonName","abstract":"

    The button’s name

    ","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"

    Indicates whether this is a LONG or SHORT button press event

    ","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)customButtonID":{"name":"customButtonID","abstract":"

    If ButtonName is “CUSTOM_BUTTON”, this references the integer ID passed by a custom button. (e.g. softButton ID)

    ","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonName":{"name":"buttonName","abstract":"

    The name of the button

    ","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonEventMode":{"name":"buttonEventMode","abstract":"

    Indicates whether this is an UP or DOWN event

    ","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)customButtonID":{"name":"customButtonID","abstract":"

    If ButtonName is “CUSTOM_BUTTON”, this references the integer ID passed by a custom button. (e.g. softButton ID)

    ","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnAppServiceData.html#/c:objc(cs)SDLOnAppServiceData(im)initWithServiceData:":{"name":"-initWithServiceData:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLOnAppServiceData"},"Classes/SDLOnAppServiceData.html#/c:objc(cs)SDLOnAppServiceData(py)serviceData":{"name":"serviceData","abstract":"

    The updated app service data.

    ","parent_name":"SDLOnAppServiceData"},"Classes/SDLOnAppInterfaceUnregistered.html#/c:objc(cs)SDLOnAppInterfaceUnregistered(py)reason":{"name":"reason","abstract":"

    The reason application’s interface was terminated

    ","parent_name":"SDLOnAppInterfaceUnregistered"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(im)initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:":{"name":"-initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:","abstract":"

    Convenience init to describe an oasis address

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(im)initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:countryName:subAdministrativeArea:subLocality:":{"name":"-initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:countryName:subAdministrativeArea:subLocality:","abstract":"

    Convenience init to describe an oasis address with all parameters

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryName":{"name":"countryName","abstract":"

    Name of the country (localized)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryCode":{"name":"countryCode","abstract":"

    countryCode of the country(ISO 3166-2)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)postalCode":{"name":"postalCode","abstract":"

    postalCode of location (PLZ, ZIP, PIN, CAP etc.)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)administrativeArea":{"name":"administrativeArea","abstract":"

    Portion of country (e.g. state)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subAdministrativeArea":{"name":"subAdministrativeArea","abstract":"

    Portion of administrativeArea (e.g. county)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)locality":{"name":"locality","abstract":"

    Hypernym for city/village

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subLocality":{"name":"subLocality","abstract":"

    Hypernym for district

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)thoroughfare":{"name":"thoroughfare","abstract":"

    Hypernym for street, road etc.

    ","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subThoroughfare":{"name":"subThoroughfare","abstract":"

    Portion of thoroughfare (e.g. house number)

    ","parent_name":"SDLOasisAddress"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allResponseNames":{"name":"+allResponseNames","abstract":"

    All of the possible SDL RPC Response notification names

    ","parent_name":"SDLNotificationConstants"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allButtonEventNotifications":{"name":"+allButtonEventNotifications","abstract":"

    All of the possible SDL Button event notification names

    ","parent_name":"SDLNotificationConstants"},"Classes/SDLNavigationServiceManifest.html#/c:objc(cs)SDLNavigationServiceManifest(im)initWithAcceptsWayPoints:":{"name":"-initWithAcceptsWayPoints:","abstract":"

    Convenience init.

    ","parent_name":"SDLNavigationServiceManifest"},"Classes/SDLNavigationServiceManifest.html#/c:objc(cs)SDLNavigationServiceManifest(py)acceptsWayPoints":{"name":"acceptsWayPoints","abstract":"

    Informs the subscriber if this service can actually accept way points.

    ","parent_name":"SDLNavigationServiceManifest"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(im)initWithTimestamp:":{"name":"-initWithTimestamp:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(im)initWithTimestamp:origin:destination:destinationETA:instructions:nextInstructionETA:nextInstructionDistance:nextInstructionDistanceScale:prompt:":{"name":"-initWithTimestamp:origin:destination:destinationETA:instructions:nextInstructionETA:nextInstructionDistance:nextInstructionDistanceScale:prompt:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)timestamp":{"name":"timestamp","abstract":"

    This is the timestamp of when the data was generated. This is to ensure any time or distance given in the data can accurately be adjusted if necessary.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)origin":{"name":"origin","abstract":"

    The start location.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)destination":{"name":"destination","abstract":"

    The final destination location.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)destinationETA":{"name":"destinationETA","abstract":"

    The estimated time of arrival at the final destination location.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)instructions":{"name":"instructions","abstract":"

    This array should be ordered with all remaining instructions. The start of this array should always contain the next instruction.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionETA":{"name":"nextInstructionETA","abstract":"

    The estimated time of arrival at the next destination.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionDistance":{"name":"nextInstructionDistance","abstract":"

    The distance to this instruction from current location. This should only be updated ever .1 unit of distance. For more accuracy the consumer can use the GPS location of itself and the next instruction.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionDistanceScale":{"name":"nextInstructionDistanceScale","abstract":"

    Distance till next maneuver (starting from) from previous maneuver.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)prompt":{"name":"prompt","abstract":"

    This is a prompt message that should be conveyed to the user through either display or voice (TTS). This param will change often as it should represent the following: approaching instruction, post instruction, alerts that affect the current navigation session, etc.

    ","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(im)initWithLocationDetails:action:":{"name":"-initWithLocationDetails:action:","abstract":"

    Convenience init for required parameters

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(im)initWithLocationDetails:action:eta:bearing:junctionType:drivingSide:details:image:":{"name":"-initWithLocationDetails:action:eta:bearing:junctionType:drivingSide:details:image:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)locationDetails":{"name":"locationDetails","abstract":"

    The location details.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)action":{"name":"action","abstract":"

    The navigation action.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)eta":{"name":"eta","abstract":"

    The estimated time of arrival.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)bearing":{"name":"bearing","abstract":"

    The angle at which this instruction takes place. For example, 0 would mean straight, <=45 is bearing right, >= 135 is sharp right, between 45 and 135 is a regular right, and 180 is a U-Turn, etc.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)junctionType":{"name":"junctionType","abstract":"

    The navigation junction type.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)drivingSide":{"name":"drivingSide","abstract":"

    Used to infer which side of the road this instruction takes place. For a U-Turn (action=TURN, bearing=180) this will determine which direction the turn should take place.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)details":{"name":"details","abstract":"

    This is a string representation of this instruction, used to display instructions to the users. This is not intended to be read aloud to the users, see the param prompt in NavigationServiceData for that.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)image":{"name":"image","abstract":"

    An image representation of this instruction.

    ","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(im)initWithSendLocation:waypoints:":{"name":"-initWithSendLocation:waypoints:","abstract":"

    Convenience init with all parameters

    ","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)sendLocationEnabled":{"name":"sendLocationEnabled","abstract":"

    Whether or not the SendLocation RPC is enabled.

    ","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)getWayPointsEnabled":{"name":"getWayPointsEnabled","abstract":"

    Whether or not Waypoint related RPCs are enabled.

    ","parent_name":"SDLNavigationCapability"},"Classes/SDLMyKey.html#/c:objc(cs)SDLMyKey(py)e911Override":{"name":"e911Override","abstract":"

    Indicates whether e911 override is on. References signal “MyKey_e911Override_St”. See VehicleDataStatus.

    ","parent_name":"SDLMyKey"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"

    The major version indicates versions that is not-compatible to previous versions

    ","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"

    The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)

    ","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"

    Allows backward-compatible fixes to the API without increasing the minor version of the interface

    ","parent_name":"SDLMsgVersion"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)moduleId":{"name":"moduleId","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)location":{"name":"location","abstract":"

    Location of a module.","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)serviceArea":{"name":"serviceArea","abstract":"

    Service area of a module.","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)allowMultipleAccess":{"name":"allowMultipleAccess","abstract":"

    Allow multiple users/apps to access the module or not

    ","parent_name":"SDLModuleInfo"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithRadioControlData:":{"name":"-initWithRadioControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with radio control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithClimateControlData:":{"name":"-initWithClimateControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with climate control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithAudioControlData:":{"name":"-initWithAudioControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with audio control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithLightControlData:":{"name":"-initWithLightControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with light control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithHMISettingsControlData:":{"name":"-initWithHMISettingsControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with hmi settings data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithSeatControlData:":{"name":"-initWithSeatControlData:","abstract":"

    Constructs a newly allocated SDLModuleData object with seat control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleType":{"name":"moduleType","abstract":"

    The moduleType indicates which type of data should be changed and identifies which data object exists in this struct.

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleId":{"name":"moduleId","abstract":"

    Id of a module, published by System Capability.

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)radioControlData":{"name":"radioControlData","abstract":"

    The radio control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)climateControlData":{"name":"climateControlData","abstract":"

    The climate control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)seatControlData":{"name":"seatControlData","abstract":"

    The seat control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)audioControlData":{"name":"audioControlData","abstract":"

    The audio control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)lightControlData":{"name":"lightControlData","abstract":"

    The light control data

    ","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)hmiSettingsControlData":{"name":"hmiSettingsControlData","abstract":"

    The hmi control data

    ","parent_name":"SDLModuleData"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:":{"name":"-initWithTextFieldTypes:mainField2:","abstract":"

    Constructs a newly allocated SDLMetadataType object with NSArrays

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:mainField3:mainField4:":{"name":"-initWithTextFieldTypes:mainField2:mainField3:mainField4:","abstract":"

    Constructs a newly allocated SDLMetadataType with all parameters

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField1":{"name":"mainField1","abstract":"

    The type of data contained in the “mainField1” text field.

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField2":{"name":"mainField2","abstract":"

    The type of data contained in the “mainField2” text field.

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField3":{"name":"mainField3","abstract":"

    The type of data contained in the “mainField3” text field.

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField4":{"name":"mainField4","abstract":"

    The type of data contained in the “mainField4” text field.

    ","parent_name":"SDLMetadataTags"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:":{"name":"-initWithMenuName:","abstract":"

    Convenience init with required parameters.

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:parentId:position:":{"name":"-initWithMenuName:parentId:position:","abstract":"

    Convenience init with all parameters.

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)parentID":{"name":"parentID","abstract":"

    The unique ID of an existing submenu to which a command will be added

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)position":{"name":"position","abstract":"

    The position within the items of the parent Command Menu

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)menuName":{"name":"menuName","abstract":"

    The menu name which appears in menu, representing this command

    ","parent_name":"SDLMenuParams"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(py)mainMenuLayout":{"name":"mainMenuLayout","abstract":"

    Changes the default main menu layout. Defaults to SDLMenuLayoutList.

    ","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(py)defaultSubmenuLayout":{"name":"defaultSubmenuLayout","abstract":"

    Changes the default submenu layout. To change this for an individual submenu, set the menuLayout property on the SDLMenuCell initializer for creating a cell with sub-cells. Defaults to SDLMenuLayoutList.

    ","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(im)initWithMainMenuLayout:defaultSubmenuLayout:":{"name":"-initWithMainMenuLayout:defaultSubmenuLayout:","abstract":"

    Initialize a new menu configuration with a main menu layout and a default submenu layout which can be overriden per-submenu if desired.

    ","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)title":{"name":"title","abstract":"

    The cell’s text to be displayed

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)icon":{"name":"icon","abstract":"

    The cell’s icon to be displayed

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)voiceCommands":{"name":"voiceCommands","abstract":"

    The strings the user can say to activate this voice command

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)handler":{"name":"handler","abstract":"

    The handler that will be called when the command is activated

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)subCells":{"name":"subCells","abstract":"

    If this is non-nil, this cell will be a sub-menu button, displaying the subcells in a menu when pressed.

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)submenuLayout":{"name":"submenuLayout","abstract":"

    The layout in which the subCells will be displayed.

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:voiceCommands:handler:":{"name":"-initWithTitle:icon:voiceCommands:handler:","abstract":"

    Create a menu cell that has no subcells.

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:subCells:":{"name":"-initWithTitle:subCells:","abstract":"

    Create a menu cell that has subcells and when selected will go into a deeper part of the menu

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:subCells:":{"name":"-initWithTitle:icon:subCells:","abstract":"

    Create a menu cell that has subcells and when selected will go into a deeper part of the menu

    ","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:submenuLayout:subCells:":{"name":"-initWithTitle:icon:submenuLayout:subCells:","abstract":"

    Create a menu cell that has subcells and when selected will go into a deeper part of the menu

    ","parent_name":"SDLMenuCell"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(im)initWithMediaType:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:":{"name":"-initWithMediaType:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:","abstract":"

    Convenience init

    ","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(im)initWithMediaType:mediaImage:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:":{"name":"-initWithMediaType:mediaImage:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:","abstract":"

    Convenience init

    ","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaImage":{"name":"mediaImage","abstract":"

    Sets the media image associated with the currently playing media","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaType":{"name":"mediaType","abstract":"

    The type of the currently playing or paused track.

    ","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaTitle":{"name":"mediaTitle","abstract":"

    Music: The name of the current track","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaArtist":{"name":"mediaArtist","abstract":"

    Music: The name of the current album artist","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaAlbum":{"name":"mediaAlbum","abstract":"

    Music: The name of the current album","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)playlistName":{"name":"playlistName","abstract":"

    Music: The name of the playlist or radio station, if the user is playing from a playlist, otherwise, Null","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)isExplicit":{"name":"isExplicit","abstract":"

    Whether or not the content currently playing (e.g. the track, episode, or book) contains explicit content.

    ","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)trackPlaybackProgress":{"name":"trackPlaybackProgress","abstract":"

    Music: The current progress of the track in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)trackPlaybackDuration":{"name":"trackPlaybackDuration","abstract":"

    Music: The total duration of the track in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queuePlaybackProgress":{"name":"queuePlaybackProgress","abstract":"

    Music: The current progress of the playback queue in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queuePlaybackDuration":{"name":"queuePlaybackDuration","abstract":"

    Music: The total duration of the playback queue in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queueCurrentTrackNumber":{"name":"queueCurrentTrackNumber","abstract":"

    Music: The current number (1 based) of the track in the playback queue","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queueTotalTrackCount":{"name":"queueTotalTrackCount","abstract":"

    Music: The total number of tracks in the playback queue","parent_name":"SDLMediaServiceData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(im)initWithMassageMode:massageZone:":{"name":"-initWithMassageMode:massageZone:","abstract":"

    @abstract Constructs a newly allocated SDLMassageModeData object with massageMode and massageZone

    ","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageMode":{"name":"massageMode","abstract":"

    @abstract mode of a massage zone

    ","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageZone":{"name":"massageZone","abstract":"

    @abstract zone of a multi-contour massage seat.

    ","parent_name":"SDLMassageModeData"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(im)initWithMassageCushion:firmness:":{"name":"-initWithMassageCushion:firmness:","abstract":"

    Constructs a newly allocated SDLMassageCushionFirmness object with cushion and firmness

    ","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)cushion":{"name":"cushion","abstract":"

    @abstract cushion of a multi-contour massage seat.

    ","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)firmness":{"name":"firmness","abstract":"

    @abstract zone of a multi-contour massage seat.

    ","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)configuration":{"name":"configuration","abstract":"

    The configuration the manager was set up with.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)hmiLevel":{"name":"hmiLevel","abstract":"

    The current HMI level of the running app.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)audioStreamingState":{"name":"audioStreamingState","abstract":"

    The current audio streaming state of the running app.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemContext":{"name":"systemContext","abstract":"

    The current system context of the running app.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)fileManager":{"name":"fileManager","abstract":"

    The file manager to be used by the running app.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)permissionManager":{"name":"permissionManager","abstract":"

    The permission manager monitoring RPC permissions.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)streamManager":{"name":"streamManager","abstract":"

    The streaming media manager to be used for starting video sessions.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)screenManager":{"name":"screenManager","abstract":"

    The screen manager for sending UI related RPCs.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemCapabilityManager":{"name":"systemCapabilityManager","abstract":"

    Centralized manager for retrieving all system capabilities.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)registerResponse":{"name":"registerResponse","abstract":"

    The response of a register call after it has been received.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)authToken":{"name":"authToken","abstract":"

    The auth token, if received. This should be used to log into a user account. Primarily used for cloud apps with companion app stores.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)delegate":{"name":"delegate","abstract":"

    The manager’s delegate.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)pendingRPCTransactions":{"name":"pendingRPCTransactions","abstract":"

    The currently pending RPC request send transactions

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)proxy":{"name":"proxy","abstract":"

    Deprecated internal proxy object. This should only be accessed when the Manager is READY. This property may go to nil at any time.","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)initWithConfiguration:delegate:":{"name":"-initWithConfiguration:delegate:","abstract":"

    Initialize the manager with a configuration. Call startWithHandler to begin waiting for a connection.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startWithReadyHandler:":{"name":"-startWithReadyHandler:","abstract":"

    Start the manager, which will tell it to start looking for a connection. Once one does, it will automatically run the setup process and call the readyBlock when done.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)stop":{"name":"-stop","abstract":"

    Stop the manager, it will disconnect if needed and no longer look for a connection. You probably don’t need to call this method ever.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startRPCEncryption":{"name":"-startRPCEncryption","abstract":"

    Start the encryption lifecycle manager, which will attempt to open a secure service.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRPC:":{"name":"-sendRPC:","abstract":"

    Send an RPC of type Response, Notification or Request. Responses and notifications sent to Core do not a response back from Core. Each request sent to Core does get a response, so if you need the response and/or error, call sendRequest:withResponseHandler: instead.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:":{"name":"-sendRequest:","abstract":"

    Send an RPC request and don’t bother with the response or error. If you need the response or error, call sendRequest:withCompletionHandler: instead.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:withResponseHandler:":{"name":"-sendRequest:withResponseHandler:","abstract":"

    Send an RPC request and set a completion handler that will be called with the response when the response returns.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequests:progressHandler:completionHandler:":{"name":"-sendRequests:progressHandler:completionHandler:","abstract":"

    Send all of the requests given as quickly as possible, but in order. Call the completionHandler after all requests have either failed or given a response.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendSequentialRequests:progressHandler:completionHandler:":{"name":"-sendSequentialRequests:progressHandler:completionHandler:","abstract":"

    Send all of the requests one at a time, with the next one going out only after the previous one has received a response. Call the completionHandler after all requests have either failed or given a response.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)subscribeToRPC:withBlock:":{"name":"-subscribeToRPC:withBlock:","abstract":"

    Subscribe to callbacks about a particular RPC request, notification, or response with a block callback.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)subscribeToRPC:withObserver:selector:":{"name":"-subscribeToRPC:withObserver:selector:","abstract":"

    Subscribe to callbacks about a particular RPC request, notification, or response with a selector callback.

    ","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)unsubscribeFromRPC:withObserver:":{"name":"-unsubscribeFromRPC:withObserver:","abstract":"

    Unsubscribe to callbacks about a particular RPC request, notification, or response.

    ","parent_name":"SDLManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)modules":{"name":"modules","abstract":"

    Active log modules

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)targets":{"name":"targets","abstract":"

    Active log targets

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)filters":{"name":"filters","abstract":"

    Active log filters

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)globalLogLevel":{"name":"globalLogLevel","abstract":"

    Any modules that do not have an explicitly specified level will by default use this log level

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)formatType":{"name":"formatType","abstract":"

    Active log format

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)asynchronous":{"name":"asynchronous","abstract":"

    Whether or not verbose, debug, and warning logs are logged asynchronously. If logs are performed async, then some may be missed in the event of a terminating signal such as an exception, but performance is improved and your code will not be slowed by logging.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"

    Whether or not error logs are logged asynchronously. If logs are performed async, then some may be missed in the event of a terminating signal such as an exception, but performance is improved and your code will not be slowed by logging.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)disableAssertions":{"name":"disableAssertions","abstract":"

    Whether or not assert logs will fire assertions in DEBUG mode. Assertions are always disabled in RELEASE builds. If assertions are disabled, only an error log will fire instead. Defaults to NO.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)dateFormatter":{"name":"dateFormatter","abstract":"

    Active date formatter

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)logQueue":{"name":"logQueue","abstract":"

    The queue asynchronously logged logs are logged on. Say that 10 times fast.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)sharedManager":{"name":"+sharedManager","abstract":"

    The singleton object

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)setConfiguration:":{"name":"+setConfiguration:","abstract":"

    Sets a configuration to be used by the log manager’s sharedManager. This is generally for internal use and you should set your configuration using SDLManager’s startWithConfiguration: method.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)setConfiguration:":{"name":"-setConfiguration:","abstract":"

    Sets a configuration to be used by the log manager. This is generally for internal use and you should set your configuration using SDLManager’s startWithConfiguration: method.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logWithLevel:timestamp:file:functionName:line:queue:formatMessage:":{"name":"+logWithLevel:timestamp:file:functionName:line:queue:formatMessage:","abstract":"

    Log to the sharedManager’s active log targets. This is used internally to log. If you want to create a log, you should use macros such as SDLLogD.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logWithLevel:timestamp:file:functionName:line:queue:formatMessage:":{"name":"-logWithLevel:timestamp:file:functionName:line:queue:formatMessage:","abstract":"

    Log to this log manager’s active log targets. This is used internally to log. If you want to create a log, you should use macros such as SDLLogD.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logWithLevel:timestamp:file:functionName:line:queue:message:":{"name":"+logWithLevel:timestamp:file:functionName:line:queue:message:","abstract":"

    Log to this sharedManager’s active log targets. This is used internally to log. If you want to create a log, you should use macros such as SDLLogD.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logWithLevel:timestamp:file:functionName:line:queue:message:":{"name":"-logWithLevel:timestamp:file:functionName:line:queue:message:","abstract":"

    Log to this log manager’s active log targets. This is used internally to log. If you want to create a log, you should use macros such as SDLLogD.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logBytes:direction:timestamp:file:functionName:line:queue:":{"name":"+logBytes:direction:timestamp:file:functionName:line:queue:","abstract":"

    Log to this sharedManager’s active log targets. This is used internally to log.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logBytes:direction:timestamp:file:functionName:line:queue:":{"name":"-logBytes:direction:timestamp:file:functionName:line:queue:","abstract":"

    Log to this manager’s active log targets. This is used internally to log.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logAssertWithTimestamp:file:functionName:line:queue:formatMessage:":{"name":"+logAssertWithTimestamp:file:functionName:line:queue:formatMessage:","abstract":"

    Log an error to the sharedManager’s active log targets and assert. This is used internally to log.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logAssertWithTimestamp:file:functionName:line:queue:formatMessage:":{"name":"-logAssertWithTimestamp:file:functionName:line:queue:formatMessage:","abstract":"

    Log an error to this manager’s active log targets and assert. This is used internally to log.

    ","parent_name":"SDLLogManager"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(py)filter":{"name":"filter","abstract":"

    A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)initWithCustomFilter:":{"name":"-initWithCustomFilter:","abstract":"

    Create a new filter with a custom filter block. The filter block will take a log model and return a BOOL of pass / fail.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingString:caseSensitive:":{"name":"+filterByDisallowingString:caseSensitive:","abstract":"

    Returns a filter that only allows logs not containing the passed string within their message.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingString:caseSensitive:":{"name":"+filterByAllowingString:caseSensitive:","abstract":"

    Returns a filter that only allows logs containing the passed string within their message.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingRegex:":{"name":"+filterByDisallowingRegex:","abstract":"

    Returns a filter that only allows logs not passing the passed regex against their message.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingRegex:":{"name":"+filterByAllowingRegex:","abstract":"

    Returns a filter that only allows logs passing the passed regex against their message.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingModules:":{"name":"+filterByDisallowingModules:","abstract":"

    Returns a filter that only allows logs not within the specified file modules to be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingModules:":{"name":"+filterByAllowingModules:","abstract":"

    Returns a filter that only allows logs of the specified file modules to be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingFileNames:":{"name":"+filterByDisallowingFileNames:","abstract":"

    Returns a filter that only allows logs not within the specified files to be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingFileNames:":{"name":"+filterByAllowingFileNames:","abstract":"

    Returns a filter that only allows logs within the specified files to be logged.

    ","parent_name":"SDLLogFilter"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)name":{"name":"name","abstract":"

    The name of the this module, e.g. “Transport”

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)files":{"name":"files","abstract":"

    All of the files contained within this module. When a log is logged, the __FILE__ (in Obj-C) or #file (in Swift) is automatically captured and checked to see if any module has a file in this set that matches. If it does, it will be logged using the module’s log level and the module’s name will be printed in the formatted log.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)logLevel":{"name":"logLevel","abstract":"

    The custom level of the log. This is SDLLogLevelDefault (whatever the current global log level is) by default.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)init":{"name":"-init","abstract":"

    This method is unavailable and may not be used.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:level:":{"name":"-initWithName:files:level:","abstract":"

    Returns an initialized SDLLogFileModule that contains a custom name, set of files, and associated log level.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:":{"name":"-initWithName:files:","abstract":"

    Returns an initialized SDLLogFileModule that contains a custom name and set of files. The logging level is the same as the current global logging file by using SDLLogLevelDefault.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(cm)moduleWithName:files:":{"name":"+moduleWithName:files:","abstract":"

    Returns an initialized SDLLogFileModule that contains a custom name and set of files. The logging level is the same as the current global logging file by using SDLLogLevelDefault.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)containsFile:":{"name":"-containsFile:","abstract":"

    Returns whether or not this module contains a given file.

    ","parent_name":"SDLLogFileModule"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)modules":{"name":"modules","abstract":"

    Any custom logging modules used by the developer’s code. Defaults to none.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)targets":{"name":"targets","abstract":"

    Where the logs will attempt to output. Defaults to Console.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)filters":{"name":"filters","abstract":"

    What log filters will run over this session. Defaults to none.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)formatType":{"name":"formatType","abstract":"

    How detailed of logs will be output. Defaults to Default.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)asynchronous":{"name":"asynchronous","abstract":"

    Whether or not logs will be run on a separate queue, asynchronously, allowing the following code to run before the log completes. Or if it will occur synchronously, which will prevent logs from being missed, but will slow down surrounding code. Defaults to YES.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"

    Whether or not error logs will be dispatched to loggers asynchronously. Defaults to NO.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)disableAssertions":{"name":"disableAssertions","abstract":"

    Whether or not assert logs will fire assertions in DEBUG mode. Assertions are always disabled in RELEASE builds. If assertions are disabled, only an error log will fire instead. Defaults to NO.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)globalLogLevel":{"name":"globalLogLevel","abstract":"

    Any modules that do not have an explicitly specified level will by default use the global log level. Defaults to Error.","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"

    A default logger for production. This sets the format type to Default, the log level to Error, and only enables the ASL logger.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)debugConfiguration":{"name":"+debugConfiguration","abstract":"

    A debug logger for use in development. This sets the format type to Detailed, the log level to Debug, and enables the Console and ASL loggers.

    ","parent_name":"SDLLogConfiguration"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)appIcon":{"name":"appIcon","abstract":"

    The app’s icon. This will be set by the lock screen configuration.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)vehicleIcon":{"name":"vehicleIcon","abstract":"

    The vehicle’s designated icon. This will be set by the lock screen manager when it is notified that a lock screen icon has been downloaded.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)backgroundColor":{"name":"backgroundColor","abstract":"

    The designated background color set in the lock screen configuration, or the default SDL gray-blue.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)lockedLabelText":{"name":"lockedLabelText","abstract":"

    The locked label string. This will be set by the lock screen manager to inform the user about the dismissable state.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(im)addDismissGestureWithCallback:":{"name":"-addDismissGestureWithCallback:","abstract":"

    Adds a swipe gesture to the lock screen view controller.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(im)removeDismissGesture":{"name":"-removeDismissGesture","abstract":"

    Remove swipe gesture to the lock screen view controller.

    ","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)displayMode":{"name":"displayMode","abstract":"

    Describes when the lock screen will be displayed. Defaults to SDLLockScreenConfigurationDisplayModeRequiredOnly.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showInOptionalState":{"name":"showInOptionalState","abstract":"

    Whether or not the lock screen should be shown in the “lock screen optional” state. Defaults to NO.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableDismissGesture":{"name":"enableDismissGesture","abstract":"

    If YES, then the lock screen can be dismissed with a downward swipe on compatible head units. Requires a connection of SDL 6.0+ and the head unit to enable the feature. Defaults to YES.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showDeviceLogo":{"name":"showDeviceLogo","abstract":"

    If YES, then the lockscreen will show the vehicle’s logo if the vehicle has made it available. If NO, then the lockscreen will not show the vehicle logo. Defaults to YES.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableAutomaticLockScreen":{"name":"enableAutomaticLockScreen","abstract":"

    If YES, the lock screen should be managed by SDL and automatically engage when necessary. If NO, then the lock screen will never be engaged. Defaults to YES.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)backgroundColor":{"name":"backgroundColor","abstract":"

    The background color of the lock screen. This could be a branding color, or leave at the default for a dark blue-gray.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)appIcon":{"name":"appIcon","abstract":"

    Your app icon as it will appear on the lock screen.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)customViewController":{"name":"customViewController","abstract":"

    A custom view controller that the lock screen will manage the presentation of.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)disabledConfiguration":{"name":"+disabledConfiguration","abstract":"

    Use this configuration if you wish to manage a lock screen yourself. This may be useful if the automatic presentation feature of SDLLockScreenManager is failing for some reason.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfiguration":{"name":"+enabledConfiguration","abstract":"

    Use this configuration for the basic default lock screen. A custom app icon will not be used.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithAppIcon:backgroundColor:":{"name":"+enabledConfigurationWithAppIcon:backgroundColor:","abstract":"

    Use this configuration to provide a custom lock screen icon and a custom background color, or nil if you wish to use the default background color. This will use the default lock screen layout.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithViewController:":{"name":"+enabledConfigurationWithViewController:","abstract":"

    Use this configuration if you wish to provide your own view controller for the lock screen. This view controller’s presentation and dismissal will still be managed by the lock screen manager. Note that you may subclass SDLLockScreenViewController and pass it here to continue to have the vehicle icon set to your view controller by the manager.

    ","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(im)initWithCoordinate:":{"name":"-initWithCoordinate:","abstract":"

    Convenience init for location coordinate.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(im)initWithCoordinate:locationName:addressLines:locationDescription:phoneNumber:locationImage:searchAddress:":{"name":"-initWithCoordinate:locationName:addressLines:locationDescription:phoneNumber:locationImage:searchAddress:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)coordinate":{"name":"coordinate","abstract":"

    Latitude/Longitude of the location

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationName":{"name":"locationName","abstract":"

    Name of location.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)addressLines":{"name":"addressLines","abstract":"

    Location address for display purposes only.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationDescription":{"name":"locationDescription","abstract":"

    Description intended location / establishment.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)phoneNumber":{"name":"phoneNumber","abstract":"

    Phone number of location / establishment.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationImage":{"name":"locationImage","abstract":"

    Image / icon of intended location.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)searchAddress":{"name":"searchAddress","abstract":"

    Address to be used by navigation engines for search.

    ","parent_name":"SDLLocationDetails"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(im)initWithLatitudeDegrees:longitudeDegrees:":{"name":"-initWithLatitudeDegrees:longitudeDegrees:","abstract":"

    Convenience init for location coordinates

    ","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"

    Latitude of the location

    ","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"

    Latitude of the location

    ","parent_name":"SDLLocationCoordinate"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)filenames":{"name":"filenames","abstract":"

    An array of all filenames resident on the module for the given registered app. If omitted, then no files currently reside on the system.

    ","parent_name":"SDLListFilesResponse"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"

    Provides the total local space available on the module for the registered app.

    ","parent_name":"SDLListFilesResponse"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:":{"name":"-initWithId:status:","abstract":"

    Constructs a newly allocated SDLLightState object with given parameters

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:density:color:":{"name":"-initWithId:status:density:color:","abstract":"

    Constructs a newly allocated SDLLightState object with given parameters

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:lightStatus:lightDensity:lightColor:":{"name":"-initWithId:lightStatus:lightDensity:lightColor:","abstract":"

    Constructs a newly allocated SDLLightState object with given parameters

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)id":{"name":"id","abstract":"

    @abstract The name of a light or a group of lights

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)status":{"name":"status","abstract":"

    @abstract Reflects the status of Light.

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)density":{"name":"density","abstract":"

    @abstract Reflects the density of Light.

    ","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)color":{"name":"color","abstract":"

    @abstract Reflects the color of Light.

    ","parent_name":"SDLLightState"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(im)initWithLightStates:":{"name":"-initWithLightStates:","abstract":"

    Constructs a newly allocated SDLLightControlData object with lightState

    ","parent_name":"SDLLightControlData"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(py)lightState":{"name":"lightState","abstract":"

    @abstract An array of LightNames and their current or desired status.","parent_name":"SDLLightControlData"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(im)initWithModuleName:supportedLights:":{"name":"-initWithModuleName:supportedLights:","abstract":"

    Constructs a newly allocated SDLLightControlCapabilities object with given parameters

    ","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(im)initWithModuleName:moduleInfo:supportedLights:":{"name":"-initWithModuleName:moduleInfo:supportedLights:","abstract":"

    Constructs a newly allocated SDLLightControlCapabilities object with given parameters

    ","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    @abstract The short friendly name of the light control module.","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)supportedLights":{"name":"supportedLights","abstract":"

    @abstract An array of available LightCapabilities that are controllable.

    ","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"

    Constructs a newly allocated SDLLightCapabilities object with the name of the light or group of lights

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:densityAvailable:colorAvailable:statusAvailable:":{"name":"-initWithName:densityAvailable:colorAvailable:statusAvailable:","abstract":"

    Constructs a newly allocated SDLLightCapabilities object with given parameters

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)name":{"name":"name","abstract":"

    @abstract The name of a light or a group of lights

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)densityAvailable":{"name":"densityAvailable","abstract":"

    @abstract Indicates if the light’s density can be set remotely (similar to a dimmer).

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)colorAvailable":{"name":"colorAvailable","abstract":"

    @abstract Indicates if the light’s color can be set remotely by using the RGB color space.

    ","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)statusAvailable":{"name":"statusAvailable","abstract":"

    @abstract Indicates if the status (ON/OFF) can be set remotely.","parent_name":"SDLLightCapabilities"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)appName":{"name":"appName","abstract":"

    The full name of the app to that the configuration should be updated to.

    ","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)shortAppName":{"name":"shortAppName","abstract":"

    An abbrevited application name that will be used on the app launching screen if the full one would be truncated.

    ","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)ttsName":{"name":"ttsName","abstract":"

    A Text to Speech String for voice recognition of the mobile application name.

    ","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"

    Additional voice recognition commands. May not interfere with any other app name or global commands.

    ","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(im)initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:":{"name":"-initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:","abstract":"

    Initializes and returns a newly allocated lifecycle configuration update object with the specified app data.","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:appId:":{"name":"+defaultConfigurationWithAppName:appId:","abstract":"

    A production configuration that runs using IAP. Additional functionality should be customized on the properties.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:fullAppId:":{"name":"+defaultConfigurationWithAppName:fullAppId:","abstract":"

    A production configuration that runs using IAP. Additional functionality should be customized on the properties.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:appId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:appId:ipAddress:port:","abstract":"

    A debug configuration that runs using TCP. Additional functionality should be customized on the properties.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:fullAppId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:fullAppId:ipAddress:port:","abstract":"

    A debug configuration that runs using TCP. Additional functionality should be customized on the properties.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugMode":{"name":"tcpDebugMode","abstract":"

    Whether or not debug mode is enabled

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugIPAddress":{"name":"tcpDebugIPAddress","abstract":"

    The ip address at which the library will look for a server

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugPort":{"name":"tcpDebugPort","abstract":"

    The port at which the library will look for a server

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appName":{"name":"appName","abstract":"

    The full name of the app

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId":{"name":"appId","abstract":"

    The app id. This must be the same as the app id received from the SDL developer portal.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)fullAppId":{"name":"fullAppId","abstract":"

    The full app id. This must be the same as the full app id received from the SDL developer portal.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)resumeHash":{"name":"resumeHash","abstract":"

    A hash id which should be passed to the remote system in the RegisterAppInterface

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)isMedia":{"name":"isMedia","abstract":"

    This is an automatically set based on the app type

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType":{"name":"appType","abstract":"

    The application type

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)additionalAppTypes":{"name":"additionalAppTypes","abstract":"

    Additional application types beyond appType

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)language":{"name":"language","abstract":"

    The default language to use

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)languagesSupported":{"name":"languagesSupported","abstract":"

    An array of all the supported languages

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appIcon":{"name":"appIcon","abstract":"

    The application icon to be used on an app launching screen

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)shortAppName":{"name":"shortAppName","abstract":"

    An abbrevited application name that will be used on the app launching screen if the full one would be truncated

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)ttsName":{"name":"ttsName","abstract":"

    A Text to Speech String for voice recognition of the mobile application name.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"

    Additional voice recognition commands. May not interfere with any other app name or global commands.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"

    The color scheme to use when the head unit is in a light / day situation.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"

    The color scheme to use when the head unit is in a dark / night situation.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)minimumProtocolVersion":{"name":"minimumProtocolVersion","abstract":"

    The minimum protocol version that will be permitted to connect. This defaults to 1.0.0. If the protocol version of the head unit connected is below this version, the app will disconnect with an EndService protocol message and will not register.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)minimumRPCVersion":{"name":"minimumRPCVersion","abstract":"

    The minimum RPC version that will be permitted to connect. This defaults to 1.0.0. If the RPC version of the head unit connected is below this version, an UnregisterAppInterface will be sent.

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)allowedSecondaryTransports":{"name":"allowedSecondaryTransports","abstract":"

    Which transports are permitted to be used as secondary transports. A secondary transport is a transport that is connected as an alternate, higher bandwidth transport for situations when a low-bandwidth primary transport (such as Bluetooth) will restrict certain features (such as video streaming navigation).

    ","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:","abstract":"

    Create a Keyboard Properties RPC object

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:autoCompleteList:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:autoCompleteList:","abstract":"

    Create a Keyboard Properties RPC object

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)language":{"name":"language","abstract":"

    The keyboard language

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keyboardLayout":{"name":"keyboardLayout","abstract":"

    Desired keyboard layout

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keypressMode":{"name":"keypressMode","abstract":"

    Desired keypress mode.

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)limitedCharacterList":{"name":"limitedCharacterList","abstract":"

    Array of keyboard characters to enable. All omitted characters will be greyed out (disabled) on the keyboard. If omitted, the entire keyboard will be enabled.

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteText":{"name":"autoCompleteText","abstract":"

    Allows an app to prepopulate the text field with a suggested or completed entry as the user types

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteList":{"name":"autoCompleteList","abstract":"

    Allows an app to show a list of possible autocomplete suggestions as the user types

    ","parent_name":"SDLKeyboardProperties"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionWidth":{"name":"resolutionWidth","abstract":"

    Resolution width

    ","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionHeight":{"name":"resolutionHeight","abstract":"

    Resolution height

    ","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(im)initWithWidth:height:":{"name":"-initWithWidth:height:","abstract":"

    Convenience init with all parameters

    ","parent_name":"SDLImageResolution"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)name":{"name":"name","abstract":"

    The name that identifies the field.

    ","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"

    The image types that are supported in this field.

    ","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageResolution":{"name":"imageResolution","abstract":"

    The image resolution of this field

    ","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(im)initWithName:imageTypeSupported:imageResolution:":{"name":"-initWithName:imageTypeSupported:imageResolution:","abstract":"

    Convenience initalizer for the ImageField RPC struct

    ","parent_name":"SDLImageField"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:":{"name":"-initWithName:ofType:","abstract":"

    Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:isTemplate:":{"name":"-initWithName:ofType:isTemplate:","abstract":"

    Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:":{"name":"-initWithName:","abstract":"

    Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:isTemplate:":{"name":"-initWithName:isTemplate:","abstract":"

    Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticImageValue:":{"name":"-initWithStaticImageValue:","abstract":"

    Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image’s value.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticIconName:":{"name":"-initWithStaticIconName:","abstract":"

    Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image’s value.

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)value":{"name":"value","abstract":"

    The static hex icon value or the binary image file name identifier (sent by SDLPutFile)

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)imageType":{"name":"imageType","abstract":"

    Describes whether the image is static or dynamic

    ","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)isTemplate":{"name":"isTemplate","abstract":"

    Indicates that this image can be (re)colored by the HMI to best fit the current color scheme.

    ","parent_name":"SDLImage"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)lowBeamsOn":{"name":"lowBeamsOn","abstract":"

    Low beams are on or off.

    ","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)highBeamsOn":{"name":"highBeamsOn","abstract":"

    High beams are on or off

    ","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)ambientLightSensorStatus":{"name":"ambientLightSensorStatus","abstract":"

    Status of the ambient light senser

    ","parent_name":"SDLHeadLampStatus"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(im)initWithId:rect:":{"name":"-initWithId:rect:","abstract":"

    Convenience init with all parameters

    ","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)id":{"name":"id","abstract":"

    A user control spatial identifier

    ","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)rect":{"name":"rect","abstract":"

    The position of the haptic rectangle to be highlighted. The center of this rectangle will be “touched” when a press occurs.

    ","parent_name":"SDLHapticRect"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(im)initWithDisplaymode:temperatureUnit:distanceUnit:":{"name":"-initWithDisplaymode:temperatureUnit:distanceUnit:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters

    ","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)displayMode":{"name":"displayMode","abstract":"

    @abstract Display the Display Mode used HMI setting

    ","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)temperatureUnit":{"name":"temperatureUnit","abstract":"

    @abstract Display the temperature unit used HMI setting

    ","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)distanceUnit":{"name":"distanceUnit","abstract":"

    @abstract Display the distance unit used HMI setting

    ","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:moduleInfo:":{"name":"-initWithModuleName:moduleInfo:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:moduleInfo:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:moduleInfo:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"

    Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    @abstract The short friendly name of the hmi setting module.","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)distanceUnitAvailable":{"name":"distanceUnitAvailable","abstract":"

    @abstract Availability of the control of distance unit.

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)temperatureUnitAvailable":{"name":"temperatureUnitAvailable","abstract":"

    @abstract Availability of the control of temperature unit.

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)displayModeUnitAvailable":{"name":"displayModeUnitAvailable","abstract":"

    @abstract Availability of the control of HMI display mode.

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)allowed":{"name":"allowed","abstract":"

    A set of all HMI levels that are permitted for this given RPC

    ","parent_name":"SDLHMIPermissions"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"

    A set of all HMI levels that are prohibited for this given RPC

    ","parent_name":"SDLHMIPermissions"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)navigation":{"name":"navigation","abstract":"

    Availability of built in Nav. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)phoneCall":{"name":"phoneCall","abstract":"

    Availability of built in phone. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)videoStreaming":{"name":"videoStreaming","abstract":"

    Availability of built in video streaming. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)remoteControl":{"name":"remoteControl","abstract":"

    Availability of built in remote control. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)appServices":{"name":"appServices","abstract":"

    Availability of app services. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)displays":{"name":"displays","abstract":"

    Availability of displays. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)seatLocation":{"name":"seatLocation","abstract":"

    Availability of seatLocation. True: Available, False: Not Available

    ","parent_name":"SDLHMICapabilities"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)col":{"name":"col","abstract":"

    Required, Integer, -1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)row":{"name":"row","abstract":"

    Required, Integer, -1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)level":{"name":"level","abstract":"

    Optional, Integer, -1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)colspan":{"name":"colspan","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)rowspan":{"name":"rowspan","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)levelspan":{"name":"levelspan","abstract":"

    Optional, Integer, 1 - 100

    ","parent_name":"SDLGrid"},"Classes/SDLGetWayPointsResponse.html#/c:objc(cs)SDLGetWayPointsResponse(py)waypoints":{"name":"waypoints","abstract":"

    Provides additional human readable info regarding the result.

    ","parent_name":"SDLGetWayPointsResponse"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(im)initWithType:":{"name":"-initWithType:","abstract":"

    Convenience init to get waypoints.

    ","parent_name":"SDLGetWayPoints"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(py)waypointType":{"name":"waypointType","abstract":"

    To request for either the destination","parent_name":"SDLGetWayPoints"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)gps":{"name":"gps","abstract":"

    The car current GPS coordinates

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)speed":{"name":"speed","abstract":"

    The vehicle speed in kilometers per hour

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"

    The number of revolutions per minute of the engine.

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"

    The fuel level in the tank (percentage)

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    The fuel level state

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"

    The estimate range in KM the vehicle can travel based on fuel level and consumption

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    The instantaneous fuel consumption in microlitres

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"

    The external temperature in degrees celsius.

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)vin":{"name":"vin","abstract":"

    The Vehicle Identification Number

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"

    The current gear shift state of the user’s vehicle

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"

    The current pressure warnings for the user’s vehicle

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"

    Odometer reading in km

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"

    The status of the seat belts

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"

    The body information including power modes

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"

    The IVI system status including signal and battery strength

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"

    The status of the brake pedal

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"

    The status of the wipers

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"

    Status of the head lamps

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"

    The estimated percentage (0% - 100%) of remaining oil life of the engine

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"

    Torque value for engine (in Nm) on non-diesel variants

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    Accelerator pedal position (percentage depressed)

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    Current angle of the steering wheel (in deg)

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"

    Emergency Call notification and confirmation data

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"

    The status of the air bags

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    Information related to an emergency event (and if it occurred)

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    The status modes of the cluster

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"

    Information related to the MyKey feature

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    The status of the electronic parking brake

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"

    The status of the turn signal

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    The cloud app vehicle ID

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.

    ","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:vin:wiperStatus:","abstract":"

    Convenience init for getting data for all possible vehicle data items.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:","abstract":"

    Convenience init for getting data for all possible vehicle data items.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:","abstract":"

    Convenience init for getting data for all possible vehicle data items.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)gps":{"name":"gps","abstract":"

    A boolean value. If true, requests GPS data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)speed":{"name":"speed","abstract":"

    A boolean value. If true, requests Speed data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)rpm":{"name":"rpm","abstract":"

    A boolean value. If true, requests RPM data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"

    A boolean value. If true, requests Fuel Level data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"

    A boolean value. If true, requests Fuel Level State data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"

    A boolean value. If true, requests Fuel Range data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"

    A boolean value. If true, requests Instant Fuel Consumption data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"

    A boolean value. If true, requests External Temperature data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)vin":{"name":"vin","abstract":"

    A boolean value. If true, requests the Vehicle Identification Number.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)prndl":{"name":"prndl","abstract":"

    A boolean value. If true, requests PRNDL data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"

    A boolean value. If true, requests Tire Pressure data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)odometer":{"name":"odometer","abstract":"

    A boolean value. If true, requests Odometer data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"

    A boolean value. If true, requests Belt Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"

    A boolean value. If true, requests Body Information data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"

    A boolean value. If true, requests Device Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"

    A boolean value. If true, requests Driver Braking data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"

    A boolean value. If true, requests Wiper Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"

    A boolean value. If true, requests Head Lamp Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"

    A boolean value. If true, requests Engine Oil Life data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"

    A boolean value. If true, requests Engine Torque data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"

    A boolean value. If true, requests Acc Pedal Position data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"

    A boolean value. If true, requests Steering Wheel Angle data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"

    A boolean value. If true, requests Emergency Call Info data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"

    A boolean value. If true, requests Air Bag Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"

    A boolean value. If true, requests Emergency Event (if it occurred) data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"

    A boolean value. If true, requests Cluster Mode Status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)myKey":{"name":"myKey","abstract":"

    A boolean value. If true, requests MyKey data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"

    A boolean value. If true, requests Electronic Parking Brake status data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"

    A boolean value. If true, requests Turn Signal data.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"

    A boolean value. If true, requests the Cloud App Vehicle ID.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"

    Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"

    Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.

    ","parent_name":"SDLGetVehicleData"},"Classes/SDLGetSystemCapabilityResponse.html#/c:objc(cs)SDLGetSystemCapabilityResponse(py)systemCapability":{"name":"systemCapability","abstract":"

    The requested system capability, of the type that was sent in the request

    ","parent_name":"SDLGetSystemCapabilityResponse"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:":{"name":"-initWithType:","abstract":"

    Convenience init

    ","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:subscribe:":{"name":"-initWithType:subscribe:","abstract":"

    Convenience init

    ","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"

    The type of system capability to get more information on

    ","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)subscribe":{"name":"subscribe","abstract":"

    Flag to subscribe to updates of the supplied service capability type. If true, the requester will be subscribed. If false, the requester will not be subscribed and be removed as a subscriber if it was previously subscribed.

    ","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"

    The requested data

    ","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)isSubscribed":{"name":"isSubscribed","abstract":"

    It is a conditional-mandatory parameter: must be returned in case “subscribe” parameter was present in the related request.

    ","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataConsentResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataConsentResponse(py)allowed":{"name":"allowed","abstract":"

    This array has the same size as “moduleIds” in the request; each element corresponding to one moduleId","parent_name":"SDLGetInteriorVehicleDataConsentResponse"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(im)initWithModuleType:moduleIds:":{"name":"-initWithModuleType:moduleIds:","abstract":"

    Convenience init to get consent to control a module

    ","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(py)moduleType":{"name":"moduleType","abstract":"

    The module type that the app requests to control.

    ","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(py)moduleIds":{"name":"moduleIds","abstract":"

    Ids of a module of same type, published by System Capability.

    ","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:moduleId:":{"name":"-initWithModuleType:moduleId:","abstract":"

    Convenience init to get information of a particular module type with a module ID.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:moduleId:":{"name":"-initAndSubscribeToModuleType:moduleId:","abstract":"

    Convenience init to get information and subscribe to a particular module type with a module ID.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:moduleId:":{"name":"-initAndUnsubscribeToModuleType:moduleId:","abstract":"

    Convenience init to unsubscribe from particular module with a module ID.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:":{"name":"-initWithModuleType:","abstract":"

    Convenience init to get information of a particular module type.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:":{"name":"-initAndSubscribeToModuleType:","abstract":"

    Convenience init to get information and subscribe to a particular module type.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:":{"name":"-initAndUnsubscribeToModuleType:","abstract":"

    Convenience init to unsubscribe from particular module type.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleType":{"name":"moduleType","abstract":"

    The type of a RC module to retrieve module data from the vehicle.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleId":{"name":"moduleId","abstract":"

    Id of a module, published by System Capability.

    ","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)subscribe":{"name":"subscribe","abstract":"

    If subscribe is true, the head unit will register OnInteriorVehicleData notifications for the requested module (moduleId and moduleType).","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(im)initWithOffset:length:fileType:crc:":{"name":"-initWithOffset:length:fileType:crc:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)offset":{"name":"offset","abstract":"

    Optional offset in bytes for resuming partial data chunks.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)length":{"name":"length","abstract":"

    Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)fileType":{"name":"fileType","abstract":"

    File type that is being sent in response.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)crc":{"name":"crc","abstract":"

    Additional CRC32 checksum to protect data integrity up to 512 Mbits.

    ","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:appServiceId:fileType:":{"name":"-initWithFileName:appServiceId:fileType:","abstract":"

    Convenience init for sending a small file.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:appServiceId:fileType:offset:length:":{"name":"-initWithFileName:appServiceId:fileType:offset:length:","abstract":"

    Convenience init for sending a large file in multiple data chunks.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)fileName":{"name":"fileName","abstract":"

    File name that should be retrieved.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)appServiceId":{"name":"appServiceId","abstract":"

    ID of the service that should have uploaded the requested file.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)fileType":{"name":"fileType","abstract":"

    Selected file type.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)offset":{"name":"offset","abstract":"

    Optional offset in bytes for resuming partial data chunks.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)length":{"name":"length","abstract":"

    Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded.

    ","parent_name":"SDLGetFile"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)ecuHeader":{"name":"ecuHeader","abstract":"

    2 byte ECU Header for DTC response (as defined in VHR_Layout_Specification_DTCs.pdf)

    ","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)dtc":{"name":"dtc","abstract":"

    Array of all reported DTCs on module (ecuHeader contains information if list is truncated). Each DTC is represented by 4 bytes (3 bytes of data and 1 byte status as defined in VHR_Layout_Specification_DTCs.pdf).

    ","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:":{"name":"-initWithECUName:","abstract":"

    Convenience init

    ","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:mask:":{"name":"-initWithECUName:mask:","abstract":"

    Convenience init with all properties

    ","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)ecuName":{"name":"ecuName","abstract":"

    a name of the module to receive the DTC form","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)dtcMask":{"name":"dtcMask","abstract":"

    DTC Mask Byte to be sent in diagnostic request to module. NSNumber* dtcMask Minvalue:0; Maxvalue:255

    ","parent_name":"SDLGetDTCs"},"Classes/SDLGetCloudAppPropertiesResponse.html#/c:objc(cs)SDLGetCloudAppPropertiesResponse(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"

    Convenience init.

    ","parent_name":"SDLGetCloudAppPropertiesResponse"},"Classes/SDLGetCloudAppPropertiesResponse.html#/c:objc(cs)SDLGetCloudAppPropertiesResponse(py)properties":{"name":"properties","abstract":"

    The requested cloud application properties.

    ","parent_name":"SDLGetCloudAppPropertiesResponse"},"Classes/SDLGetCloudAppProperties.html#/c:objc(cs)SDLGetCloudAppProperties(im)initWithAppID:":{"name":"-initWithAppID:","abstract":"

    Convenience init.

    ","parent_name":"SDLGetCloudAppProperties"},"Classes/SDLGetCloudAppProperties.html#/c:objc(cs)SDLGetCloudAppProperties(py)appID":{"name":"appID","abstract":"

    The id of the cloud app.

    ","parent_name":"SDLGetCloudAppProperties"},"Classes/SDLGetAppServiceDataResponse.html#/c:objc(cs)SDLGetAppServiceDataResponse(im)initWithAppServiceData:":{"name":"-initWithAppServiceData:","abstract":"

    Convenience init.

    ","parent_name":"SDLGetAppServiceDataResponse"},"Classes/SDLGetAppServiceDataResponse.html#/c:objc(cs)SDLGetAppServiceDataResponse(py)serviceData":{"name":"serviceData","abstract":"

    Contains all the current data of the app service.

    ","parent_name":"SDLGetAppServiceDataResponse"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initWithAppServiceType:":{"name":"-initWithAppServiceType:","abstract":"

    Convenience init for service type.

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initAndSubscribeToAppServiceType:":{"name":"-initAndSubscribeToAppServiceType:","abstract":"

    Convenience init for subscribing to a service type.

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initAndUnsubscribeToAppServiceType:":{"name":"-initAndUnsubscribeToAppServiceType:","abstract":"

    Convenience init for unsubscribing to a service type

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(py)serviceType":{"name":"serviceType","abstract":"

    The type of service that is to be offered by this app. See AppServiceType for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(py)subscribe":{"name":"subscribe","abstract":"

    If true, the consumer is requesting to subscribe to all future updates from the service publisher. If false, the consumer doesn’t wish to subscribe and should be unsubscribed if it was previously subscribed.

    ","parent_name":"SDLGetAppServiceData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"

    longitude degrees

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"

    latitude degrees

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcYear":{"name":"utcYear","abstract":"

    utc year

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMonth":{"name":"utcMonth","abstract":"

    utc month

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcDay":{"name":"utcDay","abstract":"

    utc day

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcHours":{"name":"utcHours","abstract":"

    utc hours

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMinutes":{"name":"utcMinutes","abstract":"

    utc minutes

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcSeconds":{"name":"utcSeconds","abstract":"

    utc seconds

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)compassDirection":{"name":"compassDirection","abstract":"

    Optional, Potential Compass Directions

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)pdop":{"name":"pdop","abstract":"

    The 3D positional dilution of precision.

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)hdop":{"name":"hdop","abstract":"

    The horizontal dilution of precision

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)vdop":{"name":"vdop","abstract":"

    the vertical dilution of precision

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)actual":{"name":"actual","abstract":"

    What the coordinates are based on

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)satellites":{"name":"satellites","abstract":"

    The number of satellites in view

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)dimension":{"name":"dimension","abstract":"

    The supported dimensions of the GPS

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)altitude":{"name":"altitude","abstract":"

    Altitude in meters

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)heading":{"name":"heading","abstract":"

    Heading based on the GPS data.

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)speed":{"name":"speed","abstract":"

    Speed in KPH

    ","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)shifted":{"name":"shifted","abstract":"

    True, if GPS lat/long, time, and altitude have been purposefully shifted (requires a proprietary algorithm to unshift).","parent_name":"SDLGPSData"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(cm)sharedInstance":{"name":"+sharedInstance","abstract":"

    The shared object for pulling function id information

    ","parent_name":"SDLFunctionID"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(im)functionNameForId:":{"name":"-functionNameForId:","abstract":"

    Gets the function name for a given SDL RPC function ID

    ","parent_name":"SDLFunctionID"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(im)functionIdForName:":{"name":"-functionIdForName:","abstract":"

    Gets the function ID for a given SDL RPC function name

    ","parent_name":"SDLFunctionID"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)type":{"name":"type","abstract":"

    The vehicle’s fuel type

    ","parent_name":"SDLFuelRange"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)range":{"name":"range","abstract":"

    The estimate range in KM the vehicle can travel based on fuel level and consumption.

    ","parent_name":"SDLFuelRange"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)artworkRetryCount":{"name":"artworkRetryCount","abstract":"

    Defines the number of times the file manager will attempt to reupload SDLArtwork files in the event of a failed upload to Core.

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)fileRetryCount":{"name":"fileRetryCount","abstract":"

    Defines the number of times the file manager will attempt to reupload general SDLFiles in the event of a failed upload to Core.

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"

    Creates a default file manager configuration.

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)init":{"name":"-init","abstract":"

    Use defaultConfiguration instead

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)initWithArtworkRetryCount:fileRetryCount:":{"name":"-initWithArtworkRetryCount:fileRetryCount:","abstract":"

    Creates a file manager configuration with customized upload retry counts.

    ","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)remoteFileNames":{"name":"remoteFileNames","abstract":"

    A set of all names of files known on the remote head unit. Known files can be used or deleted on the remote system.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)bytesAvailable":{"name":"bytesAvailable","abstract":"

    The number of bytes still available for files for this app.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)currentState":{"name":"currentState","abstract":"

    The state of the file manager.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)pendingTransactions":{"name":"pendingTransactions","abstract":"

    The currently pending transactions (Upload, Delete, and List Files) in the file manager

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)suspended":{"name":"suspended","abstract":"

    Whether or not the file manager is suspended. If suspended, the file manager can continue to queue uploads and deletes, but will not actually perform any of those until it is no longer suspended. This can be used for throttling down the file manager if other, important operations are taking place over the accessory connection.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)init":{"name":"-init","abstract":"

    Initialize the class…or not, since this method is unavailable. Dependencies must be injected using initWithConnectionManager:

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"

    Creates a new file manager with a specified connection manager

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"

    Creates a new file manager with a specified connection manager and configuration

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"

    The manager stars up and attempts to fetch its initial list and transfer initial files.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)stop":{"name":"-stop","abstract":"

    Cancels all file manager operations and deletes all associated data.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)hasUploadedFile:":{"name":"-hasUploadedFile:","abstract":"

    Check if the remote system contains a file

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFileWithName:completionHandler:":{"name":"-deleteRemoteFileWithName:completionHandler:","abstract":"

    Delete a file stored on the remote system

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFilesWithNames:completionHandler:":{"name":"-deleteRemoteFilesWithNames:completionHandler:","abstract":"

    Deletes an array of files on the remote file system. The files are deleted in the order in which they are added to the array, with the first file to be deleted at index 0. The delete queue is sequential, meaning that once a delete request is sent to Core, the queue waits until a response is received from Core before the next the next delete request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFile:completionHandler:":{"name":"-uploadFile:completionHandler:","abstract":"

    Upload a file to the remote file system. If a file with the [SDLFile name] already exists, this will overwrite that file. If you do not want that to happen, check remoteFileNames before uploading, or change allowOverwrite to NO.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:progressHandler:completionHandler:":{"name":"-uploadFiles:progressHandler:completionHandler:","abstract":"

    Uploads an array of files to the remote file system. The files will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:completionHandler:":{"name":"-uploadFiles:completionHandler:","abstract":"

    Uploads an array of files to the remote file system. The files will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtwork:completionHandler:":{"name":"-uploadArtwork:completionHandler:","abstract":"

    Uploads an artwork file to the remote file system and returns the name of the uploaded artwork once completed. If an artwork with the same name is already on the remote system, the artwork is not uploaded and the artwork name is simply returned.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:completionHandler:":{"name":"-uploadArtworks:completionHandler:","abstract":"

    Uploads an array of artworks to the remote file system. The artworks will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:progressHandler:completionHandler:":{"name":"-uploadArtworks:progressHandler:completionHandler:","abstract":"

    Uploads an array of artworks to the remote file system. The artworks will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.

    ","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(cm)temporaryFileDirectory":{"name":"+temporaryFileDirectory","abstract":"

    A URL to the directory where temporary files are stored. When an SDLFile is created with NSData, it writes to a temporary file until the file manager finishes uploading it.

    ","parent_name":"SDLFileManager"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)persistent":{"name":"persistent","abstract":"

    Whether or not the file should persist on disk between car ignition cycles.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)overwrite":{"name":"overwrite","abstract":"

    Whether or not the file should overwrite an existing file on the remote disk with the same name.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)name":{"name":"name","abstract":"

    The name the file should be stored under on the remote disk. This is how the file will be referenced in all later calls.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileURL":{"name":"fileURL","abstract":"

    The url the local file is stored at while waiting to push it to the remote system. If the data has not been passed to the file URL, this will be nil.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)data":{"name":"data","abstract":"

    The binary data of the SDLFile. If initialized with data, this will be a relatively quick call, but if initialized with a file URL, this is a rather expensive call the first time. The data will be cached in RAM after the first call.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileSize":{"name":"fileSize","abstract":"

    The size of the binary data of the SDLFile.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileType":{"name":"fileType","abstract":"

    The system will attempt to determine the type of file that you have passed in. It will default to BINARY if it does not recognize the file type or the file type is not supported by SDL.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)inputStream":{"name":"inputStream","abstract":"

    A stream to pull binary data from a SDLFile. The stream only pulls required data from the file on disk or in memory. This reduces memory usage while uploading a large file to the remote system as each chunk of data can be released immediately after it is uploaded.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)isStaticIcon":{"name":"isStaticIcon","abstract":"

    Describes whether or not this file is represented by static icon data. The head unit will present its representation of the static icon concept when sent this data.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)init":{"name":"-init","abstract":"

    Initializer unavailable

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithFileURL:name:persistent:":{"name":"-initWithFileURL:name:persistent:","abstract":"

    The designated initializer for an SDL File. The only major property that is not set using this is “overwrite”, which defaults to NO.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileAtFileURL:name:":{"name":"+persistentFileAtFileURL:name:","abstract":"

    Create an SDL file using a local file URL.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileAtFileURL:name:":{"name":"+fileAtFileURL:name:","abstract":"

    Create an SDL file using a local file URL.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithData:name:fileExtension:persistent:":{"name":"-initWithData:name:fileExtension:persistent:","abstract":"

    Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileWithData:name:fileExtension:":{"name":"+persistentFileWithData:name:fileExtension:","abstract":"

    Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.

    ","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileWithData:name:fileExtension:":{"name":"+fileWithData:name:fileExtension:","abstract":"

    Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.

    ","parent_name":"SDLFile"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(im)initWithChannelId:channelSetting:":{"name":"-initWithChannelId:channelSetting:","abstract":"

    Convenience init

    ","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelName":{"name":"channelName","abstract":"

    @abstract Read-only channel / frequency name","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelSetting":{"name":"channelSetting","abstract":"

    @abstract Reflects the setting, from 0%-100%.

    ","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelId":{"name":"channelId","abstract":"

    @abstract id of the channel.

    ","parent_name":"SDLEqualizerSettings"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"

    A set of security managers used to encrypt traffic data. Each OEM has their own proprietary security manager.

    ","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(py)delegate":{"name":"delegate","abstract":"

    A delegate callback that will tell you when an acknowledgement has occurred for starting as secure service.

    ","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"

    Creates a default encryption configuration.

    ","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(im)initWithSecurityManagers:delegate:":{"name":"-initWithSecurityManagers:delegate:","abstract":"

    Creates a secure configuration for each of the security managers provided.

    ","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncodedSyncPData.html#/c:objc(cs)SDLEncodedSyncPData(py)data":{"name":"data","abstract":"

    Contains base64 encoded string of SyncP packets.

    ","parent_name":"SDLEncodedSyncPData"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)emergencyEventType":{"name":"emergencyEventType","abstract":"

    References signal “VedsEvntType_D_Ltchd”. See EmergencyEventType.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)fuelCutoffStatus":{"name":"fuelCutoffStatus","abstract":"

    References signal “RCM_FuelCutoff”. See FuelCutoffStatus.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)rolloverEvent":{"name":"rolloverEvent","abstract":"

    References signal “VedsEvntRoll_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)maximumChangeVelocity":{"name":"maximumChangeVelocity","abstract":"

    References signal “VedsMaxDeltaV_D_Ltchd”. Change in velocity in KPH.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)multipleEvents":{"name":"multipleEvents","abstract":"

    References signal “VedsMultiEvnt_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLEmergencyEvent"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallNotificationStatus":{"name":"eCallNotificationStatus","abstract":"

    References signal “eCallNotification_4A”. See VehicleDataNotificationStatus.

    ","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)auxECallNotificationStatus":{"name":"auxECallNotificationStatus","abstract":"

    References signal “eCallNotification”. See VehicleDataNotificationStatus.

    ","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallConfirmationStatus":{"name":"eCallConfirmationStatus","abstract":"

    References signal “eCallConfirmation”. See ECallConfirmationStatus.

    ","parent_name":"SDLECallInfo"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:":{"name":"-initWithDisplayName:","abstract":"

    Init with required properties

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:windowTypeSupported:windowCapabilities:":{"name":"-initWithDisplayName:windowTypeSupported:windowCapabilities:","abstract":"

    This method is broken (the types don’t match the parameter names) and will always return nil. Use initWithDisplayName:windowCapabilities:windowTypeSupported: instead.

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:windowCapabilities:windowTypeSupported:":{"name":"-initWithDisplayName:windowCapabilities:windowTypeSupported:","abstract":"

    Init with all the properities

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)displayName":{"name":"displayName","abstract":"

    Name of the display.

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)windowTypeSupported":{"name":"windowTypeSupported","abstract":"

    Informs the application how many windows the app is allowed to create per type.

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)windowCapabilities":{"name":"windowCapabilities","abstract":"

    Contains a list of capabilities of all windows related to the app. Once the app has registered the capabilities of all windows will be provided, but GetSystemCapability still allows requesting window capabilities of all windows.

    ","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayType":{"name":"displayType","abstract":"

    The type of display

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayName":{"name":"displayName","abstract":"

    The name of the connected display

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)textFields":{"name":"textFields","abstract":"

    An array of SDLTextField structures, each of which describes a field in the HMI which the application can write to using operations such as SDLShow, SDLSetMediaClockTimer, etc.

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)imageFields":{"name":"imageFields","abstract":"

    An array of SDLImageField elements

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)mediaClockFormats":{"name":"mediaClockFormats","abstract":"

    An array of SDLMediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)graphicSupported":{"name":"graphicSupported","abstract":"

    The display’s persistent screen supports.

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)templatesAvailable":{"name":"templatesAvailable","abstract":"

    An array of all predefined persistent display templates available on the head unit.

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)screenParams":{"name":"screenParams","abstract":"

    A set of all parameters related to a prescribed screen area (e.g. for video / touch input)

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"

    The number of on-screen custom presets available (if any); otherwise omitted

    ","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(im)initWithNumber:":{"name":"-initWithNumber:","abstract":"

    Convenience init to initiate a dial number request

    ","parent_name":"SDLDialNumber"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(py)number":{"name":"number","abstract":"

    Up to 40 character string representing the phone number. All characters stripped except for ‘0’-‘9’, ‘*’, ‘#’, ‘,’, ‘;’, and ‘+’

    ","parent_name":"SDLDialNumber"},"Classes/SDLDiagnosticMessageResponse.html#/c:objc(cs)SDLDiagnosticMessageResponse(py)messageDataResult":{"name":"messageDataResult","abstract":"

    Array of bytes comprising CAN message result.

    ","parent_name":"SDLDiagnosticMessageResponse"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(im)initWithTargetId:length:data:":{"name":"-initWithTargetId:length:data:","abstract":"

    Convenience init

    ","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)targetID":{"name":"targetID","abstract":"

    Name of target ECU

    ","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageLength":{"name":"messageLength","abstract":"

    Length of message (in bytes)

    ","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageData":{"name":"messageData","abstract":"

    Array of bytes comprising CAN message.

    ","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)voiceRecOn":{"name":"voiceRecOn","abstract":"

    Indicates whether the voice recognition is on or off

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)btIconOn":{"name":"btIconOn","abstract":"

    Indicates whether the bluetooth connection established

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)callActive":{"name":"callActive","abstract":"

    Indicates whether a call is being active

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)phoneRoaming":{"name":"phoneRoaming","abstract":"

    Indicates whether the phone is in roaming mode

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)textMsgAvailable":{"name":"textMsgAvailable","abstract":"

    Indicates whether a textmessage is available

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)battLevelStatus":{"name":"battLevelStatus","abstract":"

    Battery level status

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)stereoAudioOutputMuted":{"name":"stereoAudioOutputMuted","abstract":"

    The status of the stereo audio output channel

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)monoAudioOutputMuted":{"name":"monoAudioOutputMuted","abstract":"

    The status of the mono audio output channel

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)signalLevelStatus":{"name":"signalLevelStatus","abstract":"

    Signal level status

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)primaryAudioSource":{"name":"primaryAudioSource","abstract":"

    The current primary audio source of SDL (if selected).

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)eCallEventActive":{"name":"eCallEventActive","abstract":"

    Indicates if an emergency call is active

    ","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(cm)currentDevice":{"name":"+currentDevice","abstract":"

    Convenience init. Object will contain all information about the connected device automatically.

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)hardware":{"name":"hardware","abstract":"

    Device model

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)firmwareRev":{"name":"firmwareRev","abstract":"

    Device firmware version

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)os":{"name":"os","abstract":"

    Device OS

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)osVersion":{"name":"osVersion","abstract":"

    Device OS version

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)carrier":{"name":"carrier","abstract":"

    Device mobile carrier

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)maxNumberRFCOMMPorts":{"name":"maxNumberRFCOMMPorts","abstract":"

    Number of bluetooth RFCOMM ports available.

    ","parent_name":"SDLDeviceInfo"},"Classes/SDLDeleteWindow.html#/c:objc(cs)SDLDeleteWindow(im)initWithId:":{"name":"-initWithId:","parent_name":"SDLDeleteWindow"},"Classes/SDLDeleteWindow.html#/c:objc(cs)SDLDeleteWindow(py)windowID":{"name":"windowID","abstract":"

    A unique ID to identify the window.

    ","parent_name":"SDLDeleteWindow"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(im)initWithId:":{"name":"-initWithId:","abstract":"

    Convenience init to delete a submenu

    ","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(py)menuID":{"name":"menuID","abstract":"

    the MenuID that identifies the SDLSubMenu to be delete","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(im)initWithId:":{"name":"-initWithId:","abstract":"

    Convenience init to delete a choice set

    ","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"

    a unique ID that identifies the Choice Set","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteFileResponse.html#/c:objc(cs)SDLDeleteFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"

    The remaining available space for your application to store data on the remote system.

    ","parent_name":"SDLDeleteFileResponse"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"

    Convenience init to delete a file

    ","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(py)syncFileName":{"name":"syncFileName","abstract":"

    a file reference name","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(im)initWithId:":{"name":"-initWithId:","abstract":"

    Convenience init to remove a command from the menu

    ","parent_name":"SDLDeleteCommand"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(py)cmdID":{"name":"cmdID","abstract":"

    the Command ID that identifies the Command to be deleted from Command Menu","parent_name":"SDLDeleteCommand"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:":{"name":"-initWithHour:minute:","abstract":"

    Convenience init for creating a date

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:":{"name":"-initWithHour:minute:second:millisecond:","abstract":"

    Convenience init for creating a date

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:day:month:year:":{"name":"-initWithHour:minute:second:millisecond:day:month:year:","abstract":"

    Convenience init for creating a date

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:day:month:year:timezoneMinuteOffset:timezoneHourOffset:":{"name":"-initWithHour:minute:second:millisecond:day:month:year:timezoneMinuteOffset:timezoneHourOffset:","abstract":"

    Convenience init for creating a date with all properties

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)millisecond":{"name":"millisecond","abstract":"

    Milliseconds part of time

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)second":{"name":"second","abstract":"

    Seconds part of time

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)minute":{"name":"minute","abstract":"

    Minutes part of time

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)hour":{"name":"hour","abstract":"

    Hour part of time

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)day":{"name":"day","abstract":"

    Day of the month

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)month":{"name":"month","abstract":"

    Month of the year

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)year":{"name":"year","abstract":"

    The year in YYYY format

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneMinuteOffset":{"name":"timezoneMinuteOffset","abstract":"

    Time zone offset in Min with regard to UTC

    ","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneHourOffset":{"name":"timezoneHourOffset","abstract":"

    Time zone offset in Hours with regard to UTC

    ","parent_name":"SDLDateTime"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)resultCode":{"name":"resultCode","abstract":"

    Individual DID result code.

    ","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)didLocation":{"name":"didLocation","abstract":"

    Location of raw data from vehicle data DID

    ","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)data":{"name":"data","abstract":"

    Raw DID-based data returned for requested element.

    ","parent_name":"SDLDIDResult"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(im)initWithId:windowName:windowType:":{"name":"-initWithId:windowName:windowType:","abstract":"

    Constructor with the required parameters

    ","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(im)initWithId:windowName:windowType:associatedServiceType:duplicateUpdatesFromWindowID:":{"name":"-initWithId:windowName:windowType:associatedServiceType:duplicateUpdatesFromWindowID:","abstract":"

    Convinience constructor with all the parameters.

    ","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)windowID":{"name":"windowID","abstract":"

    A unique ID to identify the window.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)windowName":{"name":"windowName","abstract":"

    The window name to be used by the HMI.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)type":{"name":"type","abstract":"

    The type of the window to be created. Main window or widget.

    ","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)associatedServiceType":{"name":"associatedServiceType","abstract":"

    Allows an app to create a widget related to a specific service type.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)duplicateUpdatesFromWindowID":{"name":"duplicateUpdatesFromWindowID","abstract":"

    Optional parameter. Specify whether the content sent to an existing window should be duplicated to the created window. If there isn’t a window with the ID, the request will be rejected with INVALID_DATA.

    ","parent_name":"SDLCreateWindow"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(im)initWithId:choiceSet:":{"name":"-initWithId:choiceSet:","abstract":"

    Convenience init for creating a choice set RPC

    ","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"

    A unique ID that identifies the Choice Set

    ","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)choiceSet":{"name":"choiceSet","abstract":"

    Array of choices, which the user can select by menu or voice recognition

    ","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lifecycleConfig":{"name":"lifecycleConfig","abstract":"

    The lifecycle configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lockScreenConfig":{"name":"lockScreenConfig","abstract":"

    The lock screen configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)loggingConfig":{"name":"loggingConfig","abstract":"

    The log configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)streamingMediaConfig":{"name":"streamingMediaConfig","abstract":"

    The streaming media configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig":{"name":"fileManagerConfig","abstract":"

    The file manager configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)encryptionConfig":{"name":"encryptionConfig","abstract":"

    The encryption configuration.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:":{"name":"-initWithLifecycle:lockScreen:logging:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:encryption:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:encryption:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, file manager and encryption configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:":{"name":"+configurationWithLifecycle:lockScreen:logging:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:fileManager:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media, file manager and encryption configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"

    Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.

    ","parent_name":"SDLConfiguration"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeActive":{"name":"powerModeActive","abstract":"

    References signal “PowerMode_UB”.

    ","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeQualificationStatus":{"name":"powerModeQualificationStatus","abstract":"

    References signal “PowerModeQF”. See PowerModeQualificationStatus.

    ","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)carModeStatus":{"name":"carModeStatus","abstract":"

    References signal “CarMode”. See CarMode.

    ","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeStatus":{"name":"powerModeStatus","abstract":"

    References signal “PowerMode”. See PowerMode.

    ","parent_name":"SDLClusterModeStatus"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(im)initWithAppID:":{"name":"-initWithAppID:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(im)initWithAppID:nicknames:enabled:authToken:cloudTransportType:hybridAppPreference:endpoint:":{"name":"-initWithAppID:nicknames:enabled:authToken:cloudTransportType:hybridAppPreference:endpoint:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)nicknames":{"name":"nicknames","abstract":"

    An array of app names a cloud app is allowed to register with. If included in a SetCloudAppProperties request, this value will overwrite the existing “nicknames” field in the app policies section of the policy table.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)appID":{"name":"appID","abstract":"

    The id of the cloud app.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)enabled":{"name":"enabled","abstract":"

    If true, the cloud app will appear in the HMI’s app list; if false, the cloud app will not appear in the HMI’s app list.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)authToken":{"name":"authToken","abstract":"

    Used to authenticate websocket connection on app activation.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)cloudTransportType":{"name":"cloudTransportType","abstract":"

    Specifies the connection type Core should use. Currently the ones that work in SDL Core are WS or WSS, but an OEM can implement their own transport adapter to handle different values.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)hybridAppPreference":{"name":"hybridAppPreference","abstract":"

    Specifies the user preference to use the cloud app version or mobile app version when both are available.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)endpoint":{"name":"endpoint","abstract":"

    The websocket endpoint.

    ","parent_name":"SDLCloudAppProperties"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:","abstract":"

    Convenience init for climate control data.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:","abstract":"

    Convenience init for climate control data.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:climateEnable:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:climateEnable:","abstract":"

    Convenience init for climate control data with all properties.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)fanSpeed":{"name":"fanSpeed","abstract":"

    Speed of Fan in integer

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)currentTemperature":{"name":"currentTemperature","abstract":"

    The Current Temperature in SDLTemperature

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)desiredTemperature":{"name":"desiredTemperature","abstract":"

    Desired Temperature in SDLTemperature

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acEnable":{"name":"acEnable","abstract":"

    Represents if AC is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)circulateAirEnable":{"name":"circulateAirEnable","abstract":"

    Represents if circulation of air is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)autoModeEnable":{"name":"autoModeEnable","abstract":"

    Represents if auto mode is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)defrostZone":{"name":"defrostZone","abstract":"

    Represents the kind of defrost zone.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)dualModeEnable":{"name":"dualModeEnable","abstract":"

    Represents if dual mode is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acMaxEnable":{"name":"acMaxEnable","abstract":"

    Represents if ac max is enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)ventilationMode":{"name":"ventilationMode","abstract":"

    Represents the kind of Ventilation zone.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedSteeringWheelEnable":{"name":"heatedSteeringWheelEnable","abstract":"

    @abstract value false means disabled/turn off, value true means enabled/turn on.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedWindshieldEnable":{"name":"heatedWindshieldEnable","abstract":"

    @abstract value false means disabled, value true means enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedRearWindowEnable":{"name":"heatedRearWindowEnable","abstract":"

    @abstract value false means disabled, value true means enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedMirrorsEnable":{"name":"heatedMirrorsEnable","abstract":"

    @abstract Value false means disabled, value true means enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)climateEnable":{"name":"climateEnable","abstract":"

    @abstract Value false means disabled, value true means enabled.

    ","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:","abstract":"

    Convenience init to describe the climate control capabilities.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:","abstract":"

    Convenience init to describe the climate control capabilities.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:","abstract":"

    Convenience init to describe the climate control capabilities.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:moduleInfo:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:":{"name":"-initWithModuleName:moduleInfo:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:","abstract":"

    Convenience init to describe the climate control capabilities with all properities.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)moduleName":{"name":"moduleName","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)fanSpeedAvailable":{"name":"fanSpeedAvailable","abstract":"

    Availability of the control of fan speed.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)desiredTemperatureAvailable":{"name":"desiredTemperatureAvailable","abstract":"

    Availability of the control of desired temperature.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acEnableAvailable":{"name":"acEnableAvailable","abstract":"

    Availability of the control of turn on/off AC.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acMaxEnableAvailable":{"name":"acMaxEnableAvailable","abstract":"

    Availability of the control of enable/disable air conditioning is ON on the maximum level.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)circulateAirEnableAvailable":{"name":"circulateAirEnableAvailable","abstract":"

    Availability of the control of enable/disable circulate Air mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)autoModeEnableAvailable":{"name":"autoModeEnableAvailable","abstract":"

    Availability of the control of enable/disable auto mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)dualModeEnableAvailable":{"name":"dualModeEnableAvailable","abstract":"

    Availability of the control of enable/disable dual mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZoneAvailable":{"name":"defrostZoneAvailable","abstract":"

    Availability of the control of defrost zones.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZone":{"name":"defrostZone","abstract":"

    A set of all defrost zones that are controllable.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationModeAvailable":{"name":"ventilationModeAvailable","abstract":"

    Availability of the control of air ventilation mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationMode":{"name":"ventilationMode","abstract":"

    A set of all ventilation modes that are controllable.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedSteeringWheelAvailable":{"name":"heatedSteeringWheelAvailable","abstract":"

    @abstract Availability of the control (enable/disable) of heated Steering Wheel.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedWindshieldAvailable":{"name":"heatedWindshieldAvailable","abstract":"

    @abstract Availability of the control (enable/disable) of heated Windshield.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedRearWindowAvailable":{"name":"heatedRearWindowAvailable","abstract":"

    @abstract Availability of the control (enable/disable) of heated Rear Window.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedMirrorsAvailable":{"name":"heatedMirrorsAvailable","abstract":"

    @abstract Availability of the control (enable/disable) of heated Mirrors.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)climateEnableAvailable":{"name":"climateEnableAvailable","abstract":"

    @abstract Availability of the control of enable/disable climate control.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout":{"name":"defaultTimeout","abstract":"

    Set this to change the default timeout for all choice sets. If a timeout is not set on an individual choice set object (or if it is set to 0.0), then it will use this timeout instead. See timeout for more details. If this is not set by you, it will default to 10 seconds.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultLayout":{"name":"defaultLayout","abstract":"

    Set this to change the default layout for all choice sets. If a layout is not set on an individual choice set object, then it will use this layout instead. See layout for more details. If this is not set by you, it will default to SDLChoiceSetLayoutList.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)title":{"name":"title","abstract":"

    Maps to PerformInteraction.initialText. The title of the choice set, and/or the initial text on a keyboard prompt.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)initialPrompt":{"name":"initialPrompt","abstract":"

    Maps to PerformInteraction.initialPrompt. The initial prompt spoken to the user at the start of an interaction.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout":{"name":"layout","abstract":"

    Maps to PerformInteraction.interactionLayout. Whether the presented choices are arranged as a set of tiles or a list.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout":{"name":"timeout","abstract":"

    Maps to PerformInteraction.timeout. This applies only to a manual selection (not a voice selection, which has its timeout handled by the system). Defaults to defaultTimeout.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"

    Maps to PerformInteraction.timeoutPrompt. This text is spoken when a VR interaction times out. If this set is presented in a manual (non-voice) only interaction, this will be ignored.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpPrompt":{"name":"helpPrompt","abstract":"

    Maps to PerformInteraction.helpPrompt. This is the spoken string when a user speaks “help” when the interaction is occurring.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpList":{"name":"helpList","abstract":"

    Maps to PerformInteraction.vrHelp. This is a list of help text presented to the user when they are in a voice recognition interaction from your choice set of options. If this set is presented in a touch only interaction, this will be ignored.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)delegate":{"name":"delegate","abstract":"

    The delegate of this choice set, called when the user interacts with it.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)choices":{"name":"choices","abstract":"

    The choices to be displayed to the user within this choice set. These choices could match those already preloaded via SDLScreenManager preloadChoices:withCompletionHandler:.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:choices:":{"name":"-initWithTitle:delegate:choices:","abstract":"

    Initialize with a title, delegate, and choices. It will use the default timeout and layout, all other properties (such as prompts) will be nil.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:":{"name":"-initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:","abstract":"

    Initializer with all possible properties.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:":{"name":"-initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:","abstract":"

    Initializer with all possible properties.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)cancel":{"name":"-cancel","abstract":"

    Cancels the choice set. If the choice set has not yet been sent to Core, it will not be sent. If the choice set is already presented on Core, the choice set will be immediately dismissed. Canceling an already presented choice set will only work if connected to Core versions 6.0+. On older versions of Core, the choice set will not be dismissed.

    ","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)text":{"name":"text","abstract":"

    Maps to Choice.menuName. The primary text of the cell. Duplicates within an SDLChoiceSet are not permitted and will result in the SDLChoiceSet failing to initialize.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryText":{"name":"secondaryText","abstract":"

    Maps to Choice.secondaryText. Optional secondary text of the cell, if available. Duplicates within an SDLChoiceSet are permitted.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)tertiaryText":{"name":"tertiaryText","abstract":"

    Maps to Choice.tertiaryText. Optional tertitary text of the cell, if available. Duplicates within an SDLChoiceSet are permitted.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)voiceCommands":{"name":"voiceCommands","abstract":"

    Maps to Choice.vrCommands. Optional voice commands the user can speak to activate the cell. If not set and the head unit requires it, this will be set to the number in the list that this item appears. However, this would be a very poor experience for a user if the choice set is presented as a voice only interaction or both interaction mode. Therefore, consider not setting this only when you know the choice set will be presented as a touch only interaction.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)artwork":{"name":"artwork","abstract":"

    Maps to Choice.image. Optional image for the cell. This will be uploaded before the cell is used when the cell is preloaded or presented for the first time.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryArtwork":{"name":"secondaryArtwork","abstract":"

    Maps to Choice.secondaryImage. Optional secondary image for the cell. This will be uploaded before the cell is used when the cell is preloaded or presented for the first time.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)init":{"name":"-init","abstract":"

    Initialize the cell with nothing. This is unavailable

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:":{"name":"-initWithText:","abstract":"

    Initialize the cell with text and nothing else.

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:artwork:voiceCommands:":{"name":"-initWithText:artwork:voiceCommands:","abstract":"

    Initialize the cell with text, optional artwork, and optional voice commands

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:":{"name":"-initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:","abstract":"

    Initialize the cell with all optional items

    ","parent_name":"SDLChoiceCell"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:":{"name":"-initWithId:menuName:vrCommands:","abstract":"

    Constructs a newly allocated SDLChangeRegistration object with the required parameters

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:image:secondaryText:secondaryImage:tertiaryText:":{"name":"-initWithId:menuName:vrCommands:image:secondaryText:secondaryImage:tertiaryText:","abstract":"

    Constructs a newly allocated SDLChangeRegistration object with all parameters

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)choiceID":{"name":"choiceID","abstract":"

    The application-scoped identifier that uniquely identifies this choice

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)menuName":{"name":"menuName","abstract":"

    Text which appears in menu, representing this choice

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)vrCommands":{"name":"vrCommands","abstract":"

    VR synonyms for this choice

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)image":{"name":"image","abstract":"

    The image of the choice

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryText":{"name":"secondaryText","abstract":"

    Secondary text to display; e.g. address of POI in a search result entry

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)tertiaryText":{"name":"tertiaryText","abstract":"

    Tertiary text to display; e.g. distance to POI for a search result entry

    ","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryImage":{"name":"secondaryImage","abstract":"

    Secondary image for choice

    ","parent_name":"SDLChoice"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:":{"name":"-initWithLanguage:hmiDisplayLanguage:","abstract":"

    Constructs a newly allocated SDLChangeRegistration object with required parameters

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:appName:ttsName:ngnMediaScreenAppName:vrSynonyms:":{"name":"-initWithLanguage:hmiDisplayLanguage:appName:ttsName:ngnMediaScreenAppName:vrSynonyms:","abstract":"

    Constructs a newly allocated SDLChangeRegistration object with all parameters

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)language":{"name":"language","abstract":"

    The language the app wants to change to

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"

    HMI display language

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)appName":{"name":"appName","abstract":"

    Request a new app name registration

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ttsName":{"name":"ttsName","abstract":"

    Request a new TTSName registration.

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"

    Request a new app short name registration

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)vrSynonyms":{"name":"vrSynonyms","abstract":"

    Request a new VR synonyms registration

    ","parent_name":"SDLChangeRegistration"},"Classes/SDLCarWindowViewController.html#/c:objc(cs)SDLCarWindowViewController(py)supportedOrientation":{"name":"supportedOrientation","abstract":"

    The supported interface orientation you wish to use. Defaults to MaskPortrait.

    ","parent_name":"SDLCarWindowViewController"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithFunctionID:":{"name":"-initWithFunctionID:","abstract":"

    Convenience init for dismissing the currently presented modal view (either an alert, slider, scrollable message, or perform interation).

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithFunctionID:cancelID:":{"name":"-initWithFunctionID:cancelID:","abstract":"

    Convenience init for dismissing a specific view.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithAlertCancelID:":{"name":"-initWithAlertCancelID:","abstract":"

    Convenience init for dismissing an alert.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithSliderCancelID:":{"name":"-initWithSliderCancelID:","abstract":"

    Convenience init for dismissing a slider.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithScrollableMessageCancelID:":{"name":"-initWithScrollableMessageCancelID:","abstract":"

    Convenience init for dismissing a scrollable message.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithPerformInteractionCancelID:":{"name":"-initWithPerformInteractionCancelID:","abstract":"

    Convenience init for dismissing a perform interaction.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)alert":{"name":"+alert","abstract":"

    Convenience init for dismissing the currently presented alert.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)slider":{"name":"+slider","abstract":"

    Convenience init for dismissing the currently presented slider.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)scrollableMessage":{"name":"+scrollableMessage","abstract":"

    Convenience init for dismissing the currently presented scrollable message.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)performInteraction":{"name":"+performInteraction","abstract":"

    Convenience init for dismissing the currently presented perform interaction.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(py)cancelID":{"name":"cancelID","abstract":"

    The ID of the specific interaction to dismiss. If not set, the most recent of the RPC type set in functionID will be dismissed.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(py)functionID":{"name":"functionID","abstract":"

    The ID of the type of interaction to dismiss.

    ","parent_name":"SDLCancelInteraction"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:":{"name":"-initWithButtonName:moduleType:","abstract":"

    Constructs a newly allocated SDLButtonPress object with the given parameters

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:moduleId:":{"name":"-initWithButtonName:moduleType:moduleId:","abstract":"

    Constructs a newly allocated SDLButtonPress object with the given parameters

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleType":{"name":"moduleType","abstract":"

    The module where the button should be pressed.

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleId":{"name":"moduleId","abstract":"

    Id of a module, published by System Capability.

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonName":{"name":"buttonName","abstract":"

    The name of supported RC climate or radio button.

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"

    Indicates whether this is a LONG or SHORT button press event.

    ","parent_name":"SDLButtonPress"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)name":{"name":"name","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"

    A NSNumber value indicates whether the button supports a SHORT press

    ","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"

    A NSNumber value indicates whether the button supports a LONG press

    ","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"

    A NSNumber value indicates whether the button supports “button down” and “button up”

    ","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLButtonCapabilities"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)parkBrakeActive":{"name":"parkBrakeActive","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)ignitionStableStatus":{"name":"ignitionStableStatus","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)ignitionStatus":{"name":"ignitionStatus","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)driverDoorAjar":{"name":"driverDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)passengerDoorAjar":{"name":"passengerDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)rearLeftDoorAjar":{"name":"rearLeftDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)rearRightDoorAjar":{"name":"rearRightDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBeltDeployed":{"name":"driverBeltDeployed","abstract":"

    References signal “VedsDrvBelt_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBeltDeployed":{"name":"passengerBeltDeployed","abstract":"

    References signal “VedsPasBelt_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBuckleBelted":{"name":"passengerBuckleBelted","abstract":"

    References signal “VedsRw1PasBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBuckleBelted":{"name":"driverBuckleBelted","abstract":"

    References signal “VedsRw1DrvBckl_D_Ltchd”. See VehicleDataEventStatus

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow2BuckleBelted":{"name":"leftRow2BuckleBelted","abstract":"

    References signal “VedsRw2lBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerChildDetected":{"name":"passengerChildDetected","abstract":"

    References signal “VedsRw1PasChld_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow2BuckleBelted":{"name":"rightRow2BuckleBelted","abstract":"

    References signal “VedsRw2rBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow2BuckleBelted":{"name":"middleRow2BuckleBelted","abstract":"

    References signal “VedsRw2mBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow3BuckleBelted":{"name":"middleRow3BuckleBelted","abstract":"

    References signal “VedsRw3mBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow3BuckleBelted":{"name":"leftRow3BuckleBelted","abstract":"

    References signal “VedsRw3lBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow3BuckleBelted":{"name":"rightRow3BuckleBelted","abstract":"

    References signal “VedsRw3rBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRearInflatableBelted":{"name":"leftRearInflatableBelted","abstract":"

    References signal “VedsRw2lRib_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRearInflatableBelted":{"name":"rightRearInflatableBelted","abstract":"

    References signal “VedsRw2rRib_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BeltDeployed":{"name":"middleRow1BeltDeployed","abstract":"

    References signal “VedsRw1mBelt_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BuckleBelted":{"name":"middleRow1BuckleBelted","abstract":"

    References signal “VedsRw1mBckl_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLBeltStatus"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)delegate":{"name":"delegate","abstract":"

    The delegate describing when files are done playing or any errors that occur

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)playing":{"name":"playing","abstract":"

    Whether or not we are currently playing audio

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)queue":{"name":"queue","abstract":"

    The queue of audio files that will be played in sequence

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)init":{"name":"-init","abstract":"

    Init should only occur with dependencies. use initWithManager:

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)initWithManager:":{"name":"-initWithManager:","abstract":"

    Create an audio stream manager with a reference to the parent stream manager.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithFileURL:":{"name":"-pushWithFileURL:","abstract":"

    Push a new file URL onto the queue after converting it into the correct PCM format for streaming binary data. Call playNextWhenReady to start playing the next completed pushed file.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithData:":{"name":"-pushWithData:","abstract":"

    Push a new audio buffer onto the queue. Call playNextWhenReady to start playing the pushed audio buffer.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)playNextWhenReady":{"name":"-playNextWhenReady","abstract":"

    Play the next item in the queue. If an item is currently playing, it will continue playing and this item will begin playing after it is completed.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)stop":{"name":"-stop","abstract":"

    Stop playing the queue after the current item completes and clear the queue. If nothing is playing, the queue will be cleared.

    ","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)samplingRate":{"name":"samplingRate","abstract":"

    The sampling rate for AudioPassThru

    ","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)bitsPerSample":{"name":"bitsPerSample","abstract":"

    The sample depth in bit for AudioPassThru

    ","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)audioType":{"name":"audioType","abstract":"

    The audiotype for AudioPassThru

    ","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)inputFileURL":{"name":"inputFileURL","abstract":"

    If initialized with a file URL, the file URL it came from

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)outputFileURL":{"name":"outputFileURL","abstract":"

    If initialized with a file URL, where the transcoder should produce the transcoded PCM audio file

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)estimatedDuration":{"name":"estimatedDuration","abstract":"

    In seconds. UINT32_MAX if unknown.

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)data":{"name":"data","abstract":"

    The PCM audio data to be transferred and played

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)fileSize":{"name":"fileSize","abstract":"

    The size of the PCM audio data in bytes

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(im)initWithInputFileURL:outputFileURL:estimatedDuration:":{"name":"-initWithInputFileURL:outputFileURL:estimatedDuration:","abstract":"

    Initialize an audio file to be queued and played

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(im)initWithData:":{"name":"-initWithData:","abstract":"

    Initialize a buffer of PCM audio data to be queued and played

    ","parent_name":"SDLAudioFile"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(im)initWithSource:keepContext:volume:equalizerSettings:":{"name":"-initWithSource:keepContext:volume:equalizerSettings:","abstract":"

    Constructs a newly allocated SDLAudioControlData object with given parameters

    ","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)source":{"name":"source","abstract":"

    @abstract In a getter response or a notification,","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)keepContext":{"name":"keepContext","abstract":"

    @abstract This parameter shall not be present in any getter responses or notifications.","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)volume":{"name":"volume","abstract":"

    @abstract Reflects the volume of audio, from 0%-100%.

    ","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)equalizerSettings":{"name":"equalizerSettings","abstract":"

    @abstract Defines the list of supported channels (band) and their current/desired settings on HMI

    ","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"

    Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:moduleInfo:":{"name":"-initWithModuleName:moduleInfo:","abstract":"

    Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:":{"name":"-initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:","abstract":"

    Constructs a newly allocated SDLAudioControlCapabilities object with given parameters

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:moduleInfo:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:":{"name":"-initWithModuleName:moduleInfo:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:","abstract":"

    Constructs a newly allocated SDLAudioControlCapabilities object with given parameters

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"

    @abstract The short friendly name of the audio control module.","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)sourceAvailable":{"name":"sourceAvailable","abstract":"

    @abstract Availability of the control of audio source.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)keepContextAvailable":{"name":"keepContextAvailable","abstract":"

    Availability of the keepContext parameter.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)volumeAvailable":{"name":"volumeAvailable","abstract":"

    @abstract Availability of the control of audio volume.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerAvailable":{"name":"equalizerAvailable","abstract":"

    @abstract Availability of the control of Equalizer Settings.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerMaxChannelId":{"name":"equalizerMaxChannelId","abstract":"

    @abstract Must be included if equalizerAvailable=true,","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"

    Information about a RC module, including its id.

    ","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)isTemplate":{"name":"isTemplate","abstract":"

    Describes whether or not the image is a template that can be (re)colored by the SDL HMI. To make the artwork a template, set the UIImages rendering mode to UIImageRenderingModeAlwaysTemplate. In order for templates to work successfully, the icon must be one solid color with a clear background. The artwork should be created using the PNG image format.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)imageRPC":{"name":"imageRPC","abstract":"

    The Image RPC representing this artwork. Generally for use internally, you should instead pass an artwork to a Screen Manager method.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:name:asImageFormat:":{"name":"+artworkWithImage:name:asImageFormat:","abstract":"

    Convenience helper to create an ephemeral artwork from an image.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:asImageFormat:":{"name":"+artworkWithImage:asImageFormat:","abstract":"

    Convenience helper to create an ephemeral artwork from an image. A unique name will be assigned to the image. This name is a string representation of the image’s data which is created by hashing the data using the MD5 algorithm.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithStaticIcon:":{"name":"+artworkWithStaticIcon:","abstract":"

    Create an SDLArtwork that represents a static icon. This can only be passed to the screen manager; passing this directly to the file manager will fail.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:name:asImageFormat:":{"name":"+persistentArtworkWithImage:name:asImageFormat:","abstract":"

    Convenience helper to create a persistent artwork from an image.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:asImageFormat:":{"name":"+persistentArtworkWithImage:asImageFormat:","abstract":"

    Convenience helper to create a persistent artwork from an image. A unique name will be assigned to the image. This name is a string representation of the image’s data which is created by hashing the data using the MD5 algorithm.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:name:persistent:asImageFormat:":{"name":"-initWithImage:name:persistent:asImageFormat:","abstract":"

    Create a file for transmission to the remote system from a UIImage.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:persistent:asImageFormat:":{"name":"-initWithImage:persistent:asImageFormat:","abstract":"

    Create a file for transmission to the remote system from a UIImage. A unique name will be assigned to the image. This name is a string representation of the image’s data which is created by hashing the data using the MD5 algorithm.

    ","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithStaticIcon:":{"name":"-initWithStaticIcon:","abstract":"

    Create an SDLArtwork that represents a static icon. This can only be passed to the screen manager; passing this directly to the file manager will fail.

    ","parent_name":"SDLArtwork"},"Classes/SDLAppServicesCapabilities.html#/c:objc(cs)SDLAppServicesCapabilities(im)initWithAppServices:":{"name":"-initWithAppServices:","abstract":"

    Convenience init.

    ","parent_name":"SDLAppServicesCapabilities"},"Classes/SDLAppServicesCapabilities.html#/c:objc(cs)SDLAppServicesCapabilities(py)appServices":{"name":"appServices","abstract":"

    An array of currently available services. If this is an update to the capability the affected services will include an update reason in that item.

    ","parent_name":"SDLAppServicesCapabilities"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(im)initWithServiceID:serviceManifest:servicePublished:serviceActive:":{"name":"-initWithServiceID:serviceManifest:servicePublished:serviceActive:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceID":{"name":"serviceID","abstract":"

    A unique ID tied to this specific service record. The ID is supplied by the module that services publish themselves.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceManifest":{"name":"serviceManifest","abstract":"

    Manifest for the service that this record is for.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)servicePublished":{"name":"servicePublished","abstract":"

    If true, the service is published and available. If false, the service has likely just been unpublished, and should be considered unavailable.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceActive":{"name":"serviceActive","abstract":"

    If true, the service is the active primary service of the supplied service type. It will receive all potential RPCs that are passed through to that service type. If false, it is not the primary service of the supplied type. See servicePublished for its availability.

    ","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithAppServiceType:":{"name":"-initWithAppServiceType:","abstract":"

    Convenience init for serviceType.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithMediaServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:":{"name":"-initWithMediaServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:","abstract":"

    Convenience init for a media service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithMediaServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:":{"name":"-initWithMediaServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:","abstract":"

    Convenience init for a media service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithWeatherServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:weatherServiceManifest:":{"name":"-initWithWeatherServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:weatherServiceManifest:","abstract":"

    Convenience init for a weather service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithWeatherServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:weatherServiceManifest:":{"name":"-initWithWeatherServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:weatherServiceManifest:","abstract":"

    Convenience init for a weather service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithNavigationServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:navigationServiceManifest:":{"name":"-initWithNavigationServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:navigationServiceManifest:","abstract":"

    Convenience init for a navigation service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithNavigationServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:navigationServiceManifest:":{"name":"-initWithNavigationServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:navigationServiceManifest:","abstract":"

    Convenience init for a navigation service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithServiceName:serviceType:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:":{"name":"-initWithServiceName:serviceType:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithServiceName:serviceType:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:":{"name":"-initWithServiceName:serviceType:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceName":{"name":"serviceName","abstract":"

    Unique name of this service.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceType":{"name":"serviceType","abstract":"

    The type of service that is to be offered by this app. See AppServiceType for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceIcon":{"name":"serviceIcon","abstract":"

    The file name of the icon to be associated with this service. Most likely the same as the appIcon.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)allowAppConsumers":{"name":"allowAppConsumers","abstract":"

    If true, app service consumers beyond the IVI system will be able to access this service. If false, only the IVI system will be able consume the service. If not provided, it is assumed to be false.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)rpcSpecVersion":{"name":"rpcSpecVersion","abstract":"

    This is the max RPC Spec version the app service understands. This is important during the RPC passthrough functionality. If not included, it is assumed the max version of the module is acceptable.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)maxRPCSpecVersion":{"name":"maxRPCSpecVersion","abstract":"

    This is the max RPC Spec version the app service understands. This is important during the RPC passthrough functionality. If not included, it is assumed the max version of the module is acceptable.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)handledRPCs":{"name":"handledRPCs","abstract":"

    This field contains the Function IDs for the RPCs that this service intends to handle correctly. This means the service will provide meaningful responses. See FunctionID for enum equivalent values. This parameter is an integer to allow for new function IDs to be used by apps on older versions of SDL Core.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)mediaServiceManifest":{"name":"mediaServiceManifest","abstract":"

    A media service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)weatherServiceManifest":{"name":"weatherServiceManifest","abstract":"

    A weather service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)navigationServiceManifest":{"name":"navigationServiceManifest","abstract":"

    A navigation service manifest.

    ","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithAppServiceType:serviceId:":{"name":"-initWithAppServiceType:serviceId:","abstract":"

    Convenience init for service type and service id.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithMediaServiceData:serviceId:":{"name":"-initWithMediaServiceData:serviceId:","abstract":"

    Convenience init for media service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithWeatherServiceData:serviceId:":{"name":"-initWithWeatherServiceData:serviceId:","abstract":"

    Convenience init for weather service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithNavigationServiceData:serviceId:":{"name":"-initWithNavigationServiceData:serviceId:","abstract":"

    Convenience init for navigation service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithAppServiceType:serviceId:mediaServiceData:weatherServiceData:navigationServiceData:":{"name":"-initWithAppServiceType:serviceId:mediaServiceData:weatherServiceData:navigationServiceData:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)serviceType":{"name":"serviceType","abstract":"

    The type of service that is to be offered by this app. See AppServiceType for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)serviceId":{"name":"serviceId","abstract":"

    A unique ID tied to this specific service record. The ID is supplied by the module that services publish themselves.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)mediaServiceData":{"name":"mediaServiceData","abstract":"

    The media service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)weatherServiceData":{"name":"weatherServiceData","abstract":"

    The weather service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)navigationServiceData":{"name":"navigationServiceData","abstract":"

    The navigation service data.

    ","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(im)initWithUpdatedAppServiceRecord:":{"name":"-initWithUpdatedAppServiceRecord:","abstract":"

    Convenience init for required parameters.

    ","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(im)initWithUpdateReason:updatedAppServiceRecord:":{"name":"-initWithUpdateReason:updatedAppServiceRecord:","abstract":"

    Convenience init for all parameters.

    ","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(py)updateReason":{"name":"updateReason","abstract":"

    Only included in OnSystemCapbilityUpdated. Update reason for this service record.

    ","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(py)updatedAppServiceRecord":{"name":"updatedAppServiceRecord","abstract":"

    Service record for a specific app service provider.

    ","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(cm)currentAppInfo":{"name":"+currentAppInfo","abstract":"

    Convenience init with no parameters

    ","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appDisplayName":{"name":"appDisplayName","abstract":"

    The name displayed for the mobile application on the mobile device (can differ from the app name set in the initial RAI request).

    ","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appBundleID":{"name":"appBundleID","abstract":"

    The AppBundleID of an iOS application or package name of the Android application. This supports App Launch strategies for each platform.

    ","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appVersion":{"name":"appVersion","abstract":"

    Represents the build version number of this particular mobile app.

    ","parent_name":"SDLAppInfo"},"Classes/SDLAlertResponse.html#/c:objc(cs)SDLAlertResponse(py)tryAgainTime":{"name":"tryAgainTime","abstract":"

    Amount of time (in seconds) that an app must wait before resending an alert.

    ","parent_name":"SDLAlertResponse"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTS:softButtons:":{"name":"-initWithTTS:softButtons:","abstract":"

    Convenience init to create an alert maneuver with required parameters

    ","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTSChunks:softButtons:":{"name":"-initWithTTSChunks:softButtons:","abstract":"

    Convenience init to create an alert maneuver with all parameters

    ","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)ttsChunks":{"name":"ttsChunks","abstract":"

    An array of text chunks.

    ","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)softButtons":{"name":"softButtons","abstract":"

    An arry of soft buttons. If omitted on supported displays, only the system defined “Close” SoftButton shall be displayed.

    ","parent_name":"SDLAlertManeuver"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText:softButtons:playTone:ttsChunks:alertIcon:cancelID:":{"name":"-initWithAlertText:softButtons:playTone:ttsChunks:alertIcon:cancelID:","abstract":"

    Convenience init for creating a modal view with text, buttons, and optional sound cues.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:playTone:":{"name":"-initWithTTSChunks:playTone:","abstract":"

    Convenience init for creating a sound-only alert.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:softButtons:playTone:ttsChunks:duration:progressIndicator:alertIcon:cancelID:":{"name":"-initWithAlertText1:alertText2:alertText3:softButtons:playTone:ttsChunks:duration:progressIndicator:alertIcon:cancelID:","abstract":"

    Convenience init for setting all alert parameters.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:duration:":{"name":"-initWithAlertText1:alertText2:duration:","abstract":"

    Convenience init for creating an alert with two lines of text and a timeout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:":{"name":"-initWithAlertText1:alertText2:alertText3:","abstract":"

    Convenience init for creating an alert with three lines of text.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:","abstract":"

    Convenience init for creating an alert with three lines of text and a timeout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:softButtons:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:softButtons:","abstract":"

    Convenience init for creating an alert with three lines of text and a timeout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:playTone:":{"name":"-initWithTTS:playTone:","abstract":"

    Convenience init for creating a speech-only alert.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:playTone:duration:","abstract":"

    Convenience init for creating an alert with two lines of text, optional sound cues, and a timout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:alertText3:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:alertText3:playTone:duration:","abstract":"

    Convenience init for creating an alert with three lines of text, optional sound cues, and a timout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:alertText1:alertText2:alertText3:playTone:softButtons:":{"name":"-initWithTTSChunks:alertText1:alertText2:alertText3:playTone:softButtons:","abstract":"

    Convenience init for creating an alert with three lines of text, soft buttons, and optional sound cues.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:alertText1:alertText2:alertText3:playTone:duration:softButtons:":{"name":"-initWithTTSChunks:alertText1:alertText2:alertText3:playTone:duration:softButtons:","abstract":"

    Convenience init for creating an alert with three lines of text, soft buttons, optional sound cues, and a timout.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText1":{"name":"alertText1","abstract":"

    The first line of the alert text field.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText2":{"name":"alertText2","abstract":"

    The second line of the alert text field.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText3":{"name":"alertText3","abstract":"

    The optional third line of the alert text field.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)ttsChunks":{"name":"ttsChunks","abstract":"

    An array of text chunks to be spoken or a prerecorded sound file.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)duration":{"name":"duration","abstract":"

    The duration of the displayed portion of the alert, in milliseconds. Typical timeouts are 3 - 5 seconds. If omitted, the timeout is set to a default of 5 seconds.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)playTone":{"name":"playTone","abstract":"

    Whether the alert tone should be played before the TTS (if any) is spoken. If omitted or set to false, no tone is played.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)progressIndicator":{"name":"progressIndicator","abstract":"

    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.).

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)softButtons":{"name":"softButtons","abstract":"

    Buttons for the displayed alert. If omitted on supported displays, the displayed alert shall not have any buttons.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)cancelID":{"name":"cancelID","abstract":"

    An ID for this specific alert to allow cancellation through the CancelInteraction RPC.

    ","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertIcon":{"name":"alertIcon","abstract":"

    Image to be displayed in the alert. If omitted on supported displays, no (or the default if applicable) icon should be displayed.

    ","parent_name":"SDLAlert"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverAirbagDeployed":{"name":"driverAirbagDeployed","abstract":"

    References signal “VedsDrvBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverSideAirbagDeployed":{"name":"driverSideAirbagDeployed","abstract":"

    References signal “VedsDrvSideBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverCurtainAirbagDeployed":{"name":"driverCurtainAirbagDeployed","abstract":"

    References signal “VedsDrvCrtnBag_D_Ltchd”. See VehicleDataEventStatus

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerAirbagDeployed":{"name":"passengerAirbagDeployed","abstract":"

    References signal “VedsPasBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerCurtainAirbagDeployed":{"name":"passengerCurtainAirbagDeployed","abstract":"

    References signal “VedsPasCrtnBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverKneeAirbagDeployed":{"name":"driverKneeAirbagDeployed","abstract":"

    References signal “VedsKneeDrvBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerSideAirbagDeployed":{"name":"passengerSideAirbagDeployed","abstract":"

    References signal “VedsPasSideBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerKneeAirbagDeployed":{"name":"passengerKneeAirbagDeployed","abstract":"

    References signal “VedsKneePasBag_D_Ltchd”. See VehicleDataEventStatus.

    ","parent_name":"SDLAirbagStatus"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:":{"name":"-initWithId:menuName:","abstract":"

    Convenience init for creating an add submenu

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:position:":{"name":"-initWithId:menuName:position:","abstract":"

    Convenience init for creating an add submenu

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuIcon:position:":{"name":"-initWithId:menuName:menuIcon:position:","abstract":"

    Convenience init for creating an add submenu

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuLayout:menuIcon:position:":{"name":"-initWithId:menuName:menuLayout:menuIcon:position:","abstract":"

    Convenience init for creating an add submenu with all properties.

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuID":{"name":"menuID","abstract":"

    a Menu ID that identifies a sub menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)position":{"name":"position","abstract":"

    a position of menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuName":{"name":"menuName","abstract":"

    a menuName which is displayed representing this submenu item","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuIcon":{"name":"menuIcon","abstract":"

    An image that is displayed alongside this submenu item

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuLayout":{"name":"menuLayout","abstract":"

    The sub-menu layout. See available menu layouts on SDLWindowCapability.menuLayoutsAvailable. Defaults to LIST.

    ","parent_name":"SDLAddSubMenu"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"

    Constructs a SDLAddCommand with a handler callback when an event occurs.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:handler:":{"name":"-initWithId:vrCommands:handler:","abstract":"

    Convenience init for creating a voice command menu item.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:handler:":{"name":"-initWithId:vrCommands:menuName:handler:","abstract":"

    Convenience init for creating a menu item with text.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:","abstract":"

    Convenience init for creating a menu item with text and a custom icon.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:","abstract":"

    Convenience init for creating a menu item with text and a custom icon.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:icon:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:icon:handler:","abstract":"

    Convenience init for creating a menu item with text and a custom icon.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler":{"name":"handler","abstract":"

    A handler that will let you know when the button you created is subscribed.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdID":{"name":"cmdID","abstract":"

    A unique id that identifies the command.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)menuParams":{"name":"menuParams","abstract":"

    A SDLMenuParams pointer which defines the command and how it is added to the command menu.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands":{"name":"vrCommands","abstract":"

    An array of strings to be used as VR synonyms for this command.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdIcon":{"name":"cmdIcon","abstract":"

    Image struct containing a static or dynamic icon.

    ","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html":{"name":"SDLAddCommand","abstract":"

    This class will add a command to the application’s Command Menu

    "},"Classes.html#/c:objc(cs)SDLAddCommandResponse":{"name":"SDLAddCommandResponse","abstract":"

    Response to SDLAddCommand

    "},"Classes/SDLAddSubMenu.html":{"name":"SDLAddSubMenu","abstract":"

    Add a SDLSubMenu to the Command Menu"},"Classes.html#/c:objc(cs)SDLAddSubMenuResponse":{"name":"SDLAddSubMenuResponse","abstract":"

    Response to SDLAddSubMenu

    "},"Classes/SDLAirbagStatus.html":{"name":"SDLAirbagStatus","abstract":"

    A vehicle data status struct for airbags

    "},"Classes/SDLAlert.html":{"name":"SDLAlert","abstract":"

    Shows an alert which typically consists of text-to-speech message and text on the display. Either alertText1, alertText2 or TTSChunks needs to be set or the request will be rejected.

    "},"Classes/SDLAlertManeuver.html":{"name":"SDLAlertManeuver","abstract":"

    Shows a SDLShowConstantTBT message with an optional voice command. This message is shown as an overlay over the display’s base screen.

    "},"Classes.html#/c:objc(cs)SDLAlertManeuverResponse":{"name":"SDLAlertManeuverResponse","abstract":"

    Response to SDLAlertManeuver

    "},"Classes/SDLAlertResponse.html":{"name":"SDLAlertResponse","abstract":"

    Response to SDLAlert

    "},"Classes/SDLAppInfo.html":{"name":"SDLAppInfo","abstract":"

    A struct used in register app interface. Contains detailed information about the registered application.

    "},"Classes/SDLAppServiceCapability.html":{"name":"SDLAppServiceCapability","abstract":"

    A currently available service.

    "},"Classes/SDLAppServiceData.html":{"name":"SDLAppServiceData","abstract":"

    Contains all the current data of the app service. The serviceType will link to which of the service data objects are included in this object (e.g. if the service type is MEDIA, the mediaServiceData param should be included).

    "},"Classes/SDLAppServiceManifest.html":{"name":"SDLAppServiceManifest","abstract":"

    This manifest contains all the information necessary for the service to be published, activated, and allow consumers to interact with it

    "},"Classes/SDLAppServiceRecord.html":{"name":"SDLAppServiceRecord","abstract":"

    This is the record of an app service publisher that the module has. It should contain the most up to date information including the service’s active state.

    "},"Classes/SDLAppServicesCapabilities.html":{"name":"SDLAppServicesCapabilities","abstract":"

    Capabilities of app services including what service types are supported and the current state of services.

    "},"Classes/SDLArtwork.html":{"name":"SDLArtwork","abstract":"

    An SDLFile subclass specifically designed for images

    "},"Classes/SDLAudioControlCapabilities.html":{"name":"SDLAudioControlCapabilities","abstract":"

    Describes a head unit’s audio control capabilities.

    "},"Classes/SDLAudioControlData.html":{"name":"SDLAudioControlData","abstract":"

    The audio control data information.

    "},"Classes/SDLAudioFile.html":{"name":"SDLAudioFile","abstract":"

    Includes inforamtion about a given audio file

    "},"Classes/SDLAudioPassThruCapabilities.html":{"name":"SDLAudioPassThruCapabilities","abstract":"

    Describes different audio type configurations for SDLPerformAudioPassThru, e.g. {8kHz,8-bit,PCM}

    "},"Classes/SDLAudioStreamManager.html":{"name":"SDLAudioStreamManager","abstract":"

    The manager to control the audio stream

    "},"Classes/SDLBeltStatus.html":{"name":"SDLBeltStatus","abstract":"

    Vehicle data struct for the seat belt status

    "},"Classes/SDLBodyInformation.html":{"name":"SDLBodyInformation","abstract":"

    The body information including power modes.

    "},"Classes/SDLButtonCapabilities.html":{"name":"SDLButtonCapabilities","abstract":"

    Provides information about the capabilities of a SDL HMI button.

    "},"Classes/SDLButtonPress.html":{"name":"SDLButtonPress","abstract":"

    This RPC allows a remote control type mobile application to simulate a hardware button press event.

    "},"Classes.html#/c:objc(cs)SDLButtonPressResponse":{"name":"SDLButtonPressResponse","abstract":"

    Response to SDLButtonPress

    "},"Classes/SDLCancelInteraction.html":{"name":"SDLCancelInteraction","abstract":"

    Used to dismiss a modal view programmatically without needing to wait for the timeout to complete. Can be used to dismiss alerts, scrollable messages, sliders, and perform interactions (i.e. pop-up menus).

    "},"Classes.html#/c:objc(cs)SDLCancelInteractionResponse":{"name":"SDLCancelInteractionResponse","abstract":"

    Response to the request to dismiss a modal view. If no applicable request can be dismissed, the resultCode will be IGNORED.

    "},"Classes/SDLCarWindowViewController.html":{"name":"SDLCarWindowViewController","abstract":"

    Note that if this is embedded in a UINavigationController and UITabBarController, it will not lock orientation. You must lock your container controller to a specific orientation.

    "},"Classes/SDLChangeRegistration.html":{"name":"SDLChangeRegistration","abstract":"

    If the app recognizes during the app registration that the SDL HMI language (voice/TTS and/or display) does not match the app language, the app will be able (but does not need) to change this registration with changeRegistration prior to app being brought into focus.

    "},"Classes.html#/c:objc(cs)SDLChangeRegistrationResponse":{"name":"SDLChangeRegistrationResponse","abstract":"

    Response to SDLChangeRegistrations

    "},"Classes/SDLChoice.html":{"name":"SDLChoice","abstract":"

    A choice is an option which a user can select either via the menu or via voice recognition (VR) during an application initiated interaction.

    "},"Classes/SDLChoiceCell.html":{"name":"SDLChoiceCell","abstract":"

    A selectable item within an SDLChoiceSet

    "},"Classes/SDLChoiceSet.html":{"name":"SDLChoiceSet","abstract":"

    The choice set to be displayed to the user. Contains a list of selectable options.

    "},"Classes/SDLClimateControlCapabilities.html":{"name":"SDLClimateControlCapabilities","abstract":"

    Contains information about a climate control module’s capabilities.

    "},"Classes/SDLClimateControlData.html":{"name":"SDLClimateControlData","abstract":"

    The current information for the Climate Remote Control Module

    "},"Classes.html#/c:objc(cs)SDLCloseApplication":{"name":"SDLCloseApplication","abstract":"

    Used by an app to set itself to a HMILevel of NONE. The app will close but will still be registered. If the app is a navigation app it will no longer be used as the preferred mobile-navigation application by the module.

    "},"Classes.html#/c:objc(cs)SDLCloseApplicationResponse":{"name":"SDLCloseApplicationResponse","abstract":"

    Response to the request to close this app on the module.

    "},"Classes/SDLCloudAppProperties.html":{"name":"SDLCloudAppProperties","abstract":"

    The cloud application properties.

    "},"Classes/SDLClusterModeStatus.html":{"name":"SDLClusterModeStatus","abstract":"

    A vehicle data struct for the cluster mode and power status

    "},"Classes/SDLConfiguration.html":{"name":"SDLConfiguration","abstract":"

    Contains information about the app’s configurtion, such as lifecycle, lockscreen, encryption, etc.

    "},"Classes/SDLCreateInteractionChoiceSet.html":{"name":"SDLCreateInteractionChoiceSet","abstract":"

    Creates a Choice Set which can be used in subsequent SDLPerformInteraction Operations.

    "},"Classes.html#/c:objc(cs)SDLCreateInteractionChoiceSetResponse":{"name":"SDLCreateInteractionChoiceSetResponse","abstract":"

    Response to SDLCreateInteractionChoiceSet has been called

    "},"Classes/SDLCreateWindow.html":{"name":"SDLCreateWindow","abstract":"

    Create a new window on the display with the specified window type."},"Classes.html#/c:objc(cs)SDLCreateWindowResponse":{"name":"SDLCreateWindowResponse","abstract":"

    Response to SDLCreateWindow

    "},"Classes/SDLDIDResult.html":{"name":"SDLDIDResult","abstract":"

    A vehicle data struct

    "},"Classes/SDLDateTime.html":{"name":"SDLDateTime","abstract":"

    A struct referenced in SendLocation for an absolute date

    "},"Classes/SDLDeleteCommand.html":{"name":"SDLDeleteCommand","abstract":"

    Removes a command from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteCommandResponse":{"name":"SDLDeleteCommandResponse","abstract":"

    Response to SDLDeleteCommand

    "},"Classes/SDLDeleteFile.html":{"name":"SDLDeleteFile","abstract":"

    Used to delete a file resident on the SDL module in the app’s local cache."},"Classes/SDLDeleteFileResponse.html":{"name":"SDLDeleteFileResponse","abstract":"

    Response to SDLDeleteFile

    "},"Classes/SDLDeleteInteractionChoiceSet.html":{"name":"SDLDeleteInteractionChoiceSet","abstract":"

    Deletes an existing Choice Set identified by the parameter"},"Classes.html#/c:objc(cs)SDLDeleteInteractionChoiceSetResponse":{"name":"SDLDeleteInteractionChoiceSetResponse","abstract":"

    SDLDeleteInteractionChoiceSetResponse is sent, when SDLDeleteInteractionChoiceSet has been called

    "},"Classes/SDLDeleteSubMenu.html":{"name":"SDLDeleteSubMenu","abstract":"

    Deletes a submenu from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteSubMenuResponse":{"name":"SDLDeleteSubMenuResponse","abstract":"

    Response to SDLDeleteSubMenu

    "},"Classes/SDLDeleteWindow.html":{"name":"SDLDeleteWindow","abstract":"

    Deletes previously created window of the SDL application.

    "},"Classes.html#/c:objc(cs)SDLDeleteWindowResponse":{"name":"SDLDeleteWindowResponse","abstract":"

    Response to DeleteWindow

    "},"Classes/SDLDeviceInfo.html":{"name":"SDLDeviceInfo","abstract":"

    Various information about connecting device. Referenced in RegisterAppInterface

    "},"Classes/SDLDeviceStatus.html":{"name":"SDLDeviceStatus","abstract":"

    Describes the status related to a connected mobile device or SDL and if or how it is represented in the vehicle.

    "},"Classes/SDLDiagnosticMessage.html":{"name":"SDLDiagnosticMessage","abstract":"

    Non periodic vehicle diagnostic request

    "},"Classes/SDLDiagnosticMessageResponse.html":{"name":"SDLDiagnosticMessageResponse","abstract":"

    Response to SDLDiagnosticMessage

    "},"Classes/SDLDialNumber.html":{"name":"SDLDialNumber","abstract":"

    This RPC is used to tell the head unit to use bluetooth to dial a phone number using the phone.

    "},"Classes.html#/c:objc(cs)SDLDialNumberResponse":{"name":"SDLDialNumberResponse","abstract":"

    The response to SDLDialNumber

    "},"Classes/SDLDisplayCapabilities.html":{"name":"SDLDisplayCapabilities","abstract":"

    Contains information about the display for the SDL system to which the application is currently connected.

    "},"Classes/SDLDisplayCapability.html":{"name":"SDLDisplayCapability","abstract":"

    Contain the display related information and all windows related to that display.

    "},"Classes/SDLECallInfo.html":{"name":"SDLECallInfo","abstract":"

    A vehicle data struct for emergency call information

    "},"Classes/SDLEmergencyEvent.html":{"name":"SDLEmergencyEvent","abstract":"

    A vehicle data struct for an emergency event

    "},"Classes/SDLEncodedSyncPData.html":{"name":"SDLEncodedSyncPData","abstract":"

    Allows encoded data in the form of SyncP packets to be sent to the SYNC module. Legacy / v1 Protocol implementation; use SyncPData instead.

    "},"Classes.html#/c:objc(cs)SDLEncodedSyncPDataResponse":{"name":"SDLEncodedSyncPDataResponse","abstract":"

    The response to SDLEncodedSyncPData

    "},"Classes/SDLEncryptionConfiguration.html":{"name":"SDLEncryptionConfiguration","abstract":"

    The encryption configuration data

    "},"Classes.html#/c:objc(cs)SDLEndAudioPassThru":{"name":"SDLEndAudioPassThru","abstract":"

    When this request is invoked, the audio capture stops

    "},"Classes.html#/c:objc(cs)SDLEndAudioPassThruResponse":{"name":"SDLEndAudioPassThruResponse","abstract":"

    Response to SDLEndAudioPassThru

    "},"Classes/SDLEqualizerSettings.html":{"name":"SDLEqualizerSettings","abstract":"

    Defines the each Equalizer channel settings.

    "},"Classes/SDLFile.html":{"name":"SDLFile","abstract":"

    Crates an SDLFile from a file

    "},"Classes/SDLFileManager.html":{"name":"SDLFileManager","abstract":"

    The SDLFileManager is an RPC manager for the remote file system. After it starts, it will attempt to communicate with the remote file system to get the names of all files. Deleting and Uploading will them queue these changes as transactions. If a delete succeeds, the local list of remote files will remove that file name, and likewise, if an upload succeeds, the local list of remote files will now include that file name.

    "},"Classes/SDLFileManagerConfiguration.html":{"name":"SDLFileManagerConfiguration","abstract":"

    File manager configuration information

    "},"Classes/SDLFuelRange.html":{"name":"SDLFuelRange","abstract":"

    Describes the distance a vehicle can travel with the current level of fuel.

    "},"Classes/SDLFunctionID.html":{"name":"SDLFunctionID","abstract":"

    A function ID for an SDL RPC

    "},"Classes/SDLGPSData.html":{"name":"SDLGPSData","abstract":"

    Describes the GPS data. Not all data will be available on all carlines.

    "},"Classes.html#/c:objc(cs)SDLGenericResponse":{"name":"SDLGenericResponse","abstract":"

    Generic Response is sent when the name of a received request is unknown. It is only used in case of an error. It will have an INVALID_DATA result code.

    "},"Classes/SDLGetAppServiceData.html":{"name":"SDLGetAppServiceData","abstract":"

    This request asks the module for current data related to the specific service. It also includes an option to subscribe to that service for future updates.

    "},"Classes/SDLGetAppServiceDataResponse.html":{"name":"SDLGetAppServiceDataResponse","abstract":"

    This response includes the data that was requested from the specific service.

    "},"Classes/SDLGetCloudAppProperties.html":{"name":"SDLGetCloudAppProperties","abstract":"

    RPC used to get the current properties of a cloud application.

    "},"Classes/SDLGetCloudAppPropertiesResponse.html":{"name":"SDLGetCloudAppPropertiesResponse","abstract":"

    The response to GetCloudAppProperties

    "},"Classes/SDLGetDTCs.html":{"name":"SDLGetDTCs","abstract":"

    This RPC allows to request diagnostic module trouble codes from a certain"},"Classes/SDLGetDTCsResponse.html":{"name":"SDLGetDTCsResponse","abstract":"

    Response to SDLGetDTCs

    "},"Classes/SDLGetFile.html":{"name":"SDLGetFile","abstract":"

    This request is sent to the module to retrieve a file.

    "},"Classes/SDLGetFileResponse.html":{"name":"SDLGetFileResponse","abstract":"

    Response to GetFiles

    "},"Classes/SDLGetInteriorVehicleData.html":{"name":"SDLGetInteriorVehicleData","abstract":"

    Reads the current status value of specified remote control module (type)."},"Classes/SDLGetInteriorVehicleDataConsent.html":{"name":"SDLGetInteriorVehicleDataConsent","abstract":"

    This RPC allows you to get consent to control a certian module

    "},"Classes/SDLGetInteriorVehicleDataConsentResponse.html":{"name":"SDLGetInteriorVehicleDataConsentResponse","abstract":"

    Response to GetInteriorVehicleDataConsent

    "},"Classes/SDLGetInteriorVehicleDataResponse.html":{"name":"SDLGetInteriorVehicleDataResponse","abstract":"

    A response to SDLGetInteriorVehicleData

    "},"Classes/SDLGetSystemCapability.html":{"name":"SDLGetSystemCapability","abstract":"

    SDL RPC Request for expanded information about a supported system/HMI capability

    "},"Classes/SDLGetSystemCapabilityResponse.html":{"name":"SDLGetSystemCapabilityResponse","abstract":"

    Response to SDLGetSystemCapability

    "},"Classes/SDLGetVehicleData.html":{"name":"SDLGetVehicleData","abstract":"

    Requests current values of specific published vehicle data items.

    "},"Classes/SDLGetVehicleDataResponse.html":{"name":"SDLGetVehicleDataResponse","abstract":"

    Response to SDLGetVehicleData

    "},"Classes/SDLGetWayPoints.html":{"name":"SDLGetWayPoints","abstract":"

    This RPC allows you to get navigation waypoint data

    "},"Classes/SDLGetWayPointsResponse.html":{"name":"SDLGetWayPointsResponse","abstract":"

    Response to SDLGetWayPoints

    "},"Classes/SDLGrid.html":{"name":"SDLGrid","abstract":"

    Describes a location (origin coordinates and span) of a vehicle component.

    "},"Classes/SDLHMICapabilities.html":{"name":"SDLHMICapabilities","abstract":"

    Contains information about the HMI capabilities.

    "},"Classes/SDLHMIPermissions.html":{"name":"SDLHMIPermissions","abstract":"

    Defining sets of HMI levels, which are permitted or prohibited for a given RPC.

    "},"Classes/SDLHMISettingsControlCapabilities.html":{"name":"SDLHMISettingsControlCapabilities","abstract":"

    HMI data struct for HMI control settings

    "},"Classes/SDLHMISettingsControlData.html":{"name":"SDLHMISettingsControlData","abstract":"

    Corresponds to “HMI_SETTINGS” ModuleType

    "},"Classes/SDLHapticRect.html":{"name":"SDLHapticRect","abstract":"

    Defines spatial for each user control object for video streaming application

    "},"Classes/SDLHeadLampStatus.html":{"name":"SDLHeadLampStatus","abstract":"

    Vehicle data struct for status of head lamps

    "},"Classes/SDLImage.html":{"name":"SDLImage","abstract":"

    Specifies which image shall be used e.g. in SDLAlerts or on SDLSoftbuttons provided the display supports it.

    "},"Classes/SDLImageField.html":{"name":"SDLImageField","abstract":"

    A struct used in DisplayCapabilities describing the capability of an image field

    "},"Classes/SDLImageResolution.html":{"name":"SDLImageResolution","abstract":"

    The resolution of an image

    "},"Classes/SDLKeyboardProperties.html":{"name":"SDLKeyboardProperties","abstract":"

    Configuration of on-screen keyboard (if available)

    "},"Classes/SDLLifecycleConfiguration.html":{"name":"SDLLifecycleConfiguration","abstract":"

    Configuration options for SDLManager

    "},"Classes/SDLLifecycleConfigurationUpdate.html":{"name":"SDLLifecycleConfigurationUpdate","abstract":"

    Configuration update options for SDLManager. This class can be used to update the lifecycle configuration in"},"Classes/SDLLightCapabilities.html":{"name":"SDLLightCapabilities","abstract":"

    Current Light capabilities.

    "},"Classes/SDLLightControlCapabilities.html":{"name":"SDLLightControlCapabilities","abstract":"

    Current light control capabilities.

    "},"Classes/SDLLightControlData.html":{"name":"SDLLightControlData","abstract":"

    Data about the current light controls

    "},"Classes/SDLLightState.html":{"name":"SDLLightState","abstract":"

    Current light control state

    "},"Classes.html#/c:objc(cs)SDLListFiles":{"name":"SDLListFiles","abstract":"

    Requests the current list of resident filenames for the registered app. Not"},"Classes/SDLListFilesResponse.html":{"name":"SDLListFilesResponse","abstract":"

    Response to SDLListFiles

    "},"Classes/SDLLocationCoordinate.html":{"name":"SDLLocationCoordinate","abstract":"

    Describes a coordinate on earth

    "},"Classes/SDLLocationDetails.html":{"name":"SDLLocationDetails","abstract":"

    Describes a location, including its coordinate, name, etc. Used in WayPoints.

    "},"Classes/SDLLockScreenConfiguration.html":{"name":"SDLLockScreenConfiguration","abstract":"

    A configuration describing how the lock screen should be used by the internal SDL system for your application. This configuration is provided before SDL starts and will govern the entire SDL lifecycle of your application.

    "},"Classes/SDLLockScreenViewController.html":{"name":"SDLLockScreenViewController","abstract":"

    The view controller for the lockscreen.

    "},"Classes/SDLLogConfiguration.html":{"name":"SDLLogConfiguration","abstract":"

    Information about the current logging configuration

    "},"Classes/SDLLogFileModule.html":{"name":"SDLLogFileModule","abstract":"

    A log file module is a collection of source code files that form a cohesive unit and that logs can all use to describe themselves. E.g. a “transport” module, or a “Screen Manager” module.

    "},"Classes/SDLLogFilter.html":{"name":"SDLLogFilter","abstract":"

    Represents a filter over which SDL logs should be logged

    "},"Classes/SDLLogManager.html":{"name":"SDLLogManager","abstract":"

    This is the central manager of logging. A developer should not have to interact with this class, it is exclusively used internally.

    "},"Classes.html#/c:objc(cs)SDLLogTargetAppleSystemLog":{"name":"SDLLogTargetAppleSystemLog","abstract":"

    The Apple System Log target is an iOS 2.0+ compatible log target that logs to both the Console and to the System Log.

    "},"Classes.html#/c:objc(cs)SDLLogTargetFile":{"name":"SDLLogTargetFile","abstract":"

    The File log will log to a text file on the iPhone in Documents/smartdevicelink/log/#appName##datetime##.log. It will log up to 3 logs which will rollover.

    "},"Classes.html#/c:objc(cs)SDLLogTargetOSLog":{"name":"SDLLogTargetOSLog","abstract":"

    OS_LOG is an iOS 10+ only logging system that logs to the Console and the Apple system console. This is an improved replacement for Apple SysLog (SDLLogTargetAppleSystemLog).

    "},"Classes/SDLManager.html":{"name":"SDLManager","abstract":"

    The top level manager object for all of SDL’s interactions with the app and the head unit

    "},"Classes/SDLMassageCushionFirmness.html":{"name":"SDLMassageCushionFirmness","abstract":"

    The intensity or firmness of a cushion.

    "},"Classes/SDLMassageModeData.html":{"name":"SDLMassageModeData","abstract":"

    Specify the mode of a massage zone.

    "},"Classes/SDLMediaServiceData.html":{"name":"SDLMediaServiceData","abstract":"

    This data is related to what a media service should provide.

    "},"Classes.html#/c:objc(cs)SDLMediaServiceManifest":{"name":"SDLMediaServiceManifest","abstract":"

    A media service manifest.

    "},"Classes/SDLMenuCell.html":{"name":"SDLMenuCell","abstract":"

    A menu cell item for the main menu or sub-menu.

    "},"Classes/SDLMenuConfiguration.html":{"name":"SDLMenuConfiguration","abstract":"

    Defines how the menu is configured

    "},"Classes/SDLMenuParams.html":{"name":"SDLMenuParams","abstract":"

    Used when adding a sub menu to an application menu or existing sub menu.

    "},"Classes/SDLMetadataTags.html":{"name":"SDLMetadataTags","abstract":"

    Metadata for Show fields

    "},"Classes/SDLModuleData.html":{"name":"SDLModuleData","abstract":"

    Describes a remote control module’s data

    "},"Classes/SDLModuleInfo.html":{"name":"SDLModuleInfo","abstract":"

    Contains information about a RC module.

    "},"Classes/SDLMsgVersion.html":{"name":"SDLMsgVersion","abstract":"

    Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.

    "},"Classes/SDLMyKey.html":{"name":"SDLMyKey","abstract":"

    Vehicle Data struct

    "},"Classes/SDLNavigationCapability.html":{"name":"SDLNavigationCapability","abstract":"

    Extended capabilities for an onboard navigation system

    "},"Classes/SDLNavigationInstruction.html":{"name":"SDLNavigationInstruction","abstract":"

    A navigation instruction.

    "},"Classes/SDLNavigationServiceData.html":{"name":"SDLNavigationServiceData","abstract":"

    This data is related to what a navigation service would provide.

    "},"Classes/SDLNavigationServiceManifest.html":{"name":"SDLNavigationServiceManifest","abstract":"

    A navigation service manifest.

    "},"Classes/SDLNotificationConstants.html":{"name":"SDLNotificationConstants","abstract":"

    This class defines methods for getting groups of notifications

    "},"Classes/SDLOasisAddress.html":{"name":"SDLOasisAddress","abstract":"

    Struct used in SendLocation describing an address

    "},"Classes/SDLOnAppInterfaceUnregistered.html":{"name":"SDLOnAppInterfaceUnregistered","abstract":"

    Notifies an application that its interface registration has been terminated. This means that all SDL resources associated with the application are discarded, including the Command Menu, Choice Sets, button subscriptions, etc.

    "},"Classes/SDLOnAppServiceData.html":{"name":"SDLOnAppServiceData","abstract":"

    This notification includes the data that is updated from the specific service.

    "},"Classes.html#/c:objc(cs)SDLOnAudioPassThru":{"name":"SDLOnAudioPassThru","abstract":"

    Binary data is in binary part of hybrid msg.

    "},"Classes/SDLOnButtonEvent.html":{"name":"SDLOnButtonEvent","abstract":"

    Notifies application that user has depressed or released a button to which"},"Classes/SDLOnButtonPress.html":{"name":"SDLOnButtonPress","abstract":"

    Notifies application of button press events for buttons to which the application is subscribed. SDL supports two button press events defined as follows:

    "},"Classes/SDLOnCommand.html":{"name":"SDLOnCommand","abstract":"

    This is called when a command was selected via VR after pressing the PTT button, or selected from the menu after pressing the MENU button.

    "},"Classes/SDLOnDriverDistraction.html":{"name":"SDLOnDriverDistraction","abstract":"

    Notifies the application of the current driver distraction state (whether driver distraction rules are in effect, or not).

    "},"Classes/SDLOnEncodedSyncPData.html":{"name":"SDLOnEncodedSyncPData","abstract":"

    Callback including encoded data of any SyncP packets that SYNC needs to send back to the mobile device. Legacy / v1 Protocol implementation; responds to EncodedSyncPData. *** DEPRECATED ***

    "},"Classes/SDLOnHMIStatus.html":{"name":"SDLOnHMIStatus"},"Classes/SDLOnHashChange.html":{"name":"SDLOnHashChange","abstract":"

    Notification containing an updated hashID which can be used over connection cycles (i.e. loss of connection, ignition cycles, etc.). Sent after initial registration and subsequently after any change in the calculated hash of all persisted app data.

    "},"Classes/SDLOnInteriorVehicleData.html":{"name":"SDLOnInteriorVehicleData","abstract":"

    Notifications when subscribed vehicle data changes.

    "},"Classes/SDLOnKeyboardInput.html":{"name":"SDLOnKeyboardInput","abstract":"

    Sent when a keyboard presented by a PerformInteraction has a keyboard input.

    "},"Classes/SDLOnLanguageChange.html":{"name":"SDLOnLanguageChange","abstract":"

    Provides information to what language the SDL HMI language was changed

    "},"Classes/SDLOnLockScreenStatus.html":{"name":"SDLOnLockScreenStatus","abstract":"

    To help prevent driver distraction, any SmartDeviceLink application is required to implement a lockscreen that must be enforced while the application is active on the system while the vehicle is in motion.

    "},"Classes/SDLOnPermissionsChange.html":{"name":"SDLOnPermissionsChange","abstract":"

    Provides update to app of which sets of functions are available

    "},"Classes/SDLOnRCStatus.html":{"name":"SDLOnRCStatus","abstract":"

    OnRCStatus notifications to all registered mobile applications and the HMI whenever"},"Classes/SDLOnSyncPData.html":{"name":"SDLOnSyncPData","abstract":"

    DEPRECATED

    "},"Classes/SDLOnSystemCapabilityUpdated.html":{"name":"SDLOnSystemCapabilityUpdated","abstract":"

    A notification to inform the connected device that a specific system capability has changed.

    "},"Classes/SDLOnSystemRequest.html":{"name":"SDLOnSystemRequest","abstract":"

    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)

    "},"Classes/SDLOnTBTClientState.html":{"name":"SDLOnTBTClientState","abstract":"

    Provides applications with notifications specific to the current TBT client status on the module

    "},"Classes/SDLOnTouchEvent.html":{"name":"SDLOnTouchEvent","abstract":"

    Notifies about touch events on the screen’s prescribed area during video streaming

    "},"Classes/SDLOnVehicleData.html":{"name":"SDLOnVehicleData","abstract":"

    Callback for the periodic and non periodic vehicle data read function.

    "},"Classes/SDLOnWayPointChange.html":{"name":"SDLOnWayPointChange","abstract":"

    Notification which provides the entire LocationDetails when there is a change to any waypoints or destination.

    "},"Classes/SDLParameterPermissions.html":{"name":"SDLParameterPermissions","abstract":"

    Defining sets of parameters, which are permitted or prohibited for a given RPC.

    "},"Classes/SDLPerformAppServiceInteraction.html":{"name":"SDLPerformAppServiceInteraction","abstract":"

    App service providers will likely have different actions exposed to the module and app service consumers. It will be difficult to standardize these actions by RPC versions and can easily become stale. Therefore, we introduce a best-effort attempt to take actions on a service.

    "},"Classes/SDLPerformAppServiceInteractionResponse.html":{"name":"SDLPerformAppServiceInteractionResponse","abstract":"

    Response to the request to request an app service.

    "},"Classes/SDLPerformAudioPassThru.html":{"name":"SDLPerformAudioPassThru","abstract":"

    This will open an audio pass thru session. By doing so the app can receive"},"Classes.html#/c:objc(cs)SDLPerformAudioPassThruResponse":{"name":"SDLPerformAudioPassThruResponse","abstract":"

    Response to SDLPerformAudioPassThru

    "},"Classes/SDLPerformInteraction.html":{"name":"SDLPerformInteraction","abstract":"

    Performs an application-initiated interaction in which the user can select a choice from the passed choice set.

    "},"Classes/SDLPerformInteractionResponse.html":{"name":"SDLPerformInteractionResponse","abstract":"

    PerformInteraction Response is sent, when SDLPerformInteraction has been called

    "},"Classes/SDLPermissionItem.html":{"name":"SDLPermissionItem","abstract":"

    Permissions for a given set of RPCs

    "},"Classes/SDLPermissionManager.html":{"name":"SDLPermissionManager","abstract":"

    The permission manager monitoring RPC permissions.

    "},"Classes/SDLPhoneCapability.html":{"name":"SDLPhoneCapability","abstract":"

    Extended capabilities of the module’s phone feature

    "},"Classes/SDLPinchGesture.html":{"name":"SDLPinchGesture","abstract":"

    Pinch Gesture information

    "},"Classes/SDLPresetBankCapabilities.html":{"name":"SDLPresetBankCapabilities","abstract":"

    Contains information about on-screen preset capabilities.

    "},"Classes/SDLPublishAppService.html":{"name":"SDLPublishAppService","abstract":"

    Registers a service offered by this app on the module."},"Classes/SDLPublishAppServiceResponse.html":{"name":"SDLPublishAppServiceResponse","abstract":"

    Response to the request to register a service offered by this app on the module.

    "},"Classes/SDLPutFile.html":{"name":"SDLPutFile","abstract":"

    Used to push a binary data onto the SDL module from a mobile device, such as icons and album art.

    "},"Classes/SDLPutFileResponse.html":{"name":"SDLPutFileResponse","abstract":"

    Response to SDLPutFile

    "},"Classes/SDLRDSData.html":{"name":"SDLRDSData","abstract":"

    Include the data defined in Radio Data System, which is a communications protocol standard for embedding small amounts of digital information in conventional FM radio broadcasts.

    "},"Classes/SDLRGBColor.html":{"name":"SDLRGBColor","abstract":"

    Represents an RGB color

    "},"Classes/SDLRPCMessage.html":{"name":"SDLRPCMessage","abstract":"

    Parent class of all RPC messages.

    "},"Classes.html#/c:objc(cs)SDLRPCNotification":{"name":"SDLRPCNotification","abstract":"

    An RPC sent from the head unit to the app about some data change, such as a button was pressed

    "},"Classes/SDLRPCNotificationNotification.html":{"name":"SDLRPCNotificationNotification","abstract":"

    An NSNotification object that makes retrieving internal SDLRPCNotification data easier

    "},"Classes/SDLRPCRequest.html":{"name":"SDLRPCRequest","abstract":"

    Superclass of RPC requests

    "},"Classes/SDLRPCRequestNotification.html":{"name":"SDLRPCRequestNotification","abstract":"

    A NSNotification object that makes retrieving internal SDLRPCRequest data easier

    "},"Classes/SDLRPCResponse.html":{"name":"SDLRPCResponse","abstract":"

    Superclass of RPC responses

    "},"Classes/SDLRPCResponseNotification.html":{"name":"SDLRPCResponseNotification","abstract":"

    A NSNotification object that makes retrieving internal SDLRPCResponse data easier

    "},"Classes/SDLRPCStruct.html":{"name":"SDLRPCStruct","abstract":"

    Superclass of all RPC-related structs and messages

    "},"Classes/SDLRadioControlCapabilities.html":{"name":"SDLRadioControlCapabilities","abstract":"

    Contains information about a radio control module’s capabilities.

    "},"Classes/SDLRadioControlData.html":{"name":"SDLRadioControlData","abstract":"

    Include information (both read-only and changeable data) about a remote control radio module.

    "},"Classes/SDLReadDID.html":{"name":"SDLReadDID","abstract":"

    Non periodic vehicle data read request. This is an RPC to get diagnostics"},"Classes/SDLReadDIDResponse.html":{"name":"SDLReadDIDResponse","abstract":"

    A response to ReadDID

    "},"Classes/SDLRectangle.html":{"name":"SDLRectangle","abstract":"

    A struct describing a rectangle

    "},"Classes/SDLRegisterAppInterface.html":{"name":"SDLRegisterAppInterface","abstract":"

    Registers the application’s interface with SDL. The RegisterAppInterface RPC declares the properties of the app, including the messaging interface version, the app name, etc. The mobile application must establish its interface registration with SDL before any other interaction with SDL can take place. The registration lasts until it is terminated either by the application calling the SDLUnregisterAppInterface method, or by SDL sending an SDLOnAppInterfaceUnregistered notification, or by loss of the underlying transport connection, or closing of the underlying message transmission protocol RPC session.

    "},"Classes/SDLRegisterAppInterfaceResponse.html":{"name":"SDLRegisterAppInterfaceResponse","abstract":"

    Response to SDLRegisterAppInterface

    "},"Classes/SDLReleaseInteriorVehicleDataModule.html":{"name":"SDLReleaseInteriorVehicleDataModule","abstract":"

    Releases a controlled remote control module so others can take control

    "},"Classes.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModuleResponse":{"name":"SDLReleaseInteriorVehicleDataModuleResponse","abstract":"

    Response to ReleaseInteriorVehicleDataModule

    "},"Classes/SDLRemoteControlCapabilities.html":{"name":"SDLRemoteControlCapabilities","abstract":"

    Capabilities of the remote control feature

    "},"Classes/SDLResetGlobalProperties.html":{"name":"SDLResetGlobalProperties","abstract":"

    Resets the passed global properties to their default values as defined by"},"Classes.html#/c:objc(cs)SDLResetGlobalPropertiesResponse":{"name":"SDLResetGlobalPropertiesResponse","abstract":"

    Response to ResetGlobalProperties

    "},"Classes/SDLSISData.html":{"name":"SDLSISData","abstract":"

    HD radio Station Information Service (SIS) data.

    "},"Classes/SDLScreenManager.html":{"name":"SDLScreenManager","abstract":"

    The SDLScreenManager is a manager to control SDL UI features. Use the screen manager for setting up the UI of the template, creating a menu for your users, creating softbuttons, setting textfields, etc..

    "},"Classes/SDLScreenParams.html":{"name":"SDLScreenParams","abstract":"

    A struct in DisplayCapabilities describing parameters related to a video / touch input area

    "},"Classes/SDLScrollableMessage.html":{"name":"SDLScrollableMessage","abstract":"

    Creates a full screen overlay containing a large block of formatted text that can be scrolled with buttons available.

    "},"Classes.html#/c:objc(cs)SDLScrollableMessageResponse":{"name":"SDLScrollableMessageResponse","abstract":"

    Response to SDLScrollableMessage

    "},"Classes/SDLSeatControlCapabilities.html":{"name":"SDLSeatControlCapabilities","abstract":"

    Include information about a seat control capabilities.

    "},"Classes/SDLSeatControlData.html":{"name":"SDLSeatControlData","abstract":"

    Seat control data corresponds to “SEAT” ModuleType.

    "},"Classes/SDLSeatLocation.html":{"name":"SDLSeatLocation","abstract":"

    Describes the location of a seat

    "},"Classes/SDLSeatLocationCapability.html":{"name":"SDLSeatLocationCapability","abstract":"

    Contains information about the locations of each seat.

    "},"Classes/SDLSeatMemoryAction.html":{"name":"SDLSeatMemoryAction","abstract":"

    Specify the action to be performed.

    "},"Classes/SDLSendHapticData.html":{"name":"SDLSendHapticData","abstract":"

    Sends the spatial data gathered from SDLCarWindow or VirtualDisplayEncoder to the HMI. This data will be utilized by the HMI to determine how and when haptic events should occur.

    "},"Classes.html#/c:objc(cs)SDLSendHapticDataResponse":{"name":"SDLSendHapticDataResponse","abstract":"

    Response to SDLSendHapticData

    "},"Classes/SDLSendLocation.html":{"name":"SDLSendLocation","abstract":"

    SendLocation is used to send a location to the navigation system for navigation

    "},"Classes.html#/c:objc(cs)SDLSendLocationResponse":{"name":"SDLSendLocationResponse","abstract":"

    Response to SDLSendLocation

    "},"Classes/SDLSetAppIcon.html":{"name":"SDLSetAppIcon","abstract":"

    Used to set existing local file on SDL as the app’s icon. Not supported on"},"Classes.html#/c:objc(cs)SDLSetAppIconResponse":{"name":"SDLSetAppIconResponse","abstract":"

    Response to SDLSetAppIcon

    "},"Classes/SDLSetCloudAppProperties.html":{"name":"SDLSetCloudAppProperties","abstract":"

    RPC used to enable/disable a cloud application and set authentication data

    "},"Classes.html#/c:objc(cs)SDLSetCloudAppPropertiesResponse":{"name":"SDLSetCloudAppPropertiesResponse","abstract":"

    The response to SetCloudAppProperties

    "},"Classes/SDLSetDisplayLayout.html":{"name":"SDLSetDisplayLayout","abstract":"

    Used to set an alternate display layout. If not sent, default screen for"},"Classes/SDLSetDisplayLayoutResponse.html":{"name":"SDLSetDisplayLayoutResponse","abstract":"

    Response to SDLSetDisplayLayout

    "},"Classes/SDLSetGlobalProperties.html":{"name":"SDLSetGlobalProperties","abstract":"

    Sets global property values

    "},"Classes.html#/c:objc(cs)SDLSetGlobalPropertiesResponse":{"name":"SDLSetGlobalPropertiesResponse","abstract":"

    Response to SDLSetGlobalProperties

    "},"Classes/SDLSetInteriorVehicleData.html":{"name":"SDLSetInteriorVehicleData","abstract":"

    This RPC allows a remote control type mobile application to"},"Classes/SDLSetInteriorVehicleDataResponse.html":{"name":"SDLSetInteriorVehicleDataResponse","abstract":"

    Response to SDLSetInteriorVehicleData

    "},"Classes/SDLSetMediaClockTimer.html":{"name":"SDLSetMediaClockTimer","abstract":"

    Sets the media clock/timer value and the update method (e.g.count-up,"},"Classes.html#/c:objc(cs)SDLSetMediaClockTimerResponse":{"name":"SDLSetMediaClockTimerResponse","abstract":"

    Response to SDLSetMediaClockTimer

    "},"Classes/SDLShow.html":{"name":"SDLShow","abstract":"

    Updates the application’s display text area, regardless of whether or not"},"Classes/SDLShowAppMenu.html":{"name":"SDLShowAppMenu","abstract":"

    Used by an app to show the app’s menu, typically this is used by a navigation app if the menu button is hidden.

    "},"Classes.html#/c:objc(cs)SDLShowAppMenuResponse":{"name":"SDLShowAppMenuResponse","abstract":"

    Response to the request to show the app menu.

    "},"Classes/SDLShowConstantTBT.html":{"name":"SDLShowConstantTBT","abstract":"

    This RPC is used to update the user with navigation information for the constantly shown screen (base screen), but also for the alert maneuver screen.

    "},"Classes.html#/c:objc(cs)SDLShowConstantTBTResponse":{"name":"SDLShowConstantTBTResponse","abstract":"

    Response to SDLShowConstantTBT

    "},"Classes.html#/c:objc(cs)SDLShowResponse":{"name":"SDLShowResponse","abstract":"

    Response to SDLShow

    "},"Classes/SDLSingleTireStatus.html":{"name":"SDLSingleTireStatus","abstract":"

    Tire pressure status of a single tire.

    "},"Classes/SDLSlider.html":{"name":"SDLSlider","abstract":"

    Creates a full screen or pop-up overlay (depending on platform) with a single user controlled slider.

    "},"Classes/SDLSliderResponse.html":{"name":"SDLSliderResponse","abstract":"

    Response to SDLSlider

    "},"Classes/SDLSoftButton.html":{"name":"SDLSoftButton","abstract":"

    Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts

    "},"Classes/SDLSoftButtonCapabilities.html":{"name":"SDLSoftButtonCapabilities","abstract":"

    Contains information about a SoftButton’s capabilities.

    "},"Classes/SDLSoftButtonObject.html":{"name":"SDLSoftButtonObject","abstract":"

    A soft button wrapper object that is capable of storing and switching between states

    "},"Classes/SDLSoftButtonState.html":{"name":"SDLSoftButtonState","abstract":"

    A soft button state including data such as text, name and artwork

    "},"Classes/SDLSpeak.html":{"name":"SDLSpeak","abstract":"

    Speaks a phrase over the vehicle audio system using SDL’s TTS (text-to-speech) engine. The provided text to be spoken can be simply a text phrase, or it can consist of phoneme specifications to direct SDL’s TTS engine to speak a “speech-sculpted” phrase.

    "},"Classes.html#/c:objc(cs)SDLSpeakResponse":{"name":"SDLSpeakResponse","abstract":"

    Response to SDLSpeak

    "},"Classes/SDLStartTime.html":{"name":"SDLStartTime","abstract":"

    Describes the hour, minute and second values used to set the media clock.

    "},"Classes/SDLStationIDNumber.html":{"name":"SDLStationIDNumber","abstract":"

    Describes the hour, minute and second values used to set the media clock.

    "},"Classes/SDLStreamingMediaConfiguration.html":{"name":"SDLStreamingMediaConfiguration","abstract":"

    The streaming media configuration. Use this class to configure streaming media information.

    "},"Classes/SDLStreamingMediaManager.html":{"name":"SDLStreamingMediaManager","abstract":"

    Manager to help control streaming (video and audio) media services.

    "},"Classes/SDLStreamingVideoScaleManager.html":{"name":"SDLStreamingVideoScaleManager","abstract":"

    This class consolidates the logic of scaling between the view controller’s coordinate system and the display’s coordinate system.

    "},"Classes/SDLSubscribeButton.html":{"name":"SDLSubscribeButton","abstract":"

    Establishes a subscription to button notifications for HMI buttons. Buttons"},"Classes.html#/c:objc(cs)SDLSubscribeButtonResponse":{"name":"SDLSubscribeButtonResponse","abstract":"

    Response to SDLSubscribeButton

    "},"Classes/SDLSubscribeVehicleData.html":{"name":"SDLSubscribeVehicleData","abstract":"

    Subscribes to specific published vehicle 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. The update rate is dependent on sensors, vehicle architecture and vehicle type.

    "},"Classes/SDLSubscribeVehicleDataResponse.html":{"name":"SDLSubscribeVehicleDataResponse","abstract":"

    Response to SDLSubscribeVehicleData

    "},"Classes.html#/c:objc(cs)SDLSubscribeWayPoints":{"name":"SDLSubscribeWayPoints","abstract":"

    A SDLSubscribeWaypoints can be sent to subscribe"},"Classes.html#/c:objc(cs)SDLSubscribeWayPointsResponse":{"name":"SDLSubscribeWayPointsResponse","abstract":"

    Response to SubscribeWayPoints

    "},"Classes/SDLSyncMsgVersion.html":{"name":"SDLSyncMsgVersion","abstract":"

    Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.

    "},"Classes.html#/c:objc(cs)SDLSyncPData":{"name":"SDLSyncPData","abstract":"

    Allows binary data in the form of SyncP packets to be sent to the SYNC module. Binary data is in binary part of hybrid msg.

    "},"Classes.html#/c:objc(cs)SDLSyncPDataResponse":{"name":"SDLSyncPDataResponse","abstract":"

    Response to SyncPData

    "},"Classes/SDLSystemCapability.html":{"name":"SDLSystemCapability","abstract":"

    The systemCapabilityType indicates which type of data should be changed and identifies which data object exists in this struct. For example, if the SystemCapability Type is NAVIGATION then a “navigationCapability” should exist.

    "},"Classes/SDLSystemCapabilityManager.html":{"name":"SDLSystemCapabilityManager","abstract":"

    A manager that handles updating and subscribing to SDL capabilities.

    "},"Classes/SDLSystemRequest.html":{"name":"SDLSystemRequest","abstract":"

    An asynchronous request from the device; binary data can be included in hybrid part of message for some requests (such as HTTP, Proprietary, or Authentication requests)

    "},"Classes/SDLTTSChunk.html":{"name":"SDLTTSChunk","abstract":"

    Specifies what is to be spoken. This can be simply a text phrase, which SDL will speak according to its own rules. It can also be phonemes from either the Microsoft SAPI phoneme set, or from the LHPLUS phoneme set. It can also be a pre-recorded sound in WAV format (either developer-defined, or provided by the SDL platform).

    "},"Classes/SDLTemperature.html":{"name":"SDLTemperature","abstract":"

    Struct representing a temperature.

    "},"Classes/SDLTemplateColorScheme.html":{"name":"SDLTemplateColorScheme","abstract":"

    A color scheme for all display layout templates.

    "},"Classes/SDLTemplateConfiguration.html":{"name":"SDLTemplateConfiguration","abstract":"

    Used to set an alternate template layout to a window.

    "},"Classes/SDLTextField.html":{"name":"SDLTextField","abstract":"

    Struct defining the characteristics of a displayed field on the HMI.

    "},"Classes/SDLTireStatus.html":{"name":"SDLTireStatus","abstract":"

    Struct used in Vehicle Data; the status and pressure of the tires.

    "},"Classes/SDLTouch.html":{"name":"SDLTouch","abstract":"

    Describes a touch location

    "},"Classes/SDLTouchCoord.html":{"name":"SDLTouchCoord","abstract":"

    The coordinate of a touch, used in a touch event

    "},"Classes/SDLTouchEvent.html":{"name":"SDLTouchEvent","abstract":"

    A touch which occurred on the IVI system during projection

    "},"Classes/SDLTouchEventCapabilities.html":{"name":"SDLTouchEventCapabilities","abstract":"

    The capabilities of touches during projection applications

    "},"Classes/SDLTouchManager.html":{"name":"SDLTouchManager","abstract":"

    Touch Manager responsible for processing touch event notifications.

    "},"Classes/SDLTurn.html":{"name":"SDLTurn","abstract":"

    A struct used in UpdateTurnList for Turn-by-Turn navigation applications

    "},"Classes/SDLUnpublishAppService.html":{"name":"SDLUnpublishAppService","abstract":"

    Unpublish an existing service published by this application.

    "},"Classes.html#/c:objc(cs)SDLUnpublishAppServiceResponse":{"name":"SDLUnpublishAppServiceResponse","abstract":"

    The response to UnpublishAppService

    "},"Classes.html#/c:objc(cs)SDLUnregisterAppInterface":{"name":"SDLUnregisterAppInterface","abstract":"

    Terminates an application’s interface registration. This causes SDL® to"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterfaceResponse":{"name":"SDLUnregisterAppInterfaceResponse","abstract":"

    Response to UnregisterAppInterface

    "},"Classes/SDLUnsubscribeButton.html":{"name":"SDLUnsubscribeButton","abstract":"

    Deletes a subscription to button notifications for the specified button. For"},"Classes.html#/c:objc(cs)SDLUnsubscribeButtonResponse":{"name":"SDLUnsubscribeButtonResponse","abstract":"

    Response to UnsubscribeButton

    "},"Classes/SDLUnsubscribeVehicleData.html":{"name":"SDLUnsubscribeVehicleData","abstract":"

    This function is used to unsubscribe the notifications from the"},"Classes/SDLUnsubscribeVehicleDataResponse.html":{"name":"SDLUnsubscribeVehicleDataResponse","abstract":"

    Response to UnsubscribeVehicleData

    "},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPoints":{"name":"SDLUnsubscribeWayPoints","abstract":"

    Request to unsubscribe from navigation WayPoints and Destination

    "},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPointsResponse":{"name":"SDLUnsubscribeWayPointsResponse","abstract":"

    Response to UnsubscribeWayPoints

    "},"Classes/SDLUpdateTurnList.html":{"name":"SDLUpdateTurnList","abstract":"

    Updates the list of next maneuvers, which can be requested by the user pressing the softbutton

    "},"Classes.html#/c:objc(cs)SDLUpdateTurnListResponse":{"name":"SDLUpdateTurnListResponse","abstract":"

    Response to UpdateTurnList

    "},"Classes/SDLVehicleDataResult.html":{"name":"SDLVehicleDataResult","abstract":"

    Individual published data request result

    "},"Classes/SDLVehicleType.html":{"name":"SDLVehicleType","abstract":"

    Describes the type of vehicle the mobile phone is connected with.

    "},"Classes/SDLVersion.html":{"name":"SDLVersion","abstract":"

    Specifies a major / minor / patch version number for semantic versioning purposes and comparisons

    "},"Classes/SDLVideoStreamingCapability.html":{"name":"SDLVideoStreamingCapability","abstract":"

    Contains information about this system’s video streaming capabilities

    "},"Classes/SDLVideoStreamingFormat.html":{"name":"SDLVideoStreamingFormat","abstract":"

    An available format for video streaming in projection applications

    "},"Classes/SDLVoiceCommand.html":{"name":"SDLVoiceCommand","abstract":"

    Voice commands available for the user to speak and be recognized by the IVI’s voice recognition engine.

    "},"Classes/SDLVRHelpItem.html":{"name":"SDLVRHelpItem","abstract":"

    A help item for voice commands, used locally in interaction lists and globally

    "},"Classes/SDLWeatherAlert.html":{"name":"SDLWeatherAlert","abstract":"

    Contains information about a weather alert

    "},"Classes/SDLWeatherData.html":{"name":"SDLWeatherData","abstract":"

    Contains information about the current weather

    "},"Classes/SDLWeatherServiceData.html":{"name":"SDLWeatherServiceData","abstract":"

    This data is related to what a weather service would provide.

    "},"Classes/SDLWeatherServiceManifest.html":{"name":"SDLWeatherServiceManifest","abstract":"

    A weather service manifest.

    "},"Classes/SDLWindowCapability.html":{"name":"SDLWindowCapability","abstract":"

    Reflects content of DisplayCapabilities, ButtonCapabilities and SoftButtonCapabilities

    "},"Classes/SDLWindowTypeCapabilities.html":{"name":"SDLWindowTypeCapabilities","abstract":"

    Used to inform an app how many window instances per type that can be created.

    "},"Categories/NSString%28SDLEnum%29.html#/c:objc(cs)NSString(im)isEqualToEnum:":{"name":"-isEqualToEnum:","abstract":"

    Returns whether or not two enums are equal.

    ","parent_name":"NSString(SDLEnum)"},"Categories/NSString%28SDLEnum%29.html":{"name":"NSString(SDLEnum)","abstract":"

    Extensions to NSString specifically for SDL string enums

    "},"Categories.html":{"name":"Categories","abstract":"

    The following categories are available globally.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Constants.html":{"name":"Constants","abstract":"

    The following constants are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Type%20Definitions.html":{"name":"Type Definitions","abstract":"

    The following type definitions are available globally.

    "}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json index b1fe95b86..d8ed30950 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -1,12 +1,61 @@ { "warnings": [ { - "file": "/Users/joel/Development/Livio/sdl_ios/SmartDeviceLink/SDLTouch.h", + "file": "/Users/joelfischer/Development/livio/sdl/sdl_ios/SmartDeviceLink/SDLErrorConstants.h", + "line": 155, + "symbol": "SDLSystemCapabilityManagerError", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/joelfischer/Development/livio/sdl/sdl_ios/SmartDeviceLink/SDLErrorConstants.h", + "line": 155, + "symbol": "SDLSystemCapabilityManagerError", + "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", + "warning": "undocumented" + }, + { + "file": "/Users/joelfischer/Development/livio/sdl/sdl_ios/SmartDeviceLink/SDLErrorConstants.h", + "line": 156, + "symbol": "SDLSystemCapabilityManagerError.SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/joelfischer/Development/livio/sdl/sdl_ios/SmartDeviceLink/SDLErrorConstants.h", + "line": 157, + "symbol": "SDLSystemCapabilityManagerError.SDLSystemCapabilityManagerErrorHMINone", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/joelfischer/Development/livio/sdl/sdl_ios/SmartDeviceLink/SDLErrorConstants.h", + "line": 158, + "symbol": "SDLSystemCapabilityManagerError.SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase", + "warning": "undocumented" + }, + { + "file": "/Users/joelfischer/Development/livio/sdl/sdl_ios/SmartDeviceLink/SDLErrorConstants.h", + "line": 196, + "symbol": "SDLCacheFileManagerError", + "symbol_kind": "sourcekitten.source.lang.objc.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/joelfischer/Development/livio/sdl/sdl_ios/SmartDeviceLink/SDLErrorConstants.h", + "line": 196, + "symbol": "SDLCacheFileManagerError", + "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", + "warning": "undocumented" + }, + { + "file": "/Users/joelfischer/Development/livio/sdl/sdl_ios/SmartDeviceLink/SDLTouch.h", "line": 14, "symbol": "SDLTouchIdentifier", "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef", "warning": "undocumented" } ], - "source_directory": "/Users/joel/Development/Livio/sdl_ios" + "source_directory": "/Users/joelfischer/Development/livio/sdl/sdl_ios" } \ No newline at end of file diff --git a/generator/README.md b/generator/README.md new file mode 100644 index 000000000..b6ec2a0b7 --- /dev/null +++ b/generator/README.md @@ -0,0 +1,858 @@ +# Proxy Library RPC Generator + +This script provides the ability to auto-generate Objective-C RPC code (header \*.h and implementation \*.m classes) based on the SDL MOBILE_API XML specification. + +## Requirements and Dependencies + +The script requires **Python 3** pre-installed on the host system. The minimal supported Python 3 version is **3.7.6**. It may work on versions back to 3.5 (the minimal version that has not yet reached [the end-of-life](https://devguide.python.org/devcycle/#end-of-life-branches)), but this is not supported and may break in the future. + +Note: To install the dependencies for this script, you must use the **pip3** command. + +All required libraries are listed in `requirements.txt` and should be pre-installed on the system prior to using the sript. Please use the following command to install the libraries: + +```shell script +$ pip3 install -r generator/requirements.txt +``` + +Please also make sure all git submodules are installed and up to date since the script uses the XML parser provided in a submodule. + +```shell script +$ git submodule update --init --recursive +``` + +## Usage + +**Usage example** + +```shell script +$ cd sdl_ios +$ python3 generator/generator.py -xml generator/rpc_spec/MOBILE_API.xml -xsd generator/rpc_spec/MOBILE_API.xsd -d output_dir +``` + + +As a result the output_dir will have all the new generated files. + +**Detailed usage description (keys, options)** + +``` +usage: generator.py [-h] [-v] [-xml SOURCE_XML] [-xsd SOURCE_XSD] + [-d OUTPUT_DIRECTORY] [-t [TEMPLATES_DIRECTORY]] + [-r REGEX_PATTERN] [--verbose] [-e] [-s] [-m] [-y] [-n] + +Proxy Library RPC Generator + +optional arguments: + -h, --help show this help message and exit + -v, --version print the version and exit + -xml SOURCE_XML, --source-xml SOURCE_XML, --input-file SOURCE_XML + should point to MOBILE_API.xml + -xsd SOURCE_XSD, --source-xsd SOURCE_XSD + -d OUTPUT_DIRECTORY, --output-directory OUTPUT_DIRECTORY + define the place where the generated output should be + placed + -t [TEMPLATES_DIRECTORY], --templates-directory [TEMPLATES_DIRECTORY] + path to directory with templates + -r REGEX_PATTERN, --regex-pattern REGEX_PATTERN + only elements matched with defined regex pattern will + be parsed and generated + --verbose display additional details like logs etc + -e, --enums if present, all enums will be generated + -s, --structs if present, all structs will be generated + -m, -f, --functions if present, all functions will be generated + -y, --overwrite force overwriting of existing files in output + directory, ignore confirmation message + -n, --skip skip overwriting of existing files in output + directory, ignore confirmation message +``` + +### How to use the generated classes + +All RPC classes used in **SmartDeviceLink iOS** library were created manually due to historical reasons and have public API differences from the RPC_SPEC. Therefore, the generated files will differ from the current ones. The generated files are based on the RPC_SPEC and do not contain changes to match the existing files. Therefore, do not replace existing files with generated files. If you want to update existing files with new parameters using the generator, you must generate the file and then use a diff tool to add only the new information and not to change existing information. + +If you are adding new RPCs entirely, you can generate those RPCs. Use the `--skip` switch to only generate new files. You must add those files to Xcode project, SmartDeviceLink.h, and podspec files manually and place them in proper groups sorting the files by their kind. Note: the groups are just virtual folders; they do not map to the file system, so all files go to the SmartDeviceLink folder on the file system. + + +## Objective-C transformation rules + +### Overview +These are the general transformation rules for SDL RPC classes Objective-C Library. For more information about the base classes for these RPCs, you can look in the app library. + +### Output Directory Structure and Package definitions +The script creates corresponding RPC classes of ``, `` and `` elements following the `MOBILE_API.xml` rules. According to existing structure of sdl_ios library the output directory will contain the following files (plain structure, no subfolders). + +RPC requests, responses, structs, enums, and notifications file names all have the form: + +* SDLxxx.h +* SDLxxx.m + +Responses have the form: + +* SDLxxxResponse.h +* SDLxxxResponse.m + +Where the **xxx** is the correspondent item name. + +### The License Header + +All files should begin with the license information. + +```jinja2 +/* + * Copyright (c) {{year}}, SmartDeviceLink Consortium, 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 SmartDeviceLink Consortium Inc. 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. + */ +``` + +Where `{{year}}` in the copyright line is the current year. + +### General rules for Objective-C classes +1. Default initializer applies only to Functions(Request / Response / Notification) classes + +```objc +- (instancetype)init { + self = [super initWithName:SDLRPCFunctionNameRegisterAppInterface]; + if (!self) { return nil; } + + return self; +} +``` + +2. Initializer for mandatory params if there is/are any in XML (skipped if no params) +3. Initializer for all params if there is/are any which is not mandatory in XML (skipped if no params) + +#### Scalars +There are 4 type of scalar values declared in the SDL lib. These are: +1. **SDLInt** - A declaration that this NSNumber contains an NSInteger. +0. **SDLUInt** - A declaration that this NSNumber contains an NSUInteger. +0. **SDLBool** - A declaration that this NSNumber contains a BOOL. +0. **SDLFloat** - A declaration that this NSNumber contains a float. + +*Note: These are syntactic sugar to help the developer know what type of value is held in the `NSNumber`.* + +Usage example: +```objc +@property (strong, nonatomic) NSNumber *touchEventId; +``` + +or in an array: +```objc +@property (strong, nonatomic) NSArray *> *timeStamp; +``` + +#### Enums +RPC Enums in SDL are strings. sdl_ios uses `NSString` `typedef`ed with a proper enum type. In Swift projects, however, they become real enums by using the `NS_SWIFT_ENUM` compiler tag. + +Base definition of `SDLEnum`: + +```objc +typedef NSString* SDLEnum SDL_SWIFT_ENUM; + +*Note: This new defined type has already adds a pointer, so anything that inherits from `SDLEnum` needs no asterisk.* + +```objc +typedef SDLEnum SDLTouchType SDL_SWIFT_ENUM; // SDLTouchType will be considered an NSString by the compiler in Obj-C, but will be an enum object of type SDLTouchType in Swift. +``` + +And here is a concrete 'enum' item: + +```objc +extern SDLTouchType const SDLTouchTypeBegin; +``` + +If an item is deprecated then it will be declared as such: + +```objc +__deprecated +extern SDLTouchType const SDLTouchTypeBegin; +``` + +Take, for instance, the enum class `KeypressMode`: + +```xml + + Enumeration listing possible keyboard events. + + Each keypress is individually sent as the user presses the keyboard keys. + + + +``` + +In the following example, we would define in the header: + +```objc +extern SDLKeypressMode const SDLKeypressModeSingleKeypress; +``` + +and `SDLKeypressModeSingleKeypress` itself must be implemented in the correspondent `SDLKeypressMode.m ` file like so: + +```objc +SDLKeypressMode const SDLKeypressModeSingleKeypress = @"SINGLE_KEYPRESS"; +``` + +#### Structs + +Structures in sdl_ios are implemented as classes derived from the parent class SDLRPCStruct with all parameters implemented as `@property`. Let us take for an instance the `DeviceInfo` structure. In the XML it is declared as following: + +```xml + + Various information about connecting device. + + Device model + + + Device firmware revision + + + Device OS + + + Device OS version + + + Device mobile carrier (if applicable) + + + Omitted if connected not via BT. + + + ``` + +*Note: the file begins with the `NS_ASSUME_NONNULL_BEGIN` macro, which makes all properties / parameters mandatory. If a parameter is not mandatory, then the modifier `nullable` must be used* + +```objc +// SDLDeviceInfo.h + +#import "SDLRPCStruct.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Various information about connecting device. + * + * @since SDL 3.0.0 + */ +@interface SDLDeviceInfo : SDLRPCStruct + +/** + * @param hardware - hardware + * @param firmwareRev - firmwareRev + * @param os - os + * @param osVersion - osVersion + * @param carrier - carrier + * @param maxNumberRFCOMMPorts - @(maxNumberRFCOMMPorts) + * @return A SDLDeviceInfo object + */ +- (instancetype)initWithHardware:(nullable NSString *)hardware firmwareRev:(nullable NSString *)firmwareRev os:(nullable NSString *)os osVersion:(nullable NSString *)osVersion carrier:(nullable NSString *)carrier maxNumberRFCOMMPorts:(UInt8)maxNumberRFCOMMPorts; + +/** + * Device model + * {"default_value": null, "max_length": 500, "min_length": 0} + */ +@property (nullable, strong, nonatomic) NSString *hardware; + +/** + * Device firmware revision + * {"default_value": null, "max_length": 500, "min_length": 0} + */ +@property (nullable, strong, nonatomic) NSString *firmwareRev; + +/** + * Device OS + * {"default_value": null, "max_length": 500, "min_length": 0} + */ +@property (nullable, strong, nonatomic) NSString *os; + +/** + * Device OS version + * {"default_value": null, "max_length": 500, "min_length": 0} + */ +@property (nullable, strong, nonatomic) NSString *osVersion; + +/** + * Device mobile carrier (if applicable) + * {"default_value": null, "max_length": 500, "min_length": 0} + */ +@property (nullable, strong, nonatomic) NSString *carrier; + +/** + * Omitted if connected not via BT. + * {"default_value": null, "max_value": 100, "min_value": 0} + */ +@property (nullable, strong, nonatomic) NSNumber *maxNumberRFCOMMPorts; + +@end + +NS_ASSUME_NONNULL_END +``` + +The implementation **SDLDeviceInfo.m** file: + +```objc +// SDLDeviceInfo.m + +#import "SDLDeviceInfo.h" +#import "NSMutableDictionary+Store.h" +#import "SDLRPCParameterNames.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation SDLDeviceInfo + +- (instancetype)initWithHardware:(nullable NSString *)hardware firmwareRev:(nullable NSString *)firmwareRev os:(nullable NSString *)os osVersion:(nullable NSString *)osVersion carrier:(nullable NSString *)carrier maxNumberRFCOMMPorts:(UInt8)maxNumberRFCOMMPorts { + self = [super init]; + if (!self) { + return nil; + } + self.hardware = hardware; + self.firmwareRev = firmwareRev; + self.os = os; + self.osVersion = osVersion; + self.carrier = carrier; + self.maxNumberRFCOMMPorts = @(maxNumberRFCOMMPorts); + return self; +} + +- (void)setHardware:(nullable NSString *)hardware { + [self.store sdl_setObject:hardware forName:SDLRPCParameterNameHardware]; +} + +- (nullable NSString *)hardware { + return [self.store sdl_objectForName:SDLRPCParameterNameHardware ofClass:NSString.class error:nil]; +} + +- (void)setFirmwareRev:(nullable NSString *)firmwareRev { + [self.store sdl_setObject:firmwareRev forName:SDLRPCParameterNameFirmwareRev]; +} + +- (nullable NSString *)firmwareRev { + return [self.store sdl_objectForName:SDLRPCParameterNameFirmwareRev ofClass:NSString.class error:nil]; +} + +- (void)setOs:(nullable NSString *)os { + [self.store sdl_setObject:os forName:SDLRPCParameterNameOs]; +} + +- (nullable NSString *)os { + return [self.store sdl_objectForName:SDLRPCParameterNameOs ofClass:NSString.class error:nil]; +} + +- (void)setOsVersion:(nullable NSString *)osVersion { + [self.store sdl_setObject:osVersion forName:SDLRPCParameterNameOsVersion]; +} + +- (nullable NSString *)osVersion { + return [self.store sdl_objectForName:SDLRPCParameterNameOsVersion ofClass:NSString.class error:nil]; +} + +- (void)setCarrier:(nullable NSString *)carrier { + [self.store sdl_setObject:carrier forName:SDLRPCParameterNameCarrier]; +} + +- (nullable NSString *)carrier { + return [self.store sdl_objectForName:SDLRPCParameterNameCarrier ofClass:NSString.class error:nil]; +} + +- (void)setMaxNumberRFCOMMPorts:(nullable NSNumber *)maxNumberRFCOMMPorts { + [self.store sdl_setObject:maxNumberRFCOMMPorts forName:SDLRPCParameterNameMaxNumberRFCOMMPorts]; +} + +- (nullable NSNumber *)maxNumberRFCOMMPorts { + return [self.store sdl_objectForName:SDLRPCParameterNameMaxNumberRFCOMMPorts ofClass:NSNumber.class error:nil]; +} + +@end + +NS_ASSUME_NONNULL_END +``` + +#### Functions + +Functions in iOS are implemented as 3 different classes (`SDLRPCRequest`, `SDLRPCResponse`, and `SDLRPCNotification`) grouped by their respective type. All the 3 extend the common parent class `SDLRPCMessage`. + + +##### Function ID, Function Name, and Parameter Name Special Case Class +There is also the `SDLFunctionID` class generated though it is not declared in the XML. This class maps all function IDs that are integers to function names as strings. + +1. Uses of the `"name"` attribute should be normalized by the removal of the ID suffix, e.g. `RegisterAppInterfaceID -> RegisterAppInterface`. +2. The constant name should be camel case formatted. +3. The constant has 2 fields the first is the `int` value of the `"value"` attribute and the second is the `String` value of normalized `"name"` attribute. + +Internally it uses another file that lists all the function names `SDLRPCFunctionNames`. + +```objc +// SDLFunctionID.h + +#import +#import "NSNumber+NumberType.h" +#import "SDLRPCFunctionNames.h" + +NS_ASSUME_NONNULL_BEGIN + +/// A function ID for an SDL RPC +@interface SDLFunctionID : NSObject + +/// The shared object for pulling function id information ++ (instancetype)sharedInstance; + +/// Gets the function name for a given SDL RPC function ID +/// +/// @param functionID A function ID +/// @returns An SDLRPCFunctionName +- (nullable SDLRPCFunctionName)functionNameForId:(UInt32)functionID; + +/// Gets the function ID for a given SDL RPC function name +/// +/// @param functionName The RPC function name +- (nullable NSNumber *)functionIdForName:(SDLRPCFunctionName)functionName; + +@end + +NS_ASSUME_NONNULL_END +``` + +Each from MOBILE_API.XML declares its function name in `SDLRPCFunctionNames.h` and `SDLRPCFunctionNames.m` files. + +```objc +SDLRPCFunctionNames.h +#import "SDLEnum.h" +/** +* All RPC request / response / notification names +*/ +typedef SDLEnum SDLRPCFunctionName SDL_SWIFT_ENUM; + +/// Function name for an AddCommand RPC +extern SDLRPCFunctionName const SDLRPCFunctionNameAddCommand; + +/// Function name for an AddSubMenu RPC +extern SDLRPCFunctionName const SDLRPCFunctionNameAddSubMenu; + +. . . and so on +``` + +And the implementation file SDLRPCFunctionNames.m : + +```objc +// +// SDLRPCFunctionNames.m +// SmartDeviceLink +// + +#import "SDLRPCFunctionNames.h" + +SDLRPCFunctionName const SDLRPCFunctionNameAddCommand = @"AddCommand"; +SDLRPCFunctionName const SDLRPCFunctionNameAddSubMenu = @"AddSubMenu"; + +. . . and so on +``` + +Each from MOBILE_API.XML declares its parameter name in `SDLRPCParameterNames.h` and `SDLRPCParameterNames.m` files. + +```objc +// SDLRPCParameterNames.h + +#import +#import "SDLMacros.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef NSString* SDLRPCParameterName SDL_SWIFT_ENUM; + +extern SDLRPCParameterName const SDLRPCParameterNameAcEnable; +extern SDLRPCParameterName const SDLRPCParameterNameAcEnableAvailable; + +. . . and so on +``` + +And the implementation file SDLRPCParameterNames.m : + +```objc +// SDLRPCParameterNames.h + +#import "NSMutableDictionary+Store.h" +#import "SDLRPCParameterNames.h" + +NS_ASSUME_NONNULL_BEGIN + +SDLRPCParameterName const SDLRPCParameterNameAcEnable = @"acEnable"; +SDLRPCParameterName const SDLRPCParameterNameAcEnableAvailable = @"acEnableAvailable"; + +. . . and so on +``` + +##### Request Functions (SDLRPCRequest) + + +```xml + + + RPC used to get the current properties of a cloud application + + + +``` + + +```objc +// SDLGetCloudAppProperties.h +// + +#import "SDLRPCRequest.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * RPC used to get the current properties of a cloud application + * + * @since SDL 5.1.0 + */ +@interface SDLGetCloudAppProperties : SDLRPCRequest + +/** + * @param appID + * @return A SDLGetCloudAppProperties object + */ +- (instancetype)initWithAppID:(NSString *)appID; + +/** + * {"default_value": null, "max_length": 100, "min_length": 1} + * + * Required, NSString * + */ +@property (strong, nonatomic) NSString *appID; + +@end + +NS_ASSUME_NONNULL_END +``` + +```objc +// SDLGetCloudAppProperties.m +// + +#import "SDLGetCloudAppProperties.h" +#import "NSMutableDictionary+Store.h" +#import "SDLRPCFunctionNames.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation SDLGetCloudAppProperties + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (instancetype)init { + self = [super initWithName:SDLRPCFunctionNameGetCloudAppProperties]; + if (!self) { return nil; } + + return self; +} +#pragma clang diagnostic pop + +- (void)setAppID:(NSString *)appID { + [self.parameters sdl_setObject:appID forName:SDLRPCParameterNameAppId]; +} + +- (NSString *)appID { + NSError *error = nil; + return [self.parameters sdl_objectForName:SDLRPCParameterNameAppId ofClass:NSString.class error:&error]; +} + +@end + +NS_ASSUME_NONNULL_END +``` + +##### Response Functions (SDLRPCResponse) + + +```xml + + + true if successful; false, if failed + + + + See Result + + + + + + + + + + + + + + + + Provides additional human readable info regarding the result. + + + + + Amount of time (in seconds) that an app must wait before resending an alert. + If provided, another system event or overlay currently has a higher priority than this alert. + An app must not send an alert without waiting at least the amount of time dictated. + + + +``` + + +```objc +// SDLAlertResponse.h +// + +#import "SDLRPCResponse.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * @since SDL 1.0.0 + */ +@interface SDLAlertResponse : SDLRPCResponse + +/** + * @param @(tryAgainTime) + * @return A SDLAlertResponse object + */ +- (instancetype)initWithTryAgainTime:(UInt32)tryAgainTime; + +/** + * Amount of time (in seconds) that an app must wait before resending an alert. If provided, another system event or + * overlay currently has a higher priority than this alert. An app must not send an alert without waiting at least + * the amount of time dictated. + * {"default_value": null, "max_value": 2000000000, "min_value": 0} + * + * @since SDL 2.0.0 + * + * Optional, UInt32 + */ +@property (nullable, strong, nonatomic) NSNumber *tryAgainTime; + +@end + +NS_ASSUME_NONNULL_END +``` + +```objc +// SDLAlertResponse.m +// + + +#import "SDLAlertResponse.h" +#import "NSMutableDictionary+Store.h" +#import "SDLRPCFunctionNames.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation SDLAlertResponse + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (instancetype)init { + self = [super initWithName:SDLRPCFunctionNameShowAppMenu]; + if (!self) { return nil; } + + return self; +} +#pragma clang diagnostic pop + +- (void)setTryAgainTime:(nullable NSNumber *)tryAgainTime { + [self.parameters sdl_setObject:tryAgainTime forName:SDLRPCParameterNameTryAgainTime]; +} + +- (nullable NSNumber *)tryAgainTime { + return [self.parameters sdl_objectForName:SDLRPCParameterNameTryAgainTime ofClass:NSNumber.class error:nil]; +} + +@end + +NS_ASSUME_NONNULL_END +``` + +##### Notification Functions (SDLRPCNotification) + + +```xml + + + See AppInterfaceUnregisteredReason + + +``` + +```objc +// SDLOnAppInterfaceUnregistered.h + +#import "SDLRPCNotification.h" + +@class SDLAppInterfaceUnregisteredReason; + +NS_ASSUME_NONNULL_BEGIN + +/** + * @since SDL 1.0.0 + */ +@interface SDLOnAppInterfaceUnregistered : SDLRPCNotification + +/** + * @param reason - @(reason) + * @return A SDLOnAppInterfaceUnregistered object + */ +- (instancetype)initWithReason:(SDLAppInterfaceUnregisteredReason)reason; + +/** + * See AppInterfaceUnregisteredReason + * + * Required, SDLAppInterfaceUnregisteredReason + */ +@property (strong, nonatomic) SDLAppInterfaceUnregisteredReason reason; + +@end + +NS_ASSUME_NONNULL_END +``` + +```objc +// SDLOnAppInterfaceUnregistered.m + +#import "SDLOnAppInterfaceUnregistered.h" +#import "NSMutableDictionary+Store.h" +#import "SDLAppInterfaceUnregisteredReason.h" +#import "SDLRPCParameterNames.h" +#import "SDLRPCFunctionNames.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation SDLOnAppInterfaceUnregistered + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (instancetype)init { + self = [super initWithName:SDLRPCFunctionNameOnAppInterfaceUnregistered]; + if (!self) { return nil; } + + return self; +} +#pragma clang diagnostic pop + +- (instancetype)initWithReason:(SDLAppInterfaceUnregisteredReason)reason { + self = [super init]; + if (!self) { + return nil; + } + self.reason = @(reason); + return self; +} + +- (void)setReason:(SDLAppInterfaceUnregisteredReason)reason { + [self.parameters sdl_setObject:reason forName:SDLRPCParameterNameReason]; +} + +- (SDLAppInterfaceUnregisteredReason)reason { + NSError *error = nil; + return [self.parameters sdl_enumForName:SDLRPCParameterNameReason error:&error]; +} + +@end + +NS_ASSUME_NONNULL_END +``` + +## Unit tests of Generator + +After you made any changes in python RPC generator to avoid affecting code logic you should run Unit tests as follow: + +```shell script +$ cd sdl_ios +$ python3 generator/test/runner.py +``` + +In case of successful execution of all Unit tests in output you will see the results as follow: + +```shell script +Ran 12 tests in 0.464s + +OK +``` + +As well you can check coverage by Unit tests of python RPC generator as follow: + +```shell script +coverage run generator/test/runner.py +coverage html +``` + +after the you can check the report in `htmlcov/index.html` + + +## Other Utilities + +### Generator + +Proxy Library RPC Generator inherits the license defined in the root folder of this project. + +#### Third Party Licenses + +Both the source and binary distributions of this software contain +some third party software. All the third party software included +or linked is redistributed under the terms and conditions of their +original licenses. + +The third party software included and used by this project is: + +**xmlschema** + +* Licensed under MIT License +* See [https://pypi.org/project/xmlschema/](https://pypi.org/project/xmlschema/) + +**Jinja2** + +* Licensed under BSD License (BSD-3-Clause) +* See [https://pypi.org/project/Jinja2/](https://pypi.org/project/Jinja2/) + +**coverage** + +* Licensed under Apache Software License (Apache 2.0) +* See [https://pypi.org/project/coverage/](https://pypi.org/project/coverage/) + +**pathlib2** + +* Licensed under MIT License +* See [https://pypi.org/project/pathlib2/](https://pypi.org/project/pathlib2/) + +**flake8** + +* Licensed under MIT License +* See [https://pypi.org/project/flake8/](https://pypi.org/project/flake8/) diff --git a/generator/__init__.py b/generator/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/generator/generator.py b/generator/generator.py new file mode 100644 index 000000000..2dda4129f --- /dev/null +++ b/generator/generator.py @@ -0,0 +1,489 @@ +""" +Generator +""" +import asyncio +import logging +import re +import sys +from argparse import ArgumentParser +from collections import namedtuple, OrderedDict +from datetime import datetime, date +from inspect import getfile +from os.path import basename, join +from pathlib import Path +from re import findall + +from jinja2 import UndefinedError, TemplateNotFound, FileSystemLoader, Environment, ChoiceLoader, \ + TemplateAssertionError, TemplateSyntaxError, TemplateRuntimeError + +ROOT = Path(__file__).absolute().parents[0] + +sys.path.append(ROOT.joinpath('rpc_spec/InterfaceParser').as_posix()) + +try: + from parsers.rpc_base import ParseError + from parsers.sdl_rpc_v2 import Parser + from model.interface import Interface + from transformers.common_producer import InterfaceProducerCommon as Common + from transformers.enums_producer import EnumsProducer + from transformers.functions_producer import FunctionsProducer + from transformers.structs_producer import StructsProducer +except ImportError as error: + print('%s.\nprobably you did not initialize submodule', error) + sys.exit(1) + + +class Generator: + """ + This class contains only technical features, as follow: + - parsing command-line arguments, or evaluating required container interactively; + - calling parsers to get Model from xml; + - calling producers to transform initial Model to dict used in Jinja2 templates + Not required to be covered by unit tests cause contains only technical features. + """ + + def __init__(self): + self.logger = logging.getLogger(self.__class__.__name__) + self._env = None + self._output_directory = None + self.loop = asyncio.get_event_loop() + self.paths_named = namedtuple('paths_named', 'enum_class struct_class request_class response_class ' + 'notification_class function_names parameter_names') + + _version = '1.0.0' + + @property + def get_version(self) -> str: + """ + version of the entire generator + :return: current entire generator version + """ + return self._version + + @property + def output_directory(self) -> Path: + """ + Getter for output directory + :return: output directory Path + """ + return self._output_directory + + @output_directory.setter + def output_directory(self, output_directory: str): + """ + Setting and validating output directory + :param output_directory: path to output directory + :return: None + """ + if output_directory.startswith('/'): + path = Path(output_directory).absolute().resolve() + else: + path = Path('.').absolute().joinpath(output_directory).resolve() + if not path.exists(): + self.logger.warning('Directory not found: %s, trying to create it', path) + try: + path.mkdir(parents=True, exist_ok=True) + except OSError as message1: + self.logger.critical('Failed to create directory %s, %s', path.as_posix(), message1) + sys.exit(1) + self._output_directory = path + + @property + def env(self) -> Environment: + """ + Getter for Jinja2 instance + :return: initialized Jinja2 instance + """ + return self._env + + @env.setter + def env(self, paths: list): + """ + Initiating Jinja2 instance + :param paths: list with paths to all Jinja2 templates + :return: None + """ + loaders = list(filter(lambda l: Path(l).exists(), paths)) + if not loaders: + self.logger.error('Directory with templates not found %s', str(paths)) + sys.exit(1) + loaders = [FileSystemLoader(l) for l in loaders] + + self._env = Environment(loader=ChoiceLoader(loaders)) + self._env.filters['title'] = self.title + self._env.globals['year'] = date.today().year + + @staticmethod + def title(name: str): + """ + Capitalizing only first character in string. Using for appropriate filter in Jinja2 + :param name: string to be capitalized first character + :return: initial parameter with capitalized first character + """ + return Common.title(name) + + def config_logging(self, verbose): + """ + Configuring logging for all application + :param verbose: if True setting logging.DEBUG else logging.ERROR + :return: None + """ + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter(fmt='%(asctime)s.%(msecs)03d - %(levelname)s - %(message)s', + datefmt='%H:%M:%S')) + root_logger = logging.getLogger() + + if verbose: + handler.setLevel(logging.DEBUG) + self.logger.setLevel(logging.DEBUG) + root_logger.setLevel(logging.DEBUG) + else: + handler.setLevel(logging.ERROR) + self.logger.setLevel(logging.ERROR) + root_logger.setLevel(logging.ERROR) + logging.getLogger().handlers.clear() + root_logger.addHandler(handler) + + def get_parser(self): + """ + Parsing and evaluating command-line arguments + :return: object with parsed and validated CLI arguments + """ + if len(sys.argv) == 2 and sys.argv[1] in ('-v', '--version'): + print(self.get_version) + sys.exit(0) + + container = namedtuple('container', 'name path') + xml = container('source_xml', ROOT.joinpath('rpc_spec/MOBILE_API.xml')) + required_source = not xml.path.exists() + + out = container('output_directory', ROOT.parents[0].joinpath('SmartDeviceLink')) + output_required = not out.path.exists() + + parser = ArgumentParser(description='Proxy Library RPC Generator') + parser.add_argument('-v', '--version', action='store_true', help='print the version and sys.exit') + parser.add_argument('-xml', '--source-xml', '--input-file', required=required_source, + help='should point to MOBILE_API.xml') + parser.add_argument('-xsd', '--source-xsd', required=False) + parser.add_argument('-d', '--output-directory', required=output_required, + help='define the place where the generated output should be placed') + parser.add_argument('-t', '--templates-directory', nargs='?', default=ROOT.joinpath('templates').as_posix(), + help='path to directory with templates') + parser.add_argument('-r', '--regex-pattern', required=False, + help='only elements matched with defined regex pattern will be parsed and generated') + parser.add_argument('--verbose', action='store_true', help='display additional details like logs etc') + parser.add_argument('-e', '--enums', required=False, action='store_true', + help='if present, all enums will be generated') + parser.add_argument('-s', '--structs', required=False, action='store_true', + help='if present, all structs will be generated') + parser.add_argument('-m', '-f', '--functions', required=False, action='store_true', + help='if present, all functions will be generated') + parser.add_argument('-y', '--overwrite', action='store_true', + help='force overwriting of existing files in output directory, ignore confirmation message') + parser.add_argument('-n', '--skip', action='store_true', + help='skip overwriting of existing files in output directory, ignore confirmation message') + + args, unknown = parser.parse_known_args() + + if unknown: + print('found unknown arguments: ' + ' '.join(unknown)) + parser.print_help(sys.stderr) + sys.exit(1) + + if args.skip and args.overwrite: + print('please select only one option skip "-n" or overwrite "-y"') + sys.exit(1) + + if not args.enums and not args.structs and not args.functions: + args.enums = args.structs = args.functions = True + + for kind in (xml, out): + if not getattr(args, kind.name) and kind.path.exists(): + while True: + try: + confirm = input('Confirm default path {} for {} [Y/n]:\t' + .format(kind.path, kind.name)) + if confirm.lower() == 'y' or not confirm: + print('{} set to {}'.format(kind.name, kind.path)) + setattr(args, kind.name, kind.path.as_posix()) + break + if confirm.lower() == 'n': + print('provide argument ' + kind.name) + sys.exit(1) + except KeyboardInterrupt: + print('\nThe user interrupted the execution of the program') + sys.exit(1) + + self.logger.debug('parsed arguments:\n%s', vars(args)) + + return args + + def versions_compatibility_validating(self): + """ + Version of generator script requires the same or lesser version of parser script. + if the parser script needs to fix a bug (and becomes, e.g. 1.0.1) and the generator script stays at 1.0.0. + As long as the generator script is the same or greater major version, it should be parsable. + This requires some level of backward compatibility. E.g. they have to be the same major version. + """ + + regex = r'(\d+\.\d+).(\d)' + + parser_origin = Parser().get_version + generator_origin = self.get_version + parser_split = findall(regex, parser_origin).pop() + generator_split = findall(regex, generator_origin).pop() + + parser_major = float(parser_split[0]) + generator_major = float(generator_split[0]) + + if parser_major > generator_major: + self.logger.critical('Generator (%s) requires the same or lesser version of Parser (%s)', + generator_origin, parser_origin) + sys.exit(1) + + self.logger.info('Parser type: %s, version %s,\tGenerator version %s', + basename(getfile(Parser().__class__)), parser_origin, generator_origin) + + def get_file_content(self, file_name: Path) -> list: + """ + + :param file_name: + :return: + """ + try: + with file_name.open('r') as file: + content = file.readlines() + return content + except FileNotFoundError as message1: + self.logger.error(message1) + return [] + + def get_key_words(self, file_name=ROOT.joinpath('rpc_spec/RpcParser/RESERVED_KEYWORDS')): + """ + :param file_name: + :return: + """ + content = self.get_file_content(file_name) + content = tuple(map(lambda e: re.sub(r'\n', r'', e).strip().casefold(), content)) + content = tuple(filter(lambda e: not re.search(r'^#+\s+.+|^$', e), content)) + return content + + def get_paths(self, file_name: Path = ROOT.joinpath('paths.ini')): + """ + Getting and validating parent classes names + :param file_name: path to file with container + :return: namedtuple with container to key elements + """ + content = self.get_file_content(file_name) + if not content: + self.logger.critical('%s not found', file_name) + sys.exit(1) + data = OrderedDict() + + for line in content: + if line.startswith('#'): + self.logger.warning('commented property %s, which will be skipped', line.strip()) + continue + if re.match(r'^(\w+)\s?=\s?(.+)', line): + if len(line.split('=')) > 2: + self.logger.critical('can not evaluate value, too many separators %s', str(line)) + sys.exit(1) + name, var = line.partition('=')[::2] + if name.strip() in data: + self.logger.critical('duplicate key %s', name) + sys.exit(1) + data[name.strip().lower()] = var.strip() + + missed = list(set(self.paths_named._fields) - set(data.keys())) + if missed: + self.logger.critical('in %s missed fields: %s ', content, str(missed)) + sys.exit(1) + + return self.paths_named(**data) + + def write_file(self, file: Path, templates: list, data: dict): + """ + Calling producer/transformer instance to transform initial Model to dict used in jinja2 templates. + Applying transformed dict to jinja2 templates and writing to appropriate file + :param file: output file name + :param templates: list with templates + :param data: Dictionary with prepared output data, ready to be applied to Jinja2 template + """ + try: + render = self.env.get_or_select_template(templates).render(data) + with file.open('w', encoding='utf-8') as handler: + handler.write(render) + except (TemplateNotFound, UndefinedError, TemplateAssertionError, TemplateSyntaxError, TemplateRuntimeError) \ + as error1: + self.logger.error('skipping %s, template not found %s', file.as_posix(), error1) + + async def process_main(self, skip: bool, overwrite: bool, items: dict, transformer): + """ + Process each item from initial Model. According to provided arguments skipping, overriding or asking what to to. + :param skip: if file exist skip it + :param overwrite: if file exist overwrite it + :param items: elements initial Model + :param transformer: producer/transformer instance + """ + tasks = [] + for item in items.values(): + if item.name == 'FunctionID': + self.logger.warning('%s will be skipped', item.name) + continue + render = transformer.transform(item) + file = self.output_directory.joinpath(render.get('name', item.name)) + for extension in ('.h', '.m'): + data = render.copy() + data['imports'] = data['imports'][extension] + file_with_suffix = file.with_suffix(extension) + templates = ['{}s/template{}.jinja2'.format(type(item).__name__.lower(), extension)] + if 'template' in data: + templates.insert(0, data['template'] + extension) + tasks.append(self.process_common(skip, overwrite, file_with_suffix, data, templates)) + + await asyncio.gather(*tasks) + + async def process_function_name(self, skip: bool, overwrite: bool, functions: dict, structs: dict, + transformer: FunctionsProducer): + """ + Processing output for SDLRPCFunctionNames and SDLRPCParameterNames + :param skip: if target file exist it will be skipped + :param overwrite: if target file exist it will be overwritten + :param functions: Dictionary with all functions + :param structs: Dictionary with all structs + :param transformer: FunctionsProducer (transformer) instance + :return: + """ + tasks = [] + for name in [transformer.function_names, transformer.parameter_names]: + file = self.output_directory.joinpath(name) + if name == transformer.function_names: + data = transformer.get_function_names(functions) + elif name == transformer.parameter_names: + data = transformer.get_simple_params(functions, structs) + else: + self.logger.error('No "data" for %s', name) + continue + for extension in ('.h', '.m'): + templates = ['{}{}.jinja2'.format(name, extension)] + file_with_suffix = file.with_suffix(extension) + tasks.append(self.process_common(skip, overwrite, file_with_suffix, data, templates)) + + await asyncio.gather(*tasks) + + async def process_common(self, skip: bool, overwrite: bool, file_with_suffix: Path, data: dict, templates: list): + """ + Processing output common + :param skip: if target file exist it will be skipped + :param overwrite: if target file exist it will be overwritten + :param file_with_suffix: output file name + :param data: Dictionary with prepared output data, ready to be applied to Jinja2 template + :param templates: list with paths to Jinja2 templates + :return: None + """ + if file_with_suffix.is_file(): + if skip: + self.logger.info('Skipping %s', file_with_suffix.name) + return + if overwrite: + self.logger.info('Overriding %s', file_with_suffix.name) + file_with_suffix.unlink() + self.write_file(file_with_suffix, templates, data) + else: + while True: + try: + confirm = input('File already exists {}. Overwrite? [Y/n]:\t' + .format(file_with_suffix.name)) + if confirm.lower() == 'y' or not confirm: + self.logger.info('Overriding %s', file_with_suffix.name) + self.write_file(file_with_suffix, templates, data) + break + if confirm.lower() == 'n': + self.logger.info('Skipping %s', file_with_suffix.name) + break + except KeyboardInterrupt: + print('\nThe user interrupted the execution of the program') + sys.exit(1) + else: + self.logger.info('Writing new %s', file_with_suffix.name) + self.write_file(file_with_suffix, templates, data) + + @staticmethod + def filter_pattern(interface, pattern): + """ + Filtering Model to match with regex pattern + :param interface: Initial (original) Model, obtained from module 'rpc_spec/InterfaceParser' + :param pattern: regex pattern (string) + :return: Model with items which match with regex pattern + """ + enum_names = tuple(interface.enums.keys()) + struct_names = tuple(interface.structs.keys()) + + if pattern: + match = {key: OrderedDict() for key in vars(interface).keys()} + match['params'] = interface.params + for key, value in vars(interface).items(): + if key == 'params': + continue + match[key].update({name: item for name, item in value.items() if re.match(pattern, item.name)}) + return Interface(**match), enum_names, struct_names + return interface, enum_names, struct_names + + async def parser(self, source_xml, source_xsd): + """ + Getting Model from source_xml, parsed and validated by module 'rpc_spec/InterfaceParser' + :param source_xml: path to xml file + :param source_xsd: path to xsd file + :return: Model, obtained from module 'rpc_spec/InterfaceParser' + """ + try: + start = datetime.now() + model = self.loop.run_in_executor(None, Parser().parse, source_xml, source_xsd) + model = await model + self.logger.debug('finish getting model in %s milisec,', (datetime.now() - start).microseconds / 1000.0) + return model + except ParseError as error1: + self.logger.error(error1) + sys.exit(1) + + def main(self): + """ + Entry point for parser and generator + :return: None + """ + args = self.get_parser() + self.config_logging(args.verbose) + self.versions_compatibility_validating() + self.output_directory = args.output_directory + + interface = self.loop.run_until_complete(self.parser(args.source_xml, args.source_xsd)) + paths = self.get_paths() + + self.env = [args.templates_directory] + [join(args.templates_directory, k) for k in vars(interface).keys()] + + filtered, enum_names, struct_names = self.filter_pattern(interface, args.regex_pattern) + + tasks = [] + key_words = self.get_key_words() + + functions_transformer = FunctionsProducer(paths, enum_names, struct_names, key_words) + if args.enums and filtered.enums: + tasks.append(self.process_main(args.skip, args.overwrite, filtered.enums, + EnumsProducer(paths.enum_class, key_words))) + if args.structs and filtered.structs: + tasks.append(self.process_main(args.skip, args.overwrite, filtered.structs, + StructsProducer(paths.struct_class, enum_names, struct_names, key_words))) + if args.functions and filtered.functions: + tasks.append(self.process_main(args.skip, args.overwrite, filtered.functions, functions_transformer)) + tasks.append(self.process_function_name(args.skip, args.overwrite, interface.functions, + interface.structs, functions_transformer)) + if tasks: + self.loop.run_until_complete(asyncio.wait(tasks)) + else: + self.logger.warning('Nothing matched with "%s"', args.regex_pattern) + + self.loop.close() + + +if __name__ == '__main__': + Generator().main() diff --git a/generator/paths.ini b/generator/paths.ini new file mode 100644 index 000000000..9ea5bb800 --- /dev/null +++ b/generator/paths.ini @@ -0,0 +1,7 @@ +ENUM_CLASS = SDLEnum +STRUCT_CLASS = SDLRPCStruct +REQUEST_CLASS = SDLRPCRequest +RESPONSE_CLASS = SDLRPCResponse +NOTIFICATION_CLASS = SDLRPCNotification +FUNCTION_NAMES = SDLRPCFunctionNames +PARAMETER_NAMES = SDLRPCParameterNames \ No newline at end of file diff --git a/generator/requirements.txt b/generator/requirements.txt new file mode 100644 index 000000000..c59028039 --- /dev/null +++ b/generator/requirements.txt @@ -0,0 +1,5 @@ +xmlschema +Jinja2 +coverage +pathlib2 +flake8 \ No newline at end of file diff --git a/generator/rpc_spec b/generator/rpc_spec new file mode 160000 index 000000000..53e3dfb3c --- /dev/null +++ b/generator/rpc_spec @@ -0,0 +1 @@ +Subproject commit 53e3dfb3cd7ff75a3425312ae4aeb758a1e0fc51 diff --git a/generator/templates/SDLRPCFunctionNames.h.jinja2 b/generator/templates/SDLRPCFunctionNames.h.jinja2 new file mode 100644 index 000000000..5e13b735b --- /dev/null +++ b/generator/templates/SDLRPCFunctionNames.h.jinja2 @@ -0,0 +1,28 @@ +{% include 'copyright.jinja2' %} +// SDLRPCFunctionNames.h + +#import "SDLEnum.h" + +/** + * All RPC request / response / notification names + */ +typedef SDLEnum SDLRPCFunctionName SDL_SWIFT_ENUM; +{% for param in params %} +{#- description if exist in source xml, will be putted here + since if exist in source xml, will be putted here -#} +{%- if param.description or param.since %} +/** + {%- if param.description %} + {%- for d in param.description %} + * {{d}} + {%- endfor %}{% endif -%} + {%- if param.description and param.since %} + * + {%- endif %} + {%- if param.since %} + * @since SDL {{param.since}} + {%- endif %} + */ +{%- endif %} +extern SDLRPCFunctionName const SDLRPCFunctionName{{ param.name }}; +{% endfor -%} diff --git a/generator/templates/SDLRPCFunctionNames.m.jinja2 b/generator/templates/SDLRPCFunctionNames.m.jinja2 new file mode 100644 index 000000000..c7dc5a374 --- /dev/null +++ b/generator/templates/SDLRPCFunctionNames.m.jinja2 @@ -0,0 +1,7 @@ +{% include 'copyright.jinja2' %} +// SDLRPCFunctionNames.m + +#import "SDLRPCFunctionNames.h" +{% for param in params %} +SDLRPCFunctionName const SDLRPCFunctionName{{ param.name }} = @"{{ param.origin }}"; +{%- endfor %} diff --git a/generator/templates/SDLRPCParameterNames.h.jinja2 b/generator/templates/SDLRPCParameterNames.h.jinja2 new file mode 100644 index 000000000..7a5bbb746 --- /dev/null +++ b/generator/templates/SDLRPCParameterNames.h.jinja2 @@ -0,0 +1,14 @@ +{% include 'copyright.jinja2' %} +// SDLRPCParameterNames.h + +#import +#import "SDLMacros.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef NSString* SDLRPCParameterName SDL_SWIFT_ENUM; +{% for param in params %} +extern SDLRPCParameterName const SDLRPCParameterName{{ param.name }}; +{%- endfor %} + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/generator/templates/SDLRPCParameterNames.m.jinja2 b/generator/templates/SDLRPCParameterNames.m.jinja2 new file mode 100644 index 000000000..b29a1705c --- /dev/null +++ b/generator/templates/SDLRPCParameterNames.m.jinja2 @@ -0,0 +1,12 @@ +{% include 'copyright.jinja2' %} +// SDLRPCParameterNames.h + +#import "NSMutableDictionary+Store.h" +#import "SDLRPCParameterNames.h" + +NS_ASSUME_NONNULL_BEGIN +{% for param in params %} +SDLRPCParameterName const SDLRPCParameterName{{ param.name }} = @"{{ param.origin }}"; +{%- endfor %} + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/generator/templates/base_struct_function.h.jinja2 b/generator/templates/base_struct_function.h.jinja2 new file mode 100644 index 000000000..cd1c23d6b --- /dev/null +++ b/generator/templates/base_struct_function.h.jinja2 @@ -0,0 +1,57 @@ +{#- To avoid code duplication was crated this parent file, which contain common part used in: + "templates/functions/template.h" and "templates/structs/template.h". -#} +{% include 'copyright.jinja2' %} +{% block imports %} +{%- for import in imports.enum %} +#import "{{import}}.h" +{%- endfor %} +{%- if imports.struct %} +{% endif -%} +{%- for import in imports.struct %} +@class {{import}}; +{%- endfor %} +{%- endblock %} + +NS_ASSUME_NONNULL_BEGIN +{% include 'description.jinja2' %} +@interface {{name}} : {{extends_class}}{{ending}} +{%- block constructors %} +{% for c in constructors %} +/** + {%- if c.description %} + {%- for d in c.description %} + * {{d}} + {%- endfor %} + * + {%- endif %} + {%- for a in c.all %} + * @param {{a.variable}} - {{a.constructor_argument}} + {%- endfor %} + * @return A {{name}} object + */ +{%- if deprecated or c.deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{%- endif %} +- (instancetype)initWith{{c.init}}; +{%- if deprecated or c.deprecated %} +#pragma clang diagnostic pop +{%- endif %} +{% endfor -%} +{%- endblock -%} +{%- block methods %} +{%- for param in params %} +{%- include 'description_param.jinja2' %} +{%- if deprecated or param.deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{%- endif %} +@property ({{'nullable, ' if not param.mandatory}}{{param.modifier}}, nonatomic) {{param.type_sdl}}{{param.origin}}{{' __deprecated' if param.deprecated and param.deprecated is sameas true }}; +{%- if deprecated or param.deprecated %} +#pragma clang diagnostic pop +{%- endif %} +{% endfor %} +{%- endblock %} +@end + +NS_ASSUME_NONNULL_END diff --git a/generator/templates/base_struct_function.m.jinja2 b/generator/templates/base_struct_function.m.jinja2 new file mode 100644 index 000000000..30bb2e976 --- /dev/null +++ b/generator/templates/base_struct_function.m.jinja2 @@ -0,0 +1,71 @@ +{#- To avoid code duplication was crated this parent file, which contain common part used in: + "templates/functions/template.m" and "templates/structs/template.m". -#} +{% include 'copyright.jinja2' %} +{%- block imports %} +#import "{{name}}.h" +#import "NSMutableDictionary+Store.h" +{%- for import in imports %} +#import "{{import}}.h" +{%- endfor %} +{%- endblock %} + +NS_ASSUME_NONNULL_BEGIN +{% if deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" +{%- endif %} +@implementation {{name}} +{%- if deprecated %} +#pragma clang diagnostic pop +{%- endif %} +{% block constructors %} +{%- for c in constructors %} +{%- if deprecated or c.deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{%- endif %} +- (instancetype)initWith{{c.init}} { + self = [{{ 'self' if c.self else 'super' }} init{{ 'With' + c.self if c.self and c.self is string }}]; + if (!self) { + return nil; + } + {%- for a in c.arguments %} + self.{{a.origin}} = {{a.constructor_argument}}; + {%- endfor %} + return self; +} +{%- if deprecated or c.deprecated %} +#pragma clang diagnostic pop +{%- endif %} +{% endfor -%} +{% endblock -%} +{%- block methods %} +{%- for param in params %} +{%- if deprecated or param.deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{%- endif %} +- (void)set{{param.origin|title}}:({{'nullable ' if not param.mandatory}}{{param.type_generic}}{{param.type_sdl|trim}}){{param.origin}} { +{%- if deprecated or param.deprecated %} +#pragma clang diagnostic pop +{%- endif %} + [self.{{parameters_store}} sdl_setObject:{{param.origin}} forName:SDLRPCParameterName{{param.method_suffix}}]; +} +{% if deprecated or param.deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{%- endif %} +- ({{'nullable ' if not param.mandatory}}{{param.type_generic}}{{param.type_sdl|trim}}){{param.origin}} { +{%- if deprecated or param.deprecated %} +#pragma clang diagnostic pop +{%- endif %} + {% if param.mandatory -%} + NSError *error = nil; + {% endif -%} + return [self.{{parameters_store}} sdl_{{param.for_name}}ForName:SDLRPCParameterName{{param.method_suffix}}{{' ofClass:'+param.of_class if param.of_class}} error:{{'&error' if param.mandatory else 'nil'}}]; +} +{% endfor %} +{%- endblock %} +@end + +NS_ASSUME_NONNULL_END diff --git a/generator/templates/copyright.jinja2 b/generator/templates/copyright.jinja2 new file mode 100644 index 000000000..a037d487d --- /dev/null +++ b/generator/templates/copyright.jinja2 @@ -0,0 +1,31 @@ +/* + * Copyright (c) {{year}}, SmartDeviceLink Consortium, 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 SmartDeviceLink Consortium Inc. 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. + */ \ No newline at end of file diff --git a/generator/templates/description.jinja2 b/generator/templates/description.jinja2 new file mode 100644 index 000000000..fb4932270 --- /dev/null +++ b/generator/templates/description.jinja2 @@ -0,0 +1,24 @@ +{#- Content of this file include into every item (Enum/Struct/Function) between imports and typedef/@interface declaration -#} +{% if description or since or history %} +/** + {%- if description %} + {%- for d in description %} + * {{d}} + {%- endfor %}{% endif -%} + {%- if description and ( since or history ) %} + * + {%- endif %} + {%- if deprecated %} + * @deprecated + {%- endif %} + {%- if history %} + * @history SDL {{ history }} + {%- endif %} + {%- if since %} + * @since SDL {{ since }} + {%- endif %} + */ +{%- endif -%} +{%- if deprecated %} +__deprecated +{%- endif -%} diff --git a/generator/templates/description_param.jinja2 b/generator/templates/description_param.jinja2 new file mode 100644 index 000000000..cb0cc4244 --- /dev/null +++ b/generator/templates/description_param.jinja2 @@ -0,0 +1,21 @@ +{#- Content of this file include into every Param/sub-element of (Enum/Struct/Function) -#} +{% if param.description or param.since or param.history %} +/** + {%- if param.description %} + {%- for d in param.description %} + * {{d}} + {%- endfor %}{% endif -%} + {%- if param.description and ( param.since or param.history ) %} + * + {%- endif %} + {%- if param.deprecated %} + * @deprecated + {%- endif %} + {%- if param.history %} + * @history SDL {{ param.history }} + {%- endif %} + {%- if param.since %} + * @since SDL {{ param.since }} + {%- endif %} + */ +{%- endif %} diff --git a/generator/templates/enums/template.h.jinja2 b/generator/templates/enums/template.h.jinja2 new file mode 100644 index 000000000..edba9f0bf --- /dev/null +++ b/generator/templates/enums/template.h.jinja2 @@ -0,0 +1,28 @@ +{#- String based enum -#} +{% include 'copyright.jinja2' %} +{% block imports -%} +{%- for import in imports %} +#import "{{import}}.h" +{%- endfor %} +{%- endblock -%} +{%- block body %} +{% include 'description.jinja2' %} +typedef SDLEnum {{ name }} SDL_SWIFT_ENUM{{ending}}; +{% if deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{% endif %} +{%- for param in params %} +{%- include 'description_param.jinja2' %}{% if param.deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{%- endif %} +extern {{ name }} const {{ name }}{{param.name}}{{ " __deprecated" if param.deprecated and param.deprecated }}; +{% if param.deprecated -%} +#pragma clang diagnostic pop +{%- endif -%} +{% endfor -%} +{%- if deprecated %} +#pragma clang diagnostic pop +{%- endif %} +{% endblock -%} diff --git a/generator/templates/enums/template.m.jinja2 b/generator/templates/enums/template.m.jinja2 new file mode 100644 index 000000000..0e8ca0b2b --- /dev/null +++ b/generator/templates/enums/template.m.jinja2 @@ -0,0 +1,25 @@ +{% include 'copyright.jinja2' %} + +#import "{{name}}.h" +{%- block body %} +{% if add_typedef %} +typedef SDLEnum {{name}} SDL_SWIFT_ENUM; +{% endif -%} +{%- if deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{%- endif %} +{%- for param in params %} +{%- if param.deprecated %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +{%- endif %} +{{ name }} const {{ name }}{{param.name}} = @"{{param.origin}}"; +{%- if param.deprecated %} +#pragma clang diagnostic pop +{% endif %} +{%- endfor -%} +{%- if deprecated %} +#pragma clang diagnostic pop +{%- endif %} +{% endblock -%} diff --git a/generator/templates/functions/template.h.jinja2 b/generator/templates/functions/template.h.jinja2 new file mode 100644 index 000000000..28e3fd0be --- /dev/null +++ b/generator/templates/functions/template.h.jinja2 @@ -0,0 +1,2 @@ +{#- This template creates RPC requests, responses, and notification .h files -#} +{% extends "base_struct_function.h.jinja2" %} \ No newline at end of file diff --git a/generator/templates/functions/template.m.jinja2 b/generator/templates/functions/template.m.jinja2 new file mode 100644 index 000000000..9809b8df2 --- /dev/null +++ b/generator/templates/functions/template.m.jinja2 @@ -0,0 +1,21 @@ +{#- This template creates RPC requests, responses, and notification .m files -#} +{% extends "base_struct_function.m.jinja2" %} +{% block imports %} +{{super()}} +#import "SDLRPCFunctionNames.h" +#import "SDLRPCParameterNames.h" +{%- endblock %} +{% block constructors %} +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (instancetype)init { + self = [super initWithName:SDLRPCFunctionName{{origin}}]; + if (!self) { + return nil; + } + return self; +} +#pragma clang diagnostic pop +{{super()}} +{%- endblock -%} +{% set parameters_store = 'parameters' %} diff --git a/generator/templates/structs/template.h.jinja2 b/generator/templates/structs/template.h.jinja2 new file mode 100644 index 000000000..f57d273ca --- /dev/null +++ b/generator/templates/structs/template.h.jinja2 @@ -0,0 +1,2 @@ +{#- This template creates RPC struct .h files -#} +{% extends "base_struct_function.h.jinja2" %} \ No newline at end of file diff --git a/generator/templates/structs/template.m.jinja2 b/generator/templates/structs/template.m.jinja2 new file mode 100644 index 000000000..488b076af --- /dev/null +++ b/generator/templates/structs/template.m.jinja2 @@ -0,0 +1,7 @@ +{#- This template creates RPC struct .m files -#} +{% extends "base_struct_function.m.jinja2" %} +{% block imports %} +{{super()}} +#import "SDLRPCParameterNames.h" +{%- endblock %} +{% set parameters_store = 'store' %} \ No newline at end of file diff --git a/generator/test/__init__.py b/generator/test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/generator/test/runner.py b/generator/test/runner.py new file mode 100644 index 000000000..2cb413227 --- /dev/null +++ b/generator/test/runner.py @@ -0,0 +1,67 @@ +""" +All tests +""" +import logging +import sys +from pathlib import Path +from unittest import TestLoader, TestSuite, TextTestRunner + +ROOT = Path(__file__).absolute() + +sys.path.append(ROOT.parents[1].joinpath('rpc_spec/InterfaceParser').as_posix()) +sys.path.append(ROOT.parents[1].as_posix()) + +try: + from test_enums import TestEnumsProducer + from test_functions import TestFunctionsProducer + from test_structs import TestStructsProducer + from test_CodeFormatAndQuality import CodeFormatAndQuality +except ImportError as error: + print('{}.\nProbably you did not initialize submodule'.format(error)) + sys.exit(1) + + +def config_logging(): + """ + Configuring logging for all application + """ + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + datefmt='%m-%d %H:%M')) + root_logger = logging.getLogger() + handler.setLevel(logging.INFO) + root_logger.setLevel(logging.INFO) + root_logger.addHandler(handler) + + +def main(): + """ + Without performing Tests (simple instances initialization) there are following initial test code coverage: + generator/transformers/common_producer.py 21% + generator/transformers/enums_producer.py 24% + generator/transformers/functions_producer.py 18% + generator/transformers/structs_producer.py 32% + + After performing Tests there are following initial test code coverage: + generator/transformers/common_producer.py 100% + generator/transformers/enums_producer.py 100% + generator/transformers/functions_producer.py 100% + generator/transformers/structs_producer.py 100% + """ + config_logging() + suite = TestSuite() + + suite.addTests(TestLoader().loadTestsFromTestCase(TestFunctionsProducer)) + suite.addTests(TestLoader().loadTestsFromTestCase(TestStructsProducer)) + suite.addTests(TestLoader().loadTestsFromTestCase(TestEnumsProducer)) + suite.addTests(TestLoader().loadTestsFromTestCase(CodeFormatAndQuality)) + + runner = TextTestRunner(verbosity=2) + runner.run(suite) + + +if __name__ == '__main__': + """ + Entry point for parser and generator. + """ + main() diff --git a/generator/test/test_CodeFormatAndQuality.py b/generator/test/test_CodeFormatAndQuality.py new file mode 100755 index 000000000..c9b34e06f --- /dev/null +++ b/generator/test/test_CodeFormatAndQuality.py @@ -0,0 +1,32 @@ +""" +Interface model unit test +""" +import unittest +from os import walk +from os.path import join +from pathlib import Path + +from flake8.api import legacy as flake8 + + +class CodeFormatAndQuality(unittest.TestCase): + def setUp(self): + self.list_of_files = [] + for (directory, _, filenames) in walk(Path(__file__).absolute().parents[1].as_posix()): + self.list_of_files += [join(directory, file) for file in filenames + if file.endswith('.py') and 'test' not in directory + and 'rpc_spec' not in directory] + + def test_checkCodeFormatAndQuality(self): + """ + Performing checks of Code Format And Quality by flake8 + If any inconvenient low quality code will be found, this will be shown in stdout and + each such cases will be reflected with report.total_errors number + """ + style_guide = flake8.get_style_guide(max_line_length=120) + report = style_guide.check_files(self.list_of_files) + self.assertEqual(report.total_errors, 0) + + +if __name__ == '__main__': + unittest.main() diff --git a/generator/test/test_enums.py b/generator/test/test_enums.py new file mode 100644 index 000000000..22650ce67 --- /dev/null +++ b/generator/test/test_enums.py @@ -0,0 +1,83 @@ +from collections import OrderedDict +from unittest import TestCase + +try: + from generator import Generator +except ImportError as error: + from generator.generator import Generator + +from model.enum import Enum +from model.enum_element import EnumElement +from transformers.enums_producer import EnumsProducer + + +class TestEnumsProducer(TestCase): + """ + The structures of tests in this class was prepared to cover all possible combinations of code branching in tested + class EnumsProducer. + All names of Enums and nested elements doesn't reflating with real Enums + and could be replaces with some meaningless names. + + After performing Tests there are following initial test code coverage: + generator/transformers/common_producer.py 34% + generator/transformers/enums_producer.py 100% + """ + + def setUp(self): + self.maxDiff = None + key_words = Generator().get_key_words() + + self.producer = EnumsProducer('SDLEnum', key_words) + + def test_FunctionID(self): + """ + generator/transformers/common_producer.py 34% + generator/transformers/enums_producer.py 80% + """ + elements = OrderedDict() + elements['RESERVED'] = EnumElement(name='RESERVED', value=0) + elements['RegisterAppInterfaceID'] = EnumElement(name='RegisterAppInterfaceID', hex_value=1) + elements['PerformAudioPassThruID'] = EnumElement(name='PerformAudioPassThruID', hex_value=10) + + item = Enum(name='FunctionID', elements=elements) + expected = OrderedDict() + expected['origin'] = 'FunctionID' + expected['name'] = 'SDLFunctionID' + expected['imports'] = {'.h': {'SDLEnum'}, '.m': {'SDLEnum'}} + expected['params'] = ( + self.producer.param_named(description=[], name='Reserved', origin='RESERVED', since=None, deprecated=False), + self.producer.param_named(description=[], name='RegisterAppInterface', origin='RegisterAppInterfaceID', + since=None, deprecated=False), + self.producer.param_named(description=[], name='PerformAudioPassThru', origin='PerformAudioPassThruID', + since=None, deprecated=False),) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) + + def test_TextFieldName(self): + """ + generator/transformers/common_producer.py 34% + generator/transformers/enums_producer.py 98% + """ + elements = OrderedDict() + elements['SUCCESS'] = EnumElement(name='SUCCESS') + elements['mainField1'] = EnumElement(name='mainField1') + elements['H264'] = EnumElement(name='H264') + elements['UNSUPPORTED_REQUEST'] = EnumElement(name='UNSUPPORTED_REQUEST') + item = Enum(name='TextFieldName', elements=elements) + + expected = OrderedDict() + expected['origin'] = 'TextFieldName' + expected['name'] = 'SDLTextFieldName' + expected['imports'] = {'.h': {'SDLEnum'}, '.m': {'SDLEnum'}} + expected['params'] = ( + self.producer.param_named(description=[], name='Success', origin='SUCCESS', since=None, + deprecated=False), + self.producer.param_named(description=[], name='MainField1', origin='mainField1', since=None, + deprecated=False), + self.producer.param_named(description=[], name='H264', origin='H264', since=None, deprecated=False), + self.producer.param_named(description=[], name='UnsupportedRequest', origin='UNSUPPORTED_REQUEST', + since=None, deprecated=False)) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) diff --git a/generator/test/test_functions.py b/generator/test/test_functions.py new file mode 100644 index 000000000..a271fa23a --- /dev/null +++ b/generator/test/test_functions.py @@ -0,0 +1,456 @@ +import re +from collections import namedtuple, OrderedDict +from unittest import TestCase + +try: + from generator import Generator +except ImportError as error: + from generator.generator import Generator + +from model.array import Array +from model.boolean import Boolean +from model.enum import Enum +from model.enum_element import EnumElement +from model.float import Float +from model.function import Function +from model.integer import Integer +from model.param import Param +from model.string import String +from model.struct import Struct +from transformers.functions_producer import FunctionsProducer + + +class TestFunctionsProducer(TestCase): + """ + The structures of tests in this class was prepared to cover all possible combinations of code branching in tested + class FunctionsProducer. + All names of Functions and nested elements doesn't reflating with real Functions + and could be replaces with some meaningless names. + + After performing Tests there are following initial test code coverage: + generator/transformers/common_producer.py 99% + generator/transformers/functions_producer.py 100% + """ + + def setUp(self): + self.maxDiff = None + key_words = Generator().get_key_words() + + Paths = namedtuple('Paths', 'request_class response_class notification_class function_names parameter_names') + paths = Paths(request_class='SDLRPCRequest', + response_class='SDLRPCResponse', + notification_class='SDLRPCNotification', + function_names='SDLRPCFunctionNames', + parameter_names='SDLRPCParameterNames') + + enum_names = ('FileType', 'Language',) + struct_names = ('SyncMsgVersion', 'TemplateColorScheme', 'TTSChunk', 'Choice') + + self.producer = FunctionsProducer(paths, enum_names, struct_names, key_words) + + def test_process_function_name(self): + """ + generator/transformers/common_producer.py 29% + generator/transformers/functions_producer.py 61% + """ + functions = { + 'RegisterAppInterface': Function(name='RegisterAppInterface', + function_id=EnumElement(name='RegisterAppInterfaceID'), since='3.0.0', + message_type=EnumElement(name='request'), + description=['RegisterAppInterface description'], params={ + 'syncMsgVersion': Param(name='syncMsgVersion', param_type=Float(), since='3.5.0', + description=['syncMsgVersion description'])}), + 'OnHMIStatus': Function(name='OnHMIStatus', function_id=EnumElement(name='OnHMIStatusID'), since='4.0.0', + message_type=EnumElement(name='notification'), + description=['OnHMIStatus description'], params={ + 'acEnable': Param(name='acEnable', param_type=Integer(), since='4.5.0', + description=['acEnable description'])})} + structs = { + 'SoftButton': Struct(name='SoftButton', members={ + 'image': Param(name='image', param_type=String(), since='1.0.0', description=['image description']), + 'ignore': Param(name='ignore', param_type=Struct(name='ignore'))}), + 'PresetBankCapabilities': Struct(name='PresetBankCapabilities', members={ + 'availableHdChannelsAvailable': Param(name='availableHdChannelsAvailable', param_type=Boolean(), + since='2.0.0', + description=['availableHDChannelsAvailable description'])})} + + expected = [ + self.producer.common_names( + description=['OnHMIStatus description'], name='OnHMIStatus', origin='OnHMIStatus', since='4.0.0'), + self.producer.common_names( + description=['RegisterAppInterface description'], name='RegisterAppInterface', + origin='RegisterAppInterface', since='3.0.0')] + actual = self.producer.get_function_names(functions) + self.assertListEqual(expected, actual['params']) + + expected = [ + self.producer.common_names(description=['acEnable description'], name='AcEnable', + origin='acEnable', since='4.5.0'), + self.producer.common_names(description=['availableHDChannelsAvailable description'], + since='2.0.0', name='AvailableHdChannelsAvailable', + origin='availableHdChannelsAvailable'), + self.producer.common_names(description=[], name='Ignore', origin='ignore', since=None), + self.producer.common_names(description=['image description'], name='Image', origin='image', since='1.0.0'), + self.producer.common_names(description=[], name='PresetBankCapabilities', origin='PresetBankCapabilities', + since=None), + self.producer.common_names(description=[], name='SoftButton', origin='SoftButton', since=None), + self.producer.common_names(description=['syncMsgVersion description'], name='SdlMsgVersion', + origin='syncMsgVersion', since='3.5.0')] + actual = self.producer.get_simple_params(functions, structs) + self.assertCountEqual(expected, actual['params']) + + def test_RegisterAppInterfaceRequest(self): + """ + generator/transformers/common_producer.py 85% + generator/transformers/functions_producer.py 63% + """ + params = OrderedDict() + params['syncMsgVersion'] = Param( + name='syncMsgVersion', param_type=Struct(name='SyncMsgVersion', description=['Specifies the'], members={ + 'majorVersion': Param(name='majorVersion', param_type=Integer())}), description=['See SyncMsgVersion'], + is_mandatory=True) + params['fullAppID'] = Param(name='fullAppID', description=['ID used'], param_type=String(), is_mandatory=False) + params['dayColorScheme'] = Param( + name='dayColorScheme', param_type=Struct(name='TemplateColorScheme', description=[ + '\n A color scheme for all display layout templates.\n ']), is_mandatory=False) + params['ttsName'] = Param( + name='ttsName', description=['\n TTS string for'], is_mandatory=False, + param_type=Array(element_type=Struct(name='TTSChunk', description=['A TTS chunk']))) + params['isMediaApplication'] = Param( + name='isMediaApplication', param_type=Boolean(), + description=['\n Indicates if the application is a media or a '], is_mandatory=True) + + item = Function(name='RegisterAppInterface', function_id=EnumElement(name='RegisterAppInterfaceID'), + since='1.0.0', + description=['\n Establishes an interface with a mobile application.\n ' + 'Before registerAppInterface no other commands will be accepted/executed.\n '], + message_type=EnumElement(name='request'), params=params) + expected = OrderedDict() + expected['origin'] = 'RegisterAppInterface' + expected['name'] = 'SDLRegisterAppInterface' + expected['extends_class'] = 'SDLRPCRequest' + expected['imports'] = { + '.h': {'enum': {'SDLRPCRequest'}, 'struct': {'SDLTemplateColorScheme', 'SDLTTSChunk', 'SDLSdlMsgVersion'}}, + '.m': {'SDLTemplateColorScheme', 'SDLTTSChunk', 'SDLSdlMsgVersion'}} + expected['description'] = ['Establishes an interface with a mobile application. Before registerAppInterface no ' + 'other commands will be', 'accepted/executed.'] + expected['since'] = '1.0.0' + expected['params'] = ( + self.producer.param_named( + constructor_argument='sdlMsgVersion', constructor_argument_override=None, + constructor_prefix='SdlMsgVersion', deprecated=False, description=['See SyncMsgVersion'], + for_name='object', mandatory=True, method_suffix='SdlMsgVersion', modifier='strong', + of_class='SDLSdlMsgVersion.class', origin='sdlMsgVersion', since=None, + type_native='SDLSdlMsgVersion *', type_sdl='SDLSdlMsgVersion *'), + self.producer.param_named( + constructor_argument='fullAppID', constructor_argument_override=None, constructor_prefix='FullAppID', + deprecated=False, description=['ID used', + '{"default_value": null, "max_length": null, "min_length": null}'], + for_name='object', mandatory=False, method_suffix='FullAppID', modifier='strong', + of_class='NSString.class', origin='fullAppID', since=None, type_native='NSString *', + type_sdl='NSString *'), + self.producer.param_named( + constructor_argument='dayColorScheme', constructor_argument_override=None, mandatory=False, + constructor_prefix='DayColorScheme', deprecated=False, description=[], for_name='object', + method_suffix='DayColorScheme', modifier='strong', of_class='SDLTemplateColorScheme.class', + origin='dayColorScheme', since=None, type_native='SDLTemplateColorScheme *', + type_sdl='SDLTemplateColorScheme *'), + self.producer.param_named( + constructor_argument='ttsName', constructor_argument_override=None, constructor_prefix='TtsName', + deprecated=False, description=['TTS string for'], for_name='objects', mandatory=False, + method_suffix='TtsName', modifier='strong', of_class='SDLTTSChunk.class', origin='ttsName', since=None, + type_native='NSArray *', type_sdl='NSArray *'), + self.producer.param_named( + constructor_argument='isMediaApplication', constructor_argument_override=None, + constructor_prefix='IsMediaApplication', deprecated=False, + description=['Indicates if the application is a media or a'], for_name='object', mandatory=True, + method_suffix='IsMediaApplication', modifier='strong', of_class='NSNumber.class', + origin='isMediaApplication', since=None, type_native='BOOL', type_sdl='NSNumber *')) + + mandatory_arguments = [ + self.producer.argument_named(variable='sdlMsgVersion', deprecated=False, origin='sdlMsgVersion', + constructor_argument='sdlMsgVersion'), + self.producer.argument_named(variable='isMediaApplication', deprecated=False, origin='isMediaApplication', + constructor_argument='@(isMediaApplication)')] + not_mandatory_arguments = [ + self.producer.argument_named(variable='fullAppID', deprecated=False, origin='fullAppID', + constructor_argument='fullAppID'), + self.producer.argument_named(variable='dayColorScheme', deprecated=False, origin='dayColorScheme', + constructor_argument='dayColorScheme'), + self.producer.argument_named(variable='ttsName', deprecated=False, origin='ttsName', + constructor_argument='ttsName')] + mandatory_init = 'SdlMsgVersion:(SDLSdlMsgVersion *)sdlMsgVersion ' \ + 'isMediaApplication:(BOOL)isMediaApplication' + + expected['constructors'] = ( + self.producer.constructor_named( + all=mandatory_arguments, arguments=mandatory_arguments, deprecated=False, + init=mandatory_init, self=True), + self.producer.constructor_named( + all=mandatory_arguments + not_mandatory_arguments, arguments=not_mandatory_arguments, deprecated=False, + init=mandatory_init + ' fullAppID:(nullable NSString *)fullAppID dayColorScheme:(nullable ' + 'SDLTemplateColorScheme *)dayColorScheme ttsName:(nullable NSArray *)ttsName', + self=re.sub(r'([\w\d]+:)\([\w\d\s<>*]*\)([\w\d]+\s*)', r'\1\2', mandatory_init))) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) + + def test_RegisterAppInterfaceResponse(self): + """ + generator/transformers/common_producer.py 82% + generator/transformers/functions_producer.py 63% + """ + params = OrderedDict() + params['success'] = Param(name='success', param_type=Boolean(), description=[' True if '], is_mandatory=False) + params['language'] = Param(name='language', is_mandatory=False, param_type=Enum(name='Language', elements={ + 'EN-US': EnumElement(name='EN-US', description=['English - US'])}), description=['The currently']) + params['supportedDiagModes'] = Param( + name='supportedDiagModes', is_mandatory=False, description=['\n Specifies the'], + param_type=Array(element_type=Integer(max_value=255, min_value=0), max_size=100, min_size=1)) + params['hmiZoneCapabilities'] = Param(name='hmiZoneCapabilities', is_mandatory=False, + param_type=Array(element_type=Enum(name='HmiZoneCapabilities'), + max_size=100, min_size=1)) + + item = Function(name='RegisterAppInterface', function_id=EnumElement(name='RegisterAppInterfaceID'), + description=['The response '], message_type=EnumElement(name='response'), params=params) + + expected = OrderedDict() + expected['origin'] = 'RegisterAppInterface' + expected['name'] = 'SDLRegisterAppInterfaceResponse' + expected['extends_class'] = 'SDLRPCResponse' + expected['imports'] = {'.h': {'enum': {'SDLRPCResponse', 'SDLLanguage'}, 'struct': set()}, + '.m': {'SDLLanguage'}} + expected['description'] = ['The response'] + expected['params'] = ( + self.producer.param_named( + constructor_argument='language', constructor_argument_override=None, constructor_prefix='Language', + deprecated=False, description=['The currently'], for_name='enum', mandatory=False, + method_suffix='Language', modifier='strong', of_class='', origin='language', + since=None, type_native='SDLLanguage ', type_sdl='SDLLanguage '), + self.producer.param_named( + constructor_argument='supportedDiagModes', constructor_argument_override=None, + constructor_prefix='SupportedDiagModes', deprecated=False, description=['Specifies the'], + for_name='objects', mandatory=False, method_suffix='SupportedDiagModes', modifier='strong', + of_class='NSNumber.class', origin='supportedDiagModes', since=None, + type_native='NSArray *> *', type_sdl='NSArray *> *'), + self.producer.param_named( + constructor_argument='hmiZoneCapabilities', constructor_argument_override=None, + constructor_prefix='HmiZoneCapabilities', deprecated=False, description=[], for_name='enums', + mandatory=False, method_suffix='HmiZoneCapabilities', modifier='strong', + of_class='', origin='hmiZoneCapabilities', since=None, + type_native='NSArray *', type_sdl='NSArray *')) + + arguments = [self.producer.argument_named( + variable='language', deprecated=False, origin='language', constructor_argument='language'), + self.producer.argument_named( + variable='supportedDiagModes', deprecated=False, origin='supportedDiagModes', + constructor_argument='supportedDiagModes'), + self.producer.argument_named( + variable='hmiZoneCapabilities', deprecated=False, origin='hmiZoneCapabilities', + constructor_argument='hmiZoneCapabilities')] + + expected['constructors'] = ( + self.producer.constructor_named( + all=arguments, arguments=arguments, deprecated=False, + init='Language:(nullable SDLLanguage)language supportedDiagModes:(nullable NSArray *>' + ' *)supportedDiagModes hmiZoneCapabilities:(nullable NSArray *)' + 'hmiZoneCapabilities', + self=''),) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) + + def test_OnHMIStatus(self): + """ + generator/transformers/common_producer.py 66% + generator/transformers/functions_producer.py 65% + """ + item = Function(name='OnHMIStatus', function_id=EnumElement(name='OnHMIStatusID'), + message_type=EnumElement(name='notification'), params={ + 'hmiLevel': Param(name='hmiLevel', param_type=Enum(name='HMILevel')) + }) + expected = OrderedDict() + expected['origin'] = 'OnHMIStatus' + expected['name'] = 'SDLOnHMIStatus' + expected['extends_class'] = 'SDLRPCNotification' + expected['imports'] = { + ".h": {'enum': {'SDLRPCNotification'}, 'struct': set()}, + ".m": set() + } + expected['params'] = ( + self.producer.param_named( + constructor_argument='hmiLevel', constructor_argument_override=None, constructor_prefix='HmiLevel', + deprecated=False, description=[], for_name='enum', mandatory=True, method_suffix='HmiLevel', + modifier='strong', of_class='', origin='hmiLevel', since=None, + type_native='SDLHMILevel ', type_sdl='SDLHMILevel '),) + + arguments = [self.producer.argument_named(variable='hmiLevel', deprecated=False, origin='hmiLevel', + constructor_argument='hmiLevel')] + + expected['constructors'] = (self.producer.constructor_named( + all=arguments, arguments=arguments, deprecated=False, self=True, init='HmiLevel:(SDLHMILevel)hmiLevel'),) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) + + def test_CreateWindow(self): + """ + generator/transformers/common_producer.py 82% + generator/transformers/functions_producer.py 63% + """ + params = OrderedDict() + params['windowID'] = Param(name='windowID', param_type=Integer()) + params['cmdID'] = Param(name='cmdID', param_type=Integer(max_value=2000000000, min_value=0)) + params['position'] = Param(name='position', param_type=Integer(default_value=1000, max_value=1000, min_value=0)) + params['speed'] = Param(name='speed', param_type=Float(max_value=700.0, min_value=0.0)) + params['offset'] = Param(name='offset', param_type=Integer(max_value=100000000000, min_value=0)) + params['duplicateUpdatesFromWindowID'] = Param(name='duplicateUpdatesFromWindowID', param_type=Integer(), + is_mandatory=False) + item = Function(name='CreateWindow', function_id=EnumElement(name='CreateWindowID'), + message_type=EnumElement(name='request'), params=params) + + expected = OrderedDict() + expected['origin'] = 'CreateWindow' + expected['name'] = 'SDLCreateWindow' + expected['extends_class'] = 'SDLRPCRequest' + expected['imports'] = {'.m': set(), '.h': {'struct': set(), 'enum': {'SDLRPCRequest'}}} + expected['params'] = ( + self.producer.param_named( + constructor_argument='windowID', constructor_argument_override=None, constructor_prefix='WindowID', + deprecated=False, description=['{"default_value": null, "max_value": null, "min_value": null}'], + for_name='object', mandatory=True, method_suffix='WindowID', modifier='strong', + of_class='NSNumber.class', origin='windowID', since=None, type_native='UInt32', + type_sdl='NSNumber *'), + self.producer.param_named( + constructor_argument='cmdID', constructor_argument_override=None, constructor_prefix='CmdID', + deprecated=False, description=['{"default_value": null, "max_value": 2000000000, "min_value": 0}'], + for_name='object', mandatory=True, method_suffix='CmdID', modifier='strong', of_class='NSNumber.class', + origin='cmdID', since=None, type_native='UInt32', type_sdl='NSNumber *'), + self.producer.param_named( + constructor_argument='position', constructor_argument_override=None, constructor_prefix='Position', + deprecated=False, description=['{"default_value": 1000, "max_value": 1000, "min_value": 0}'], + for_name='object', mandatory=True, method_suffix='Position', modifier='strong', + of_class='NSNumber.class', origin='position', since=None, type_native='UInt16', + type_sdl='NSNumber *'), + self.producer.param_named( + constructor_argument='speed', constructor_argument_override=None, constructor_prefix='Speed', + deprecated=False, description=['{"default_value": null, "max_value": 700.0, "min_value": 0.0}'], + for_name='object', mandatory=True, method_suffix='Speed', modifier='strong', of_class='NSNumber.class', + origin='speed', since=None, type_native='float', type_sdl='NSNumber *'), + self.producer.param_named( + constructor_argument='offset', constructor_argument_override=None, constructor_prefix='Offset', + deprecated=False, description=['{"default_value": null, "max_value": 100000000000, "min_value": 0}'], + for_name='object', mandatory=True, method_suffix='Offset', modifier='strong', of_class='NSNumber.class', + origin='offset', since=None, type_native='UInt64', type_sdl='NSNumber *'), + self.producer.param_named( + constructor_argument='duplicateUpdatesFromWindowID', constructor_argument_override=None, + constructor_prefix='DuplicateUpdatesFromWindowID', deprecated=False, + description=['{"default_value": null, "max_value": null, "min_value": null}'], for_name='object', + mandatory=False, method_suffix='DuplicateUpdatesFromWindowID', modifier='strong', + of_class='NSNumber.class', origin='duplicateUpdatesFromWindowID', since=None, + type_native='NSNumber *', type_sdl='NSNumber *')) + + not_mandatory_arguments = [ + self.producer.argument_named(variable='windowID', deprecated=False, origin='windowID', + constructor_argument='@(windowID)'), + self.producer.argument_named(variable='cmdID', deprecated=False, origin='cmdID', + constructor_argument='@(cmdID)'), + self.producer.argument_named(variable='position', deprecated=False, origin='position', + constructor_argument='@(position)'), + self.producer.argument_named(variable='speed', deprecated=False, origin='speed', + constructor_argument='@(speed)'), + self.producer.argument_named(variable='offset', deprecated=False, origin='offset', + constructor_argument='@(offset)')] + mandatory_arguments = [self.producer.argument_named( + variable='duplicateUpdatesFromWindowID', deprecated=False, origin='duplicateUpdatesFromWindowID', + constructor_argument='duplicateUpdatesFromWindowID')] + + expected['constructors'] = ( + self.producer.constructor_named( + all=not_mandatory_arguments, arguments=not_mandatory_arguments, deprecated=False, self=True, + init='WindowID:(UInt32)windowID cmdID:(UInt32)cmdID position:(UInt16)position speed:(float)speed ' + 'offset:(UInt64)offset'), + self.producer.constructor_named( + all=not_mandatory_arguments + mandatory_arguments, arguments=mandatory_arguments, + deprecated=False, self='WindowID:windowID cmdID:cmdID position:position speed:speed offset:offset', + init='WindowID:(UInt32)windowID cmdID:(UInt32)cmdID position:(UInt16)position speed:(float)speed ' + 'offset:(UInt64)offset duplicateUpdatesFromWindowID:(nullable NSNumber *)' + 'duplicateUpdatesFromWindowID')) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) + + def test_CreateInteractionChoiceSet(self): + """ + generator/transformers/common_producer.py 67% + generator/transformers/functions_producer.py 63% + """ + params = OrderedDict() + params['choiceSet'] = Param(name='choiceSet', param_type=Array(element_type=Struct(name='Choice'))) + item = Function(name='CreateInteractionChoiceSet', function_id=EnumElement(name='CreateInteractionChoiceSetID'), + message_type=EnumElement(name='request'), params=params) + + expected = OrderedDict() + expected['origin'] = 'CreateInteractionChoiceSet' + expected['name'] = 'SDLCreateInteractionChoiceSet' + expected['extends_class'] = 'SDLRPCRequest' + expected['imports'] = {'.m': {'SDLChoice'}, '.h': {'struct': {'SDLChoice'}, 'enum': {'SDLRPCRequest'}}} + expected['params'] = ( + self.producer.param_named( + constructor_argument='choiceSet', constructor_argument_override=None, + constructor_prefix='ChoiceSet', deprecated=False, description=[], for_name='objects', mandatory=True, + method_suffix='ChoiceSet', modifier='strong', of_class='SDLChoice.class', origin='choiceSet', + since=None, type_native='NSArray *', type_sdl='NSArray *'),) + + argument = [ + self.producer.argument_named(variable='choiceSet', deprecated=False, constructor_argument='choiceSet', + origin='choiceSet')] + + expected['constructors'] = (self.producer.constructor_named( + all=argument, arguments=argument, deprecated=False, self=True, + init='ChoiceSet:(NSArray *)choiceSet'),) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) + + def test_SetDisplayLayout(self): + """ + generator/transformers/common_producer.py 66% + generator/transformers/functions_producer.py 63% + """ + params = OrderedDict() + params['displayLayout'] = Param(name='displayLayout', param_type=String(max_length=500, min_length=1)) + item = Function(name='SetDisplayLayout', function_id=EnumElement(name='SetDisplayLayoutID'), + message_type=EnumElement(name='request'), params=params, history=[ + Function(name='SetDisplayLayout', function_id=EnumElement(name='SetDisplayLayoutID'), + message_type=EnumElement(name='request'), params={}, history=None, since='3.0.0', + until='6.0.0') + ], since='6.0.0', until=None, deprecated='true') + + expected = OrderedDict() + expected['origin'] = 'SetDisplayLayout' + expected['name'] = 'SDLSetDisplayLayout' + expected['extends_class'] = 'SDLRPCRequest' + expected['imports'] = {'.h': {'enum': {'SDLRPCRequest'}, 'struct': set()}, '.m': set()} + expected['since'] = '6.0.0' + expected['history'] = '3.0.0' + expected['deprecated'] = True + expected['params'] = ( + self.producer.param_named( + constructor_argument='displayLayout', constructor_argument_override=None, + constructor_prefix='DisplayLayout', deprecated=False, + description=['{"default_value": null, "max_length": 500, "min_length": 1}'], for_name='object', + mandatory=True, method_suffix='DisplayLayout', modifier='strong', of_class='NSString.class', + origin='displayLayout', since=None, type_native='NSString *', type_sdl='NSString *'),) + + argument = [ + self.producer.argument_named(variable='displayLayout', deprecated=False, + constructor_argument='displayLayout', origin='displayLayout')] + + expected['constructors'] = (self.producer.constructor_named( + all=argument, arguments=argument, deprecated=False, self=True, + init='DisplayLayout:(NSString *)displayLayout'),) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) diff --git a/generator/test/test_structs.py b/generator/test/test_structs.py new file mode 100644 index 000000000..61ea23702 --- /dev/null +++ b/generator/test/test_structs.py @@ -0,0 +1,106 @@ +from collections import OrderedDict +from unittest import TestCase + +try: + from generator import Generator +except ImportError as error: + from generator.generator import Generator + +from model.integer import Integer +from model.param import Param +from model.string import String +from model.struct import Struct +from transformers.structs_producer import StructsProducer + + +class TestStructsProducer(TestCase): + """ + The structures of tests in this class was prepared to cover all possible combinations of code branching in tested + class StructsProducer. + All names of Structs and nested elements doesn't reflating with real Structs + and could be replaces with some meaningless names. + + After performing Tests there are following initial test code coverage: + generator/transformers/common_producer.py 72% + generator/transformers/structs_producer.py 100% + """ + + def setUp(self): + self.maxDiff = None + key_words = ('value', 'id') + + self.producer = StructsProducer('SDLRPCStruct', enum_names=(), struct_names=['Image'], key_words=key_words) + + def test_CloudAppProperties(self): + """ + generator/transformers/common_producer.py 64% + generator/transformers/structs_producer.py 100% + """ + members = OrderedDict() + members['appID'] = Param(name='appID', param_type=String()) + members['value'] = Param(name='value', param_type=String()) + item = Struct(name='CloudAppProperties', members=members) + expected = OrderedDict() + expected['origin'] = 'CloudAppProperties' + expected['name'] = 'SDLCloudAppProperties' + expected['extends_class'] = 'SDLRPCStruct' + expected['imports'] = {'.m': set(), '.h': {'enum': {'SDLRPCStruct'}, 'struct': set()}} + expected['params'] = ( + self.producer.param_named( + constructor_argument='appID', constructor_argument_override=None, constructor_prefix='AppID', + deprecated=False, description=['{"default_value": null, "max_length": null, "min_length": null}'], + for_name='object', mandatory=True, method_suffix='AppID', modifier='strong', of_class='NSString.class', + origin='appID', since=None, type_native='NSString *', type_sdl='NSString *'), + self.producer.param_named( + constructor_argument='valueParam', constructor_argument_override=None, constructor_prefix='ValueParam', + deprecated=False, description=['{"default_value": null, "max_length": null, "min_length": null}'], + for_name='object', mandatory=True, method_suffix='ValueParam', modifier='strong', + of_class='NSString.class', origin='valueParam', since=None, type_native='NSString *', + type_sdl='NSString *') + ) + + argument = [ + self.producer.argument_named( + variable='appID', deprecated=False, constructor_argument='appID', origin='appID'), + self.producer.argument_named( + variable='valueParam', deprecated=False, constructor_argument='valueParam', origin='valueParam') + ] + + expected['constructors'] = (self.producer.constructor_named( + all=argument, arguments=argument, deprecated=False, self='', + init='AppID:(NSString *)appID valueParam:(NSString *)valueParam'),) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) + + def test_TouchEvent(self): + """ + generator/transformers/common_producer.py 69% + generator/transformers/structs_producer.py 100% + """ + item = Struct(name='TouchEvent', members={ + 'id': Param(name='id', param_type=Integer(max_value=9, min_value=0)) + }) + expected = OrderedDict() + expected['origin'] = 'TouchEvent' + expected['name'] = 'SDLTouchEvent' + expected['extends_class'] = 'SDLRPCStruct' + expected['imports'] = {'.h': {'enum': {'SDLRPCStruct'}, 'struct': set()}, '.m': set()} + expected['params'] = ( + self.producer.param_named( + constructor_argument='idParam', constructor_argument_override=None, + constructor_prefix='IdParam', deprecated=False, + description=['{"default_value": null, "max_value": 9, "min_value": 0}'], for_name='object', + mandatory=True, method_suffix='IdParam', modifier='strong', of_class='NSNumber.class', + origin='idParam', since=None, type_native='UInt8', type_sdl='NSNumber *'),) + + argument = [ + self.producer.argument_named(variable='idParam', deprecated=False, + constructor_argument='@(idParam)', origin='idParam')] + + expected['constructors'] = (self.producer.constructor_named( + all=argument, arguments=argument, deprecated=False, self='', + init='IdParam:(UInt8)idParam'),) + + actual = self.producer.transform(item) + self.assertDictEqual(expected, actual) diff --git a/generator/transformers/__init__.py b/generator/transformers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/generator/transformers/common_producer.py b/generator/transformers/common_producer.py new file mode 100644 index 000000000..ac7bc6167 --- /dev/null +++ b/generator/transformers/common_producer.py @@ -0,0 +1,345 @@ +""" +All Enums/Structs/Functions Producer are inherited from this class and using features of it +""" +import json +import logging +import re +import textwrap +from abc import ABC, abstractmethod +from collections import OrderedDict, namedtuple + +from model.array import Array +from model.boolean import Boolean +from model.enum import Enum +from model.float import Float +from model.function import Function +from model.integer import Integer +from model.param import Param +from model.string import String +from model.struct import Struct + + +class InterfaceProducerCommon(ABC): + """ + All Enums/Structs/Functions Producer are inherited from this class and using features of it + """ + + def __init__(self, enum_names=(), struct_names=(), key_words=()): + self.logger = logging.getLogger(self.__class__.__name__) + self.struct_names = tuple(map(lambda e: self._replace_sync(e), struct_names)) + self.key_words = key_words + self.param_named = namedtuple('param_named', + 'origin constructor_argument constructor_prefix deprecated mandatory since ' + 'method_suffix of_class type_native type_sdl modifier for_name description ' + 'constructor_argument_override') + self.constructor_named = namedtuple('constructor', 'init self arguments all deprecated') + self.argument_named = namedtuple('argument', 'origin constructor_argument variable deprecated') + self.names = self.struct_names + tuple(map(lambda e: self._replace_sync(e), enum_names)) + + @property + @abstractmethod + def container_name(self): + pass + + def transform(self, item: (Enum, Function, Struct), render: dict) -> dict: + """ + Main entry point for transforming each Enum/Function/Struct into output dictionary, + which going to be applied to Jinja2 template + :param item: instance of Enum/Function/Struct + :param render: dictionary with pre filled entries, which going to be filled/changed by reference + :return: dictionary which going to be applied to Jinja2 template + """ + if item.description: + render['description'] = self.extract_description(item.description) + if item.since: + render['since'] = item.since + if item.history: + render['history'] = item.history.pop().since + if item.deprecated and str(item.deprecated).lower() == 'true': + render['deprecated'] = True + + render['params'] = OrderedDict() + + for param in getattr(item, self.container_name).values(): + render['params'][param.name] = self.extract_param(param, item.name) + if isinstance(item, (Struct, Function)): + self.extract_imports(param, render['imports']) + + if 'constructors' not in render and isinstance(item, (Struct, Function)): + render['constructors'] = self.extract_constructors(render['params']) + + render['params'] = tuple(render['params'].values()) + return render + + def _replace_keywords(self, name: str) -> str: + origin = name + if name.isupper(): + name += '_PARAM' + else: + name += 'Param' + self.logger.debug('Replacing %s with %s', origin, name) + return name + + def replace_keywords(self, name: str) -> str: + """ + if :param name in self.key_words, :return: name += 'Param' + :param name: string with item name + """ + if name.casefold() in self.key_words: + name = self._replace_keywords(name) + return self._replace_sync(name) + + @staticmethod + def _replace_sync(name): + """ + :param name: string with item name + :return: string with replaced 'sync' to 'Sdl' + """ + if name: + name = re.sub(r'^([sS])ync(.+)$', r'\1dl\2', name) + return name + + def extract_imports(self, param: Param, imports: dict): + """ + Extracting appropriate imports and updating in render['imports'] by reference + :param param: instance of Param, which is sub element of Enum/Function/Struct + :param imports: dictionary from render['imports'] + :return: dictionary with extracted imports + """ + + if isinstance(param.param_type, Array): + type_origin, kind = self.evaluate_import(param.param_type.element_type) + else: + type_origin, kind = self.evaluate_import(param.param_type) + + if type_origin and any(map(lambda n: type_origin.lower() in n.lower(), self.names)): + name = 'SDL' + type_origin + imports['.h'][kind].add(name) + imports['.m'].add(name) + + return imports + + def evaluate_import(self, element): + """ + :param element: instance of param.param_type + :return: tuple with element.name, type(element).__name__.lower() + """ + if isinstance(element, (Struct, Enum)): + return self._replace_sync(element.name), type(element).__name__.lower() + return None, None + + @staticmethod + def title(name: str = '') -> str: + """ + Capitalizing only first character in string. + :param name: string to be capitalized first character + :return: initial parameter with capitalized first character + """ + return name[:1].upper() + name[1:] + + @staticmethod + def minimize_first(name: str = '') -> str: + """ + Minimizing only first character in string. + :param name: string to be minimized first character + :return: initial parameter with minimized first character + """ + return name[:1].lower() + name[1:] + + @staticmethod + def extract_description(data, length: int = 113) -> list: + """ + Evaluate, align and delete @TODO + :param data: list with description + :param length: length of the string to be split + :return: evaluated string + """ + if not data: + return [] + if isinstance(data, list): + data = ' '.join(data) + return textwrap.wrap(re.sub(r'(\s{2,}|\n|\[@TODO.+)', ' ', data).strip(), length) + + @staticmethod + def nullable(type_native: str, mandatory: bool) -> str: + """ + Used for adding nullable modificator into initiator (constructor) parameter + :param type_native: native type + :param mandatory: is parameter mandatory + :return: string with modificator + """ + if mandatory or re.match(r'BOOL|float|double', type_native): + return '' + return 'nullable ' + + def parentheses(self, item): + """ + Used for wrapping appropriate initiator (constructor) parameter with '@({})' + :param item: named tup[le with initiator (constructor) parameter + :return: wrapped parameter + """ + if re.match(r'\w*Int\d+|BOOL|float|double', item.type_native) or \ + any(map(lambda n: item.type_native.lower() in n.lower(), self.struct_names)): + return '@({})'.format(item.constructor_argument) + return item.constructor_argument + + def extract_constructor(self, data: list, mandatory: bool) -> dict: + """ + Preparing dictionary with initial initiator (constructor) + :param data: list with prepared parameters + :param mandatory: is parameter mandatory + :return: dictionary with initial initiator (constructor) + """ + data = list(data) + + first = data.pop(0) + init = ['{}:({}{}){}'.format(self.title(first.constructor_prefix), + self.nullable(first.type_native, mandatory), + first.type_native.strip(), first.constructor_argument)] + arguments = [self.argument_named(origin=first.origin, constructor_argument=self.parentheses(first), + variable=first.constructor_argument, deprecated=first.deprecated)] + for param in data: + arguments.append(self.argument_named(origin=param.origin, constructor_argument=self.parentheses(param), + variable=param.constructor_argument, deprecated=param.deprecated)) + init.append('{}:({}{}){}'.format(self.minimize_first(param.constructor_prefix), + self.nullable(param.type_native, mandatory), + param.type_native.strip(), param.constructor_argument)) + _self = True if 'functions' in self.__class__.__name__.lower() and mandatory else '' + return {'init': ' '.join(init), 'self': _self, 'arguments': arguments, 'all': arguments} + + def extract_constructors(self, data: dict) -> tuple: + """ + Preparing tuple with all initiators (constructors) + :param data: list with prepared parameters + :return: tuple with all initiators (constructors) + """ + mandatory = [] + not_mandatory = [] + deprecated = any([m.deprecated for m in data.values() if getattr(m, 'deprecated', False)]) + for param in data.values(): + if param.mandatory: + mandatory.append(param) + else: + not_mandatory.append(param) + + result = [] + if mandatory: + mandatory = self.extract_constructor(mandatory, True) + mandatory['deprecated'] = deprecated + else: + mandatory = OrderedDict() + + if not_mandatory: + not_mandatory = self.extract_constructor(not_mandatory, False) + not_mandatory['deprecated'] = deprecated + if mandatory: + not_mandatory['init'] = '{} {}'.format(mandatory['init'], self.minimize_first(not_mandatory['init'])) + not_mandatory['all'] = mandatory['arguments'] + not_mandatory['arguments'] + not_mandatory['self'] = re.sub(r'([\w\d]+:)\([\w\d\s<>*]*\)([\w\d]+\s*)', r'\1\2', mandatory['init']) + result.append(self.constructor_named(**not_mandatory)) + + if mandatory: + result.insert(0, self.constructor_named(**mandatory)) + + return tuple(result) + + def evaluate_type(self, instance) -> dict: + """ + Extracting dictionary with evaluated output types + :param instance: param_type of Param + :return: dictionary with evaluated output types + """ + if hasattr(instance, 'name'): + instance.name = self.replace_keywords(instance.name) + data = OrderedDict() + if isinstance(instance, Enum): + data['for_name'] = 'enum' + data['of_class'] = '' + else: + data['for_name'] = 'object' + if isinstance(instance, (Struct, Enum)): + data['type_sdl'] = 'SDL' + instance.name + data['type_native'] = data['type_sdl'] = 'SDL{} '.format(instance.name) + if isinstance(instance, Struct): + data['of_class'] = 'SDL{}.class'.format(instance.name) + data['type_native'] = data['type_sdl'] = 'SDL{} *'.format(instance.name) + elif isinstance(instance, (Integer, Float)): + if isinstance(instance, Float): + data['type_sdl'] = 'SDLFloat' + data['type_native'] = 'float' + if isinstance(instance, Integer): + if not instance.max_value: + data['type_native'] = 'UInt32' + elif instance.max_value <= 255: + data['type_native'] = 'UInt8' + elif instance.max_value <= 65535: + data['type_native'] = 'UInt16' + elif instance.max_value <= 4294967295: + data['type_native'] = 'UInt32' + elif instance.max_value > 4294967295: + data['type_native'] = 'UInt64' + if instance.min_value is None or instance.min_value < 0: + data['type_sdl'] = 'SDLInt' + elif instance.min_value >= 0: + data['type_sdl'] = 'SDLUInt' + data['of_class'] = 'NSNumber.class' + data['type_sdl'] = 'NSNumber<{}> *'.format(data['type_sdl']) + elif isinstance(instance, String): + data['of_class'] = 'NSString.class' + data['type_sdl'] = data['type_native'] = 'NSString *' + elif isinstance(instance, Boolean): + data['of_class'] = 'NSNumber.class' + data['type_native'] = 'BOOL' + data['type_sdl'] = 'NSNumber *' + return data + + def extract_type(self, param: Param) -> dict: + """ + Preparing dictionary with output types information + :param param: sub element of Enum/Function/Struct + :return: dictionary with output types information + """ + + if isinstance(param.param_type, Array): + data = self.evaluate_type(param.param_type.element_type) + data['for_name'] = data['for_name'] + 's' + data['type_sdl'] = data['type_native'] = 'NSArray<{}> *'.format(data['type_sdl'].strip()) + else: + data = self.evaluate_type(param.param_type) + + if not param.is_mandatory and re.match(r'\w*Int\d*|BOOL', data['type_native']): + data['type_native'] = data['type_sdl'] + + return data + + @staticmethod + def param_origin_change(name) -> dict: + """ + Based on name preparing common part of output types information + :param name: Param name + :return: dictionary with part of output types information + """ + return {'origin': name, + 'constructor_argument': name, + 'constructor_prefix': InterfaceProducerCommon.title(name), + 'method_suffix': InterfaceProducerCommon.title(name)} + + def extract_param(self, param: Param, item_name: str): + """ + Preparing self.param_named with prepared params + :param param: Param from initial Model + :return: self.param_named with prepared params + """ + param.name = self.replace_keywords(param.name) + data = {'constructor_argument_override': None, + 'description': self.extract_description(param.description), + 'since': param.since, + 'mandatory': param.is_mandatory, + 'deprecated': json.loads(param.deprecated.lower()) if param.deprecated else False, + 'modifier': 'strong'} + if isinstance(param.param_type, (Integer, Float, String)): + data['description'].append(json.dumps(vars(param.param_type), sort_keys=True)) + + data.update(self.extract_type(param)) + data.update(self.param_origin_change(param.name)) + return self.param_named(**data) diff --git a/generator/transformers/enums_producer.py b/generator/transformers/enums_producer.py new file mode 100644 index 000000000..d41cd739d --- /dev/null +++ b/generator/transformers/enums_producer.py @@ -0,0 +1,81 @@ +""" +Enums transformer +""" +import json +import logging +import re +from collections import namedtuple, OrderedDict + +from model.enum import Enum +from model.enum_element import EnumElement +from transformers.common_producer import InterfaceProducerCommon + + +class EnumsProducer(InterfaceProducerCommon): + """ + Enums transformer + """ + + def __init__(self, enum_class, key_words): + super(EnumsProducer, self).__init__(key_words=key_words) + self._container_name = 'elements' + self.enum_class = enum_class + self.logger = logging.getLogger(self.__class__.__name__) + self.param_named = namedtuple('param_named', 'origin description name since deprecated') + self._item_name = None + + @property + def container_name(self): + return self._container_name + + def transform(self, item: Enum, render: dict = None) -> dict: + """ + Main entry point for transforming each Enum into output dictionary, + which going to be applied to Jinja2 template + :param item: instance of Enum + :param render: empty dictionary, present in parameter for code consistency + :return: dictionary which going to be applied to Jinja2 template + """ + item.name = self._replace_sync(item.name) + name = 'SDL{}{}'.format(item.name[:1].upper(), item.name[1:]) + tmp = {self.enum_class} + imports = {'.h': tmp, '.m': tmp} + if not render: + render = OrderedDict() + render['origin'] = item.name + render['name'] = name + render['imports'] = imports + super(EnumsProducer, self).transform(item, render) + return render + + def extract_param(self, param: EnumElement, item_name: str): + """ + Preparing self.param_named with prepared params + :param param: EnumElement from initial Model + :param item_name: + :return: self.param_named with prepared params + """ + data = {'origin': param.name, + 'description': self.extract_description(param.description), + 'since': param.since, + 'deprecated': json.loads(param.deprecated.lower()) if param.deprecated else False} + name = None + if re.match(r'^[A-Z]{1,2}\d|\d[A-Z]{1,2}$', param.name): + name = param.name + elif re.match(r'(^[a-z\d]+$|^[A-Z\d]+$)', param.name): + name = param.name.title() + elif re.match(r'^(?=\w*[a-z])(?=\w*[A-Z])\w+$', param.name): + if param.name.endswith('ID'): + name = param.name[:-2] + else: + name = param.name[:1].upper() + param.name[1:] + elif re.match(r'^(?=\w*?[a-zA-Z])(?=\w*?[_-])(?=[0-9])?.*$', param.name): + name = [] + for item in re.split('[_-]', param.name): + if re.match(r'^[A-Z\d]+$', item): + name.append(item.title()) + name = ''.join(name) + if any(re.search(r'^(sdl)?({}){}$'.format(item_name.casefold(), name.casefold()), k) for k in self.key_words): + name = self._replace_keywords(name) + data['name'] = name + return self.param_named(**data) diff --git a/generator/transformers/functions_producer.py b/generator/transformers/functions_producer.py new file mode 100644 index 000000000..fcab84a14 --- /dev/null +++ b/generator/transformers/functions_producer.py @@ -0,0 +1,116 @@ +""" +Functions transformer +""" + +import logging +from collections import namedtuple, OrderedDict + +from model.function import Function +from transformers.common_producer import InterfaceProducerCommon + + +class FunctionsProducer(InterfaceProducerCommon): + """ + Functions transformer + """ + + def __init__(self, paths, enum_names, struct_names, key_words): + super(FunctionsProducer, self).__init__(enum_names=enum_names, struct_names=struct_names, key_words=key_words) + self._container_name = 'params' + self.request_class = paths.request_class + self.response_class = paths.response_class + self.notification_class = paths.notification_class + self.function_names = paths.function_names + self.parameter_names = paths.parameter_names + self.logger = logging.getLogger(self.__class__.__name__) + self.common_names = namedtuple('common_names', 'name origin description since') + + @property + def container_name(self): + return self._container_name + + def transform(self, item: Function, render: dict = None) -> dict: + """ + Main entry point for transforming each Enum/Function/Struct into output dictionary, + which going to be applied to Jinja2 template + :param item: instance of Enum/Function/Struct + :param render: dictionary with pre filled entries, which going to be filled/changed by reference + :return: dictionary which going to be applied to Jinja2 template + """ + list(map(item.params.__delitem__, filter(item.params.__contains__, ['success', 'resultCode', 'info']))) + item.name = self._replace_sync(item.name) + name = 'SDL' + item.name + imports = {'.h': {'enum': set(), 'struct': set()}, '.m': set()} + extends_class = None + if item.message_type.name == 'response': + extends_class = self.response_class + name = name + item.message_type.name.capitalize() + elif item.message_type.name == 'request': + extends_class = self.request_class + elif item.message_type.name == 'notification': + extends_class = self.notification_class + if extends_class: + imports['.h']['enum'].add(extends_class) + + if not render: + render = OrderedDict() + render['origin'] = item.name + render['name'] = name + render['extends_class'] = extends_class + render['imports'] = imports + + super(FunctionsProducer, self).transform(item, render) + + return render + + def get_function_names(self, items: dict) -> dict: + """ + Standalone method used for preparing SDLRPCFunctionNames collection ready to be applied to Jinja2 template + :param items: collection with all functions from initial Model + :return: collection with transformed element ready to be applied to Jinja2 template + """ + render = OrderedDict() + for item in items.values(): + tmp = {'name': self.title(self.replace_keywords(item.name)), + 'origin': item.name, + 'description': self.extract_description(item.description), + 'since': item.since} + render[item.name] = self.common_names(**tmp) + + return {'params': sorted(render.values(), key=lambda a: a.name)} + + def evaluate(self, element) -> dict: + """ + Internal evaluator used for preparing SDLRPCParameterNames collection + :param element: Param from initial Model + :return: dictionary with evaluated part of output collection + """ + origin = element.name + name = self._replace_sync(element.name) + # if isinstance(element.param_type, (Integer, Float, Boolean, String)): + return {name: self.common_names(**{ + 'name': self.title(name), + 'origin': origin, + 'description': self.extract_description(element.description), + 'since': element.since})} + # return OrderedDict() + + def get_simple_params(self, functions: dict, structs: dict) -> dict: + """ + Standalone method used for preparing SDLRPCParameterNames collection ready to be applied to Jinja2 template + :param functions: collection with all functions from initial Model + :param structs: collection with all structs from initial Model + :return: collection with transformed element ready to be applied to Jinja2 template + """ + render = OrderedDict() + + for func in functions.values(): + for param in func.params.values(): + render.update(self.evaluate(param)) + + for struct in structs.values(): + render.update(self.evaluate(struct)) + for param in struct.members.values(): + render.update(self.evaluate(param)) + unique = dict(zip(list(map(lambda l: l.name, render.values())), render.values())) + return {'params': sorted(unique.values(), key=lambda a: a.name)} diff --git a/generator/transformers/structs_producer.py b/generator/transformers/structs_producer.py new file mode 100644 index 000000000..b25d86230 --- /dev/null +++ b/generator/transformers/structs_producer.py @@ -0,0 +1,48 @@ +""" +Structs transformer +""" + +import logging +from collections import OrderedDict + +from model.struct import Struct +from transformers.common_producer import InterfaceProducerCommon + + +class StructsProducer(InterfaceProducerCommon): + """ + Structs transformer + """ + + def __init__(self, struct_class, enum_names, struct_names, key_words): + super(StructsProducer, self).__init__(enum_names=enum_names, struct_names=struct_names, key_words=key_words) + self._container_name = 'members' + self.struct_class = struct_class + self.logger = logging.getLogger(self.__class__.__name__) + + @property + def container_name(self): + return self._container_name + + def transform(self, item: Struct, render: dict = None) -> dict: + """ + Main entry point for transforming each Enum/Function/Struct into output dictionary, + which going to be applied to Jinja2 template + :param item: instance of Enum/Function/Struct + :param render: dictionary with pre filled entries, which going to be filled/changed by reference + :return: dictionary which going to be applied to Jinja2 template + """ + item.name = self._replace_sync(item.name) + name = 'SDL' + item.name + imports = {'.h': {'enum': set(), 'struct': set()}, '.m': set()} + imports['.h']['enum'].add(self.struct_class) + if not render: + render = OrderedDict() + render['origin'] = item.name + render['name'] = name + render['extends_class'] = self.struct_class + render['imports'] = imports + + super(StructsProducer, self).transform(item, render) + + return render