summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Fischer <joeljfischer@gmail.com>2018-10-19 10:04:17 -0400
committerJoel Fischer <joeljfischer@gmail.com>2018-10-19 10:04:17 -0400
commit771e5c852e329e1dd3bfbaf21c942f0fccdd4b48 (patch)
treeea5a077263980e63d4199848bea393a40098e910
parentd0b240cda9c6789d93de28cf4fdf1d86dc406382 (diff)
parent6eef809963502d7a72ddc3a41f7af34cb0293876 (diff)
downloadsdl_ios-771e5c852e329e1dd3bfbaf21c942f0fccdd4b48.tar.gz
Merge branch 'develop'6.1.0
-rw-r--r--.swift-version2
-rw-r--r--.travis.yml4
-rw-r--r--CHANGELOG.md47
-rw-r--r--Cartfile.resolved6
-rw-r--r--Example Apps/Example ObjC/AlertManager.h (renamed from SmartDeviceLink_Example/AlertManager.h)0
-rw-r--r--Example Apps/Example ObjC/AlertManager.m (renamed from SmartDeviceLink_Example/AlertManager.m)0
-rw-r--r--Example Apps/Example ObjC/AppDelegate.h (renamed from SmartDeviceLink_Example/AppDelegate.h)0
-rw-r--r--Example Apps/Example ObjC/AppDelegate.m (renamed from SmartDeviceLink_Example/AppDelegate.m)0
-rw-r--r--Example Apps/Example ObjC/AudioManager.h (renamed from SmartDeviceLink_Example/AudioManager.h)0
-rw-r--r--Example Apps/Example ObjC/AudioManager.m (renamed from SmartDeviceLink_Example/AudioManager.m)0
-rw-r--r--Example Apps/Example ObjC/Base.lproj/ConnectionIAPTableViewController.storyboard (renamed from SmartDeviceLink_Example/Base.lproj/ConnectionIAPTableViewController.storyboard)0
-rw-r--r--Example Apps/Example ObjC/Base.lproj/ConnectionTCPTableViewController.storyboard (renamed from SmartDeviceLink_Example/Base.lproj/ConnectionTCPTableViewController.storyboard)0
-rw-r--r--Example Apps/Example ObjC/Base.lproj/LaunchScreen.xib (renamed from SmartDeviceLink_Example/Base.lproj/LaunchScreen.xib)0
-rw-r--r--Example Apps/Example ObjC/Base.lproj/Main.storyboard (renamed from SmartDeviceLink_Example/Base.lproj/Main.storyboard)0
-rw-r--r--Example Apps/Example ObjC/ButtonManager.h (renamed from SmartDeviceLink_Example/ButtonManager.h)0
-rw-r--r--Example Apps/Example ObjC/ButtonManager.m (renamed from SmartDeviceLink_Example/ButtonManager.m)6
-rw-r--r--Example Apps/Example ObjC/ConnectionAnimatedTransition.h (renamed from SmartDeviceLink_Example/Classes/ConnectionAnimatedTransition.h)0
-rw-r--r--Example Apps/Example ObjC/ConnectionAnimatedTransition.m (renamed from SmartDeviceLink_Example/Classes/ConnectionAnimatedTransition.m)0
-rw-r--r--Example Apps/Example ObjC/ConnectionContainerViewController.h (renamed from SmartDeviceLink_Example/Classes/ConnectionContainerViewController.h)0
-rw-r--r--Example Apps/Example ObjC/ConnectionContainerViewController.m (renamed from SmartDeviceLink_Example/Classes/ConnectionContainerViewController.m)7
-rw-r--r--Example Apps/Example ObjC/ConnectionIAPTableViewController.h (renamed from SmartDeviceLink_Example/Classes/ConnectionIAPTableViewController.h)0
-rw-r--r--Example Apps/Example ObjC/ConnectionIAPTableViewController.m (renamed from SmartDeviceLink_Example/Classes/ConnectionIAPTableViewController.m)0
-rw-r--r--Example Apps/Example ObjC/ConnectionTCPTableViewController.h (renamed from SmartDeviceLink_Example/Classes/ConnectionTCPTableViewController.h)0
-rw-r--r--Example Apps/Example ObjC/ConnectionTCPTableViewController.m (renamed from SmartDeviceLink_Example/Classes/ConnectionTCPTableViewController.m)0
-rw-r--r--Example Apps/Example ObjC/ConnectionTransitionContext.h (renamed from SmartDeviceLink_Example/Classes/ConnectionTransitionContext.h)0
-rw-r--r--Example Apps/Example ObjC/ConnectionTransitionContext.m (renamed from SmartDeviceLink_Example/Classes/ConnectionTransitionContext.m)0
-rw-r--r--Example Apps/Example ObjC/MenuManager.h (renamed from SmartDeviceLink_Example/MenuManager.h)3
-rw-r--r--Example Apps/Example ObjC/MenuManager.m (renamed from SmartDeviceLink_Example/MenuManager.m)41
-rw-r--r--Example Apps/Example ObjC/PerformInteractionManager.h (renamed from SmartDeviceLink_Example/PerformInteractionManager.h)5
-rw-r--r--Example Apps/Example ObjC/PerformInteractionManager.m95
-rw-r--r--Example Apps/Example ObjC/Preferences.h (renamed from SmartDeviceLink_Example/Classes/Preferences.h)1
-rw-r--r--Example Apps/Example ObjC/Preferences.m (renamed from SmartDeviceLink_Example/Classes/Preferences.m)20
-rw-r--r--Example Apps/Example ObjC/ProxyManager.h (renamed from SmartDeviceLink_Example/Classes/ProxyManager.h)0
-rw-r--r--Example Apps/Example ObjC/ProxyManager.m (renamed from SmartDeviceLink_Example/Classes/ProxyManager.m)47
-rw-r--r--Example Apps/Example ObjC/RPCPermissionsManager.h (renamed from SmartDeviceLink_Example/RPCPermissionsManager.h)0
-rw-r--r--Example Apps/Example ObjC/RPCPermissionsManager.m (renamed from SmartDeviceLink_Example/RPCPermissionsManager.m)0
-rw-r--r--Example Apps/Example ObjC/SmartDeviceLink-Example-ObjC-Info.plist (renamed from SmartDeviceLink_Example/SmartDeviceLink-Example-ObjC-Info.plist)2
-rw-r--r--Example Apps/Example ObjC/TextValidator.h19
-rw-r--r--Example Apps/Example ObjC/TextValidator.m43
-rw-r--r--Example Apps/Example ObjC/VehicleDataManager.h (renamed from SmartDeviceLink_Example/VehicleDataManager.h)4
-rw-r--r--Example Apps/Example ObjC/VehicleDataManager.m (renamed from SmartDeviceLink_Example/VehicleDataManager.m)118
-rw-r--r--Example Apps/Example ObjC/main.m (renamed from SmartDeviceLink_Example/Classes/main.m)0
-rw-r--r--Example Apps/Example Swift/AlertManager.swift (renamed from SmartDeviceLink_Example/AlertManager.swift)0
-rw-r--r--Example Apps/Example Swift/AppDelegate.swift (renamed from SmartDeviceLink_Example/AppDelegate.swift)0
-rw-r--r--Example Apps/Example Swift/AppUserDefaults.swift (renamed from SmartDeviceLink_Example/AppUserDefaults.swift)11
-rw-r--r--Example Apps/Example Swift/AudioManager.swift (renamed from SmartDeviceLink_Example/AudioManager.swift)0
-rw-r--r--Example Apps/Example Swift/ButtonManager.swift (renamed from SmartDeviceLink_Example/ButtonManager.swift)6
-rw-r--r--Example Apps/Example Swift/ConnectionContainerViewController.swift (renamed from SmartDeviceLink_Example/ConnectionContainerViewController.swift)8
-rw-r--r--Example Apps/Example Swift/ConnectionIAPTableViewController.storyboard (renamed from SmartDeviceLink_Example/ConnectionIAPTableViewController.storyboard)4
-rw-r--r--Example Apps/Example Swift/ConnectionIAPTableViewController.swift (renamed from SmartDeviceLink_Example/ConnectionIAPTableViewController.swift)0
-rw-r--r--Example Apps/Example Swift/ConnectionTCPTableViewController.storyboard (renamed from SmartDeviceLink_Example/ConnectionTCPTableViewController.storyboard)4
-rw-r--r--Example Apps/Example Swift/ConnectionTCPTableViewController.swift (renamed from SmartDeviceLink_Example/ConnectionTCPTableViewController.swift)0
-rw-r--r--Example Apps/Example Swift/LaunchScreen.xib (renamed from SmartDeviceLink_Example/LaunchScreen.xib)0
-rw-r--r--Example Apps/Example Swift/Main.storyboard (renamed from SmartDeviceLink_Example/Main.storyboard)4
-rw-r--r--Example Apps/Example Swift/MenuManager.swift (renamed from SmartDeviceLink_Example/MenuManager.swift)47
-rw-r--r--Example Apps/Example Swift/PerformInteractionManager.swift91
-rw-r--r--Example Apps/Example Swift/Protocol+ProxyManagerDelegate.swift (renamed from SmartDeviceLink_Example/Protocol+ProxyManagerDelegate.swift)0
-rw-r--r--Example Apps/Example Swift/ProxyManager.swift (renamed from SmartDeviceLink_Example/ProxyManager.swift)54
-rw-r--r--Example Apps/Example Swift/RPCPermissionsManager.swift (renamed from SmartDeviceLink_Example/RPCPermissionsManager.swift)0
-rw-r--r--Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h (renamed from SmartDeviceLink_Example/SmartDeviceLink-Example-Swift-Bridging-Header.h)0
-rw-r--r--Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist (renamed from SmartDeviceLink-Example-Swift-Info.plist)2
-rw-r--r--Example Apps/Example Swift/TextValidator.swift36
-rw-r--r--Example Apps/Example Swift/VehicleDataManager.swift299
-rw-r--r--Example Apps/Shared/AppConstants.h (renamed from SmartDeviceLink_Example/AppConstants.h)45
-rw-r--r--Example Apps/Shared/AppConstants.m (renamed from SmartDeviceLink_Example/AppConstants.m)45
-rw-r--r--Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Contents.json)0
-rw-r--r--Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@2x-1.png (renamed from SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x-1.png)bin5279 -> 5279 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png (renamed from SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png)bin5279 -> 5279 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png (renamed from SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png)bin8132 -> 8132 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png (renamed from SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png)bin3537 -> 3537 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png (renamed from SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png)bin2403 -> 2403 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png (renamed from SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png)bin3728 -> 3728 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/Contents.json)0
-rw-r--r--Example Apps/Shared/Images.xcassets/alert.imageset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/car_icon.imageset/Contents.json)2
-rw-r--r--Example Apps/Shared/Images.xcassets/alert.imageset/alert.pngbin0 -> 1287 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/car.imageset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/car.imageset/Contents.json)0
-rw-r--r--Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-64.png (renamed from SmartDeviceLink_Example/Images.xcassets/car.imageset/iconmonstr-car-1-64.png)bin1381 -> 1381 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/choice_set.imageset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/choice_set.imageset/Contents.json)0
-rw-r--r--Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png (renamed from SmartDeviceLink_Example/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png)bin224 -> 224 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/microphone.imageset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/microphone.imageset/Contents.json)0
-rw-r--r--Example Apps/Shared/Images.xcassets/microphone.imageset/microphone.png (renamed from SmartDeviceLink_Example/Images.xcassets/microphone.imageset/microphone.png)bin2608 -> 2608 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/phone.imageset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/phone.imageset/Contents.json)0
-rw-r--r--Example Apps/Shared/Images.xcassets/phone.imageset/phone.png (renamed from SmartDeviceLink_Example/Images.xcassets/phone.imageset/phone.png)bin3434 -> 3434 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/Contents.json)0
-rw-r--r--Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green.png (renamed from SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green.png)bin6530 -> 6530 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@2x.png (renamed from SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@2x.png)bin13966 -> 13966 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@3x.png (renamed from SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@3x.png)bin22723 -> 22723 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/speak.imageset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/speak.imageset/Contents.json)0
-rw-r--r--Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png (renamed from SmartDeviceLink_Example/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png)bin1502 -> 1502 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json21
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_off.imageset/toggle_off.pngbin0 -> 1495 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_on.imageset/Contents.json (renamed from SmartDeviceLink_Example/Images.xcassets/laptop_icon.imageset/Contents.json)2
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_on.imageset/toggle_on.pngbin0 -> 1869 bytes
-rw-r--r--README.md20
-rw-r--r--SmartDeviceLink-iOS.podspec45
-rw-r--r--SmartDeviceLink-iOS.xcodeproj/project.pbxproj1182
-rw-r--r--SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLink.xcscheme13
-rw-r--r--SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLinkSwift.xcscheme8
-rw-r--r--SmartDeviceLink.podspec59
-rw-r--r--SmartDeviceLink/Info.plist2
-rw-r--r--SmartDeviceLink/NSMutableArray+Safe.h15
-rw-r--r--SmartDeviceLink/NSMutableArray+Safe.m19
-rw-r--r--SmartDeviceLink/NSMutableDictionary+SafeRemove.h14
-rw-r--r--SmartDeviceLink/NSMutableDictionary+Store.h2
-rw-r--r--SmartDeviceLink/NSMutableDictionary+Store.m6
-rw-r--r--SmartDeviceLink/SDLAddCommand.h139
-rw-r--r--SmartDeviceLink/SDLAddCommand.m33
-rw-r--r--SmartDeviceLink/SDLAddSubMenu.h15
-rw-r--r--SmartDeviceLink/SDLAddSubMenu.m21
-rw-r--r--SmartDeviceLink/SDLArtwork.h15
-rw-r--r--SmartDeviceLink/SDLArtwork.m8
-rw-r--r--SmartDeviceLink/SDLAsynchronousOperation.h2
-rw-r--r--SmartDeviceLink/SDLAsynchronousOperation.m5
-rw-r--r--SmartDeviceLink/SDLAsynchronousRPCRequestOperation.m9
-rw-r--r--SmartDeviceLink/SDLAudioControlCapabilities.h76
-rw-r--r--SmartDeviceLink/SDLAudioControlCapabilities.m87
-rw-r--r--SmartDeviceLink/SDLAudioControlData.h62
-rw-r--r--SmartDeviceLink/SDLAudioControlData.m61
-rw-r--r--SmartDeviceLink/SDLAudioStreamingIndicator.h36
-rw-r--r--SmartDeviceLink/SDLAudioStreamingIndicator.m9
-rw-r--r--SmartDeviceLink/SDLButtonName.h7
-rw-r--r--SmartDeviceLink/SDLButtonName.m1
-rwxr-xr-xSmartDeviceLink/SDLCarWindow.h4
-rwxr-xr-xSmartDeviceLink/SDLCarWindow.m44
-rw-r--r--SmartDeviceLink/SDLCheckChoiceVROptionalOperation.h24
-rw-r--r--SmartDeviceLink/SDLCheckChoiceVROptionalOperation.m100
-rw-r--r--SmartDeviceLink/SDLChoice.h10
-rw-r--r--SmartDeviceLink/SDLChoice.m8
-rw-r--r--SmartDeviceLink/SDLChoiceCell.h87
-rw-r--r--SmartDeviceLink/SDLChoiceCell.m92
-rw-r--r--SmartDeviceLink/SDLChoiceSet.h128
-rw-r--r--SmartDeviceLink/SDLChoiceSet.m134
-rw-r--r--SmartDeviceLink/SDLChoiceSetDelegate.h25
-rw-r--r--SmartDeviceLink/SDLChoiceSetManager.h107
-rw-r--r--SmartDeviceLink/SDLChoiceSetManager.m457
-rw-r--r--SmartDeviceLink/SDLClimateControlCapabilities.h36
-rw-r--r--SmartDeviceLink/SDLClimateControlCapabilities.m41
-rw-r--r--SmartDeviceLink/SDLClimateControlData.h32
-rw-r--r--SmartDeviceLink/SDLClimateControlData.m44
-rw-r--r--SmartDeviceLink/SDLConfiguration.h108
-rw-r--r--SmartDeviceLink/SDLConfiguration.m47
-rw-r--r--SmartDeviceLink/SDLControlFramePayloadConstants.h6
-rw-r--r--SmartDeviceLink/SDLControlFramePayloadConstants.m6
-rw-r--r--SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.h11
-rw-r--r--SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.m88
-rw-r--r--SmartDeviceLink/SDLControlFramePayloadRegisterSecondaryTransportNak.h24
-rw-r--r--SmartDeviceLink/SDLControlFramePayloadRegisterSecondaryTransportNak.m83
-rw-r--r--SmartDeviceLink/SDLControlFramePayloadTransportEventUpdate.h27
-rw-r--r--SmartDeviceLink/SDLControlFramePayloadTransportEventUpdate.m100
-rw-r--r--SmartDeviceLink/SDLDeleteChoicesOperation.h25
-rw-r--r--SmartDeviceLink/SDLDeleteChoicesOperation.m87
-rw-r--r--SmartDeviceLink/SDLDeleteFileOperation.m29
-rw-r--r--SmartDeviceLink/SDLDeleteFileResponse.h2
-rw-r--r--SmartDeviceLink/SDLDeleteFileResponse.m4
-rw-r--r--SmartDeviceLink/SDLDisplayCapabilities.h9
-rw-r--r--SmartDeviceLink/SDLDisplayCapabilities.m8
-rw-r--r--SmartDeviceLink/SDLDisplayMode.h26
-rw-r--r--SmartDeviceLink/SDLDisplayMode.m8
-rw-r--r--SmartDeviceLink/SDLDistanceUnit.h19
-rw-r--r--SmartDeviceLink/SDLDistanceUnit.m7
-rw-r--r--SmartDeviceLink/SDLElectronicParkBrakeStatus.h35
-rw-r--r--SmartDeviceLink/SDLElectronicParkBrakeStatus.m18
-rw-r--r--SmartDeviceLink/SDLEqualizerSettings.h41
-rw-r--r--SmartDeviceLink/SDLEqualizerSettings.m50
-rw-r--r--SmartDeviceLink/SDLError.h15
-rw-r--r--SmartDeviceLink/SDLError.m54
-rw-r--r--SmartDeviceLink/SDLErrorConstants.h31
-rw-r--r--SmartDeviceLink/SDLFile.m16
-rw-r--r--SmartDeviceLink/SDLFileManager.h15
-rw-r--r--SmartDeviceLink/SDLFileManager.m145
-rw-r--r--SmartDeviceLink/SDLFileManagerConfiguration.h52
-rw-r--r--SmartDeviceLink/SDLFileManagerConfiguration.m43
-rw-r--r--SmartDeviceLink/SDLFuelRange.h35
-rw-r--r--SmartDeviceLink/SDLFuelRange.m37
-rw-r--r--SmartDeviceLink/SDLFuelType.h52
-rw-r--r--SmartDeviceLink/SDLFuelType.m16
-rw-r--r--SmartDeviceLink/SDLFunctionID.m1
-rw-r--r--SmartDeviceLink/SDLGPSData.h64
-rw-r--r--SmartDeviceLink/SDLGPSData.m64
-rw-r--r--SmartDeviceLink/SDLGetVehicleData.h154
-rw-r--r--SmartDeviceLink/SDLGetVehicleData.m40
-rw-r--r--SmartDeviceLink/SDLGetVehicleDataResponse.h27
-rw-r--r--SmartDeviceLink/SDLGetVehicleDataResponse.m33
-rw-r--r--SmartDeviceLink/SDLGlobals.h7
-rw-r--r--SmartDeviceLink/SDLGlobals.m10
-rw-r--r--SmartDeviceLink/SDLHMISettingsControlCapabilities.h62
-rw-r--r--SmartDeviceLink/SDLHMISettingsControlCapabilities.m70
-rw-r--r--SmartDeviceLink/SDLHMISettingsControlData.h50
-rw-r--r--SmartDeviceLink/SDLHMISettingsControlData.m50
-rw-r--r--SmartDeviceLink/SDLIAPSession.m16
-rw-r--r--SmartDeviceLink/SDLIAPTransport.m41
-rw-r--r--SmartDeviceLink/SDLImage.h64
-rw-r--r--SmartDeviceLink/SDLImage.m35
-rw-r--r--SmartDeviceLink/SDLImageFieldName.h17
-rw-r--r--SmartDeviceLink/SDLImageFieldName.m1
-rw-r--r--SmartDeviceLink/SDLKeyboardDelegate.h90
-rw-r--r--SmartDeviceLink/SDLLifecycleConfiguration.h58
-rw-r--r--SmartDeviceLink/SDLLifecycleConfiguration.m66
-rw-r--r--SmartDeviceLink/SDLLifecycleManager.m142
-rw-r--r--SmartDeviceLink/SDLLightCapabilities.h63
-rw-r--r--SmartDeviceLink/SDLLightCapabilities.m69
-rw-r--r--SmartDeviceLink/SDLLightControlCapabilities.h40
-rw-r--r--SmartDeviceLink/SDLLightControlCapabilities.m45
-rw-r--r--SmartDeviceLink/SDLLightControlData.h30
-rw-r--r--SmartDeviceLink/SDLLightControlData.m33
-rw-r--r--SmartDeviceLink/SDLLightName.h259
-rw-r--r--SmartDeviceLink/SDLLightName.m54
-rw-r--r--SmartDeviceLink/SDLLightState.h76
-rw-r--r--SmartDeviceLink/SDLLightState.m84
-rw-r--r--SmartDeviceLink/SDLLightStatus.h40
-rw-r--r--SmartDeviceLink/SDLLightStatus.m11
-rw-r--r--SmartDeviceLink/SDLListFilesOperation.m27
-rw-r--r--SmartDeviceLink/SDLListFilesResponse.h2
-rw-r--r--SmartDeviceLink/SDLListFilesResponse.m4
-rw-r--r--SmartDeviceLink/SDLLockScreenConfiguration.h8
-rw-r--r--SmartDeviceLink/SDLLockScreenManager.m2
-rw-r--r--SmartDeviceLink/SDLLogFileModuleMap.m33
-rw-r--r--SmartDeviceLink/SDLManager.m3
-rw-r--r--SmartDeviceLink/SDLMassageCushion.h35
-rw-r--r--SmartDeviceLink/SDLMassageCushion.m10
-rw-r--r--SmartDeviceLink/SDLMassageCushionFirmness.h40
-rw-r--r--SmartDeviceLink/SDLMassageCushionFirmness.m42
-rw-r--r--SmartDeviceLink/SDLMassageMode.h25
-rw-r--r--SmartDeviceLink/SDLMassageMode.m9
-rw-r--r--SmartDeviceLink/SDLMassageModeData.h39
-rw-r--r--SmartDeviceLink/SDLMassageModeData.m41
-rw-r--r--SmartDeviceLink/SDLMassageZone.h20
-rw-r--r--SmartDeviceLink/SDLMassageZone.m7
-rw-r--r--SmartDeviceLink/SDLMenuCell.h29
-rw-r--r--SmartDeviceLink/SDLMenuCell.m5
-rw-r--r--SmartDeviceLink/SDLMenuManager.m46
-rw-r--r--SmartDeviceLink/SDLModuleData.h78
-rw-r--r--SmartDeviceLink/SDLModuleData.m84
-rw-r--r--SmartDeviceLink/SDLModuleType.h21
-rw-r--r--SmartDeviceLink/SDLModuleType.m4
-rw-r--r--SmartDeviceLink/SDLNames.h115
-rw-r--r--SmartDeviceLink/SDLNames.m115
-rw-r--r--SmartDeviceLink/SDLNotificationConstants.h2
-rw-r--r--SmartDeviceLink/SDLNotificationConstants.m2
-rw-r--r--SmartDeviceLink/SDLNotificationDispatcher.m8
-rw-r--r--SmartDeviceLink/SDLOnHMIStatus.h6
-rw-r--r--SmartDeviceLink/SDLOnHMIStatus.m8
-rw-r--r--SmartDeviceLink/SDLOnRCStatus.h49
-rw-r--r--SmartDeviceLink/SDLOnRCStatus.m47
-rw-r--r--SmartDeviceLink/SDLOnSystemRequest.h7
-rw-r--r--SmartDeviceLink/SDLOnSystemRequest.m8
-rw-r--r--SmartDeviceLink/SDLOnVehicleData.h24
-rw-r--r--SmartDeviceLink/SDLOnVehicleData.m33
-rw-r--r--SmartDeviceLink/SDLPreloadChoicesOperation.h38
-rw-r--r--SmartDeviceLink/SDLPreloadChoicesOperation.m180
-rw-r--r--SmartDeviceLink/SDLPresentChoiceSetOperation.h35
-rw-r--r--SmartDeviceLink/SDLPresentChoiceSetOperation.m270
-rw-r--r--SmartDeviceLink/SDLPresentKeyboardOperation.h24
-rw-r--r--SmartDeviceLink/SDLPresentKeyboardOperation.m195
-rw-r--r--SmartDeviceLink/SDLPrimaryAudioSource.h25
-rw-r--r--SmartDeviceLink/SDLPrimaryAudioSource.m6
-rw-r--r--SmartDeviceLink/SDLProtocol.h18
-rw-r--r--SmartDeviceLink/SDLProtocol.m135
-rw-r--r--SmartDeviceLink/SDLProtocolConstants.h8
-rw-r--r--SmartDeviceLink/SDLProtocolListener.h12
-rw-r--r--SmartDeviceLink/SDLProtocolReceivedMessageRouter.m15
-rw-r--r--SmartDeviceLink/SDLProxy.h28
-rw-r--r--SmartDeviceLink/SDLProxy.m238
-rw-r--r--SmartDeviceLink/SDLProxyListener.h8
-rw-r--r--SmartDeviceLink/SDLPutFile.h108
-rw-r--r--SmartDeviceLink/SDLPutFile.m62
-rw-r--r--SmartDeviceLink/SDLPutFileResponse.h4
-rw-r--r--SmartDeviceLink/SDLPutFileResponse.m4
-rw-r--r--SmartDeviceLink/SDLRGBColor.h58
-rw-r--r--SmartDeviceLink/SDLRGBColor.m69
-rw-r--r--SmartDeviceLink/SDLRPCMessage.h2
-rw-r--r--SmartDeviceLink/SDLRPCMessage.m15
-rw-r--r--SmartDeviceLink/SDLRPCStruct.m26
-rw-r--r--SmartDeviceLink/SDLRadioControlCapabilities.h63
-rw-r--r--SmartDeviceLink/SDLRadioControlCapabilities.m32
-rw-r--r--SmartDeviceLink/SDLRadioControlData.h46
-rw-r--r--SmartDeviceLink/SDLRadioControlData.m33
-rw-r--r--SmartDeviceLink/SDLRegisterAppInterface.h187
-rw-r--r--SmartDeviceLink/SDLRegisterAppInterface.m65
-rw-r--r--SmartDeviceLink/SDLRegisterAppInterfaceResponse.h4
-rw-r--r--SmartDeviceLink/SDLRegisterAppInterfaceResponse.m10
-rw-r--r--SmartDeviceLink/SDLRemoteControlCapabilities.h50
-rw-r--r--SmartDeviceLink/SDLRemoteControlCapabilities.m52
-rw-r--r--SmartDeviceLink/SDLRequestType.h7
-rw-r--r--SmartDeviceLink/SDLRequestType.m1
-rw-r--r--SmartDeviceLink/SDLResponseDispatcher.m23
-rw-r--r--SmartDeviceLink/SDLResult.h5
-rw-r--r--SmartDeviceLink/SDLResult.m1
-rw-r--r--SmartDeviceLink/SDLSISData.h61
-rw-r--r--SmartDeviceLink/SDLSISData.m72
-rw-r--r--SmartDeviceLink/SDLScreenManager.h120
-rw-r--r--SmartDeviceLink/SDLScreenManager.m48
-rw-r--r--SmartDeviceLink/SDLSeatControlCapabilities.h134
-rw-r--r--SmartDeviceLink/SDLSeatControlCapabilities.m203
-rw-r--r--SmartDeviceLink/SDLSeatControlData.h166
-rw-r--r--SmartDeviceLink/SDLSeatControlData.m187
-rw-r--r--SmartDeviceLink/SDLSeatMemoryAction.h61
-rw-r--r--SmartDeviceLink/SDLSeatMemoryAction.m60
-rw-r--r--SmartDeviceLink/SDLSeatMemoryActionType.h27
-rw-r--r--SmartDeviceLink/SDLSeatMemoryActionType.m8
-rw-r--r--SmartDeviceLink/SDLSecondaryTransportManager.h80
-rw-r--r--SmartDeviceLink/SDLSecondaryTransportManager.m710
-rw-r--r--SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h46
-rw-r--r--SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m76
-rw-r--r--SmartDeviceLink/SDLSetDisplayLayout.h18
-rw-r--r--SmartDeviceLink/SDLSetDisplayLayout.m27
-rw-r--r--SmartDeviceLink/SDLSetMediaClockTimer.h13
-rw-r--r--SmartDeviceLink/SDLSetMediaClockTimer.m18
-rw-r--r--SmartDeviceLink/SDLSingleTireStatus.h15
-rw-r--r--SmartDeviceLink/SDLSingleTireStatus.m21
-rw-r--r--SmartDeviceLink/SDLSoftButtonManager.m13
-rw-r--r--SmartDeviceLink/SDLSoftButtonState.m2
-rw-r--r--SmartDeviceLink/SDLSpeechCapabilities.h5
-rw-r--r--SmartDeviceLink/SDLSpeechCapabilities.m1
-rw-r--r--SmartDeviceLink/SDLStaticIconName.h900
-rw-r--r--SmartDeviceLink/SDLStaticIconName.m188
-rw-r--r--SmartDeviceLink/SDLStationIDNumber.h35
-rw-r--r--SmartDeviceLink/SDLStationIDNumber.m43
-rw-r--r--SmartDeviceLink/SDLStreamingAudioLifecycleManager.h94
-rw-r--r--SmartDeviceLink/SDLStreamingAudioLifecycleManager.m356
-rw-r--r--SmartDeviceLink/SDLStreamingMediaManager.h22
-rw-r--r--SmartDeviceLink/SDLStreamingMediaManager.m90
-rw-r--r--SmartDeviceLink/SDLStreamingMediaManagerConstants.h17
-rw-r--r--SmartDeviceLink/SDLStreamingMediaManagerConstants.m14
-rw-r--r--SmartDeviceLink/SDLStreamingProtocolDelegate.h41
-rw-r--r--SmartDeviceLink/SDLStreamingVideoLifecycleManager.h (renamed from SmartDeviceLink/SDLStreamingMediaLifecycleManager.h)73
-rw-r--r--SmartDeviceLink/SDLStreamingVideoLifecycleManager.m (renamed from SmartDeviceLink/SDLStreamingMediaLifecycleManager.m)325
-rw-r--r--SmartDeviceLink/SDLSubscribeVehicleData.h187
-rw-r--r--SmartDeviceLink/SDLSubscribeVehicleData.m39
-rw-r--r--SmartDeviceLink/SDLSubscribeVehicleDataResponse.h28
-rw-r--r--SmartDeviceLink/SDLSubscribeVehicleDataResponse.m32
-rw-r--r--SmartDeviceLink/SDLSupportedSeat.h20
-rw-r--r--SmartDeviceLink/SDLSupportedSeat.m7
-rw-r--r--SmartDeviceLink/SDLSystemRequest.h23
-rw-r--r--SmartDeviceLink/SDLSystemRequest.m19
-rw-r--r--SmartDeviceLink/SDLTCPTransport.h4
-rw-r--r--SmartDeviceLink/SDLTCPTransport.m405
-rw-r--r--SmartDeviceLink/SDLTPMS.h50
-rw-r--r--SmartDeviceLink/SDLTPMS.m18
-rw-r--r--SmartDeviceLink/SDLTTSChunk.h9
-rw-r--r--SmartDeviceLink/SDLTTSChunk.m10
-rw-r--r--SmartDeviceLink/SDLTemplateColorScheme.h40
-rw-r--r--SmartDeviceLink/SDLTemplateColorScheme.m67
-rw-r--r--SmartDeviceLink/SDLTextAndGraphicManager.m68
-rw-r--r--SmartDeviceLink/SDLTransportDelegate.h1
-rw-r--r--SmartDeviceLink/SDLTurnSignal.h34
-rw-r--r--SmartDeviceLink/SDLTurnSignal.m14
-rw-r--r--SmartDeviceLink/SDLUnsubscribeVehicleData.h136
-rw-r--r--SmartDeviceLink/SDLUnsubscribeVehicleData.m40
-rw-r--r--SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h76
-rw-r--r--SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m31
-rw-r--r--SmartDeviceLink/SDLUploadFileOperation.m32
-rw-r--r--SmartDeviceLink/SDLV2ProtocolHeader.m2
-rw-r--r--SmartDeviceLink/SDLV2ProtocolMessage.m4
-rw-r--r--SmartDeviceLink/SDLVehicleDataType.h20
-rw-r--r--SmartDeviceLink/SDLVehicleDataType.m5
-rw-r--r--SmartDeviceLink/SDLVideoStreamingState.h24
-rw-r--r--SmartDeviceLink/SDLVideoStreamingState.m12
-rw-r--r--SmartDeviceLink/SmartDeviceLink.h42
-rw-r--r--SmartDeviceLinkSwift/Info.plist2
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLArtworkSpec.m29
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLAsynchronousRPCRequestOperationSpec.m29
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLCheckChoiceVROptionalOperationSpec.m143
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLChoiceCellSpec.m92
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m345
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetSpec.m155
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m84
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLDeleteChoicesOperationSpec.m77
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLFileManagerSpec.m206
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleConfigurationSpec.m428
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m77
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m56
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m12
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m93
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLNotificationDispatcherSpec.m1
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLPreloadChoicesOperationSpec.m247
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLPresentChoiceSetOperationSpec.m322
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLPresentKeyboardOperationSpec.m251
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m401
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m (renamed from SmartDeviceLinkTests/SDLStreamingMediaLifecycleManagerSpec.m)386
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m82
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m7
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLVoiceCommandManagerSpec.m11
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/ControlFramePayloadSpecs/SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m77
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/ControlFramePayloadSpecs/SDLControlFramePayloadTransportEventUpdateSpec.m85
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m121
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLV2ProtocolMessageSpec.m36
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/SDLControlFramePayloadRPCStartServiceAckSpec.m76
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m5
-rw-r--r--SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m1052
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAudioStreamingIndicatorSpec.m24
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLDisplayModeSpec.m23
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLDistanceUnitSpec.m22
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLElectronicParkBrakeStatusSpec.m18
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLFuelTypeSpec.m29
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLImageFieldNameSpec.m1
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightNameSpec.m62
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightStatusSpec.m23
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageCushionSpec.m25
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageModeSpec.m23
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageZoneSpec.m22
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLModuleTypeSpec.m23
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPrimaryAudioSource.m5
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLRequestTypeSpec.m1
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLResultSpec.m1
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSpeechCapabilitiesSpec.m1
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLStaticIconNameSpec.m200
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSupportedSeatSpec.m22
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLTurnSignalSpec.m27
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m4
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVideoStreamingStateSpec.m15
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m11
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnRCStatusSpec.m54
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m5
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m225
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddCommandSpec.m87
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m62
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m316
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m132
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m327
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetDisplayLayoutSpec.m87
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetMediaClockTimerSpec.m8
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m2
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m297
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSystemRequestSpec.m69
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m291
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m222
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLPutFileResponseSpec.m9
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLRegisterAppInterfaceResponseSpec.m7
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m200
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m23
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlCapabilitiesSpec.m90
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlDataSpec.m71
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlCapabilitiesSpec.m50
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlDataSpec.m50
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDisplayCapabilitiesSpec.m10
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLEqualizerSettingsSpec.m59
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m49
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMISettingsControlCapabilitiesSpec.m76
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMISettingsControlDataSpec.m57
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageSpec.m113
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightCapabilitiesSpec.m62
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightControlCapabilitiesSpec.m58
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightControlDataSpec.m48
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightStateSpec.m89
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMassageCushionFirmnessSpec.m52
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMassageModeDataSpec.m53
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLModuleDataSpec.m78
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRGBColorSpec.m60
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlCapabilitiesSpec.m49
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m56
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRectangleSpec.m2
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRemoteControlCapabilitiesSpec.m57
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSISDataSpec.m80
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatControlCapabilitiesSpec.m162
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatControlDataSpec.m171
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatMemoryActionSpec.m60
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSingleTireStatusSpec.m14
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLStationIDNumberSpec.m54
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTTSChunkSpec.m114
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTemplateColorSchemeSpec.m73
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testAppAndVehicleIcons@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testAppAndVehicleIcons_iPhone11_4_0x0@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testLightBackgroundNoAppNoVehicleIcons@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testLightBackgroundNoAppNoVehicleIcons_iPhone11_4_0x0@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testNoAppNoVehicleIcons@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testNoAppNoVehicleIcons_iPhone11_4_0x0@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyAppIcon@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyAppIcon_iPhone11_4_0x0@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyVehicleIcon@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyVehicleIcon_iPhone11_4_0x0@3x.pngbin0 -> 65090 bytes
-rw-r--r--SmartDeviceLinkTests/SDLFileManagerConfigurationSpec.m43
-rw-r--r--SmartDeviceLinkTests/SDLLifecycleConfigurationUpdateSpec.m77
-rw-r--r--SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m6
-rw-r--r--SmartDeviceLinkTests/TestUtilities/TestConnectionManager.h24
-rw-r--r--SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m46
-rw-r--r--SmartDeviceLinkTests/TestUtilities/TestTCPServer.h71
-rw-r--r--SmartDeviceLinkTests/TestUtilities/TestTCPServer.m370
-rw-r--r--SmartDeviceLinkTests/TransportSpecs/SDLTCPTransportSpec.m291
-rw-r--r--SmartDeviceLinkTests/UtilitiesSpecs/SDLGlobalsSpec.m20
-rw-r--r--SmartDeviceLink_Example/Images.xcassets/car_icon.imageset/car.pngbin14551 -> 0 bytes
-rw-r--r--SmartDeviceLink_Example/Images.xcassets/laptop_icon.imageset/screen.pngbin8264 -> 0 bytes
-rw-r--r--SmartDeviceLink_Example/Images.xcassets/wheel_icon.imageset/Contents.json21
-rw-r--r--SmartDeviceLink_Example/Images.xcassets/wheel_icon.imageset/wheel.pngbin16899 -> 0 bytes
-rw-r--r--SmartDeviceLink_Example/PerformInteractionManager.m56
-rw-r--r--SmartDeviceLink_Example/PerformInteractionManager.swift65
-rw-r--r--SmartDeviceLink_Example/VehicleDataManager.swift184
-rw-r--r--docs/Classes.html1502
-rw-r--r--docs/Classes/SDLAddCommand.html257
-rw-r--r--docs/Classes/SDLAddSubMenu.html40
-rw-r--r--docs/Classes/SDLArtwork.html29
-rw-r--r--docs/Classes/SDLAudioControlCapabilities.html217
-rw-r--r--docs/Classes/SDLAudioControlData.html145
-rw-r--r--docs/Classes/SDLChoice.html18
-rw-r--r--docs/Classes/SDLChoiceCell.html256
-rw-r--r--docs/Classes/SDLChoiceSet.html364
-rw-r--r--docs/Classes/SDLClimateControlCapabilities.html113
-rw-r--r--docs/Classes/SDLClimateControlData.html109
-rw-r--r--docs/Classes/SDLConfiguration.html208
-rw-r--r--docs/Classes/SDLDeleteFileResponse.html6
-rw-r--r--docs/Classes/SDLDisplayCapabilities.html21
-rw-r--r--docs/Classes/SDLEqualizerSettings.html98
-rw-r--r--docs/Classes/SDLFileManager.html29
-rw-r--r--docs/Classes/SDLFileManagerConfiguration.html119
-rw-r--r--docs/Classes/SDLFuelRange.html56
-rw-r--r--docs/Classes/SDLGPSData.html98
-rw-r--r--docs/Classes/SDLGetVehicleData.html342
-rw-r--r--docs/Classes/SDLGetVehicleDataResponse.html81
-rw-r--r--docs/Classes/SDLHMISettingsControlCapabilities.html167
-rw-r--r--docs/Classes/SDLHMISettingsControlData.html113
-rw-r--r--docs/Classes/SDLImage.html155
-rw-r--r--docs/Classes/SDLLifecycleConfiguration.html146
-rw-r--r--docs/Classes/SDLLightCapabilities.html167
-rw-r--r--docs/Classes/SDLLightControlCapabilities.html90
-rw-r--r--docs/Classes/SDLLightControlData.html66
-rw-r--r--docs/Classes/SDLLightState.html203
-rw-r--r--docs/Classes/SDLListFilesResponse.html6
-rw-r--r--docs/Classes/SDLLockScreenConfiguration.html11
-rw-r--r--docs/Classes/SDLMassageCushionFirmness.html91
-rw-r--r--docs/Classes/SDLMassageModeData.html82
-rw-r--r--docs/Classes/SDLMenuCell.html75
-rw-r--r--docs/Classes/SDLModuleData.html232
-rw-r--r--docs/Classes/SDLOnHMIStatus.html20
-rw-r--r--docs/Classes/SDLOnRCStatus.html94
-rw-r--r--docs/Classes/SDLOnSystemRequest.html21
-rw-r--r--docs/Classes/SDLOnVehicleData.html81
-rw-r--r--docs/Classes/SDLPutFile.html221
-rw-r--r--docs/Classes/SDLPutFileResponse.html6
-rw-r--r--docs/Classes/SDLRGBColor.html141
-rw-r--r--docs/Classes/SDLRadioControlCapabilities.html175
-rw-r--r--docs/Classes/SDLRadioControlData.html119
-rw-r--r--docs/Classes/SDLRegisterAppInterface.html341
-rw-r--r--docs/Classes/SDLRegisterAppInterfaceResponse.html20
-rw-r--r--docs/Classes/SDLRemoteControlCapabilities.html147
-rw-r--r--docs/Classes/SDLSISData.html143
-rw-r--r--docs/Classes/SDLScreenManager.html244
-rw-r--r--docs/Classes/SDLSeatControlCapabilities.html405
-rw-r--r--docs/Classes/SDLSeatControlData.html467
-rw-r--r--docs/Classes/SDLSeatMemoryAction.html142
-rw-r--r--docs/Classes/SDLSetDisplayLayout.html63
-rw-r--r--docs/Classes/SDLSetMediaClockTimer.html43
-rw-r--r--docs/Classes/SDLSingleTireStatus.html43
-rw-r--r--docs/Classes/SDLStationIDNumber.html79
-rw-r--r--docs/Classes/SDLStreamingMediaManager.html82
-rw-r--r--docs/Classes/SDLSubscribeVehicleData.html312
-rw-r--r--docs/Classes/SDLSubscribeVehicleDataResponse.html88
-rw-r--r--docs/Classes/SDLTTSChunk.html31
-rw-r--r--docs/Classes/SDLTemplateColorScheme.html109
-rw-r--r--docs/Classes/SDLUnsubscribeVehicleData.html317
-rw-r--r--docs/Classes/SDLUnsubscribeVehicleDataResponse.html136
-rw-r--r--docs/Constants.html5942
-rw-r--r--docs/Enums.html67
-rw-r--r--docs/Enums/SDLChoiceSetLayout.html52
-rw-r--r--docs/Enums/SDLChoiceSetManagerError.html71
-rw-r--r--docs/Enums/SDLTransportError.html93
-rw-r--r--docs/Protocols.html102
-rw-r--r--docs/Protocols/SDLChoiceSetDelegate.html52
-rw-r--r--docs/Protocols/SDLKeyboardDelegate.html177
-rw-r--r--docs/Type Definitions.html451
-rw-r--r--docs/badge.svg6
-rw-r--r--docs/index.html722
-rw-r--r--docs/search.json2
-rw-r--r--docs/undocumented.json1969
563 files changed, 43461 insertions, 4260 deletions
diff --git a/.swift-version b/.swift-version
index 5186d0706..bf77d5496 100644
--- a/.swift-version
+++ b/.swift-version
@@ -1 +1 @@
-4.0
+4.2
diff --git a/.travis.yml b/.travis.yml
index 822227fe1..8294a7830 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,8 @@
language: objective-c
-osx_image: xcode9
+osx_image: xcode10
xcode_project: SmartDeviceLink-iOS.xcodeproj
xcode_scheme: SmartDeviceLink
-xcode_sdk: iphonesimulator11.0
+xcode_sdk: iphonesimulator12.0
env:
global:
- FRAMEWORK_NAME=SmartDeviceLink
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6b3f4cdc5..e3878b4f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,51 @@
-# 6.0.2
+# 6.1.0 (Since RC 2)
+### Versions
+* Supports [SDL RPC Spec 5.0.0](https://github.com/smartdevicelink/rpc_spec/releases/tag/5.0.0) and [SDL Protocol Spec 5.1.0](https://github.com/smartdevicelink/protocol_spec/releases/tag/5.1.0).
+
+### Changes
+* None
+# 6.1.0 Release Candidate 2
### Bug Fixes
-* Video streaming apps put into a phone background state can now properly stop the video streaming when it leaves a streamable HMI state. (#1047)
+* If a RegisterAppInterface or SetDisplayLayout fail, don't set displayCapabilities to nil in the screen manager [#1108](https://github.com/smartdevicelink/sdl_ios/issues/1108).
-# 6.0.1
+# 6.1.0 Release Candidate 1
+### Enhancements
+* `PlayPause` button name has been added for subscription [#246](https://github.com/smartdevicelink/sdl_ios/issues/246).
+* Added the ability to play an audio file (such as a jingle) through `TTSChunk`, which may be used in an `Alert` or `Speak` RPC, for example [SDL-0014] [#524](https://github.com/smartdevicelink/sdl_ios/issues/524).
+* Added CRC checksums to data transfers (such as images or files) and automatic retrying of failed transfers, customizable via a new `SDLFileManagerConfiguration` [SDL-0037] [#599](https://github.com/smartdevicelink/sdl_ios/issues/599) [#1013](https://github.com/smartdevicelink/sdl_ios/issues/1013) [SDL-0191] [#1043](https://github.com/smartdevicelink/sdl_ios/issues/1043).
+* Added the ability for app icons to appear on the head unit without data being transferred after the first connection [SDL-0041] [#600](https://github.com/smartdevicelink/sdl_ios/issues/600).
+* Added the ability to send an image as "template", this is a single color image that can be re-colored by the head unit automatically to fit with the background. e.g. on a white background the image will appear black, and on a black background, white [SDL-0062] [#626](https://github.com/smartdevicelink/sdl_ios/issues/626).
+* Added a `displayName` parameter to `displayCapabilities` and deprecate `displayType` [SDL-0063] [#627](https://github.com/smartdevicelink/sdl_ios/issues/627).
+* Added new vehicle data: Fuel Range [SDL-0072] [#641](https://github.com/smartdevicelink/sdl_ios/issues/641), Engine Oil Life [SDL-0082] [#706](https://github.com/smartdevicelink/sdl_ios/issues/706), Electronic Park Brake Status [SDL-0102] [#761](https://github.com/smartdevicelink/sdl_ios/issues/761), Tire Pressure [SDL-0097] [#748](https://github.com/smartdevicelink/sdl_ios/issues/748), and Turn Signal [SDL-0107] [#791](https://github.com/smartdevicelink/sdl_ios/issues/791).
+* Add the ability for submenu menu cells to have icons [SDL-0085] [#719](https://github.com/smartdevicelink/sdl_ios/issues/719).
+* Add new vehicle capabilities that can be remotely controlled by an application: Seat Controls [SDL-0105] [#792](https://github.com/smartdevicelink/sdl_ios/issues/792), lights, display settings, and additional audio capabilities [SDL-0099] [#755](https://github.com/smartdevicelink/sdl_ios/issues/755), [SDL-0165] [#954](https://github.com/smartdevicelink/sdl_ios/issues/954), [SDL-0182] [#1022](https://github.com/smartdevicelink/sdl_ios/issues/1022).
+* Add the ability to check the status of remote control modules [SDL-0106] [#800](https://github.com/smartdevicelink/sdl_ios/issues/800), [SDL-0172] [#990](https://github.com/smartdevicelink/sdl_ios/issues/990).
+* Add the ability to modify the play / pause button to show either play, pause, stop, or play / pause [SDL-0109] [#892](https://github.com/smartdevicelink/sdl_ios/issues/892).
+* Allow apps to alter template primary, secondary, and tertiary colors while connected to a supported head unit through the RegisterAppInterface and SetDisplayLayout APIs [SDL-0147] [#909](https://github.com/smartdevicelink/sdl_ios/issues/909).
+* Allow checking for the availability of a secondary graphic [SDL-0151] [#917](https://github.com/smartdevicelink/sdl_ios/issues/917).
+* Support short and full appIds [SDL-0153] [#942](https://github.com/smartdevicelink/sdl_ios/issues/942).
+* Allow Perform Interaction Choice Set Choices to not include voice commands [SDL-0064] [#943](https://github.com/smartdevicelink/sdl_ios/issues/943).
+* Add a choice set manager to assist in presenting choice set menus and keyboard interactions [SDL-0157] [#970](https://github.com/smartdevicelink/sdl_ios/issues/970).
+* Add an enum for static icons [SDL-0159] [#944](https://github.com/smartdevicelink/sdl_ios/issues/944).
+* Update TCP transport for production [#946](https://github.com/smartdevicelink/sdl_ios/issues/946).
+* Separate SDL example app code better [#1056](https://github.com/smartdevicelink/sdl_ios/issues/1056).
+
+### Bug Fixes
+* TCP transport failure is now reported via a notification [#911](https://github.com/smartdevicelink/sdl_ios/issues/911).
+* The Obj-C and Swift example apps can now run without crashing without cleaning [#981](https://github.com/smartdevicelink/sdl_ios/issues/981).
+* Swift Cocoapods subspec will now properly download lock screen assets [#1026](https://github.com/smartdevicelink/sdl_ios/issues/1026).
+* The `SDLLockScreenConfiguration` `showInOptionalState` being `true` was not properly preventing dismissal of the lock screen [#1070](https://github.com/smartdevicelink/sdl_ios/issues/1070).
+* Fix possible crashes in SDLAsynchronousRPCOperation on cancellation of operations [#1076](https://github.com/smartdevicelink/sdl_ios/issues/1076).
+* Fix can't get CarWindow `rootViewController` [#1100](https://github.com/smartdevicelink/sdl_ios/issues/1100).
+* Fix setting CarWindow `rootViewController` not on main thread [#1101](https://github.com/smartdevicelink/sdl_ios/issues/1101).
+* Add audio transcode files to default log module map [#1103](https://github.com/smartdevicelink/sdl_ios/issues/1103).
+# 6.0.2
+### Bug Fixes
+* Video streaming apps put into a phone background state can now properly stop the video streaming when it leaves a streamable HMI state. [#1047](https://github.com/smartdevicelink/sdl_ios/issues/1047)
+
+# 6.0.1
### Bug Fixes
* Fixed a crash that could occur in development circumstances if the head unit returns "-1" for an enum
* Fixed manually sent Show RPCs causing issues when changing layouts.
diff --git a/Cartfile.resolved b/Cartfile.resolved
index 20086137a..45a305d09 100644
--- a/Cartfile.resolved
+++ b/Cartfile.resolved
@@ -1,4 +1,4 @@
-github "Quick/Nimble" "v7.0.3"
-github "Quick/Quick" "v1.2.0"
-github "erikdoe/ocmock" "v3.4.1"
+github "Quick/Nimble" "v7.3.0"
+github "Quick/Quick" "v1.3.1"
+github "erikdoe/ocmock" "v3.4.2"
github "facebook/ios-snapshot-test-case" "2.1.4"
diff --git a/SmartDeviceLink_Example/AlertManager.h b/Example Apps/Example ObjC/AlertManager.h
index 1d4471b95..1d4471b95 100644
--- a/SmartDeviceLink_Example/AlertManager.h
+++ b/Example Apps/Example ObjC/AlertManager.h
diff --git a/SmartDeviceLink_Example/AlertManager.m b/Example Apps/Example ObjC/AlertManager.m
index cab877a5e..cab877a5e 100644
--- a/SmartDeviceLink_Example/AlertManager.m
+++ b/Example Apps/Example ObjC/AlertManager.m
diff --git a/SmartDeviceLink_Example/AppDelegate.h b/Example Apps/Example ObjC/AppDelegate.h
index b86efb1a6..b86efb1a6 100644
--- a/SmartDeviceLink_Example/AppDelegate.h
+++ b/Example Apps/Example ObjC/AppDelegate.h
diff --git a/SmartDeviceLink_Example/AppDelegate.m b/Example Apps/Example ObjC/AppDelegate.m
index 1ceb6f765..1ceb6f765 100644
--- a/SmartDeviceLink_Example/AppDelegate.m
+++ b/Example Apps/Example ObjC/AppDelegate.m
diff --git a/SmartDeviceLink_Example/AudioManager.h b/Example Apps/Example ObjC/AudioManager.h
index b02138e2c..b02138e2c 100644
--- a/SmartDeviceLink_Example/AudioManager.h
+++ b/Example Apps/Example ObjC/AudioManager.h
diff --git a/SmartDeviceLink_Example/AudioManager.m b/Example Apps/Example ObjC/AudioManager.m
index 6d1b66c48..6d1b66c48 100644
--- a/SmartDeviceLink_Example/AudioManager.m
+++ b/Example Apps/Example ObjC/AudioManager.m
diff --git a/SmartDeviceLink_Example/Base.lproj/ConnectionIAPTableViewController.storyboard b/Example Apps/Example ObjC/Base.lproj/ConnectionIAPTableViewController.storyboard
index d8a88f6de..d8a88f6de 100644
--- a/SmartDeviceLink_Example/Base.lproj/ConnectionIAPTableViewController.storyboard
+++ b/Example Apps/Example ObjC/Base.lproj/ConnectionIAPTableViewController.storyboard
diff --git a/SmartDeviceLink_Example/Base.lproj/ConnectionTCPTableViewController.storyboard b/Example Apps/Example ObjC/Base.lproj/ConnectionTCPTableViewController.storyboard
index 2eca0e73a..2eca0e73a 100644
--- a/SmartDeviceLink_Example/Base.lproj/ConnectionTCPTableViewController.storyboard
+++ b/Example Apps/Example ObjC/Base.lproj/ConnectionTCPTableViewController.storyboard
diff --git a/SmartDeviceLink_Example/Base.lproj/LaunchScreen.xib b/Example Apps/Example ObjC/Base.lproj/LaunchScreen.xib
index c1427dc91..c1427dc91 100644
--- a/SmartDeviceLink_Example/Base.lproj/LaunchScreen.xib
+++ b/Example Apps/Example ObjC/Base.lproj/LaunchScreen.xib
diff --git a/SmartDeviceLink_Example/Base.lproj/Main.storyboard b/Example Apps/Example ObjC/Base.lproj/Main.storyboard
index 34ff3123e..34ff3123e 100644
--- a/SmartDeviceLink_Example/Base.lproj/Main.storyboard
+++ b/Example Apps/Example ObjC/Base.lproj/Main.storyboard
diff --git a/SmartDeviceLink_Example/ButtonManager.h b/Example Apps/Example ObjC/ButtonManager.h
index 867f50c7c..867f50c7c 100644
--- a/SmartDeviceLink_Example/ButtonManager.h
+++ b/Example Apps/Example ObjC/ButtonManager.h
diff --git a/SmartDeviceLink_Example/ButtonManager.m b/Example Apps/Example ObjC/ButtonManager.m
index 3aed337b3..9c7a0779f 100644
--- a/SmartDeviceLink_Example/ButtonManager.m
+++ b/Example Apps/Example ObjC/ButtonManager.m
@@ -73,7 +73,7 @@ NS_ASSUME_NONNULL_BEGIN
}
- (SDLSoftButtonObject *)sdlex_softButtonAlertWithManager:(SDLManager *)manager {
- SDLSoftButtonState *alertImageAndTextState = [[SDLSoftButtonState alloc] initWithStateName:AlertSoftButtonImageState text:AlertSoftButtonText image:[UIImage imageNamed:CarIconImageName]];
+ SDLSoftButtonState *alertImageAndTextState = [[SDLSoftButtonState alloc] initWithStateName:AlertSoftButtonImageState text:AlertSoftButtonText image:[[UIImage imageNamed:AlertBWIconName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
SDLSoftButtonState *alertTextState = [[SDLSoftButtonState alloc] initWithStateName:AlertSoftButtonTextState text:AlertSoftButtonText image:nil];
__weak typeof(self) weakself = self;
@@ -89,8 +89,8 @@ NS_ASSUME_NONNULL_BEGIN
}
- (SDLSoftButtonObject *)sdlex_softButtonToggleWithManager:(SDLManager *)manager {
- SDLSoftButtonState *toggleImageOnState = [[SDLSoftButtonState alloc] initWithStateName:ToggleSoftButtonImageOnState text:nil image:[UIImage imageNamed:WheelIconImageName]];
- SDLSoftButtonState *toggleImageOffState = [[SDLSoftButtonState alloc] initWithStateName:ToggleSoftButtonImageOffState text:nil image:[UIImage imageNamed:LaptopIconImageName]];
+ SDLSoftButtonState *toggleImageOnState = [[SDLSoftButtonState alloc] initWithStateName:ToggleSoftButtonImageOnState text:nil image:[[UIImage imageNamed:ToggleOnBWIconName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
+ SDLSoftButtonState *toggleImageOffState = [[SDLSoftButtonState alloc] initWithStateName:ToggleSoftButtonImageOffState text:nil image:[[UIImage imageNamed:ToggleOffBWIconName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
__weak typeof(self) weakself = self;
SDLSoftButtonObject *toggleButton = [[SDLSoftButtonObject alloc] initWithName:ToggleSoftButton states:@[toggleImageOnState, toggleImageOffState] initialStateName:toggleImageOnState.name handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {
diff --git a/SmartDeviceLink_Example/Classes/ConnectionAnimatedTransition.h b/Example Apps/Example ObjC/ConnectionAnimatedTransition.h
index a09f1fa77..a09f1fa77 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionAnimatedTransition.h
+++ b/Example Apps/Example ObjC/ConnectionAnimatedTransition.h
diff --git a/SmartDeviceLink_Example/Classes/ConnectionAnimatedTransition.m b/Example Apps/Example ObjC/ConnectionAnimatedTransition.m
index 1a4d4d141..1a4d4d141 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionAnimatedTransition.m
+++ b/Example Apps/Example ObjC/ConnectionAnimatedTransition.m
diff --git a/SmartDeviceLink_Example/Classes/ConnectionContainerViewController.h b/Example Apps/Example ObjC/ConnectionContainerViewController.h
index 4e2d1ea32..4e2d1ea32 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionContainerViewController.h
+++ b/Example Apps/Example ObjC/ConnectionContainerViewController.h
diff --git a/SmartDeviceLink_Example/Classes/ConnectionContainerViewController.m b/Example Apps/Example ObjC/ConnectionContainerViewController.m
index 544a9f3c9..6075ccc8b 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionContainerViewController.m
+++ b/Example Apps/Example ObjC/ConnectionContainerViewController.m
@@ -8,7 +8,7 @@
#import "ConnectionIAPTableViewController.h"
#import "ConnectionTransitionContext.h"
#import "ConnectionAnimatedTransition.h"
-
+#import "Preferences.h"
@interface ConnectionContainerViewController ()
@@ -42,13 +42,13 @@
[self.view addGestureRecognizer:self.panGestureRecognizer];
// Setup initial view controller state
- self.connectionTypeSegmentedControl.selectedSegmentIndex = 0;
+ self.connectionTypeSegmentedControl.selectedSegmentIndex = [Preferences sharedPreferences].lastUsedSegment;
[self loadInitialChildViewController];
}
- (void)loadInitialChildViewController {
// On the initial load, we just add the new child VC with no animation
- UIViewController *initialViewController = self.viewControllers[0];
+ UIViewController *initialViewController = self.viewControllers[[Preferences sharedPreferences].lastUsedSegment];
[self addChildViewController:initialViewController];
[self.view addSubview:initialViewController.view];
[initialViewController didMoveToParentViewController:self];
@@ -60,6 +60,7 @@
#pragma mark - IBActions
- (IBAction)connectionTypeSegmentedControlSelectedIndexDidChange:(UISegmentedControl *)sender {
+ [Preferences sharedPreferences].lastUsedSegment = sender.selectedSegmentIndex;
[self transitionToViewControllerForSelectedIndex:sender.selectedSegmentIndex];
}
diff --git a/SmartDeviceLink_Example/Classes/ConnectionIAPTableViewController.h b/Example Apps/Example ObjC/ConnectionIAPTableViewController.h
index 5ebb3801c..5ebb3801c 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionIAPTableViewController.h
+++ b/Example Apps/Example ObjC/ConnectionIAPTableViewController.h
diff --git a/SmartDeviceLink_Example/Classes/ConnectionIAPTableViewController.m b/Example Apps/Example ObjC/ConnectionIAPTableViewController.m
index 31a0f3fdf..31a0f3fdf 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionIAPTableViewController.m
+++ b/Example Apps/Example ObjC/ConnectionIAPTableViewController.m
diff --git a/SmartDeviceLink_Example/Classes/ConnectionTCPTableViewController.h b/Example Apps/Example ObjC/ConnectionTCPTableViewController.h
index 8414dfcfc..8414dfcfc 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionTCPTableViewController.h
+++ b/Example Apps/Example ObjC/ConnectionTCPTableViewController.h
diff --git a/SmartDeviceLink_Example/Classes/ConnectionTCPTableViewController.m b/Example Apps/Example ObjC/ConnectionTCPTableViewController.m
index e567eb44e..e567eb44e 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionTCPTableViewController.m
+++ b/Example Apps/Example ObjC/ConnectionTCPTableViewController.m
diff --git a/SmartDeviceLink_Example/Classes/ConnectionTransitionContext.h b/Example Apps/Example ObjC/ConnectionTransitionContext.h
index eda85adef..eda85adef 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionTransitionContext.h
+++ b/Example Apps/Example ObjC/ConnectionTransitionContext.h
diff --git a/SmartDeviceLink_Example/Classes/ConnectionTransitionContext.m b/Example Apps/Example ObjC/ConnectionTransitionContext.m
index e46e19a10..e46e19a10 100644
--- a/SmartDeviceLink_Example/Classes/ConnectionTransitionContext.m
+++ b/Example Apps/Example ObjC/ConnectionTransitionContext.m
diff --git a/SmartDeviceLink_Example/MenuManager.h b/Example Apps/Example ObjC/MenuManager.h
index dfcc15445..a7c1404c1 100644
--- a/SmartDeviceLink_Example/MenuManager.h
+++ b/Example Apps/Example ObjC/MenuManager.h
@@ -8,6 +8,7 @@
#import <Foundation/Foundation.h>
+@class PerformInteractionManager;
@class SDLManager;
@class SDLMenuCell;
@class SDLVoiceCommand;
@@ -16,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface MenuManager : NSObject
-+ (NSArray<SDLMenuCell *> *)allMenuItemsWithManager:(SDLManager *)manager;
++ (NSArray<SDLMenuCell *> *)allMenuItemsWithManager:(SDLManager *)manager performManager:(PerformInteractionManager *)performManager;
+ (NSArray<SDLVoiceCommand *> *)allVoiceMenuItemsWithManager:(SDLManager *)manager;
@end
diff --git a/SmartDeviceLink_Example/MenuManager.m b/Example Apps/Example ObjC/MenuManager.m
index ccf91cef8..083d368d8 100644
--- a/SmartDeviceLink_Example/MenuManager.m
+++ b/Example Apps/Example ObjC/MenuManager.m
@@ -19,10 +19,10 @@ NS_ASSUME_NONNULL_BEGIN
@implementation MenuManager
-+ (NSArray<SDLMenuCell *> *)allMenuItemsWithManager:(SDLManager *)manager {
++ (NSArray<SDLMenuCell *> *)allMenuItemsWithManager:(SDLManager *)manager performManager:(PerformInteractionManager *)performManager {
return @[[self sdlex_menuCellSpeakNameWithManager:manager],
- [self sdlex_menuCellGetVehicleSpeedWithManager:manager],
- [self sdlex_menuCellShowPerformInteractionWithManager:manager],
+ [self sdlex_menuCellGetAllVehicleDataWithManager:manager],
+ [self sdlex_menuCellShowPerformInteractionWithManager:manager performManager:performManager],
[self sdlex_menuCellRecordInCarMicrophoneAudioWithManager:manager],
[self sdlex_menuCellDialNumberWithManager:manager],
[self sdlex_menuCellWithSubmenuWithManager:manager]];
@@ -40,32 +40,43 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Menu Items
+ (SDLMenuCell *)sdlex_menuCellSpeakNameWithManager:(SDLManager *)manager {
- return [[SDLMenuCell alloc] initWithTitle:ACSpeakAppNameMenuName icon:[SDLArtwork artworkWithImage:[UIImage imageNamed:SpeakBWIconImageName] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACSpeakAppNameMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
+ return [[SDLMenuCell alloc] initWithTitle:ACSpeakAppNameMenuName icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:SpeakBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACSpeakAppNameMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
[manager sendRequest:[[SDLSpeak alloc] initWithTTS:ExampleAppNameTTS]];
}];
}
-+ (SDLMenuCell *)sdlex_menuCellGetVehicleSpeedWithManager:(SDLManager *)manager {
- return [[SDLMenuCell alloc] initWithTitle:ACGetVehicleDataMenuName icon:[SDLArtwork artworkWithImage:[UIImage imageNamed:CarBWIconImageName] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACGetVehicleDataMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
- [VehicleDataManager getVehicleSpeedWithManager:manager];
- }];
++ (SDLMenuCell *)sdlex_menuCellGetAllVehicleDataWithManager:(SDLManager *)manager {
+ NSMutableArray *submenuItems = [[NSMutableArray alloc] init];
+ NSArray<NSString *> *allVehicleDataTypes = [self sdlex_allVehicleDataTypes];
+ for (NSString *vehicleDataType in allVehicleDataTypes) {
+ SDLMenuCell *cell = [[SDLMenuCell alloc] initWithTitle:vehicleDataType icon:nil voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {
+ [VehicleDataManager getAllVehicleDataWithManager:manager triggerSource:triggerSource vehicleDataType:vehicleDataType];
+ }];
+ [submenuItems addObject:cell];
+ }
+
+ return [[SDLMenuCell alloc] initWithTitle:ACGetAllVehicleDataMenuName icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:CarBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] subCells:submenuItems];
+}
+
++ (NSArray<NSString *> *)sdlex_allVehicleDataTypes {
+ return @[ACAccelerationPedalPositionMenuName, ACAirbagStatusMenuName, ACBeltStatusMenuName, ACBodyInformationMenuName, ACClusterModeStatusMenuName, ACDeviceStatusMenuName, ACDriverBrakingMenuName, ACECallInfoMenuName, ACElectronicParkBrakeStatus, ACEmergencyEventMenuName, ACEngineOilLifeMenuName, ACEngineTorqueMenuName, ACExternalTemperatureMenuName, ACFuelLevelMenuName, ACFuelLevelStateMenuName, ACFuelRangeMenuName, ACGPSMenuName, ACHeadLampStatusMenuName, ACInstantFuelConsumptionMenuName, ACMyKeyMenuName, ACOdometerMenuName, ACPRNDLMenuName, ACRPMMenuName, ACSpeedMenuName, ACSteeringWheelAngleMenuName, ACTirePressureMenuName, ACTurnSignalMenuName, ACVINMenuName, ACWiperStatusMenuName];
}
-+ (SDLMenuCell *)sdlex_menuCellShowPerformInteractionWithManager:(SDLManager *)manager {
- return [[SDLMenuCell alloc] initWithTitle:ACShowChoiceSetMenuName icon:[SDLArtwork artworkWithImage:[UIImage imageNamed:MenuBWIconImageName] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACShowChoiceSetMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
- [PerformInteractionManager showPerformInteractionChoiceSetWithManager:manager triggerSource:triggerSource];
++ (SDLMenuCell *)sdlex_menuCellShowPerformInteractionWithManager:(SDLManager *)manager performManager:(PerformInteractionManager *)performManager {
+ return [[SDLMenuCell alloc] initWithTitle:ACShowChoiceSetMenuName icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:MenuBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACShowChoiceSetMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
+ [performManager showWithTriggerSource:triggerSource];
}];
}
+ (SDLMenuCell *)sdlex_menuCellRecordInCarMicrophoneAudioWithManager:(SDLManager *)manager {
AudioManager *audioManager = [[AudioManager alloc] initWithManager:manager];
- return [[SDLMenuCell alloc] initWithTitle:ACRecordInCarMicrophoneAudioMenuName icon:[SDLArtwork artworkWithImage:[UIImage imageNamed:MicrophoneBWIconImageName] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACRecordInCarMicrophoneAudioMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
+ return [[SDLMenuCell alloc] initWithTitle:ACRecordInCarMicrophoneAudioMenuName icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:MicrophoneBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACRecordInCarMicrophoneAudioMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
[audioManager startRecording];
}];
}
+ (SDLMenuCell *)sdlex_menuCellDialNumberWithManager:(SDLManager *)manager {
- return [[SDLMenuCell alloc] initWithTitle:ACDialPhoneNumberMenuName icon:[SDLArtwork artworkWithImage:[UIImage imageNamed:PhoneBWIconImageName] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACDialPhoneNumberMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
+ return [[SDLMenuCell alloc] initWithTitle:ACDialPhoneNumberMenuName icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:PhoneBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:@[ACDialPhoneNumberMenuName] handler:^(SDLTriggerSource _Nonnull triggerSource) {
if (![RPCPermissionsManager isDialNumberRPCAllowedWithManager:manager]) {
[manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"This app does not have the required permissions to dial a number" textField2:nil]];
return;
@@ -78,13 +89,13 @@ NS_ASSUME_NONNULL_BEGIN
+ (SDLMenuCell *)sdlex_menuCellWithSubmenuWithManager:(SDLManager *)manager {
NSMutableArray *submenuItems = [NSMutableArray array];
for (int i = 0; i < 75; i++) {
- SDLMenuCell *cell = [[SDLMenuCell alloc] initWithTitle:[NSString stringWithFormat:@"%@ %i", ACSubmenuItemMenuName, i] icon:[SDLArtwork artworkWithImage:[UIImage imageNamed:MenuBWIconImageName] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {
+ SDLMenuCell *cell = [[SDLMenuCell alloc] initWithTitle:[NSString stringWithFormat:@"%@ %i", ACSubmenuItemMenuName, i] icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:MenuBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {
[manager sendRequest:[AlertManager alertWithMessageAndCloseButton:[NSString stringWithFormat:@"You selected %@ %i", ACSubmenuItemMenuName, i] textField2:nil]];
}];
[submenuItems addObject:cell];
}
- return [[SDLMenuCell alloc] initWithTitle:ACSubmenuMenuName subCells:[submenuItems copy]];
+ return [[SDLMenuCell alloc] initWithTitle:ACSubmenuMenuName icon:[SDLArtwork artworkWithImage:[[UIImage imageNamed:MenuBWIconImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] asImageFormat:SDLArtworkImageFormatPNG] subCells:[submenuItems copy]];
}
#pragma mark - Voice Commands
diff --git a/SmartDeviceLink_Example/PerformInteractionManager.h b/Example Apps/Example ObjC/PerformInteractionManager.h
index 73e79e515..740b3f2c1 100644
--- a/SmartDeviceLink_Example/PerformInteractionManager.h
+++ b/Example Apps/Example ObjC/PerformInteractionManager.h
@@ -7,6 +7,7 @@
//
#import <Foundation/Foundation.h>
+
#import "SDLTriggerSource.h"
@class SDLCreateInteractionChoiceSet;
@@ -16,8 +17,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface PerformInteractionManager : NSObject
-+ (SDLCreateInteractionChoiceSet *)createInteractionChoiceSet;
-+ (void)showPerformInteractionChoiceSetWithManager:(SDLManager *)manager triggerSource:(SDLTriggerSource)triggerSource;
+- (instancetype)initWithManager:(SDLManager *)manager;
+- (void)showWithTriggerSource:(SDLTriggerSource)source;
@end
diff --git a/Example Apps/Example ObjC/PerformInteractionManager.m b/Example Apps/Example ObjC/PerformInteractionManager.m
new file mode 100644
index 000000000..82c8a6535
--- /dev/null
+++ b/Example Apps/Example ObjC/PerformInteractionManager.m
@@ -0,0 +1,95 @@
+//
+// PerformInteractionManager.m
+// SmartDeviceLink-Example-ObjC
+//
+// Created by Nicole on 5/15/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "PerformInteractionManager.h"
+
+#import "AppConstants.h"
+
+#import "SmartDeviceLink.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PerformInteractionManager() <SDLChoiceSetDelegate, SDLKeyboardDelegate>
+
+@property (weak, nonatomic) SDLManager *manager;
+
+@property (strong, nonatomic, readonly) SDLChoiceSet *choiceSet;
+@property (copy, nonatomic, readonly) NSArray<SDLChoiceCell *> *cells;
+
+@end
+
+@implementation PerformInteractionManager
+
+- (instancetype)initWithManager:(SDLManager *)manager {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _manager = manager;
+
+ return self;
+}
+
+- (void)showWithTriggerSource:(SDLTriggerSource)source {
+ [self.manager.screenManager presentSearchableChoiceSet:self.choiceSet mode:[self modeForTriggerSource:source] withKeyboardDelegate:self];
+}
+
+- (SDLChoiceSet *)choiceSet {
+ return [[SDLChoiceSet alloc] initWithTitle:PICSInitialPrompt delegate:self layout:SDLChoiceSetLayoutList timeout:10 initialPromptString:PICSInitialPrompt timeoutPromptString:PICSTimeoutPrompt helpPromptString:PICSHelpPrompt vrHelpList:nil choices:self.cells];
+}
+
+- (NSArray<SDLChoiceCell *> *)cells {
+ SDLChoiceCell *firstChoice = [[SDLChoiceCell alloc] initWithText:PICSFirstChoice];
+ SDLChoiceCell *secondChoice = [[SDLChoiceCell alloc] initWithText:PICSSecondChoice];
+ SDLChoiceCell *thirdChoice = [[SDLChoiceCell alloc] initWithText:PICSThirdChoice];
+
+ return @[firstChoice, secondChoice, thirdChoice];
+}
+
+- (SDLInteractionMode)modeForTriggerSource:(SDLTriggerSource)source {
+ return ([source isEqualToEnum:SDLTriggerSourceMenu] ? SDLInteractionModeManualOnly : SDLInteractionModeVoiceRecognitionOnly);
+}
+
+#pragma mark - SDLChoiceSetDelegate
+
+- (void)choiceSet:(SDLChoiceSet *)choiceSet didSelectChoice:(SDLChoiceCell *)choice withSource:(SDLTriggerSource)source atRowIndex:(NSUInteger)rowIndex {
+ [self.manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSGoodJob]];
+}
+
+- (void)choiceSet:(SDLChoiceSet *)choiceSet didReceiveError:(NSError *)error {
+ [self.manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSYouMissed]];
+}
+
+#pragma mark - SDLKeyboardDelegate
+
+- (void)userDidSubmitInput:(NSString *)inputText withEvent:(SDLKeyboardEvent)source {
+ if ([source isEqualToEnum:SDLKeyboardEventSubmitted]) {
+ [self.manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSGoodJob]];
+ } else if ([source isEqualToEnum:SDLKeyboardEventVoice]) {
+ // Start an audio pass thru voice session
+ }
+}
+
+- (void)keyboardDidAbortWithReason:(SDLKeyboardEvent)event {
+ [self.manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSYouMissed]];
+}
+
+- (void)updateAutocompleteWithInput:(NSString *)currentInputText completionHandler:(SDLKeyboardAutocompleteCompletionHandler)completionHandler {
+ if ([currentInputText.lowercaseString hasPrefix:@"f"]) {
+ completionHandler(PICSFirstChoice);
+ } else if ([currentInputText.lowercaseString hasPrefix:@"s"]) {
+ completionHandler(PICSSecondChoice);
+ } else if ([currentInputText.lowercaseString hasPrefix:@"t"]) {
+ completionHandler(PICSThirdChoice);
+ } else {
+ completionHandler(nil);
+ }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink_Example/Classes/Preferences.h b/Example Apps/Example ObjC/Preferences.h
index 4a982b7fc..eb20758fd 100644
--- a/SmartDeviceLink_Example/Classes/Preferences.h
+++ b/Example Apps/Example ObjC/Preferences.h
@@ -16,6 +16,7 @@
// Connection
@property (strong, nonatomic) NSString *ipAddress;
@property (assign, nonatomic) UInt16 port;
+@property (assign, nonatomic) UInt8 lastUsedSegment;
+ (instancetype)sharedPreferences;
diff --git a/SmartDeviceLink_Example/Classes/Preferences.m b/Example Apps/Example ObjC/Preferences.m
index a3082bd4f..8d2c8e680 100644
--- a/SmartDeviceLink_Example/Classes/Preferences.m
+++ b/Example Apps/Example ObjC/Preferences.m
@@ -7,21 +7,14 @@
NSString *const IPAddressPreferencesKey = @"SDLExampleAppIPAddress";
NSString *const PortPreferencesKey = @"SDLExampleAppPort";
+NSString *const LastUsedSegmentPreferencesKey = @"SDLExampleLastSegment";
NSString *const DefaultIPAddressValue = @"192.168.1.1";
UInt16 const DefaultPortValue = 12345;
-
-
-
-@interface Preferences ()
-
-@end
-
-
+UInt8 const DefaultSegment = 0;
@implementation Preferences
-
#pragma mark - Singleton / Initializers
+ (instancetype)sharedPreferences {
@@ -53,6 +46,7 @@ UInt16 const DefaultPortValue = 12345;
- (void)resetPreferences {
self.ipAddress = DefaultIPAddressValue;
self.port = DefaultPortValue;
+ self.lastUsedSegment = DefaultSegment;
}
@@ -74,6 +68,14 @@ UInt16 const DefaultPortValue = 12345;
[self setInteger:port forKey:PortPreferencesKey];
}
+- (UInt8)lastUsedSegment {
+ return (UInt8)[self integerForKey:LastUsedSegmentPreferencesKey];
+}
+
+- (void)setLastUsedSegment:(UInt8)lastUsedSegment {
+ [self setInteger:lastUsedSegment forKey:LastUsedSegmentPreferencesKey];
+}
+
#pragma mark - Private User Defaults Helpers
diff --git a/SmartDeviceLink_Example/Classes/ProxyManager.h b/Example Apps/Example ObjC/ProxyManager.h
index 59872b335..59872b335 100644
--- a/SmartDeviceLink_Example/Classes/ProxyManager.h
+++ b/Example Apps/Example ObjC/ProxyManager.h
diff --git a/SmartDeviceLink_Example/Classes/ProxyManager.m b/Example Apps/Example ObjC/ProxyManager.m
index c075b5191..317b9cb92 100644
--- a/SmartDeviceLink_Example/Classes/ProxyManager.m
+++ b/Example Apps/Example ObjC/ProxyManager.m
@@ -22,6 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (assign, nonatomic) SDLHMILevel firstHMILevel;
@property (strong, nonatomic) VehicleDataManager *vehicleDataManager;
+@property (strong, nonatomic) PerformInteractionManager *performManager;
@property (strong, nonatomic) ButtonManager *buttonManager;
@property (nonatomic, copy, nullable) RefreshUIHandler refreshUIHandler;
@end
@@ -63,6 +64,7 @@ NS_ASSUME_NONNULL_BEGIN
}
self.vehicleDataManager = [[VehicleDataManager alloc] initWithManager:self.sdlManager refreshUIHandler:self.refreshUIHandler];
+ self.performManager = [[PerformInteractionManager alloc] initWithManager:self.sdlManager];
self.buttonManager = [[ButtonManager alloc] initWithManager:self.sdlManager refreshUIHandler:self.refreshUIHandler];
[weakSelf sdlex_updateProxyState:ProxyStateConnected];
@@ -103,22 +105,23 @@ NS_ASSUME_NONNULL_BEGIN
}
+ (SDLLifecycleConfiguration *)sdlex_iapLifecycleConfiguration {
- return [self.class sdlex_setLifecycleConfigurationPropertiesOnConfiguration:[SDLLifecycleConfiguration defaultConfigurationWithAppName:ExampleAppName appId:ExampleAppId]];
+ return [self.class sdlex_setLifecycleConfigurationPropertiesOnConfiguration:[SDLLifecycleConfiguration defaultConfigurationWithAppName:ExampleAppName fullAppId:ExampleFullAppId]];
}
+ (SDLLifecycleConfiguration *)sdlex_tcpLifecycleConfiguration {
- return [self.class sdlex_setLifecycleConfigurationPropertiesOnConfiguration:[SDLLifecycleConfiguration debugConfigurationWithAppName:ExampleAppName appId:ExampleAppId ipAddress:[Preferences sharedPreferences].ipAddress port:[Preferences sharedPreferences].port]];
+ return [self.class sdlex_setLifecycleConfigurationPropertiesOnConfiguration:[SDLLifecycleConfiguration debugConfigurationWithAppName:ExampleAppName fullAppId:ExampleFullAppId ipAddress:[Preferences sharedPreferences].ipAddress port:[Preferences sharedPreferences].port]];
}
- (void)sdlex_setupConfigurationWithLifecycleConfiguration:(SDLLifecycleConfiguration *)lifecycleConfiguration {
- SDLConfiguration *config = [SDLConfiguration configurationWithLifecycle:lifecycleConfiguration lockScreen:[SDLLockScreenConfiguration enabledConfigurationWithAppIcon:[UIImage imageNamed:ExampleAppLogoName] backgroundColor:nil] logging:[self.class sdlex_logConfiguration]];
+ SDLConfiguration *config = [SDLConfiguration configurationWithLifecycle:lifecycleConfiguration lockScreen:[SDLLockScreenConfiguration enabledConfigurationWithAppIcon:[UIImage imageNamed:ExampleAppLogoName] backgroundColor:nil] logging:[self.class sdlex_logConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration]];
self.sdlManager = [[SDLManager alloc] initWithConfiguration:config delegate:self];
[self startManager];
}
+ (SDLLifecycleConfiguration *)sdlex_setLifecycleConfigurationPropertiesOnConfiguration:(SDLLifecycleConfiguration *)config {
- SDLArtwork *appIconArt = [SDLArtwork persistentArtworkWithImage:[UIImage imageNamed:ExampleAppLogoName] asImageFormat:SDLArtworkImageFormatPNG];
+ UIImage *appLogo = [[UIImage imageNamed:ExampleAppLogoName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+ SDLArtwork *appIconArt = [SDLArtwork persistentArtworkWithImage:appLogo asImageFormat:SDLArtworkImageFormatPNG];
config.shortAppName = ExampleAppNameShort;
config.appIcon = appIconArt;
@@ -126,6 +129,14 @@ NS_ASSUME_NONNULL_BEGIN
config.ttsName = [SDLTTSChunk textChunksFromString:ExampleAppName];
config.language = SDLLanguageEnUs;
config.languagesSupported = @[SDLLanguageEnUs, SDLLanguageFrCa, SDLLanguageEsMx];
+ config.appType = SDLAppHMITypeMedia;
+
+ SDLRGBColor *green = [[SDLRGBColor alloc] initWithRed:126 green:188 blue:121];
+ SDLRGBColor *white = [[SDLRGBColor alloc] initWithRed:249 green:251 blue:254];
+ SDLRGBColor *darkGrey = [[SDLRGBColor alloc] initWithRed:57 green:78 blue:96];
+ SDLRGBColor *grey = [[SDLRGBColor alloc] initWithRed:186 green:198 blue:210];
+ config.dayColorScheme = [[SDLTemplateColorScheme alloc] initWithPrimaryRGBColor:green secondaryRGBColor:grey backgroundRGBColor:white];
+ config.nightColorScheme = [[SDLTemplateColorScheme alloc] initWithPrimaryRGBColor:green secondaryRGBColor:grey backgroundRGBColor:darkGrey];
return config;
}
@@ -143,14 +154,16 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Screen UI Helpers
- (void)sdlex_createMenus {
- [self.sdlManager sendRequest:[PerformInteractionManager createInteractionChoiceSet]];
- self.sdlManager.screenManager.menu = [MenuManager allMenuItemsWithManager:self.sdlManager];
+ self.sdlManager.screenManager.menu = [MenuManager allMenuItemsWithManager:self.sdlManager performManager:self.performManager];
self.sdlManager.screenManager.voiceCommands = [MenuManager allVoiceMenuItemsWithManager:self.sdlManager];
}
- (void)sdlex_showInitialData {
if (![self.sdlManager.hmiLevel isEqualToEnum:SDLHMILevelFull]) { return; }
+ SDLSetDisplayLayout *setDisplayLayout = [[SDLSetDisplayLayout alloc] initWithPredefinedLayout:SDLPredefinedLayoutNonMedia];
+ [self.sdlManager sendRequest:setDisplayLayout];
+
[self sdlex_updateScreen];
self.sdlManager.screenManager.softButtonObjects = [self.buttonManager allScreenSoftButtons];
}
@@ -180,7 +193,13 @@ NS_ASSUME_NONNULL_BEGIN
screenManager.textField3 = isTextEnabled ? self.vehicleDataManager.vehicleOdometerData : nil;
if (self.sdlManager.systemCapabilityManager.displayCapabilities.graphicSupported) {
- screenManager.primaryGraphic = areImagesVisible ? [SDLArtwork persistentArtworkWithImage:[UIImage imageNamed:@"sdl_logo_green"] asImageFormat:SDLArtworkImageFormatPNG] : nil;
+ if ([self sdlex_imageFieldSupported:SDLImageFieldNameGraphic]) {
+ screenManager.primaryGraphic = areImagesVisible ? [SDLArtwork persistentArtworkWithImage:[[UIImage imageNamed:ExampleAppLogoName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] asImageFormat:SDLArtworkImageFormatPNG] : nil;
+ }
+
+ if ([self sdlex_imageFieldSupported:SDLImageFieldNameSecondaryGraphic]) {
+ screenManager.secondaryGraphic = areImagesVisible ? [SDLArtwork persistentArtworkWithImage:[UIImage imageNamed:CarBWIconImageName] asImageFormat:SDLArtworkImageFormatPNG] : nil;
+ }
}
[screenManager endUpdatesWithCompletionHandler:^(NSError * _Nullable error) {
@@ -188,6 +207,20 @@ NS_ASSUME_NONNULL_BEGIN
}];
}
+/**
+ * Checks if SDL Core's HMI current template supports the template image field (i.e. primary graphic, secondary graphic, etc.)
+ *
+ * @param imageFieldName The name for the image field
+ * @return True if the image field is supported, false if not
+ */
+- (BOOL)sdlex_imageFieldSupported:(SDLImageFieldName)imageFieldName {
+ for (SDLImageField *imageField in self.sdlManager.systemCapabilityManager.displayCapabilities.imageFields) {
+ if ([imageField.name isEqualToString:imageFieldName]) {
+ return YES;
+ }
+ }
+ return NO;
+}
#pragma mark - SDLManagerDelegate
diff --git a/SmartDeviceLink_Example/RPCPermissionsManager.h b/Example Apps/Example ObjC/RPCPermissionsManager.h
index 09e321f31..09e321f31 100644
--- a/SmartDeviceLink_Example/RPCPermissionsManager.h
+++ b/Example Apps/Example ObjC/RPCPermissionsManager.h
diff --git a/SmartDeviceLink_Example/RPCPermissionsManager.m b/Example Apps/Example ObjC/RPCPermissionsManager.m
index dc5cf6dfc..dc5cf6dfc 100644
--- a/SmartDeviceLink_Example/RPCPermissionsManager.m
+++ b/Example Apps/Example ObjC/RPCPermissionsManager.m
diff --git a/SmartDeviceLink_Example/SmartDeviceLink-Example-ObjC-Info.plist b/Example Apps/Example ObjC/SmartDeviceLink-Example-ObjC-Info.plist
index a61e708bb..d12406296 100644
--- a/SmartDeviceLink_Example/SmartDeviceLink-Example-ObjC-Info.plist
+++ b/Example Apps/Example ObjC/SmartDeviceLink-Example-ObjC-Info.plist
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>6.0.2</string>
+ <string>6.1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
diff --git a/Example Apps/Example ObjC/TextValidator.h b/Example Apps/Example ObjC/TextValidator.h
new file mode 100644
index 000000000..df8a12321
--- /dev/null
+++ b/Example Apps/Example ObjC/TextValidator.h
@@ -0,0 +1,19 @@
+//
+// TextValidator.h
+// SmartDeviceLink
+//
+// Created by Nicole on 7/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TextValidator : NSObject
+
++ (NSString *)validateText:(NSString *)text length:(UInt8)length;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Example Apps/Example ObjC/TextValidator.m b/Example Apps/Example ObjC/TextValidator.m
new file mode 100644
index 000000000..2e14c4797
--- /dev/null
+++ b/Example Apps/Example ObjC/TextValidator.m
@@ -0,0 +1,43 @@
+//
+// TextValidator.m
+// SmartDeviceLink
+//
+// Created by Nicole on 7/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "TextValidator.h"
+
+@implementation TextValidator
+
+static NSString *validCharacters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. ";
+
++ (NSString *)validateText:(NSString *)text length:(UInt8)length {
+ if (text.length == 0) { return text; }
+ NSString *filteredText = [self sdlex_filterUnsupportedCharactersFromText:text];
+ NSString *condensedText = [self sdlex_condenseWhitespace:filteredText];
+ NSString *truncatedText = [self sdlex_truncateText:condensedText length:length];
+ return truncatedText;
+}
+
++ (NSString *)sdlex_filterUnsupportedCharactersFromText:(NSString *)text {
+ NSCharacterSet *supportedCharacters = [NSCharacterSet characterSetWithCharactersInString:validCharacters];
+ return [[text componentsSeparatedByCharactersInSet:supportedCharacters.invertedSet] componentsJoinedByString:@" "];
+}
+
++ (NSString *)sdlex_truncateText:(NSString *)text length:(UInt8)length {
+ return [text substringToIndex:MIN(length, text.length)];
+}
+
++ (NSString *)sdlex_condenseWhitespace:(NSString *)text {
+ NSArray<NSString *> *components = [text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+
+ NSMutableArray<NSString *> *nonEmptyComponents = [NSMutableArray array];
+ for (NSString *string in components) {
+ if (string.length == 0) { continue; }
+ [nonEmptyComponents addObject:string];
+ }
+ return [nonEmptyComponents componentsJoinedByString:@" "];
+}
+
+@end
diff --git a/SmartDeviceLink_Example/VehicleDataManager.h b/Example Apps/Example ObjC/VehicleDataManager.h
index 65f6dd09d..a32c38992 100644
--- a/SmartDeviceLink_Example/VehicleDataManager.h
+++ b/Example Apps/Example ObjC/VehicleDataManager.h
@@ -8,8 +8,10 @@
#import <Foundation/Foundation.h>
+#import "SDLTriggerSource.h"
@class SDLManager;
+
NS_ASSUME_NONNULL_BEGIN
typedef void(^RefreshUIHandler)(void);
@@ -24,7 +26,7 @@ typedef void(^RefreshUIHandler)(void);
- (void)subscribeToVehicleOdometer;
- (void)unsubscribeToVehicleOdometer;
-+ (void)getVehicleSpeedWithManager:(SDLManager *)manager;
++ (void)getAllVehicleDataWithManager:(SDLManager *)manager triggerSource:(SDLTriggerSource)triggerSource vehicleDataType:(NSString *)vehicleDataType;
+ (void)checkPhoneCallCapabilityWithManager:(SDLManager *)manager phoneNumber:(NSString *)phoneNumber;
diff --git a/SmartDeviceLink_Example/VehicleDataManager.m b/Example Apps/Example ObjC/VehicleDataManager.m
index 5615dfe52..999a22616 100644
--- a/SmartDeviceLink_Example/VehicleDataManager.m
+++ b/Example Apps/Example ObjC/VehicleDataManager.m
@@ -7,9 +7,10 @@
//
#import "AlertManager.h"
-#import "VehicleDataManager.h"
#import "AppConstants.h"
#import "SmartDeviceLink.h"
+#import "TextValidator.h"
+#import "VehicleDataManager.h"
NS_ASSUME_NONNULL_BEGIN
@@ -127,51 +128,124 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Get Vehicle Data
/**
- * Retreives the current vehicle speed
+ * Retreives the current vehicle data
*
- * @param manager The SDL manager
+ * @param manager The SDL Manager
+ * @param triggerSource Whether the menu item was selected by voice or touch
+ * @param vehicleDataType The vehicle data to look for
*/
-+ (void)getVehicleSpeedWithManager:(SDLManager *)manager {
++ (void)getAllVehicleDataWithManager:(SDLManager *)manager triggerSource:(SDLTriggerSource)triggerSource vehicleDataType:(NSString *)vehicleDataType {
SDLLogD(@"Checking if app has permission to access vehicle data...");
if (![manager.permissionManager isRPCAllowed:@"GetVehicleData"]) {
[manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"This app does not have the required permissions to access vehicle data" textField2:nil]];
return;
}
- SDLLogD(@"App has permission to access vehicle data. Requesting vehicle speed data...");
- SDLGetVehicleData *getVehicleSpeed = [[SDLGetVehicleData alloc] init];
- getVehicleSpeed.speed = @YES;
- [manager sendRequest:getVehicleSpeed withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ SDLLogD(@"App has permission to access vehicle data. Requesting vehicle data...");
+ SDLGetVehicleData *getAllVehicleData = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES vin:YES wiperStatus:YES];
+
+ [manager sendRequest:getAllVehicleData withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
if (error || ![response isKindOfClass:SDLGetVehicleDataResponse.class]) {
- [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Something went wrong while getting vehicle speed" textField2:nil]];
+ [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"Something went wrong while getting vehicle data" textField2:nil]];
return;
}
- SDLGetVehicleDataResponse* getVehicleDataResponse = (SDLGetVehicleDataResponse *)response;
+ SDLGetVehicleDataResponse *getVehicleDataResponse = (SDLGetVehicleDataResponse *)response;
SDLResult resultCode = getVehicleDataResponse.resultCode;
- NSMutableString *alertMessage = [NSMutableString stringWithFormat:@"%@: ", VehicleDataSpeedName];
+ NSString *alertTitle = vehicleDataType;
+ NSString *alertMessage = nil;
+
if ([resultCode isEqualToEnum:SDLResultRejected]) {
- SDLLogD(@"The request for vehicle speed was rejected");
- [alertMessage appendString:@"Rejected"];
+ SDLLogD(@"The request for vehicle data was rejected");
+ alertMessage = @"Rejected";
} else if ([resultCode isEqualToEnum:SDLResultDisallowed]) {
SDLLogD(@"This app does not have the required permissions to access vehicle data.");
- [alertMessage appendString:@"Disallowed"];
- } else if ([resultCode isEqualToEnum:SDLResultSuccess]) {
- NSNumber *speed = getVehicleDataResponse.speed;
- if (speed) {
- SDLLogD(@"Request for vehicle speed successful: %f", speed.floatValue);
- [alertMessage appendString:[NSString stringWithFormat:@"%f kph", speed.floatValue]];
+ alertMessage = @"Disallowed";
+ } else if ([resultCode isEqualToEnum:SDLResultSuccess] || [resultCode isEqualToEnum:SDLResultDataNotAvailable]) {
+ SDLLogD(@"Request for vehicle data successful");
+ if (getVehicleDataResponse) {
+ alertMessage = [self sdlex_vehicleDataDescription:getVehicleDataResponse vehicleDataType:vehicleDataType];
} else {
- SDLLogD(@"Request for vehicle speed successful but no data returned.");
- [alertMessage appendString:@"Unknown"];
+ SDLLogE(@"No vehicle data returned");
+ alertMessage = @"No vehicle data returned";
}
}
- [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:alertMessage textField2:nil]];
+ alertTitle = [TextValidator validateText:alertTitle length:25];
+ alertMessage = [TextValidator validateText:alertMessage length:200];
+
+ if ([triggerSource isEqualToEnum:SDLTriggerSourceMenu]) {
+ [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:alertTitle textField2:alertMessage]];
+ } else {
+ NSString *spokenAlert = alertMessage ?: alertTitle;
+ [manager sendRequest:[[SDLSpeak alloc] initWithTTS:spokenAlert]];
+ }
}];
}
++ (NSString *)sdlex_vehicleDataDescription:(SDLGetVehicleDataResponse *)vehicleData vehicleDataType:(NSString *)vehicleDataType {
+ NSString *vehicleDataDescription = nil;
+
+ if ([vehicleDataType isEqualToString:ACAccelerationPedalPositionMenuName]) {
+ vehicleDataDescription = vehicleData.accPedalPosition.description;
+ } else if ([vehicleDataType isEqualToString:ACAirbagStatusMenuName]) {
+ vehicleDataDescription = vehicleData.airbagStatus.description;
+ } else if ([vehicleDataType isEqualToString:ACBeltStatusMenuName]) {
+ vehicleDataDescription = vehicleData.beltStatus.description;
+ } else if ([vehicleDataType isEqualToString:ACBodyInformationMenuName]) {
+ vehicleDataDescription = vehicleData.bodyInformation.description;
+ } else if ([vehicleDataType isEqualToString:ACClusterModeStatusMenuName]) {
+ vehicleDataDescription = vehicleData.clusterModeStatus.description;
+ } else if ([vehicleDataType isEqualToString:ACDeviceStatusMenuName]) {
+ vehicleDataDescription = vehicleData.deviceStatus.description;
+ } else if ([vehicleDataType isEqualToString:ACDriverBrakingMenuName]) {
+ vehicleDataDescription = vehicleData.driverBraking.description;
+ } else if ([vehicleDataType isEqualToString:ACECallInfoMenuName]) {
+ vehicleDataDescription = vehicleData.eCallInfo.description;
+ } else if ([vehicleDataType isEqualToEnum:ACElectronicParkBrakeStatus]) {
+ vehicleDataDescription = vehicleData.electronicParkBrakeStatus.description;
+ } else if ([vehicleDataType isEqualToString:ACEmergencyEventMenuName]) {
+ vehicleDataDescription = vehicleData.emergencyEvent.description;
+ } else if ([vehicleDataType isEqualToString:ACEngineOilLifeMenuName]) {
+ vehicleDataDescription = vehicleData.engineOilLife.description;
+ } else if ([vehicleDataType isEqualToString:ACEngineTorqueMenuName]) {
+ vehicleDataDescription = vehicleData.engineTorque.description;
+ } else if ([vehicleDataType isEqualToString:ACExternalTemperatureMenuName]) {
+ vehicleDataDescription = vehicleData.externalTemperature.description;
+ } else if ([vehicleDataType isEqualToString:ACFuelLevelMenuName]) {
+ vehicleDataDescription = vehicleData.fuelLevel.description;
+ } else if ([vehicleDataType isEqualToString:ACFuelLevelStateMenuName]) {
+ vehicleDataDescription = vehicleData.fuelLevel_State.description;
+ } else if ([vehicleDataType isEqualToString:ACFuelRangeMenuName]) {
+ vehicleDataDescription = vehicleData.fuelRange.description;
+ } else if ([vehicleDataType isEqualToString:ACGPSMenuName]) {
+ vehicleDataDescription = vehicleData.gps.description;
+ } else if ([vehicleDataType isEqualToString:ACHeadLampStatusMenuName]) {
+ vehicleDataDescription = vehicleData.headLampStatus.description;
+ } else if ([vehicleDataType isEqualToString:ACInstantFuelConsumptionMenuName]) {
+ vehicleDataDescription = vehicleData.instantFuelConsumption.description;
+ } else if ([vehicleDataType isEqualToString:ACMyKeyMenuName]) {
+ vehicleDataDescription = vehicleData.myKey.description;
+ } else if ([vehicleDataType isEqualToString:ACOdometerMenuName]) {
+ vehicleDataDescription = vehicleData.odometer.description;
+ } else if ([vehicleDataType isEqualToString:ACPRNDLMenuName]) {
+ vehicleDataDescription = vehicleData.prndl.description;
+ } else if ([vehicleDataType isEqualToString:ACSpeedMenuName]) {
+ vehicleDataDescription = vehicleData.speed.description;
+ } else if ([vehicleDataType isEqualToString:ACSteeringWheelAngleMenuName]) {
+ vehicleDataDescription = vehicleData.steeringWheelAngle.description;
+ } else if ([vehicleDataType isEqualToString:ACTirePressureMenuName]) {
+ vehicleDataDescription = vehicleData.tirePressure.description;
+ } else if ([vehicleDataType isEqualToString:ACTurnSignalMenuName]) {
+ vehicleDataDescription = vehicleData.turnSignal.description;
+ } else if ([vehicleDataType isEqualToString: ACVINMenuName]) {
+ vehicleDataDescription = vehicleData.vin.description;
+ }
+
+ return vehicleDataDescription ?: @"Vehicle data not available";
+}
+
#pragma mark - Phone Calls
/**
diff --git a/SmartDeviceLink_Example/Classes/main.m b/Example Apps/Example ObjC/main.m
index 4566abbdd..4566abbdd 100644
--- a/SmartDeviceLink_Example/Classes/main.m
+++ b/Example Apps/Example ObjC/main.m
diff --git a/SmartDeviceLink_Example/AlertManager.swift b/Example Apps/Example Swift/AlertManager.swift
index c463e7d36..c463e7d36 100644
--- a/SmartDeviceLink_Example/AlertManager.swift
+++ b/Example Apps/Example Swift/AlertManager.swift
diff --git a/SmartDeviceLink_Example/AppDelegate.swift b/Example Apps/Example Swift/AppDelegate.swift
index fd42468d3..fd42468d3 100644
--- a/SmartDeviceLink_Example/AppDelegate.swift
+++ b/Example Apps/Example Swift/AppDelegate.swift
diff --git a/SmartDeviceLink_Example/AppUserDefaults.swift b/Example Apps/Example Swift/AppUserDefaults.swift
index 2589ab467..5fc63c437 100644
--- a/SmartDeviceLink_Example/AppUserDefaults.swift
+++ b/Example Apps/Example Swift/AppUserDefaults.swift
@@ -10,6 +10,7 @@ class AppUserDefaults {
struct Keys {
static let ipAddress = "ipAddress"
static let port = "port"
+ static let lastUsedSegment = "lastUsedSegment"
}
static let shared = AppUserDefaults()
@@ -19,6 +20,7 @@ class AppUserDefaults {
defaults[Keys.ipAddress] = String()
defaults[Keys.port] = String()
+ defaults[Keys.lastUsedSegment] = 0
UserDefaults.standard.register(defaults: defaults)
}
@@ -40,4 +42,13 @@ class AppUserDefaults {
UserDefaults.standard.setValue(newValue!, forKeyPath: Keys.port)
}
}
+
+ var lastUsedSegment: Int? {
+ get {
+ return UserDefaults.standard.integer(forKey: Keys.lastUsedSegment)
+ }
+ set {
+ UserDefaults.standard.set(newValue!, forKey: Keys.lastUsedSegment)
+ }
+ }
}
diff --git a/SmartDeviceLink_Example/AudioManager.swift b/Example Apps/Example Swift/AudioManager.swift
index a2e80929d..a2e80929d 100644
--- a/SmartDeviceLink_Example/AudioManager.swift
+++ b/Example Apps/Example Swift/AudioManager.swift
diff --git a/SmartDeviceLink_Example/ButtonManager.swift b/Example Apps/Example Swift/ButtonManager.swift
index 617553e0b..2a7b7ccf7 100644
--- a/SmartDeviceLink_Example/ButtonManager.swift
+++ b/Example Apps/Example Swift/ButtonManager.swift
@@ -66,7 +66,7 @@ private extension ButtonManager {
/// - Parameter manager: The SDL Manager for showing the alert
/// - Returns: A soft button
func softButtonAlert(with manager: SDLManager) -> SDLSoftButtonObject {
- let imageSoftButtonState = SDLSoftButtonState(stateName: AlertSoftButtonImageState, text: nil, image: UIImage(named: CarIconImageName))
+ let imageSoftButtonState = SDLSoftButtonState(stateName: AlertSoftButtonImageState, text: nil, image: UIImage(named: AlertBWIconName)?.withRenderingMode(.alwaysTemplate))
let textSoftButtonState = SDLSoftButtonState(stateName: AlertSoftButtonTextState, text: AlertSoftButtonText, image: nil)
return SDLSoftButtonObject(name: AlertSoftButton, states: [imageSoftButtonState, textSoftButtonState], initialStateName: imageSoftButtonState.name) { (buttonPress, buttonEvent) in
guard buttonPress != nil else { return }
@@ -79,8 +79,8 @@ private extension ButtonManager {
///
/// - Returns: A soft button
func softButtonToggle() -> SDLSoftButtonObject {
- let imageOnState = SDLSoftButtonState(stateName: ToggleSoftButtonImageOnState, text: nil, image: UIImage(named: WheelIconImageName))
- let imageOffState = SDLSoftButtonState(stateName: ToggleSoftButtonImageOffState, text: nil, image: UIImage(named: LaptopIconImageName))
+ let imageOnState = SDLSoftButtonState(stateName: ToggleSoftButtonImageOnState, text: nil, image: UIImage(named: ToggleOnBWIconName)?.withRenderingMode(.alwaysTemplate))
+ let imageOffState = SDLSoftButtonState(stateName: ToggleSoftButtonImageOffState, text: nil, image: UIImage(named: ToggleOffBWIconName)?.withRenderingMode(.alwaysTemplate))
return SDLSoftButtonObject(name: ToggleSoftButton, states: [imageOnState, imageOffState], initialStateName: imageOnState.name) { [unowned self] (buttonPress, buttonEvent) in
guard buttonPress != nil else { return }
self.toggleEnabled = !self.toggleEnabled
diff --git a/SmartDeviceLink_Example/ConnectionContainerViewController.swift b/Example Apps/Example Swift/ConnectionContainerViewController.swift
index e990712fa..431888dc9 100644
--- a/SmartDeviceLink_Example/ConnectionContainerViewController.swift
+++ b/Example Apps/Example Swift/ConnectionContainerViewController.swift
@@ -22,8 +22,9 @@ class ConnectionContainerViewController: UIViewController {
viewControllers.append(tcpController)
viewControllers.append(iapController)
- segmentedControl.selectedSegmentIndex = 0
- loadChildViewController(index: 0)
+ let defaultSegment = AppUserDefaults.shared.lastUsedSegment!
+ segmentedControl.selectedSegmentIndex = defaultSegment
+ loadChildViewController(index: defaultSegment)
let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(slideToLeftWithGestureRecognizer(gestureRecognizer:)))
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(slideToRightWithGestureRecognizer(gestureRecognizer:)))
@@ -74,7 +75,8 @@ class ConnectionContainerViewController: UIViewController {
}
func loadChildViewController(index: Int?) {
- let initialViewController: UIViewController = viewControllers[index!] as! UIViewController
+ AppUserDefaults.shared.lastUsedSegment = index
+ let initialViewController: UIViewController = viewControllers[index!]
self.addChildViewController(initialViewController)
view.addSubview(initialViewController.view)
initialViewController.didMove(toParentViewController: self)
diff --git a/SmartDeviceLink_Example/ConnectionIAPTableViewController.storyboard b/Example Apps/Example Swift/ConnectionIAPTableViewController.storyboard
index ef04daa8e..44ec1e58b 100644
--- a/SmartDeviceLink_Example/ConnectionIAPTableViewController.storyboard
+++ b/Example Apps/Example Swift/ConnectionIAPTableViewController.storyboard
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="J12-ul-Tx1">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="J12-ul-Tx1">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
@@ -13,7 +13,7 @@
<!--ConnectionIAP Table View Controller-->
<scene sceneID="kGx-OZ-JDF">
<objects>
- <tableViewController storyboardIdentifier="ConnectionIAPTableViewController" id="J12-ul-Tx1" customClass="ConnectionIAPTableViewController" customModule="SmartDeviceLink_Example_Swift" customModuleProvider="target" sceneMemberID="viewController">
+ <tableViewController storyboardIdentifier="ConnectionIAPTableViewController" id="J12-ul-Tx1" customClass="ConnectionIAPTableViewController" customModule="SDL_Example_Swift" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="MzB-GZ-Ook">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
diff --git a/SmartDeviceLink_Example/ConnectionIAPTableViewController.swift b/Example Apps/Example Swift/ConnectionIAPTableViewController.swift
index f5bacb922..f5bacb922 100644
--- a/SmartDeviceLink_Example/ConnectionIAPTableViewController.swift
+++ b/Example Apps/Example Swift/ConnectionIAPTableViewController.swift
diff --git a/SmartDeviceLink_Example/ConnectionTCPTableViewController.storyboard b/Example Apps/Example Swift/ConnectionTCPTableViewController.storyboard
index fc112572c..ff8be7363 100644
--- a/SmartDeviceLink_Example/ConnectionTCPTableViewController.storyboard
+++ b/Example Apps/Example Swift/ConnectionTCPTableViewController.storyboard
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="l5Q-ZP-1BO">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="l5Q-ZP-1BO">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
@@ -13,7 +13,7 @@
<!--ConnectionTCP Table View Controller-->
<scene sceneID="geJ-kX-PTm">
<objects>
- <tableViewController storyboardIdentifier="ConnectionTCPTableViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="l5Q-ZP-1BO" customClass="ConnectionTCPTableViewController" customModule="SDL_Example" customModuleProvider="target" sceneMemberID="viewController">
+ <tableViewController storyboardIdentifier="ConnectionTCPTableViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="l5Q-ZP-1BO" customClass="ConnectionTCPTableViewController" customModule="SDL_Example_Swift" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="7ZH-AV-Zyf">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
diff --git a/SmartDeviceLink_Example/ConnectionTCPTableViewController.swift b/Example Apps/Example Swift/ConnectionTCPTableViewController.swift
index 3cf1e91c3..3cf1e91c3 100644
--- a/SmartDeviceLink_Example/ConnectionTCPTableViewController.swift
+++ b/Example Apps/Example Swift/ConnectionTCPTableViewController.swift
diff --git a/SmartDeviceLink_Example/LaunchScreen.xib b/Example Apps/Example Swift/LaunchScreen.xib
index fc726aac2..fc726aac2 100644
--- a/SmartDeviceLink_Example/LaunchScreen.xib
+++ b/Example Apps/Example Swift/LaunchScreen.xib
diff --git a/SmartDeviceLink_Example/Main.storyboard b/Example Apps/Example Swift/Main.storyboard
index 81cd0bdcf..7415d792f 100644
--- a/SmartDeviceLink_Example/Main.storyboard
+++ b/Example Apps/Example Swift/Main.storyboard
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="mM3-m6-I5t">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="mM3-m6-I5t">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
@@ -30,7 +30,7 @@
<!--Connection Container View Controller-->
<scene sceneID="vG9-Hv-OW2">
<objects>
- <viewController id="cXb-Co-0MA" customClass="ConnectionContainerViewController" customModule="SDL_Example" customModuleProvider="target" sceneMemberID="viewController">
+ <viewController id="cXb-Co-0MA" customClass="ConnectionContainerViewController" customModule="SDL_Example_Swift" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="bfp-O0-sxl"/>
<viewControllerLayoutGuide type="bottom" id="fet-m3-F1O"/>
diff --git a/SmartDeviceLink_Example/MenuManager.swift b/Example Apps/Example Swift/MenuManager.swift
index cba211043..959265a74 100644
--- a/SmartDeviceLink_Example/MenuManager.swift
+++ b/Example Apps/Example Swift/MenuManager.swift
@@ -15,10 +15,10 @@ class MenuManager: NSObject {
///
/// - Parameter manager: The SDL Manager
/// - Returns: An array of SDLAddCommand objects
- class func allMenuItems(with manager: SDLManager) -> [SDLMenuCell] {
+ class func allMenuItems(with manager: SDLManager, choiceSetManager: PerformInteractionManager) -> [SDLMenuCell] {
return [menuCellSpeakName(with: manager),
- menuCellGetVehicleSpeed(with: manager),
- menuCellShowPerformInteraction(with: manager),
+ menuCellGetAllVehicleData(with: manager),
+ menuCellShowPerformInteraction(with: manager, choiceSetManager: choiceSetManager),
menuCellRecordInCarMicrophoneAudio(with: manager),
menuCellDialNumber(with: manager),
menuCellWithSubmenu(with: manager)]
@@ -45,7 +45,7 @@ private extension MenuManager {
/// - Parameter manager: The SDL Manager
/// - Returns: A SDLMenuCell object
class func menuCellSpeakName(with manager: SDLManager) -> SDLMenuCell {
- return SDLMenuCell(title: ACSpeakAppNameMenuName, icon: SDLArtwork(image: UIImage(named: SpeakBWIconImageName)!, persistent: true, as: .PNG), voiceCommands: [ACSpeakAppNameMenuName], handler: { _ in
+ return SDLMenuCell(title: ACSpeakAppNameMenuName, icon: SDLArtwork(image: UIImage(named: SpeakBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), voiceCommands: [ACSpeakAppNameMenuName], handler: { _ in
manager.send(request: SDLSpeak(tts: ExampleAppNameTTS), responseHandler: { (_, response, error) in
guard response?.resultCode == .success else { return }
SDLLog.e("Error sending the Speak RPC: \(error?.localizedDescription ?? "no error message")")
@@ -53,23 +53,32 @@ private extension MenuManager {
})
}
- /// Menu item that requests vehicle data when selected
+ /// Menu item that, when selected, shows a submenu with all possible vehicle data types
///
/// - Parameter manager: The SDL Manager
/// - Returns: A SDLMenuCell object
- class func menuCellGetVehicleSpeed(with manager: SDLManager) -> SDLMenuCell {
- return SDLMenuCell(title: ACGetVehicleDataMenuName, icon: SDLArtwork(image: UIImage(named: CarBWIconImageName)!, persistent: true, as: .PNG), voiceCommands: [ACGetVehicleDataMenuName], handler: { _ in
- VehicleDataManager.getVehicleSpeed(with: manager)
- })
+ class func menuCellGetAllVehicleData(with manager: SDLManager) -> SDLMenuCell {
+ let submenuItems = allVehicleDataTypes.map { submenuName in
+ SDLMenuCell(title: submenuName, icon: nil, voiceCommands: nil, handler: { triggerSource in
+ VehicleDataManager.getAllVehicleData(with: manager, triggerSource: triggerSource, vehicleDataType: submenuName)
+ })
+ }
+
+ return SDLMenuCell(title: ACGetAllVehicleDataMenuName, icon: SDLArtwork(image: UIImage(named: CarBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), subCells: submenuItems)
+ }
+
+ /// A list of all possible vehicle data types
+ static var allVehicleDataTypes: [String] {
+ return [ACAccelerationPedalPositionMenuName, ACAirbagStatusMenuName, ACBeltStatusMenuName, ACBodyInformationMenuName, ACClusterModeStatusMenuName, ACDeviceStatusMenuName, ACDriverBrakingMenuName, ACECallInfoMenuName, ACElectronicParkBrakeStatus, ACEmergencyEventMenuName, ACEngineOilLifeMenuName, ACEngineTorqueMenuName, ACExternalTemperatureMenuName, ACFuelLevelMenuName, ACFuelLevelStateMenuName, ACFuelRangeMenuName, ACGPSMenuName, ACHeadLampStatusMenuName, ACInstantFuelConsumptionMenuName, ACMyKeyMenuName, ACOdometerMenuName, ACPRNDLMenuName, ACRPMMenuName, ACSpeedMenuName, ACSteeringWheelAngleMenuName, ACTirePressureMenuName, ACTurnSignalMenuName, ACVINMenuName, ACWiperStatusMenuName]
}
/// Menu item that shows a custom menu (i.e. a Perform Interaction Choice Set) when selected
///
/// - Parameter manager: The SDL Manager
/// - Returns: A SDLMenuCell object
- class func menuCellShowPerformInteraction(with manager: SDLManager) -> SDLMenuCell {
- return SDLMenuCell(title: ACShowChoiceSetMenuName, icon: SDLArtwork(image: UIImage(named: MenuBWIconImageName)!, persistent: true, as: .PNG), voiceCommands: [ACShowChoiceSetMenuName], handler: { triggerSource in
- PerformInteractionManager.showPerformInteractionChoiceSet(with: manager, triggerSource: triggerSource)
+ class func menuCellShowPerformInteraction(with manager: SDLManager, choiceSetManager: PerformInteractionManager) -> SDLMenuCell {
+ return SDLMenuCell(title: ACShowChoiceSetMenuName, icon: SDLArtwork(image: UIImage(named: MenuBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), voiceCommands: [ACShowChoiceSetMenuName], handler: { triggerSource in
+ choiceSetManager.show(from: triggerSource)
})
}
@@ -80,12 +89,12 @@ private extension MenuManager {
class func menuCellRecordInCarMicrophoneAudio(with manager: SDLManager) -> SDLMenuCell {
if #available(iOS 10.0, *) {
let audioManager = AudioManager(sdlManager: manager)
- return SDLMenuCell(title: ACRecordInCarMicrophoneAudioMenuName, icon: SDLArtwork(image: UIImage(named: MicrophoneBWIconImageName)!, persistent: true, as: .PNG), voiceCommands: [ACRecordInCarMicrophoneAudioMenuName], handler: { _ in
+ return SDLMenuCell(title: ACRecordInCarMicrophoneAudioMenuName, icon: SDLArtwork(image: UIImage(named: MicrophoneBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), voiceCommands: [ACRecordInCarMicrophoneAudioMenuName], handler: { _ in
audioManager.startRecording()
})
}
- return SDLMenuCell(title: ACRecordInCarMicrophoneAudioMenuName, icon: SDLArtwork(image: UIImage(named: SpeakBWIconImageName)!, persistent: true, as: .PNG), voiceCommands: [ACRecordInCarMicrophoneAudioMenuName], handler: { _ in
+ return SDLMenuCell(title: ACRecordInCarMicrophoneAudioMenuName, icon: SDLArtwork(image: UIImage(named: SpeakBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), voiceCommands: [ACRecordInCarMicrophoneAudioMenuName], handler: { _ in
manager.send(AlertManager.alertWithMessageAndCloseButton("Speech recognition feature only available on iOS 10+"))
})
}
@@ -95,7 +104,7 @@ private extension MenuManager {
/// - Parameter manager: The SDL Manager
/// - Returns: A SDLMenuCell object
class func menuCellDialNumber(with manager: SDLManager) -> SDLMenuCell {
- return SDLMenuCell(title: ACDialPhoneNumberMenuName, icon: SDLArtwork(image: UIImage(named: PhoneBWIconImageName)!, persistent: true, as: .PNG), voiceCommands: [ACDialPhoneNumberMenuName], handler: { _ in
+ return SDLMenuCell(title: ACDialPhoneNumberMenuName, icon: SDLArtwork(image: UIImage(named: PhoneBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), voiceCommands: [ACDialPhoneNumberMenuName], handler: { _ in
guard RPCPermissionsManager.isDialNumberRPCAllowed(with: manager) else {
manager.send(AlertManager.alertWithMessageAndCloseButton("This app does not have the required permissions to dial a number"))
return
@@ -111,9 +120,9 @@ private extension MenuManager {
/// - Returns: A SDLMenuCell object
class func menuCellWithSubmenu(with manager: SDLManager) -> SDLMenuCell {
var submenuItems = [SDLMenuCell]()
- for i in 0..<75 {
+ for i in 0 ..< 10 {
let submenuTitle = "Submenu Item \(i)"
- submenuItems.append(SDLMenuCell(title: submenuTitle, icon: SDLArtwork(image: UIImage(named: MenuBWIconImageName)!, persistent: true, as: .PNG), voiceCommands: [submenuTitle, "Item \(i)", "\(i)"], handler: { (triggerSource) in
+ submenuItems.append(SDLMenuCell(title: submenuTitle, icon: SDLArtwork(image: UIImage(named: MenuBWIconImageName)!.withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), voiceCommands: nil, handler: { (triggerSource) in
let message = "\(submenuTitle) selected!"
switch triggerSource {
case .menu:
@@ -124,8 +133,8 @@ private extension MenuManager {
}
}))
}
-
- return SDLMenuCell(title: "Submenu", subCells: submenuItems)
+
+ return SDLMenuCell(title: ACSubmenuMenuName, icon: SDLArtwork(image: #imageLiteral(resourceName: "choice_set").withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), subCells: submenuItems)
}
}
diff --git a/Example Apps/Example Swift/PerformInteractionManager.swift b/Example Apps/Example Swift/PerformInteractionManager.swift
new file mode 100644
index 000000000..fcf330f86
--- /dev/null
+++ b/Example Apps/Example Swift/PerformInteractionManager.swift
@@ -0,0 +1,91 @@
+//
+// PerformInteractionManager.swift
+// SmartDeviceLink-Example-Swift
+//
+// Created by Nicole on 5/15/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+import UIKit
+import SmartDeviceLink
+import SmartDeviceLinkSwift
+
+class PerformInteractionManager: NSObject {
+ fileprivate var manager: SDLManager!
+
+ init(sdlManager: SDLManager) {
+ self.manager = sdlManager
+ }
+
+ /// Shows a PICS. The handler is called when the user selects a menu item or when the menu times out after a set amount of time. A custom text-to-speech phrase is spoken when the menu is closed.
+ ///
+ /// - Parameter manager: The SDL Manager
+ func show(from triggerSource: SDLTriggerSource) {
+ manager.screenManager.presentSearchableChoiceSet(choiceSet, mode: interactionMode(for: triggerSource), with: self)
+ }
+}
+
+// MARK: - PICS Menu
+
+private extension PerformInteractionManager {
+ /// The PICS menu items
+ var choiceCells: [SDLChoiceCell] {
+ let firstChoice = SDLChoiceCell(text: PICSFirstChoice, artwork: nil, voiceCommands: nil)
+ let secondChoice = SDLChoiceCell(text: PICSSecondChoice, artwork: nil, voiceCommands: nil)
+ let thirdChoice = SDLChoiceCell(text: PICSThirdChoice, artwork: nil, voiceCommands: nil)
+ return [firstChoice, secondChoice, thirdChoice]
+ }
+
+ /// Creates a PICS with three menu items and customized voice commands
+ var choiceSet: SDLChoiceSet {
+ return SDLChoiceSet(title: PICSInitialPrompt, delegate: self, layout: .list, timeout: 10, initialPromptString: PICSInitialPrompt, timeoutPromptString: PICSTimeoutPrompt, helpPromptString: PICSHelpPrompt, vrHelpList: nil, choices: choiceCells)
+ }
+
+ func interactionMode(for triggerSource: SDLTriggerSource) -> SDLInteractionMode {
+ return (triggerSource == .menu ? .manualOnly : .voiceRecognitionOnly)
+ }
+}
+
+extension PerformInteractionManager: SDLChoiceSetDelegate {
+ func choiceSet(_ choiceSet: SDLChoiceSet, didSelectChoice choice: SDLChoiceCell, withSource source: SDLTriggerSource, atRowIndex rowIndex: UInt) {
+ manager.send(SDLSpeak(tts: TTSGoodJob))
+ }
+
+ func choiceSet(_ choiceSet: SDLChoiceSet, didReceiveError error: Error) {
+ manager.send(SDLSpeak(tts: TTSYouMissed))
+ }
+}
+
+extension PerformInteractionManager: SDLKeyboardDelegate {
+ func keyboardDidAbort(withReason event: SDLKeyboardEvent) {
+ switch event {
+ case SDLKeyboardEvent.cancelled:
+ manager.send(SDLSpeak(tts: TTSYouMissed))
+ case SDLKeyboardEvent.aborted:
+ manager.send(SDLSpeak(tts: TTSYouMissed))
+ default: break
+ }
+ }
+
+ func userDidSubmitInput(_ inputText: String, withEvent source: SDLKeyboardEvent) {
+ switch source {
+ case SDLKeyboardEvent.voice: break
+ // Start Voice search
+ case SDLKeyboardEvent.submitted:
+ manager.send(SDLSpeak(tts: TTSGoodJob))
+ default: break
+ }
+ }
+
+ func updateAutocomplete(withInput currentInputText: String, completionHandler: @escaping SDLKeyboardAutocompleteCompletionHandler) {
+ if currentInputText.lowercased().hasPrefix("f") {
+ completionHandler(PICSFirstChoice)
+ } else if currentInputText.lowercased().hasPrefix("s") {
+ completionHandler(PICSSecondChoice)
+ } else if currentInputText.lowercased().hasPrefix("t") {
+ completionHandler(PICSThirdChoice)
+ } else {
+ completionHandler(nil)
+ }
+ }
+}
diff --git a/SmartDeviceLink_Example/Protocol+ProxyManagerDelegate.swift b/Example Apps/Example Swift/Protocol+ProxyManagerDelegate.swift
index ede7b7701..ede7b7701 100644
--- a/SmartDeviceLink_Example/Protocol+ProxyManagerDelegate.swift
+++ b/Example Apps/Example Swift/Protocol+ProxyManagerDelegate.swift
diff --git a/SmartDeviceLink_Example/ProxyManager.swift b/Example Apps/Example Swift/ProxyManager.swift
index 7ecc28679..3b0ca25a4 100644
--- a/SmartDeviceLink_Example/ProxyManager.swift
+++ b/Example Apps/Example Swift/ProxyManager.swift
@@ -24,6 +24,7 @@ class ProxyManager: NSObject {
fileprivate var sdlManager: SDLManager!
fileprivate var buttonManager: ButtonManager!
fileprivate var vehicleDataManager: VehicleDataManager!
+ fileprivate var performInteractionManager: PerformInteractionManager!
fileprivate var firstHMILevelState: SDLHMILevel
weak var delegate: ProxyManagerDelegate?
@@ -65,7 +66,7 @@ private extension ProxyManager {
///
/// - Returns: A SDLConfiguration object
class func connectIAP() -> SDLConfiguration {
- let lifecycleConfiguration = SDLLifecycleConfiguration(appName: ExampleAppName, appId: ExampleAppId)
+ let lifecycleConfiguration = SDLLifecycleConfiguration(appName: ExampleAppName, fullAppId: ExampleFullAppId)
return setupManagerConfiguration(with: lifecycleConfiguration)
}
@@ -73,7 +74,7 @@ private extension ProxyManager {
///
/// - Returns: A SDLConfiguration object
class func connectTCP() -> SDLConfiguration {
- let lifecycleConfiguration = SDLLifecycleConfiguration(appName: ExampleAppName, appId: ExampleAppId, ipAddress: AppUserDefaults.shared.ipAddress!, port: UInt16(AppUserDefaults.shared.port!)!)
+ let lifecycleConfiguration = SDLLifecycleConfiguration(appName: ExampleAppName, fullAppId: ExampleFullAppId, ipAddress: AppUserDefaults.shared.ipAddress!, port: UInt16(AppUserDefaults.shared.port!)!)
return setupManagerConfiguration(with: lifecycleConfiguration)
}
@@ -83,15 +84,22 @@ private extension ProxyManager {
/// - Returns: A SDLConfiguration object
class func setupManagerConfiguration(with lifecycleConfiguration: SDLLifecycleConfiguration) -> SDLConfiguration {
lifecycleConfiguration.shortAppName = ExampleAppNameShort
- let appIcon = UIImage(named: ExampleAppLogoName)
+ let appIcon = UIImage(named: ExampleAppLogoName)?.withRenderingMode(.alwaysOriginal)
lifecycleConfiguration.appIcon = appIcon != nil ? SDLArtwork(image: appIcon!, persistent: true, as: .PNG) : nil
lifecycleConfiguration.appType = .default
lifecycleConfiguration.language = .enUs
lifecycleConfiguration.languagesSupported = [.enUs, .esMx, .frCa]
lifecycleConfiguration.ttsName = [SDLTTSChunk(text: "S D L", type: .text)]
+ let green = SDLRGBColor(red: 126, green: 188, blue: 121)
+ let white = SDLRGBColor(red: 249, green: 251, blue: 254)
+ let grey = SDLRGBColor(red: 186, green: 198, blue: 210)
+ let darkGrey = SDLRGBColor(red: 57, green: 78, blue: 96)
+ lifecycleConfiguration.dayColorScheme = SDLTemplateColorScheme(primaryRGBColor: green, secondaryRGBColor: grey, backgroundRGBColor: white)
+ 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())
+ return SDLConfiguration(lifecycle: lifecycleConfiguration, lockScreen: lockScreenConfiguration, logging: logConfiguration(), fileManager:.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`.
@@ -119,6 +127,7 @@ private extension ProxyManager {
self.buttonManager = ButtonManager(sdlManager: self.sdlManager, updateScreenHandler: self.refreshUIHandler)
self.vehicleDataManager = VehicleDataManager(sdlManager: self.sdlManager, refreshUIHandler: self.refreshUIHandler)
+ self.performInteractionManager = PerformInteractionManager(sdlManager: self.sdlManager)
RPCPermissionsManager.setupPermissionsCallbacks(with: self.sdlManager)
@@ -152,7 +161,7 @@ extension ProxyManager: SDLManagerDelegate {
firstHMILevelState = newLevel
// Send static menu items. Menu related RPCs can be sent at all `hmiLevel`s except `NONE`
- createStaticMenus()
+ createMenuAndGlobalVoiceCommands()
vehicleDataManager.subscribeToVehicleOdometer()
}
@@ -231,6 +240,9 @@ private extension ProxyManager {
/// Set the template and create the UI
func showInitialData() {
guard sdlManager.hmiLevel == .full else { return }
+
+ let setDisplayLayout = SDLSetDisplayLayout(predefinedLayout: .nonMedia)
+ sdlManager.send(setDisplayLayout)
updateScreen()
sdlManager.screenManager.softButtonObjects = buttonManager.allScreenSoftButtons(with: sdlManager)
@@ -251,7 +263,15 @@ private extension ProxyManager {
screenManager.textField3 = isTextVisible ? vehicleDataManager.vehicleOdometerData : nil
if sdlManager.systemCapabilityManager.displayCapabilities?.graphicSupported.boolValue ?? false {
- screenManager.primaryGraphic = areImagesVisible ? SDLArtwork(image: UIImage(named: ExampleAppLogoName)!, persistent: false, as: .PNG) : nil
+ // Primary graphic
+ if imageFieldSupported(imageFieldName: .graphic) {
+ screenManager.primaryGraphic = areImagesVisible ? SDLArtwork(image: UIImage(named: ExampleAppLogoName)!.withRenderingMode(.alwaysOriginal), persistent: false, as: .PNG) : nil
+ }
+
+ // Secondary graphic
+ if imageFieldSupported(imageFieldName: .secondaryGraphic) {
+ screenManager.secondaryGraphic = areImagesVisible ? SDLArtwork(image: UIImage(named: CarBWIconImageName)!, persistent: false, as: .PNG) : nil
+ }
}
screenManager.endUpdates(completionHandler: { (error) in
@@ -261,25 +281,21 @@ private extension ProxyManager {
}
/// Send static menu data
- func createStaticMenus() {
+ func createMenuAndGlobalVoiceCommands() {
// Send the root menu items
let screenManager = sdlManager.screenManager
- let menuItems = MenuManager.allMenuItems(with: sdlManager)
+ let menuItems = MenuManager.allMenuItems(with: sdlManager, choiceSetManager: performInteractionManager)
let voiceMenuItems = MenuManager.allVoiceMenuItems(with: sdlManager)
- screenManager.beginUpdates()
if !menuItems.isEmpty { screenManager.menu = menuItems }
if !voiceMenuItems.isEmpty { screenManager.voiceCommands = voiceMenuItems }
- screenManager.endUpdates { (error) in
- guard error != nil else { return }
- SDLLog.e("Menu items and voice commands failed to update: \(error!.localizedDescription)")
- }
+ }
- // Send the choice sets
- sdlManager.send([PerformInteractionManager.createInteractionChoiceSet()], progressHandler: { (request, response, error, percentComplete) in
- SDLLog.d("\(request), was sent \(response?.resultCode == .success ? "successfully" : "unsuccessfully"), error: \(error?.localizedDescription ?? "no error message")")
- }, completionHandler: { (success) in
- SDLLog.d("All prepare remote system requests sent \(success ? "successfully" : "unsuccessfully")")
- })
+ /// Checks if SDL Core's HMI current template supports the template image field (i.e. primary graphic, secondary graphic, etc.)
+ ///
+ /// - Parameter imageFieldName: The name for the image field
+ /// - Returns: True if the image field is supported, false if not
+ func imageFieldSupported(imageFieldName: SDLImageFieldName) -> Bool {
+ return sdlManager.systemCapabilityManager.displayCapabilities?.imageFields?.first { $0.name == imageFieldName } != nil ? true : false
}
}
diff --git a/SmartDeviceLink_Example/RPCPermissionsManager.swift b/Example Apps/Example Swift/RPCPermissionsManager.swift
index 72cdb8019..72cdb8019 100644
--- a/SmartDeviceLink_Example/RPCPermissionsManager.swift
+++ b/Example Apps/Example Swift/RPCPermissionsManager.swift
diff --git a/SmartDeviceLink_Example/SmartDeviceLink-Example-Swift-Bridging-Header.h b/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h
index 70ca78854..70ca78854 100644
--- a/SmartDeviceLink_Example/SmartDeviceLink-Example-Swift-Bridging-Header.h
+++ b/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h
diff --git a/SmartDeviceLink-Example-Swift-Info.plist b/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist
index 81a89f887..20403cdab 100644
--- a/SmartDeviceLink-Example-Swift-Info.plist
+++ b/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>6.0.2</string>
+ <string>6.1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
diff --git a/Example Apps/Example Swift/TextValidator.swift b/Example Apps/Example Swift/TextValidator.swift
new file mode 100644
index 000000000..3c0e5645e
--- /dev/null
+++ b/Example Apps/Example Swift/TextValidator.swift
@@ -0,0 +1,36 @@
+//
+// TextValidator.swift
+// SmartDeviceLink
+//
+// Created by Nicole on 7/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+import Foundation
+
+class TextValidator {
+ private static let validCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. "
+
+ class func validateText(_ text: String, length: Int) -> String {
+ if text.isEmpty { return text }
+ let filteredText = filterUnsupportedCharacters(text)
+ let condensedString = filteredText.condenseWhitespace
+ let truncatedString = condensedString.truncate(length: length)
+ return truncatedString
+ }
+
+ private class func filterUnsupportedCharacters(_ text:String) -> String {
+ return String(text.filter { validCharacters.contains($0) } )
+ }
+}
+
+extension String {
+ func truncate(length: Int, trailing: String = "…") -> String {
+ return (self.count > length) ? self.prefix(length) + trailing : self
+ }
+
+ var condenseWhitespace: String {
+ let components = self.components(separatedBy: .whitespacesAndNewlines)
+ return components.filter { !$0.isEmpty }.joined(separator: " ")
+ }
+}
diff --git a/Example Apps/Example Swift/VehicleDataManager.swift b/Example Apps/Example Swift/VehicleDataManager.swift
new file mode 100644
index 000000000..08b2881c3
--- /dev/null
+++ b/Example Apps/Example Swift/VehicleDataManager.swift
@@ -0,0 +1,299 @@
+//
+// VehicleDataManager.swift
+// SmartDeviceLink
+//
+// Created by Nicole on 4/13/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+import Foundation
+import SmartDeviceLink
+import SmartDeviceLinkSwift
+
+
+class VehicleDataManager: NSObject {
+ fileprivate let sdlManager: SDLManager!
+ fileprivate var refreshUIHandler: RefreshUIHandler?
+ public fileprivate(set) var vehicleOdometerData: String
+
+ init(sdlManager: SDLManager, refreshUIHandler: RefreshUIHandler? = nil) {
+ self.sdlManager = sdlManager
+ self.refreshUIHandler = refreshUIHandler
+ self.vehicleOdometerData = ""
+ super.init()
+
+ resetOdometer()
+ NotificationCenter.default.addObserver(self, selector: #selector(vehicleDataNotification(_:)), name: .SDLDidReceiveVehicleData, object: nil)
+ }
+}
+
+// MARK: - Subscribe Vehicle Data
+
+extension VehicleDataManager {
+ /// Subscribes to odometer data. You must subscribe to a notification with name `SDLDidReceiveVehicleData` to get the new data when the odometer data changes.
+ func subscribeToVehicleOdometer() {
+ let subscribeToVehicleOdometer = SDLSubscribeVehicleData()
+ subscribeToVehicleOdometer.odometer = true
+ sdlManager.send(request: subscribeToVehicleOdometer) { [unowned self] (request, response, error) in
+ guard let result = response?.resultCode else { return }
+
+ if error != nil {
+ SDLLog.e("Error sending Get Vehicle Data RPC: \(error!.localizedDescription)")
+ }
+
+ var message = "\(VehicleDataOdometerName): "
+ switch result {
+ case .success:
+ SDLLog.d("Subscribed to vehicle odometer data")
+ message += "Subscribed"
+ case .disallowed:
+ SDLLog.d("Access to vehicle data disallowed")
+ message += "Disallowed"
+ case .userDisallowed:
+ SDLLog.d("Vehicle user disabled access to vehicle data")
+ message += "Disabled"
+ case .ignored:
+ SDLLog.d("Already subscribed to odometer data")
+ message += "Subscribed"
+ case .dataNotAvailable:
+ SDLLog.d("You have permission to access to vehicle data, but the vehicle you are connected to did not provide any data")
+ message += "Unknown"
+ default:
+ SDLLog.e("Unknown reason for failure to get vehicle data: \(error != nil ? error!.localizedDescription : "no error message")")
+ message += "Unsubscribed"
+ return
+ }
+ self.vehicleOdometerData = message
+
+ guard let handler = self.refreshUIHandler else { return }
+ handler()
+ }
+ }
+
+ /// Unsubscribes to vehicle odometer data.
+ func unsubscribeToVehicleOdometer() {
+ let unsubscribeToVehicleOdometer = SDLUnsubscribeVehicleData()
+ unsubscribeToVehicleOdometer.odometer = true
+ sdlManager.send(request: unsubscribeToVehicleOdometer) { (request, response, error) in
+ guard let response = response, response.resultCode == .success else { return }
+ self.resetOdometer()
+ }
+ }
+
+ /// Notification containing the updated vehicle data.
+ ///
+ /// - Parameter notification: A SDLOnVehicleData notification
+ func vehicleDataNotification(_ notification: SDLRPCNotificationNotification) {
+ guard let handler = refreshUIHandler, let onVehicleData = notification.notification as? SDLOnVehicleData, let odometer = onVehicleData.odometer else {
+ return
+ }
+
+ vehicleOdometerData = "\(VehicleDataOdometerName): \(odometer) km"
+ handler()
+ }
+
+ /// Resets the odometer data
+ fileprivate func resetOdometer() {
+ vehicleOdometerData = "\(VehicleDataOdometerName): Unsubscribed"
+ }
+}
+
+// MARK: - Get Vehicle Data
+
+extension VehicleDataManager {
+ /// Retreives the current vehicle data
+ ///
+ /// - Parameters:
+ /// - manager: The SDL manager
+ /// - triggerSource: Whether the menu item was selected by voice or touch
+ /// - parameter: The vehicle data to look for
+ class func getAllVehicleData(with manager: SDLManager, triggerSource: SDLTriggerSource, vehicleDataType: String) {
+ guard hasPermissionToAccessVehicleData(with: manager) else { return }
+
+ SDLLog.d("App has permission to access vehicle data. Requesting all vehicle data...")
+ let getAllVehicleData = SDLGetVehicleData(accelerationPedalPosition: true, airbagStatus: true, beltStatus: true, bodyInformation: true, clusterModeStatus: true, deviceStatus: true, driverBraking: true, eCallInfo: true, electronicParkBrakeStatus: true, emergencyEvent: true, engineOilLife: true, engineTorque: true, externalTemperature: true, fuelLevel: true, fuelLevelState: true, fuelRange: true, gps: true, headLampStatus: true, instantFuelConsumption: true, myKey: true, odometer: true, prndl: true, rpm: true, speed: true, steeringWheelAngle: true, tirePressure: true, turnSignal: true, vin: true, wiperStatus: true)
+
+ manager.send(request: getAllVehicleData) { (request, response, error) in
+ guard didAccessVehicleDataSuccessfully(with: manager, response: response, error: error) else { return }
+
+ var alertTitle: String = ""
+ var alertMessage: String = ""
+
+ switch response!.resultCode {
+ case .rejected:
+ SDLLog.d("The request for vehicle data was rejected")
+ alertTitle = "Rejected"
+ case .disallowed:
+ SDLLog.d("This app does not have the required permissions to access vehicle data")
+ alertTitle = "Disallowed"
+ case .success, .dataNotAvailable:
+ if let vehicleData = response as? SDLGetVehicleDataResponse {
+ alertTitle = vehicleDataType
+ alertMessage = vehicleDataDescription(vehicleData, vehicleDataType: vehicleDataType)
+ SDLLog.d("Request for \(vehicleDataType) vehicle data successful, \(alertMessage)")
+ } else {
+ alertTitle = "No vehicle data returned"
+ SDLLog.e(alertTitle)
+ }
+ default: break
+ }
+
+ alertTitle = TextValidator.validateText(alertTitle, length: 25)
+ alertMessage = TextValidator.validateText(alertMessage, length: 200)
+
+ if triggerSource == .menu {
+ let title = !alertTitle.isEmpty ? alertTitle : "No Vehicle Data Available"
+ let detailMessage = !alertMessage.isEmpty ? alertMessage : nil
+ let alert = AlertManager.alertWithMessageAndCloseButton(title,
+ textField2: detailMessage)
+ manager.send(alert)
+ } else {
+ let spokenAlert = !alertMessage.isEmpty ? alertMessage : alertTitle
+ manager.send(SDLSpeak(tts: spokenAlert))
+ }
+ }
+ }
+
+ /// Returns a description of the vehicle data.
+ ///
+ /// - Parameters:
+ /// - vehicleData: All vehicle data
+ /// - vehicleDataType: The vehicle data to get a description of
+ /// - Returns: A description of the vehicle data
+ class func vehicleDataDescription(_ vehicleData: SDLGetVehicleDataResponse, vehicleDataType: String) -> String {
+ let notAvailable = "Vehicle data not available"
+
+ var vehicleDataDescription = ""
+ switch vehicleDataType {
+ case ACAccelerationPedalPositionMenuName:
+ vehicleDataDescription = vehicleData.accPedalPosition?.description ?? notAvailable
+ case ACAirbagStatusMenuName:
+ vehicleDataDescription = vehicleData.airbagStatus?.description ?? notAvailable
+ case ACBeltStatusMenuName:
+ vehicleDataDescription = vehicleData.beltStatus?.description ?? notAvailable
+ case ACBodyInformationMenuName:
+ vehicleDataDescription = vehicleData.bodyInformation?.description ?? notAvailable
+ case ACClusterModeStatusMenuName:
+ vehicleDataDescription = vehicleData.clusterModeStatus?.description ?? notAvailable
+ case ACDeviceStatusMenuName:
+ vehicleDataDescription = vehicleData.deviceStatus?.description ?? notAvailable
+ case ACDriverBrakingMenuName:
+ vehicleDataDescription = vehicleData.driverBraking?.rawValue.rawValue ?? notAvailable
+ case ACECallInfoMenuName:
+ vehicleDataDescription = vehicleData.eCallInfo?.description ?? notAvailable
+ case ACElectronicParkBrakeStatus:
+ vehicleDataDescription = vehicleData.electronicParkBrakeStatus?.rawValue.rawValue ?? notAvailable
+ case ACEmergencyEventMenuName:
+ vehicleDataDescription = vehicleData.emergencyEvent?.description ?? notAvailable
+ case ACEngineOilLifeMenuName:
+ vehicleDataDescription = vehicleData.engineOilLife?.description ?? notAvailable
+ case ACEngineTorqueMenuName:
+ vehicleDataDescription = vehicleData.engineTorque?.description ?? notAvailable
+ case ACExternalTemperatureMenuName:
+ vehicleDataDescription = vehicleData.externalTemperature?.description ?? notAvailable
+ case ACFuelLevelMenuName:
+ vehicleDataDescription = vehicleData.fuelLevel?.description ?? notAvailable
+ case ACFuelLevelStateMenuName:
+ vehicleDataDescription = vehicleData.fuelLevel_State?.rawValue.rawValue ?? notAvailable
+ case ACFuelRangeMenuName:
+ vehicleDataDescription = vehicleData.fuelRange?.description ?? notAvailable
+ case ACGPSMenuName:
+ vehicleDataDescription = vehicleData.gps?.description ?? notAvailable
+ case ACHeadLampStatusMenuName:
+ vehicleDataDescription = vehicleData.headLampStatus?.description ?? notAvailable
+ case ACInstantFuelConsumptionMenuName:
+ vehicleDataDescription = vehicleData.instantFuelConsumption?.description ?? notAvailable
+ case ACMyKeyMenuName:
+ vehicleDataDescription = vehicleData.myKey?.description ?? notAvailable
+ case ACOdometerMenuName:
+ vehicleDataDescription = vehicleData.odometer?.description ?? notAvailable
+ case ACPRNDLMenuName:
+ vehicleDataDescription = vehicleData.prndl?.rawValue.rawValue ?? notAvailable
+ case ACSpeedMenuName:
+ vehicleDataDescription = vehicleData.speed?.description ?? notAvailable
+ case ACSteeringWheelAngleMenuName:
+ vehicleDataDescription = vehicleData.steeringWheelAngle?.description ?? notAvailable
+ case ACTirePressureMenuName:
+ vehicleDataDescription = vehicleData.tirePressure?.description ?? notAvailable
+ case ACTurnSignalMenuName:
+ vehicleDataDescription = vehicleData.turnSignal?.rawValue.rawValue ?? notAvailable
+ case ACVINMenuName:
+ vehicleDataDescription = vehicleData.vin?.description ?? notAvailable
+ default: break
+ }
+
+ return vehicleDataDescription
+ }
+
+ /// Checks if the app has the required permissions to access vehicle data
+ ///
+ /// - Parameter manager: The SDL manager
+ /// - Returns: True if the app has permission to access vehicle data, false if not
+ class func hasPermissionToAccessVehicleData(with manager: SDLManager) -> Bool {
+ SDLLog.d("Checking if app has permission to access vehicle data...")
+
+ guard manager.permissionManager.isRPCAllowed("GetVehicleData") else {
+ let alert = AlertManager.alertWithMessageAndCloseButton("This app does not have the required permissions to access vehicle data")
+ manager.send(request: alert)
+ return false
+ }
+
+ return true
+ }
+
+ /// Checks if Core sent back vehicle data
+ ///
+ /// - Parameters:
+ /// - manager: The SDL manager
+ /// - response: The response from Core
+ /// - error: An error from Core
+ /// - Returns: True if Core sent back vehicle data, false if not
+ class func didAccessVehicleDataSuccessfully(with manager:SDLManager, response: SDLRPCResponse?, error: Error?) -> Bool {
+ SDLLog.d("Checking if Core returned vehicle data")
+
+ guard response != nil, error == nil else {
+ let alert = AlertManager.alertWithMessageAndCloseButton("Something went wrong while getting vehicle data")
+ manager.send(request: alert)
+ return false
+ }
+
+ return true
+ }
+}
+
+// MARK: - Phone Calls
+
+extension VehicleDataManager {
+ /// Checks if the head unit has the ability and/or permissions to make a phone call. If it does, the phone number is dialed.
+ ///
+ /// - Parameter manager: The SDL manager
+ /// - phoneNumber: A phone number to dial
+ class func checkPhoneCallCapability(manager: SDLManager, phoneNumber: String) {
+ SDLLog.d("Checking phone call capability")
+ manager.systemCapabilityManager.updateCapabilityType(.phoneCall, completionHandler: { (error, systemCapabilityManager) in
+ guard let phoneCapability = systemCapabilityManager.phoneCapability else {
+ manager.send(AlertManager.alertWithMessageAndCloseButton("The head unit does not support the phone call capability"))
+ return
+ }
+ if phoneCapability.dialNumberEnabled?.boolValue ?? false {
+ SDLLog.d("Dialing phone number \(phoneNumber)...")
+ dialPhoneNumber(phoneNumber, manager: manager)
+ } else {
+ manager.send(AlertManager.alertWithMessageAndCloseButton("A phone call can not be made"))
+ }
+ })
+ }
+
+ /// Dials a phone number.
+ ///
+ /// - Parameters:
+ /// - phoneNumber: A phone number to dial
+ /// - manager: The SDL manager
+ private class func dialPhoneNumber(_ phoneNumber: String, manager: SDLManager) {
+ let dialNumber = SDLDialNumber(number: phoneNumber)
+ manager.send(request: dialNumber) { (requst, response, error) in
+ guard let success = response?.resultCode else { return }
+ SDLLog.d("Sent dial number request: \(success == .success ? "successfully" : "unsuccessfully").")
+ }
+ }
+}
diff --git a/SmartDeviceLink_Example/AppConstants.h b/Example Apps/Shared/AppConstants.h
index c38b1b70b..4ec2851b1 100644
--- a/SmartDeviceLink_Example/AppConstants.h
+++ b/Example Apps/Shared/AppConstants.h
@@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
extern NSString * const ExampleAppName;
extern NSString * const ExampleAppNameShort;
extern NSString * const ExampleAppNameTTS;
-extern NSString * const ExampleAppId;
+extern NSString * const ExampleFullAppId;
extern BOOL const ExampleAppShouldRestartSDLManagerOnDisconnect;
#pragma mark - SDL Textfields
@@ -68,22 +68,53 @@ extern NSString * const PICSThirdChoice;
extern NSString * const ACSpeakAppNameMenuName;
extern NSString * const ACShowChoiceSetMenuName;
extern NSString * const ACGetVehicleDataMenuName;
+extern NSString * const ACGetAllVehicleDataMenuName;
extern NSString * const ACRecordInCarMicrophoneAudioMenuName;
extern NSString * const ACDialPhoneNumberMenuName;
extern NSString * const ACSubmenuMenuName;
extern NSString * const ACSubmenuItemMenuName;
+extern NSString * const ACAccelerationPedalPositionMenuName;
+extern NSString * const ACAirbagStatusMenuName;
+extern NSString * const ACBeltStatusMenuName;
+extern NSString * const ACBodyInformationMenuName;
+extern NSString * const ACClusterModeStatusMenuName;
+extern NSString * const ACDeviceStatusMenuName;
+extern NSString * const ACDriverBrakingMenuName;
+extern NSString * const ACECallInfoMenuName;
+extern NSString * const ACElectronicParkBrakeStatus;
+extern NSString * const ACEmergencyEventMenuName;
+extern NSString * const ACEngineOilLifeMenuName;
+extern NSString * const ACEngineTorqueMenuName;
+extern NSString * const ACExternalTemperatureMenuName;
+extern NSString * const ACFuelLevelMenuName;
+extern NSString * const ACFuelLevelStateMenuName;
+extern NSString * const ACFuelRangeMenuName;
+extern NSString * const ACGPSMenuName;
+extern NSString * const ACHeadLampStatusMenuName;
+extern NSString * const ACInstantFuelConsumptionMenuName;
+extern NSString * const ACMyKeyMenuName;
+extern NSString * const ACOdometerMenuName;
+extern NSString * const ACPRNDLMenuName;
+extern NSString * const ACRPMMenuName;
+extern NSString * const ACSpeedMenuName;
+extern NSString * const ACSteeringWheelAngleMenuName;
+extern NSString * const ACTirePressureMenuName;
+extern NSString * const ACTurnSignalMenuName;
+extern NSString * const ACVINMenuName;
+extern NSString * const ACWiperStatusMenuName;
+
#pragma mark - SDL Image Names
-extern NSString * const ExampleAppLogoName;
-extern NSString * const CarIconImageName;
-extern NSString * const LaptopIconImageName;
-extern NSString * const WheelIconImageName;
-extern NSString * const SpeakBWIconImageName;
+extern NSString * const AlertBWIconName;
extern NSString * const CarBWIconImageName;
+extern NSString * const ExampleAppLogoName;
extern NSString * const MenuBWIconImageName;
-extern NSString * const PhoneBWIconImageName;
extern NSString * const MicrophoneBWIconImageName;
+extern NSString * const PhoneBWIconImageName;
+extern NSString * const SpeakBWIconImageName;
+extern NSString * const ToggleOffBWIconName;
+extern NSString * const ToggleOnBWIconName;
#pragma mark - SDL App Name in Different Languages
extern NSString * const ExampleAppNameSpanish;
diff --git a/SmartDeviceLink_Example/AppConstants.m b/Example Apps/Shared/AppConstants.m
index c9ff9ad91..016985ff2 100644
--- a/SmartDeviceLink_Example/AppConstants.m
+++ b/Example Apps/Shared/AppConstants.m
@@ -12,7 +12,7 @@
NSString * const ExampleAppName = @"SDL Example App";
NSString * const ExampleAppNameShort = @"SDL";
NSString * const ExampleAppNameTTS = @"S D L Example App";
-NSString * const ExampleAppId = @"9c21";
+NSString * const ExampleFullAppId = @"123e4567-e89b-12d3-a456-426655440000"; // Dummy App Id
BOOL const ExampleAppShouldRestartSDLManagerOnDisconnect = NO;
#pragma mark - SDL Textfields
@@ -66,21 +66,52 @@ NSString * const PICSThirdChoice = @"Third Choice";
NSString * const ACSpeakAppNameMenuName = @"Speak App Name";
NSString * const ACShowChoiceSetMenuName = @"Show Perform Interaction Choice Set";
NSString * const ACGetVehicleDataMenuName = @"Get Vehicle Speed";
+NSString * const ACGetAllVehicleDataMenuName = @"Get All Vehicle Data";
NSString * const ACRecordInCarMicrophoneAudioMenuName = @"Record In-Car Microphone Audio";
NSString * const ACDialPhoneNumberMenuName = @"Dial Phone Number";
NSString * const ACSubmenuMenuName = @"Submenu";
NSString * const ACSubmenuItemMenuName = @"Item";
+NSString * const ACAccelerationPedalPositionMenuName = @"Acceleration Pedal Position";
+NSString * const ACAirbagStatusMenuName = @"Airbag Status";
+NSString * const ACBeltStatusMenuName = @"Belt Status";
+NSString * const ACBodyInformationMenuName = @"Body Information";
+NSString * const ACClusterModeStatusMenuName = @"Cluster Mode Status";
+NSString * const ACDeviceStatusMenuName = @"Device Status";
+NSString * const ACDriverBrakingMenuName = @"Driver Braking";
+NSString * const ACECallInfoMenuName = @"eCall Info";
+NSString * const ACElectronicParkBrakeStatus = @"Electronic Parking Brake Status";
+NSString * const ACEmergencyEventMenuName = @"Emergency Event";
+NSString * const ACEngineOilLifeMenuName = @"Engine Oil Life";
+NSString * const ACEngineTorqueMenuName = @"Engine Torque";
+NSString * const ACExternalTemperatureMenuName = @"External Temperature";
+NSString * const ACFuelLevelMenuName = @"Fuel Level";
+NSString * const ACFuelLevelStateMenuName = @"Fuel Level State";
+NSString * const ACFuelRangeMenuName = @"Fuel Range";
+NSString * const ACGPSMenuName = @"GPS";
+NSString * const ACHeadLampStatusMenuName = @"Head Lamp Status";
+NSString * const ACInstantFuelConsumptionMenuName = @"Instant Fuel Consumption";
+NSString * const ACMyKeyMenuName = @"MyKey";
+NSString * const ACOdometerMenuName = @"Odometer";
+NSString * const ACPRNDLMenuName = @"PRNDL";
+NSString * const ACRPMMenuName = @"RPM";
+NSString * const ACSpeedMenuName = @"Speed";
+NSString * const ACSteeringWheelAngleMenuName = @"Steering Wheel Angle";
+NSString * const ACTirePressureMenuName = @"Tire Pressure";
+NSString * const ACTurnSignalMenuName = @"Turn Signal";
+NSString * const ACVINMenuName = @"VIN";
+NSString * const ACWiperStatusMenuName = @"Wiper Status";
+
#pragma mark - SDL Image Names
-NSString * const ExampleAppLogoName = @"sdl_logo_green";
-NSString * const CarIconImageName = @"car_icon";
-NSString * const LaptopIconImageName = @"laptop_icon";
-NSString * const WheelIconImageName = @"wheel_icon";
-NSString * const SpeakBWIconImageName = @"speak";
+NSString * const AlertBWIconName = @"alert";
NSString * const CarBWIconImageName = @"car";
+NSString * const ExampleAppLogoName = @"sdl_logo_green";
NSString * const MenuBWIconImageName = @"choice_set";
-NSString * const PhoneBWIconImageName = @"phone";
NSString * const MicrophoneBWIconImageName = @"microphone";
+NSString * const PhoneBWIconImageName = @"phone";
+NSString * const SpeakBWIconImageName = @"speak";
+NSString * const ToggleOffBWIconName = @"toggle_off";
+NSString * const ToggleOnBWIconName = @"toggle_on";
#pragma mark - SDL App Name in Different Languages
NSString * const ExampleAppNameSpanish = @"SDL Aplicación de ejemplo";
diff --git a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Contents.json b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Contents.json
index 997a0f138..997a0f138 100644
--- a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Contents.json
diff --git a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x-1.png b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@2x-1.png
index 96eb6cf4e..96eb6cf4e 100644
--- a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x-1.png
+++ b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@2x-1.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png
index 96eb6cf4e..96eb6cf4e 100644
--- a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png
+++ b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png
index 148b6b035..148b6b035 100644
--- a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png
+++ b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png
index 96c19098b..96c19098b 100644
--- a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png
+++ b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png
index cb4b2fca3..cb4b2fca3 100644
--- a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png
+++ b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png
index ee66223a7..ee66223a7 100644
--- a/SmartDeviceLink_Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png
+++ b/Example Apps/Shared/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/Contents.json b/Example Apps/Shared/Images.xcassets/Contents.json
index da4a164c9..da4a164c9 100644
--- a/SmartDeviceLink_Example/Images.xcassets/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/Contents.json
diff --git a/SmartDeviceLink_Example/Images.xcassets/car_icon.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/alert.imageset/Contents.json
index 6e2269ebd..402889e26 100644
--- a/SmartDeviceLink_Example/Images.xcassets/car_icon.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/alert.imageset/Contents.json
@@ -2,7 +2,7 @@
"images" : [
{
"idiom" : "universal",
- "filename" : "car.png",
+ "filename" : "alert.png",
"scale" : "1x"
},
{
diff --git a/Example Apps/Shared/Images.xcassets/alert.imageset/alert.png b/Example Apps/Shared/Images.xcassets/alert.imageset/alert.png
new file mode 100644
index 000000000..f7f732fcf
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/alert.imageset/alert.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/car.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/car.imageset/Contents.json
index da6fe9437..da6fe9437 100644
--- a/SmartDeviceLink_Example/Images.xcassets/car.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/car.imageset/Contents.json
diff --git a/SmartDeviceLink_Example/Images.xcassets/car.imageset/iconmonstr-car-1-64.png b/Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-64.png
index c95eaa035..c95eaa035 100644
--- a/SmartDeviceLink_Example/Images.xcassets/car.imageset/iconmonstr-car-1-64.png
+++ b/Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-64.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/choice_set.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/choice_set.imageset/Contents.json
index e784269b3..e784269b3 100644
--- a/SmartDeviceLink_Example/Images.xcassets/choice_set.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/choice_set.imageset/Contents.json
diff --git a/SmartDeviceLink_Example/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png b/Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png
index 23a0aa481..23a0aa481 100644
--- a/SmartDeviceLink_Example/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png
+++ b/Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/microphone.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/microphone.imageset/Contents.json
index 4620dff89..4620dff89 100644
--- a/SmartDeviceLink_Example/Images.xcassets/microphone.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/microphone.imageset/Contents.json
diff --git a/SmartDeviceLink_Example/Images.xcassets/microphone.imageset/microphone.png b/Example Apps/Shared/Images.xcassets/microphone.imageset/microphone.png
index 8ccae2bcb..8ccae2bcb 100644
--- a/SmartDeviceLink_Example/Images.xcassets/microphone.imageset/microphone.png
+++ b/Example Apps/Shared/Images.xcassets/microphone.imageset/microphone.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/phone.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/phone.imageset/Contents.json
index feb2dff17..feb2dff17 100644
--- a/SmartDeviceLink_Example/Images.xcassets/phone.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/phone.imageset/Contents.json
diff --git a/SmartDeviceLink_Example/Images.xcassets/phone.imageset/phone.png b/Example Apps/Shared/Images.xcassets/phone.imageset/phone.png
index 7c7eff383..7c7eff383 100644
--- a/SmartDeviceLink_Example/Images.xcassets/phone.imageset/phone.png
+++ b/Example Apps/Shared/Images.xcassets/phone.imageset/phone.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/Contents.json
index 63b272052..63b272052 100644
--- a/SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/Contents.json
diff --git a/SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green.png b/Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green.png
index 0e0a373d1..0e0a373d1 100644
--- a/SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green.png
+++ b/Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@2x.png b/Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@2x.png
index d79b86eb1..d79b86eb1 100644
--- a/SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@2x.png
+++ b/Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@2x.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@3x.png b/Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@3x.png
index e1e6bd476..e1e6bd476 100644
--- a/SmartDeviceLink_Example/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@3x.png
+++ b/Example Apps/Shared/Images.xcassets/sdl_logo_green.imageset/sdl_logo_green@3x.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/speak.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/speak.imageset/Contents.json
index 38dbeb7ed..38dbeb7ed 100644
--- a/SmartDeviceLink_Example/Images.xcassets/speak.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/speak.imageset/Contents.json
diff --git a/SmartDeviceLink_Example/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png b/Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png
index 9404acfe5..9404acfe5 100644
--- a/SmartDeviceLink_Example/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png
+++ b/Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json
new file mode 100644
index 000000000..38e2b195b
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "toggle_off.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/Example Apps/Shared/Images.xcassets/toggle_off.imageset/toggle_off.png b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/toggle_off.png
new file mode 100644
index 000000000..2e165a6fc
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/toggle_off.png
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/laptop_icon.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/Contents.json
index 616325375..695bb6a56 100644
--- a/SmartDeviceLink_Example/Images.xcassets/laptop_icon.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/Contents.json
@@ -2,7 +2,7 @@
"images" : [
{
"idiom" : "universal",
- "filename" : "screen.png",
+ "filename" : "toggle_on.png",
"scale" : "1x"
},
{
diff --git a/Example Apps/Shared/Images.xcassets/toggle_on.imageset/toggle_on.png b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/toggle_on.png
new file mode 100644
index 000000000..eb43d718b
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/toggle_on.png
Binary files differ
diff --git a/README.md b/README.md
index 5cc36d988..bfb1e4965 100644
--- a/README.md
+++ b/README.md
@@ -29,22 +29,20 @@ The mobile library component of SDL is meant to run on the end user’s smart-de
## SDL iOS
-We're still working on creating documentation for each of these individual repositories, but in the meantime, you can find more information about SmartDeviceLink [on the SDL Core README](https://github.com/smartdevicelink/sdl_core/blob/master/README.md) and [on Genivi](http://projects.genivi.org/smartdevicelink/about).
+We're still working on creating documentation for each of these individual repositories, but in the meantime, you can find more information about SmartDeviceLink [on the website](https://www.smartdevicelink.com).
See the [changelog](https://github.com/smartdevicelink/sdl_ios/blob/master/CHANGELOG.md) for release notes. This project uses [Semantic Versioning](http://semver.org/).
-See the [roadmap](https://github.com/smartdevicelink/sdl_ios/wiki/Roadmap) to see what we have planned for future versions.
-
### Installing
##### Cocoapods
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.0'`. Then run `pod install` inside your terminal. With Cocoapods, we support iOS 8.0+.
+In your podfile, you want to add `pod 'SmartDeviceLink', '~> 6.1'`. 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.0'`. Then run `pod install` in your terminal.
+If you are building a Swift app, then add this instead `pod 'SmartDeviceLink/Swift', '~> 6.1'`. Then run `pod install` in your terminal.
##### Carthage
@@ -79,8 +77,11 @@ If you see a bug, please post an issue on the appropriate repository. Please see
### SDL iOS Getting Started
+#### Example Apps
+To use the example apps, you can use `pod try SmartDeviceLink`, alternately, you can clone or download the project, but you must then also retrieve the submodules by running `git submodule init` and `git submodule update` in your terminal while in the main directory of the project.
+
#### Other Installation Requirements
-You may want to build the [sdl_core project](https://github.com/smartdevicelink/sdl_core) to be able to see your application connecting if you don't have an iAP enabled head unit to test.
+You can connect your application with [manticore](https://smartdevicelink.com/resources/manticore/) while running in TCP debug mode in order to test. For more information, [see the guildes](https://smartdevicelink.com/en/guides/iOS/getting-started/connecting-to-an-infotainment-system/).
#### Enabling Background Capabilities
iOS 5 introduced the capability for an iOS application to maintain a connection to an external accessory while the application is in the background. This capability must be explicitly enabled for your application.
@@ -130,13 +131,6 @@ Your application must support a set of smartdevicelink protocol strings in order
</array>
```
-#### Lock Screen Support
-If you used CocoaPods to install the SDL SDK, you must complete the following steps to add the default lock screen resources to your project:
-
-1. Select your application's build target, go to Build Phases, Copy Bundle Resources.
-2. Then in the Navigator window of Xcode, go to Target's Support Files, Pods-YourProjectName, and drag and drop the SmartDeviceLink.bundle file into Copy Bundle Resources.
-3. After the bundle is dropped into Copy Bundle Resources check "copy items if need" from the popup box and click "Finish."
-
#### Continue Integrating
Go through the [guide documentation](https://smartdevicelink.com/en/guides/iOS/getting-started/integration-basics/) to get started setting up your app to work with SDL!
diff --git a/SmartDeviceLink-iOS.podspec b/SmartDeviceLink-iOS.podspec
index 4e7c70542..6d39a6fbb 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.0.2"
+s.version = "6.1.0"
s.summary = "Connect your app with cars!"
s.homepage = "https://github.com/smartdevicelink/SmartDeviceLink-iOS"
s.license = { :type => "New BSD", :file => "LICENSE" }
@@ -34,8 +34,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLAppInfo.h',
'SmartDeviceLink/SDLAppInterfaceUnregisteredReason.h',
'SmartDeviceLink/SDLArtwork.h',
+'SmartDeviceLink/SDLAudioControlData.h',
+'SmartDeviceLink/SDLAudioControlCapabilities.h',
'SmartDeviceLink/SDLAudioPassThruCapabilities.h',
'SmartDeviceLink/SDLAudioStreamingState.h',
+'SmartDeviceLink/SDLAudioStreamingIndicator.h',
'SmartDeviceLink/SDLAudioStreamManager.h',
'SmartDeviceLink/SDLAudioStreamManagerDelegate.h',
'SmartDeviceLink/SDLStreamingAudioManagerType.h',
@@ -54,6 +57,9 @@ ss.public_header_files = [
'SmartDeviceLink/SDLChangeRegistrationResponse.h',
'SmartDeviceLink/SDLCharacterSet.h',
'SmartDeviceLink/SDLChoice.h',
+'SmartDeviceLink/SDLChoiceCell.h',
+'SmartDeviceLink/SDLChoiceSet.h',
+'SmartDeviceLink/SDLChoiceSetDelegate.h',
'SmartDeviceLink/SDLClimateControlCapabilities.h',
'SmartDeviceLink/SDLClimateControlData.h',
'SmartDeviceLink/SDLClusterModeStatus.h',
@@ -83,23 +89,30 @@ ss.public_header_files = [
'SmartDeviceLink/SDLDIDResult.h',
'SmartDeviceLink/SDLDimension.h',
'SmartDeviceLink/SDLDisplayCapabilities.h',
+'SmartDeviceLink/SDLDisplayMode.h',
'SmartDeviceLink/SDLDisplayType.h',
+'SmartDeviceLink/SDLDistanceUnit.h',
'SmartDeviceLink/SDLDriverDistractionState.h',
'SmartDeviceLink/SDLECallConfirmationStatus.h',
'SmartDeviceLink/SDLECallInfo.h',
+'SmartDeviceLink/SDLElectronicParkBrakeStatus.h',
'SmartDeviceLink/SDLEmergencyEvent.h',
'SmartDeviceLink/SDLEmergencyEventType.h',
'SmartDeviceLink/SDLEncodedSyncPData.h',
'SmartDeviceLink/SDLEncodedSyncPDataResponse.h',
'SmartDeviceLink/SDLEndAudioPassThru.h',
'SmartDeviceLink/SDLEndAudioPassThruResponse.h',
+'SmartDeviceLink/SDLEqualizerSettings.h',
'SmartDeviceLink/SDLEnum.h',
'SmartDeviceLink/SDLErrorConstants.h',
'SmartDeviceLink/SDLFile.h',
'SmartDeviceLink/SDLFileManager.h',
+'SmartDeviceLink/SDLFileManagerConfiguration.h',
'SmartDeviceLink/SDLFileManagerConstants.h',
'SmartDeviceLink/SDLFileType.h',
'SmartDeviceLink/SDLFuelCutoffStatus.h',
+'SmartDeviceLink/SDLFuelRange.h',
+'SmartDeviceLink/SDLFuelType.h',
'SmartDeviceLink/SDLGenericResponse.h',
'SmartDeviceLink/SDLGetDTCs.h',
'SmartDeviceLink/SDLGetInteriorVehicleData.h',
@@ -118,6 +131,8 @@ ss.public_header_files = [
'SmartDeviceLink/SDLHMICapabilities.h',
'SmartDeviceLink/SDLHMILevel.h',
'SmartDeviceLink/SDLHMIPermissions.h',
+'SmartDeviceLink/SDLHMISettingsControlCapabilities.h',
+'SmartDeviceLink/SDLHMISettingsControlData.h',
'SmartDeviceLink/SDLHMIZoneCapabilities.h',
'SmartDeviceLink/SDLIgnitionStableStatus.h',
'SmartDeviceLink/SDLIgnitionStatus.h',
@@ -127,6 +142,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLImageResolution.h',
'SmartDeviceLink/SDLImageType.h',
'SmartDeviceLink/SDLInteractionMode.h',
+'SmartDeviceLink/SDLKeyboardDelegate.h',
'SmartDeviceLink/SDLKeyboardEvent.h',
'SmartDeviceLink/SDLKeyboardLayout.h',
'SmartDeviceLink/SDLKeyboardProperties.h',
@@ -135,6 +151,12 @@ ss.public_header_files = [
'SmartDeviceLink/SDLLayoutMode.h',
'SmartDeviceLink/SDLLifecycleConfiguration.h',
'SmartDeviceLink/SDLLifecycleConfigurationUpdate.h',
+'SmartDeviceLink/SDLLightCapabilities.h',
+'SmartDeviceLink/SDLLightControlCapabilities.h',
+'SmartDeviceLink/SDLLightControlData.h',
+'SmartDeviceLink/SDLLightName.h',
+'SmartDeviceLink/SDLLightState.h',
+'SmartDeviceLink/SDLLightStatus.h',
'SmartDeviceLink/SDLListFiles.h',
'SmartDeviceLink/SDLListFilesResponse.h',
'SmartDeviceLink/SDLLocationCoordinate.h',
@@ -152,6 +174,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLLogTargetAppleSystemLog.h',
'SmartDeviceLink/SDLLogTargetFile.h',
'SmartDeviceLink/SDLLogTargetOSLog.h',
+'SmartDeviceLink/SDLMassageCushionFirmness.h',
+'SmartDeviceLink/SDLMassageModeData.h',
+'SmartDeviceLink/SDLMassageCushion.h',
+'SmartDeviceLink/SDLMassageMode.h',
+'SmartDeviceLink/SDLMassageZone.h',
'SmartDeviceLink/SDLMacros.h',
'SmartDeviceLink/SDLMaintenanceModeStatus.h',
'SmartDeviceLink/SDLManager.h',
@@ -181,6 +208,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLOnLanguageChange.h',
'SmartDeviceLink/SDLOnLockScreenStatus.h',
'SmartDeviceLink/SDLOnPermissionsChange.h',
+'SmartDeviceLink/SDLOnRCStatus.h',
'SmartDeviceLink/SDLOnSyncPData.h',
'SmartDeviceLink/SDLOnSystemRequest.h',
'SmartDeviceLink/SDLOnTBTClientState.h',
@@ -211,6 +239,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLRadioControlCapabilities.h',
'SmartDeviceLink/SDLRadioControlData.h',
'SmartDeviceLink/SDLRadioState.h',
+'SmartDeviceLink/SDLRDSData.h',
'SmartDeviceLink/SDLReadDID.h',
'SmartDeviceLink/SDLRectangle.h',
'SmartDeviceLink/SDLReadDIDResponse.h',
@@ -222,7 +251,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLResetGlobalProperties.h',
'SmartDeviceLink/SDLResetGlobalPropertiesResponse.h',
'SmartDeviceLink/SDLResult.h',
-'SmartDeviceLink/SDLRDSData.h',
+'SmartDeviceLink/SDLRGBColor.h',
'SmartDeviceLink/SDLRPCMessage.h',
'SmartDeviceLink/SDLRPCMessageType.h',
'SmartDeviceLink/SDLRPCNotification.h',
@@ -236,6 +265,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLScreenManager.h',
'SmartDeviceLink/SDLScrollableMessage.h',
'SmartDeviceLink/SDLScrollableMessageResponse.h',
+'SmartDeviceLink/SDLSeatControlCapabilities.h',
+'SmartDeviceLink/SDLSeatControlData.h',
+'SmartDeviceLink/SDLSeatMemoryAction.h',
+'SmartDeviceLink/SDLSeatMemoryActionType.h',
+'SmartDeviceLink/SDLSupportedSeat.h',
'SmartDeviceLink/SDLSecurityType.h',
'SmartDeviceLink/SDLSendHapticData.h',
'SmartDeviceLink/SDLSendHapticDataResponse.h',
@@ -256,6 +290,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLShowConstantTBTResponse.h',
'SmartDeviceLink/SDLShowResponse.h',
'SmartDeviceLink/SDLSingleTireStatus.h',
+'SmartDeviceLink/SDLSISData.h',
'SmartDeviceLink/SDLSlider.h',
'SmartDeviceLink/SDLSliderResponse.h',
'SmartDeviceLink/SDLSoftButton.h',
@@ -267,6 +302,8 @@ ss.public_header_files = [
'SmartDeviceLink/SDLSpeakResponse.h',
'SmartDeviceLink/SDLSpeechCapabilities.h',
'SmartDeviceLink/SDLStartTime.h',
+'SmartDeviceLink/SDLStaticIconName.h',
+'SmartDeviceLink/SDLStationIDNumber.h',
'SmartDeviceLink/SDLStreamingMediaConfiguration.h',
'SmartDeviceLink/SDLStreamingMediaManager.h',
'SmartDeviceLink/SDLStreamingMediaManagerConstants.h',
@@ -288,6 +325,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLTBTState.h',
'SmartDeviceLink/SDLTemperature.h',
'SmartDeviceLink/SDLTemperatureUnit.h',
+'SmartDeviceLink/SDLTemplateColorScheme.h',
'SmartDeviceLink/SDLTextAlignment.h',
'SmartDeviceLink/SDLTextField.h',
'SmartDeviceLink/SDLTextFieldName.h',
@@ -300,9 +338,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLTouchManager.h',
'SmartDeviceLink/SDLTouchManagerDelegate.h',
'SmartDeviceLink/SDLTouchType.h',
+'SmartDeviceLink/SDLTPMS.h',
'SmartDeviceLink/SDLTriggerSource.h',
'SmartDeviceLink/SDLTTSChunk.h',
'SmartDeviceLink/SDLTurn.h',
+'SmartDeviceLink/SDLTurnSignal.h',
'SmartDeviceLink/SDLUnregisterAppInterface.h',
'SmartDeviceLink/SDLUnregisterAppInterfaceResponse.h',
'SmartDeviceLink/SDLUnsubscribeButton.h',
@@ -327,6 +367,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLVideoStreamingCodec.h',
'SmartDeviceLink/SDLVideoStreamingFormat.h',
'SmartDeviceLink/SDLVideoStreamingProtocol.h',
+'SmartDeviceLink/SDLVideoStreamingState.h',
'SmartDeviceLink/SDLVoiceCommand.h',
'SmartDeviceLink/SDLVrCapabilities.h',
'SmartDeviceLink/SDLVrHelpItem.h',
diff --git a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj
index 8fbda1918..7937c15bf 100644
--- a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj
+++ b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj
@@ -270,6 +270,84 @@
1E5AD0941F20BEAD0029B8AF /* SDLSetInteriorVehicleDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5AD0921F20BEAD0029B8AF /* SDLSetInteriorVehicleDataResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
1E5AD0951F20BEAD0029B8AF /* SDLSetInteriorVehicleDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E5AD0931F20BEAD0029B8AF /* SDLSetInteriorVehicleDataResponse.m */; };
1E5AD0981F20C0FB0029B8AF /* SDLOnInteriorVehicleData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5AD0961F20C0FB0029B8AF /* SDLOnInteriorVehicleData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1E89B0DE2031636000A47992 /* SDLSeatControlDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E89B0DD2031636000A47992 /* SDLSeatControlDataSpec.m */; };
+ 1E89B0E2203196B800A47992 /* SDLSeatControlCapabilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E89B0E1203196B800A47992 /* SDLSeatControlCapabilitiesSpec.m */; };
+ 1EAA470B2032BAE5000FE74B /* SDLOnRCStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA47092032BAE5000FE74B /* SDLOnRCStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA470C2032BAE5000FE74B /* SDLOnRCStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA470A2032BAE5000FE74B /* SDLOnRCStatus.m */; };
+ 1EAA470E2032BF1D000FE74B /* SDLOnRCStatusSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA470D2032BF1D000FE74B /* SDLOnRCStatusSpec.m */; };
+ 1EAA47112033FE80000FE74B /* SDLStationIDNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA470F2033FE80000FE74B /* SDLStationIDNumber.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA47122033FE80000FE74B /* SDLStationIDNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47102033FE80000FE74B /* SDLStationIDNumber.m */; };
+ 1EAA4719203406B2000FE74B /* SDLSISData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA4717203406B1000FE74B /* SDLSISData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA471A203406B2000FE74B /* SDLSISData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA4718203406B1000FE74B /* SDLSISData.m */; };
+ 1EAA471D203410BB000FE74B /* SDLAudioControlCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA471B203410BB000FE74B /* SDLAudioControlCapabilities.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA471E203410BB000FE74B /* SDLAudioControlCapabilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA471C203410BB000FE74B /* SDLAudioControlCapabilities.m */; };
+ 1EAA4725203416D3000FE74B /* SDLEqualizerSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA4723203416D3000FE74B /* SDLEqualizerSettings.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA4726203416D3000FE74B /* SDLEqualizerSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA4724203416D3000FE74B /* SDLEqualizerSettings.m */; };
+ 1EAA47292034388D000FE74B /* SDLAudioControlData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA47272034388D000FE74B /* SDLAudioControlData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA472A2034388D000FE74B /* SDLAudioControlData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47282034388D000FE74B /* SDLAudioControlData.m */; };
+ 1EAA472D20344108000FE74B /* SDLLightStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA472B20344108000FE74B /* SDLLightStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA472E20344108000FE74B /* SDLLightStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA472C20344108000FE74B /* SDLLightStatus.m */; };
+ 1EAA4731203442C0000FE74B /* SDLLightName.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA472F203442C0000FE74B /* SDLLightName.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA4732203442C0000FE74B /* SDLLightName.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA4730203442C0000FE74B /* SDLLightName.m */; };
+ 1EAA473920345B7A000FE74B /* SDLLightCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA473720345B7A000FE74B /* SDLLightCapabilities.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA473A20345B7A000FE74B /* SDLLightCapabilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA473820345B7A000FE74B /* SDLLightCapabilities.m */; };
+ 1EAA473D203554B5000FE74B /* SDLLightState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA473B203554B5000FE74B /* SDLLightState.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA473E203554B5000FE74B /* SDLLightState.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA473C203554B5000FE74B /* SDLLightState.m */; };
+ 1EAA474120355FF3000FE74B /* SDLLightControlCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA473F20355FF3000FE74B /* SDLLightControlCapabilities.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA474220355FF3000FE74B /* SDLLightControlCapabilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA474020355FF3000FE74B /* SDLLightControlCapabilities.m */; };
+ 1EAA47452035623B000FE74B /* SDLLightControlData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA47432035623B000FE74B /* SDLLightControlData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA47462035623B000FE74B /* SDLLightControlData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47442035623B000FE74B /* SDLLightControlData.m */; };
+ 1EAA4749203567FA000FE74B /* SDLHMISettingsControlCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA4747203567FA000FE74B /* SDLHMISettingsControlCapabilities.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA474A203567FA000FE74B /* SDLHMISettingsControlCapabilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA4748203567FA000FE74B /* SDLHMISettingsControlCapabilities.m */; };
+ 1EAA474D20356B2D000FE74B /* SDLDisplayMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA474B20356B2D000FE74B /* SDLDisplayMode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA474E20356B2D000FE74B /* SDLDisplayMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA474C20356B2D000FE74B /* SDLDisplayMode.m */; };
+ 1EAA475120356CD2000FE74B /* SDLDistanceUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA474F20356CD2000FE74B /* SDLDistanceUnit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA475220356CD2000FE74B /* SDLDistanceUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA475020356CD2000FE74B /* SDLDistanceUnit.m */; };
+ 1EAA4755203583BC000FE74B /* SDLHMISettingsControlData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA4753203583BC000FE74B /* SDLHMISettingsControlData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EAA4756203583BC000FE74B /* SDLHMISettingsControlData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA4754203583BC000FE74B /* SDLHMISettingsControlData.m */; };
+ 1EAA47582035AFD9000FE74B /* SDLHMISettingsControlDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47572035AFD9000FE74B /* SDLHMISettingsControlDataSpec.m */; };
+ 1EAA475E2035B177000FE74B /* SDLDisplayModeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA475D2035B177000FE74B /* SDLDisplayModeSpec.m */; };
+ 1EAA47622035B1AE000FE74B /* SDLDistanceUnitSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47612035B1AE000FE74B /* SDLDistanceUnitSpec.m */; };
+ 1EAA47642035B231000FE74B /* SDLHMISettingsControlCapabilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47632035B231000FE74B /* SDLHMISettingsControlCapabilitiesSpec.m */; };
+ 1EAA47662035B8D3000FE74B /* SDLLightControlDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47652035B8D3000FE74B /* SDLLightControlDataSpec.m */; };
+ 1EAA476820369BCF000FE74B /* SDLLightStateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA476720369BCF000FE74B /* SDLLightStateSpec.m */; };
+ 1EAA476A20369ECC000FE74B /* SDLLightControlCapabilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA476920369ECC000FE74B /* SDLLightControlCapabilitiesSpec.m */; };
+ 1EAA476C2036A52F000FE74B /* SDLLightCapabilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA476B2036A52F000FE74B /* SDLLightCapabilitiesSpec.m */; };
+ 1EAA47702036AE89000FE74B /* SDLLightStatusSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA476F2036AE89000FE74B /* SDLLightStatusSpec.m */; };
+ 1EAA47722036AEF5000FE74B /* SDLLightNameSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47712036AEF5000FE74B /* SDLLightNameSpec.m */; };
+ 1EAA47742036B31E000FE74B /* SDLAudioControlDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47732036B31E000FE74B /* SDLAudioControlDataSpec.m */; };
+ 1EAA47762036B847000FE74B /* SDLEqualizerSettingsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47752036B847000FE74B /* SDLEqualizerSettingsSpec.m */; };
+ 1EAA47782036BA74000FE74B /* SDLAudioControlCapabilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47772036BA74000FE74B /* SDLAudioControlCapabilitiesSpec.m */; };
+ 1EAA477A2036BD46000FE74B /* SDLSISDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47792036BD46000FE74B /* SDLSISDataSpec.m */; };
+ 1EAA47802036C2C9000FE74B /* SDLStationIDNumberSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA477F2036C2C9000FE74B /* SDLStationIDNumberSpec.m */; };
+ 1EB59C9F202D925500343A61 /* SDLMassageZone.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59C9D202D925500343A61 /* SDLMassageZone.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CA0202D925500343A61 /* SDLMassageZone.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59C9E202D925500343A61 /* SDLMassageZone.m */; };
+ 1EB59CA3202D92F600343A61 /* SDLMassageMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CA1202D92F600343A61 /* SDLMassageMode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CA4202D92F600343A61 /* SDLMassageMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CA2202D92F600343A61 /* SDLMassageMode.m */; };
+ 1EB59CA7202D946500343A61 /* SDLMassageModeData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CA5202D946500343A61 /* SDLMassageModeData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CA8202D946500343A61 /* SDLMassageModeData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CA6202D946500343A61 /* SDLMassageModeData.m */; };
+ 1EB59CAB202D96A200343A61 /* SDLMassageCushion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CA9202D96A200343A61 /* SDLMassageCushion.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CAC202D96A200343A61 /* SDLMassageCushion.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CAA202D96A200343A61 /* SDLMassageCushion.m */; };
+ 1EB59CAF202D97AC00343A61 /* SDLMassageCushionFirmness.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CAD202D97AC00343A61 /* SDLMassageCushionFirmness.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CB0202D97AC00343A61 /* SDLMassageCushionFirmness.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CAE202D97AC00343A61 /* SDLMassageCushionFirmness.m */; };
+ 1EB59CB3202D9B5F00343A61 /* SDLSeatMemoryActionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CB1202D9B5F00343A61 /* SDLSeatMemoryActionType.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CB4202D9B5F00343A61 /* SDLSeatMemoryActionType.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CB2202D9B5F00343A61 /* SDLSeatMemoryActionType.m */; };
+ 1EB59CB7202D9C8100343A61 /* SDLSeatMemoryAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CB5202D9C8100343A61 /* SDLSeatMemoryAction.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CB8202D9C8100343A61 /* SDLSeatMemoryAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CB6202D9C8100343A61 /* SDLSeatMemoryAction.m */; };
+ 1EB59CBB202DA1B400343A61 /* SDLSupportedSeat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CB9202DA1B400343A61 /* SDLSupportedSeat.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CBC202DA1B400343A61 /* SDLSupportedSeat.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CBA202DA1B400343A61 /* SDLSupportedSeat.m */; };
+ 1EB59CBF202DA26000343A61 /* SDLSeatControlData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CBD202DA26000343A61 /* SDLSeatControlData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CC0202DA26000343A61 /* SDLSeatControlData.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CBE202DA26000343A61 /* SDLSeatControlData.m */; };
+ 1EB59CC3202DB40400343A61 /* SDLSeatControlCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB59CC1202DB40400343A61 /* SDLSeatControlCapabilities.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1EB59CC4202DB40400343A61 /* SDLSeatControlCapabilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CC2202DB40400343A61 /* SDLSeatControlCapabilities.m */; };
+ 1EB59CC8202DC86A00343A61 /* SDLModuleTypeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CC7202DC86A00343A61 /* SDLModuleTypeSpec.m */; };
+ 1EB59CCA202DC8E300343A61 /* SDLMassageZoneSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CC9202DC8E300343A61 /* SDLMassageZoneSpec.m */; };
+ 1EB59CCE202DC97900343A61 /* SDLMassageCushionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CCD202DC97900343A61 /* SDLMassageCushionSpec.m */; };
+ 1EB59CD0202DC9F200343A61 /* SDLSupportedSeatSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CCF202DC9F200343A61 /* SDLSupportedSeatSpec.m */; };
+ 1EB59CD2202DCA9B00343A61 /* SDLMassageModeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CD1202DCA9B00343A61 /* SDLMassageModeSpec.m */; };
+ 1EB59CD4202DCAE900343A61 /* SDLMassageModeDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CD3202DCAE900343A61 /* SDLMassageModeDataSpec.m */; };
+ 1EB59CD8202DCCD500343A61 /* SDLMassageCushionFirmnessSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CD7202DCCD500343A61 /* SDLMassageCushionFirmnessSpec.m */; };
+ 1EB59CDA202DCEEC00343A61 /* SDLSeatMemoryActionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB59CD9202DCEEC00343A61 /* SDLSeatMemoryActionSpec.m */; };
1EE48E901F2F0EE700B98D08 /* SDLTemperatureUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE48E8E1F2F0EE700B98D08 /* SDLTemperatureUnit.h */; settings = {ATTRIBUTES = (Public, ); }; };
1EE48E911F2F0EE700B98D08 /* SDLTemperatureUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EE48E8F1F2F0EE700B98D08 /* SDLTemperatureUnit.m */; };
1EE8C4381F347C7300FDC2CF /* SDLRadioBandSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EE8C4371F347C7300FDC2CF /* SDLRadioBandSpec.m */; };
@@ -296,6 +374,9 @@
1FF7DABA1F75B2A800B46C30 /* SDLFocusableItemLocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF7DAB91F75B2A800B46C30 /* SDLFocusableItemLocator.h */; };
1FF7DABC1F75B2BF00B46C30 /* SDLFocusableItemLocator.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF7DABB1F75B2BF00B46C30 /* SDLFocusableItemLocator.m */; };
1FF7DAC01F75CF6C00B46C30 /* SDLHapticManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF7DABF1F75CF6C00B46C30 /* SDLHapticManagerSpec.m */; };
+ 2BF2F84F20ED004000A26EF2 /* SDLAudioStreamingIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BF2F84D20ED004000A26EF2 /* SDLAudioStreamingIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 2BF2F85020ED004000A26EF2 /* SDLAudioStreamingIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BF2F84E20ED004000A26EF2 /* SDLAudioStreamingIndicator.m */; };
+ 2BF2F85220ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BF2F85120ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m */; };
332A914F1CED9CC60043824C /* SDLAppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 332A913D1CED87F80043824C /* SDLAppInfo.m */; };
332A91501CED9CF10043824C /* SDLAppInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 332A913C1CED87F80043824C /* SDLAppInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D00AC671F140F0A004000D9 /* SDLSystemCapabilityType.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D00AC651F140F0A004000D9 /* SDLSystemCapabilityType.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -310,11 +391,8 @@
5D00AC781F15283E004000D9 /* SDLNavigationCapability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D00AC761F15283E004000D9 /* SDLNavigationCapability.m */; };
5D00AC7B1F15287E004000D9 /* SDLPhoneCapability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D00AC791F15287E004000D9 /* SDLPhoneCapability.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D00AC7C1F15287E004000D9 /* SDLPhoneCapability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D00AC7A1F15287E004000D9 /* SDLPhoneCapability.m */; };
- 5D0218F61A8E79C400D1BF62 /* ConnectionTCPTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0218F51A8E79C400D1BF62 /* ConnectionTCPTableViewController.m */; };
- 5D0218F91A8E7A7300D1BF62 /* ConnectionTCPTableViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D0218F71A8E7A7300D1BF62 /* ConnectionTCPTableViewController.storyboard */; };
- 5D0218FC1A8E7E1700D1BF62 /* ConnectionContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0218FB1A8E7E1700D1BF62 /* ConnectionContainerViewController.m */; };
- 5D0218FF1A8E9E0D00D1BF62 /* ConnectionIAPTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0218FE1A8E9E0D00D1BF62 /* ConnectionIAPTableViewController.m */; };
- 5D0219051A8E9F6D00D1BF62 /* ConnectionIAPTableViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D0219031A8E9F6D00D1BF62 /* ConnectionIAPTableViewController.storyboard */; };
+ 5D019276214994AC003500F6 /* NSMutableArray+Safe.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D019274214994AC003500F6 /* NSMutableArray+Safe.h */; };
+ 5D019277214994AC003500F6 /* NSMutableArray+Safe.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D019275214994AC003500F6 /* NSMutableArray+Safe.m */; };
5D07C02D2044AC9100D1ECDC /* SDLSequentialRPCRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D07C02B2044AC9000D1ECDC /* SDLSequentialRPCRequestOperation.h */; };
5D07C02E2044AC9100D1ECDC /* SDLSequentialRPCRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D07C02C2044AC9100D1ECDC /* SDLSequentialRPCRequestOperation.m */; };
5D07C0312044AD0C00D1ECDC /* SDLAsynchronousRPCRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D07C02F2044AD0C00D1ECDC /* SDLAsynchronousRPCRequestOperation.h */; };
@@ -333,6 +411,12 @@
5D0A9F971F1559EC00CC80DD /* SDLSystemCapabilitySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0A9F961F1559EC00CC80DD /* SDLSystemCapabilitySpec.m */; };
5D0A9F9A1F15636800CC80DD /* SDLGetSystemCapabilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0A9F991F15636800CC80DD /* SDLGetSystemCapabilitiesSpec.m */; };
5D0A9F9C1F1565EB00CC80DD /* SDLGetSystemCapabilityResponseSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0A9F9B1F1565EB00CC80DD /* SDLGetSystemCapabilityResponseSpec.m */; };
+ 5D0C29FC20D93D8C008B56CD /* SDLVideoStreamingState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D0C29FA20D93D8C008B56CD /* SDLVideoStreamingState.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5D0C29FD20D93D8C008B56CD /* SDLVideoStreamingState.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0C29FB20D93D8C008B56CD /* SDLVideoStreamingState.m */; };
+ 5D0C2A0020D9479B008B56CD /* SDLStreamingVideoLifecycleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D0C29FE20D9479B008B56CD /* SDLStreamingVideoLifecycleManager.h */; };
+ 5D0C2A0120D9479B008B56CD /* SDLStreamingVideoLifecycleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0C29FF20D9479B008B56CD /* SDLStreamingVideoLifecycleManager.m */; };
+ 5D0C2A0420D947AB008B56CD /* SDLStreamingAudioLifecycleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D0C2A0220D947AB008B56CD /* SDLStreamingAudioLifecycleManager.h */; };
+ 5D0C2A0520D947AB008B56CD /* SDLStreamingAudioLifecycleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0C2A0320D947AB008B56CD /* SDLStreamingAudioLifecycleManager.m */; };
5D1654561D3E754F00554D93 /* SDLLifecycleManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1654551D3E754F00554D93 /* SDLLifecycleManagerSpec.m */; };
5D16545A1D3E7A1600554D93 /* SDLLifecycleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D1654581D3E7A1600554D93 /* SDLLifecycleManager.h */; };
5D16545B1D3E7A1600554D93 /* SDLLifecycleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1654591D3E7A1600554D93 /* SDLLifecycleManager.m */; };
@@ -344,6 +428,52 @@
5D1665CD1CF8CA8A00CC4CA1 /* SDLPermissionConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D1665CC1CF8CA8A00CC4CA1 /* SDLPermissionConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D1BF6AF204742FB00D36881 /* SDLDisplayCapabilities+ShowManagerExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D1BF6AD204742FB00D36881 /* SDLDisplayCapabilities+ShowManagerExtensions.h */; };
5D1BF6B0204742FB00D36881 /* SDLDisplayCapabilities+ShowManagerExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1BF6AE204742FB00D36881 /* SDLDisplayCapabilities+ShowManagerExtensions.m */; };
+ 5D1FF28D213044F9000EB9B4 /* AlertManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF28C213044F9000EB9B4 /* AlertManager.m */; };
+ 5D1FF29C21304515000EB9B4 /* PerformInteractionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF29121304513000EB9B4 /* PerformInteractionManager.m */; };
+ 5D1FF29D21304515000EB9B4 /* RPCPermissionsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF29221304513000EB9B4 /* RPCPermissionsManager.m */; };
+ 5D1FF29E21304515000EB9B4 /* MenuManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF29421304513000EB9B4 /* MenuManager.m */; };
+ 5D1FF29F21304515000EB9B4 /* ProxyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF29621304514000EB9B4 /* ProxyManager.m */; };
+ 5D1FF2A021304515000EB9B4 /* AudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF29721304514000EB9B4 /* AudioManager.m */; };
+ 5D1FF2A121304515000EB9B4 /* VehicleDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF29921304514000EB9B4 /* VehicleDataManager.m */; };
+ 5D1FF2A221304515000EB9B4 /* ButtonManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF29B21304515000EB9B4 /* ButtonManager.m */; };
+ 5D1FF2A721304531000EB9B4 /* Preferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2A421304531000EB9B4 /* Preferences.m */; };
+ 5D1FF2A821304531000EB9B4 /* TextValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2A621304531000EB9B4 /* TextValidator.m */; };
+ 5D1FF2AF21304568000EB9B4 /* ConnectionTCPTableViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2A921304567000EB9B4 /* ConnectionTCPTableViewController.storyboard */; };
+ 5D1FF2B021304568000EB9B4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2AB21304567000EB9B4 /* Main.storyboard */; };
+ 5D1FF2B121304568000EB9B4 /* ConnectionIAPTableViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2AD21304567000EB9B4 /* ConnectionIAPTableViewController.storyboard */; };
+ 5D1FF2B821304581000EB9B4 /* ConnectionIAPTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2B421304580000EB9B4 /* ConnectionIAPTableViewController.m */; };
+ 5D1FF2B921304581000EB9B4 /* ConnectionContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2B521304581000EB9B4 /* ConnectionContainerViewController.m */; };
+ 5D1FF2BA21304581000EB9B4 /* ConnectionTCPTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2B621304581000EB9B4 /* ConnectionTCPTableViewController.m */; };
+ 5D1FF2BF21304598000EB9B4 /* ConnectionAnimatedTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2BC21304598000EB9B4 /* ConnectionAnimatedTransition.m */; };
+ 5D1FF2C021304598000EB9B4 /* ConnectionTransitionContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2BE21304598000EB9B4 /* ConnectionTransitionContext.m */; };
+ 5D1FF2C3213045EB000EB9B4 /* AppConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2C2213045EB000EB9B4 /* AppConstants.m */; };
+ 5D1FF2C4213045EB000EB9B4 /* AppConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2C2213045EB000EB9B4 /* AppConstants.m */; };
+ 5D1FF2C6213045F2000EB9B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2C5213045F1000EB9B4 /* Images.xcassets */; };
+ 5D1FF2C7213045F2000EB9B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2C5213045F1000EB9B4 /* Images.xcassets */; };
+ 5D1FF2CA2130463F000EB9B4 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2C92130463F000EB9B4 /* AppDelegate.m */; };
+ 5D1FF2CC2130464E000EB9B4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2CB2130464D000EB9B4 /* main.m */; };
+ 5D1FF2CE21304654000EB9B4 /* SmartDeviceLink-Example-ObjC-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2CD21304654000EB9B4 /* SmartDeviceLink-Example-ObjC-Info.plist */; };
+ 5D1FF2D12130466D000EB9B4 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2CF2130466D000EB9B4 /* LaunchScreen.xib */; };
+ 5D1FF2DA21304746000EB9B4 /* ButtonManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2D221304745000EB9B4 /* ButtonManager.swift */; };
+ 5D1FF2DB21304746000EB9B4 /* ProxyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2D321304745000EB9B4 /* ProxyManager.swift */; };
+ 5D1FF2DC21304746000EB9B4 /* AlertManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2D421304746000EB9B4 /* AlertManager.swift */; };
+ 5D1FF2DD21304746000EB9B4 /* RPCPermissionsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2D521304746000EB9B4 /* RPCPermissionsManager.swift */; };
+ 5D1FF2DE21304746000EB9B4 /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2D621304746000EB9B4 /* AudioManager.swift */; };
+ 5D1FF2DF21304746000EB9B4 /* PerformInteractionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2D721304746000EB9B4 /* PerformInteractionManager.swift */; };
+ 5D1FF2E021304746000EB9B4 /* MenuManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2D821304746000EB9B4 /* MenuManager.swift */; };
+ 5D1FF2E121304746000EB9B4 /* VehicleDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2D921304746000EB9B4 /* VehicleDataManager.swift */; };
+ 5D1FF2E521304761000EB9B4 /* AppUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2E221304761000EB9B4 /* AppUserDefaults.swift */; };
+ 5D1FF2E621304761000EB9B4 /* Protocol+ProxyManagerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2E321304761000EB9B4 /* Protocol+ProxyManagerDelegate.swift */; };
+ 5D1FF2E721304761000EB9B4 /* TextValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2E421304761000EB9B4 /* TextValidator.swift */; };
+ 5D1FF2EB2130479C000EB9B4 /* ConnectionContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2E82130479C000EB9B4 /* ConnectionContainerViewController.swift */; };
+ 5D1FF2EC2130479C000EB9B4 /* ConnectionTCPTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2E92130479C000EB9B4 /* ConnectionTCPTableViewController.swift */; };
+ 5D1FF2ED2130479C000EB9B4 /* ConnectionIAPTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2EA2130479C000EB9B4 /* ConnectionIAPTableViewController.swift */; };
+ 5D1FF2F1213047AB000EB9B4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2EE213047AB000EB9B4 /* Main.storyboard */; };
+ 5D1FF2F2213047AB000EB9B4 /* ConnectionIAPTableViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2EF213047AB000EB9B4 /* ConnectionIAPTableViewController.storyboard */; };
+ 5D1FF2F3213047AB000EB9B4 /* ConnectionTCPTableViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2F0213047AB000EB9B4 /* ConnectionTCPTableViewController.storyboard */; };
+ 5D1FF2F5213047B3000EB9B4 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2F4213047B2000EB9B4 /* LaunchScreen.xib */; };
+ 5D1FF2F8213047C1000EB9B4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D1FF2F7213047C1000EB9B4 /* AppDelegate.swift */; };
+ 5D1FF2FA2130480C000EB9B4 /* SmartDeviceLink-Example-Swift-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5D1FF2F92130480C000EB9B4 /* SmartDeviceLink-Example-Swift-Info.plist */; };
5D293AFE1FE078A9000CBD7E /* SDLCarWindowViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D293AFC1FE078A9000CBD7E /* SDLCarWindowViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D293AFF1FE078A9000CBD7E /* SDLCarWindowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D293AFD1FE078A9000CBD7E /* SDLCarWindowViewController.m */; };
5D2F58081D0717D5001085CE /* SDLManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D2F58071D0717D5001085CE /* SDLManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -353,6 +483,8 @@
5D339CF0207C08BA000CC364 /* SDLVoiceCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D339CEE207C08BA000CC364 /* SDLVoiceCommand.m */; };
5D339CF3207C0ACE000CC364 /* SDLMenuManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D339CF1207C0ACE000CC364 /* SDLMenuManager.h */; };
5D339CF4207C0ACE000CC364 /* SDLMenuManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D339CF2207C0ACE000CC364 /* SDLMenuManager.m */; };
+ 5D3E420A20EAAD6500D8C622 /* SDLTPMS.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D3E420820EAAD6500D8C622 /* SDLTPMS.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5D3E420B20EAAD6500D8C622 /* SDLTPMS.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D3E420920EAAD6500D8C622 /* SDLTPMS.m */; };
5D3E48751D6F3B330000BFEF /* SDLAsynchronousOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D3E48731D6F3B330000BFEF /* SDLAsynchronousOperation.h */; };
5D3E48761D6F3B330000BFEF /* SDLAsynchronousOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D3E48741D6F3B330000BFEF /* SDLAsynchronousOperation.m */; };
5D3E487B1D6F888E0000BFEF /* SDLRPCResponseNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D3E48791D6F888E0000BFEF /* SDLRPCResponseNotification.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -361,9 +493,6 @@
5D3E48801D6F88A30000BFEF /* SDLRPCNotificationNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D3E487E1D6F88A30000BFEF /* SDLRPCNotificationNotification.m */; };
5D3E48CB1D7722FE0000BFEF /* NSBundle+SDLBundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D3E48C91D7722FE0000BFEF /* NSBundle+SDLBundle.h */; };
5D3E48CC1D7722FE0000BFEF /* NSBundle+SDLBundle.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D3E48CA1D7722FE0000BFEF /* NSBundle+SDLBundle.m */; };
- 5D4029D41A76F0340006B0C2 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5D4029D31A76F0340006B0C2 /* Images.xcassets */; };
- 5D4029E31A76F0760006B0C2 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5D4029DF1A76F0760006B0C2 /* LaunchScreen.xib */; };
- 5D4029E41A76F0760006B0C2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5D4029E11A76F0760006B0C2 /* Main.storyboard */; };
5D4346471E6F0BDA00B639C6 /* SDLLogFileModuleSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D4346461E6F0BDA00B639C6 /* SDLLogFileModuleSpec.m */; };
5D43465B1E6F154400B639C6 /* SDLLogConfigurationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D43465A1E6F154400B639C6 /* SDLLogConfigurationSpec.m */; };
5D43466B1E6F3B4C00B639C6 /* SDLLogFilterSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D43466A1E6F3B4C00B639C6 /* SDLLogFilterSpec.m */; };
@@ -377,10 +506,6 @@
5D4631111F2135850092EFDC /* SDLControlFramePayloadConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D46310F1F2135850092EFDC /* SDLControlFramePayloadConstants.m */; };
5D4631141F2136B60092EFDC /* SDLControlFramePayloadNak.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D4631121F2136B60092EFDC /* SDLControlFramePayloadNak.h */; };
5D4631151F2136B60092EFDC /* SDLControlFramePayloadNak.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D4631131F2136B60092EFDC /* SDLControlFramePayloadNak.m */; };
- 5D48329D1A8EA33D00252386 /* Preferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D48329C1A8EA33D00252386 /* Preferences.m */; };
- 5D4832A11A92868E00252386 /* ProxyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D4832A01A92868E00252386 /* ProxyManager.m */; };
- 5D4832A51A94F90D00252386 /* ConnectionTransitionContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D4832A41A94F90D00252386 /* ConnectionTransitionContext.m */; };
- 5D4832A81A95191B00252386 /* ConnectionAnimatedTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D4832A71A95191B00252386 /* ConnectionAnimatedTransition.m */; };
5D4D67AC1D2ED37A00468B4A /* SDLNotificationDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D4D67AA1D2ED37A00468B4A /* SDLNotificationDispatcher.h */; };
5D4D67AD1D2ED37A00468B4A /* SDLNotificationDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D4D67AB1D2ED37A00468B4A /* SDLNotificationDispatcher.m */; };
5D4D67B01D2FE2F900468B4A /* SDLResponseDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D4D67AE1D2FE2F900468B4A /* SDLResponseDispatcher.h */; };
@@ -391,8 +516,6 @@
5D535DC61B72473800CF7760 /* SDLGlobals.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D535DC41B72473800CF7760 /* SDLGlobals.m */; };
5D53C46D1B7A99B9003526EA /* SDLStreamingMediaManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D53C46B1B7A99B9003526EA /* SDLStreamingMediaManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D53C46E1B7A99B9003526EA /* SDLStreamingMediaManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D53C46C1B7A99B9003526EA /* SDLStreamingMediaManager.m */; };
- 5D59350F1A855EB300687FB9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D59350C1A855EB300687FB9 /* AppDelegate.m */; };
- 5D5935121A855EBE00687FB9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D5935111A855EBE00687FB9 /* main.m */; };
5D59DD471B14FDEE00BE744D /* SDLLockScreenStatusManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D59DD461B14FDEE00BE744D /* SDLLockScreenStatusManagerSpec.m */; };
5D5DBF081D48E39C00D4F914 /* FBSnapshotTestCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D5DBF071D48E39C00D4F914 /* FBSnapshotTestCase.framework */; };
5D5DBF091D48E3AC00D4F914 /* FBSnapshotTestCase.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5D5DBF071D48E39C00D4F914 /* FBSnapshotTestCase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
@@ -873,6 +996,9 @@
5D61FE121A84238C00846EE7 /* SDLWarningLightStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FC251A84238C00846EE7 /* SDLWarningLightStatus.m */; };
5D61FE131A84238C00846EE7 /* SDLWiperStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FC261A84238C00846EE7 /* SDLWiperStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D61FE141A84238C00846EE7 /* SDLWiperStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FC271A84238C00846EE7 /* SDLWiperStatus.m */; };
+ 5D64FE6D20DA9CE600792F9F /* SDLVideoStreamingStateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D64FE6C20DA9CE600792F9F /* SDLVideoStreamingStateSpec.m */; };
+ 5D64FE6F20DA9E4300792F9F /* SDLStreamingVideoLifecycleManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D64FE6E20DA9E4300792F9F /* SDLStreamingVideoLifecycleManagerSpec.m */; };
+ 5D64FE7120DA9E6700792F9F /* SDLStreamingAudioLifecycleManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D64FE7020DA9E6700792F9F /* SDLStreamingAudioLifecycleManagerSpec.m */; };
5D6CC8EF1C610E660027F60A /* SDLSecurityType.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D6CC8EE1C610E660027F60A /* SDLSecurityType.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D6EB4CC1BF28DC600693731 /* NSMapTable+SubscriptingSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D6EB4CB1BF28DC600693731 /* NSMapTable+SubscriptingSpec.m */; };
5D6F7A2E1BC5650B0070BF37 /* SDLLifecycleConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D6F7A2C1BC5650B0070BF37 /* SDLLifecycleConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -912,6 +1038,30 @@
5D8B17531AC9E11B006A6E1C /* SDLDialNumberResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D8B17511AC9E11B006A6E1C /* SDLDialNumberResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D8B17541AC9E11B006A6E1C /* SDLDialNumberResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8B17521AC9E11B006A6E1C /* SDLDialNumberResponse.m */; };
5D8B17561AC9E399006A6E1C /* SDLDialNumberSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8B17551AC9E399006A6E1C /* SDLDialNumberSpec.m */; };
+ 5D92934D20AF4BEF00FCC775 /* SDLRGBColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92934B20AF4BEF00FCC775 /* SDLRGBColor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5D92934E20AF4BEF00FCC775 /* SDLRGBColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92934C20AF4BEF00FCC775 /* SDLRGBColor.m */; };
+ 5D92935020AF526200FCC775 /* SDLRGBColorSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92934F20AF526200FCC775 /* SDLRGBColorSpec.m */; };
+ 5D92935320B2F76500FCC775 /* SDLTemplateColorScheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92935120B2F76500FCC775 /* SDLTemplateColorScheme.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5D92935420B2F76500FCC775 /* SDLTemplateColorScheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92935220B2F76500FCC775 /* SDLTemplateColorScheme.m */; };
+ 5D92935620B2FD7300FCC775 /* SDLTemplateColorSchemeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92935520B2FD7300FCC775 /* SDLTemplateColorSchemeSpec.m */; };
+ 5D92935A20B33D4F00FCC775 /* SDLChoiceCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92935820B33D4F00FCC775 /* SDLChoiceCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5D92935B20B33D4F00FCC775 /* SDLChoiceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92935920B33D4F00FCC775 /* SDLChoiceCell.m */; };
+ 5D92935E20B33FF700FCC775 /* SDLChoiceSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92935C20B33FF700FCC775 /* SDLChoiceSet.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5D92935F20B33FF700FCC775 /* SDLChoiceSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92935D20B33FF700FCC775 /* SDLChoiceSet.m */; };
+ 5D92936120B354BE00FCC775 /* SDLChoiceSetDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92936020B354BE00FCC775 /* SDLChoiceSetDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5D92936320B3551600FCC775 /* SDLKeyboardDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92936220B3551600FCC775 /* SDLKeyboardDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5D92936820B3601700FCC775 /* SDLChoiceSetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92936620B3601700FCC775 /* SDLChoiceSetManager.h */; };
+ 5D92936920B3601700FCC775 /* SDLChoiceSetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92936720B3601700FCC775 /* SDLChoiceSetManager.m */; };
+ 5D92937020B5E0E500FCC775 /* SDLDeleteChoicesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92936E20B5E0E500FCC775 /* SDLDeleteChoicesOperation.h */; };
+ 5D92937120B5E0E500FCC775 /* SDLDeleteChoicesOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92936F20B5E0E500FCC775 /* SDLDeleteChoicesOperation.m */; };
+ 5D92937420B5EEA200FCC775 /* SDLPreloadChoicesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92937220B5EEA200FCC775 /* SDLPreloadChoicesOperation.h */; };
+ 5D92937520B5EEA200FCC775 /* SDLPreloadChoicesOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92937320B5EEA200FCC775 /* SDLPreloadChoicesOperation.m */; };
+ 5D92937820B6FB6200FCC775 /* SDLPresentChoiceSetOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92937620B6FB6200FCC775 /* SDLPresentChoiceSetOperation.h */; };
+ 5D92937920B6FB6200FCC775 /* SDLPresentChoiceSetOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92937720B6FB6200FCC775 /* SDLPresentChoiceSetOperation.m */; };
+ 5D92937C20B70A3E00FCC775 /* SDLPresentKeyboardOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92937A20B70A3E00FCC775 /* SDLPresentKeyboardOperation.h */; };
+ 5D92937D20B70A3E00FCC775 /* SDLPresentKeyboardOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92937B20B70A3E00FCC775 /* SDLPresentKeyboardOperation.m */; };
+ 5D92938020B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92937E20B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.h */; };
+ 5D92938120B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D92937F20B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.m */; };
5D9F50781BE7DD4C00FEF399 /* testFileJSON.json in Resources */ = {isa = PBXBuildFile; fileRef = 5D9F50721BE7DD4C00FEF399 /* testFileJSON.json */; };
5D9F50791BE7DD4C00FEF399 /* testImageBMP.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 5D9F50731BE7DD4C00FEF399 /* testImageBMP.bmp */; };
5D9F507A1BE7DD4C00FEF399 /* testImageJPEG.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 5D9F50741BE7DD4C00FEF399 /* testImageJPEG.jpeg */; };
@@ -1044,6 +1194,17 @@
5DD67CC31E68AE82009CD394 /* SDLLogFileModuleMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DD67CC11E68AE82009CD394 /* SDLLogFileModuleMap.h */; };
5DD67CC41E68AE82009CD394 /* SDLLogFileModuleMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DD67CC21E68AE82009CD394 /* SDLLogFileModuleMap.m */; };
5DD67CC71E68B568009CD394 /* SDLLogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DD67CC51E68B568009CD394 /* SDLLogMacros.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5DD8406220FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DD8406020FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5DD8406320FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DD8406120FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.m */; };
+ 5DD8406520FCE21A0082CE04 /* SDLElectronicParkBrakeStatusSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DD8406420FCE21A0082CE04 /* SDLElectronicParkBrakeStatusSpec.m */; };
+ 5DE35E4520CAFC5D0034BE5A /* SDLChoiceCellSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE35E4420CAFC5D0034BE5A /* SDLChoiceCellSpec.m */; };
+ 5DE35E4720CB0AB90034BE5A /* SDLChoiceSetSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE35E4620CB0AB90034BE5A /* SDLChoiceSetSpec.m */; };
+ 5DE35E4A20CB1BF70034BE5A /* SDLChoiceSetManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE35E4920CB1BF70034BE5A /* SDLChoiceSetManagerSpec.m */; };
+ 5DE35E4C20CB1C1C0034BE5A /* SDLCheckChoiceVROptionalOperationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE35E4B20CB1C1C0034BE5A /* SDLCheckChoiceVROptionalOperationSpec.m */; };
+ 5DE35E4E20CB1C2C0034BE5A /* SDLDeleteChoicesOperationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE35E4D20CB1C2C0034BE5A /* SDLDeleteChoicesOperationSpec.m */; };
+ 5DE35E5220CB1C490034BE5A /* SDLPreloadChoicesOperationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE35E5120CB1C490034BE5A /* SDLPreloadChoicesOperationSpec.m */; };
+ 5DE35E5420CB1C590034BE5A /* SDLPresentChoiceSetOperationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE35E5320CB1C590034BE5A /* SDLPresentChoiceSetOperationSpec.m */; };
+ 5DE35E5620CB1C680034BE5A /* SDLPresentKeyboardOperationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE35E5520CB1C680034BE5A /* SDLPresentKeyboardOperationSpec.m */; };
5DE372A11ACB2ED300849FAA /* SDLHMICapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DE3729F1ACB2ED300849FAA /* SDLHMICapabilities.h */; settings = {ATTRIBUTES = (Public, ); }; };
5DE372A21ACB2ED300849FAA /* SDLHMICapabilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE372A01ACB2ED300849FAA /* SDLHMICapabilities.m */; };
5DE372A41ACB336600849FAA /* SDLHMICapabilitiesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE372A31ACB336600849FAA /* SDLHMICapabilitiesSpec.m */; };
@@ -1058,23 +1219,18 @@
5DF40B26208FA7DE00DD6FDA /* SDLMenuManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DF40B25208FA7DE00DD6FDA /* SDLMenuManagerSpec.m */; };
5DF40B28208FDA9700DD6FDA /* SDLVoiceCommandManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DF40B27208FDA9700DD6FDA /* SDLVoiceCommandManagerSpec.m */; };
5DFFB9151BD7C89700DB3F04 /* SDLConnectionManagerType.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DFFB9141BD7C89700DB3F04 /* SDLConnectionManagerType.h */; };
- 8800871E20A6356D008E1EA0 /* ButtonManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8800871B20A6338C008E1EA0 /* ButtonManager.m */; };
- 8803A0AF208E2A3A009FDC02 /* AudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8803A0AC208E2907009FDC02 /* AudioManager.m */; };
- 8803A0B2208E7CA4009FDC02 /* VehicleDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8803A0B1208E7CA4009FDC02 /* VehicleDataManager.m */; };
+ 880245A420F79C3400ED195B /* SDLFileManagerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 880245A220F79C3400ED195B /* SDLFileManagerConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 880245A520F79C3400ED195B /* SDLFileManagerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 880245A320F79C3400ED195B /* SDLFileManagerConfiguration.m */; };
880E35B42088F75A00181259 /* SDLSystemCapabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 880E35B22088F75A00181259 /* SDLSystemCapabilityManager.m */; };
880E35B52088F75A00181259 /* SDLSystemCapabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 880E35B32088F75A00181259 /* SDLSystemCapabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
880E35B82088F78E00181259 /* SDLSystemCapabilityManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 880E35B72088F78E00181259 /* SDLSystemCapabilityManagerSpec.m */; };
- 8814AEA720AB65FC00466E0F /* MenuManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8814AEA620AB65FC00466E0F /* MenuManager.m */; };
- 8814AEAA20AB663800466E0F /* PerformInteractionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8814AEA920AB663800466E0F /* PerformInteractionManager.m */; };
- 8814AEAC20AB667B00466E0F /* PerformInteractionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8814AEAB20AB667B00466E0F /* PerformInteractionManager.swift */; };
- 88166B00207E41E900076236 /* MenuManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88166AFF207E41E900076236 /* MenuManager.swift */; };
+ 8818ADD82100FC18007D6F19 /* SDLTurnSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8818ADD62100FC18007D6F19 /* SDLTurnSignal.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 8818ADD92100FC18007D6F19 /* SDLTurnSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = 8818ADD72100FC18007D6F19 /* SDLTurnSignal.m */; };
+ 8818ADDD2100FE0C007D6F19 /* SDLTurnSignalSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 8818ADDC2100FE0C007D6F19 /* SDLTurnSignalSpec.m */; };
8829568B207CF68800EF056C /* SmartDeviceLink.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D61FA1C1A84237100846EE7 /* SmartDeviceLink.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
- 88295690207CF68800EF056C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5D4029D31A76F0340006B0C2 /* Images.xcassets */; };
88295693207CF68800EF056C /* SmartDeviceLink.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5D61FA1C1A84237100846EE7 /* SmartDeviceLink.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 8829569E207CFD0E00EF056C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8829569D207CFD0E00EF056C /* AppDelegate.swift */; };
+ 882C42CE2108CDB100A44B58 /* (null) in Sources */ = {isa = PBXBuildFile; };
8850DB601F4475D30053A48D /* TestMultipleFilesConnectionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8850DB5F1F4475D30053A48D /* TestMultipleFilesConnectionManager.m */; };
- 8863B59D207D3849002D6459 /* AppConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8863B597207D2388002D6459 /* AppConstants.m */; };
- 8870C3EA208662540070E018 /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8870C3E82086623F0070E018 /* AudioManager.swift */; };
8877F5EB1F34A3BE00DC128A /* SDLSendHapticDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 8877F5EA1F34A3BE00DC128A /* SDLSendHapticDataSpec.m */; };
8877F5EE1F34A72200DC128A /* SDLSendHapticDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 8877F5EC1F34A72200DC128A /* SDLSendHapticDataResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
8877F5EF1F34A72200DC128A /* SDLSendHapticDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8877F5ED1F34A72200DC128A /* SDLSendHapticDataResponse.m */; };
@@ -1086,26 +1242,20 @@
88802FF420853BED00E9EBC6 /* SmartDeviceLinkSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D4346631E6F38E600B639C6 /* SmartDeviceLinkSwift.h */; settings = {ATTRIBUTES = (Public, ); }; };
88802FF520853CD500E9EBC6 /* SmartDeviceLinkSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88802FEF20853AE600E9EBC6 /* SmartDeviceLinkSwift.framework */; };
88802FF620853CD500E9EBC6 /* SmartDeviceLinkSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 88802FEF20853AE600E9EBC6 /* SmartDeviceLinkSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 888D178F207E7F42008E9F8F /* ButtonManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 888D178D207E7F0E008E9F8F /* ButtonManager.swift */; };
- 888D1790207E815C008E9F8F /* AppConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8863B597207D2388002D6459 /* AppConstants.m */; };
- 88A0AA56207CFE5D0075132C /* AppUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A0AA55207CFE5C0075132C /* AppUserDefaults.swift */; };
- 88A0AA58207CFE650075132C /* ProxyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A0AA57207CFE650075132C /* ProxyManager.swift */; };
- 88A0AA5C207CFE740075132C /* ConnectionContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A0AA59207CFE740075132C /* ConnectionContainerViewController.swift */; };
- 88A0AA5D207CFE740075132C /* ConnectionIAPTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A0AA5A207CFE740075132C /* ConnectionIAPTableViewController.swift */; };
- 88A0AA5E207CFE740075132C /* ConnectionTCPTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A0AA5B207CFE740075132C /* ConnectionTCPTableViewController.swift */; };
- 88A0AA65207CFF980075132C /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 88A0AA61207CFF970075132C /* LaunchScreen.xib */; };
- 88A0AA66207CFF980075132C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 88A0AA62207CFF970075132C /* Main.storyboard */; };
- 88A0AA67207CFF980075132C /* ConnectionIAPTableViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 88A0AA63207CFF970075132C /* ConnectionIAPTableViewController.storyboard */; };
- 88A0AA68207CFF980075132C /* ConnectionTCPTableViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 88A0AA64207CFF980075132C /* ConnectionTCPTableViewController.storyboard */; };
+ 8886EB982111F4FA008294A5 /* SDLFileManagerConfigurationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 8886EB972111F4FA008294A5 /* SDLFileManagerConfigurationSpec.m */; };
+ 88A1CF1E21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A1CF1D21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m */; };
+ 88A795D22106787400056542 /* SDLStaticIconName.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A795D02106787400056542 /* SDLStaticIconName.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 88A795D32106787400056542 /* SDLStaticIconName.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A795D12106787400056542 /* SDLStaticIconName.m */; };
+ 88A795D5210678E000056542 /* SDLStaticIconNameSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A795D4210678E000056542 /* SDLStaticIconNameSpec.m */; };
+ 88B3BF9820DA859800943565 /* SDLFuelType.h in Headers */ = {isa = PBXBuildFile; fileRef = 88B3BF9620DA859800943565 /* SDLFuelType.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 88B3BF9920DA859800943565 /* SDLFuelType.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B3BF9720DA859800943565 /* SDLFuelType.m */; };
+ 88B3BF9C20DA8BBC00943565 /* SDLFuelRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 88B3BF9A20DA8BBC00943565 /* SDLFuelRange.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 88B3BF9D20DA8BBC00943565 /* SDLFuelRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B3BF9B20DA8BBC00943565 /* SDLFuelRange.m */; };
+ 88B3BFA020DA8FD000943565 /* SDLFuelTypeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B3BF9F20DA8FD000943565 /* SDLFuelTypeSpec.m */; };
+ 88B3BFA220DA911E00943565 /* SDLFuelRangeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B3BFA120DA911E00943565 /* SDLFuelRangeSpec.m */; };
88B848C31F45E1A600DED768 /* TestResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B848C21F45E1A600DED768 /* TestResponse.m */; };
88B848C91F462E3600DED768 /* TestFileProgressResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B848C81F462E3600DED768 /* TestFileProgressResponse.m */; };
- 88B849C52080F4B3002A034D /* RPCPermissionsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88B849C32080F4AF002A034D /* RPCPermissionsManager.swift */; };
- 88B849C820812442002A034D /* VehicleDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88B849C620812412002A034D /* VehicleDataManager.swift */; };
88D2AAE41F682BB20078D5B2 /* SDLLogConstantsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D2AAE31F682BB20078D5B2 /* SDLLogConstantsSpec.m */; };
- 88DA6D10209794A400AD8297 /* AlertManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DA6D0F209794A400AD8297 /* AlertManager.m */; };
- 88DE80B720A5C8DD00BA9CF0 /* RPCPermissionsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DE80B620A5C8DD00BA9CF0 /* RPCPermissionsManager.m */; };
- 88DFB053207F8E100079D19D /* Protocol+ProxyManagerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DFB051207F8DF50079D19D /* Protocol+ProxyManagerDelegate.swift */; };
- 88DFB055207F96EE0079D19D /* AlertManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DFB054207F96EE0079D19D /* AlertManager.swift */; };
88EED8381F33AE1700E6C42E /* SDLHapticRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 88EED8361F33AE1700E6C42E /* SDLHapticRect.h */; settings = {ATTRIBUTES = (Public, ); }; };
88EED8391F33AE1700E6C42E /* SDLHapticRect.m in Sources */ = {isa = PBXBuildFile; fileRef = 88EED8371F33AE1700E6C42E /* SDLHapticRect.m */; };
88EED83B1F33BECB00E6C42E /* SDLHapticRectSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88EED83A1F33BECB00E6C42E /* SDLHapticRectSpec.m */; };
@@ -1143,9 +1293,6 @@
DA4F47961E771AA100FC809E /* SDLEnum.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4F47951E771AA100FC809E /* SDLEnum.m */; };
DA6223BD1E7B088200878689 /* CVPixelBufferRef+SDLUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = DA6223BB1E7B088200878689 /* CVPixelBufferRef+SDLUtil.h */; };
DA6223BE1E7B088200878689 /* CVPixelBufferRef+SDLUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = DA6223BC1E7B088200878689 /* CVPixelBufferRef+SDLUtil.m */; };
- DA8966EB1E56939F00413EAB /* SDLStreamingMediaLifecycleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8966E91E56939F00413EAB /* SDLStreamingMediaLifecycleManager.h */; };
- DA8966EC1E56939F00413EAB /* SDLStreamingMediaLifecycleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8966EA1E56939F00413EAB /* SDLStreamingMediaLifecycleManager.m */; };
- DA8966EF1E5693E300413EAB /* SDLStreamingMediaLifecycleManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8966EE1E5693E300413EAB /* SDLStreamingMediaLifecycleManagerSpec.m */; };
DA8966F21E56973700413EAB /* SDLStreamingMediaManagerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8966F11E56973700413EAB /* SDLStreamingMediaManagerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };
DA96C0661D4D4F730022F520 /* SDLAppInfoSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = DA96C0651D4D4F730022F520 /* SDLAppInfoSpec.m */; };
DA9F7E631DCBFAC800ACAE48 /* SDLDateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = DA9F7E611DCBFAC800ACAE48 /* SDLDateTime.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -1214,6 +1361,19 @@
E9C32B9D1AB20C5900F283AF /* EAAccessory+SDLProtocols.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C32B991AB20C5900F283AF /* EAAccessory+SDLProtocols.m */; };
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 */; };
+ EE798CA420561210008EDE8E /* SDLSecondaryTransportManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EE798CA32056120F008EDE8E /* SDLSecondaryTransportManager.h */; };
+ EE798CA620561218008EDE8E /* SDLSecondaryTransportManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EE798CA520561217008EDE8E /* SDLSecondaryTransportManager.m */; };
+ EE7B6123205BF6C800E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.m in Sources */ = {isa = PBXBuildFile; fileRef = EE7B6122205BF6C800E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.m */; };
+ EE7B6124205BF97B00E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.h in Headers */ = {isa = PBXBuildFile; fileRef = EE7B6121205BF69C00E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.h */; };
+ EEA41D45210BA8CF0006CB6E /* TestTCPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = EEA41D44210BA8CF0006CB6E /* TestTCPServer.m */; };
+ EEB1932E205028B700A8940C /* SDLControlFramePayloadTransportEventUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = EEB1932D205028B700A8940C /* SDLControlFramePayloadTransportEventUpdate.h */; };
+ EEB19330205028BE00A8940C /* SDLControlFramePayloadTransportEventUpdate.m in Sources */ = {isa = PBXBuildFile; fileRef = EEB1932F205028BE00A8940C /* SDLControlFramePayloadTransportEventUpdate.m */; };
+ EEB2537E2067D3E80069584E /* SDLSecondaryTransportManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EEB2537D2067D3E80069584E /* SDLSecondaryTransportManagerSpec.m */; };
EED5C9FE1F4D18D100F04000 /* SDLH264Packetizer.h in Headers */ = {isa = PBXBuildFile; fileRef = EED5C9FD1F4D18D100F04000 /* SDLH264Packetizer.h */; };
EED5CA001F4D18DC00F04000 /* SDLRAWH264Packetizer.h in Headers */ = {isa = PBXBuildFile; fileRef = EED5C9FF1F4D18DC00F04000 /* SDLRAWH264Packetizer.h */; };
EED5CA021F4D18EC00F04000 /* SDLRAWH264Packetizer.m in Sources */ = {isa = PBXBuildFile; fileRef = EED5CA011F4D18EC00F04000 /* SDLRAWH264Packetizer.m */; };
@@ -1571,6 +1731,84 @@
1E5AD0931F20BEAD0029B8AF /* SDLSetInteriorVehicleDataResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSetInteriorVehicleDataResponse.m; sourceTree = "<group>"; };
1E5AD0961F20C0FB0029B8AF /* SDLOnInteriorVehicleData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLOnInteriorVehicleData.h; sourceTree = "<group>"; };
1E5AD0971F20C0FB0029B8AF /* SDLOnInteriorVehicleData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLOnInteriorVehicleData.m; sourceTree = "<group>"; };
+ 1E89B0DD2031636000A47992 /* SDLSeatControlDataSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSeatControlDataSpec.m; sourceTree = "<group>"; };
+ 1E89B0E1203196B800A47992 /* SDLSeatControlCapabilitiesSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSeatControlCapabilitiesSpec.m; sourceTree = "<group>"; };
+ 1EAA47092032BAE5000FE74B /* SDLOnRCStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLOnRCStatus.h; sourceTree = "<group>"; };
+ 1EAA470A2032BAE5000FE74B /* SDLOnRCStatus.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLOnRCStatus.m; sourceTree = "<group>"; };
+ 1EAA470D2032BF1D000FE74B /* SDLOnRCStatusSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLOnRCStatusSpec.m; sourceTree = "<group>"; };
+ 1EAA470F2033FE80000FE74B /* SDLStationIDNumber.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLStationIDNumber.h; sourceTree = "<group>"; };
+ 1EAA47102033FE80000FE74B /* SDLStationIDNumber.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLStationIDNumber.m; sourceTree = "<group>"; };
+ 1EAA4717203406B1000FE74B /* SDLSISData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSISData.h; sourceTree = "<group>"; };
+ 1EAA4718203406B1000FE74B /* SDLSISData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSISData.m; sourceTree = "<group>"; };
+ 1EAA471B203410BB000FE74B /* SDLAudioControlCapabilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLAudioControlCapabilities.h; sourceTree = "<group>"; };
+ 1EAA471C203410BB000FE74B /* SDLAudioControlCapabilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAudioControlCapabilities.m; sourceTree = "<group>"; };
+ 1EAA4723203416D3000FE74B /* SDLEqualizerSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLEqualizerSettings.h; sourceTree = "<group>"; };
+ 1EAA4724203416D3000FE74B /* SDLEqualizerSettings.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLEqualizerSettings.m; sourceTree = "<group>"; };
+ 1EAA47272034388D000FE74B /* SDLAudioControlData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLAudioControlData.h; sourceTree = "<group>"; };
+ 1EAA47282034388D000FE74B /* SDLAudioControlData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAudioControlData.m; sourceTree = "<group>"; };
+ 1EAA472B20344108000FE74B /* SDLLightStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLightStatus.h; sourceTree = "<group>"; };
+ 1EAA472C20344108000FE74B /* SDLLightStatus.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightStatus.m; sourceTree = "<group>"; };
+ 1EAA472F203442C0000FE74B /* SDLLightName.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLightName.h; sourceTree = "<group>"; };
+ 1EAA4730203442C0000FE74B /* SDLLightName.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightName.m; sourceTree = "<group>"; };
+ 1EAA473720345B7A000FE74B /* SDLLightCapabilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLightCapabilities.h; sourceTree = "<group>"; };
+ 1EAA473820345B7A000FE74B /* SDLLightCapabilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightCapabilities.m; sourceTree = "<group>"; };
+ 1EAA473B203554B5000FE74B /* SDLLightState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLightState.h; sourceTree = "<group>"; };
+ 1EAA473C203554B5000FE74B /* SDLLightState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightState.m; sourceTree = "<group>"; };
+ 1EAA473F20355FF3000FE74B /* SDLLightControlCapabilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLightControlCapabilities.h; sourceTree = "<group>"; };
+ 1EAA474020355FF3000FE74B /* SDLLightControlCapabilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightControlCapabilities.m; sourceTree = "<group>"; };
+ 1EAA47432035623B000FE74B /* SDLLightControlData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLightControlData.h; sourceTree = "<group>"; };
+ 1EAA47442035623B000FE74B /* SDLLightControlData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightControlData.m; sourceTree = "<group>"; };
+ 1EAA4747203567FA000FE74B /* SDLHMISettingsControlCapabilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLHMISettingsControlCapabilities.h; sourceTree = "<group>"; };
+ 1EAA4748203567FA000FE74B /* SDLHMISettingsControlCapabilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLHMISettingsControlCapabilities.m; sourceTree = "<group>"; };
+ 1EAA474B20356B2D000FE74B /* SDLDisplayMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLDisplayMode.h; sourceTree = "<group>"; };
+ 1EAA474C20356B2D000FE74B /* SDLDisplayMode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLDisplayMode.m; sourceTree = "<group>"; };
+ 1EAA474F20356CD2000FE74B /* SDLDistanceUnit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLDistanceUnit.h; sourceTree = "<group>"; };
+ 1EAA475020356CD2000FE74B /* SDLDistanceUnit.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLDistanceUnit.m; sourceTree = "<group>"; };
+ 1EAA4753203583BC000FE74B /* SDLHMISettingsControlData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLHMISettingsControlData.h; sourceTree = "<group>"; };
+ 1EAA4754203583BC000FE74B /* SDLHMISettingsControlData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLHMISettingsControlData.m; sourceTree = "<group>"; };
+ 1EAA47572035AFD9000FE74B /* SDLHMISettingsControlDataSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLHMISettingsControlDataSpec.m; sourceTree = "<group>"; };
+ 1EAA475D2035B177000FE74B /* SDLDisplayModeSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLDisplayModeSpec.m; sourceTree = "<group>"; };
+ 1EAA47612035B1AE000FE74B /* SDLDistanceUnitSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLDistanceUnitSpec.m; sourceTree = "<group>"; };
+ 1EAA47632035B231000FE74B /* SDLHMISettingsControlCapabilitiesSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLHMISettingsControlCapabilitiesSpec.m; sourceTree = "<group>"; };
+ 1EAA47652035B8D3000FE74B /* SDLLightControlDataSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightControlDataSpec.m; sourceTree = "<group>"; };
+ 1EAA476720369BCF000FE74B /* SDLLightStateSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightStateSpec.m; sourceTree = "<group>"; };
+ 1EAA476920369ECC000FE74B /* SDLLightControlCapabilitiesSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightControlCapabilitiesSpec.m; sourceTree = "<group>"; };
+ 1EAA476B2036A52F000FE74B /* SDLLightCapabilitiesSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightCapabilitiesSpec.m; sourceTree = "<group>"; };
+ 1EAA476F2036AE89000FE74B /* SDLLightStatusSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightStatusSpec.m; sourceTree = "<group>"; };
+ 1EAA47712036AEF5000FE74B /* SDLLightNameSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLightNameSpec.m; sourceTree = "<group>"; };
+ 1EAA47732036B31E000FE74B /* SDLAudioControlDataSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAudioControlDataSpec.m; sourceTree = "<group>"; };
+ 1EAA47752036B847000FE74B /* SDLEqualizerSettingsSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLEqualizerSettingsSpec.m; sourceTree = "<group>"; };
+ 1EAA47772036BA74000FE74B /* SDLAudioControlCapabilitiesSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAudioControlCapabilitiesSpec.m; sourceTree = "<group>"; };
+ 1EAA47792036BD46000FE74B /* SDLSISDataSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSISDataSpec.m; sourceTree = "<group>"; };
+ 1EAA477F2036C2C9000FE74B /* SDLStationIDNumberSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLStationIDNumberSpec.m; sourceTree = "<group>"; };
+ 1EB59C9D202D925500343A61 /* SDLMassageZone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLMassageZone.h; sourceTree = "<group>"; };
+ 1EB59C9E202D925500343A61 /* SDLMassageZone.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageZone.m; sourceTree = "<group>"; };
+ 1EB59CA1202D92F600343A61 /* SDLMassageMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLMassageMode.h; sourceTree = "<group>"; };
+ 1EB59CA2202D92F600343A61 /* SDLMassageMode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageMode.m; sourceTree = "<group>"; };
+ 1EB59CA5202D946500343A61 /* SDLMassageModeData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLMassageModeData.h; sourceTree = "<group>"; };
+ 1EB59CA6202D946500343A61 /* SDLMassageModeData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageModeData.m; sourceTree = "<group>"; };
+ 1EB59CA9202D96A200343A61 /* SDLMassageCushion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLMassageCushion.h; sourceTree = "<group>"; };
+ 1EB59CAA202D96A200343A61 /* SDLMassageCushion.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageCushion.m; sourceTree = "<group>"; };
+ 1EB59CAD202D97AC00343A61 /* SDLMassageCushionFirmness.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLMassageCushionFirmness.h; sourceTree = "<group>"; };
+ 1EB59CAE202D97AC00343A61 /* SDLMassageCushionFirmness.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageCushionFirmness.m; sourceTree = "<group>"; };
+ 1EB59CB1202D9B5F00343A61 /* SDLSeatMemoryActionType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSeatMemoryActionType.h; sourceTree = "<group>"; };
+ 1EB59CB2202D9B5F00343A61 /* SDLSeatMemoryActionType.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSeatMemoryActionType.m; sourceTree = "<group>"; };
+ 1EB59CB5202D9C8100343A61 /* SDLSeatMemoryAction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSeatMemoryAction.h; sourceTree = "<group>"; };
+ 1EB59CB6202D9C8100343A61 /* SDLSeatMemoryAction.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSeatMemoryAction.m; sourceTree = "<group>"; };
+ 1EB59CB9202DA1B400343A61 /* SDLSupportedSeat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSupportedSeat.h; sourceTree = "<group>"; };
+ 1EB59CBA202DA1B400343A61 /* SDLSupportedSeat.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSupportedSeat.m; sourceTree = "<group>"; };
+ 1EB59CBD202DA26000343A61 /* SDLSeatControlData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSeatControlData.h; sourceTree = "<group>"; };
+ 1EB59CBE202DA26000343A61 /* SDLSeatControlData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSeatControlData.m; sourceTree = "<group>"; };
+ 1EB59CC1202DB40400343A61 /* SDLSeatControlCapabilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSeatControlCapabilities.h; sourceTree = "<group>"; };
+ 1EB59CC2202DB40400343A61 /* SDLSeatControlCapabilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSeatControlCapabilities.m; sourceTree = "<group>"; };
+ 1EB59CC7202DC86A00343A61 /* SDLModuleTypeSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLModuleTypeSpec.m; sourceTree = "<group>"; };
+ 1EB59CC9202DC8E300343A61 /* SDLMassageZoneSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageZoneSpec.m; sourceTree = "<group>"; };
+ 1EB59CCD202DC97900343A61 /* SDLMassageCushionSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageCushionSpec.m; sourceTree = "<group>"; };
+ 1EB59CCF202DC9F200343A61 /* SDLSupportedSeatSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSupportedSeatSpec.m; sourceTree = "<group>"; };
+ 1EB59CD1202DCA9B00343A61 /* SDLMassageModeSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageModeSpec.m; sourceTree = "<group>"; };
+ 1EB59CD3202DCAE900343A61 /* SDLMassageModeDataSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageModeDataSpec.m; sourceTree = "<group>"; };
+ 1EB59CD7202DCCD500343A61 /* SDLMassageCushionFirmnessSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMassageCushionFirmnessSpec.m; sourceTree = "<group>"; };
+ 1EB59CD9202DCEEC00343A61 /* SDLSeatMemoryActionSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSeatMemoryActionSpec.m; sourceTree = "<group>"; };
1EE48E8E1F2F0EE700B98D08 /* SDLTemperatureUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLTemperatureUnit.h; sourceTree = "<group>"; };
1EE48E8F1F2F0EE700B98D08 /* SDLTemperatureUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLTemperatureUnit.m; sourceTree = "<group>"; };
1EE8C4371F347C7300FDC2CF /* SDLRadioBandSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLRadioBandSpec.m; sourceTree = "<group>"; };
@@ -1597,6 +1835,9 @@
1FF7DAB91F75B2A800B46C30 /* SDLFocusableItemLocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLFocusableItemLocator.h; sourceTree = "<group>"; };
1FF7DABB1F75B2BF00B46C30 /* SDLFocusableItemLocator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLFocusableItemLocator.m; sourceTree = "<group>"; };
1FF7DABF1F75CF6C00B46C30 /* SDLHapticManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLHapticManagerSpec.m; path = ProxySpecs/SDLHapticManagerSpec.m; sourceTree = "<group>"; };
+ 2BF2F84D20ED004000A26EF2 /* SDLAudioStreamingIndicator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLAudioStreamingIndicator.h; sourceTree = "<group>"; };
+ 2BF2F84E20ED004000A26EF2 /* SDLAudioStreamingIndicator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAudioStreamingIndicator.m; sourceTree = "<group>"; };
+ 2BF2F85120ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAudioStreamingIndicatorSpec.m; sourceTree = "<group>"; };
332A913C1CED87F80043824C /* SDLAppInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLAppInfo.h; sourceTree = "<group>"; };
332A913D1CED87F80043824C /* SDLAppInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAppInfo.m; sourceTree = "<group>"; };
5D00AC651F140F0A004000D9 /* SDLSystemCapabilityType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLSystemCapabilityType.h; sourceTree = "<group>"; };
@@ -1611,14 +1852,8 @@
5D00AC761F15283E004000D9 /* SDLNavigationCapability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLNavigationCapability.m; sourceTree = "<group>"; };
5D00AC791F15287E004000D9 /* SDLPhoneCapability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPhoneCapability.h; sourceTree = "<group>"; };
5D00AC7A1F15287E004000D9 /* SDLPhoneCapability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLPhoneCapability.m; sourceTree = "<group>"; };
- 5D0218F41A8E79C400D1BF62 /* ConnectionTCPTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionTCPTableViewController.h; path = SmartDeviceLink_Example/Classes/ConnectionTCPTableViewController.h; sourceTree = SOURCE_ROOT; };
- 5D0218F51A8E79C400D1BF62 /* ConnectionTCPTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionTCPTableViewController.m; path = SmartDeviceLink_Example/Classes/ConnectionTCPTableViewController.m; sourceTree = SOURCE_ROOT; };
- 5D0218F81A8E7A7300D1BF62 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = SmartDeviceLink_Example/Base.lproj/ConnectionTCPTableViewController.storyboard; sourceTree = SOURCE_ROOT; };
- 5D0218FA1A8E7E1700D1BF62 /* ConnectionContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionContainerViewController.h; path = SmartDeviceLink_Example/Classes/ConnectionContainerViewController.h; sourceTree = SOURCE_ROOT; };
- 5D0218FB1A8E7E1700D1BF62 /* ConnectionContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionContainerViewController.m; path = SmartDeviceLink_Example/Classes/ConnectionContainerViewController.m; sourceTree = SOURCE_ROOT; };
- 5D0218FD1A8E9E0D00D1BF62 /* ConnectionIAPTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionIAPTableViewController.h; path = SmartDeviceLink_Example/Classes/ConnectionIAPTableViewController.h; sourceTree = SOURCE_ROOT; };
- 5D0218FE1A8E9E0D00D1BF62 /* ConnectionIAPTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionIAPTableViewController.m; path = SmartDeviceLink_Example/Classes/ConnectionIAPTableViewController.m; sourceTree = SOURCE_ROOT; };
- 5D0219041A8E9F6D00D1BF62 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = SmartDeviceLink_Example/Base.lproj/ConnectionIAPTableViewController.storyboard; sourceTree = SOURCE_ROOT; };
+ 5D019274214994AC003500F6 /* NSMutableArray+Safe.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSMutableArray+Safe.h"; sourceTree = "<group>"; };
+ 5D019275214994AC003500F6 /* NSMutableArray+Safe.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSMutableArray+Safe.m"; sourceTree = "<group>"; };
5D07C02B2044AC9000D1ECDC /* SDLSequentialRPCRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLSequentialRPCRequestOperation.h; sourceTree = "<group>"; };
5D07C02C2044AC9100D1ECDC /* SDLSequentialRPCRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSequentialRPCRequestOperation.m; sourceTree = "<group>"; };
5D07C02F2044AD0C00D1ECDC /* SDLAsynchronousRPCRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLAsynchronousRPCRequestOperation.h; sourceTree = "<group>"; };
@@ -1637,6 +1872,12 @@
5D0A9F961F1559EC00CC80DD /* SDLSystemCapabilitySpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSystemCapabilitySpec.m; sourceTree = "<group>"; };
5D0A9F991F15636800CC80DD /* SDLGetSystemCapabilitiesSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLGetSystemCapabilitiesSpec.m; sourceTree = "<group>"; };
5D0A9F9B1F1565EB00CC80DD /* SDLGetSystemCapabilityResponseSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLGetSystemCapabilityResponseSpec.m; sourceTree = "<group>"; };
+ 5D0C29FA20D93D8C008B56CD /* SDLVideoStreamingState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLVideoStreamingState.h; sourceTree = "<group>"; };
+ 5D0C29FB20D93D8C008B56CD /* SDLVideoStreamingState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLVideoStreamingState.m; sourceTree = "<group>"; };
+ 5D0C29FE20D9479B008B56CD /* SDLStreamingVideoLifecycleManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLStreamingVideoLifecycleManager.h; sourceTree = "<group>"; };
+ 5D0C29FF20D9479B008B56CD /* SDLStreamingVideoLifecycleManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingVideoLifecycleManager.m; sourceTree = "<group>"; };
+ 5D0C2A0220D947AB008B56CD /* SDLStreamingAudioLifecycleManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLStreamingAudioLifecycleManager.h; sourceTree = "<group>"; };
+ 5D0C2A0320D947AB008B56CD /* SDLStreamingAudioLifecycleManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingAudioLifecycleManager.m; sourceTree = "<group>"; };
5D1654551D3E754F00554D93 /* SDLLifecycleManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLLifecycleManagerSpec.m; path = DevAPISpecs/SDLLifecycleManagerSpec.m; sourceTree = "<group>"; };
5D1654581D3E7A1600554D93 /* SDLLifecycleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLLifecycleManager.h; sourceTree = "<group>"; };
5D1654591D3E7A1600554D93 /* SDLLifecycleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLLifecycleManager.m; sourceTree = "<group>"; };
@@ -1656,6 +1897,68 @@
5D1665CC1CF8CA8A00CC4CA1 /* SDLPermissionConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPermissionConstants.h; sourceTree = "<group>"; };
5D1BF6AD204742FB00D36881 /* SDLDisplayCapabilities+ShowManagerExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SDLDisplayCapabilities+ShowManagerExtensions.h"; sourceTree = "<group>"; };
5D1BF6AE204742FB00D36881 /* SDLDisplayCapabilities+ShowManagerExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDLDisplayCapabilities+ShowManagerExtensions.m"; sourceTree = "<group>"; };
+ 5D1FF28B213044F9000EB9B4 /* AlertManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AlertManager.h; path = "Example Apps/Example ObjC/AlertManager.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF28C213044F9000EB9B4 /* AlertManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AlertManager.m; path = "Example Apps/Example ObjC/AlertManager.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF28E21304513000EB9B4 /* MenuManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MenuManager.h; path = "Example Apps/Example ObjC/MenuManager.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF28F21304513000EB9B4 /* AudioManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioManager.h; path = "Example Apps/Example ObjC/AudioManager.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29021304513000EB9B4 /* VehicleDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VehicleDataManager.h; path = "Example Apps/Example ObjC/VehicleDataManager.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29121304513000EB9B4 /* PerformInteractionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PerformInteractionManager.m; path = "Example Apps/Example ObjC/PerformInteractionManager.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29221304513000EB9B4 /* RPCPermissionsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RPCPermissionsManager.m; path = "Example Apps/Example ObjC/RPCPermissionsManager.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29321304513000EB9B4 /* PerformInteractionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PerformInteractionManager.h; path = "Example Apps/Example ObjC/PerformInteractionManager.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29421304513000EB9B4 /* MenuManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MenuManager.m; path = "Example Apps/Example ObjC/MenuManager.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29521304514000EB9B4 /* ButtonManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ButtonManager.h; path = "Example Apps/Example ObjC/ButtonManager.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29621304514000EB9B4 /* ProxyManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProxyManager.m; path = "Example Apps/Example ObjC/ProxyManager.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29721304514000EB9B4 /* AudioManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AudioManager.m; path = "Example Apps/Example ObjC/AudioManager.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29821304514000EB9B4 /* RPCPermissionsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPCPermissionsManager.h; path = "Example Apps/Example ObjC/RPCPermissionsManager.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29921304514000EB9B4 /* VehicleDataManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VehicleDataManager.m; path = "Example Apps/Example ObjC/VehicleDataManager.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29A21304514000EB9B4 /* ProxyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProxyManager.h; path = "Example Apps/Example ObjC/ProxyManager.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF29B21304515000EB9B4 /* ButtonManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ButtonManager.m; path = "Example Apps/Example ObjC/ButtonManager.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2A321304530000EB9B4 /* Preferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Preferences.h; path = "Example Apps/Example ObjC/Preferences.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2A421304531000EB9B4 /* Preferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Preferences.m; path = "Example Apps/Example ObjC/Preferences.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2A521304531000EB9B4 /* TextValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextValidator.h; path = "Example Apps/Example ObjC/TextValidator.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2A621304531000EB9B4 /* TextValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TextValidator.m; path = "Example Apps/Example ObjC/TextValidator.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2AA21304567000EB9B4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = "Example Apps/Example ObjC/Base.lproj/ConnectionTCPTableViewController.storyboard"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2AC21304567000EB9B4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = "Example Apps/Example ObjC/Base.lproj/Main.storyboard"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2AE21304567000EB9B4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = "Example Apps/Example ObjC/Base.lproj/ConnectionIAPTableViewController.storyboard"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2B221304580000EB9B4 /* ConnectionContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionContainerViewController.h; path = "Example Apps/Example ObjC/ConnectionContainerViewController.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2B321304580000EB9B4 /* ConnectionTCPTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionTCPTableViewController.h; path = "Example Apps/Example ObjC/ConnectionTCPTableViewController.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2B421304580000EB9B4 /* ConnectionIAPTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionIAPTableViewController.m; path = "Example Apps/Example ObjC/ConnectionIAPTableViewController.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2B521304581000EB9B4 /* ConnectionContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionContainerViewController.m; path = "Example Apps/Example ObjC/ConnectionContainerViewController.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2B621304581000EB9B4 /* ConnectionTCPTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionTCPTableViewController.m; path = "Example Apps/Example ObjC/ConnectionTCPTableViewController.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2B721304581000EB9B4 /* ConnectionIAPTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionIAPTableViewController.h; path = "Example Apps/Example ObjC/ConnectionIAPTableViewController.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2BB21304598000EB9B4 /* ConnectionAnimatedTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionAnimatedTransition.h; path = "Example Apps/Example ObjC/ConnectionAnimatedTransition.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2BC21304598000EB9B4 /* ConnectionAnimatedTransition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionAnimatedTransition.m; path = "Example Apps/Example ObjC/ConnectionAnimatedTransition.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2BD21304598000EB9B4 /* ConnectionTransitionContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionTransitionContext.h; path = "Example Apps/Example ObjC/ConnectionTransitionContext.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2BE21304598000EB9B4 /* ConnectionTransitionContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionTransitionContext.m; path = "Example Apps/Example ObjC/ConnectionTransitionContext.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2C1213045EB000EB9B4 /* AppConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppConstants.h; path = "Example Apps/Shared/AppConstants.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2C2213045EB000EB9B4 /* AppConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppConstants.m; path = "Example Apps/Shared/AppConstants.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2C5213045F1000EB9B4 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "Example Apps/Shared/Images.xcassets"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2C82130463E000EB9B4 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = "Example Apps/Example ObjC/AppDelegate.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2C92130463F000EB9B4 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = "Example Apps/Example ObjC/AppDelegate.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2CB2130464D000EB9B4 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "Example Apps/Example ObjC/main.m"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2CD21304654000EB9B4 /* SmartDeviceLink-Example-ObjC-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "SmartDeviceLink-Example-ObjC-Info.plist"; path = "Example Apps/Example ObjC/SmartDeviceLink-Example-ObjC-Info.plist"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D02130466D000EB9B4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Example Apps/Example ObjC/Base.lproj/LaunchScreen.xib"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D221304745000EB9B4 /* ButtonManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ButtonManager.swift; path = "Example Apps/Example Swift/ButtonManager.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D321304745000EB9B4 /* ProxyManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProxyManager.swift; path = "Example Apps/Example Swift/ProxyManager.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D421304746000EB9B4 /* AlertManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AlertManager.swift; path = "Example Apps/Example Swift/AlertManager.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D521304746000EB9B4 /* RPCPermissionsManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RPCPermissionsManager.swift; path = "Example Apps/Example Swift/RPCPermissionsManager.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D621304746000EB9B4 /* AudioManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AudioManager.swift; path = "Example Apps/Example Swift/AudioManager.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D721304746000EB9B4 /* PerformInteractionManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PerformInteractionManager.swift; path = "Example Apps/Example Swift/PerformInteractionManager.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D821304746000EB9B4 /* MenuManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MenuManager.swift; path = "Example Apps/Example Swift/MenuManager.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2D921304746000EB9B4 /* VehicleDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VehicleDataManager.swift; path = "Example Apps/Example Swift/VehicleDataManager.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2E221304761000EB9B4 /* AppUserDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppUserDefaults.swift; path = "Example Apps/Example Swift/AppUserDefaults.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2E321304761000EB9B4 /* Protocol+ProxyManagerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Protocol+ProxyManagerDelegate.swift"; path = "Example Apps/Example Swift/Protocol+ProxyManagerDelegate.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2E421304761000EB9B4 /* TextValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TextValidator.swift; path = "Example Apps/Example Swift/TextValidator.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2E82130479C000EB9B4 /* ConnectionContainerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ConnectionContainerViewController.swift; path = "Example Apps/Example Swift/ConnectionContainerViewController.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2E92130479C000EB9B4 /* ConnectionTCPTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ConnectionTCPTableViewController.swift; path = "Example Apps/Example Swift/ConnectionTCPTableViewController.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2EA2130479C000EB9B4 /* ConnectionIAPTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ConnectionIAPTableViewController.swift; path = "Example Apps/Example Swift/ConnectionIAPTableViewController.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2EE213047AB000EB9B4 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = "Example Apps/Example Swift/Main.storyboard"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2EF213047AB000EB9B4 /* ConnectionIAPTableViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = ConnectionIAPTableViewController.storyboard; path = "Example Apps/Example Swift/ConnectionIAPTableViewController.storyboard"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2F0213047AB000EB9B4 /* ConnectionTCPTableViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = ConnectionTCPTableViewController.storyboard; path = "Example Apps/Example Swift/ConnectionTCPTableViewController.storyboard"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2F4213047B2000EB9B4 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = LaunchScreen.xib; path = "Example Apps/Example Swift/LaunchScreen.xib"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2F6213047C1000EB9B4 /* SmartDeviceLink-Example-Swift-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "SmartDeviceLink-Example-Swift-Bridging-Header.h"; path = "Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2F7213047C1000EB9B4 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = "Example Apps/Example Swift/AppDelegate.swift"; sourceTree = SOURCE_ROOT; };
+ 5D1FF2F92130480C000EB9B4 /* SmartDeviceLink-Example-Swift-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "SmartDeviceLink-Example-Swift-Info.plist"; path = "Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist"; sourceTree = SOURCE_ROOT; };
5D293AFC1FE078A9000CBD7E /* SDLCarWindowViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLCarWindowViewController.h; sourceTree = "<group>"; };
5D293AFD1FE078A9000CBD7E /* SDLCarWindowViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLCarWindowViewController.m; sourceTree = "<group>"; };
5D2F58071D0717D5001085CE /* SDLManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLManagerDelegate.h; sourceTree = "<group>"; };
@@ -1665,6 +1968,8 @@
5D339CEE207C08BA000CC364 /* SDLVoiceCommand.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLVoiceCommand.m; sourceTree = "<group>"; };
5D339CF1207C0ACE000CC364 /* SDLMenuManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLMenuManager.h; sourceTree = "<group>"; };
5D339CF2207C0ACE000CC364 /* SDLMenuManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLMenuManager.m; sourceTree = "<group>"; };
+ 5D3E420820EAAD6500D8C622 /* SDLTPMS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLTPMS.h; sourceTree = "<group>"; };
+ 5D3E420920EAAD6500D8C622 /* SDLTPMS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLTPMS.m; sourceTree = "<group>"; };
5D3E48731D6F3B330000BFEF /* SDLAsynchronousOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLAsynchronousOperation.h; sourceTree = "<group>"; };
5D3E48741D6F3B330000BFEF /* SDLAsynchronousOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAsynchronousOperation.m; sourceTree = "<group>"; };
5D3E48791D6F888E0000BFEF /* SDLRPCResponseNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLRPCResponseNotification.h; sourceTree = "<group>"; };
@@ -1674,10 +1979,6 @@
5D3E48C91D7722FE0000BFEF /* NSBundle+SDLBundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+SDLBundle.h"; sourceTree = "<group>"; };
5D3E48CA1D7722FE0000BFEF /* NSBundle+SDLBundle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+SDLBundle.m"; sourceTree = "<group>"; };
5D4019AF1A76EC350006B0C2 /* SDL Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SDL Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 5D4029D31A76F0340006B0C2 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SmartDeviceLink_Example/Images.xcassets; sourceTree = SOURCE_ROOT; };
- 5D4029D51A76F0410006B0C2 /* SmartDeviceLink-Example-ObjC-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "SmartDeviceLink-Example-ObjC-Info.plist"; path = "SmartDeviceLink_Example/SmartDeviceLink-Example-ObjC-Info.plist"; sourceTree = SOURCE_ROOT; };
- 5D4029E01A76F0760006B0C2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = SmartDeviceLink_Example/Base.lproj/LaunchScreen.xib; sourceTree = SOURCE_ROOT; };
- 5D4029E21A76F0760006B0C2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = SmartDeviceLink_Example/Base.lproj/Main.storyboard; sourceTree = SOURCE_ROOT; };
5D4346461E6F0BDA00B639C6 /* SDLLogFileModuleSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLLogFileModuleSpec.m; path = LoggingSpecs/SDLLogFileModuleSpec.m; sourceTree = "<group>"; };
5D43465A1E6F154400B639C6 /* SDLLogConfigurationSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLLogConfigurationSpec.m; path = LoggingSpecs/SDLLogConfigurationSpec.m; sourceTree = "<group>"; };
5D4346631E6F38E600B639C6 /* SmartDeviceLinkSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SmartDeviceLinkSwift.h; sourceTree = "<group>"; };
@@ -1695,14 +1996,6 @@
5D46310F1F2135850092EFDC /* SDLControlFramePayloadConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLControlFramePayloadConstants.m; sourceTree = "<group>"; };
5D4631121F2136B60092EFDC /* SDLControlFramePayloadNak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLControlFramePayloadNak.h; sourceTree = "<group>"; };
5D4631131F2136B60092EFDC /* SDLControlFramePayloadNak.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLControlFramePayloadNak.m; sourceTree = "<group>"; };
- 5D48329B1A8EA33D00252386 /* Preferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Preferences.h; path = SmartDeviceLink_Example/Classes/Preferences.h; sourceTree = SOURCE_ROOT; };
- 5D48329C1A8EA33D00252386 /* Preferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Preferences.m; path = SmartDeviceLink_Example/Classes/Preferences.m; sourceTree = SOURCE_ROOT; };
- 5D48329F1A92868E00252386 /* ProxyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProxyManager.h; path = SmartDeviceLink_Example/Classes/ProxyManager.h; sourceTree = SOURCE_ROOT; };
- 5D4832A01A92868E00252386 /* ProxyManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProxyManager.m; path = SmartDeviceLink_Example/Classes/ProxyManager.m; sourceTree = SOURCE_ROOT; };
- 5D4832A31A94F90D00252386 /* ConnectionTransitionContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionTransitionContext.h; path = SmartDeviceLink_Example/Classes/ConnectionTransitionContext.h; sourceTree = SOURCE_ROOT; };
- 5D4832A41A94F90D00252386 /* ConnectionTransitionContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionTransitionContext.m; path = SmartDeviceLink_Example/Classes/ConnectionTransitionContext.m; sourceTree = SOURCE_ROOT; };
- 5D4832A61A95191B00252386 /* ConnectionAnimatedTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionAnimatedTransition.h; path = SmartDeviceLink_Example/Classes/ConnectionAnimatedTransition.h; sourceTree = SOURCE_ROOT; };
- 5D4832A71A95191B00252386 /* ConnectionAnimatedTransition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionAnimatedTransition.m; path = SmartDeviceLink_Example/Classes/ConnectionAnimatedTransition.m; sourceTree = SOURCE_ROOT; };
5D4D67AA1D2ED37A00468B4A /* SDLNotificationDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLNotificationDispatcher.h; sourceTree = "<group>"; };
5D4D67AB1D2ED37A00468B4A /* SDLNotificationDispatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLNotificationDispatcher.m; sourceTree = "<group>"; };
5D4D67AE1D2FE2F900468B4A /* SDLResponseDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLResponseDispatcher.h; sourceTree = "<group>"; };
@@ -1713,9 +2006,6 @@
5D535DC41B72473800CF7760 /* SDLGlobals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLGlobals.m; sourceTree = "<group>"; };
5D53C46B1B7A99B9003526EA /* SDLStreamingMediaManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLStreamingMediaManager.h; sourceTree = "<group>"; };
5D53C46C1B7A99B9003526EA /* SDLStreamingMediaManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingMediaManager.m; sourceTree = "<group>"; };
- 5D59350B1A855EB300687FB9 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = SmartDeviceLink_Example/AppDelegate.h; sourceTree = SOURCE_ROOT; };
- 5D59350C1A855EB300687FB9 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = SmartDeviceLink_Example/AppDelegate.m; sourceTree = SOURCE_ROOT; };
- 5D5935111A855EBE00687FB9 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = SmartDeviceLink_Example/Classes/main.m; sourceTree = SOURCE_ROOT; };
5D59DD461B14FDEE00BE744D /* SDLLockScreenStatusManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLLockScreenStatusManagerSpec.m; path = ProxySpecs/SDLLockScreenStatusManagerSpec.m; sourceTree = "<group>"; };
5D5DBF071D48E39C00D4F914 /* FBSnapshotTestCase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FBSnapshotTestCase.framework; path = sdl_ios/Carthage/Build/iOS/FBSnapshotTestCase.framework; sourceTree = "<group>"; };
5D5DBF0A1D48E5E600D4F914 /* SDLLockScreenViewControllerSnapshotTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLLockScreenViewControllerSnapshotTests.m; path = DevAPISpecs/SDLLockScreenViewControllerSnapshotTests.m; sourceTree = "<group>"; };
@@ -2207,6 +2497,9 @@
5D61FC251A84238C00846EE7 /* SDLWarningLightStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLWarningLightStatus.m; sourceTree = "<group>"; };
5D61FC261A84238C00846EE7 /* SDLWiperStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLWiperStatus.h; sourceTree = "<group>"; };
5D61FC271A84238C00846EE7 /* SDLWiperStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLWiperStatus.m; sourceTree = "<group>"; };
+ 5D64FE6C20DA9CE600792F9F /* SDLVideoStreamingStateSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLVideoStreamingStateSpec.m; sourceTree = "<group>"; };
+ 5D64FE6E20DA9E4300792F9F /* SDLStreamingVideoLifecycleManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLStreamingVideoLifecycleManagerSpec.m; path = DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m; sourceTree = "<group>"; };
+ 5D64FE7020DA9E6700792F9F /* SDLStreamingAudioLifecycleManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLStreamingAudioLifecycleManagerSpec.m; path = DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m; sourceTree = "<group>"; };
5D6CC8EE1C610E660027F60A /* SDLSecurityType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLSecurityType.h; sourceTree = "<group>"; };
5D6EB4CB1BF28DC600693731 /* NSMapTable+SubscriptingSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSMapTable+SubscriptingSpec.m"; path = "DevAPISpecs/NSMapTable+SubscriptingSpec.m"; sourceTree = "<group>"; };
5D6F7A2C1BC5650B0070BF37 /* SDLLifecycleConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLLifecycleConfiguration.h; sourceTree = "<group>"; };
@@ -2246,6 +2539,30 @@
5D8B17511AC9E11B006A6E1C /* SDLDialNumberResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLDialNumberResponse.h; sourceTree = "<group>"; };
5D8B17521AC9E11B006A6E1C /* SDLDialNumberResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLDialNumberResponse.m; sourceTree = "<group>"; };
5D8B17551AC9E399006A6E1C /* SDLDialNumberSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLDialNumberSpec.m; sourceTree = "<group>"; };
+ 5D92934B20AF4BEF00FCC775 /* SDLRGBColor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLRGBColor.h; sourceTree = "<group>"; };
+ 5D92934C20AF4BEF00FCC775 /* SDLRGBColor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLRGBColor.m; sourceTree = "<group>"; };
+ 5D92934F20AF526200FCC775 /* SDLRGBColorSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLRGBColorSpec.m; sourceTree = "<group>"; };
+ 5D92935120B2F76500FCC775 /* SDLTemplateColorScheme.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLTemplateColorScheme.h; sourceTree = "<group>"; };
+ 5D92935220B2F76500FCC775 /* SDLTemplateColorScheme.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLTemplateColorScheme.m; sourceTree = "<group>"; };
+ 5D92935520B2FD7300FCC775 /* SDLTemplateColorSchemeSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLTemplateColorSchemeSpec.m; sourceTree = "<group>"; };
+ 5D92935820B33D4F00FCC775 /* SDLChoiceCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLChoiceCell.h; sourceTree = "<group>"; };
+ 5D92935920B33D4F00FCC775 /* SDLChoiceCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLChoiceCell.m; sourceTree = "<group>"; };
+ 5D92935C20B33FF700FCC775 /* SDLChoiceSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLChoiceSet.h; sourceTree = "<group>"; };
+ 5D92935D20B33FF700FCC775 /* SDLChoiceSet.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLChoiceSet.m; sourceTree = "<group>"; };
+ 5D92936020B354BE00FCC775 /* SDLChoiceSetDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLChoiceSetDelegate.h; sourceTree = "<group>"; };
+ 5D92936220B3551600FCC775 /* SDLKeyboardDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLKeyboardDelegate.h; sourceTree = "<group>"; };
+ 5D92936620B3601700FCC775 /* SDLChoiceSetManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLChoiceSetManager.h; sourceTree = "<group>"; };
+ 5D92936720B3601700FCC775 /* SDLChoiceSetManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLChoiceSetManager.m; sourceTree = "<group>"; };
+ 5D92936E20B5E0E500FCC775 /* SDLDeleteChoicesOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLDeleteChoicesOperation.h; sourceTree = "<group>"; };
+ 5D92936F20B5E0E500FCC775 /* SDLDeleteChoicesOperation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLDeleteChoicesOperation.m; sourceTree = "<group>"; };
+ 5D92937220B5EEA200FCC775 /* SDLPreloadChoicesOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLPreloadChoicesOperation.h; sourceTree = "<group>"; };
+ 5D92937320B5EEA200FCC775 /* SDLPreloadChoicesOperation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLPreloadChoicesOperation.m; sourceTree = "<group>"; };
+ 5D92937620B6FB6200FCC775 /* SDLPresentChoiceSetOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLPresentChoiceSetOperation.h; sourceTree = "<group>"; };
+ 5D92937720B6FB6200FCC775 /* SDLPresentChoiceSetOperation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLPresentChoiceSetOperation.m; sourceTree = "<group>"; };
+ 5D92937A20B70A3E00FCC775 /* SDLPresentKeyboardOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLPresentKeyboardOperation.h; sourceTree = "<group>"; };
+ 5D92937B20B70A3E00FCC775 /* SDLPresentKeyboardOperation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLPresentKeyboardOperation.m; sourceTree = "<group>"; };
+ 5D92937E20B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLCheckChoiceVROptionalOperation.h; sourceTree = "<group>"; };
+ 5D92937F20B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLCheckChoiceVROptionalOperation.m; sourceTree = "<group>"; };
5D9F50721BE7DD4C00FEF399 /* testFileJSON.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = testFileJSON.json; sourceTree = "<group>"; };
5D9F50731BE7DD4C00FEF399 /* testImageBMP.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = testImageBMP.bmp; sourceTree = "<group>"; };
5D9F50741BE7DD4C00FEF399 /* testImageJPEG.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = testImageJPEG.jpeg; sourceTree = "<group>"; };
@@ -2382,6 +2699,17 @@
5DD67CC11E68AE82009CD394 /* SDLLogFileModuleMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLLogFileModuleMap.h; sourceTree = "<group>"; };
5DD67CC21E68AE82009CD394 /* SDLLogFileModuleMap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLLogFileModuleMap.m; sourceTree = "<group>"; };
5DD67CC51E68B568009CD394 /* SDLLogMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLLogMacros.h; sourceTree = "<group>"; };
+ 5DD8406020FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLElectronicParkBrakeStatus.h; sourceTree = "<group>"; };
+ 5DD8406120FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLElectronicParkBrakeStatus.m; sourceTree = "<group>"; };
+ 5DD8406420FCE21A0082CE04 /* SDLElectronicParkBrakeStatusSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLElectronicParkBrakeStatusSpec.m; sourceTree = "<group>"; };
+ 5DE35E4420CAFC5D0034BE5A /* SDLChoiceCellSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLChoiceCellSpec.m; path = DevAPISpecs/SDLChoiceCellSpec.m; sourceTree = "<group>"; };
+ 5DE35E4620CB0AB90034BE5A /* SDLChoiceSetSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLChoiceSetSpec.m; path = DevAPISpecs/SDLChoiceSetSpec.m; sourceTree = "<group>"; };
+ 5DE35E4920CB1BF70034BE5A /* SDLChoiceSetManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLChoiceSetManagerSpec.m; path = DevAPISpecs/SDLChoiceSetManagerSpec.m; sourceTree = "<group>"; };
+ 5DE35E4B20CB1C1C0034BE5A /* SDLCheckChoiceVROptionalOperationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLCheckChoiceVROptionalOperationSpec.m; path = DevAPISpecs/SDLCheckChoiceVROptionalOperationSpec.m; sourceTree = "<group>"; };
+ 5DE35E4D20CB1C2C0034BE5A /* SDLDeleteChoicesOperationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLDeleteChoicesOperationSpec.m; path = DevAPISpecs/SDLDeleteChoicesOperationSpec.m; sourceTree = "<group>"; };
+ 5DE35E5120CB1C490034BE5A /* SDLPreloadChoicesOperationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLPreloadChoicesOperationSpec.m; path = DevAPISpecs/SDLPreloadChoicesOperationSpec.m; sourceTree = "<group>"; };
+ 5DE35E5320CB1C590034BE5A /* SDLPresentChoiceSetOperationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLPresentChoiceSetOperationSpec.m; path = DevAPISpecs/SDLPresentChoiceSetOperationSpec.m; sourceTree = "<group>"; };
+ 5DE35E5520CB1C680034BE5A /* SDLPresentKeyboardOperationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLPresentKeyboardOperationSpec.m; path = DevAPISpecs/SDLPresentKeyboardOperationSpec.m; sourceTree = "<group>"; };
5DE3729F1ACB2ED300849FAA /* SDLHMICapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLHMICapabilities.h; sourceTree = "<group>"; };
5DE372A01ACB2ED300849FAA /* SDLHMICapabilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLHMICapabilities.m; sourceTree = "<group>"; };
5DE372A31ACB336600849FAA /* SDLHMICapabilitiesSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLHMICapabilitiesSpec.m; sourceTree = "<group>"; };
@@ -2397,58 +2725,38 @@
5DF40B25208FA7DE00DD6FDA /* SDLMenuManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLMenuManagerSpec.m; path = DevAPISpecs/SDLMenuManagerSpec.m; sourceTree = "<group>"; };
5DF40B27208FDA9700DD6FDA /* SDLVoiceCommandManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLVoiceCommandManagerSpec.m; path = DevAPISpecs/SDLVoiceCommandManagerSpec.m; sourceTree = "<group>"; };
5DFFB9141BD7C89700DB3F04 /* SDLConnectionManagerType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLConnectionManagerType.h; sourceTree = "<group>"; };
- 8800871A20A6338C008E1EA0 /* ButtonManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ButtonManager.h; sourceTree = "<group>"; };
- 8800871B20A6338C008E1EA0 /* ButtonManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ButtonManager.m; sourceTree = "<group>"; };
- 8803A0AB208E2907009FDC02 /* AudioManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioManager.h; sourceTree = "<group>"; };
- 8803A0AC208E2907009FDC02 /* AudioManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AudioManager.m; sourceTree = "<group>"; };
- 8803A0B0208E7CA4009FDC02 /* VehicleDataManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VehicleDataManager.h; sourceTree = "<group>"; };
- 8803A0B1208E7CA4009FDC02 /* VehicleDataManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VehicleDataManager.m; sourceTree = "<group>"; };
+ 880245A220F79C3400ED195B /* SDLFileManagerConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLFileManagerConfiguration.h; sourceTree = "<group>"; };
+ 880245A320F79C3400ED195B /* SDLFileManagerConfiguration.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLFileManagerConfiguration.m; sourceTree = "<group>"; };
880E35B22088F75A00181259 /* SDLSystemCapabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSystemCapabilityManager.m; sourceTree = "<group>"; };
880E35B32088F75A00181259 /* SDLSystemCapabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLSystemCapabilityManager.h; sourceTree = "<group>"; };
880E35B72088F78E00181259 /* SDLSystemCapabilityManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSystemCapabilityManagerSpec.m; sourceTree = "<group>"; };
- 8814AEA520AB65FC00466E0F /* MenuManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MenuManager.h; sourceTree = "<group>"; };
- 8814AEA620AB65FC00466E0F /* MenuManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MenuManager.m; sourceTree = "<group>"; };
- 8814AEA820AB663800466E0F /* PerformInteractionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PerformInteractionManager.h; sourceTree = "<group>"; };
- 8814AEA920AB663800466E0F /* PerformInteractionManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PerformInteractionManager.m; sourceTree = "<group>"; };
- 8814AEAB20AB667B00466E0F /* PerformInteractionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformInteractionManager.swift; sourceTree = "<group>"; };
- 88166AFF207E41E900076236 /* MenuManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuManager.swift; sourceTree = "<group>"; };
- 88295697207CF68800EF056C /* SDL Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SDL Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 88295698207CF68800EF056C /* SmartDeviceLink-Example-Swift-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "SmartDeviceLink-Example-Swift-Info.plist"; path = "/Users/nicolelivioradio.com/sdl_ios/SmartDeviceLink-Example-Swift-Info.plist"; sourceTree = "<absolute>"; };
- 8829569C207CFD0D00EF056C /* SmartDeviceLink-Example-Swift-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SmartDeviceLink-Example-Swift-Bridging-Header.h"; sourceTree = "<group>"; };
- 8829569D207CFD0E00EF056C /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+ 8818ADD62100FC18007D6F19 /* SDLTurnSignal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLTurnSignal.h; sourceTree = "<group>"; };
+ 8818ADD72100FC18007D6F19 /* SDLTurnSignal.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLTurnSignal.m; sourceTree = "<group>"; };
+ 8818ADDC2100FE0C007D6F19 /* SDLTurnSignalSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLTurnSignalSpec.m; sourceTree = "<group>"; };
+ 88295697207CF68800EF056C /* SDL Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; name = "SDL Example.app"; path = "SDL Example Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; };
8850DB5E1F4475D30053A48D /* TestMultipleFilesConnectionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestMultipleFilesConnectionManager.h; sourceTree = "<group>"; };
8850DB5F1F4475D30053A48D /* TestMultipleFilesConnectionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestMultipleFilesConnectionManager.m; sourceTree = "<group>"; };
- 8863B596207D2388002D6459 /* AppConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppConstants.h; sourceTree = "<group>"; };
- 8863B597207D2388002D6459 /* AppConstants.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppConstants.m; sourceTree = "<group>"; };
- 8870C3E82086623F0070E018 /* AudioManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioManager.swift; sourceTree = "<group>"; };
8877F5EA1F34A3BE00DC128A /* SDLSendHapticDataSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSendHapticDataSpec.m; sourceTree = "<group>"; };
8877F5EC1F34A72200DC128A /* SDLSendHapticDataResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLSendHapticDataResponse.h; sourceTree = "<group>"; };
8877F5ED1F34A72200DC128A /* SDLSendHapticDataResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSendHapticDataResponse.m; sourceTree = "<group>"; };
8877F5F01F34AA2D00DC128A /* SDLSendHapticDataResponseSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSendHapticDataResponseSpec.m; sourceTree = "<group>"; };
88802FEF20853AE600E9EBC6 /* SmartDeviceLinkSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SmartDeviceLinkSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 888D178D207E7F0E008E9F8F /* ButtonManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonManager.swift; sourceTree = "<group>"; };
- 88A0AA55207CFE5C0075132C /* AppUserDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUserDefaults.swift; sourceTree = "<group>"; };
- 88A0AA57207CFE650075132C /* ProxyManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProxyManager.swift; sourceTree = "<group>"; };
- 88A0AA59207CFE740075132C /* ConnectionContainerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectionContainerViewController.swift; sourceTree = "<group>"; };
- 88A0AA5A207CFE740075132C /* ConnectionIAPTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectionIAPTableViewController.swift; sourceTree = "<group>"; };
- 88A0AA5B207CFE740075132C /* ConnectionTCPTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectionTCPTableViewController.swift; sourceTree = "<group>"; };
- 88A0AA61207CFF970075132C /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = "<group>"; };
- 88A0AA62207CFF970075132C /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
- 88A0AA63207CFF970075132C /* ConnectionIAPTableViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = ConnectionIAPTableViewController.storyboard; sourceTree = "<group>"; };
- 88A0AA64207CFF980075132C /* ConnectionTCPTableViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = ConnectionTCPTableViewController.storyboard; sourceTree = "<group>"; };
+ 8886EB972111F4FA008294A5 /* SDLFileManagerConfigurationSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLFileManagerConfigurationSpec.m; sourceTree = "<group>"; };
+ 88A1CF1D21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLifecycleConfigurationUpdateSpec.m; sourceTree = "<group>"; };
+ 88A795D02106787400056542 /* SDLStaticIconName.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLStaticIconName.h; sourceTree = "<group>"; };
+ 88A795D12106787400056542 /* SDLStaticIconName.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLStaticIconName.m; sourceTree = "<group>"; };
+ 88A795D4210678E000056542 /* SDLStaticIconNameSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLStaticIconNameSpec.m; sourceTree = "<group>"; };
+ 88B3BF9620DA859800943565 /* SDLFuelType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLFuelType.h; sourceTree = "<group>"; };
+ 88B3BF9720DA859800943565 /* SDLFuelType.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLFuelType.m; sourceTree = "<group>"; };
+ 88B3BF9A20DA8BBC00943565 /* SDLFuelRange.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLFuelRange.h; sourceTree = "<group>"; };
+ 88B3BF9B20DA8BBC00943565 /* SDLFuelRange.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLFuelRange.m; sourceTree = "<group>"; };
+ 88B3BF9F20DA8FD000943565 /* SDLFuelTypeSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLFuelTypeSpec.m; sourceTree = "<group>"; };
+ 88B3BFA120DA911E00943565 /* SDLFuelRangeSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLFuelRangeSpec.m; sourceTree = "<group>"; };
88B848C11F45E1A600DED768 /* TestResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestResponse.h; sourceTree = "<group>"; };
88B848C21F45E1A600DED768 /* TestResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestResponse.m; sourceTree = "<group>"; };
88B848C71F462E3600DED768 /* TestFileProgressResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFileProgressResponse.h; sourceTree = "<group>"; };
88B848C81F462E3600DED768 /* TestFileProgressResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestFileProgressResponse.m; sourceTree = "<group>"; };
- 88B849C32080F4AF002A034D /* RPCPermissionsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RPCPermissionsManager.swift; sourceTree = "<group>"; };
- 88B849C620812412002A034D /* VehicleDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleDataManager.swift; sourceTree = "<group>"; };
88D2AAE31F682BB20078D5B2 /* SDLLogConstantsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLLogConstantsSpec.m; sourceTree = "<group>"; };
- 88DA6D0E209794A400AD8297 /* AlertManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AlertManager.h; sourceTree = "<group>"; };
- 88DA6D0F209794A400AD8297 /* AlertManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AlertManager.m; sourceTree = "<group>"; };
- 88DE80B520A5C8DD00BA9CF0 /* RPCPermissionsManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RPCPermissionsManager.h; sourceTree = "<group>"; };
- 88DE80B620A5C8DD00BA9CF0 /* RPCPermissionsManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RPCPermissionsManager.m; sourceTree = "<group>"; };
- 88DFB051207F8DF50079D19D /* Protocol+ProxyManagerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Protocol+ProxyManagerDelegate.swift"; sourceTree = "<group>"; };
- 88DFB054207F96EE0079D19D /* AlertManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertManager.swift; sourceTree = "<group>"; };
88EED8361F33AE1700E6C42E /* SDLHapticRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLHapticRect.h; sourceTree = "<group>"; };
88EED8371F33AE1700E6C42E /* SDLHapticRect.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLHapticRect.m; sourceTree = "<group>"; };
88EED83A1F33BECB00E6C42E /* SDLHapticRectSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLHapticRectSpec.m; sourceTree = "<group>"; };
@@ -2487,9 +2795,6 @@
DA6223BB1E7B088200878689 /* CVPixelBufferRef+SDLUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CVPixelBufferRef+SDLUtil.h"; sourceTree = "<group>"; };
DA6223BC1E7B088200878689 /* CVPixelBufferRef+SDLUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CVPixelBufferRef+SDLUtil.m"; sourceTree = "<group>"; };
DA661E2B1E553E7E001C1345 /* SDLStreamingMediaManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingMediaManagerSpec.m; sourceTree = "<group>"; };
- DA8966E91E56939F00413EAB /* SDLStreamingMediaLifecycleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLStreamingMediaLifecycleManager.h; sourceTree = "<group>"; };
- DA8966EA1E56939F00413EAB /* SDLStreamingMediaLifecycleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingMediaLifecycleManager.m; sourceTree = "<group>"; };
- DA8966EE1E5693E300413EAB /* SDLStreamingMediaLifecycleManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingMediaLifecycleManagerSpec.m; sourceTree = "<group>"; };
DA8966F11E56973700413EAB /* SDLStreamingMediaManagerConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLStreamingMediaManagerConstants.h; sourceTree = "<group>"; };
DA8966F31E56977C00413EAB /* SDLStreamingMediaManagerConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingMediaManagerConstants.m; sourceTree = "<group>"; };
DA96C0651D4D4F730022F520 /* SDLAppInfoSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAppInfoSpec.m; sourceTree = "<group>"; };
@@ -2559,6 +2864,21 @@
E9C32B991AB20C5900F283AF /* EAAccessory+SDLProtocols.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EAAccessory+SDLProtocols.m"; sourceTree = "<group>"; };
E9C32B9A1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EAAccessoryManager+SDLProtocols.h"; sourceTree = "<group>"; };
E9C32B9B1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EAAccessoryManager+SDLProtocols.m"; sourceTree = "<group>"; };
+ EE38C0C1211C43E100E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSecondaryTransportPrimaryProtocolHandler.h; sourceTree = "<group>"; };
+ EE38C0C2211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSecondaryTransportPrimaryProtocolHandler.m; sourceTree = "<group>"; };
+ EE460E072066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLControlFramePayloadTransportEventUpdateSpec.m; path = ControlFramePayloadSpecs/SDLControlFramePayloadTransportEventUpdateSpec.m; sourceTree = "<group>"; };
+ EE460E092066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m; path = ControlFramePayloadSpecs/SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m; sourceTree = "<group>"; };
+ EE5D1B32208EBCA900D17216 /* SDLTCPTransportSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLTCPTransportSpec.m; sourceTree = "<group>"; };
+ EE6CBF872064CAEE00EEE0CA /* SDLStreamingProtocolDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLStreamingProtocolDelegate.h; sourceTree = "<group>"; };
+ EE798CA32056120F008EDE8E /* SDLSecondaryTransportManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLSecondaryTransportManager.h; sourceTree = "<group>"; };
+ EE798CA520561217008EDE8E /* SDLSecondaryTransportManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSecondaryTransportManager.m; sourceTree = "<group>"; };
+ EE7B6121205BF69C00E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLControlFramePayloadRegisterSecondaryTransportNak.h; sourceTree = "<group>"; };
+ EE7B6122205BF6C800E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLControlFramePayloadRegisterSecondaryTransportNak.m; sourceTree = "<group>"; };
+ EEA41D43210BA89B0006CB6E /* TestTCPServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TestTCPServer.h; path = TestUtilities/TestTCPServer.h; sourceTree = "<group>"; };
+ EEA41D44210BA8CF0006CB6E /* TestTCPServer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TestTCPServer.m; path = TestUtilities/TestTCPServer.m; sourceTree = "<group>"; };
+ EEB1932D205028B700A8940C /* SDLControlFramePayloadTransportEventUpdate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLControlFramePayloadTransportEventUpdate.h; sourceTree = "<group>"; };
+ EEB1932F205028BE00A8940C /* SDLControlFramePayloadTransportEventUpdate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLControlFramePayloadTransportEventUpdate.m; sourceTree = "<group>"; };
+ EEB2537D2067D3E80069584E /* SDLSecondaryTransportManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLSecondaryTransportManagerSpec.m; path = ProxySpecs/SDLSecondaryTransportManagerSpec.m; sourceTree = "<group>"; };
EED5C9FD1F4D18D100F04000 /* SDLH264Packetizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLH264Packetizer.h; sourceTree = "<group>"; };
EED5C9FF1F4D18DC00F04000 /* SDLRAWH264Packetizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLRAWH264Packetizer.h; sourceTree = "<group>"; };
EED5CA011F4D18EC00F04000 /* SDLRAWH264Packetizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLRAWH264Packetizer.m; sourceTree = "<group>"; };
@@ -2635,6 +2955,7 @@
162E81E21A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m */,
162E81E31A9BDE8A00906325 /* SDLAppHMITypeSpec.m */,
162E81E41A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m */,
+ 2BF2F85120ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m */,
162E81E51A9BDE8A00906325 /* SDLAudioStreamingStateSpec.m */,
162E81E61A9BDE8A00906325 /* SDLAudioTypeSpec.m */,
162E81E71A9BDE8A00906325 /* SDLBitsPerSampleSpec.m */,
@@ -2649,11 +2970,15 @@
162E81EF1A9BDE8A00906325 /* SDLDeviceLevelStatusSpec.m */,
162E81F01A9BDE8A00906325 /* SDLDimensionSpec.m */,
162E81F11A9BDE8A00906325 /* SDLDisplayTypeSpec.m */,
+ 1EAA475D2035B177000FE74B /* SDLDisplayModeSpec.m */,
+ 1EAA47612035B1AE000FE74B /* SDLDistanceUnitSpec.m */,
162E81F21A9BDE8A00906325 /* SDLDriverDistractionStateSpec.m */,
162E81F31A9BDE8A00906325 /* SDLECallConfirmationStatusSpec.m */,
+ 5DD8406420FCE21A0082CE04 /* SDLElectronicParkBrakeStatusSpec.m */,
162E81F41A9BDE8A00906325 /* SDLEmergencyEventTypeSpec.m */,
162E81F51A9BDE8A00906325 /* SDLFileTypeSpec.m */,
162E81F61A9BDE8A00906325 /* SDLFuelCutoffStatusSpec.m */,
+ 88B3BF9F20DA8FD000943565 /* SDLFuelTypeSpec.m */,
162E81F71A9BDE8A00906325 /* SDLGlobalProperySpec.m */,
162E81F81A9BDE8A00906325 /* SDLHMILevelSpec.m */,
162E81F91A9BDE8A00906325 /* SDLHMIZoneCapabilitiesSpec.m */,
@@ -2667,10 +2992,15 @@
162E82011A9BDE8A00906325 /* SDLKeypressModeSpec.m */,
162E82021A9BDE8A00906325 /* SDLLanguageSpec.m */,
162E82031A9BDE8A00906325 /* SDLLayoutModeSpec.m */,
+ 1EAA47712036AEF5000FE74B /* SDLLightNameSpec.m */,
+ 1EAA476F2036AE89000FE74B /* SDLLightStatusSpec.m */,
162E82041A9BDE8A00906325 /* SDLLockScreenStatusSpec.m */,
162E82051A9BDE8A00906325 /* SDLMaintenanceModeStatusSpec.m */,
+ 1EB59CCD202DC97900343A61 /* SDLMassageCushionSpec.m */,
+ 1EB59CC9202DC8E300343A61 /* SDLMassageZoneSpec.m */,
162E82061A9BDE8A00906325 /* SDLMediaClockFormatSpec.m */,
8BBEA6081F324832003EEA26 /* SDLMetadataTypeSpec.m */,
+ 1EB59CC7202DC86A00343A61 /* SDLModuleTypeSpec.m */,
162E82071A9BDE8A00906325 /* SDLPermissionStatusSpec.m */,
162E82081A9BDE8A00906325 /* SDLPowerModeQualificationStatusSpec.m */,
162E82091A9BDE8A00906325 /* SDLPowerModeStatusSpec.m */,
@@ -2684,6 +3014,8 @@
162E82111A9BDE8A00906325 /* SDLSamplingRateSpec.m */,
162E82121A9BDE8A00906325 /* SDLSoftButtonTypeSpec.m */,
162E82131A9BDE8A00906325 /* SDLSpeechCapabilitiesSpec.m */,
+ 1EB59CCF202DC9F200343A61 /* SDLSupportedSeatSpec.m */,
+ 88A795D4210678E000056542 /* SDLStaticIconNameSpec.m */,
162E82141A9BDE8A00906325 /* SDLSystemAction.m */,
5D0A9F901F15550400CC80DD /* SDLSystemCapabilityTypeSpec.m */,
162E82151A9BDE8A00906325 /* SDLSystemContextSpec.m */,
@@ -2693,6 +3025,7 @@
162E82191A9BDE8A00906325 /* SDLTimerModeSpec.m */,
162E821A1A9BDE8A00906325 /* SDLTouchTypeSpec.m */,
162E821B1A9BDE8A00906325 /* SDLTriggerSource.m */,
+ 8818ADDC2100FE0C007D6F19 /* SDLTurnSignalSpec.m */,
162E821C1A9BDE8A00906325 /* SDLUpdateModeSpec.m */,
162E821D1A9BDE8A00906325 /* SDLVehicleDataActiveStatusSpec.m */,
162E821E1A9BDE8A00906325 /* SDLVehicleDataEventStatusSpec.m */,
@@ -2709,6 +3042,8 @@
1EE8C4391F347D4D00FDC2CF /* SDLRadioStateSpec.m */,
1EE8C43B1F347EAE00FDC2CF /* SDLTemperatureUnitSpec.m */,
1EE8C43D1F347F0500FDC2CF /* SDLVentilationModeSpec.m */,
+ 5D64FE6C20DA9CE600792F9F /* SDLVideoStreamingStateSpec.m */,
+ 1EB59CD1202DCA9B00343A61 /* SDLMassageModeSpec.m */,
);
path = EnumSpecs;
sourceTree = "<group>";
@@ -2730,6 +3065,7 @@
162E82331A9BDE8A00906325 /* SDLOnLanguageChangeSpec.m */,
162E82341A9BDE8A00906325 /* SDLOnLockScreenStatusSpec.m */,
162E82351A9BDE8A00906325 /* SDLOnPermissionsChangeSpec.m */,
+ 1EAA470D2032BF1D000FE74B /* SDLOnRCStatusSpec.m */,
162E82361A9BDE8A00906325 /* SDLOnSyncPDataSpec.m */,
162E82371A9BDE8A00906325 /* SDLOnSystemRequestSpec.m */,
162E82381A9BDE8A00906325 /* SDLOnTBTClientStateSpec.m */,
@@ -2866,6 +3202,8 @@
children = (
162E828F1A9BDE8A00906325 /* SDLAirbagStatusSpec.m */,
DA96C0651D4D4F730022F520 /* SDLAppInfoSpec.m */,
+ 1EAA47772036BA74000FE74B /* SDLAudioControlCapabilitiesSpec.m */,
+ 1EAA47732036B31E000FE74B /* SDLAudioControlDataSpec.m */,
162E82901A9BDE8A00906325 /* SDLAudioPassThruCapabilitiesSpec.m */,
162E82911A9BDE8A00906325 /* SDLBeltStatusSpec.m */,
162E82921A9BDE8A00906325 /* SDLBodyInformationSpec.m */,
@@ -2881,17 +3219,27 @@
162E82991A9BDE8A00906325 /* SDLDisplayCapabilitiesSpec.m */,
162E829A1A9BDE8A00906325 /* SDLECallInfoSpec.m */,
162E829B1A9BDE8A00906325 /* SDLEmergencyEventSpec.m */,
+ 88B3BFA120DA911E00943565 /* SDLFuelRangeSpec.m */,
+ 1EAA47752036B847000FE74B /* SDLEqualizerSettingsSpec.m */,
162E829C1A9BDE8A00906325 /* SDLGPSDataSpec.m */,
88EED83A1F33BECB00E6C42E /* SDLHapticRectSpec.m */,
162E829D1A9BDE8A00906325 /* SDLHeadLampStatusSpec.m */,
5DE372A31ACB336600849FAA /* SDLHMICapabilitiesSpec.m */,
+ 1EAA47632035B231000FE74B /* SDLHMISettingsControlCapabilitiesSpec.m */,
+ 1EAA47572035AFD9000FE74B /* SDLHMISettingsControlDataSpec.m */,
162E829E1A9BDE8A00906325 /* SDLHMIPermissionsSpec.m */,
162E829F1A9BDE8A00906325 /* SDLImageFieldSpec.m */,
5DB202261F5F2D030061D189 /* SDLImageResolutionSpec.m */,
162E82A01A9BDE8A00906325 /* SDLImageSpec.m */,
162E82A11A9BDE8A00906325 /* SDLKeyboardPropertiesSpec.m */,
+ 1EAA476B2036A52F000FE74B /* SDLLightCapabilitiesSpec.m */,
+ 1EAA476920369ECC000FE74B /* SDLLightControlCapabilitiesSpec.m */,
+ 1EAA47652035B8D3000FE74B /* SDLLightControlDataSpec.m */,
+ 1EAA476720369BCF000FE74B /* SDLLightStateSpec.m */,
DA9F7EAD1DCC063400ACAE48 /* SDLLocationCoordinateSpec.m */,
DA9F7EAE1DCC063400ACAE48 /* SDLLocationDetailsSpec.m */,
+ 1EB59CD7202DCCD500343A61 /* SDLMassageCushionFirmnessSpec.m */,
+ 1EB59CD3202DCAE900343A61 /* SDLMassageModeDataSpec.m */,
162E82A21A9BDE8A00906325 /* SDLMenuParamsSpec.m */,
1EE8C4451F3837D200FDC2CF /* SDLModuleDataSpec.m */,
8B9376DA1F33656C009605C4 /* SDLMetadataTagsSpec.m */,
@@ -2907,10 +3255,16 @@
1EE8C44B1F385C7100FDC2CF /* SDLRDSDataSpec.m */,
1EE8C44F1F38629200FDC2CF /* SDLRemoteControlCapabilitiesSpec.m */,
5DADA7771F4E059E0084D17D /* SDLRectangleSpec.m */,
+ 5D92934F20AF526200FCC775 /* SDLRGBColorSpec.m */,
162E82A71A9BDE8A00906325 /* SDLScreenParamsSpec.m */,
+ 1E89B0E1203196B800A47992 /* SDLSeatControlCapabilitiesSpec.m */,
+ 1E89B0DD2031636000A47992 /* SDLSeatControlDataSpec.m */,
+ 1EB59CD9202DCEEC00343A61 /* SDLSeatMemoryActionSpec.m */,
162E82A81A9BDE8A00906325 /* SDLSingleTireStatusSpec.m */,
+ 1EAA47792036BD46000FE74B /* SDLSISDataSpec.m */,
162E82A91A9BDE8A00906325 /* SDLSoftButtonCapabilitiesSpec.m */,
162E82AA1A9BDE8A00906325 /* SDLSoftButtonSpec.m */,
+ 1EAA477F2036C2C9000FE74B /* SDLStationIDNumberSpec.m */,
162E82AB1A9BDE8A00906325 /* SDLStartTimeSpec.m */,
162E82AC1A9BDE8A00906325 /* SDLSyncMsgVersionSpec.m */,
5D0A9F961F1559EC00CC80DD /* SDLSystemCapabilitySpec.m */,
@@ -2921,6 +3275,7 @@
162E82B01A9BDE8A00906325 /* SDLTouchEventCapabilitiesSpec.m */,
162E82B11A9BDE8A00906325 /* SDLTouchEventSpec.m */,
162E82B21A9BDE8A00906325 /* SDLTTSChunkSpec.m */,
+ 5D92935520B2FD7300FCC775 /* SDLTemplateColorSchemeSpec.m */,
162E82B31A9BDE8A00906325 /* SDLTurnSpec.m */,
162E82B41A9BDE8A00906325 /* SDLVehicleDataResultSpec.m */,
162E82B51A9BDE8A00906325 /* SDLVehicleTypeSpec.m */,
@@ -2993,6 +3348,7 @@
5D0218EB1A8E795700D1BF62 /* UI */ = {
isa = PBXGroup;
children = (
+ 5D1FF2CF2130466D000EB9B4 /* LaunchScreen.xib */,
5D0218EC1A8E796100D1BF62 /* Connection */,
);
name = UI;
@@ -3003,12 +3359,12 @@
children = (
5D4832991A8EA27200252386 /* Storyboards */,
5D4832A21A94F8F100252386 /* Transition */,
- 5D0218FA1A8E7E1700D1BF62 /* ConnectionContainerViewController.h */,
- 5D0218FB1A8E7E1700D1BF62 /* ConnectionContainerViewController.m */,
- 5D0218F41A8E79C400D1BF62 /* ConnectionTCPTableViewController.h */,
- 5D0218F51A8E79C400D1BF62 /* ConnectionTCPTableViewController.m */,
- 5D0218FD1A8E9E0D00D1BF62 /* ConnectionIAPTableViewController.h */,
- 5D0218FE1A8E9E0D00D1BF62 /* ConnectionIAPTableViewController.m */,
+ 5D1FF2B221304580000EB9B4 /* ConnectionContainerViewController.h */,
+ 5D1FF2B521304581000EB9B4 /* ConnectionContainerViewController.m */,
+ 5D1FF2B721304581000EB9B4 /* ConnectionIAPTableViewController.h */,
+ 5D1FF2B421304580000EB9B4 /* ConnectionIAPTableViewController.m */,
+ 5D1FF2B321304580000EB9B4 /* ConnectionTCPTableViewController.h */,
+ 5D1FF2B621304581000EB9B4 /* ConnectionTCPTableViewController.m */,
);
name = Connection;
sourceTree = "<group>";
@@ -3038,6 +3394,7 @@
5D0A736F203F0C450001595D /* Screen */ = {
isa = PBXGroup;
children = (
+ 5D92935720B33D3C00FCC775 /* Choice Set */,
5D339CE5207C0651000CC364 /* Menu */,
5D0A737F203F23D10001595D /* Soft Button */,
5D0A737D203F23B30001595D /* Text and Graphic */,
@@ -3105,6 +3462,7 @@
5D1654551D3E754F00554D93 /* SDLLifecycleManagerSpec.m */,
5D60DF23202B7A80001EDA01 /* SDLAsynchronousRPCRequestOperationSpec.m */,
5D60DF25202B7A97001EDA01 /* SDLSequentialRPCRequestOperationSpec.m */,
+ 88A1CF1D21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m */,
);
name = Lifecycle;
sourceTree = "<group>";
@@ -3243,11 +3601,10 @@
5D4019B21A76EC350006B0C2 /* Supporting Files */ = {
isa = PBXGroup;
children = (
- 5D59350B1A855EB300687FB9 /* AppDelegate.h */,
- 5D59350C1A855EB300687FB9 /* AppDelegate.m */,
- 5D4029DF1A76F0760006B0C2 /* LaunchScreen.xib */,
- 5D5935111A855EBE00687FB9 /* main.m */,
- 5D4029D51A76F0410006B0C2 /* SmartDeviceLink-Example-ObjC-Info.plist */,
+ 5D1FF2C82130463E000EB9B4 /* AppDelegate.h */,
+ 5D1FF2C92130463F000EB9B4 /* AppDelegate.m */,
+ 5D1FF2CD21304654000EB9B4 /* SmartDeviceLink-Example-ObjC-Info.plist */,
+ 5D1FF2CB2130464D000EB9B4 /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
@@ -3311,6 +3668,10 @@
5D4631131F2136B60092EFDC /* SDLControlFramePayloadNak.m */,
5DB9964C1F26886C002D8795 /* SDLControlFramePayloadEndService.h */,
5DB9964D1F26886C002D8795 /* SDLControlFramePayloadEndService.m */,
+ EE7B6121205BF69C00E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.h */,
+ EE7B6122205BF6C800E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.m */,
+ EEB1932D205028B700A8940C /* SDLControlFramePayloadTransportEventUpdate.h */,
+ EEB1932F205028BE00A8940C /* SDLControlFramePayloadTransportEventUpdate.m */,
);
name = General;
sourceTree = "<group>";
@@ -3318,9 +3679,9 @@
5D4832991A8EA27200252386 /* Storyboards */ = {
isa = PBXGroup;
children = (
- 5D4029E11A76F0760006B0C2 /* Main.storyboard */,
- 5D0218F71A8E7A7300D1BF62 /* ConnectionTCPTableViewController.storyboard */,
- 5D0219031A8E9F6D00D1BF62 /* ConnectionIAPTableViewController.storyboard */,
+ 5D1FF2AD21304567000EB9B4 /* ConnectionIAPTableViewController.storyboard */,
+ 5D1FF2A921304567000EB9B4 /* ConnectionTCPTableViewController.storyboard */,
+ 5D1FF2AB21304567000EB9B4 /* Main.storyboard */,
);
name = Storyboards;
sourceTree = "<group>";
@@ -3328,8 +3689,10 @@
5D48329A1A8EA31500252386 /* Utilities */ = {
isa = PBXGroup;
children = (
- 5D48329B1A8EA33D00252386 /* Preferences.h */,
- 5D48329C1A8EA33D00252386 /* Preferences.m */,
+ 5D1FF2A321304530000EB9B4 /* Preferences.h */,
+ 5D1FF2A421304531000EB9B4 /* Preferences.m */,
+ 5D1FF2A521304531000EB9B4 /* TextValidator.h */,
+ 5D1FF2A621304531000EB9B4 /* TextValidator.m */,
);
name = Utilities;
sourceTree = "<group>";
@@ -3337,22 +3700,22 @@
5D48329E1A92865900252386 /* SDL */ = {
isa = PBXGroup;
children = (
- 5D48329F1A92868E00252386 /* ProxyManager.h */,
- 5D4832A01A92868E00252386 /* ProxyManager.m */,
- 88DA6D0E209794A400AD8297 /* AlertManager.h */,
- 88DA6D0F209794A400AD8297 /* AlertManager.m */,
- 8803A0AB208E2907009FDC02 /* AudioManager.h */,
- 8803A0AC208E2907009FDC02 /* AudioManager.m */,
- 8800871A20A6338C008E1EA0 /* ButtonManager.h */,
- 8800871B20A6338C008E1EA0 /* ButtonManager.m */,
- 8814AEA520AB65FC00466E0F /* MenuManager.h */,
- 8814AEA620AB65FC00466E0F /* MenuManager.m */,
- 8814AEA820AB663800466E0F /* PerformInteractionManager.h */,
- 8814AEA920AB663800466E0F /* PerformInteractionManager.m */,
- 88DE80B520A5C8DD00BA9CF0 /* RPCPermissionsManager.h */,
- 88DE80B620A5C8DD00BA9CF0 /* RPCPermissionsManager.m */,
- 8803A0B0208E7CA4009FDC02 /* VehicleDataManager.h */,
- 8803A0B1208E7CA4009FDC02 /* VehicleDataManager.m */,
+ 5D1FF28B213044F9000EB9B4 /* AlertManager.h */,
+ 5D1FF28C213044F9000EB9B4 /* AlertManager.m */,
+ 5D1FF28F21304513000EB9B4 /* AudioManager.h */,
+ 5D1FF29721304514000EB9B4 /* AudioManager.m */,
+ 5D1FF29521304514000EB9B4 /* ButtonManager.h */,
+ 5D1FF29B21304515000EB9B4 /* ButtonManager.m */,
+ 5D1FF28E21304513000EB9B4 /* MenuManager.h */,
+ 5D1FF29421304513000EB9B4 /* MenuManager.m */,
+ 5D1FF29321304513000EB9B4 /* PerformInteractionManager.h */,
+ 5D1FF29121304513000EB9B4 /* PerformInteractionManager.m */,
+ 5D1FF29A21304514000EB9B4 /* ProxyManager.h */,
+ 5D1FF29621304514000EB9B4 /* ProxyManager.m */,
+ 5D1FF29821304514000EB9B4 /* RPCPermissionsManager.h */,
+ 5D1FF29221304513000EB9B4 /* RPCPermissionsManager.m */,
+ 5D1FF29021304513000EB9B4 /* VehicleDataManager.h */,
+ 5D1FF29921304514000EB9B4 /* VehicleDataManager.m */,
);
name = SDL;
sourceTree = "<group>";
@@ -3360,10 +3723,10 @@
5D4832A21A94F8F100252386 /* Transition */ = {
isa = PBXGroup;
children = (
- 5D4832A31A94F90D00252386 /* ConnectionTransitionContext.h */,
- 5D4832A41A94F90D00252386 /* ConnectionTransitionContext.m */,
- 5D4832A61A95191B00252386 /* ConnectionAnimatedTransition.h */,
- 5D4832A71A95191B00252386 /* ConnectionAnimatedTransition.m */,
+ 5D1FF2BB21304598000EB9B4 /* ConnectionAnimatedTransition.h */,
+ 5D1FF2BC21304598000EB9B4 /* ConnectionAnimatedTransition.m */,
+ 5D1FF2BD21304598000EB9B4 /* ConnectionTransitionContext.h */,
+ 5D1FF2BE21304598000EB9B4 /* ConnectionTransitionContext.m */,
);
name = Transition;
sourceTree = "<group>";
@@ -3371,6 +3734,7 @@
5D5934ED1A85160400687FB9 /* Proxy */ = {
isa = PBXGroup;
children = (
+ EE798CA2205611DC008EDE8E /* Secondary Transport */,
5D6CC8ED1C610E490027F60A /* Security */,
5D5934FE1A851B2500687FB9 /* @protocols */,
5D61FB031A84238A00846EE7 /* SDLLockScreenStatusManager.h */,
@@ -3649,6 +4013,10 @@
5D61FA491A84238A00846EE7 /* SDLAirbagStatus.m */,
332A913C1CED87F80043824C /* SDLAppInfo.h */,
332A913D1CED87F80043824C /* SDLAppInfo.m */,
+ 1EAA471B203410BB000FE74B /* SDLAudioControlCapabilities.h */,
+ 1EAA471C203410BB000FE74B /* SDLAudioControlCapabilities.m */,
+ 1EAA47272034388D000FE74B /* SDLAudioControlData.h */,
+ 1EAA47282034388D000FE74B /* SDLAudioControlData.m */,
5D61FA581A84238A00846EE7 /* SDLAudioPassThruCapabilities.h */,
5D61FA591A84238A00846EE7 /* SDLAudioPassThruCapabilities.m */,
5D61FA5E1A84238A00846EE7 /* SDLBeltStatus.h */,
@@ -3679,6 +4047,10 @@
5D61FAAC1A84238A00846EE7 /* SDLECallInfo.m */,
5D61FAAD1A84238A00846EE7 /* SDLEmergencyEvent.h */,
5D61FAAE1A84238A00846EE7 /* SDLEmergencyEvent.m */,
+ 88B3BF9A20DA8BBC00943565 /* SDLFuelRange.h */,
+ 88B3BF9B20DA8BBC00943565 /* SDLFuelRange.m */,
+ 1EAA4723203416D3000FE74B /* SDLEqualizerSettings.h */,
+ 1EAA4724203416D3000FE74B /* SDLEqualizerSettings.m */,
5D61FACE1A84238A00846EE7 /* SDLGPSData.h */,
5D61FACF1A84238A00846EE7 /* SDLGPSData.m */,
88EED8361F33AE1700E6C42E /* SDLHapticRect.h */,
@@ -3689,6 +4061,18 @@
5DE372A01ACB2ED300849FAA /* SDLHMICapabilities.m */,
5D61FAD61A84238A00846EE7 /* SDLHMIPermissions.h */,
5D61FAD71A84238A00846EE7 /* SDLHMIPermissions.m */,
+ 1EAA4747203567FA000FE74B /* SDLHMISettingsControlCapabilities.h */,
+ 1EAA4748203567FA000FE74B /* SDLHMISettingsControlCapabilities.m */,
+ 1EAA4753203583BC000FE74B /* SDLHMISettingsControlData.h */,
+ 1EAA4754203583BC000FE74B /* SDLHMISettingsControlData.m */,
+ 1EAA473720345B7A000FE74B /* SDLLightCapabilities.h */,
+ 1EAA473820345B7A000FE74B /* SDLLightCapabilities.m */,
+ 1EAA473F20355FF3000FE74B /* SDLLightControlCapabilities.h */,
+ 1EAA474020355FF3000FE74B /* SDLLightControlCapabilities.m */,
+ 1EAA47432035623B000FE74B /* SDLLightControlData.h */,
+ 1EAA47442035623B000FE74B /* SDLLightControlData.m */,
+ 1EAA473B203554B5000FE74B /* SDLLightState.h */,
+ 1EAA473C203554B5000FE74B /* SDLLightState.m */,
5D61FAE01A84238A00846EE7 /* SDLImage.h */,
5D61FAE11A84238A00846EE7 /* SDLImage.m */,
5D61FAE21A84238A00846EE7 /* SDLImageField.h */,
@@ -3701,6 +4085,10 @@
DA9F7E961DCC052C00ACAE48 /* SDLLocationCoordinate.m */,
DA9F7E971DCC052C00ACAE48 /* SDLLocationDetails.h */,
DA9F7E981DCC052C00ACAE48 /* SDLLocationDetails.m */,
+ 1EB59CAD202D97AC00343A61 /* SDLMassageCushionFirmness.h */,
+ 1EB59CAE202D97AC00343A61 /* SDLMassageCushionFirmness.m */,
+ 1EB59CA5202D946500343A61 /* SDLMassageModeData.h */,
+ 1EB59CA6202D946500343A61 /* SDLMassageModeData.m */,
5D61FB0B1A84238A00846EE7 /* SDLMenuParams.h */,
5D61FB0C1A84238A00846EE7 /* SDLMenuParams.m */,
1E5AD06E1F209C880029B8AF /* SDLModuleData.h */,
@@ -3731,22 +4119,36 @@
1E5AD05B1F2064A80029B8AF /* SDLRDSData.m */,
5DADA7731F4DFED60084D17D /* SDLRectangle.h */,
5DADA7741F4DFED60084D17D /* SDLRectangle.m */,
+ 5D92934B20AF4BEF00FCC775 /* SDLRGBColor.h */,
+ 5D92934C20AF4BEF00FCC775 /* SDLRGBColor.m */,
5D61FB8C1A84238B00846EE7 /* SDLScreenParams.h */,
5D61FB8D1A84238B00846EE7 /* SDLScreenParams.m */,
5D61FBAA1A84238B00846EE7 /* SDLSingleTireStatus.h */,
5D61FBAB1A84238B00846EE7 /* SDLSingleTireStatus.m */,
+ 1EB59CBD202DA26000343A61 /* SDLSeatControlData.h */,
+ 1EB59CBE202DA26000343A61 /* SDLSeatControlData.m */,
+ 1EB59CC1202DB40400343A61 /* SDLSeatControlCapabilities.h */,
+ 1EB59CC2202DB40400343A61 /* SDLSeatControlCapabilities.m */,
+ 1EB59CB5202D9C8100343A61 /* SDLSeatMemoryAction.h */,
+ 1EB59CB6202D9C8100343A61 /* SDLSeatMemoryAction.m */,
+ 1EAA4717203406B1000FE74B /* SDLSISData.h */,
+ 1EAA4718203406B1000FE74B /* SDLSISData.m */,
5D61FBB21A84238B00846EE7 /* SDLSoftButton.h */,
5D61FBB31A84238B00846EE7 /* SDLSoftButton.m */,
5D61FBB41A84238B00846EE7 /* SDLSoftButtonCapabilities.h */,
5D61FBB51A84238B00846EE7 /* SDLSoftButtonCapabilities.m */,
5D61FBBE1A84238B00846EE7 /* SDLStartTime.h */,
5D61FBBF1A84238B00846EE7 /* SDLStartTime.m */,
+ 1EAA470F2033FE80000FE74B /* SDLStationIDNumber.h */,
+ 1EAA47102033FE80000FE74B /* SDLStationIDNumber.m */,
5D61FBC81A84238B00846EE7 /* SDLSyncMsgVersion.h */,
5D61FBC91A84238B00846EE7 /* SDLSyncMsgVersion.m */,
5D00AC691F141339004000D9 /* SDLSystemCapability.h */,
5D00AC6A1F141339004000D9 /* SDLSystemCapability.m */,
1E5AD0621F207DD50029B8AF /* SDLTemperature.h */,
1E5AD0631F207DD50029B8AF /* SDLTemperature.m */,
+ 5D92935120B2F76500FCC775 /* SDLTemplateColorScheme.h */,
+ 5D92935220B2F76500FCC775 /* SDLTemplateColorScheme.m */,
5D61FBDC1A84238C00846EE7 /* SDLTextField.h */,
5D61FBDD1A84238C00846EE7 /* SDLTextField.m */,
5D61FBE21A84238C00846EE7 /* SDLTireStatus.h */,
@@ -3784,6 +4186,8 @@
5D61FA551A84238A00846EE7 /* SDLAppHMIType.m */,
5D61FA561A84238A00846EE7 /* SDLAppInterfaceUnregisteredReason.h */,
5D61FA571A84238A00846EE7 /* SDLAppInterfaceUnregisteredReason.m */,
+ 2BF2F84D20ED004000A26EF2 /* SDLAudioStreamingIndicator.h */,
+ 2BF2F84E20ED004000A26EF2 /* SDLAudioStreamingIndicator.m */,
5D61FA5A1A84238A00846EE7 /* SDLAudioStreamingState.h */,
5D61FA5B1A84238A00846EE7 /* SDLAudioStreamingState.m */,
5D61FA5C1A84238A00846EE7 /* SDLAudioType.h */,
@@ -3812,18 +4216,26 @@
5D61FA981A84238A00846EE7 /* SDLDeviceLevelStatus.m */,
5D61FAA11A84238A00846EE7 /* SDLDimension.h */,
5D61FAA21A84238A00846EE7 /* SDLDimension.m */,
+ 1EAA474B20356B2D000FE74B /* SDLDisplayMode.h */,
+ 1EAA474C20356B2D000FE74B /* SDLDisplayMode.m */,
+ 1EAA474F20356CD2000FE74B /* SDLDistanceUnit.h */,
+ 1EAA475020356CD2000FE74B /* SDLDistanceUnit.m */,
5D61FAA51A84238A00846EE7 /* SDLDisplayType.h */,
5D61FAA61A84238A00846EE7 /* SDLDisplayType.m */,
5D61FAA71A84238A00846EE7 /* SDLDriverDistractionState.h */,
5D61FAA81A84238A00846EE7 /* SDLDriverDistractionState.m */,
5D61FAA91A84238A00846EE7 /* SDLECallConfirmationStatus.h */,
5D61FAAA1A84238A00846EE7 /* SDLECallConfirmationStatus.m */,
+ 5DD8406020FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.h */,
+ 5DD8406120FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.m */,
5D61FAAF1A84238A00846EE7 /* SDLEmergencyEventType.h */,
5D61FAB01A84238A00846EE7 /* SDLEmergencyEventType.m */,
5D61FABC1A84238A00846EE7 /* SDLFileType.h */,
5D61FABD1A84238A00846EE7 /* SDLFileType.m */,
5D61FABE1A84238A00846EE7 /* SDLFuelCutoffStatus.h */,
5D61FABF1A84238A00846EE7 /* SDLFuelCutoffStatus.m */,
+ 88B3BF9620DA859800943565 /* SDLFuelType.h */,
+ 88B3BF9720DA859800943565 /* SDLFuelType.m */,
5D61FACC1A84238A00846EE7 /* SDLGlobalProperty.h */,
5D61FACD1A84238A00846EE7 /* SDLGlobalProperty.m */,
5D61FAD41A84238A00846EE7 /* SDLHMILevel.h */,
@@ -3834,6 +4246,10 @@
5D61FADD1A84238A00846EE7 /* SDLIgnitionStableStatus.m */,
5D61FADE1A84238A00846EE7 /* SDLIgnitionStatus.h */,
5D61FADF1A84238A00846EE7 /* SDLIgnitionStatus.m */,
+ 1EAA472F203442C0000FE74B /* SDLLightName.h */,
+ 1EAA4730203442C0000FE74B /* SDLLightName.m */,
+ 1EAA472B20344108000FE74B /* SDLLightStatus.h */,
+ 1EAA472C20344108000FE74B /* SDLLightStatus.m */,
5D61FAE41A84238A00846EE7 /* SDLImageFieldName.h */,
5D61FAE51A84238A00846EE7 /* SDLImageFieldName.m */,
5D61FAE81A84238A00846EE7 /* SDLImageType.h */,
@@ -3854,6 +4270,12 @@
5D61FB061A84238A00846EE7 /* SDLLockScreenStatus.m */,
5D61FB071A84238A00846EE7 /* SDLMaintenanceModeStatus.h */,
5D61FB081A84238A00846EE7 /* SDLMaintenanceModeStatus.m */,
+ 1EB59CA9202D96A200343A61 /* SDLMassageCushion.h */,
+ 1EB59CAA202D96A200343A61 /* SDLMassageCushion.m */,
+ 1EB59CA1202D92F600343A61 /* SDLMassageMode.h */,
+ 1EB59CA2202D92F600343A61 /* SDLMassageMode.m */,
+ 1EB59C9D202D925500343A61 /* SDLMassageZone.h */,
+ 1EB59C9E202D925500343A61 /* SDLMassageZone.m */,
5D61FB091A84238A00846EE7 /* SDLMediaClockFormat.h */,
5D61FB0A1A84238A00846EE7 /* SDLMediaClockFormat.m */,
1E5AD0461F1F773E0029B8AF /* SDLModuleType.h */,
@@ -3885,10 +4307,16 @@
5D61FB7E1A84238B00846EE7 /* SDLRPCMessageType.h */,
5D61FB8A1A84238B00846EE7 /* SDLSamplingRate.h */,
5D61FB8B1A84238B00846EE7 /* SDLSamplingRate.m */,
+ 1EB59CB1202D9B5F00343A61 /* SDLSeatMemoryActionType.h */,
+ 1EB59CB2202D9B5F00343A61 /* SDLSeatMemoryActionType.m */,
5D61FBB61A84238B00846EE7 /* SDLSoftButtonType.h */,
5D61FBB71A84238B00846EE7 /* SDLSoftButtonType.m */,
5D61FBBC1A84238B00846EE7 /* SDLSpeechCapabilities.h */,
5D61FBBD1A84238B00846EE7 /* SDLSpeechCapabilities.m */,
+ 1EB59CB9202DA1B400343A61 /* SDLSupportedSeat.h */,
+ 1EB59CBA202DA1B400343A61 /* SDLSupportedSeat.m */,
+ 88A795D02106787400056542 /* SDLStaticIconName.h */,
+ 88A795D12106787400056542 /* SDLStaticIconName.m */,
5D61FBCE1A84238B00846EE7 /* SDLSystemAction.h */,
5D61FBCF1A84238B00846EE7 /* SDLSystemAction.m */,
5D00AC651F140F0A004000D9 /* SDLSystemCapabilityType.h */,
@@ -3907,8 +4335,12 @@
5D61FBE11A84238C00846EE7 /* SDLTimerMode.m */,
5D61FBEA1A84238C00846EE7 /* SDLTouchType.h */,
5D61FBEB1A84238C00846EE7 /* SDLTouchType.m */,
+ 5D3E420820EAAD6500D8C622 /* SDLTPMS.h */,
+ 5D3E420920EAAD6500D8C622 /* SDLTPMS.m */,
5D61FBEE1A84238C00846EE7 /* SDLTriggerSource.h */,
5D61FBEF1A84238C00846EE7 /* SDLTriggerSource.m */,
+ 8818ADD62100FC18007D6F19 /* SDLTurnSignal.h */,
+ 8818ADD72100FC18007D6F19 /* SDLTurnSignal.m */,
5D61FC021A84238C00846EE7 /* SDLUpdateMode.h */,
5D61FC031A84238C00846EE7 /* SDLUpdateMode.m */,
5D61FC101A84238C00846EE7 /* SDLVehicleDataActiveStatus.h */,
@@ -3937,6 +4369,8 @@
8B7B31991F2F7B5700BDC38D /* SDLVideoStreamingCodec.m */,
8B7B319C1F2F7CF700BDC38D /* SDLVideoStreamingProtocol.h */,
8B7B319D1F2F7CF700BDC38D /* SDLVideoStreamingProtocol.m */,
+ 5D0C29FA20D93D8C008B56CD /* SDLVideoStreamingState.h */,
+ 5D0C29FB20D93D8C008B56CD /* SDLVideoStreamingState.m */,
);
name = Enums;
sourceTree = "<group>";
@@ -4011,6 +4445,8 @@
5D61FB291A84238B00846EE7 /* SDLOnLockScreenStatus.m */,
5D61FB2A1A84238B00846EE7 /* SDLOnPermissionsChange.h */,
5D61FB2B1A84238B00846EE7 /* SDLOnPermissionsChange.m */,
+ 1EAA47092032BAE5000FE74B /* SDLOnRCStatus.h */,
+ 1EAA470A2032BAE5000FE74B /* SDLOnRCStatus.m */,
5D61FB2C1A84238B00846EE7 /* SDLOnSyncPData.h */,
5D61FB2D1A84238B00846EE7 /* SDLOnSyncPData.m */,
5D61FB2E1A84238B00846EE7 /* SDLOnSystemRequest.h */,
@@ -4124,6 +4560,7 @@
1FF7DABF1F75CF6C00B46C30 /* SDLHapticManagerSpec.m */,
5D59DD461B14FDEE00BE744D /* SDLLockScreenStatusManagerSpec.m */,
DA661E2B1E553E7E001C1345 /* SDLStreamingMediaManagerSpec.m */,
+ EEB2537D2067D3E80069584E /* SDLSecondaryTransportManagerSpec.m */,
);
name = ProxySpecs;
sourceTree = "<group>";
@@ -4144,6 +4581,8 @@
5DB1BCE21D2455FD002FFC37 /* Connection Manager */,
5D6035D0202CD46200A429C9 /* SDLSpecUtilities.h */,
5D6035D1202CD46200A429C9 /* SDLSpecUtilities.m */,
+ EEA41D43210BA89B0006CB6E /* TestTCPServer.h */,
+ EEA41D44210BA8CF0006CB6E /* TestTCPServer.m */,
);
name = "Test Utilities";
sourceTree = "<group>";
@@ -4201,6 +4640,7 @@
5D59DD451B14FDD000BE744D /* ProxySpecs */,
5DB92D201AC47AC400C15BB0 /* UtilitiesSpecs */,
1680B1041A9CD7AD00DBD79E /* ProtocolSpecs */,
+ EE5D1B31208EBC7100D17216 /* TransportSpecs */,
162E81E01A9BDE8A00906325 /* RPCSpecs */,
5D61FA2D1A84237100846EE7 /* Supporting Files */,
167ED9451A9BCE5D00797BE5 /* SwiftSpec.swift */,
@@ -4333,6 +4773,7 @@
5D82042A1BCEA91E00D0A41B /* Files */ = {
isa = PBXGroup;
children = (
+ 880245A120F79BDA00ED195B /* Configuration */,
5D8204201BCEA89A00D0A41B /* SDLFileManager.h */,
5D8204211BCEA89A00D0A41B /* SDLFileManager.m */,
5D7F87F51CE51CD8002DD7C4 /* File Types */,
@@ -4342,6 +4783,47 @@
name = Files;
sourceTree = "<group>";
};
+ 5D92935720B33D3C00FCC775 /* Choice Set */ = {
+ isa = PBXGroup;
+ children = (
+ 5D92936D20B5E07000FCC775 /* Operations */,
+ 5D92936520B3600900FCC775 /* Delegates */,
+ 5D92935820B33D4F00FCC775 /* SDLChoiceCell.h */,
+ 5D92935920B33D4F00FCC775 /* SDLChoiceCell.m */,
+ 5D92935C20B33FF700FCC775 /* SDLChoiceSet.h */,
+ 5D92935D20B33FF700FCC775 /* SDLChoiceSet.m */,
+ 5D92936620B3601700FCC775 /* SDLChoiceSetManager.h */,
+ 5D92936720B3601700FCC775 /* SDLChoiceSetManager.m */,
+ );
+ name = "Choice Set";
+ sourceTree = "<group>";
+ };
+ 5D92936520B3600900FCC775 /* Delegates */ = {
+ isa = PBXGroup;
+ children = (
+ 5D92936020B354BE00FCC775 /* SDLChoiceSetDelegate.h */,
+ 5D92936220B3551600FCC775 /* SDLKeyboardDelegate.h */,
+ );
+ name = Delegates;
+ sourceTree = "<group>";
+ };
+ 5D92936D20B5E07000FCC775 /* Operations */ = {
+ isa = PBXGroup;
+ children = (
+ 5D92937E20B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.h */,
+ 5D92937F20B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.m */,
+ 5D92936E20B5E0E500FCC775 /* SDLDeleteChoicesOperation.h */,
+ 5D92936F20B5E0E500FCC775 /* SDLDeleteChoicesOperation.m */,
+ 5D92937220B5EEA200FCC775 /* SDLPreloadChoicesOperation.h */,
+ 5D92937320B5EEA200FCC775 /* SDLPreloadChoicesOperation.m */,
+ 5D92937620B6FB6200FCC775 /* SDLPresentChoiceSetOperation.h */,
+ 5D92937720B6FB6200FCC775 /* SDLPresentChoiceSetOperation.m */,
+ 5D92937A20B70A3E00FCC775 /* SDLPresentKeyboardOperation.h */,
+ 5D92937B20B70A3E00FCC775 /* SDLPresentKeyboardOperation.m */,
+ );
+ name = Operations;
+ sourceTree = "<group>";
+ };
5D9F50711BE7DD4C00FEF399 /* Assets */ = {
isa = PBXGroup;
children = (
@@ -4417,6 +4899,7 @@
isa = PBXGroup;
children = (
5DFFB9141BD7C89700DB3F04 /* SDLConnectionManagerType.h */,
+ EE6CBF872064CAEE00EEE0CA /* SDLStreamingProtocolDelegate.h */,
5D616B501D59042B00553F6B /* Errors */,
5DA3F35C1BC4484B0026F2D0 /* Notifications */,
5DA3F3571BC448160026F2D0 /* Categories */,
@@ -4435,6 +4918,8 @@
5DA102A31D4122C700C15826 /* NSMutableDictionary+SafeRemove.m */,
5D3E48C91D7722FE0000BFEF /* NSBundle+SDLBundle.h */,
5D3E48CA1D7722FE0000BFEF /* NSBundle+SDLBundle.m */,
+ 5D019274214994AC003500F6 /* NSMutableArray+Safe.h */,
+ 5D019275214994AC003500F6 /* NSMutableArray+Safe.m */,
);
name = Categories;
sourceTree = "<group>";
@@ -4523,6 +5008,7 @@
5DAD5F8120507DE40025624C /* Screen */ = {
isa = PBXGroup;
children = (
+ 5DE35E4320CAFBEA0034BE5A /* Choice Set */,
5DF40B24208FA7C500DD6FDA /* Menu */,
5DAD5F8220507DED0025624C /* Soft Button */,
5DAD5F8320507DF30025624C /* Text and Graphic */,
@@ -4574,10 +5060,11 @@
isa = PBXGroup;
children = (
5DBEFA551F434F8A009EE295 /* Utilities */,
+ 5DB1BCE01D243DDE002FFC37 /* SDLConfigurationSpec.m */,
+ 8886EB972111F4FA008294A5 /* SDLFileManagerConfigurationSpec.m */,
5DB1BCDC1D243DC3002FFC37 /* SDLLifecycleConfigurationSpec.m */,
5DB1BCDE1D243DD3002FFC37 /* SDLLockScreenConfigurationSpec.m */,
5DBEFA531F434B9E009EE295 /* SDLStreamingMediaConfigurationSpec.m */,
- 5DB1BCE01D243DDE002FFC37 /* SDLConfigurationSpec.m */,
);
name = Configurations;
sourceTree = "<group>";
@@ -4773,6 +5260,8 @@
children = (
5DC09ED91F2F7FEC00F4AB1D /* SDLControlFramePayloadNakSpec.m */,
5DA23FEF1F2FA0FF009C0313 /* SDLControlFramePayloadEndServiceSpec.m */,
+ EE460E072066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m */,
+ EE460E092066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m */,
);
name = General;
sourceTree = "<group>";
@@ -4808,6 +5297,29 @@
name = Modules;
sourceTree = "<group>";
};
+ 5DE35E4320CAFBEA0034BE5A /* Choice Set */ = {
+ isa = PBXGroup;
+ children = (
+ 5DE35E4820CB1BD70034BE5A /* Operations */,
+ 5DE35E4420CAFC5D0034BE5A /* SDLChoiceCellSpec.m */,
+ 5DE35E4620CB0AB90034BE5A /* SDLChoiceSetSpec.m */,
+ 5DE35E4920CB1BF70034BE5A /* SDLChoiceSetManagerSpec.m */,
+ );
+ name = "Choice Set";
+ sourceTree = "<group>";
+ };
+ 5DE35E4820CB1BD70034BE5A /* Operations */ = {
+ isa = PBXGroup;
+ children = (
+ 5DE35E4B20CB1C1C0034BE5A /* SDLCheckChoiceVROptionalOperationSpec.m */,
+ 5DE35E4D20CB1C2C0034BE5A /* SDLDeleteChoicesOperationSpec.m */,
+ 5DE35E5120CB1C490034BE5A /* SDLPreloadChoicesOperationSpec.m */,
+ 5DE35E5320CB1C590034BE5A /* SDLPresentChoiceSetOperationSpec.m */,
+ 5DE35E5520CB1C680034BE5A /* SDLPresentKeyboardOperationSpec.m */,
+ );
+ name = Operations;
+ sourceTree = "<group>";
+ };
5DEE55BE1B8509A5004F0D0F /* HTTP Connection */ = {
isa = PBXGroup;
children = (
@@ -4822,6 +5334,7 @@
children = (
5DEF69631FD6FEC2004B8C2F /* Mocks */,
5DEF69601FD6FB75004B8C2F /* SDLAudioStreamManagerSpec.m */,
+ 5D64FE7020DA9E6700792F9F /* SDLStreamingAudioLifecycleManagerSpec.m */,
);
name = "Audio Manager";
sourceTree = "<group>";
@@ -4829,7 +5342,7 @@
5DEF69621FD6FEB6004B8C2F /* Video */ = {
isa = PBXGroup;
children = (
- DA8966EE1E5693E300413EAB /* SDLStreamingMediaLifecycleManagerSpec.m */,
+ 5D64FE6E20DA9E4300792F9F /* SDLStreamingVideoLifecycleManagerSpec.m */,
DABB62161E4A900C0034C567 /* SDLH264VideoEncoderSpec.m */,
EED5CA031F4D1D5E00F04000 /* SDLRAWH264PacketizerSpec.m */,
EED5CA091F4D206800F04000 /* SDLRTPH264PacketizerSpec.m */,
@@ -4857,6 +5370,15 @@
name = Menu;
sourceTree = "<group>";
};
+ 880245A120F79BDA00ED195B /* Configuration */ = {
+ isa = PBXGroup;
+ children = (
+ 880245A220F79C3400ED195B /* SDLFileManagerConfiguration.h */,
+ 880245A320F79C3400ED195B /* SDLFileManagerConfiguration.m */,
+ );
+ name = Configuration;
+ sourceTree = "<group>";
+ };
880E35B12088F73400181259 /* System Capabilities */ = {
isa = PBXGroup;
children = (
@@ -4899,14 +5421,14 @@
88295679207CF48C00EF056C /* SDL */ = {
isa = PBXGroup;
children = (
- 88A0AA57207CFE650075132C /* ProxyManager.swift */,
- 88DFB054207F96EE0079D19D /* AlertManager.swift */,
- 8870C3E82086623F0070E018 /* AudioManager.swift */,
- 888D178D207E7F0E008E9F8F /* ButtonManager.swift */,
- 88166AFF207E41E900076236 /* MenuManager.swift */,
- 8814AEAB20AB667B00466E0F /* PerformInteractionManager.swift */,
- 88B849C32080F4AF002A034D /* RPCPermissionsManager.swift */,
- 88B849C620812412002A034D /* VehicleDataManager.swift */,
+ 5D1FF2D421304746000EB9B4 /* AlertManager.swift */,
+ 5D1FF2D621304746000EB9B4 /* AudioManager.swift */,
+ 5D1FF2D221304745000EB9B4 /* ButtonManager.swift */,
+ 5D1FF2D821304746000EB9B4 /* MenuManager.swift */,
+ 5D1FF2D721304746000EB9B4 /* PerformInteractionManager.swift */,
+ 5D1FF2D321304745000EB9B4 /* ProxyManager.swift */,
+ 5D1FF2D521304746000EB9B4 /* RPCPermissionsManager.swift */,
+ 5D1FF2D921304746000EB9B4 /* VehicleDataManager.swift */,
);
name = SDL;
sourceTree = "<group>";
@@ -4914,10 +5436,9 @@
8829567A207CF49600EF056C /* Supporting Files */ = {
isa = PBXGroup;
children = (
- 8829569D207CFD0E00EF056C /* AppDelegate.swift */,
- 88A0AA61207CFF970075132C /* LaunchScreen.xib */,
- 88295698207CF68800EF056C /* SmartDeviceLink-Example-Swift-Info.plist */,
- 8829569C207CFD0D00EF056C /* SmartDeviceLink-Example-Swift-Bridging-Header.h */,
+ 5D1FF2F92130480C000EB9B4 /* SmartDeviceLink-Example-Swift-Info.plist */,
+ 5D1FF2F7213047C1000EB9B4 /* AppDelegate.swift */,
+ 5D1FF2F6213047C1000EB9B4 /* SmartDeviceLink-Example-Swift-Bridging-Header.h */,
);
name = "Supporting Files";
sourceTree = "<group>";
@@ -4925,10 +5446,11 @@
8829567B207CF49F00EF056C /* UI */ = {
isa = PBXGroup;
children = (
+ 5D1FF2F4213047B2000EB9B4 /* LaunchScreen.xib */,
88A0AA5F207CFEA60075132C /* Connection */,
- 88A0AA59207CFE740075132C /* ConnectionContainerViewController.swift */,
- 88A0AA5A207CFE740075132C /* ConnectionIAPTableViewController.swift */,
- 88A0AA5B207CFE740075132C /* ConnectionTCPTableViewController.swift */,
+ 5D1FF2E82130479C000EB9B4 /* ConnectionContainerViewController.swift */,
+ 5D1FF2EA2130479C000EB9B4 /* ConnectionIAPTableViewController.swift */,
+ 5D1FF2E92130479C000EB9B4 /* ConnectionTCPTableViewController.swift */,
);
name = UI;
sourceTree = "<group>";
@@ -4936,8 +5458,9 @@
8829567C207CF4AB00EF056C /* Utilities */ = {
isa = PBXGroup;
children = (
- 88A0AA55207CFE5C0075132C /* AppUserDefaults.swift */,
- 88DFB051207F8DF50079D19D /* Protocol+ProxyManagerDelegate.swift */,
+ 5D1FF2E221304761000EB9B4 /* AppUserDefaults.swift */,
+ 5D1FF2E321304761000EB9B4 /* Protocol+ProxyManagerDelegate.swift */,
+ 5D1FF2E421304761000EB9B4 /* TextValidator.swift */,
);
name = Utilities;
sourceTree = "<group>";
@@ -4945,9 +5468,9 @@
88295699207CFBD900EF056C /* Shared Assets */ = {
isa = PBXGroup;
children = (
- 5D4029D31A76F0340006B0C2 /* Images.xcassets */,
- 8863B596207D2388002D6459 /* AppConstants.h */,
- 8863B597207D2388002D6459 /* AppConstants.m */,
+ 5D1FF2C5213045F1000EB9B4 /* Images.xcassets */,
+ 5D1FF2C1213045EB000EB9B4 /* AppConstants.h */,
+ 5D1FF2C2213045EB000EB9B4 /* AppConstants.m */,
);
name = "Shared Assets";
sourceTree = "<group>";
@@ -4963,9 +5486,9 @@
88A0AA60207CFEAC0075132C /* Storyboards */ = {
isa = PBXGroup;
children = (
- 88A0AA63207CFF970075132C /* ConnectionIAPTableViewController.storyboard */,
- 88A0AA64207CFF980075132C /* ConnectionTCPTableViewController.storyboard */,
- 88A0AA62207CFF970075132C /* Main.storyboard */,
+ 5D1FF2EF213047AB000EB9B4 /* ConnectionIAPTableViewController.storyboard */,
+ 5D1FF2F0213047AB000EB9B4 /* ConnectionTCPTableViewController.storyboard */,
+ 5D1FF2EE213047AB000EB9B4 /* Main.storyboard */,
);
name = Storyboards;
sourceTree = "<group>";
@@ -5017,8 +5540,10 @@
DA8966E81E56938C00413EAB /* Lifecycle */ = {
isa = PBXGroup;
children = (
- DA8966E91E56939F00413EAB /* SDLStreamingMediaLifecycleManager.h */,
- DA8966EA1E56939F00413EAB /* SDLStreamingMediaLifecycleManager.m */,
+ 5D0C2A0220D947AB008B56CD /* SDLStreamingAudioLifecycleManager.h */,
+ 5D0C2A0320D947AB008B56CD /* SDLStreamingAudioLifecycleManager.m */,
+ 5D0C29FE20D9479B008B56CD /* SDLStreamingVideoLifecycleManager.h */,
+ 5D0C29FF20D9479B008B56CD /* SDLStreamingVideoLifecycleManager.m */,
);
name = Lifecycle;
sourceTree = "<group>";
@@ -5090,6 +5615,25 @@
name = "@categories";
sourceTree = "<group>";
};
+ EE5D1B31208EBC7100D17216 /* TransportSpecs */ = {
+ isa = PBXGroup;
+ children = (
+ EE5D1B32208EBCA900D17216 /* SDLTCPTransportSpec.m */,
+ );
+ path = TransportSpecs;
+ sourceTree = "<group>";
+ };
+ EE798CA2205611DC008EDE8E /* Secondary Transport */ = {
+ isa = PBXGroup;
+ children = (
+ EE798CA32056120F008EDE8E /* SDLSecondaryTransportManager.h */,
+ EE798CA520561217008EDE8E /* SDLSecondaryTransportManager.m */,
+ EE38C0C1211C43E100E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.h */,
+ EE38C0C2211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m */,
+ );
+ name = "Secondary Transport";
+ sourceTree = "<group>";
+ };
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@@ -5097,7 +5641,34 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
+ 1EB59CBF202DA26000343A61 /* SDLSeatControlData.h in Headers */,
+ 1EB59CB3202D9B5F00343A61 /* SDLSeatMemoryActionType.h in Headers */,
+ 1EB59CC3202DB40400343A61 /* SDLSeatControlCapabilities.h in Headers */,
+ 1EB59CB7202D9C8100343A61 /* SDLSeatMemoryAction.h in Headers */,
+ 1EB59CBB202DA1B400343A61 /* SDLSupportedSeat.h in Headers */,
+ 1EB59CA7202D946500343A61 /* SDLMassageModeData.h in Headers */,
+ 1EB59CAB202D96A200343A61 /* SDLMassageCushion.h in Headers */,
+ 1EB59C9F202D925500343A61 /* SDLMassageZone.h in Headers */,
+ 1EB59CA3202D92F600343A61 /* SDLMassageMode.h in Headers */,
+ 1EB59CAF202D97AC00343A61 /* SDLMassageCushionFirmness.h in Headers */,
+ 1EAA470B2032BAE5000FE74B /* SDLOnRCStatus.h in Headers */,
+ 2BF2F84F20ED004000A26EF2 /* SDLAudioStreamingIndicator.h in Headers */,
+ 1EAA475120356CD2000FE74B /* SDLDistanceUnit.h in Headers */,
+ 1EAA4755203583BC000FE74B /* SDLHMISettingsControlData.h in Headers */,
+ 1EAA4731203442C0000FE74B /* SDLLightName.h in Headers */,
+ 1EAA472D20344108000FE74B /* SDLLightStatus.h in Headers */,
+ 1EAA474D20356B2D000FE74B /* SDLDisplayMode.h in Headers */,
+ 1EAA473D203554B5000FE74B /* SDLLightState.h in Headers */,
+ 1EAA4749203567FA000FE74B /* SDLHMISettingsControlCapabilities.h in Headers */,
+ 1EAA47452035623B000FE74B /* SDLLightControlData.h in Headers */,
+ 1EAA474120355FF3000FE74B /* SDLLightControlCapabilities.h in Headers */,
+ 1EAA473920345B7A000FE74B /* SDLLightCapabilities.h in Headers */,
+ 1EAA4725203416D3000FE74B /* SDLEqualizerSettings.h in Headers */,
+ 1EAA47112033FE80000FE74B /* SDLStationIDNumber.h in Headers */,
5D9FC2A61FD8815800ACA5C2 /* SDLPCMAudioConverter.h in Headers */,
+ 1EAA47292034388D000FE74B /* SDLAudioControlData.h in Headers */,
+ 1EAA471D203410BB000FE74B /* SDLAudioControlCapabilities.h in Headers */,
+ 1EAA4719203406B2000FE74B /* SDLSISData.h in Headers */,
8BBEA6061F324165003EEA26 /* SDLMetadataType.h in Headers */,
E4139D1D1F6017770005B6EA /* SDLLifecycleConfigurationUpdate.h in Headers */,
5DA3F35A1BC448480026F2D0 /* SDLError.h in Headers */,
@@ -5112,6 +5683,7 @@
5D61FD751A84238C00846EE7 /* SDLRPCResponse.h in Headers */,
8B7B31A21F2F7FEA00BDC38D /* SDLVideoStreamingFormat.h in Headers */,
5D61FC901A84238C00846EE7 /* SDLDisplayCapabilities.h in Headers */,
+ 5D3E420A20EAAD6500D8C622 /* SDLTPMS.h in Headers */,
5D61FCE81A84238C00846EE7 /* SDLLanguage.h in Headers */,
5D61FC841A84238C00846EE7 /* SDLDeviceLevelStatus.h in Headers */,
5DB92D321AC9C8BA00C15BB0 /* SDLRPCStruct.h in Headers */,
@@ -5119,6 +5691,8 @@
5D61FD291A84238C00846EE7 /* SDLPerformInteraction.h in Headers */,
DAC572571D1067270004288B /* SDLTouchManager.h in Headers */,
5D61FE0D1A84238C00846EE7 /* SDLVrCapabilities.h in Headers */,
+ EEB1932E205028B700A8940C /* SDLControlFramePayloadTransportEventUpdate.h in Headers */,
+ EE798CA420561210008EDE8E /* SDLSecondaryTransportManager.h in Headers */,
5DBF06271E64A91D00A5CF03 /* SDLLogFileModule.h in Headers */,
5D61FC531A84238C00846EE7 /* SDLButtonEventMode.h in Headers */,
1FF7DAB61F75B27300B46C30 /* SDLFocusableItemLocatorType.h in Headers */,
@@ -5131,6 +5705,7 @@
5D61FDC51A84238C00846EE7 /* SDLTCPTransport.h in Headers */,
5D6CC8EF1C610E660027F60A /* SDLSecurityType.h in Headers */,
5D61FCF61A84238C00846EE7 /* SDLMediaClockFormat.h in Headers */,
+ 5D92937820B6FB6200FCC775 /* SDLPresentChoiceSetOperation.h in Headers */,
5D61FD831A84238C00846EE7 /* SDLSetDisplayLayout.h in Headers */,
5D61FCC91A84238C00846EE7 /* SDLIgnitionStableStatus.h in Headers */,
DA9F7E6B1DCBFB0700ACAE48 /* SDLDeliveryMode.h in Headers */,
@@ -5141,6 +5716,7 @@
5D61FC9C1A84238C00846EE7 /* SDLEmergencyEventType.h in Headers */,
5D61FD131A84238C00846EE7 /* SDLOnLanguageChange.h in Headers */,
5D61FDE71A84238C00846EE7 /* SDLUnsubscribeButton.h in Headers */,
+ 5DD8406220FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.h in Headers */,
5D61FCAB1A84238C00846EE7 /* SDLFuelCutoffStatus.h in Headers */,
5D9FC2A31FD8814A00ACA5C2 /* SDLAudioFile.h in Headers */,
5DB9965C1F268F97002D8795 /* SDLControlFramePayloadVideoStartService.h in Headers */,
@@ -5187,6 +5763,7 @@
5D61FD091A84238C00846EE7 /* SDLOnDriverDistraction.h in Headers */,
E9C32B9E1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.h in Headers */,
5DAD5F7F204DEDEB0025624C /* SDLScreenManager.h in Headers */,
+ 5D92938020B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.h in Headers */,
5D339CEF207C08BA000CC364 /* SDLVoiceCommand.h in Headers */,
5D61FC4B1A84238C00846EE7 /* SDLBeltStatus.h in Headers */,
DAC5726B1D10D5FC0004288B /* dispatch_timer.h in Headers */,
@@ -5195,12 +5772,15 @@
5D61FC351A84238C00846EE7 /* SDLAirbagStatus.h in Headers */,
5D61FC8A1A84238C00846EE7 /* SDLDiagnosticMessageResponse.h in Headers */,
5D61FC2D1A84238C00846EE7 /* SDLAddCommand.h in Headers */,
+ 88B3BF9C20DA8BBC00943565 /* SDLFuelRange.h in Headers */,
5D61FD931A84238C00846EE7 /* SDLShowConstantTBTResponse.h in Headers */,
5DBF06391E64ABBE00A5CF03 /* SDLLogConfiguration.h in Headers */,
5D61FCCB1A84238C00846EE7 /* SDLIgnitionStatus.h in Headers */,
5D61FCB71A84238C00846EE7 /* SDLGetVehicleDataResponse.h in Headers */,
5D61FDA91A84238C00846EE7 /* SDLSpeechCapabilities.h in Headers */,
+ 5D92935320B2F76500FCC775 /* SDLTemplateColorScheme.h in Headers */,
5DA23FFD1F312DBA009C0313 /* SDLVideoEncoderDelegate.h in Headers */,
+ EE7B6124205BF97B00E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.h in Headers */,
5D61FCE01A84238C00846EE7 /* SDLKeyboardEvent.h in Headers */,
5D3E48751D6F3B330000BFEF /* SDLAsynchronousOperation.h in Headers */,
DA9F7E631DCBFAC800ACAE48 /* SDLDateTime.h in Headers */,
@@ -5228,6 +5808,7 @@
5D61FDDA1A84238C00846EE7 /* SDLTransportDelegate.h in Headers */,
5D61FC411A84238C00846EE7 /* SDLAppHMIType.h in Headers */,
5D61FCEE1A84238C00846EE7 /* SDLListFilesResponse.h in Headers */,
+ 880245A420F79C3400ED195B /* SDLFileManagerConfiguration.h in Headers */,
5D61FC491A84238C00846EE7 /* SDLAudioType.h in Headers */,
5D61FC761A84238C00846EE7 /* SDLDeleteFile.h in Headers */,
5D61FD211A84238C00846EE7 /* SDLOnVehicleData.h in Headers */,
@@ -5245,6 +5826,7 @@
5D0A7386203F24060001595D /* SDLSoftButtonState.h in Headers */,
5D61FCE61A84238C00846EE7 /* SDLKeypressMode.h in Headers */,
5D61FD871A84238C00846EE7 /* SDLSetGlobalProperties.h in Headers */,
+ 5D92936120B354BE00FCC775 /* SDLChoiceSetDelegate.h in Headers */,
5D61FC741A84238C00846EE7 /* SDLDeleteCommandResponse.h in Headers */,
5D61FDF11A84238C00846EE7 /* SDLUpdateTurnList.h in Headers */,
5DB996571F268ECB002D8795 /* SDLControlFramePayloadAudioStartServiceAck.h in Headers */,
@@ -5268,6 +5850,7 @@
5DCF76F51ACDBAD300BB647B /* SDLSendLocation.h in Headers */,
5D61FC9E1A84238C00846EE7 /* SDLEncodedSyncPData.h in Headers */,
1FF7DABA1F75B2A800B46C30 /* SDLFocusableItemLocator.h in Headers */,
+ 5D019276214994AC003500F6 /* NSMutableArray+Safe.h in Headers */,
5D61FDE11A84238C00846EE7 /* SDLTurn.h in Headers */,
5D9FC29B1FD8812F00ACA5C2 /* SDLAudioStreamManagerDelegate.h in Headers */,
5D61FC801A84238C00846EE7 /* SDLDeleteSubMenuResponse.h in Headers */,
@@ -5277,8 +5860,10 @@
5D61FDE91A84238C00846EE7 /* SDLUnsubscribeButtonResponse.h in Headers */,
5D61FCD51A84238C00846EE7 /* SDLImageType.h in Headers */,
5D61FC2F1A84238C00846EE7 /* SDLAddCommandResponse.h in Headers */,
+ 5D0C2A0020D9479B008B56CD /* SDLStreamingVideoLifecycleManager.h in Headers */,
5D61FD631A84238C00846EE7 /* SDLResetGlobalProperties.h in Headers */,
5D61FDD71A84238C00846EE7 /* SDLTouchType.h in Headers */,
+ 5D92935E20B33FF700FCC775 /* SDLChoiceSet.h in Headers */,
5D61FDD31A84238C00846EE7 /* SDLTouchEvent.h in Headers */,
5D61FD451A84238C00846EE7 /* SDLProtocolHeader.h in Headers */,
5D61FCFA1A84238C00846EE7 /* SDLMyKey.h in Headers */,
@@ -5316,6 +5901,7 @@
5D61FC881A84238C00846EE7 /* SDLDiagnosticMessage.h in Headers */,
5D0A738A203F24320001595D /* SDLSoftButtonObject.h in Headers */,
5D61FDB31A84238C00846EE7 /* SDLSubscribeVehicleDataResponse.h in Headers */,
+ 5D92935A20B33D4F00FCC775 /* SDLChoiceCell.h in Headers */,
5D61FC961A84238C00846EE7 /* SDLECallConfirmationStatus.h in Headers */,
5D4D67AC1D2ED37A00468B4A /* SDLNotificationDispatcher.h in Headers */,
5D61FDA51A84238C00846EE7 /* SDLSpeak.h in Headers */,
@@ -5340,10 +5926,12 @@
5D61FCF41A84238C00846EE7 /* SDLMaintenanceModeStatus.h in Headers */,
5D61FC571A84238C00846EE7 /* SDLButtonPressMode.h in Headers */,
5D3E487B1D6F888E0000BFEF /* SDLRPCResponseNotification.h in Headers */,
+ 5D92934D20AF4BEF00FCC775 /* SDLRGBColor.h in Headers */,
5D61FC471A84238C00846EE7 /* SDLAudioStreamingState.h in Headers */,
5D61FE071A84238C00846EE7 /* SDLVehicleDataStatus.h in Headers */,
5D61FD2D1A84238C00846EE7 /* SDLPermissionItem.h in Headers */,
5D61FCD11A84238C00846EE7 /* SDLImageFieldName.h in Headers */,
+ 88B3BF9820DA859800943565 /* SDLFuelType.h in Headers */,
5DBF062D1E64A93A00A5CF03 /* SDLLogFilter.h in Headers */,
5DCF76F91ACDD7CD00BB647B /* SDLSendLocationResponse.h in Headers */,
5D61FD391A84238C00846EE7 /* SDLPrerecordedSpeech.h in Headers */,
@@ -5361,11 +5949,13 @@
880E35B52088F75A00181259 /* SDLSystemCapabilityManager.h in Headers */,
5D61FC611A84238C00846EE7 /* SDLChoice.h in Headers */,
5D1BF6AF204742FB00D36881 /* SDLDisplayCapabilities+ShowManagerExtensions.h in Headers */,
+ 5D92937420B5EEA200FCC775 /* SDLPreloadChoicesOperation.h in Headers */,
5D7F87F31CE3C29E002DD7C4 /* SDLFileWrapper.h in Headers */,
5D61FC7C1A84238C00846EE7 /* SDLDeleteInteractionChoiceSetResponse.h in Headers */,
5D61FDB91A84238C00846EE7 /* SDLSyncPDataResponse.h in Headers */,
DAC572631D10C5020004288B /* SDLPinchGesture.h in Headers */,
5D61FC311A84238C00846EE7 /* SDLAddSubMenu.h in Headers */,
+ 5D0C2A0420D947AB008B56CD /* SDLStreamingAudioLifecycleManager.h in Headers */,
5D61FD171A84238C00846EE7 /* SDLOnPermissionsChange.h in Headers */,
5D4631081F21261A0092EFDC /* SDLControlFramePayloadRPCStartServiceAck.h in Headers */,
5D61FDD51A84238C00846EE7 /* SDLTouchEventCapabilities.h in Headers */,
@@ -5374,6 +5964,7 @@
5D61FD371A84238C00846EE7 /* SDLPredefinedLayout.h in Headers */,
5D61FDE31A84238C00846EE7 /* SDLUnregisterAppInterface.h in Headers */,
5D61FD331A84238C00846EE7 /* SDLPowerModeQualificationStatus.h in Headers */,
+ 5D92937020B5E0E500FCC775 /* SDLDeleteChoicesOperation.h in Headers */,
5D61FE011A84238C00846EE7 /* SDLVehicleDataNotificationStatus.h in Headers */,
5D61FDC91A84238C00846EE7 /* SDLTextField.h in Headers */,
5D6F7A351BC5B9B60070BF37 /* SDLLockScreenViewController.h in Headers */,
@@ -5403,6 +5994,7 @@
1E5AD0481F1F773E0029B8AF /* SDLModuleType.h in Headers */,
1E5AD06C1F208BAB0029B8AF /* SDLClimateControlData.h in Headers */,
1E5AD0381F1F4E390029B8AF /* SDLClimateControlCapabilities.h in Headers */,
+ 5D0C29FC20D93D8C008B56CD /* SDLVideoStreamingState.h in Headers */,
1E5AD0501F1F7BF10029B8AF /* SDLRadioBand.h in Headers */,
1E5AD0401F1F58480029B8AF /* SDLVentilationMode.h in Headers */,
1E5AD0941F20BEAD0029B8AF /* SDLSetInteriorVehicleDataResponse.h in Headers */,
@@ -5417,6 +6009,7 @@
5DA49CE51F1EA83300E65FC5 /* SDLControlFramePayloadRPCStartService.h in Headers */,
5D61FE031A84238C00846EE7 /* SDLVehicleDataResult.h in Headers */,
5D61FD911A84238C00846EE7 /* SDLShowConstantTBT.h in Headers */,
+ 5D92937C20B70A3E00FCC775 /* SDLPresentKeyboardOperation.h in Headers */,
5D61FC331A84238C00846EE7 /* SDLAddSubMenuResponse.h in Headers */,
5D61FD5D1A84238C00846EE7 /* SDLRegisterAppInterface.h in Headers */,
5D61FC9A1A84238C00846EE7 /* SDLEmergencyEvent.h in Headers */,
@@ -5437,14 +6030,15 @@
5D61FDC31A84238C00846EE7 /* SDLTBTState.h in Headers */,
5D61FD951A84238C00846EE7 /* SDLShowResponse.h in Headers */,
5D61FCA31A84238C00846EE7 /* SDLEndAudioPassThru.h in Headers */,
+ 88A795D22106787400056542 /* SDLStaticIconName.h in Headers */,
5D61FCB11A84238C00846EE7 /* SDLGetDTCs.h in Headers */,
5D61FDFF1A84238C00846EE7 /* SDLVehicleDataEventStatus.h in Headers */,
5D61FC5B1A84238C00846EE7 /* SDLChangeRegistration.h in Headers */,
5D61FD5B1A84238C00846EE7 /* SDLReadDIDResponse.h in Headers */,
5D61FDEF1A84238C00846EE7 /* SDLUpdateMode.h in Headers */,
EED5CA001F4D18DC00F04000 /* SDLRAWH264Packetizer.h in Headers */,
- DA8966EB1E56939F00413EAB /* SDLStreamingMediaLifecycleManager.h in Headers */,
5D293AFE1FE078A9000CBD7E /* SDLCarWindowViewController.h in Headers */,
+ 8818ADD82100FC18007D6F19 /* SDLTurnSignal.h in Headers */,
5D61FDDB1A84238C00846EE7 /* SDLTriggerSource.h in Headers */,
5D61FD8F1A84238C00846EE7 /* SDLShow.h in Headers */,
5D61FDDD1A84238C00846EE7 /* SDLTTSChunk.h in Headers */,
@@ -5452,6 +6046,7 @@
5D61FCC11A84238C00846EE7 /* SDLHMILevel.h in Headers */,
8B9376D71F3349FC009605C4 /* SDLMetadataTags.h in Headers */,
5D61FD471A84238C00846EE7 /* SDLProtocolListener.h in Headers */,
+ EE28F9E3209802A500B1B61D /* SDLStreamingProtocolDelegate.h in Headers */,
5D61FCA01A84238C00846EE7 /* SDLEncodedSyncPDataResponse.h in Headers */,
5D61FD271A84238C00846EE7 /* SDLPerformAudioPassThruResponse.h in Headers */,
5D61FD251A84238C00846EE7 /* SDLPerformAudioPassThru.h in Headers */,
@@ -5476,6 +6071,8 @@
5D61FCAD1A84238C00846EE7 /* SDLFunctionID.h in Headers */,
DA9F7E831DCC047200ACAE48 /* SDLWayPointType.h in Headers */,
5D61FDF51A84238C00846EE7 /* SDLV1ProtocolHeader.h in Headers */,
+ 5D92936320B3551600FCC775 /* SDLKeyboardDelegate.h in Headers */,
+ 5D92936820B3601700FCC775 /* SDLChoiceSetManager.h in Headers */,
5DBF06351E64A9FE00A5CF03 /* SDLLogConstants.h in Headers */,
DAC572671D10C5640004288B /* CGPoint_Util.h in Headers */,
5D61FDF91A84238C00846EE7 /* SDLV2ProtocolHeader.h in Headers */,
@@ -5623,7 +6220,7 @@
attributes = {
CLASSPREFIX = SDL;
LastSwiftUpdateCheck = 0710;
- LastUpgradeCheck = 0930;
+ LastUpgradeCheck = 0940;
ORGANIZATIONNAME = smartdevicelink;
TargetAttributes = {
5D4019AE1A76EC350006B0C2 = {
@@ -5640,7 +6237,7 @@
};
5D61FA1B1A84237100846EE7 = {
CreatedOnToolsVersion = 6.1.1;
- LastSwiftMigration = 0930;
+ LastSwiftMigration = 0940;
};
5D61FA251A84237100846EE7 = {
CreatedOnToolsVersion = 6.1.1;
@@ -5678,11 +6275,12 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 5D0218F91A8E7A7300D1BF62 /* ConnectionTCPTableViewController.storyboard in Resources */,
- 5D0219051A8E9F6D00D1BF62 /* ConnectionIAPTableViewController.storyboard in Resources */,
- 5D4029E31A76F0760006B0C2 /* LaunchScreen.xib in Resources */,
- 5D4029D41A76F0340006B0C2 /* Images.xcassets in Resources */,
- 5D4029E41A76F0760006B0C2 /* Main.storyboard in Resources */,
+ 5D1FF2B121304568000EB9B4 /* ConnectionIAPTableViewController.storyboard in Resources */,
+ 5D1FF2AF21304568000EB9B4 /* ConnectionTCPTableViewController.storyboard in Resources */,
+ 5D1FF2C6213045F2000EB9B4 /* Images.xcassets in Resources */,
+ 5D1FF2B021304568000EB9B4 /* Main.storyboard in Resources */,
+ 5D1FF2D12130466D000EB9B4 /* LaunchScreen.xib in Resources */,
+ 5D1FF2CE21304654000EB9B4 /* SmartDeviceLink-Example-ObjC-Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5717,11 +6315,12 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 88A0AA66207CFF980075132C /* Main.storyboard in Resources */,
- 88A0AA68207CFF980075132C /* ConnectionTCPTableViewController.storyboard in Resources */,
- 88A0AA65207CFF980075132C /* LaunchScreen.xib in Resources */,
- 88295690207CF68800EF056C /* Images.xcassets in Resources */,
- 88A0AA67207CFF980075132C /* ConnectionIAPTableViewController.storyboard in Resources */,
+ 5D1FF2F1213047AB000EB9B4 /* Main.storyboard in Resources */,
+ 5D1FF2FA2130480C000EB9B4 /* SmartDeviceLink-Example-Swift-Info.plist in Resources */,
+ 5D1FF2F3213047AB000EB9B4 /* ConnectionTCPTableViewController.storyboard in Resources */,
+ 5D1FF2C7213045F2000EB9B4 /* Images.xcassets in Resources */,
+ 5D1FF2F5213047B3000EB9B4 /* LaunchScreen.xib in Resources */,
+ 5D1FF2F2213047AB000EB9B4 /* ConnectionIAPTableViewController.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5742,23 +6341,24 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 5D4832A51A94F90D00252386 /* ConnectionTransitionContext.m in Sources */,
- 8800871E20A6356D008E1EA0 /* ButtonManager.m in Sources */,
- 5D0218FC1A8E7E1700D1BF62 /* ConnectionContainerViewController.m in Sources */,
- 88DA6D10209794A400AD8297 /* AlertManager.m in Sources */,
- 8803A0AF208E2A3A009FDC02 /* AudioManager.m in Sources */,
- 5D0218FF1A8E9E0D00D1BF62 /* ConnectionIAPTableViewController.m in Sources */,
- 8803A0B2208E7CA4009FDC02 /* VehicleDataManager.m in Sources */,
- 5D48329D1A8EA33D00252386 /* Preferences.m in Sources */,
- 8814AEA720AB65FC00466E0F /* MenuManager.m in Sources */,
- 8814AEAA20AB663800466E0F /* PerformInteractionManager.m in Sources */,
- 5D59350F1A855EB300687FB9 /* AppDelegate.m in Sources */,
- 5D5935121A855EBE00687FB9 /* main.m in Sources */,
- 5D4832A81A95191B00252386 /* ConnectionAnimatedTransition.m in Sources */,
- 88DE80B720A5C8DD00BA9CF0 /* RPCPermissionsManager.m in Sources */,
- 5D4832A11A92868E00252386 /* ProxyManager.m in Sources */,
- 5D0218F61A8E79C400D1BF62 /* ConnectionTCPTableViewController.m in Sources */,
- 8863B59D207D3849002D6459 /* AppConstants.m in Sources */,
+ 5D1FF2CA2130463F000EB9B4 /* AppDelegate.m in Sources */,
+ 5D1FF2BA21304581000EB9B4 /* ConnectionTCPTableViewController.m in Sources */,
+ 5D1FF2B921304581000EB9B4 /* ConnectionContainerViewController.m in Sources */,
+ 5D1FF29D21304515000EB9B4 /* RPCPermissionsManager.m in Sources */,
+ 5D1FF2A121304515000EB9B4 /* VehicleDataManager.m in Sources */,
+ 5D1FF29F21304515000EB9B4 /* ProxyManager.m in Sources */,
+ 5D1FF2BF21304598000EB9B4 /* ConnectionAnimatedTransition.m in Sources */,
+ 5D1FF2A721304531000EB9B4 /* Preferences.m in Sources */,
+ 5D1FF2CC2130464E000EB9B4 /* main.m in Sources */,
+ 5D1FF2C021304598000EB9B4 /* ConnectionTransitionContext.m in Sources */,
+ 5D1FF2A221304515000EB9B4 /* ButtonManager.m in Sources */,
+ 5D1FF2A021304515000EB9B4 /* AudioManager.m in Sources */,
+ 5D1FF29E21304515000EB9B4 /* MenuManager.m in Sources */,
+ 5D1FF2C3213045EB000EB9B4 /* AppConstants.m in Sources */,
+ 5D1FF2B821304581000EB9B4 /* ConnectionIAPTableViewController.m in Sources */,
+ 5D1FF29C21304515000EB9B4 /* PerformInteractionManager.m in Sources */,
+ 5D1FF2A821304531000EB9B4 /* TextValidator.m in Sources */,
+ 5D1FF28D213044F9000EB9B4 /* AlertManager.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5768,12 +6368,15 @@
files = (
1E4920B31F6A6463008F2CC3 /* SDLOnInteriorVehicleData.m in Sources */,
1E4920B21F6A6455008F2CC3 /* SDLGetInteriorVehicleDataResponse.m in Sources */,
+ 1EB59CB8202D9C8100343A61 /* SDLSeatMemoryAction.m in Sources */,
1E4920B11F6A6443008F2CC3 /* SDLRadioState.m in Sources */,
+ 5D0C2A0120D9479B008B56CD /* SDLStreamingVideoLifecycleManager.m in Sources */,
5DA8A0EA1E955FE00039C50D /* SDLLogModel.m in Sources */,
5DA8A0E91E955F710039C50D /* SDLStreamingMediaManagerConstants.m in Sources */,
332A914F1CED9CC60043824C /* SDLAppInfo.m in Sources */,
1E5AD0491F1F773E0029B8AF /* SDLModuleType.m in Sources */,
DA9F7E841DCC047200ACAE48 /* SDLWayPointType.m in Sources */,
+ EE7B6123205BF6C800E0655B /* SDLControlFramePayloadRegisterSecondaryTransportNak.m in Sources */,
5D61FC561A84238C00846EE7 /* SDLButtonName.m in Sources */,
5D61FCC21A84238C00846EE7 /* SDLHMILevel.m in Sources */,
5D9FC2A71FD8815800ACA5C2 /* SDLPCMAudioConverter.m in Sources */,
@@ -5787,6 +6390,7 @@
5D61FCAC1A84238C00846EE7 /* SDLFuelCutoffStatus.m in Sources */,
5D61FC871A84238C00846EE7 /* SDLDeviceStatus.m in Sources */,
5D61FD561A84238C00846EE7 /* SDLPutFile.m in Sources */,
+ 1EAA474E20356B2D000FE74B /* SDLDisplayMode.m in Sources */,
5D61FCE71A84238C00846EE7 /* SDLKeypressMode.m in Sources */,
5D9FC29F1FD8813900ACA5C2 /* SDLAudioStreamManager.m in Sources */,
5D7F87F41CE3C29E002DD7C4 /* SDLFileWrapper.m in Sources */,
@@ -5796,6 +6400,7 @@
5D61FD1A1A84238C00846EE7 /* SDLOnSyncPData.m in Sources */,
8B7B319F1F2F7CF700BDC38D /* SDLVideoStreamingProtocol.m in Sources */,
5D61FC461A84238C00846EE7 /* SDLAudioPassThruCapabilities.m in Sources */,
+ 5D0C2A0520D947AB008B56CD /* SDLStreamingAudioLifecycleManager.m in Sources */,
5D61FD301A84238C00846EE7 /* SDLPermissionStatus.m in Sources */,
5D61FDEE1A84238C00846EE7 /* SDLUnsubscribeVehicleDataResponse.m in Sources */,
8B7B319B1F2F7B5700BDC38D /* SDLVideoStreamingCodec.m in Sources */,
@@ -5804,10 +6409,12 @@
5D61FC421A84238C00846EE7 /* SDLAppHMIType.m in Sources */,
5D61FD421A84238C00846EE7 /* SDLPRNDL.m in Sources */,
E9C32B921AB20BA200F283AF /* SDLIAPSession.m in Sources */,
+ 880245A520F79C3400ED195B /* SDLFileManagerConfiguration.m in Sources */,
5D61FD0C1A84238C00846EE7 /* SDLOnEncodedSyncPData.m in Sources */,
5D61FD0A1A84238C00846EE7 /* SDLOnDriverDistraction.m in Sources */,
5D61FCED1A84238C00846EE7 /* SDLListFiles.m in Sources */,
DA9F7E801DCC028B00ACAE48 /* SDLOnWayPointChange.m in Sources */,
+ 5D92935B20B33D4F00FCC775 /* SDLChoiceCell.m in Sources */,
E4139D1E1F6017770005B6EA /* SDLLifecycleConfigurationUpdate.m in Sources */,
5D61FC6E1A84238C00846EE7 /* SDLCreateInteractionChoiceSetResponse.m in Sources */,
5D61FD061A84238C00846EE7 /* SDLOnButtonPress.m in Sources */,
@@ -5817,12 +6424,18 @@
5D61FCCE1A84238C00846EE7 /* SDLImage.m in Sources */,
5D61FD241A84238C00846EE7 /* SDLParameterPermissions.m in Sources */,
1E5AD0711F209C880029B8AF /* SDLModuleData.m in Sources */,
+ 1EAA470C2032BAE5000FE74B /* SDLOnRCStatus.m in Sources */,
5D61FDD21A84238C00846EE7 /* SDLTouchCoord.m in Sources */,
5D61FCEF1A84238C00846EE7 /* SDLListFilesResponse.m in Sources */,
+ 5D3E420B20EAAD6500D8C622 /* SDLTPMS.m in Sources */,
5DD67CB11E65DDB7009CD394 /* SDLLogTargetAppleSystemLog.m in Sources */,
+ 5D92935420B2F76500FCC775 /* SDLTemplateColorScheme.m in Sources */,
+ 5D019277214994AC003500F6 /* NSMutableArray+Safe.m in Sources */,
5D61FD1C1A84238C00846EE7 /* SDLOnSystemRequest.m in Sources */,
5D61FC911A84238C00846EE7 /* SDLDisplayCapabilities.m in Sources */,
+ 1EB59CC4202DB40400343A61 /* SDLSeatControlCapabilities.m in Sources */,
5D61FD261A84238C00846EE7 /* SDLPerformAudioPassThru.m in Sources */,
+ 1EAA471E203410BB000FE74B /* SDLAudioControlCapabilities.m in Sources */,
5D61FC971A84238C00846EE7 /* SDLECallConfirmationStatus.m in Sources */,
1E5AD04D1F1F79640029B8AF /* SDLDefrostZone.m in Sources */,
5D61FC4A1A84238C00846EE7 /* SDLAudioType.m in Sources */,
@@ -5841,6 +6454,7 @@
5D82042E1BCEC32F00D0A41B /* SDLFile.m in Sources */,
5DA3F3601BC448590026F2D0 /* SDLNotificationConstants.m in Sources */,
5D61FD5A1A84238C00846EE7 /* SDLReadDID.m in Sources */,
+ 1EAA472E20344108000FE74B /* SDLLightStatus.m in Sources */,
1E5AD0351F1F3AA30029B8AF /* SDLRemoteControlCapabilities.m in Sources */,
5D61FC8F1A84238C00846EE7 /* SDLDimension.m in Sources */,
5D61FC9B1A84238C00846EE7 /* SDLEmergencyEvent.m in Sources */,
@@ -5856,12 +6470,16 @@
5D61FE141A84238C00846EE7 /* SDLWiperStatus.m in Sources */,
5D61FC8B1A84238C00846EE7 /* SDLDiagnosticMessageResponse.m in Sources */,
5DBF063A1E64ABBE00A5CF03 /* SDLLogConfiguration.m in Sources */,
+ 5D92937120B5E0E500FCC775 /* SDLDeleteChoicesOperation.m in Sources */,
+ 1EAA475220356CD2000FE74B /* SDLDistanceUnit.m in Sources */,
5D61FD2E1A84238C00846EE7 /* SDLPermissionItem.m in Sources */,
5D61FD041A84238C00846EE7 /* SDLOnButtonEvent.m in Sources */,
5D61FD201A84238C00846EE7 /* SDLOnTouchEvent.m in Sources */,
+ 5D92937920B6FB6200FCC775 /* SDLPresentChoiceSetOperation.m in Sources */,
8B7B31A71F2F875200BDC38D /* SDLVideoStreamingCapability.m in Sources */,
5DA3F35B1BC448480026F2D0 /* SDLError.m in Sources */,
5D61FD781A84238C00846EE7 /* SDLSamplingRate.m in Sources */,
+ 1EAA472A2034388D000FE74B /* SDLAudioControlData.m in Sources */,
5D61FC681A84238C00846EE7 /* SDLComponentVolumeStatus.m in Sources */,
5D61FDB61A84238C00846EE7 /* SDLSyncMsgVersion.m in Sources */,
5D61FC501A84238C00846EE7 /* SDLBodyInformation.m in Sources */,
@@ -5873,6 +6491,7 @@
5D61FD601A84238C00846EE7 /* SDLRegisterAppInterfaceResponse.m in Sources */,
5DB996581F268ECB002D8795 /* SDLControlFramePayloadAudioStartServiceAck.m in Sources */,
DAC572621D10C5020004288B /* SDLPinchGesture.m in Sources */,
+ 1EAA471A203406B2000FE74B /* SDLSISData.m in Sources */,
5D61FCF51A84238C00846EE7 /* SDLMaintenanceModeStatus.m in Sources */,
1EE48E911F2F0EE700B98D08 /* SDLTemperatureUnit.m in Sources */,
5D61FCD81A84238C00846EE7 /* SDLInteractionMode.m in Sources */,
@@ -5928,6 +6547,7 @@
1E5AD05D1F2064A80029B8AF /* SDLRDSData.m in Sources */,
5D61FCA61A84238C00846EE7 /* SDLEndAudioPassThruResponse.m in Sources */,
5D61FD281A84238C00846EE7 /* SDLPerformAudioPassThruResponse.m in Sources */,
+ 1EB59CB0202D97AC00343A61 /* SDLMassageCushionFirmness.m in Sources */,
5D61FDCE1A84238C00846EE7 /* SDLTimerMode.m in Sources */,
5D61FD701A84238C00846EE7 /* SDLRPCPayload.m in Sources */,
5D61FD9C1A84238C00846EE7 /* SDLSlider.m in Sources */,
@@ -5936,15 +6556,18 @@
5D9FDA8F1F2A7D3400A495C8 /* bson_array.c in Sources */,
5D61FD661A84238C00846EE7 /* SDLResetGlobalPropertiesResponse.m in Sources */,
5D61FCFE1A84238C00846EE7 /* SDLObjectWithPriority.m in Sources */,
+ 5D92937D20B70A3E00FCC775 /* SDLPresentKeyboardOperation.m in Sources */,
5DBF06241E64A83F00A5CF03 /* SDLLogManager.m in Sources */,
5D61FC401A84238C00846EE7 /* SDLAmbientLightStatus.m in Sources */,
5D61FC951A84238C00846EE7 /* SDLDriverDistractionState.m in Sources */,
5DB996611F28C6ED002D8795 /* SDLControlFramePayloadVideoStartServiceAck.m in Sources */,
5D61FD961A84238C00846EE7 /* SDLShowResponse.m in Sources */,
5D61FD981A84238C00846EE7 /* SDLSingleTireStatus.m in Sources */,
+ 1EB59CA8202D946500343A61 /* SDLMassageModeData.m in Sources */,
5D9FDA931F2A7D3400A495C8 /* bson_util.c in Sources */,
5D61FD511A84238C00846EE7 /* SDLProxy.m in Sources */,
5D61FD461A84238C00846EE7 /* SDLProtocolHeader.m in Sources */,
+ 5DD8406320FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.m in Sources */,
8BBEA6071F324165003EEA26 /* SDLMetadataType.m in Sources */,
5D61FDBC1A84238C00846EE7 /* SDLSystemAction.m in Sources */,
5D61FC381A84238C00846EE7 /* SDLAlert.m in Sources */,
@@ -5954,9 +6577,11 @@
5D61FD101A84238C00846EE7 /* SDLOnHMIStatus.m in Sources */,
5D61FC301A84238C00846EE7 /* SDLAddCommandResponse.m in Sources */,
5D61FCCC1A84238C00846EE7 /* SDLIgnitionStatus.m in Sources */,
+ 1EAA473A20345B7A000FE74B /* SDLLightCapabilities.m in Sources */,
5D61FC3A1A84238C00846EE7 /* SDLAlertManeuver.m in Sources */,
5D61FC5E1A84238C00846EE7 /* SDLChangeRegistrationResponse.m in Sources */,
5D8204231BCEA89A00D0A41B /* SDLFileManager.m in Sources */,
+ 1EB59CC0202DA26000343A61 /* SDLSeatControlData.m in Sources */,
5D61FC7D1A84238C00846EE7 /* SDLDeleteInteractionChoiceSetResponse.m in Sources */,
DAC572661D10C5640004288B /* CGPoint_Util.m in Sources */,
5D00AC681F140F0A004000D9 /* SDLSystemCapabilityType.m in Sources */,
@@ -5973,21 +6598,26 @@
5D61FC771A84238C00846EE7 /* SDLDeleteFile.m in Sources */,
5D61FC811A84238C00846EE7 /* SDLDeleteSubMenuResponse.m in Sources */,
DA9F7E681DCBFAD400ACAE48 /* SDLOasisAddress.m in Sources */,
+ EEB19330205028BE00A8940C /* SDLControlFramePayloadTransportEventUpdate.m in Sources */,
5D61FC7B1A84238C00846EE7 /* SDLDeleteInteractionChoiceSet.m in Sources */,
5D61FDC01A84238C00846EE7 /* SDLSystemRequest.m in Sources */,
+ 5D92938120B70CD600FCC775 /* SDLCheckChoiceVROptionalOperation.m in Sources */,
5D61FD021A84238C00846EE7 /* SDLOnAudioPassThru.m in Sources */,
5D61FCE51A84238C00846EE7 /* SDLKeyboardProperties.m in Sources */,
5DBF062E1E64A93A00A5CF03 /* SDLLogFilter.m in Sources */,
5D61FDFA1A84238C00846EE7 /* SDLV2ProtocolHeader.m in Sources */,
5D61FDD01A84238C00846EE7 /* SDLTireStatus.m in Sources */,
+ 5D92935F20B33FF700FCC775 /* SDLChoiceSet.m in Sources */,
5D61FC321A84238C00846EE7 /* SDLAddSubMenu.m in Sources */,
5D61FDF61A84238C00846EE7 /* SDLV1ProtocolHeader.m in Sources */,
+ EE798CA620561218008EDE8E /* SDLSecondaryTransportManager.m in Sources */,
5D61FDAA1A84238C00846EE7 /* SDLSpeechCapabilities.m in Sources */,
1E5AD0951F20BEAD0029B8AF /* SDLSetInteriorVehicleDataResponse.m in Sources */,
5D61FDB41A84238C00846EE7 /* SDLSubscribeVehicleDataResponse.m in Sources */,
5D61FD121A84238C00846EE7 /* SDLOnKeyboardInput.m in Sources */,
DA9F7E9A1DCC052C00ACAE48 /* SDLLocationCoordinate.m in Sources */,
5D61FCCA1A84238C00846EE7 /* SDLIgnitionStableStatus.m in Sources */,
+ 88A795D32106787400056542 /* SDLStaticIconName.m in Sources */,
5D61FCFB1A84238C00846EE7 /* SDLMyKey.m in Sources */,
5D61FCAA1A84238C00846EE7 /* SDLFileType.m in Sources */,
1E5AD0651F207DD50029B8AF /* SDLTemperature.m in Sources */,
@@ -6004,6 +6634,7 @@
5D61FC661A84238C00846EE7 /* SDLCompassDirection.m in Sources */,
5D61FD841A84238C00846EE7 /* SDLSetDisplayLayout.m in Sources */,
DA9F7E701DCBFFDB00ACAE48 /* SDLGetWayPoints.m in Sources */,
+ 1EAA4756203583BC000FE74B /* SDLHMISettingsControlData.m in Sources */,
5D00AC741F151CFE004000D9 /* SDLGetSystemCapabilityResponse.m in Sources */,
5D61FE001A84238C00846EE7 /* SDLVehicleDataEventStatus.m in Sources */,
5D61FDC41A84238C00846EE7 /* SDLTBTState.m in Sources */,
@@ -6013,10 +6644,12 @@
DA9F7E881DCC049900ACAE48 /* SDLSubscribeWayPoints.m in Sources */,
5D61FDDE1A84238C00846EE7 /* SDLTTSChunk.m in Sources */,
5D61FD9E1A84238C00846EE7 /* SDLSliderResponse.m in Sources */,
+ 1EAA47462035623B000FE74B /* SDLLightControlData.m in Sources */,
5D61FC5C1A84238C00846EE7 /* SDLChangeRegistration.m in Sources */,
5D1665C91CF8CA3D00CC4CA1 /* SDLPermissionFilter.m in Sources */,
5D61FDBA1A84238C00846EE7 /* SDLSyncPDataResponse.m in Sources */,
1E5AD0511F1F7BF10029B8AF /* SDLRadioBand.m in Sources */,
+ 88B3BF9D20DA8BBC00943565 /* SDLFuelRange.m in Sources */,
5D61FDDC1A84238C00846EE7 /* SDLTriggerSource.m in Sources */,
5DADA7761F4DFED60084D17D /* SDLRectangle.m in Sources */,
88EED83F1F33C5A400E6C42E /* SDLSendHapticData.m in Sources */,
@@ -6026,15 +6659,19 @@
5DAB5F572098E5D100A020C8 /* SDLProtocolConstants.m in Sources */,
5D61FC9F1A84238C00846EE7 /* SDLEncodedSyncPData.m in Sources */,
5D61FE061A84238C00846EE7 /* SDLVehicleDataResultCode.m in Sources */,
+ 2BF2F85020ED004000A26EF2 /* SDLAudioStreamingIndicator.m in Sources */,
5D61FCA41A84238C00846EE7 /* SDLEndAudioPassThru.m in Sources */,
5D339CEB207C066E000CC364 /* SDLMenuCell.m in Sources */,
+ 8818ADD92100FC18007D6F19 /* SDLTurnSignal.m in Sources */,
5D8B17541AC9E11B006A6E1C /* SDLDialNumberResponse.m in Sources */,
DA6223BE1E7B088200878689 /* CVPixelBufferRef+SDLUtil.m in Sources */,
1FF7DABC1F75B2BF00B46C30 /* SDLFocusableItemLocator.m in Sources */,
EED5CA021F4D18EC00F04000 /* SDLRAWH264Packetizer.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 */,
5DD67CBD1E661C84009CD394 /* SDLLogTargetOSLog.m in Sources */,
DA9F7E641DCBFAC800ACAE48 /* SDLDateTime.m in Sources */,
5D61FD581A84238C00846EE7 /* SDLPutFileResponse.m in Sources */,
@@ -6049,9 +6686,11 @@
5D61FE041A84238C00846EE7 /* SDLVehicleDataResult.m in Sources */,
5D61FD5C1A84238C00846EE7 /* SDLReadDIDResponse.m in Sources */,
5D1BF6B0204742FB00D36881 /* SDLDisplayCapabilities+ShowManagerExtensions.m in Sources */,
+ 1EB59CB4202D9B5F00343A61 /* SDLSeatMemoryActionType.m in Sources */,
5D61FD321A84238C00846EE7 /* SDLPolicyDataParser.m in Sources */,
5D61FC621A84238C00846EE7 /* SDLChoice.m in Sources */,
1E5AD0811F20B73E0029B8AF /* SDLButtonPress.m in Sources */,
+ 5D92937520B5EEA200FCC775 /* SDLPreloadChoicesOperation.m in Sources */,
DAC5725B1D10B81E0004288B /* SDLTouch.m in Sources */,
5D61FCEB1A84238C00846EE7 /* SDLLayoutMode.m in Sources */,
5D61FC2E1A84238C00846EE7 /* SDLAddCommand.m in Sources */,
@@ -6070,12 +6709,14 @@
5D61FCD21A84238C00846EE7 /* SDLImageFieldName.m in Sources */,
5D61FD761A84238C00846EE7 /* SDLRPCResponse.m in Sources */,
5D3E48761D6F3B330000BFEF /* SDLAsynchronousOperation.m in Sources */,
+ 5D92934E20AF4BEF00FCC775 /* SDLRGBColor.m in Sources */,
1E5AD06D1F208BAB0029B8AF /* SDLClimateControlData.m in Sources */,
5D61FE081A84238C00846EE7 /* SDLVehicleDataStatus.m in Sources */,
5D9FC2A21FD8814A00ACA5C2 /* SDLAudioFile.m in Sources */,
E9C32B9F1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.m in Sources */,
5D61FDA81A84238C00846EE7 /* SDLSpeakResponse.m in Sources */,
5DB92D331AC9C8BA00C15BB0 /* SDLRPCStruct.m in Sources */,
+ 1EAA474220355FF3000FE74B /* SDLLightControlCapabilities.m in Sources */,
8B7B31A31F2F7FEA00BDC38D /* SDLVideoStreamingFormat.m in Sources */,
DA0C46AD1DCD35080001F2A8 /* SDLNames.m in Sources */,
5DA3F3551BC448060026F2D0 /* NSMapTable+Subscripting.m in Sources */,
@@ -6084,9 +6725,11 @@
88EED8391F33AE1700E6C42E /* SDLHapticRect.m in Sources */,
DA9F7E9C1DCC052C00ACAE48 /* SDLLocationDetails.m in Sources */,
5D61FD7A1A84238C00846EE7 /* SDLScreenParams.m in Sources */,
+ 1EAA47122033FE80000FE74B /* SDLStationIDNumber.m in Sources */,
5D61FC831A84238C00846EE7 /* SDLDeviceInfo.m in Sources */,
DA318C201DD0F06C00C035AC /* NSMutableDictionary+Store.m in Sources */,
5D7F87EC1CE3C1A1002DD7C4 /* SDLDeleteFileOperation.m in Sources */,
+ 1EB59CBC202DA1B400343A61 /* SDLSupportedSeat.m in Sources */,
97E26DED1E807AD70074A3C7 /* SDLMutableDataQueue.m in Sources */,
5D61FD641A84238C00846EE7 /* SDLResetGlobalProperties.m in Sources */,
5DCD7AE11FCCA8D200A0FC7F /* SDLCarWindow.m in Sources */,
@@ -6094,6 +6737,7 @@
5D60088B1BE3ED540094A505 /* SDLStateMachine.m in Sources */,
8877F5EF1F34A72200DC128A /* SDLSendHapticDataResponse.m in Sources */,
5D61FD181A84238C00846EE7 /* SDLOnPermissionsChange.m in Sources */,
+ 1EB59CAC202D96A200343A61 /* SDLMassageCushion.m in Sources */,
5D61FD3E1A84238C00846EE7 /* SDLPrimaryAudioSource.m in Sources */,
1E5AD0851F20B9290029B8AF /* SDLButtonPressResponse.m in Sources */,
5D82041F1BCD8E6100D0A41B /* SDLConfiguration.m in Sources */,
@@ -6106,23 +6750,27 @@
5D61FD7E1A84238C00846EE7 /* SDLScrollableMessageResponse.m in Sources */,
5D61FD3A1A84238C00846EE7 /* SDLPrerecordedSpeech.m in Sources */,
5D61FCA11A84238C00846EE7 /* SDLEncodedSyncPDataResponse.m in Sources */,
+ 88B3BF9920DA859800943565 /* SDLFuelType.m in Sources */,
5DD67CC41E68AE82009CD394 /* SDLLogFileModuleMap.m in Sources */,
5D61FD401A84238C00846EE7 /* SDLPrioritizedObjectCollection.m in Sources */,
5D61FDC61A84238C00846EE7 /* SDLTCPTransport.m in Sources */,
5D61FE0E1A84238C00846EE7 /* SDLVrCapabilities.m in Sources */,
5DAD5F80204DEDEB0025624C /* SDLScreenManager.m in Sources */,
+ 1EAA4732203442C0000FE74B /* SDLLightName.m in Sources */,
5D61FDC21A84238C00846EE7 /* SDLSystemRequestResponse.m in Sources */,
5D9FDA911F2A7D3400A495C8 /* bson_object.c in Sources */,
5D61FD001A84238C00846EE7 /* SDLOnAppInterfaceUnregistered.m in Sources */,
- DA8966EC1E56939F00413EAB /* SDLStreamingMediaLifecycleManager.m in Sources */,
DAC5726A1D10D5FC0004288B /* dispatch_timer.m in Sources */,
5D61FC6C1A84238C00846EE7 /* SDLCreateInteractionChoiceSet.m in Sources */,
5DCD7AF71FCCA8E400A0FC7F /* SDLScreenshotViewController.m in Sources */,
+ 1EB59CA4202D92F600343A61 /* SDLMassageMode.m in Sources */,
5D61FD081A84238C00846EE7 /* SDLOnCommand.m in Sources */,
5D53C46E1B7A99B9003526EA /* SDLStreamingMediaManager.m in Sources */,
5D339CF4207C0ACE000CC364 /* SDLMenuManager.m in Sources */,
+ 1EB59CA0202D925500343A61 /* SDLMassageZone.m in Sources */,
5D61FD6A1A84238C00846EE7 /* SDLRPCMessage.m in Sources */,
1E5AD0391F1F4E390029B8AF /* SDLClimateControlCapabilities.m in Sources */,
+ 5D92936920B3601700FCC775 /* SDLChoiceSetManager.m in Sources */,
5D61FDA21A84238C00846EE7 /* SDLSoftButtonCapabilities.m in Sources */,
5D8204321BD001C700D0A41B /* SDLArtwork.m in Sources */,
5D61FD8E1A84238C00846EE7 /* SDLSetMediaClockTimerResponse.m in Sources */,
@@ -6133,6 +6781,7 @@
5D61FCE31A84238C00846EE7 /* SDLKeyboardLayout.m in Sources */,
5D61FE0C1A84238C00846EE7 /* SDLVehicleType.m in Sources */,
880E35B42088F75A00181259 /* SDLSystemCapabilityManager.m in Sources */,
+ 1EAA474A203567FA000FE74B /* SDLHMISettingsControlCapabilities.m in Sources */,
DA9F7E941DCC04E400ACAE48 /* SDLUnsubscribeWayPoints.m in Sources */,
5D61FDCC1A84238C00846EE7 /* SDLTextFieldName.m in Sources */,
5D61FC751A84238C00846EE7 /* SDLDeleteCommandResponse.m in Sources */,
@@ -6140,8 +6789,10 @@
5D61FD861A84238C00846EE7 /* SDLSetDisplayLayoutResponse.m in Sources */,
5D61FCB41A84238C00846EE7 /* SDLGetDTCsResponse.m in Sources */,
5D61FDFC1A84238C00846EE7 /* SDLV2ProtocolMessage.m in Sources */,
+ 1EAA4726203416D3000FE74B /* SDLEqualizerSettings.m in Sources */,
5D61FD361A84238C00846EE7 /* SDLPowerModeStatus.m in Sources */,
5D61FD621A84238C00846EE7 /* SDLRequestType.m in Sources */,
+ 1EAA473E203554B5000FE74B /* SDLLightState.m in Sources */,
5D61FCBA1A84238C00846EE7 /* SDLGlobalProperty.m in Sources */,
5D61FD4F1A84238C00846EE7 /* SDLProtocolReceivedMessageRouter.m in Sources */,
5D0A7375203F0C730001595D /* SDLTextAndGraphicManager.m in Sources */,
@@ -6164,11 +6815,14 @@
162E83901A9BDE8B00906325 /* SDLTireStatusSpec.m in Sources */,
162E82E01A9BDE8B00906325 /* SDLHMILevelSpec.m in Sources */,
5DC09EDA1F2F7FEC00F4AB1D /* SDLControlFramePayloadNakSpec.m in Sources */,
+ 1EB59CCE202DC97900343A61 /* SDLMassageCushionSpec.m in Sources */,
162E83041A9BDE8B00906325 /* SDLUpdateModeSpec.m in Sources */,
162E83801A9BDE8B00906325 /* SDLHMIPermissionsSpec.m in Sources */,
+ 1EAA476C2036A52F000FE74B /* SDLLightCapabilitiesSpec.m in Sources */,
5D1654561D3E754F00554D93 /* SDLLifecycleManagerSpec.m in Sources */,
1EE8C43A1F347D4D00FDC2CF /* SDLRadioStateSpec.m in Sources */,
162E83021A9BDE8B00906325 /* SDLTouchTypeSpec.m in Sources */,
+ 1EAA47722036AEF5000FE74B /* SDLLightNameSpec.m in Sources */,
5DB92D2F1AC59F0000C15BB0 /* SDLObjectWithPrioritySpec.m in Sources */,
162E838A1A9BDE8B00906325 /* SDLSingleTireStatusSpec.m in Sources */,
5D6EB4CC1BF28DC600693731 /* NSMapTable+SubscriptingSpec.m in Sources */,
@@ -6183,11 +6837,14 @@
162E82EA1A9BDE8B00906325 /* SDLLanguageSpec.m in Sources */,
5D76E3291D3D0A8800647CFA /* SDLFakeViewControllerPresenter.m in Sources */,
5DB2022A1F5F38B60061D189 /* SDLFakeStreamingManagerDataSource.m in Sources */,
+ 5D92935020AF526200FCC775 /* SDLRGBColorSpec.m in Sources */,
162E83331A9BDE8B00906325 /* SDLPerformInteractionSpec.m in Sources */,
+ 1EAA47622035B1AE000FE74B /* SDLDistanceUnitSpec.m in Sources */,
5D0A9F951F15585B00CC80DD /* SDLPhoneCapabilitySpec.m in Sources */,
1EE8C4561F38788A00FDC2CF /* SDLButtonPressSpec.m in Sources */,
1680B1151A9CD7AD00DBD79E /* SDLV2ProtocolHeaderSpec.m in Sources */,
1EE8C4541F38762E00FDC2CF /* SDLOnInteriorVehicleDataSpec.m in Sources */,
+ 5DE35E4720CB0AB90034BE5A /* SDLChoiceSetSpec.m in Sources */,
162E83101A9BDE8B00906325 /* SDLOnAudioPassThruSpec.m in Sources */,
DABB62171E4A900C0034C567 /* SDLH264VideoEncoderSpec.m in Sources */,
5DBEFA581F436132009EE295 /* SDLFakeSecurityManager.m in Sources */,
@@ -6198,11 +6855,13 @@
162E83511A9BDE8B00906325 /* SDLDeleteInteractionChoiceSetResponseSpec.m in Sources */,
DA9F7EB41DCC086400ACAE48 /* SDLDateTimeSpec.m in Sources */,
162E82E41A9BDE8B00906325 /* SDLImageFieldNameSpec.m in Sources */,
+ 882C42CE2108CDB100A44B58 /* (null) in Sources */,
162E82ED1A9BDE8B00906325 /* SDLMaintenanceModeStatusSpec.m in Sources */,
8B9376DB1F33656C009605C4 /* SDLMetadataTagsSpec.m in Sources */,
5DB92D2D1AC4A34F00C15BB0 /* SDLPrioritizedObjectCollectionSpec.m in Sources */,
5D43466D1E6F522000B639C6 /* SDLLogModelSpec.m in Sources */,
5DA23FF31F2FA35C009C0313 /* SDLControlFramePayloadAudioStartServiceAckSpec.m in Sources */,
+ 1EAA476820369BCF000FE74B /* SDLLightStateSpec.m in Sources */,
1680B11C1A9CD7AD00DBD79E /* SDLProtocolMessageAssemblerSpec.m in Sources */,
8850DB601F4475D30053A48D /* TestMultipleFilesConnectionManager.m in Sources */,
162E83181A9BDE8B00906325 /* SDLOnKeyboardInputSpec.m in Sources */,
@@ -6216,6 +6875,7 @@
162E82E11A9BDE8B00906325 /* SDLHMIZoneCapabilitiesSpec.m in Sources */,
162E83721A9BDE8B00906325 /* SDLAudioPassThruCapabilitiesSpec.m in Sources */,
162E83681A9BDE8B00906325 /* SDLSpeakResponseSpec.m in Sources */,
+ 1EB59CD8202DCCD500343A61 /* SDLMassageCushionFirmnessSpec.m in Sources */,
162E83661A9BDE8B00906325 /* SDLShowResponseSpec.m in Sources */,
5D9F50831BEA5C6100FEF399 /* SDLFileManagerSpec.m in Sources */,
5DAB5F512098994C00A020C8 /* SDLMenuCellSpec.m in Sources */,
@@ -6224,6 +6884,7 @@
162E83121A9BDE8B00906325 /* SDLOnButtonPressSpec.m in Sources */,
5DAD5F8520507E1F0025624C /* SDLScreenManagerSpec.m in Sources */,
162E838D1A9BDE8B00906325 /* SDLStartTimeSpec.m in Sources */,
+ 1EAA47642035B231000FE74B /* SDLHMISettingsControlCapabilitiesSpec.m in Sources */,
162E836E1A9BDE8B00906325 /* SDLUnsubscribeButtonResponseSpec.m in Sources */,
5DEF69611FD6FB75004B8C2F /* SDLAudioStreamManagerSpec.m in Sources */,
162E835B1A9BDE8B00906325 /* SDLPerformInteractionResponseSpec.m in Sources */,
@@ -6237,7 +6898,9 @@
8877F5F11F34AA2D00DC128A /* SDLSendHapticDataResponseSpec.m in Sources */,
162E836C1A9BDE8B00906325 /* SDLSystemRequestResponseSpec.m in Sources */,
162E833C1A9BDE8B00906325 /* SDLSetMediaClockTimerSpec.m in Sources */,
+ 5DE35E4A20CB1BF70034BE5A /* SDLChoiceSetManagerSpec.m in Sources */,
162E83061A9BDE8B00906325 /* SDLVehicleDataEventStatusSpec.m in Sources */,
+ 1EAA47742036B31E000FE74B /* SDLAudioControlDataSpec.m in Sources */,
162E83911A9BDE8B00906325 /* SDLTouchCoordSpec.m in Sources */,
162E832B1A9BDE8B00906325 /* SDLDeleteSubMenuSpec.m in Sources */,
162E83411A9BDE8B00906325 /* SDLSubscribeButtonSpec.m in Sources */,
@@ -6251,10 +6914,13 @@
5DA23FF01F2FA0FF009C0313 /* SDLControlFramePayloadEndServiceSpec.m in Sources */,
162E83591A9BDE8B00906325 /* SDLListFilesResponseSpec.m in Sources */,
162E832A1A9BDE8B00906325 /* SDLDeleteInteractionChoiceSetSpec.m in Sources */,
+ EE460E0A2066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m in Sources */,
162E839D1A9BDE8B00906325 /* SDLRPCResponseSpec.m in Sources */,
+ EE460E082066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m in Sources */,
1EE8C4521F38657D00FDC2CF /* SDLTemperatureSpec.m in Sources */,
5DB1BCDF1D243DD3002FFC37 /* SDLLockScreenConfigurationSpec.m in Sources */,
162E82E51A9BDE8B00906325 /* SDLImageTypeSpec.m in Sources */,
+ 1EB59CD4202DCAE900343A61 /* SDLMassageModeDataSpec.m in Sources */,
162E83421A9BDE8B00906325 /* SDLSubscribeVehicleDataSpec.m in Sources */,
162E83811A9BDE8B00906325 /* SDLImageFieldSpec.m in Sources */,
5D60DF24202B7A80001EDA01 /* SDLAsynchronousRPCRequestOperationSpec.m in Sources */,
@@ -6263,17 +6929,18 @@
162E83231A9BDE8B00906325 /* SDLAddSubMenuSpec.m in Sources */,
DA4353E91D2721680099B8C4 /* DispatchTimerSpec.m in Sources */,
1EE8C45D1F387D1C00FDC2CF /* SDLGetInteriorVehicleDataResponseSpec.m in Sources */,
- DA8966EF1E5693E300413EAB /* SDLStreamingMediaLifecycleManagerSpec.m in Sources */,
162E82F21A9BDE8B00906325 /* SDLPredefinedLayoutSpec.m in Sources */,
162E83521A9BDE8B00906325 /* SDLDeleteSubMenuResponseSpec.m in Sources */,
162E82E91A9BDE8B00906325 /* SDLKeypressModeSpec.m in Sources */,
162E83211A9BDE8B00906325 /* SDLRPCPayloadSpec.m in Sources */,
162E83851A9BDE8B00906325 /* SDLMyKeySpec.m in Sources */,
162E83941A9BDE8B00906325 /* SDLTTSChunkSpec.m in Sources */,
+ 1EAA47702036AE89000FE74B /* SDLLightStatusSpec.m in Sources */,
162E82DC1A9BDE8B00906325 /* SDLEmergencyEventTypeSpec.m in Sources */,
162E82CE1A9BDE8A00906325 /* SDLAudioTypeSpec.m in Sources */,
162E831C1A9BDE8B00906325 /* SDLOnSyncPDataSpec.m in Sources */,
5D9F50871BED412E00FEF399 /* TestConnectionManager.m in Sources */,
+ 1EAA47802036C2C9000FE74B /* SDLStationIDNumberSpec.m in Sources */,
162E83341A9BDE8B00906325 /* SDLPutFileSpec.m in Sources */,
162E837A1A9BDE8B00906325 /* SDLDIDResult.m in Sources */,
162E83171A9BDE8B00906325 /* SDLOnHMIStatusSpec.m in Sources */,
@@ -6301,12 +6968,14 @@
162E82DA1A9BDE8B00906325 /* SDLDriverDistractionStateSpec.m in Sources */,
162E83631A9BDE8B00906325 /* SDLSetGlobalPropertiesResponseSpec.m in Sources */,
162E837B1A9BDE8B00906325 /* SDLDisplayCapabilitiesSpec.m in Sources */,
+ 5D92935620B2FD7300FCC775 /* SDLTemplateColorSchemeSpec.m in Sources */,
162E82DE1A9BDE8B00906325 /* SDLFuelCutoffStatusSpec.m in Sources */,
162E83271A9BDE8B00906325 /* SDLCreateInteractionChoiceSetSpec.m in Sources */,
5DAD5F8920508F090025624C /* SDLSoftButtonStateSpec.m in Sources */,
162E83111A9BDE8B00906325 /* SDLOnButtonEventSpec.m in Sources */,
1FF7DAC01F75CF6C00B46C30 /* SDLHapticManagerSpec.m in Sources */,
162E82FA1A9BDE8B00906325 /* SDLSoftButtonTypeSpec.m in Sources */,
+ 1EAA476A20369ECC000FE74B /* SDLLightControlCapabilitiesSpec.m in Sources */,
162E83751A9BDE8B00906325 /* SDLButtonCapabilitiesSpec.m in Sources */,
DA9F7EAF1DCC063400ACAE48 /* SDLLocationCoordinateSpec.m in Sources */,
162E83151A9BDE8B00906325 /* SDLOnEncodedSyncPDataSpec.m in Sources */,
@@ -6324,16 +6993,21 @@
5DBF0D5E1F3A68C0008AF2C9 /* SDLControlFramePayloadVideoStartServiceSpec.m in Sources */,
162E836A1A9BDE8B00906325 /* SDLSubscribeVehicleDataResponseSpec.m in Sources */,
5D43465B1E6F154400B639C6 /* SDLLogConfigurationSpec.m in Sources */,
+ 1EAA475E2035B177000FE74B /* SDLDisplayModeSpec.m in Sources */,
162E83761A9BDE8B00906325 /* SDLChoiceSpec.m in Sources */,
162E83571A9BDE8B00906325 /* SDLGetDTCsResponseSpec.m in Sources */,
5D4346471E6F0BDA00B639C6 /* SDLLogFileModuleSpec.m in Sources */,
+ 88A1CF1E21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m in Sources */,
1EE8C4581F387ABD00FDC2CF /* SDLButtonPressResponseSpec.m in Sources */,
5DA23FF61F2FAA31009C0313 /* SDLControlFramePayloadRPCStartServiceSpec.m in Sources */,
162E83201A9BDE8B00906325 /* SDLOnVehicleDataSpec.m in Sources */,
+ 1EAA47762036B847000FE74B /* SDLEqualizerSettingsSpec.m in Sources */,
162E83141A9BDE8B00906325 /* SDLOnDriverDistractionSpec.m in Sources */,
162E83371A9BDE8B00906325 /* SDLResetGlobalPropertiesSpec.m in Sources */,
162E82DF1A9BDE8B00906325 /* SDLGlobalProperySpec.m in Sources */,
+ 5DD8406520FCE21A0082CE04 /* SDLElectronicParkBrakeStatusSpec.m in Sources */,
162E82F61A9BDE8B00906325 /* SDLRequestTypeSpec.m in Sources */,
+ 5DE35E4520CAFC5D0034BE5A /* SDLChoiceCellSpec.m in Sources */,
162E82FB1A9BDE8B00906325 /* SDLSpeechCapabilitiesSpec.m in Sources */,
5D0A9F9C1F1565EB00CC80DD /* SDLGetSystemCapabilityResponseSpec.m in Sources */,
162E830D1A9BDE8B00906325 /* SDLWiperStatusSpec.m in Sources */,
@@ -6341,11 +7015,14 @@
162E832C1A9BDE8B00906325 /* SDLDiagnosticMessageSpec.m in Sources */,
162E83381A9BDE8B00906325 /* SDLScrollableMessageSpec.m in Sources */,
162E82E81A9BDE8B00906325 /* SDLKeyboardLayoutSpec.m in Sources */,
+ 5D64FE6F20DA9E4300792F9F /* SDLStreamingVideoLifecycleManagerSpec.m in Sources */,
DA9F7EA41DCC05EE00ACAE48 /* SDLSubscribeWaypointsSpec.m in Sources */,
DA4353EB1D2721680099B8C4 /* SDLTouchSpec.m in Sources */,
5DB1BCE71D245647002FFC37 /* TestStateMachineTarget.m in Sources */,
162E83541A9BDE8B00906325 /* SDLEncodedSyncPDataResponseSpec.m in Sources */,
+ 1EAA47582035AFD9000FE74B /* SDLHMISettingsControlDataSpec.m in Sources */,
162E83161A9BDE8B00906325 /* SDLOnHashChangeSpec.m in Sources */,
+ 8886EB982111F4FA008294A5 /* SDLFileManagerConfigurationSpec.m in Sources */,
162E82FE1A9BDE8B00906325 /* SDLTBTStateSpec.m in Sources */,
5D5DBF0B1D48E5E600D4F914 /* SDLLockScreenViewControllerSnapshotTests.m in Sources */,
5DB1BCD41D243A8E002FFC37 /* SDLListFilesOperationSpec.m in Sources */,
@@ -6357,9 +7034,12 @@
162E83451A9BDE8B00906325 /* SDLUnregisterAppInterfaceSpec.m in Sources */,
162E82EF1A9BDE8B00906325 /* SDLPermissionStatusSpec.m in Sources */,
DA9F7EA61DCC05F500ACAE48 /* SDLUnsubscribeWaypointsSpec.m in Sources */,
+ 1E89B0E2203196B800A47992 /* SDLSeatControlCapabilitiesSpec.m in Sources */,
162E82F01A9BDE8B00906325 /* SDLPowerModeQualificationStatusSpec.m in Sources */,
162E82CD1A9BDE8A00906325 /* SDLAudioStreamingStateSpec.m in Sources */,
1EE8C4461F3837D200FDC2CF /* SDLModuleDataSpec.m in Sources */,
+ EEA41D45210BA8CF0006CB6E /* TestTCPServer.m in Sources */,
+ 1E89B0DE2031636000A47992 /* SDLSeatControlDataSpec.m in Sources */,
162E831A1A9BDE8B00906325 /* SDLOnLockScreenStatusSpec.m in Sources */,
162E83431A9BDE8B00906325 /* SDLSyncPDataSpec.m in Sources */,
167ED9461A9BCE5D00797BE5 /* SwiftSpec.swift in Sources */,
@@ -6372,11 +7052,15 @@
162E83131A9BDE8B00906325 /* SDLOnCommandSpec.m in Sources */,
162E833A1A9BDE8B00906325 /* SDLSetDisplayLayoutSpec.m in Sources */,
1EE8C4401F348D3200FDC2CF /* SDLClimateControlCapabilitiesSpec.m in Sources */,
+ 5DE35E5420CB1C590034BE5A /* SDLPresentChoiceSetOperationSpec.m in Sources */,
162E838F1A9BDE8B00906325 /* SDLTextFieldSpec.m in Sources */,
+ 8818ADDD2100FE0C007D6F19 /* SDLTurnSignalSpec.m in Sources */,
162E82CA1A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m in Sources */,
162E83091A9BDE8B00906325 /* SDLVehicleDataStatusSpec.m in Sources */,
5DAD5F8D20508F220025624C /* SDLSoftButtonManagerSpec.m in Sources */,
162E83741A9BDE8B00906325 /* SDLBodyInformationSpec.m in Sources */,
+ 1EAA477A2036BD46000FE74B /* SDLSISDataSpec.m in Sources */,
+ 5D64FE6D20DA9CE600792F9F /* SDLVideoStreamingStateSpec.m in Sources */,
162E83641A9BDE8B00906325 /* SDLSetMediaClockTimerResponseSpec.m in Sources */,
162E839C1A9BDE8B00906325 /* SDLRPCRequestSpec.m in Sources */,
DA4353E31D2720A30099B8C4 /* SDLPinchGestureSpec.m in Sources */,
@@ -6385,7 +7069,9 @@
162E83651A9BDE8B00906325 /* SDLShowConstantTBTResponseSpec.m in Sources */,
162E82F91A9BDE8B00906325 /* SDLSamplingRateSpec.m in Sources */,
5DBEFA541F434B9E009EE295 /* SDLStreamingMediaConfigurationSpec.m in Sources */,
+ 1EB59CD2202DCA9B00343A61 /* SDLMassageModeSpec.m in Sources */,
162E82CB1A9BDE8A00906325 /* SDLAppHMITypeSpec.m in Sources */,
+ EEB2537E2067D3E80069584E /* SDLSecondaryTransportManagerSpec.m in Sources */,
162E83031A9BDE8B00906325 /* SDLTriggerSource.m in Sources */,
162E82D61A9BDE8A00906325 /* SDLComponentVolumeStatusSpec.m in Sources */,
162E835C1A9BDE8B00906325 /* SDLPutFileResponseSpec.m in Sources */,
@@ -6398,6 +7084,7 @@
162E835A1A9BDE8B00906325 /* SDLPerformAudioPassThruResponseSpec.m in Sources */,
162E83501A9BDE8B00906325 /* SDLDeleteFileResponseSpec.m in Sources */,
162E83601A9BDE8B00906325 /* SDLScrollableMessageResponseSpec.m in Sources */,
+ 88B3BFA220DA911E00943565 /* SDLFuelRangeSpec.m in Sources */,
162E83791A9BDE8B00906325 /* SDLDeviceStatusSpec.m in Sources */,
162E83821A9BDE8B00906325 /* SDLImageSpec.m in Sources */,
162E834A1A9BDE8B00906325 /* SDLAddSubMenuResponseSpec.m in Sources */,
@@ -6411,15 +7098,19 @@
162E838C1A9BDE8B00906325 /* SDLSoftButtonSpec.m in Sources */,
5DA23FF81F2FAF2D009C0313 /* SDLControlFramePayloadRPCStartServiceAckSpec.m in Sources */,
162E83191A9BDE8B00906325 /* SDLOnLanguageChangeSpec.m in Sources */,
+ 5DE35E4E20CB1C2C0034BE5A /* SDLDeleteChoicesOperationSpec.m in Sources */,
+ 5DE35E5220CB1C490034BE5A /* SDLPreloadChoicesOperationSpec.m in Sources */,
5DADA7781F4E059E0084D17D /* SDLRectangleSpec.m in Sources */,
5DB1BCDD1D243DC3002FFC37 /* SDLLifecycleConfigurationSpec.m in Sources */,
EED5CA0A1F4D206800F04000 /* SDLRTPH264PacketizerSpec.m in Sources */,
+ 1EB59CC8202DC86A00343A61 /* SDLModuleTypeSpec.m in Sources */,
162E83611A9BDE8B00906325 /* SDLSetAppIconResponseSpec.m in Sources */,
162E83471A9BDE8B00906325 /* SDLUnsubscribeVehicleDataSpec.m in Sources */,
162E839A1A9BDE8B00906325 /* SDLRPCMessageSpec.m in Sources */,
5D0A9F911F15550400CC80DD /* SDLSystemCapabilityTypeSpec.m in Sources */,
5DBF0D601F3B3DB4008AF2C9 /* SDLControlFrameVideoStartServiceAckSpec.m in Sources */,
162E83311A9BDE8B00906325 /* SDLListFilesSpec.m in Sources */,
+ EE5D1B33208EBCA900D17216 /* SDLTCPTransportSpec.m in Sources */,
DA9F7EB01DCC063400ACAE48 /* SDLLocationDetailsSpec.m in Sources */,
5DC978261B7A38640012C2F1 /* SDLGlobalsSpec.m in Sources */,
162E82FF1A9BDE8B00906325 /* SDLTextAlignmentSpec.m in Sources */,
@@ -6428,12 +7119,15 @@
162E837F1A9BDE8B00906325 /* SDLHeadLampStatusSpec.m in Sources */,
162E834D1A9BDE8B00906325 /* SDLChangeRegistrationResponseSpec.m in Sources */,
DA9F7EAC1DCC062400ACAE48 /* SDLUnsubscribeWaypointsResponseSpec.m in Sources */,
+ 1EB59CDA202DCEEC00343A61 /* SDLSeatMemoryActionSpec.m in Sources */,
+ 1EAA470E2032BF1D000FE74B /* SDLOnRCStatusSpec.m in Sources */,
5D43466B1E6F3B4C00B639C6 /* SDLLogFilterSpec.m in Sources */,
88D2AAE41F682BB20078D5B2 /* SDLLogConstantsSpec.m in Sources */,
162E836B1A9BDE8B00906325 /* SDLSyncPDataResponseSpec.m in Sources */,
8B7B31AF1F2FBA0200BDC38D /* SDLVideoStreamingCapabilitySpec.m in Sources */,
162E839B1A9BDE8B00906325 /* SDLRPCNotificationSpec.m in Sources */,
162E83581A9BDE8B00906325 /* SDLGetVehicleDataResponseSpec.m in Sources */,
+ 1EB59CCA202DC8E300343A61 /* SDLMassageZoneSpec.m in Sources */,
8B7B31B11F2FBD9500BDC38D /* SDLVideoStreamingFormatSpec.m in Sources */,
162E831D1A9BDE8B00906325 /* SDLOnSystemRequestSpec.m in Sources */,
162E835D1A9BDE8B00906325 /* SDLReadDIDResponseSpec.m in Sources */,
@@ -6441,13 +7135,16 @@
162E82D41A9BDE8A00906325 /* SDLCharacterSetSpec.m in Sources */,
162E830F1A9BDE8B00906325 /* SDLOnAppInterfaceUnregisteredSpec.m in Sources */,
162E83971A9BDE8B00906325 /* SDLVehicleTypeSpec.m in Sources */,
+ 88A795D5210678E000056542 /* SDLStaticIconNameSpec.m in Sources */,
1680B1131A9CD7AD00DBD79E /* SDLProtocolHeaderSpec.m in Sources */,
162E82D01A9BDE8A00906325 /* SDLButtonEventModeSpec.m in Sources */,
5DF40B26208FA7DE00DD6FDA /* SDLMenuManagerSpec.m in Sources */,
+ 5DE35E5620CB1C680034BE5A /* SDLPresentKeyboardOperationSpec.m in Sources */,
162E83781A9BDE8B00906325 /* SDLDeviceInfoSpec.m in Sources */,
162E83391A9BDE8B00906325 /* SDLSetAppIconSpec.m in Sources */,
162E83011A9BDE8B00906325 /* SDLTimerModeSpec.m in Sources */,
5D0A9F931F15560B00CC80DD /* SDLNavigationCapabilitySpec.m in Sources */,
+ 5D64FE7120DA9E6700792F9F /* SDLStreamingAudioLifecycleManagerSpec.m in Sources */,
162E83891A9BDE8B00906325 /* SDLScreenParamsSpec.m in Sources */,
162E83441A9BDE8B00906325 /* SDLSystemRequestSpec.m in Sources */,
162E83001A9BDE8B00906325 /* SDLTextFieldNameSpec.m in Sources */,
@@ -6458,6 +7155,7 @@
162E83321A9BDE8B00906325 /* SDLPerformAudioPassThruSpec.m in Sources */,
162E830B1A9BDE8B00906325 /* SDLVrCapabilitiesSpec.m in Sources */,
162E83081A9BDE8B00906325 /* SDLVehicleDataResultCodeSpec.m in Sources */,
+ 5DE35E4C20CB1C1C0034BE5A /* SDLCheckChoiceVROptionalOperationSpec.m in Sources */,
8877F5EB1F34A3BE00DC128A /* SDLSendHapticDataSpec.m in Sources */,
162E83621A9BDE8B00906325 /* SDLSetDisplayLayoutResponseSpec.m in Sources */,
162E832E1A9BDE8B00906325 /* SDLEndAudioPassThruSpec.m in Sources */,
@@ -6468,6 +7166,7 @@
1680B1171A9CD7AD00DBD79E /* SDLProtocolSpec.m in Sources */,
162E836D1A9BDE8B00906325 /* SDLUnregisterAppInterfaceResponseSpec.m in Sources */,
162E837C1A9BDE8B00906325 /* SDLECallInfoSpec.m in Sources */,
+ 1EAA47782036BA74000FE74B /* SDLAudioControlCapabilitiesSpec.m in Sources */,
5DB1BCD51D243A8E002FFC37 /* SDLUploadFileOperationSpec.m in Sources */,
162E83401A9BDE8B00906325 /* SDLSpeakSpec.m in Sources */,
5DCF76FC1ACDDB4200BB647B /* SDLSendLocationSpec.m in Sources */,
@@ -6479,16 +7178,19 @@
162E83711A9BDE8B00906325 /* SDLAirbagStatusSpec.m in Sources */,
1EE8C44A1F3846D300FDC2CF /* SDLRadioControlDataSpec.m in Sources */,
1EE8C4501F38629200FDC2CF /* SDLRemoteControlCapabilitiesSpec.m in Sources */,
+ 1EAA47662035B8D3000FE74B /* SDLLightControlDataSpec.m in Sources */,
162E82CF1A9BDE8A00906325 /* SDLBitsPerSampleSpec.m in Sources */,
162E831E1A9BDE8B00906325 /* SDLOnTBTClientStateSpec.m in Sources */,
162E83351A9BDE8B00906325 /* SDLReadDIDSpec.m in Sources */,
5DF40B28208FDA9700DD6FDA /* SDLVoiceCommandManagerSpec.m in Sources */,
+ 88B3BFA020DA8FD000943565 /* SDLFuelTypeSpec.m in Sources */,
162E836F1A9BDE8B00906325 /* SDLUnsubscribeVehicleDataResponseSpec.m in Sources */,
162E82DB1A9BDE8B00906325 /* SDLECallConfirmationStatusSpec.m in Sources */,
162E82D81A9BDE8A00906325 /* SDLDimensionSpec.m in Sources */,
162E83731A9BDE8B00906325 /* SDLBeltStatusSpec.m in Sources */,
162E83551A9BDE8B00906325 /* SDLEndAudioPassThruResponseSpec.m in Sources */,
162E83251A9BDE8B00906325 /* SDLAlertSpec.m in Sources */,
+ 2BF2F85220ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m in Sources */,
5D6035D2202CD46200A429C9 /* SDLSpecUtilities.m in Sources */,
DA9F7EA81DCC060B00ACAE48 /* SDLGetWaypointsResponseSpec.m in Sources */,
162E830A1A9BDE8B00906325 /* SDLVehicleDataTypeSpec.m in Sources */,
@@ -6498,6 +7200,7 @@
EED5CA041F4D1D5E00F04000 /* SDLRAWH264PacketizerSpec.m in Sources */,
5DBAE0AB1D3588AC00CE00BF /* SDLNotificationDispatcherSpec.m in Sources */,
162E83461A9BDE8B00906325 /* SDLUnsubscribeButtonSpec.m in Sources */,
+ 1EB59CD0202DC9F200343A61 /* SDLSupportedSeatSpec.m in Sources */,
162E82EB1A9BDE8B00906325 /* SDLLayoutModeSpec.m in Sources */,
1680B1181A9CD7AD00DBD79E /* SDLV1ProtocolMessageSpec.m in Sources */,
162E82EC1A9BDE8B00906325 /* SDLLockScreenStatusSpec.m in Sources */,
@@ -6510,21 +7213,22 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 88A0AA5C207CFE740075132C /* ConnectionContainerViewController.swift in Sources */,
- 88B849C52080F4B3002A034D /* RPCPermissionsManager.swift in Sources */,
- 8870C3EA208662540070E018 /* AudioManager.swift in Sources */,
- 88DFB055207F96EE0079D19D /* AlertManager.swift in Sources */,
- 888D178F207E7F42008E9F8F /* ButtonManager.swift in Sources */,
- 88A0AA5E207CFE740075132C /* ConnectionTCPTableViewController.swift in Sources */,
- 88DFB053207F8E100079D19D /* Protocol+ProxyManagerDelegate.swift in Sources */,
- 88B849C820812442002A034D /* VehicleDataManager.swift in Sources */,
- 8829569E207CFD0E00EF056C /* AppDelegate.swift in Sources */,
- 88A0AA58207CFE650075132C /* ProxyManager.swift in Sources */,
- 88166B00207E41E900076236 /* MenuManager.swift in Sources */,
- 8814AEAC20AB667B00466E0F /* PerformInteractionManager.swift in Sources */,
- 888D1790207E815C008E9F8F /* AppConstants.m in Sources */,
- 88A0AA5D207CFE740075132C /* ConnectionIAPTableViewController.swift in Sources */,
- 88A0AA56207CFE5D0075132C /* AppUserDefaults.swift in Sources */,
+ 5D1FF2E121304746000EB9B4 /* VehicleDataManager.swift in Sources */,
+ 5D1FF2DB21304746000EB9B4 /* ProxyManager.swift in Sources */,
+ 5D1FF2E621304761000EB9B4 /* Protocol+ProxyManagerDelegate.swift in Sources */,
+ 5D1FF2E521304761000EB9B4 /* AppUserDefaults.swift in Sources */,
+ 5D1FF2EC2130479C000EB9B4 /* ConnectionTCPTableViewController.swift in Sources */,
+ 5D1FF2C4213045EB000EB9B4 /* AppConstants.m in Sources */,
+ 5D1FF2DA21304746000EB9B4 /* ButtonManager.swift in Sources */,
+ 5D1FF2DC21304746000EB9B4 /* AlertManager.swift in Sources */,
+ 5D1FF2EB2130479C000EB9B4 /* ConnectionContainerViewController.swift in Sources */,
+ 5D1FF2E021304746000EB9B4 /* MenuManager.swift in Sources */,
+ 5D1FF2DF21304746000EB9B4 /* PerformInteractionManager.swift in Sources */,
+ 5D1FF2ED2130479C000EB9B4 /* ConnectionIAPTableViewController.swift in Sources */,
+ 5D1FF2DD21304746000EB9B4 /* RPCPermissionsManager.swift in Sources */,
+ 5D1FF2E721304761000EB9B4 /* TextValidator.swift in Sources */,
+ 5D1FF2F8213047C1000EB9B4 /* AppDelegate.swift in Sources */,
+ 5D1FF2DE21304746000EB9B4 /* AudioManager.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -6572,36 +7276,36 @@
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
- 5D0218F71A8E7A7300D1BF62 /* ConnectionTCPTableViewController.storyboard */ = {
+ 5D1FF2A921304567000EB9B4 /* ConnectionTCPTableViewController.storyboard */ = {
isa = PBXVariantGroup;
children = (
- 5D0218F81A8E7A7300D1BF62 /* Base */,
+ 5D1FF2AA21304567000EB9B4 /* Base */,
);
name = ConnectionTCPTableViewController.storyboard;
sourceTree = "<group>";
};
- 5D0219031A8E9F6D00D1BF62 /* ConnectionIAPTableViewController.storyboard */ = {
+ 5D1FF2AB21304567000EB9B4 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
- 5D0219041A8E9F6D00D1BF62 /* Base */,
+ 5D1FF2AC21304567000EB9B4 /* Base */,
);
- name = ConnectionIAPTableViewController.storyboard;
+ name = Main.storyboard;
sourceTree = "<group>";
};
- 5D4029DF1A76F0760006B0C2 /* LaunchScreen.xib */ = {
+ 5D1FF2AD21304567000EB9B4 /* ConnectionIAPTableViewController.storyboard */ = {
isa = PBXVariantGroup;
children = (
- 5D4029E01A76F0760006B0C2 /* Base */,
+ 5D1FF2AE21304567000EB9B4 /* Base */,
);
- name = LaunchScreen.xib;
+ name = ConnectionIAPTableViewController.storyboard;
sourceTree = "<group>";
};
- 5D4029E11A76F0760006B0C2 /* Main.storyboard */ = {
+ 5D1FF2CF2130466D000EB9B4 /* LaunchScreen.xib */ = {
isa = PBXVariantGroup;
children = (
- 5D4029E21A76F0760006B0C2 /* Base */,
+ 5D1FF2D02130466D000EB9B4 /* Base */,
);
- name = Main.storyboard;
+ name = LaunchScreen.xib;
sourceTree = "<group>";
};
5D616B481D552F7A00553F6B /* SDLLockScreen.storyboard */ = {
@@ -6732,7 +7436,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = NCVC2MHU7M;
- INFOPLIST_FILE = "$(SRCROOT)/SmartDeviceLink_Example/SmartDeviceLink-Example-ObjC-Info.plist";
+ 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";
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp;
@@ -6746,7 +7450,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = NCVC2MHU7M;
- INFOPLIST_FILE = "$(SRCROOT)/SmartDeviceLink_Example/SmartDeviceLink-Example-ObjC-Info.plist";
+ 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";
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp;
@@ -6921,12 +7625,12 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = NCVC2MHU7M;
- INFOPLIST_FILE = "SmartDeviceLink-Example-Swift-Info.plist";
+ INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp;
- PRODUCT_NAME = "SDL Example";
- SWIFT_OBJC_BRIDGING_HEADER = "SmartDeviceLink_Example/SmartDeviceLink-Example-Swift-Bridging-Header.h";
+ PRODUCT_NAME = "SDL Example Swift";
+ SWIFT_OBJC_BRIDGING_HEADER = "Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
@@ -6940,12 +7644,12 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = NCVC2MHU7M;
- INFOPLIST_FILE = "SmartDeviceLink-Example-Swift-Info.plist";
+ INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp;
- PRODUCT_NAME = "SDL Example";
- SWIFT_OBJC_BRIDGING_HEADER = "SmartDeviceLink_Example/SmartDeviceLink-Example-Swift-Bridging-Header.h";
+ PRODUCT_NAME = "SDL Example Swift";
+ SWIFT_OBJC_BRIDGING_HEADER = "Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h";
SWIFT_VERSION = 3.0;
};
name = Release;
@@ -6967,7 +7671,7 @@
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_IDENTITY = "";
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
@@ -7019,7 +7723,7 @@
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
diff --git a/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLink.xcscheme b/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLink.xcscheme
index fec755bcd..4570e5a1a 100644
--- a/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLink.xcscheme
+++ b/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLink.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "0940"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -26,7 +26,18 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ codeCoverageEnabled = "YES"
+ onlyGenerateCoverageForSpecifiedTargets = "YES"
shouldUseLaunchSchemeArgsEnv = "YES">
+ <CodeCoverageTargets>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "5D61FA1B1A84237100846EE7"
+ BuildableName = "SmartDeviceLink.framework"
+ BlueprintName = "SmartDeviceLink"
+ ReferencedContainer = "container:SmartDeviceLink-iOS.xcodeproj">
+ </BuildableReference>
+ </CodeCoverageTargets>
<Testables>
<TestableReference
skipped = "NO">
diff --git a/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLinkSwift.xcscheme b/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLinkSwift.xcscheme
index 006141740..22a884799 100644
--- a/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLinkSwift.xcscheme
+++ b/SmartDeviceLink-iOS.xcodeproj/xcshareddata/xcschemes/SmartDeviceLinkSwift.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0930"
+ LastUpgradeVersion = "0940"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -14,7 +14,7 @@
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
- BlueprintIdentifier = "5D4346601E6F38E600B639C6"
+ BlueprintIdentifier = "88802CD720853AE600E9EBC6"
BuildableName = "SmartDeviceLinkSwift.framework"
BlueprintName = "SmartDeviceLinkSwift"
ReferencedContainer = "container:SmartDeviceLink-iOS.xcodeproj">
@@ -45,7 +45,7 @@
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
- BlueprintIdentifier = "5D4346601E6F38E600B639C6"
+ BlueprintIdentifier = "88802CD720853AE600E9EBC6"
BuildableName = "SmartDeviceLinkSwift.framework"
BlueprintName = "SmartDeviceLinkSwift"
ReferencedContainer = "container:SmartDeviceLink-iOS.xcodeproj">
@@ -63,7 +63,7 @@
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
- BlueprintIdentifier = "5D4346601E6F38E600B639C6"
+ BlueprintIdentifier = "88802CD720853AE600E9EBC6"
BuildableName = "SmartDeviceLinkSwift.framework"
BlueprintName = "SmartDeviceLinkSwift"
ReferencedContainer = "container:SmartDeviceLink-iOS.xcodeproj">
diff --git a/SmartDeviceLink.podspec b/SmartDeviceLink.podspec
index 267ca2915..6f6f601b4 100644
--- a/SmartDeviceLink.podspec
+++ b/SmartDeviceLink.podspec
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|
s.name = "SmartDeviceLink"
-s.version = "6.0.2"
+s.version = "6.1.0"
s.summary = "Connect your app with cars!"
s.homepage = "https://github.com/smartdevicelink/SmartDeviceLink-iOS"
s.license = { :type => "New BSD", :file => "LICENSE" }
@@ -10,14 +10,14 @@ s.platform = :ios, "8.0"
s.dependency 'BiSON', '~> 1.1.1'
s.source = { :git => "https://github.com/smartdevicelink/sdl_ios.git", :tag => s.version.to_s }
s.requires_arc = true
-s.resource_bundles = { 'SmartDeviceLink' => ['SmartDeviceLink/Assets/**/*'] }
s.default_subspec = 'Default'
-s.subspec 'Default' do |ss|
-ss.source_files = 'SmartDeviceLink/*.{h,m}'
+s.subspec 'Default' do |sdefault|
+sdefault.source_files = 'SmartDeviceLink/*.{h,m}'
+sdefault.resource_bundles = { 'SmartDeviceLink' => ['SmartDeviceLink/Assets/**/*'] }
-ss.public_header_files = [
+sdefault.public_header_files = [
'SmartDeviceLink/NSNumber+NumberType.h',
'SmartDeviceLink/SDLAddCommand.h',
'SmartDeviceLink/SDLAddCommandResponse.h',
@@ -34,8 +34,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLAppInfo.h',
'SmartDeviceLink/SDLAppInterfaceUnregisteredReason.h',
'SmartDeviceLink/SDLArtwork.h',
+'SmartDeviceLink/SDLAudioControlData.h',
+'SmartDeviceLink/SDLAudioControlCapabilities.h',
'SmartDeviceLink/SDLAudioPassThruCapabilities.h',
'SmartDeviceLink/SDLAudioStreamingState.h',
+'SmartDeviceLink/SDLAudioStreamingIndicator.h',
'SmartDeviceLink/SDLAudioStreamManager.h',
'SmartDeviceLink/SDLAudioStreamManagerDelegate.h',
'SmartDeviceLink/SDLStreamingAudioManagerType.h',
@@ -54,6 +57,9 @@ ss.public_header_files = [
'SmartDeviceLink/SDLChangeRegistrationResponse.h',
'SmartDeviceLink/SDLCharacterSet.h',
'SmartDeviceLink/SDLChoice.h',
+'SmartDeviceLink/SDLChoiceCell.h',
+'SmartDeviceLink/SDLChoiceSet.h',
+'SmartDeviceLink/SDLChoiceSetDelegate.h',
'SmartDeviceLink/SDLClimateControlCapabilities.h',
'SmartDeviceLink/SDLClimateControlData.h',
'SmartDeviceLink/SDLClusterModeStatus.h',
@@ -83,23 +89,30 @@ ss.public_header_files = [
'SmartDeviceLink/SDLDIDResult.h',
'SmartDeviceLink/SDLDimension.h',
'SmartDeviceLink/SDLDisplayCapabilities.h',
+'SmartDeviceLink/SDLDisplayMode.h',
'SmartDeviceLink/SDLDisplayType.h',
+'SmartDeviceLink/SDLDistanceUnit.h',
'SmartDeviceLink/SDLDriverDistractionState.h',
'SmartDeviceLink/SDLECallConfirmationStatus.h',
'SmartDeviceLink/SDLECallInfo.h',
+'SmartDeviceLink/SDLElectronicParkBrakeStatus.h',
'SmartDeviceLink/SDLEmergencyEvent.h',
'SmartDeviceLink/SDLEmergencyEventType.h',
'SmartDeviceLink/SDLEncodedSyncPData.h',
'SmartDeviceLink/SDLEncodedSyncPDataResponse.h',
'SmartDeviceLink/SDLEndAudioPassThru.h',
'SmartDeviceLink/SDLEndAudioPassThruResponse.h',
+'SmartDeviceLink/SDLEqualizerSettings.h',
'SmartDeviceLink/SDLEnum.h',
'SmartDeviceLink/SDLErrorConstants.h',
'SmartDeviceLink/SDLFile.h',
'SmartDeviceLink/SDLFileManager.h',
+'SmartDeviceLink/SDLFileManagerConfiguration.h',
'SmartDeviceLink/SDLFileManagerConstants.h',
'SmartDeviceLink/SDLFileType.h',
'SmartDeviceLink/SDLFuelCutoffStatus.h',
+'SmartDeviceLink/SDLFuelRange.h',
+'SmartDeviceLink/SDLFuelType.h',
'SmartDeviceLink/SDLGenericResponse.h',
'SmartDeviceLink/SDLGetDTCs.h',
'SmartDeviceLink/SDLGetInteriorVehicleData.h',
@@ -118,6 +131,8 @@ ss.public_header_files = [
'SmartDeviceLink/SDLHMICapabilities.h',
'SmartDeviceLink/SDLHMILevel.h',
'SmartDeviceLink/SDLHMIPermissions.h',
+'SmartDeviceLink/SDLHMISettingsControlCapabilities.h',
+'SmartDeviceLink/SDLHMISettingsControlData.h',
'SmartDeviceLink/SDLHMIZoneCapabilities.h',
'SmartDeviceLink/SDLIgnitionStableStatus.h',
'SmartDeviceLink/SDLIgnitionStatus.h',
@@ -127,6 +142,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLImageResolution.h',
'SmartDeviceLink/SDLImageType.h',
'SmartDeviceLink/SDLInteractionMode.h',
+'SmartDeviceLink/SDLKeyboardDelegate.h',
'SmartDeviceLink/SDLKeyboardEvent.h',
'SmartDeviceLink/SDLKeyboardLayout.h',
'SmartDeviceLink/SDLKeyboardProperties.h',
@@ -135,6 +151,12 @@ ss.public_header_files = [
'SmartDeviceLink/SDLLayoutMode.h',
'SmartDeviceLink/SDLLifecycleConfiguration.h',
'SmartDeviceLink/SDLLifecycleConfigurationUpdate.h',
+'SmartDeviceLink/SDLLightCapabilities.h',
+'SmartDeviceLink/SDLLightControlCapabilities.h',
+'SmartDeviceLink/SDLLightControlData.h',
+'SmartDeviceLink/SDLLightName.h',
+'SmartDeviceLink/SDLLightState.h',
+'SmartDeviceLink/SDLLightStatus.h',
'SmartDeviceLink/SDLListFiles.h',
'SmartDeviceLink/SDLListFilesResponse.h',
'SmartDeviceLink/SDLLocationCoordinate.h',
@@ -156,6 +178,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLMaintenanceModeStatus.h',
'SmartDeviceLink/SDLManager.h',
'SmartDeviceLink/SDLManagerDelegate.h',
+'SmartDeviceLink/SDLMassageCushionFirmness.h',
+'SmartDeviceLink/SDLMassageModeData.h',
+'SmartDeviceLink/SDLMassageCushion.h',
+'SmartDeviceLink/SDLMassageMode.h',
+'SmartDeviceLink/SDLMassageZone.h',
'SmartDeviceLink/SDLMediaClockFormat.h',
'SmartDeviceLink/SDLMenuCell.h',
'SmartDeviceLink/SDLMenuParams.h',
@@ -181,6 +208,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLOnLanguageChange.h',
'SmartDeviceLink/SDLOnLockScreenStatus.h',
'SmartDeviceLink/SDLOnPermissionsChange.h',
+'SmartDeviceLink/SDLOnRCStatus.h',
'SmartDeviceLink/SDLOnSyncPData.h',
'SmartDeviceLink/SDLOnSystemRequest.h',
'SmartDeviceLink/SDLOnTBTClientState.h',
@@ -211,6 +239,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLRadioControlCapabilities.h',
'SmartDeviceLink/SDLRadioControlData.h',
'SmartDeviceLink/SDLRadioState.h',
+'SmartDeviceLink/SDLRDSData.h',
'SmartDeviceLink/SDLReadDID.h',
'SmartDeviceLink/SDLRectangle.h',
'SmartDeviceLink/SDLReadDIDResponse.h',
@@ -222,7 +251,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLResetGlobalProperties.h',
'SmartDeviceLink/SDLResetGlobalPropertiesResponse.h',
'SmartDeviceLink/SDLResult.h',
-'SmartDeviceLink/SDLRDSData.h',
+'SmartDeviceLink/SDLRGBColor.h',
'SmartDeviceLink/SDLRPCMessage.h',
'SmartDeviceLink/SDLRPCMessageType.h',
'SmartDeviceLink/SDLRPCNotification.h',
@@ -236,6 +265,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLScreenManager.h',
'SmartDeviceLink/SDLScrollableMessage.h',
'SmartDeviceLink/SDLScrollableMessageResponse.h',
+'SmartDeviceLink/SDLSeatControlCapabilities.h',
+'SmartDeviceLink/SDLSeatControlData.h',
+'SmartDeviceLink/SDLSeatMemoryAction.h',
+'SmartDeviceLink/SDLSeatMemoryActionType.h',
+'SmartDeviceLink/SDLSupportedSeat.h',
'SmartDeviceLink/SDLSecurityType.h',
'SmartDeviceLink/SDLSendHapticData.h',
'SmartDeviceLink/SDLSendHapticDataResponse.h',
@@ -256,6 +290,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLShowConstantTBTResponse.h',
'SmartDeviceLink/SDLShowResponse.h',
'SmartDeviceLink/SDLSingleTireStatus.h',
+'SmartDeviceLink/SDLSISData.h',
'SmartDeviceLink/SDLSlider.h',
'SmartDeviceLink/SDLSliderResponse.h',
'SmartDeviceLink/SDLSoftButton.h',
@@ -267,6 +302,8 @@ ss.public_header_files = [
'SmartDeviceLink/SDLSpeakResponse.h',
'SmartDeviceLink/SDLSpeechCapabilities.h',
'SmartDeviceLink/SDLStartTime.h',
+'SmartDeviceLink/SDLStaticIconName.h',
+'SmartDeviceLink/SDLStationIDNumber.h',
'SmartDeviceLink/SDLStreamingMediaConfiguration.h',
'SmartDeviceLink/SDLStreamingMediaManager.h',
'SmartDeviceLink/SDLStreamingMediaManagerConstants.h',
@@ -288,6 +325,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLTBTState.h',
'SmartDeviceLink/SDLTemperature.h',
'SmartDeviceLink/SDLTemperatureUnit.h',
+'SmartDeviceLink/SDLTemplateColorScheme.h',
'SmartDeviceLink/SDLTextAlignment.h',
'SmartDeviceLink/SDLTextField.h',
'SmartDeviceLink/SDLTextFieldName.h',
@@ -300,9 +338,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLTouchManager.h',
'SmartDeviceLink/SDLTouchManagerDelegate.h',
'SmartDeviceLink/SDLTouchType.h',
+'SmartDeviceLink/SDLTPMS.h',
'SmartDeviceLink/SDLTriggerSource.h',
'SmartDeviceLink/SDLTTSChunk.h',
'SmartDeviceLink/SDLTurn.h',
+'SmartDeviceLink/SDLTurnSignal.h',
'SmartDeviceLink/SDLUnregisterAppInterface.h',
'SmartDeviceLink/SDLUnregisterAppInterfaceResponse.h',
'SmartDeviceLink/SDLUnsubscribeButton.h',
@@ -327,6 +367,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLVideoStreamingCodec.h',
'SmartDeviceLink/SDLVideoStreamingFormat.h',
'SmartDeviceLink/SDLVideoStreamingProtocol.h',
+'SmartDeviceLink/SDLVideoStreamingState.h',
'SmartDeviceLink/SDLVoiceCommand.h',
'SmartDeviceLink/SDLVrCapabilities.h',
'SmartDeviceLink/SDLVrHelpItem.h',
@@ -337,9 +378,9 @@ ss.public_header_files = [
]
end
-s.subspec 'Swift' do |ss|
-ss.dependency 'SmartDeviceLink/Default'
-ss.source_files = 'SmartDeviceLinkSwift/*.swift'
+s.subspec 'Swift' do |sswift|
+sswift.dependency 'SmartDeviceLink/Default'
+sswift.source_files = 'SmartDeviceLinkSwift/*.swift'
end
end
diff --git a/SmartDeviceLink/Info.plist b/SmartDeviceLink/Info.plist
index faf16f886..90b297a7e 100644
--- a/SmartDeviceLink/Info.plist
+++ b/SmartDeviceLink/Info.plist
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
- <string>6.0.2</string>
+ <string>6.1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
diff --git a/SmartDeviceLink/NSMutableArray+Safe.h b/SmartDeviceLink/NSMutableArray+Safe.h
new file mode 100644
index 000000000..795b186df
--- /dev/null
+++ b/SmartDeviceLink/NSMutableArray+Safe.h
@@ -0,0 +1,15 @@
+//
+// NSMutableArray+NSMutableArray_Safe.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 9/12/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NSMutableArray<ObjectType> (Safe)
+
+- (void)sdl_safeAddObject:(ObjectType)object;
+
+@end
diff --git a/SmartDeviceLink/NSMutableArray+Safe.m b/SmartDeviceLink/NSMutableArray+Safe.m
new file mode 100644
index 000000000..fb6665b8c
--- /dev/null
+++ b/SmartDeviceLink/NSMutableArray+Safe.m
@@ -0,0 +1,19 @@
+//
+// NSMutableArray+NSMutableArray_Safe.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 9/12/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "NSMutableArray+Safe.h"
+
+@implementation NSMutableArray (Safe)
+
+- (void)sdl_safeAddObject:(id)object {
+ if (object == nil) { return; }
+
+ [self addObject:object];
+}
+
+@end
diff --git a/SmartDeviceLink/NSMutableDictionary+SafeRemove.h b/SmartDeviceLink/NSMutableDictionary+SafeRemove.h
index c72371395..4c238cde4 100644
--- a/SmartDeviceLink/NSMutableDictionary+SafeRemove.h
+++ b/SmartDeviceLink/NSMutableDictionary+SafeRemove.h
@@ -8,30 +8,28 @@
#import <Foundation/Foundation.h>
-@interface NSMutableDictionary <KeyType, ObjectType>
-(SafeRemove)
+@interface NSMutableDictionary <KeyType, ObjectType> (SafeRemove)
- /**
+/**
* Safely attempt to remove a key/object pair by no-oping if they don't exist in the Mutable Dictionary instead of throwing an exception
*
* @param aKey The key to attempt removal of
*
* @return Whether or not the key/object pair existed to remove.
*/
- - (BOOL)safeRemoveObjectForKey : (KeyType)aKey;
+- (BOOL)safeRemoveObjectForKey : (KeyType)aKey;
@end
-@interface NSMapTable <KeyType, ObjectType>
-(SafeRemove)
+@interface NSMapTable <KeyType, ObjectType> (SafeRemove)
- /**
+/**
* Safely attempt to remove a key/object pair by no-oping if they don't exist in the MapTable instead of throwing an exception
*
* @param aKey The key to attempt removal of
*
* @return Whether or not the key/object pair existed to remove.
*/
- - (BOOL)safeRemoveObjectForKey : (KeyType)aKey;
+- (BOOL)safeRemoveObjectForKey : (KeyType)aKey;
@end
diff --git a/SmartDeviceLink/NSMutableDictionary+Store.h b/SmartDeviceLink/NSMutableDictionary+Store.h
index e4160bc7f..baeb46ca8 100644
--- a/SmartDeviceLink/NSMutableDictionary+Store.h
+++ b/SmartDeviceLink/NSMutableDictionary+Store.h
@@ -15,7 +15,7 @@ NS_ASSUME_NONNULL_BEGIN
typedef NSString* SDLName SDL_SWIFT_ENUM;
typedef NSString* SDLEnum SDL_SWIFT_ENUM;
-@interface NSMutableDictionary (Store)
+@interface NSDictionary (Store)
- (void)sdl_setObject:(NSObject *)object forName:(SDLName)name;
- (nullable id)sdl_objectForName:(SDLName)name;
diff --git a/SmartDeviceLink/NSMutableDictionary+Store.m b/SmartDeviceLink/NSMutableDictionary+Store.m
index cd681bd46..777489b43 100644
--- a/SmartDeviceLink/NSMutableDictionary+Store.m
+++ b/SmartDeviceLink/NSMutableDictionary+Store.m
@@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable id)sdl_objectForName:(SDLName)name ofClass:(Class)classType {
NSObject *obj = [self sdl_objectForName:name];
- if (obj == nil || [obj isKindOfClass:classType.class]) {
+ if (obj == nil || [obj isKindOfClass:classType]) {
return obj;
} else {
return [[classType alloc] initWithDictionary:(NSDictionary *)obj];
@@ -37,12 +37,12 @@ NS_ASSUME_NONNULL_BEGIN
NSArray *array = [self sdl_objectForName:name];
if ([array isEqual:[NSNull null]]) {
return [NSMutableArray array];
- } else if (array.count < 1 || [array.firstObject isMemberOfClass:classType.class]) {
+ } else if (array.count < 1 || [array.firstObject isMemberOfClass:classType]) {
// It's an array of the actual class type, just return
return array;
} else {
// It's an array of dictionaries, make them into their class type
- NSMutableArray *newList = [NSMutableArray arrayWithCapacity:[array count]];
+ NSMutableArray *newList = [NSMutableArray arrayWithCapacity:array.count];
for (NSDictionary<NSString *, id> *dict in array) {
[newList addObject:[[classType alloc] initWithDictionary:dict]];
}
diff --git a/SmartDeviceLink/SDLAddCommand.h b/SmartDeviceLink/SDLAddCommand.h
index a4fede563..8265395f5 100644
--- a/SmartDeviceLink/SDLAddCommand.h
+++ b/SmartDeviceLink/SDLAddCommand.h
@@ -10,28 +10,20 @@
@class SDLMenuParams;
/**
- * This class will add a command to the application's Command Menu SDLMenuParams
+ * This class will add a command to the application's Command Menu
*
- * A command will be added to the end of the list of elements in
- * the Command Menu under the following conditions:
- * <li>When a SDLCommand is added with no SDLMenuParams value provided</li>
- * <li>When a SDLMenuParams value is provided with a SDLMenuParam.position value
- * greater than or equal to the number of menu items currently defined in the
- * menu specified by the SDLMenuParam.parentID value</li>
+ * A command will be added to the end of the list of elements in the Command Menu under the following conditions:
+ * 1. When a SDLAddCommand is added with no SDLMenuParams value provided.
+ * 2. When a SDLMenuParams value is provided with a SDLMenuParam.position value greater than or equal to the number of menu items currently defined in the menu specified by the SDLMenuParam.parentID value.
*
- * The set of choices which the application builds using SDLAddCommand can be a
- * mixture of:
- * <li>Choices having only VR synonym definitions, but no SDLMenuParams definitions
- * </li>
- * <li>Choices having only SDLMenuParams definitions, but no VR synonym definitions
- * </li>
- * <li>Choices having both SDLMenuParams and VR synonym definitions</li>
+ * The set of choices which the application builds using SDLAddCommand can be a mixture of:
+ * 1. Choices having only VR synonym definitions, but no SDLMenuParams definitions
+ * 2. Choices having only SDLMenuParams definitions, but no VR synonym definitions
+ * 3. Choices having both SDLMenuParams and VR synonym definitions
*
- * HMILevel needs to be FULL, LIMITED or BACKGROUD
- *
- * @since SDL 1.0
- *
- * @see SDLDeleteCommand SDLAddSubMenu SDLDeleteSubMenu
+ * HMILevel needs to be FULL, LIMITED or BACKGROUD
+ * @since SDL 1.0
+ * @see SDLDeleteCommand, SDLAddSubMenu, SDLDeleteSubMenu
*/
NS_ASSUME_NONNULL_BEGIN
@@ -39,67 +31,128 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLAddCommand : SDLRPCRequest
/**
- * Construct a SDLAddCommand with a handler callback when an event occurs.
+ * Constructs a SDLAddCommand with a handler callback when an event occurs.
*
- * @param handler A callback that will be called when a button event occurs for the command
+ * @param handler A callback that is called when a button event occurs for the command.
*
- * @return An SDLAddCommand object
+ * @return A SDLAddCommand object
*/
- (instancetype)initWithHandler:(nullable SDLRPCCommandNotificationHandler)handler;
+/**
+ * Convenience init for creating a voice command menu item.
+ *
+ * @discussion This menu item can only be triggered by the VR system and does not show up in the HMI application menu.
+ *
+ * @param commandId A unique id for the menu item.
+ * @param vrCommands One or more voice recognition phrases. If recognized by the VR system, the handler will be called.
+ * @param handler Called when the VR system recognizes a phrase in `vrCommands`
+ * @return A SDLAddCommand object
+ */
- (instancetype)initWithId:(UInt32)commandId vrCommands:(nullable NSArray<NSString *> *)vrCommands handler:(nullable SDLRPCCommandNotificationHandler)handler;
+/**
+ * Convenience init for creating a menu item with text.
+ *
+ * @param commandId A unique id for the menu item.
+ * @param vrCommands One or more voice recognition phrases. If recognized by the VR system, the handler will be called.
+ * @param menuName The text that will appear in the menu.
+ * @param handler Called when the menu item is selected and/or when the VR system recognizes a phrase in `vrCommands`
+ * @return A SDLAddCommand object
+ */
- (instancetype)initWithId:(UInt32)commandId vrCommands:(nullable NSArray<NSString *> *)vrCommands menuName:(NSString *)menuName handler:(nullable SDLRPCCommandNotificationHandler)handler;
-- (instancetype)initWithId:(UInt32)commandId vrCommands:(nullable NSArray<NSString *> *)vrCommands menuName:(NSString *)menuName parentId:(UInt32)parentId position:(UInt16)position iconValue:(nullable NSString *)iconValue iconType:(nullable SDLImageType)iconType handler:(nullable SDLRPCCommandNotificationHandler)handler;
+/**
+ * Convenience init for creating a menu item with text and a custom icon.
+ *
+ * @warning The icon must be uploaded to Core before being displayed in the menu.
+ *
+ * @param commandId A unique id for the menu item.
+ * @param vrCommands One or more voice recognition phrases. If recognized by the VR system, the handler will be called.
+ * @param menuName The text that will appear in the menu.
+ * @param parentId The command id of the parent menu if menu item is in a submenu. If not in a submenu, the parentId is 0.
+ * @param position The menu item's row number in the menu.
+ * @param iconValue The unique name used to upload the image to Core.
+ * @param iconType Whether the image is static or dynamic.
+ * @param handler Called when the menu item is selected and/or when the VR system recognizes a phrase in `vrCommands`
+ * @return A SDLAddCommand object
+ */
+- (instancetype)initWithId:(UInt32)commandId vrCommands:(nullable NSArray<NSString *> *)vrCommands menuName:(NSString *)menuName parentId:(UInt32)parentId position:(UInt16)position iconValue:(nullable NSString *)iconValue iconType:(nullable SDLImageType)iconType handler:(nullable SDLRPCCommandNotificationHandler)handler __deprecated_msg("Use initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler: instead");
+
+/**
+ * Convenience init for creating a menu item with text and a custom icon.
+ *
+ * @warning The icon must be uploaded to Core before being displayed in the menu.
+ *
+ * @param commandId A unique id for the menu item.
+ * @param vrCommands One or more voice recognition phrases. If recognized by the VR system, the handler will be called.
+ * @param menuName The text that will appear in the menu.
+ * @param parentId The command id of the parent menu if menu item is in a submenu. If not in a submenu, the parentId is 0.
+ * @param position The menu item's row number in the menu.
+ * @param iconValue The unique name used to upload the image to Core.
+ * @param iconType Whether the image is static or dynamic.
+ * @param iconIsTemplate Whether or not the image is a template that can be (re)colored by the SDL HMI
+ * @param handler Called when the menu item is selected and/or when the VR system recognizes a phrase in `vrCommands`
+ * @return A SDLAddCommand object
+ */
+- (instancetype)initWithId:(UInt32)commandId vrCommands:(nullable NSArray<NSString *> *)vrCommands menuName:(NSString *)menuName parentId:(UInt32)parentId position:(UInt16)position iconValue:(nullable NSString *)iconValue iconType:(nullable SDLImageType)iconType iconIsTemplate:(BOOL)iconIsTemplate handler:(nullable SDLRPCCommandNotificationHandler)handler;
+
+/**
+ * Convenience init for creating a menu item with text and a custom icon.
+ *
+ * @warning The icon must be uploaded to Core before being displayed in the menu.
+ *
+ * @param commandId A unique id for the menu item.
+ * @param vrCommands One or more voice recognition phrases. If recognized by the VR system, the handler will be called.
+ * @param menuName The text that will appear in the menu.
+ * @param parentId The command id of the parent menu if menu item is in a submenu. If not in a submenu, the parentId is 0.
+ * @param position The menu item's row number in the menu.
+ * @param icon A image that appears next to the `menuName` text.
+ * @param handler Called when the menu item is selected and/or when the VR system recognizes a phrase in `vrCommands`
+ * @return A SDLAddCommand object
+ */
+- (instancetype)initWithId:(UInt32)commandId vrCommands:(nullable NSArray<NSString *> *)vrCommands menuName:(NSString *)menuName parentId:(UInt32)parentId position:(UInt16)position icon:(nullable SDLImage *)icon handler:(nullable SDLRPCCommandNotificationHandler)handler;
/**
* A handler that will let you know when the button you created is subscribed.
*
- * @warning This will only work if you use SDLManager.
+ * @warning This will only work if you use `SDLManager`.
*/
@property (nullable, copy, nonatomic) SDLRPCCommandNotificationHandler handler;
/**
- * A Unique Command ID that identifies the command
+ * A unique id that identifies the command.
*
- * @discussion Is returned in an *SDLOnCommand* notification to identify the command selected by the user
+ * @discussion Is returned in an `SDLOnCommand` notification to identify the command selected by the user
*
- * Required, Integer, 0 - 2,000,000,000
+ * Required, Integer, 0 - 2,000,000,000
*/
@property (strong, nonatomic) NSNumber<SDLInt> *cmdID;
/**
- * a *SDLMenuParams* pointer which will defined the command and how it is added to the Command Menu
+ * A `SDLMenuParams` pointer which defines the command and how it is added to the command menu.
*
- * @discussion If provided, this will define the command and how it is added to the
- * Command Menu
+ * @discussion If provided, this will define the command and how it is added to the command menu. If null, commands will not be accessible through the HMI application menu.
*
- * If null, commands will not be accessible through the HMI application menu
- *
- * Optional
+ * Optional
*/
@property (nullable, strong, nonatomic) SDLMenuParams *menuParams;
/**
- * An array of strings to be used as VR synonyms for this command.
- *
- * @discussion If provided, defines one or more VR phrases the recognition of any of which triggers the *SDLOnCommand* notification with this cmdID
+ * An array of strings to be used as VR synonyms for this command.
*
- * If null, commands will not be accessible by voice commands (when the user hits push-to-talk)
+ * @discussion If provided, defines one or more VR phrases the recognition of any of which triggers the `SDLOnCommand` notification with this cmdID. If null, commands will not be accessible by voice commands (when the user hits push-to-talk).
*
- * Optional, Array of Strings, Max String length 99 chars, Array size 1 - 100
+ * Optional, Array of Strings, Max String length 99 chars, Array size 1 - 100
*/
@property (nullable, strong, nonatomic) NSArray<NSString *> *vrCommands;
/**
- * Image struct containing a static or dynamic icon
+ * Image struct containing a static or dynamic icon.
*
- * @discussion If provided, defines the image to be be shown along with a command
- *
- * If omitted on supported displays, no (or the default if applicable) icon will be displayed
+ * @discussion If provided, defines the image to be be shown along with a command. If omitted on supported displays, no (or the default if applicable) icon will be displayed
*
- * Optional
+ * Optional
*/
@property (nullable, strong, nonatomic) SDLImage *cmdIcon;
diff --git a/SmartDeviceLink/SDLAddCommand.m b/SmartDeviceLink/SDLAddCommand.m
index 28c60219d..b90fc2d58 100644
--- a/SmartDeviceLink/SDLAddCommand.m
+++ b/SmartDeviceLink/SDLAddCommand.m
@@ -64,12 +64,43 @@ NS_ASSUME_NONNULL_BEGIN
self.menuParams.position = @(position);
if (iconValue != nil && iconType != nil) {
- self.cmdIcon = [[SDLImage alloc] initWithName:iconValue ofType:iconType];
+ self.cmdIcon = [[SDLImage alloc] initWithName:iconValue ofType:iconType isTemplate:NO];
}
return self;
}
+- (instancetype)initWithId:(UInt32)commandId vrCommands:(nullable NSArray<NSString *> *)vrCommands menuName:(NSString *)menuName parentId:(UInt32)parentId position:(UInt16)position iconValue:(nullable NSString *)iconValue iconType:(nullable SDLImageType)iconType iconIsTemplate:(BOOL)iconIsTemplate handler:(nullable SDLRPCCommandNotificationHandler)handler {
+ self = [self initWithId:commandId vrCommands:vrCommands menuName:menuName handler:handler];
+ if (!self) {
+ return nil;
+ }
+
+ self.menuParams.parentID = @(parentId);
+ self.menuParams.position = @(position);
+
+ if (iconValue != nil && iconType != nil) {
+ self.cmdIcon = [[SDLImage alloc] initWithName:iconValue ofType:iconType isTemplate:iconIsTemplate];
+ }
+
+ return self;
+}
+
+- (instancetype)initWithId:(UInt32)commandId vrCommands:(nullable NSArray<NSString *> *)vrCommands menuName:(NSString *)menuName parentId:(UInt32)parentId position:(UInt16)position icon:(nullable SDLImage *)icon handler:(nullable SDLRPCCommandNotificationHandler)handler {
+ self = [self initWithId:commandId vrCommands:vrCommands menuName:menuName handler:handler];
+ if (!self) {
+ return nil;
+ }
+
+ self.menuParams.parentID = @(parentId);
+ self.menuParams.position = @(position);
+ self.cmdIcon = icon;
+
+ return self;
+}
+
+#pragma mark - Getters / Setters
+
- (void)setCmdID:(NSNumber<SDLInt> *)cmdID {
[parameters sdl_setObject:cmdID forName:SDLNameCommandId];
}
diff --git a/SmartDeviceLink/SDLAddSubMenu.h b/SmartDeviceLink/SDLAddSubMenu.h
index 7a4471f60..bd5537c2d 100644
--- a/SmartDeviceLink/SDLAddSubMenu.h
+++ b/SmartDeviceLink/SDLAddSubMenu.h
@@ -3,6 +3,8 @@
#import "SDLRPCRequest.h"
+@class SDLImage;
+
/**
* Add a SDLSubMenu to the Command Menu
* <p>
@@ -23,7 +25,9 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName;
-- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName position:(UInt8)position;
+- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName position:(UInt8)position __deprecated_msg(("Use initWithId:menuName:menuIcon:position: instead"));
+
+- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName menuIcon:(nullable SDLImage *)icon position:(UInt8)position;
/**
* a Menu ID that identifies a sub menu
@@ -32,6 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
* <p>
*/
@property (strong, nonatomic) NSNumber<SDLInt> *menuID;
+
/**
* a position of menu
* @discussion An NSNumber pointer representing the position within the items
@@ -50,13 +55,19 @@ NS_ASSUME_NONNULL_BEGIN
* the end of the list</li>
* </ul>
*/
-@property (nullable, strong, nonatomic) NSNumber<SDLInt> *position;
+@property (strong, nonatomic, nullable) NSNumber<SDLInt> *position;
+
/**
* a menuName which is displayed representing this submenu item
* @discussion NSString which will be displayed representing this submenu item
*/
@property (strong, nonatomic) NSString *menuName;
+/**
+ An image that is displayed alongside this submenu item
+ */
+@property (strong, nonatomic, nullable) SDLImage *menuIcon;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLAddSubMenu.m b/SmartDeviceLink/SDLAddSubMenu.m
index 4f8ef5109..2792b657d 100644
--- a/SmartDeviceLink/SDLAddSubMenu.m
+++ b/SmartDeviceLink/SDLAddSubMenu.m
@@ -3,6 +3,7 @@
#import "SDLAddSubMenu.h"
#import "NSMutableDictionary+Store.h"
+#import "SDLImage.h"
#import "SDLNames.h"
NS_ASSUME_NONNULL_BEGIN
@@ -15,18 +16,20 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
-
-- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName position:(UInt8)position {
+- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName menuIcon:(nullable SDLImage *)icon position:(UInt8)position {
self = [self initWithId:menuId menuName:menuName];
- if (!self) {
- return nil;
- }
+ if (!self) { return nil; }
self.position = @(position);
+ self.menuIcon = icon;
return self;
}
+- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName position:(UInt8)position {
+ return [self initWithId:menuId menuName:menuName menuIcon:nil position:position];
+}
+
- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName {
self = [self init];
if (!self) {
@@ -63,6 +66,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameMenuName];
}
+- (void)setMenuIcon:(nullable SDLImage *)menuIcon {
+ [parameters sdl_setObject:menuIcon forName:SDLNameMenuIcon];
+}
+
+- (nullable SDLImage *)menuIcon {
+ return [parameters sdl_objectForName:SDLNameMenuIcon ofClass:[SDLImage class]];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLArtwork.h b/SmartDeviceLink/SDLArtwork.h
index 94f6644e2..4773fec54 100644
--- a/SmartDeviceLink/SDLArtwork.h
+++ b/SmartDeviceLink/SDLArtwork.h
@@ -20,7 +20,14 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLArtwork : SDLFile
/**
- * Convenience Helper to create an ephemeral artwork from an image.
+ * 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 `UIImage`s 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.
+ *
+ * @discussion An image should be templated if it is intended to be used as an icon in a button or menu.
+ */
+@property (assign, nonatomic, readonly) BOOL isTemplate;
+
+/**
+ * Convenience helper to create an ephemeral artwork from an image.
*
* This is an ephemeral file, it will not be persisted through sessions / ignition cycles. Any files that you do not *know* you will use in future sessions should be created through this method. For example, album / artist artwork should be ephemeral.
*
@@ -37,7 +44,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)artworkWithImage:(UIImage *)image name:(NSString *)name asImageFormat:(SDLArtworkImageFormat)imageFormat NS_SWIFT_UNAVAILABLE("Use the standard initializer and set persistant to false");
/**
- * 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.
+ * 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.
*
* This is an ephemeral file, it will not be persisted through sessions / ignition cycles. Any files that you do not *know* you will use in future sessions should be created through this method. For example, album / artist artwork should be ephemeral.
*
@@ -53,7 +60,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)artworkWithImage:(UIImage *)image asImageFormat:(SDLArtworkImageFormat)imageFormat NS_SWIFT_UNAVAILABLE("Use the standard initializer and set persistant to false");
/**
- * Convenience Helper to create a persistent artwork from an image.
+ * Convenience helper to create a persistent artwork from an image.
*
* This is a persistent file, it will be persisted through sessions / ignition cycles. You will only have a limited space for all files, so be sure to only persist files that are required for all or most sessions. For example, menu artwork should be persistent.
*
@@ -70,7 +77,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)persistentArtworkWithImage:(UIImage *)image name:(NSString *)name asImageFormat:(SDLArtworkImageFormat)imageFormat NS_SWIFT_UNAVAILABLE("Use the standard initializer and set persistant to true");
/**
- * 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.
+ * 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.
*
* This is a persistent file, it will be persisted through sessions / ignition cycles. You will only have a limited space for all files, so be sure to only persist files that are required for all or most sessions. For example, menu artwork should be persistent.
*
diff --git a/SmartDeviceLink/SDLArtwork.m b/SmartDeviceLink/SDLArtwork.m
index dd0545616..d9bf2e586 100644
--- a/SmartDeviceLink/SDLArtwork.m
+++ b/SmartDeviceLink/SDLArtwork.m
@@ -15,12 +15,18 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLArtwork ()
@property (strong, nonatomic) UIImage *image;
+@property (assign, nonatomic, readwrite) BOOL isTemplate;
@end
@implementation SDLArtwork
+- (void)setImage:(UIImage *)image {
+ _image = image;
+ _isTemplate = (image.renderingMode == UIImageRenderingModeAlwaysTemplate);
+}
+
#pragma mark - Lifecycle
+ (instancetype)artworkWithImage:(UIImage *)image name:(NSString *)name asImageFormat:(SDLArtworkImageFormat)imageFormat {
@@ -43,10 +49,12 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark Private Lifecycle
- (instancetype)initWithImage:(UIImage *)image name:(NSString *)name persistent:(BOOL)persistent asImageFormat:(SDLArtworkImageFormat)imageFormat {
+ self.image = image;
return [super initWithData:[self.class sdl_dataForUIImage:image imageFormat:imageFormat] name:name fileExtension:[self.class sdl_fileExtensionForImageFormat:imageFormat] persistent:persistent];
}
- (instancetype)initWithImage:(UIImage *)image persistent:(BOOL)persistent asImageFormat:(SDLArtworkImageFormat)imageFormat {
+ self.image = image;
NSData *imageData = [self.class sdl_dataForUIImage:image imageFormat:imageFormat];
NSString *imageName = [self.class sdl_md5HashFromNSData:imageData];
return [super initWithData:[self.class sdl_dataForUIImage:image imageFormat:imageFormat] name:(imageName != nil ? imageName : @"") fileExtension:[self.class sdl_fileExtensionForImageFormat:imageFormat] persistent:persistent];
diff --git a/SmartDeviceLink/SDLAsynchronousOperation.h b/SmartDeviceLink/SDLAsynchronousOperation.h
index f090aea40..ad0697b2a 100644
--- a/SmartDeviceLink/SDLAsynchronousOperation.h
+++ b/SmartDeviceLink/SDLAsynchronousOperation.h
@@ -10,6 +10,8 @@
@interface SDLAsynchronousOperation : NSOperation
+@property (copy, nonatomic, readonly, nullable) NSError *error;
+
- (void)finishOperation;
@end
diff --git a/SmartDeviceLink/SDLAsynchronousOperation.m b/SmartDeviceLink/SDLAsynchronousOperation.m
index bb49f1c1e..49450f49b 100644
--- a/SmartDeviceLink/SDLAsynchronousOperation.m
+++ b/SmartDeviceLink/SDLAsynchronousOperation.m
@@ -29,11 +29,12 @@
- (void)finishOperation {
[self willChangeValueForKey:@"isExecuting"];
- [self willChangeValueForKey:@"isFinished"];
executing = NO;
+ [self didChangeValueForKey:@"isExecuting"];
+
+ [self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
- [self didChangeValueForKey:@"isExecuting"];
}
#pragma mark - Property Overrides
diff --git a/SmartDeviceLink/SDLAsynchronousRPCRequestOperation.m b/SmartDeviceLink/SDLAsynchronousRPCRequestOperation.m
index a891f7268..5c67e3e8a 100644
--- a/SmartDeviceLink/SDLAsynchronousRPCRequestOperation.m
+++ b/SmartDeviceLink/SDLAsynchronousRPCRequestOperation.m
@@ -80,7 +80,7 @@ NS_ASSUME_NONNULL_BEGIN
for (SDLRPCRequest *request in self.requests) {
if (self.isCancelled) {
[self sdl_abortOperationWithRequest:request];
- break;
+ return;
}
[self sdl_sendRequest:request];
@@ -119,10 +119,9 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)sdl_abortOperationWithRequest:(SDLRPCRequest *)request {
- if (self.isFinished) { return; }
self.requestFailed = YES;
- for (NSUInteger i = self.requestsComplete; i <= self.requests.count; i++) {
+ for (NSUInteger i = self.requestsComplete; i < self.requests.count; i++) {
if (self.progressHandler != NULL) {
self.progressHandler(self.requests[i], nil, [NSError sdl_lifecycle_multipleRequestsCancelled], self.percentComplete);
}
@@ -130,6 +129,10 @@ NS_ASSUME_NONNULL_BEGIN
if (self.responseHandler != NULL) {
self.responseHandler(request, nil, [NSError sdl_lifecycle_multipleRequestsCancelled]);
}
+
+ if (self.completionHandler != NULL) {
+ self.completionHandler(NO);
+ }
}
[self finishOperation];
diff --git a/SmartDeviceLink/SDLAudioControlCapabilities.h b/SmartDeviceLink/SDLAudioControlCapabilities.h
new file mode 100644
index 000000000..b7f29a01c
--- /dev/null
+++ b/SmartDeviceLink/SDLAudioControlCapabilities.h
@@ -0,0 +1,76 @@
+// SDLAudioControlCapabilities.h
+//
+
+#import "SDLRPCMessage.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLAudioControlCapabilities : SDLRPCStruct
+
+/**
+ Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)
+
+ @param name The short friendly name of the audio control module.
+ @return An instance of the SDLAudioControlCapabilities class.
+ */
+- (instancetype)initWithModuleName:(NSString *)name;
+
+/**
+ Constructs a newly allocated SDLAudioControlCapabilities object with given parameters
+
+ @param name The short friendly name of the audio control module.
+ @param sourceAvailable Availability of the control of audio source.
+ @param volumeAvailable Availability of the volume of audio source.
+ @param equalizerAvailable Availability of the equalizer of audio source.
+ @param equalizerMaxChannelID Equalizer channel ID (between 1-100).
+ @return An instance of the SDLAudioControlCapabilities class.
+ */
+- (instancetype)initWithModuleName:(NSString *)name sourceAvailable:(nullable NSNumber<SDLBool> *)sourceAvailable keepContextAvailable:(nullable NSNumber<SDLBool> *)keepContextAvailable volumeAvailable:(nullable NSNumber<SDLBool> *)volumeAvailable equalizerAvailable:(nullable NSNumber<SDLBool> *)equalizerAvailable equalizerMaxChannelID:(nullable NSNumber<SDLInt> *)equalizerMaxChannelID;
+
+/**
+ * @abstract The short friendly name of the audio control module.
+ * It should not be used to identify a module by mobile application.
+ *
+ * Required, Max String length 100 chars
+ */
+@property (strong, nonatomic) NSString *moduleName;
+
+/**
+ * @abstract Availability of the control of audio source.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *sourceAvailable;
+
+/**
+ Availability of the keepContext parameter.
+
+ Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *keepContextAvailable;
+
+/**
+ * @abstract Availability of the control of audio volume.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *volumeAvailable;
+
+/**
+ * @abstract Availability of the control of Equalizer Settings.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *equalizerAvailable;
+
+/**
+ * @abstract Must be included if equalizerAvailable=true,
+ * and assume all IDs starting from 1 to this value are valid
+ *
+ * Optional, Integer 1 - 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *equalizerMaxChannelId;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLAudioControlCapabilities.m b/SmartDeviceLink/SDLAudioControlCapabilities.m
new file mode 100644
index 000000000..e0d64d4da
--- /dev/null
+++ b/SmartDeviceLink/SDLAudioControlCapabilities.m
@@ -0,0 +1,87 @@
+// SDLAudioControlCapabilities.m
+//
+
+#import "SDLAudioControlCapabilities.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLAudioControlCapabilities
+
+- (instancetype)initWithModuleName:(NSString *)name {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+ self.moduleName = name;
+
+ return self;
+}
+
+- (instancetype)initWithModuleName:(NSString *)name sourceAvailable:(nullable NSNumber<SDLBool> *)sourceAvailable keepContextAvailable:(nullable NSNumber<SDLBool> *)keepContextAvailable volumeAvailable:(nullable NSNumber<SDLBool> *)volumeAvailable equalizerAvailable:(nullable NSNumber<SDLBool> *)equalizerAvailable equalizerMaxChannelID:(nullable NSNumber<SDLInt> *)equalizerMaxChannelID {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+ self.moduleName = name;
+ self.sourceAvailable = sourceAvailable;
+ self.keepContextAvailable = keepContextAvailable;
+ self.volumeAvailable = volumeAvailable;
+ self.equalizerAvailable = equalizerAvailable;
+ self.equalizerMaxChannelId = equalizerMaxChannelID;
+
+ return self;
+}
+
+- (void)setModuleName:(NSString *)moduleName {
+ [store sdl_setObject:moduleName forName:SDLNameModuleName];
+}
+
+- (NSString *)moduleName {
+ return [store sdl_objectForName:SDLNameModuleName];
+}
+
+- (void)setSourceAvailable:(nullable NSNumber<SDLBool> *)sourceAvailable {
+ [store sdl_setObject:sourceAvailable forName:SDLNameSourceAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)sourceAvailable {
+ return [store sdl_objectForName:SDLNameSourceAvailable];
+}
+
+- (void)setKeepContextAvailable:(nullable NSNumber<SDLBool> *)keepContextAvailable {
+ [store sdl_setObject:keepContextAvailable forName:SDLNameKeepContextAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)keepContextAvailable {
+ return [store sdl_objectForName:SDLNameKeepContextAvailable];
+}
+
+- (void)setVolumeAvailable:(nullable NSNumber<SDLBool> *)volumeAvailable {
+ [store sdl_setObject:volumeAvailable forName:SDLNameVolumeAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)volumeAvailable {
+ return [store sdl_objectForName:SDLNameVolumeAvailable];
+}
+
+- (void)setEqualizerAvailable:(nullable NSNumber<SDLBool> *)equalizerAvailable {
+ [store sdl_setObject:equalizerAvailable forName:SDLNameEqualizerAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)equalizerAvailable {
+ return [store sdl_objectForName:SDLNameEqualizerAvailable];
+}
+
+- (void)setEqualizerMaxChannelId:(nullable NSNumber<SDLInt> *)equalizerMaxChannelId {
+ [store sdl_setObject:equalizerMaxChannelId forName:SDLNameEqualizerMaxChannelId];
+}
+
+- (nullable NSNumber<SDLInt> *)equalizerMaxChannelId {
+ return [store sdl_objectForName:SDLNameEqualizerMaxChannelId];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLAudioControlData.h b/SmartDeviceLink/SDLAudioControlData.h
new file mode 100644
index 000000000..3261b4266
--- /dev/null
+++ b/SmartDeviceLink/SDLAudioControlData.h
@@ -0,0 +1,62 @@
+// SDLAudioControlData.h
+//
+
+#import "SDLRPCMessage.h"
+#import "SDLPrimaryAudioSource.h"
+
+@class SDLEqualizerSettings;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLAudioControlData : SDLRPCStruct
+
+
+/**
+ Constructs a newly allocated SDLAudioControlData object with given parameters
+
+ @param source current primary audio source of the system.
+ @param keepContext Whether or not application's context is changed.
+ @param volume Reflects the volume of audio.
+ @param equalizerSettings list of supported Equalizer channels.
+ @return An instance of the SDLAudioControlData class.
+ */
+- (instancetype)initWithSource:(nullable SDLPrimaryAudioSource)source keepContext:(nullable NSNumber<SDLBool> *)keepContext volume:(nullable NSNumber<SDLInt> *)volume equalizerSettings:(nullable NSArray<SDLEqualizerSettings *> *)equalizerSettings;
+
+/**
+ * @abstract In a getter response or a notification,
+ * it is the current primary audio source of the system.
+ * In a setter request, it is the target audio source that the system shall switch to.
+ * If the value is MOBILE_APP, the system shall switch to the mobile media app that issues the setter RPC.
+ *
+ * Optional, SDLPrimaryAudioSource
+ */
+@property (nullable, strong, nonatomic) SDLPrimaryAudioSource source;
+
+/**
+ * @abstract This parameter shall not be present in any getter responses or notifications.
+ * This parameter is optional in a setter request. The default value is false.
+ * If it is true, the system not only changes the audio source but also brings the default
+ * infotainment system UI associated with the audio source to foreground and set the application to background.
+ * If it is false, the system changes the audio source, but keeps the current application's context.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *keepContext;
+
+/**
+ * @abstract Reflects the volume of audio, from 0%-100%.
+ *
+ * Required, Integer 1 - 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *volume;
+
+/**
+ * @abstract Defines the list of supported channels (band) and their current/desired settings on HMI
+ *
+ * Required, Array of SDLEqualizerSettings with minSize:1 maxSize:100
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLEqualizerSettings *> *equalizerSettings;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLAudioControlData.m b/SmartDeviceLink/SDLAudioControlData.m
new file mode 100644
index 000000000..4a572f074
--- /dev/null
+++ b/SmartDeviceLink/SDLAudioControlData.m
@@ -0,0 +1,61 @@
+// SDLAudioControlData.m
+//
+
+#import "SDLAudioControlData.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLAudioControlData
+
+- (instancetype)initWithSource:(nullable SDLPrimaryAudioSource)source keepContext:(nullable NSNumber<SDLBool> *)keepContext volume:(nullable NSNumber<SDLInt> *)volume equalizerSettings:(nullable NSArray<SDLEqualizerSettings *> *)equalizerSettings {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+
+ self.source = source;
+ self.keepContext = keepContext;
+ self.volume = volume;
+ self.equalizerSettings = equalizerSettings;
+
+ return self;
+}
+
+- (void)setSource:(nullable SDLPrimaryAudioSource)source {
+ [store sdl_setObject:source forName:SDLNameSource];
+
+}
+
+- (nullable SDLPrimaryAudioSource)source {
+ return [store sdl_objectForName:SDLNameSource];
+}
+
+- (void)setKeepContext:(nullable NSNumber<SDLBool> *)keepContext {
+ [store sdl_setObject:keepContext forName:SDLNameKeepContext];
+}
+
+- (nullable NSNumber<SDLBool> *)keepContext {
+ return [store sdl_objectForName:SDLNameKeepContext];
+}
+
+- (void)setVolume:(nullable NSNumber<SDLInt> *)volume {
+ [store sdl_setObject:volume forName:SDLNameVolume];
+}
+
+- (nullable NSNumber<SDLInt> *)volume {
+ return [store sdl_objectForName:SDLNameVolume];
+}
+
+- (void)setEqualizerSettings:(nullable NSArray<SDLEqualizerSettings *> *)equalizerSettings {
+ [store sdl_setObject:equalizerSettings forName:SDLNameEqualizerSettings];
+}
+
+- (nullable NSArray<SDLEqualizerSettings *> *)equalizerSettings {
+ return [store sdl_objectForName:SDLNameEqualizerSettings];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLAudioStreamingIndicator.h b/SmartDeviceLink/SDLAudioStreamingIndicator.h
new file mode 100644
index 000000000..61590002f
--- /dev/null
+++ b/SmartDeviceLink/SDLAudioStreamingIndicator.h
@@ -0,0 +1,36 @@
+// SDLAudioStreamingIndicator.h
+//
+
+#import "SDLEnum.h"
+
+
+/**
+ * Enumeration listing possible indicators of audio streaming changes
+ *
+ * @since SDL 4.6
+ */
+typedef SDLEnum SDLAudioStreamingIndicator SDL_SWIFT_ENUM;
+
+/**
+ * Default playback indicator.
+ * By default the playback indicator should be PLAY_PAUSE when:
+ * - the media app is newly registered on the head unit (after RegisterAppInterface)
+ * - the media app was closed by the user (App enteres HMI_NONE)
+ * - the app sends SetMediaClockTimer with audioStreamingIndicator not set to any value
+ */
+extern SDLAudioStreamingIndicator const SDLAudioStreamingIndicatorPlayPause;
+
+/**
+ * Indicates that a button press of the Play/Pause button starts the audio playback.
+ */
+extern SDLAudioStreamingIndicator const SDLAudioStreamingIndicatorPlay;
+
+/**
+ * Indicates that a button press of the Play/Pause button pauses the current audio playback.
+ */
+extern SDLAudioStreamingIndicator const SDLAudioStreamingIndicatorPause;
+
+/**
+ * Indicates that a button press of the Play/Pause button stops the current audio playback.
+ */
+extern SDLAudioStreamingIndicator const SDLAudioStreamingIndicatorStop;
diff --git a/SmartDeviceLink/SDLAudioStreamingIndicator.m b/SmartDeviceLink/SDLAudioStreamingIndicator.m
new file mode 100644
index 000000000..5e4a328a2
--- /dev/null
+++ b/SmartDeviceLink/SDLAudioStreamingIndicator.m
@@ -0,0 +1,9 @@
+// SDLAudioStreamingIndicator.m
+//
+
+#import "SDLAudioStreamingIndicator.h"
+
+SDLAudioStreamingIndicator const SDLAudioStreamingIndicatorPlayPause = @"PLAY_PAUSE";
+SDLAudioStreamingIndicator const SDLAudioStreamingIndicatorPlay = @"PLAY";
+SDLAudioStreamingIndicator const SDLAudioStreamingIndicatorPause = @"PAUSE";
+SDLAudioStreamingIndicator const SDLAudioStreamingIndicatorStop = @"STOP";
diff --git a/SmartDeviceLink/SDLButtonName.h b/SmartDeviceLink/SDLButtonName.h
index 5299910c8..cb767ef35 100644
--- a/SmartDeviceLink/SDLButtonName.h
+++ b/SmartDeviceLink/SDLButtonName.h
@@ -16,11 +16,16 @@
typedef SDLEnum SDLButtonName SDL_SWIFT_ENUM;
/**
- * Represents the button usually labeled "OK". A typical use of this button is for the user to press it to make a selection.
+ * 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.
*/
extern SDLButtonName const SDLButtonNameOk;
/**
+ * 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.
+ */
+extern SDLButtonName const SDLButtonNamePlayPause;
+
+/**
* 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.
*/
extern SDLButtonName const SDLButtonNameSeekLeft;
diff --git a/SmartDeviceLink/SDLButtonName.m b/SmartDeviceLink/SDLButtonName.m
index 8283fa5a2..fe8e1ac33 100644
--- a/SmartDeviceLink/SDLButtonName.m
+++ b/SmartDeviceLink/SDLButtonName.m
@@ -5,6 +5,7 @@
#import "SDLButtonName.h"
SDLButtonName const SDLButtonNameOk = @"OK";
+SDLButtonName const SDLButtonNamePlayPause = @"PLAY_PAUSE";
SDLButtonName const SDLButtonNameSeekLeft = @"SEEKLEFT";
SDLButtonName const SDLButtonNameSeekRight = @"SEEKRIGHT";
SDLButtonName const SDLButtonNameTuneUp = @"TUNEUP";
diff --git a/SmartDeviceLink/SDLCarWindow.h b/SmartDeviceLink/SDLCarWindow.h
index 076f24b23..aaed77b35 100755
--- a/SmartDeviceLink/SDLCarWindow.h
+++ b/SmartDeviceLink/SDLCarWindow.h
@@ -8,7 +8,7 @@
#import <UIKit/UIKit.h>
@class SDLStreamingMediaConfiguration;
-@class SDLStreamingMediaLifecycleManager;
+@class SDLStreamingVideoLifecycleManager;
NS_ASSUME_NONNULL_BEGIN
@@ -24,7 +24,7 @@ NS_ASSUME_NONNULL_BEGIN
@param configuration The streaming media configuration
@return An instance of this class
*/
-- (instancetype)initWithStreamManager:(SDLStreamingMediaLifecycleManager *)streamManager configuration:(SDLStreamingMediaConfiguration *)configuration;
+- (instancetype)initWithStreamManager:(SDLStreamingVideoLifecycleManager *)streamManager configuration:(SDLStreamingMediaConfiguration *)configuration;
/**
* View Controller that will be streamed.
diff --git a/SmartDeviceLink/SDLCarWindow.m b/SmartDeviceLink/SDLCarWindow.m
index 448478fce..5e2e02557 100755
--- a/SmartDeviceLink/SDLCarWindow.m
+++ b/SmartDeviceLink/SDLCarWindow.m
@@ -19,14 +19,14 @@
#import "SDLError.h"
#import "SDLStateMachine.h"
#import "SDLStreamingMediaConfiguration.h"
-#import "SDLStreamingMediaLifecycleManager.h"
+#import "SDLStreamingVideoLifecycleManager.h"
#import "SDLStreamingMediaManagerConstants.h"
NS_ASSUME_NONNULL_BEGIN
@interface SDLCarWindow ()
-@property (weak, nonatomic, nullable) SDLStreamingMediaLifecycleManager *streamManager;
+@property (weak, nonatomic, nullable) SDLStreamingVideoLifecycleManager *streamManager;
@property (assign, nonatomic) SDLCarWindowRenderingType renderingType;
@property (assign, nonatomic) BOOL drawsAfterScreenUpdates;
@@ -41,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLCarWindow
-- (instancetype)initWithStreamManager:(SDLStreamingMediaLifecycleManager *)streamManager configuration:(nonnull SDLStreamingMediaConfiguration *)configuration {
+- (instancetype)initWithStreamManager:(SDLStreamingVideoLifecycleManager *)streamManager configuration:(nonnull SDLStreamingMediaConfiguration *)configuration {
self = [super init];
if (!self) { return nil; }
@@ -139,24 +139,26 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Custom Accessors
- (void)setRootViewController:(nullable UIViewController *)rootViewController {
- if (rootViewController == nil || !self.isVideoStreamStarted) {
- _rootViewController = rootViewController;
- return;
- }
-
- if (!self.allowMultipleOrientations
- && !(rootViewController.supportedInterfaceOrientations == UIInterfaceOrientationMaskPortrait ||
- rootViewController.supportedInterfaceOrientations == UIInterfaceOrientationMaskLandscapeLeft ||
- rootViewController.supportedInterfaceOrientations == UIInterfaceOrientationMaskLandscapeRight)) {
- @throw [NSException sdl_carWindowOrientationException];
- }
-
- if (self.streamManager.screenSize.width != 0) {
- rootViewController.view.frame = CGRectMake(0, 0, self.streamManager.screenSize.width, self.streamManager.screenSize.height);
- rootViewController.view.bounds = rootViewController.view.frame;
- }
-
- _rootViewController = rootViewController;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ if (rootViewController == nil || !self.isVideoStreamStarted) {
+ self->_rootViewController = rootViewController;
+ return;
+ }
+
+ if (!self.allowMultipleOrientations
+ && !(rootViewController.supportedInterfaceOrientations == UIInterfaceOrientationMaskPortrait ||
+ rootViewController.supportedInterfaceOrientations == UIInterfaceOrientationMaskLandscapeLeft ||
+ rootViewController.supportedInterfaceOrientations == UIInterfaceOrientationMaskLandscapeRight)) {
+ @throw [NSException sdl_carWindowOrientationException];
+ }
+
+ if (self.streamManager.screenSize.width != 0) {
+ rootViewController.view.frame = CGRectMake(0, 0, self.streamManager.screenSize.width, self.streamManager.screenSize.height);
+ rootViewController.view.bounds = rootViewController.view.frame;
+ }
+
+ self->_rootViewController = rootViewController;
+ });
}
#pragma mark - Private Helpers
diff --git a/SmartDeviceLink/SDLCheckChoiceVROptionalOperation.h b/SmartDeviceLink/SDLCheckChoiceVROptionalOperation.h
new file mode 100644
index 000000000..a7a9f14d0
--- /dev/null
+++ b/SmartDeviceLink/SDLCheckChoiceVROptionalOperation.h
@@ -0,0 +1,24 @@
+//
+// SDLCheckChoiceVROptionalOperation.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/24/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLAsynchronousOperation.h"
+
+@protocol SDLConnectionManagerType;
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+@interface SDLCheckChoiceVROptionalOperation : SDLAsynchronousOperation
+
+@property (assign, nonatomic, getter=isVROptional) BOOL vrOptional;
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLCheckChoiceVROptionalOperation.m b/SmartDeviceLink/SDLCheckChoiceVROptionalOperation.m
new file mode 100644
index 000000000..0c1be6f59
--- /dev/null
+++ b/SmartDeviceLink/SDLCheckChoiceVROptionalOperation.m
@@ -0,0 +1,100 @@
+//
+// SDLCheckChoiceVROptionalOperation.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/24/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLCheckChoiceVROptionalOperation.h"
+
+#import "SDLChoice.h"
+#import "SDLCreateInteractionChoiceSet.h"
+#import "SDLConnectionManagerType.h"
+#import "SDLLogMacros.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLCheckChoiceVROptionalOperation()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (copy, nonatomic, nullable) NSError *internalError;
+
+@end
+
+@implementation SDLCheckChoiceVROptionalOperation
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _connectionManager = connectionManager;
+
+ return self;
+}
+
+- (void)start {
+ [super start];
+
+ [self sdl_sendTestChoices];
+}
+
+- (void)sdl_sendTestChoices {
+ __weak typeof(self) weakself = self;
+ [self.connectionManager sendConnectionManagerRequest:[self.class sdl_testCellWithVR:NO] withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ if (error == nil) {
+ SDLLogD(@"Connected head unit supports choice cells without voice commands. Cells without voice will be sent without voice from now on (no placeholder voice).");
+
+ weakself.vrOptional = YES;
+ weakself.internalError = nil;
+ [weakself finishOperation];
+ return;
+ }
+
+ // Check for choice sets with VR
+ [self.connectionManager sendConnectionManagerRequest:[self.class sdl_testCellWithVR:YES] withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ if (error == nil) {
+ SDLLogW(@"Connected head unit does not support choice cells without voice commands. Cells without voice will be sent with placeholder voices from now on.");
+
+ weakself.vrOptional = NO;
+ weakself.internalError = nil;
+ [weakself finishOperation];
+ return;
+ }
+
+ SDLLogE(@"Connected head unit has rejected all choice cells, choice manager disabled. Error: %@, Response: %@", error, response);
+ weakself.vrOptional = NO;
+ weakself.internalError = error;
+ [weakself finishOperation];
+ }];
+ }];
+}
+
++ (SDLCreateInteractionChoiceSet *)sdl_testCellWithVR:(BOOL)hasVR {
+ SDLChoice *choice = [[SDLChoice alloc] init];
+ choice.choiceID = @0;
+ choice.menuName = @"Test Cell";
+ choice.vrCommands = hasVR ? @[@"Test VR"] : nil;
+
+ SDLCreateInteractionChoiceSet *choiceSet = [[SDLCreateInteractionChoiceSet alloc] initWithId:0 choiceSet:@[choice]];
+
+ return choiceSet;
+}
+
+#pragma mark - Property Overrides
+
+- (nullable NSString *)name {
+ return @"com.sdl.choicesetmanager.checkVROptional";
+}
+
+- (NSOperationQueuePriority)queuePriority {
+ return NSOperationQueuePriorityVeryHigh;
+}
+
+- (nullable NSError *)error {
+ return self.internalError;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLChoice.h b/SmartDeviceLink/SDLChoice.h
index 96860909f..9abdb5630 100644
--- a/SmartDeviceLink/SDLChoice.h
+++ b/SmartDeviceLink/SDLChoice.h
@@ -15,9 +15,9 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLChoice : SDLRPCStruct
-- (instancetype)initWithId:(UInt16)choiceId menuName:(NSString *)menuName vrCommands:(NSArray<NSString *> *)vrCommands;
+- (instancetype)initWithId:(UInt16)choiceId menuName:(NSString *)menuName vrCommands:(nullable NSArray<NSString *> *)vrCommands;
-- (instancetype)initWithId:(UInt16)choiceId menuName:(NSString *)menuName vrCommands:(NSArray<NSString *> *)vrCommands image:(nullable SDLImage *)image secondaryText:(nullable NSString *)secondaryText secondaryImage:(nullable SDLImage *)secondaryImage tertiaryText:(nullable NSString *)tertiaryText;
+- (instancetype)initWithId:(UInt16)choiceId menuName:(NSString *)menuName vrCommands:(nullable NSArray<NSString *> *)vrCommands image:(nullable SDLImage *)image secondaryText:(nullable NSString *)secondaryText secondaryImage:(nullable SDLImage *)secondaryImage tertiaryText:(nullable NSString *)tertiaryText;
/**
* The application-scoped identifier that uniquely identifies this choice
@@ -36,9 +36,11 @@ NS_ASSUME_NONNULL_BEGIN
/**
* VR synonyms for this choice
*
- * Required, Array of Strings, Array length 1 - 100, Max String length 99 chars
+ * Optional, Array of Strings, Array length 1 - 100, Max String length 99 chars
+ *
+ * @discussion, VR commands are optional beginning with SDL Core v.5.0. They are required for previous versions.
*/
-@property (strong, nonatomic) NSArray<NSString *> *vrCommands;
+@property (nullable, strong, nonatomic) NSArray<NSString *> *vrCommands;
/**
* The image of the choice
diff --git a/SmartDeviceLink/SDLChoice.m b/SmartDeviceLink/SDLChoice.m
index 919ef6102..7545ec4f5 100644
--- a/SmartDeviceLink/SDLChoice.m
+++ b/SmartDeviceLink/SDLChoice.m
@@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLChoice
-- (instancetype)initWithId:(UInt16)choiceId menuName:(NSString *)menuName vrCommands:(NSArray<NSString *> *)vrCommands image:(nullable SDLImage *)image secondaryText:(nullable NSString *)secondaryText secondaryImage:(nullable SDLImage *)secondaryImage tertiaryText:(nullable NSString *)tertiaryText {
+- (instancetype)initWithId:(UInt16)choiceId menuName:(NSString *)menuName vrCommands:(nullable NSArray<NSString *> *)vrCommands image:(nullable SDLImage *)image secondaryText:(nullable NSString *)secondaryText secondaryImage:(nullable SDLImage *)secondaryImage tertiaryText:(nullable NSString *)tertiaryText {
self = [self initWithId:choiceId menuName:menuName vrCommands:vrCommands];
if (!self) {
return nil;
@@ -25,7 +25,7 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
-- (instancetype)initWithId:(UInt16)choiceId menuName:(NSString *)menuName vrCommands:(NSArray<NSString *> *)vrCommands {
+- (instancetype)initWithId:(UInt16)choiceId menuName:(NSString *)menuName vrCommands:(nullable NSArray<NSString *> *)vrCommands {
self = [self init];
if (!self) {
return nil;
@@ -54,11 +54,11 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameMenuName];
}
-- (void)setVrCommands:(NSArray<NSString *> *)vrCommands {
+- (void)setVrCommands:(nullable NSArray<NSString *> *)vrCommands {
[store sdl_setObject:vrCommands forName:SDLNameVRCommands];
}
-- (NSArray<NSString *> *)vrCommands {
+- (nullable NSArray<NSString *> *)vrCommands {
return [store sdl_objectForName:SDLNameVRCommands];
}
diff --git a/SmartDeviceLink/SDLChoiceCell.h b/SmartDeviceLink/SDLChoiceCell.h
new file mode 100644
index 000000000..5ca267dad
--- /dev/null
+++ b/SmartDeviceLink/SDLChoiceCell.h
@@ -0,0 +1,87 @@
+//
+// SDLChoiceCell.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 Livio. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class SDLArtwork;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLChoiceCell: NSObject
+
+/**
+ 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.
+ */
+@property (copy, nonatomic, readonly) NSString *text;
+
+/**
+ Maps to Choice.secondaryText. Optional secondary text of the cell, if available. Duplicates within an `SDLChoiceSet` are permitted.
+ */
+@property (copy, nonatomic, readonly, nullable) NSString *secondaryText;
+
+/**
+ Maps to Choice.tertiaryText. Optional tertitary text of the cell, if available. Duplicates within an `SDLChoiceSet` are permitted.
+ */
+@property (copy, nonatomic, readonly, nullable) NSString *tertiaryText;
+
+/**
+ 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.
+ */
+@property (copy, nonatomic, readonly, nullable) NSArray<NSString *> *voiceCommands;
+
+/**
+ 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.
+ */
+@property (strong, nonatomic, readonly, nullable) SDLArtwork *artwork;
+
+/**
+ 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.
+ */
+@property (strong, nonatomic, readonly, nullable) SDLArtwork *secondaryArtwork;
+
+/**
+ Initialize the cell with nothing. This is unavailable
+
+ @return A crash, probably
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Initialize the cell with text and nothing else.
+
+ @param text The primary text of the cell.
+ @return The cell
+ */
+- (instancetype)initWithText:(NSString *)text;
+
+/**
+ Initialize the cell with text, optional artwork, and optional voice commands
+
+ @param text The primary text of the cell
+ @param artwork The primary artwork of the cell
+ @param voiceCommands Strings that can be spoken by the user to activate this cell in a voice or both interaction mode
+ @return The cell
+ */
+- (instancetype)initWithText:(NSString *)text artwork:(nullable SDLArtwork *)artwork voiceCommands:(nullable NSArray<NSString *> *)voiceCommands;
+
+/**
+ Initialize the cell with all optional items
+
+ @param text The primary text
+ @param secondaryText The secondary text
+ @param tertiaryText The tertiary text
+ @param voiceCommands Strings that can be spoken by the user to activate this cell in a voice or both interaction mode
+ @param artwork The primary artwork
+ @param secondaryArtwork The secondary artwork
+ @return The cell
+ */
+- (instancetype)initWithText:(NSString *)text secondaryText:(nullable NSString *)secondaryText tertiaryText:(nullable NSString *)tertiaryText voiceCommands:(nullable NSArray<NSString *> *)voiceCommands artwork:(nullable SDLArtwork *)artwork secondaryArtwork:(nullable SDLArtwork *)secondaryArtwork;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLChoiceCell.m b/SmartDeviceLink/SDLChoiceCell.m
new file mode 100644
index 000000000..05ceb4daa
--- /dev/null
+++ b/SmartDeviceLink/SDLChoiceCell.m
@@ -0,0 +1,92 @@
+//
+// SDLChoiceCell.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 Livio. All rights reserved.
+//
+
+#import "SDLChoiceCell.h"
+
+#import "SDLArtwork.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLChoiceCell()
+
+@property (assign, nonatomic) UInt16 choiceId;
+
+@end
+
+@implementation SDLChoiceCell
+
+#pragma mark - Object Lifecycle
+
+- (instancetype)initWithText:(NSString *)text {
+ return [self initWithText:text secondaryText:nil tertiaryText:nil voiceCommands:nil artwork:nil secondaryArtwork:nil];
+}
+
+- (instancetype)initWithText:(NSString *)text artwork:(nullable SDLArtwork *)artwork voiceCommands:(nullable NSArray<NSString *> *)voiceCommands {
+ return [self initWithText:text secondaryText:nil tertiaryText:nil voiceCommands:voiceCommands artwork:artwork secondaryArtwork:nil];
+}
+
+- (instancetype)initWithText:(NSString *)text secondaryText:(nullable NSString *)secondaryText tertiaryText:(nullable NSString *)tertiaryText voiceCommands:(nullable NSArray<NSString *> *)voiceCommands artwork:(nullable SDLArtwork *)artwork secondaryArtwork:(nullable SDLArtwork *)secondaryArtwork {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _text = text;
+ _secondaryText = secondaryText;
+ _tertiaryText = tertiaryText;
+ _voiceCommands = voiceCommands;
+ _artwork = artwork;
+ _secondaryArtwork = secondaryArtwork;
+
+ _choiceId = UINT16_MAX;
+
+ return self;
+}
+
+
+#pragma mark - Object Equality
+
+// Based on preprocessor defines in https://www.mikeash.com/pyblog/friday-qa-2010-06-18-implementing-equality-and-hashing.html It is necessary to rotate each of our properties because a simple bitwise OR will produce equivalent results if, for example:
+// Object 1: self.text = "Hi", self.secondaryText = "Hello"
+// Object 2: self.text = "Hello", self.secondaryText = "Hi"
+// To avoid this, we need to rotate our hashes
+
+NSUInteger const NSUIntBit = (CHAR_BIT * sizeof(NSUInteger));
+NSUInteger NSUIntRotate(NSUInteger val, NSUInteger howMuch) {
+ return ((((NSUInteger)val) << howMuch) | (((NSUInteger)val) >> (NSUIntBit - howMuch)));
+}
+
+- (NSUInteger)hash {
+ return NSUIntRotate(self.text.hash, NSUIntBit / 2)
+ ^ NSUIntRotate(self.secondaryText.hash, NSUIntBit / 3)
+ ^ NSUIntRotate(self.tertiaryText.hash, NSUIntBit / 4)
+ ^ NSUIntRotate(self.artwork.name.hash, NSUIntBit / 5)
+ ^ NSUIntRotate(self.secondaryArtwork.name.hash, NSUIntBit / 6)
+ ^ NSUIntRotate(self.voiceCommands.hash, NSUIntBit / 7);
+}
+
+- (BOOL)isEqual:(id)object {
+ if (self == object) { return YES; }
+ if (![object isMemberOfClass:[self class]]) { return NO; }
+
+ return [self isEqualToChoice:(SDLChoiceCell *)object];
+}
+
+- (BOOL)isEqualToChoice:(SDLChoiceCell *)choice {
+ if (choice == nil) { return NO; }
+
+ return (self.hash == choice.hash);
+}
+
+#pragma mark - Etc.
+
+- (NSString *)description {
+ return [NSString stringWithFormat:@"SDLChoiceCell: %u-\"%@ - %@ - %@\", artworkNames: %@ - %@, voice commands: %lu", _choiceId, _text, _secondaryText, _tertiaryText, _artwork.name, _secondaryArtwork.name, (unsigned long)_voiceCommands.count];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLChoiceSet.h b/SmartDeviceLink/SDLChoiceSet.h
new file mode 100644
index 000000000..bb411b839
--- /dev/null
+++ b/SmartDeviceLink/SDLChoiceSet.h
@@ -0,0 +1,128 @@
+//
+// SDLChoiceSet.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@protocol SDLChoiceSetDelegate;
+@class SDLChoiceCell;
+@class SDLTTSChunk;
+@class SDLVRHelpItem;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSUInteger, SDLChoiceSetLayout) {
+ SDLChoiceSetLayoutList,
+ SDLChoiceSetLayoutTiles,
+};
+
+@interface SDLChoiceSet: NSObject
+
+/**
+ 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.
+ */
+@property (class, assign, nonatomic) NSTimeInterval defaultTimeout;
+
+/**
+ 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`.
+ */
+@property (class, assign, nonatomic) SDLChoiceSetLayout defaultLayout;
+
+/**
+ Maps to PerformInteraction.initialText. The title of the choice set, and/or the initial text on a keyboard prompt.
+ */
+@property (copy, nonatomic) NSString *title;
+
+/**
+ Maps to PerformInteraction.initialPrompt. The initial prompt spoken to the user at the start of an interaction.
+ */
+@property (copy, nonatomic, nullable) NSArray<SDLTTSChunk *> *initialPrompt;
+
+/**
+ Maps to PerformInteraction.interactionLayout. Whether the presented choices are arranged as a set of tiles or a list.
+ */
+@property (assign, nonatomic) SDLChoiceSetLayout layout;
+
+/**
+ 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`.
+ */
+@property (assign, nonatomic) NSTimeInterval timeout;
+
+/**
+ 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.
+ */
+@property (copy, nonatomic, nullable) NSArray<SDLTTSChunk *> *timeoutPrompt;
+
+/**
+ Maps to PerformInteraction.helpPrompt. This is the spoken string when a user speaks "help" when the interaction is occurring.
+ */
+@property (copy, nonatomic, nullable) NSArray<SDLTTSChunk *> *helpPrompt;
+
+/**
+ 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.
+
+ @note that while SDLVRHelpItem's position will be automatically set based on position in the array, the image will need to uploaded by you before use using SDLFileManager.
+ */
+@property (copy, nonatomic, nullable) NSArray<SDLVRHelpItem *> *helpList;
+
+/**
+ The delegate of this choice set, called when the user interacts with it.
+ */
+@property (weak, nonatomic) id<SDLChoiceSetDelegate> delegate;
+
+/**
+ The choices to be displayed to the user within this choice set. These choices could match those already preloaded via `SDLScreenManager preloadChoices:withCompletionHandler:`.
+
+ This is limited to 100 items. If you attempt to set more than 100 items, the set will not have any items (this array will be empty).
+ */
+@property (copy, nonatomic) NSArray<SDLChoiceCell *> *choices;
+
+/**
+ Initialize with a title, delegate, and choices. It will use the default timeout and layout, all other properties (such as prompts) will be `nil`.
+
+ @param title The choice set's title
+ @param delegate The choice set delegate called after the user has interacted with your choice set
+ @param choices The choices to be displayed to the user for interaction
+ @return The choice set
+ */
+- (instancetype)initWithTitle:(NSString *)title delegate:(id<SDLChoiceSetDelegate>)delegate choices:(NSArray<SDLChoiceCell *> *)choices;
+
+/**
+ Initializer with all possible properties.
+
+ @param title The choice set's title
+ @param delegate The choice set delegate called after the user has interacted with your choice set
+ @param layout The layout of choice options (Manual/touch only)
+ @param timeout The timeout of a touch interaction (Manual/touch only)
+ @param initialPrompt A voice prompt spoken to the user when this set is displayed
+ @param timeoutPrompt A voice prompt spoken to the user when the set times out (Voice only)
+ @param helpPrompt A voice prompt spoken to the user when the user asks for "help"
+ @param helpList A table list of text and images shown to the user during a voice recognition session for this choice set (Voice only)
+ @param choices The list of choices presented to the user either as a manual/touch interaction or via the user's voice
+ @return The choice set
+ */
+- (instancetype)initWithTitle:(NSString *)title delegate:(id<SDLChoiceSetDelegate>)delegate layout:(SDLChoiceSetLayout)layout timeout:(NSTimeInterval)timeout initialPromptString:(nullable NSString *)initialPrompt timeoutPromptString:(nullable NSString *)timeoutPrompt helpPromptString:(nullable NSString *)helpPrompt vrHelpList:(nullable NSArray<SDLVRHelpItem *> *)helpList choices:(NSArray<SDLChoiceCell *> *)choices;
+
+/**
+ Initializer with all possible properties.
+
+ @param title The choice set's title
+ @param delegate The choice set delegate called after the user has interacted with your choice set
+ @param layout The layout of choice options (Manual/touch only)
+ @param timeout The timeout of a touch interaction (Manual/touch only)
+ @param initialPrompt A voice prompt spoken to the user when this set is displayed
+ @param timeoutPrompt A voice prompt spoken to the user when the set times out (Voice only)
+ @param helpPrompt A voice prompt spoken to the user when the user asks for "help"
+ @param helpList A table list of text and images shown to the user during a voice recognition session for this choice set (Voice only)
+ @param choices The list of choices presented to the user either as a manual/touch interaction or via the user's voice
+ @return The choice set
+ */
+- (instancetype)initWithTitle:(NSString *)title delegate:(id<SDLChoiceSetDelegate>)delegate layout:(SDLChoiceSetLayout)layout timeout:(NSTimeInterval)timeout initialPrompt:(nullable NSArray<SDLTTSChunk *> *)initialPrompt timeoutPrompt:(nullable NSArray<SDLTTSChunk *> *)timeoutPrompt helpPrompt:(nullable NSArray<SDLTTSChunk *> *)helpPrompt vrHelpList:(nullable NSArray<SDLVRHelpItem *> *)helpList choices:(NSArray<SDLChoiceCell *> *)choices;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLChoiceSet.m b/SmartDeviceLink/SDLChoiceSet.m
new file mode 100644
index 000000000..62bd97470
--- /dev/null
+++ b/SmartDeviceLink/SDLChoiceSet.m
@@ -0,0 +1,134 @@
+//
+// SDLChoiceSet.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLChoiceSet.h"
+
+#import "SDLChoiceCell.h"
+#import "SDLLogMacros.h"
+#import "SDLTTSChunk.h"
+#import "SDLVrHelpItem.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLChoiceSet
+
+static NSTimeInterval _defaultTimeout = 10.0;
+static SDLChoiceSetLayout _defaultLayout = SDLChoiceSetLayoutList;
+
+- (instancetype)init {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _timeout = self.class.defaultTimeout;
+ _layout = self.class.defaultLayout;
+
+ return self;
+}
+
+- (instancetype)initWithTitle:(NSString *)title delegate:(id<SDLChoiceSetDelegate>)delegate choices:(NSArray<SDLChoiceCell *> *)choices {
+ return [self initWithTitle:title delegate:delegate layout:SDLChoiceSet.defaultLayout timeout:SDLChoiceSet.defaultTimeout initialPrompt:nil timeoutPrompt:nil helpPrompt:nil vrHelpList:nil choices:choices];
+}
+
+- (instancetype)initWithTitle:(NSString *)title delegate:(id<SDLChoiceSetDelegate>)delegate layout:(SDLChoiceSetLayout)layout timeout:(NSTimeInterval)timeout initialPromptString:(nullable NSString *)initialPrompt timeoutPromptString:(nullable NSString *)timeoutPrompt helpPromptString:(nullable NSString *)helpPrompt vrHelpList:(nullable NSArray<SDLVRHelpItem *> *)helpList choices:(NSArray<SDLChoiceCell *> *)choices {
+ NSArray<SDLTTSChunk *> *initialTTS = [SDLTTSChunk textChunksFromString:initialPrompt];
+ NSArray<SDLTTSChunk *> *timeoutTTS = [SDLTTSChunk textChunksFromString:timeoutPrompt];
+ NSArray<SDLTTSChunk *> *helpTTS = [SDLTTSChunk textChunksFromString:helpPrompt];
+
+ return [self initWithTitle:title delegate:delegate layout:layout timeout:timeout initialPrompt:initialTTS timeoutPrompt:timeoutTTS helpPrompt:helpTTS vrHelpList:helpList choices:choices];
+}
+
+- (instancetype)initWithTitle:(NSString *)title delegate:(id<SDLChoiceSetDelegate>)delegate layout:(SDLChoiceSetLayout)layout timeout:(NSTimeInterval)timeout initialPrompt:(nullable NSArray<SDLTTSChunk *> *)initialPrompt timeoutPrompt:(nullable NSArray<SDLTTSChunk *> *)timeoutPrompt helpPrompt:(nullable NSArray<SDLTTSChunk *> *)helpPrompt vrHelpList:(nullable NSArray<SDLVRHelpItem *> *)helpList choices:(NSArray<SDLChoiceCell *> *)choices {
+ self = [self init];
+ if (!self) { return nil; }
+
+ if (choices.count == 0 || choices.count > 100) {
+ SDLLogW(@"Attempted to create a choice set with %lu choices; Only 1 - 100 choices are valid", choices.count);
+ return nil;
+ }
+
+ if (timeout < 5 || timeout > 100) {
+ SDLLogW(@"Attempted to create a choice set with a %f second timeout; Only 5 - 100 seconds is valid", timeout);
+ return nil;
+ }
+
+ if (title.length == 0 || title.length > 500) {
+ SDLLogW(@"Attempted to create a choice set with a %lu length. Only 500 characters are supported", title.length);
+ return nil;
+ }
+
+ NSMutableSet<NSString *> *choiceTextSet = [NSMutableSet setWithCapacity:choices.count];
+ NSMutableSet<NSString *> *uniqueVoiceCommands = [NSMutableSet set];
+ NSUInteger allVoiceCommandsCount = 0;
+ NSUInteger choiceCellWithVoiceCommandCount = 0;
+ for (SDLChoiceCell *cell in choices) {
+ [choiceTextSet addObject:cell.text];
+ if (cell.voiceCommands == nil) { continue; }
+ [uniqueVoiceCommands addObjectsFromArray:cell.voiceCommands];
+ choiceCellWithVoiceCommandCount += 1;
+ allVoiceCommandsCount += cell.voiceCommands.count;
+ }
+ if (choiceTextSet.count < choices.count) {
+ SDLLogE(@"Attempted to create a choice set with duplicate cell text. Cell text must be unique. The choice set will not be set.");
+ return nil;
+ }
+
+ // All or none of the choices must have VR commands
+ if ((choiceCellWithVoiceCommandCount > 0 && choiceCellWithVoiceCommandCount < choices.count)) {
+ SDLLogE(@"If using voice recognition commands, all of the choice set cells must have unique VR commands. There are %lu cells with unique voice commands and %lu total cells. The choice set will not be set.", (unsigned long)choiceCellWithVoiceCommandCount, (unsigned long)choices.count);
+ return nil;
+ }
+ // All the VR commands must be unique
+ if (uniqueVoiceCommands.count < allVoiceCommandsCount) {
+ SDLLogE(@"If using voice recognition commands, all VR commands must be unique. There are %lu unique VR commands and %lu VR commands. The choice set will not be set.", (unsigned long)uniqueVoiceCommands.count, (unsigned long)allVoiceCommandsCount);
+ return nil;
+ }
+
+ for (NSUInteger i = 0; i < helpList.count; i++) {
+ helpList[i].position = @(i + 1);
+ }
+
+ _title = title;
+ _delegate = delegate;
+ _layout = layout;
+ _timeout = timeout;
+ _initialPrompt = initialPrompt;
+ _timeoutPrompt = timeoutPrompt;
+ _helpPrompt = helpPrompt;
+ _helpList = helpList;
+ _choices = choices;
+
+ return self;
+}
+
+#pragma mark - Getters / Setters
+
++ (NSTimeInterval)defaultTimeout {
+ return _defaultTimeout;
+}
+
++ (void)setDefaultTimeout:(NSTimeInterval)defaultTimeout {
+ _defaultTimeout = defaultTimeout;
+}
+
++ (SDLChoiceSetLayout)defaultLayout {
+ return _defaultLayout;
+}
+
++ (void)setDefaultLayout:(SDLChoiceSetLayout)defaultLayout {
+ _defaultLayout = defaultLayout;
+}
+
+#pragma mark - Etc.
+
+- (NSString *)description {
+ return [NSString stringWithFormat:@"SDLChoiceSet: \"%@\", layout: %@", _title, (_layout == SDLChoiceSetLayoutList ? @"List" : @"Tiles")];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLChoiceSetDelegate.h b/SmartDeviceLink/SDLChoiceSetDelegate.h
new file mode 100644
index 000000000..22c9f9d8b
--- /dev/null
+++ b/SmartDeviceLink/SDLChoiceSetDelegate.h
@@ -0,0 +1,25 @@
+//
+// SDLChoiceSetDelegate.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLTriggerSource.h"
+
+@class SDLChoiceCell;
+@class SDLChoiceSet;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol SDLChoiceSetDelegate <NSObject>
+
+- (void)choiceSet:(SDLChoiceSet *)choiceSet didSelectChoice:(SDLChoiceCell *)choice withSource:(SDLTriggerSource)source atRowIndex:(NSUInteger)rowIndex;
+- (void)choiceSet:(SDLChoiceSet *)choiceSet didReceiveError:(NSError *)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLChoiceSetManager.h b/SmartDeviceLink/SDLChoiceSetManager.h
new file mode 100644
index 000000000..1c3c9c373
--- /dev/null
+++ b/SmartDeviceLink/SDLChoiceSetManager.h
@@ -0,0 +1,107 @@
+//
+// SDLChoiceSetManager.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLInteractionMode.h"
+
+@class SDLChoiceCell;
+@class SDLChoiceSet;
+@class SDLFileManager;
+@class SDLKeyboardProperties;
+
+@protocol SDLConnectionManagerType;
+@protocol SDLKeyboardDelegate;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^SDLPreloadChoiceCompletionHandler)(NSError *__nullable error);
+
+typedef NSString SDLChoiceManagerState;
+extern SDLChoiceManagerState *const SDLChoiceManagerStateShutdown;
+extern SDLChoiceManagerState *const SDLChoiceManagerStateCheckingVoiceOptional;
+extern SDLChoiceManagerState *const SDLChoiceManagerStateReady;
+extern SDLChoiceManagerState *const SDLChoiceManagerStateStartupError;
+
+@interface SDLChoiceSetManager : NSObject
+
+/**
+ * The state of the choice set manager.
+ */
+@property (copy, nonatomic, readonly) NSString *currentState;
+
+/**
+ The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.
+ */
+@property (strong, nonatomic, null_resettable) SDLKeyboardProperties *keyboardConfiguration;
+
+/**
+ 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.
+ */
+@property (copy, nonatomic, readonly) NSSet<SDLChoiceCell *> *preloadedChoices;
+
+/**
+ Initialize the manager with required dependencies
+
+ @param connectionManager The connection manager object for sending RPCs
+ @param fileManager The file manager object for uploading files
+ @return The choice set manager
+ */
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager fileManager:(SDLFileManager *)fileManager;
+
+/**
+ Start the manager and prepare to manage choice sets
+ */
+- (void)start;
+
+/**
+ Stop the manager and reset all properties
+ */
+- (void)stop;
+
+/**
+ 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.
+
+ @param choices The choices to be preloaded.
+ @param handler The handler to be called when complete.
+ */
+- (void)preloadChoices:(NSArray<SDLChoiceCell *> *)choices withCompletionHandler:(nullable SDLPreloadChoiceCompletionHandler)handler;
+
+/**
+ Delete loaded cells from the head unit. If the cells don't exist on the head unit they will be ignored.
+
+ @param choices The choices to be deleted. These will be matched via a hash of the text, image name(s), and VR commands.
+ */
+- (void)deleteChoices:(NSArray<SDLChoiceCell *> *)choices;
+
+/**
+ 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.
+
+ This presents the choice set as searchable when in a touch interaction. The user, when not in a distracted state, will have a keyboard available for searching this set. The user's input in the keyboard will be available in the SDLKeyboardDelegate.
+
+ If the cells in the set are not already preloaded, they will be preloaded before the presentation occurs; this could take a while depending on the contents of the cells.
+
+ If the cells have voice commands and images attached, this could take upwards of 10 seconds. If there are no cells on the set, this will fail, calling `choiceSet:didReceiveError:` on the choice set delegate.
+
+ @param choiceSet The set to be displayed
+ @param mode If the set should be presented for the user to interact via voice, touch, or both
+ @param delegate The keyboard delegate called when the user interacts with the search field of the choice set, if not set, a non-searchable choice set will be used
+ */
+- (void)presentChoiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode withKeyboardDelegate:(nullable id<SDLKeyboardDelegate>)delegate;
+
+/**
+ 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.
+
+ @param initialText The initial text within the keyboard input field. It will disappear once the user selects the field in order to enter text
+ @param delegate The keyboard delegate called when the user interacts with the keyboard
+ */
+- (void)presentKeyboardWithInitialText:(NSString *)initialText delegate:(id<SDLKeyboardDelegate>)delegate;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLChoiceSetManager.m b/SmartDeviceLink/SDLChoiceSetManager.m
new file mode 100644
index 000000000..8d1ac4ffe
--- /dev/null
+++ b/SmartDeviceLink/SDLChoiceSetManager.m
@@ -0,0 +1,457 @@
+//
+// SDLChoiceSetManager.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLChoiceSetManager.h"
+
+#import "SDLCheckChoiceVROptionalOperation.h"
+#import "SDLChoice.h"
+#import "SDLChoiceCell.h"
+#import "SDLChoiceSet.h"
+#import "SDLChoiceSetDelegate.h"
+#import "SDLConnectionManagerType.h"
+#import "SDLCreateInteractionChoiceSet.h"
+#import "SDLCreateInteractionChoiceSetResponse.h"
+#import "SDLDeleteChoicesOperation.h"
+#import "SDLDisplayCapabilities.h"
+#import "SDLDisplayCapabilities+ShowManagerExtensions.h"
+#import "SDLError.h"
+#import "SDLFileManager.h"
+#import "SDLHMILevel.h"
+#import "SDLImage.h"
+#import "SDLKeyboardProperties.h"
+#import "SDLLogMacros.h"
+#import "SDLOnHMIStatus.h"
+#import "SDLPerformInteraction.h"
+#import "SDLPerformInteractionResponse.h"
+#import "SDLPreloadChoicesOperation.h"
+#import "SDLPresentChoiceSetOperation.h"
+#import "SDLPresentKeyboardOperation.h"
+#import "SDLRegisterAppInterfaceResponse.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLRPCResponseNotification.h"
+#import "SDLSetDisplayLayoutResponse.h"
+#import "SDLStateMachine.h"
+#import "SDLSystemContext.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+SDLChoiceManagerState *const SDLChoiceManagerStateShutdown = @"Shutdown";
+SDLChoiceManagerState *const SDLChoiceManagerStateCheckingVoiceOptional = @"CheckingVoiceOptional";
+SDLChoiceManagerState *const SDLChoiceManagerStateReady = @"Ready";
+SDLChoiceManagerState *const SDLChoiceManagerStateStartupError = @"StartupError";
+
+typedef NSNumber * SDLChoiceId;
+
+@interface SDLChoiceCell()
+
+@property (assign, nonatomic) UInt16 choiceId;
+
+@end
+
+@interface SDLChoiceSetManager()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (weak, nonatomic) SDLFileManager *fileManager;
+
+@property (strong, nonatomic, readonly) SDLStateMachine *stateMachine;
+@property (strong, nonatomic) NSOperationQueue *transactionQueue;
+
+@property (copy, nonatomic, nullable) SDLHMILevel currentHMILevel;
+@property (copy, nonatomic, nullable) SDLSystemContext currentSystemContext;
+@property (strong, nonatomic, nullable) SDLDisplayCapabilities *displayCapabilities;
+
+@property (strong, nonatomic) NSMutableSet<SDLChoiceCell *> *preloadedMutableChoices;
+@property (strong, nonatomic, readonly) NSSet<SDLChoiceCell *> *pendingPreloadChoices;
+@property (strong, nonatomic) NSMutableSet<SDLChoiceCell *> *pendingMutablePreloadChoices;
+@property (strong, nonatomic, nullable) SDLChoiceSet *pendingPresentationSet;
+@property (strong, nonatomic, nullable) SDLAsynchronousOperation *pendingPresentOperation;
+
+@property (assign, nonatomic) UInt16 nextChoiceId;
+@property (assign, nonatomic, getter=isVROptional) BOOL vrOptional;
+
+@end
+
+UInt16 const ChoiceCellIdMin = 1;
+
+@implementation SDLChoiceSetManager
+
+#pragma mark - Lifecycle
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager fileManager:(SDLFileManager *)fileManager {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _connectionManager = connectionManager;
+ _fileManager = fileManager;
+ _stateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLChoiceManagerStateShutdown states:[self.class sdl_stateTransitionDictionary]];
+ _transactionQueue = [self sdl_newTransactionQueue];
+
+ _preloadedMutableChoices = [NSMutableSet set];
+ _pendingMutablePreloadChoices = [NSMutableSet set];
+
+ _nextChoiceId = ChoiceCellIdMin;
+ _vrOptional = YES;
+ _keyboardConfiguration = [self sdl_defaultKeyboardConfiguration];
+
+ [[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_hmiStatusNotification:) name:SDLDidChangeHMIStatusNotification object:nil];
+
+ return self;
+}
+
+- (void)start {
+ if ([self.currentState isEqualToString:SDLChoiceManagerStateShutdown]) {
+ [self.stateMachine transitionToState:SDLChoiceManagerStateCheckingVoiceOptional];
+ }
+
+ // Else, we're already started
+}
+
+- (void)stop {
+ [self.stateMachine transitionToState:SDLChoiceManagerStateShutdown];
+}
+
++ (NSDictionary<SDLState *, SDLAllowableStateTransitions *> *)sdl_stateTransitionDictionary {
+ return @{
+ SDLChoiceManagerStateShutdown: @[SDLChoiceManagerStateCheckingVoiceOptional],
+ SDLChoiceManagerStateCheckingVoiceOptional: @[SDLChoiceManagerStateShutdown, SDLChoiceManagerStateReady, SDLChoiceManagerStateStartupError],
+ SDLChoiceManagerStateReady: @[SDLChoiceManagerStateShutdown],
+ SDLChoiceManagerStateStartupError: @[SDLChoiceManagerStateShutdown]
+ };
+}
+
+- (NSOperationQueue *)sdl_newTransactionQueue {
+ NSOperationQueue *queue = [[NSOperationQueue alloc] init];
+ queue.name = @"SDLChoiceSetManager Transaction Queue";
+ queue.maxConcurrentOperationCount = 1;
+ queue.qualityOfService = NSQualityOfServiceUserInitiated;
+ queue.suspended = YES;
+
+ return queue;
+}
+
+#pragma mark - State Management
+
+- (void)didEnterStateShutdown {
+ _currentHMILevel = nil;
+ _currentSystemContext = nil;
+ _displayCapabilities = nil;
+
+ [self.transactionQueue cancelAllOperations];
+ self.transactionQueue = [self sdl_newTransactionQueue];
+ _preloadedMutableChoices = [NSMutableSet set];
+ _pendingMutablePreloadChoices = [NSMutableSet set];
+ _pendingPresentationSet = nil;
+
+ _vrOptional = YES;
+ _nextChoiceId = ChoiceCellIdMin;
+}
+
+- (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(checkOp) weakOp = checkOp;
+ checkOp.completionBlock = ^{
+ if ([self.currentState isEqualToString:SDLChoiceManagerStateShutdown]) {
+ return;
+ }
+
+ weakself.vrOptional = weakOp.isVROptional;
+ if (weakOp.error != nil) {
+ [weakself.stateMachine transitionToState:SDLChoiceManagerStateStartupError];
+ } else {
+ [weakself.stateMachine transitionToState:SDLChoiceManagerStateReady];
+ }
+ };
+
+ [self.transactionQueue addOperation:checkOp];
+}
+
+- (void)didEnterStateStartupError {
+ // TODO
+}
+
+#pragma mark - Choice Management
+
+#pragma mark Upload / Delete
+
+- (void)preloadChoices:(NSArray<SDLChoiceCell *> *)choices withCompletionHandler:(nullable SDLPreloadChoiceCompletionHandler)handler {
+ if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { return; }
+
+ NSMutableSet<SDLChoiceCell *> *choicesToUpload = [[self sdl_choicesToBeUploadedWithArray:choices] mutableCopy];
+ [choicesToUpload minusSet:self.preloadedMutableChoices];
+ [choicesToUpload minusSet:self.pendingMutablePreloadChoices];
+
+ if (choicesToUpload.count == 0) {
+ if (handler != nil) {
+ handler(nil);
+ }
+
+ return;
+ }
+
+ [self sdl_updateIdsOnChoices:choicesToUpload];
+
+ // Add the preload cells to the pending preloads
+ [self.pendingMutablePreloadChoices unionSet:choicesToUpload];
+
+ // Upload pending preloads
+ SDLPreloadChoicesOperation *preloadOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:self.connectionManager fileManager:self.fileManager displayCapabilities:self.displayCapabilities 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];
+
+ if (handler != nil) {
+ handler(weakPreloadOp.error);
+ }
+ };
+ [self.transactionQueue addOperation:preloadOp];
+}
+
+- (void)deleteChoices:(NSArray<SDLChoiceCell *> *)choices {
+ if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { return; }
+
+ // Find cells to be deleted that are already uploaded or are pending upload
+ NSSet<SDLChoiceCell *> *cellsToBeDeleted = [self sdl_choicesToBeDeletedWithArray:choices];
+ NSSet<SDLChoiceCell *> *cellsToBeRemovedFromPending = [self sdl_choicesToBeRemovedFromPendingWithArray:choices];
+
+ // If choices are deleted that are already uploaded or pending and are used by a pending presentation, cancel it and send an error
+ NSSet<SDLChoiceCell *> *pendingPresentationChoices = [NSSet setWithArray:self.pendingPresentationSet.choices];
+ if ((!self.pendingPresentOperation.isCancelled && !self.pendingPresentOperation.isFinished)
+ && ([cellsToBeDeleted intersectsSet:pendingPresentationChoices] || [cellsToBeRemovedFromPending intersectsSet:pendingPresentationChoices])) {
+ [self.pendingPresentOperation cancel];
+ 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];
+ for (SDLAsynchronousOperation *op in self.transactionQueue.operations) {
+ if (![op isMemberOfClass:[SDLPreloadChoicesOperation class]]) { continue; }
+
+ SDLPreloadChoicesOperation *preloadOp = (SDLPreloadChoicesOperation *)op;
+ [preloadOp removeChoicesFromUpload:cellsToBeRemovedFromPending];
+ }
+
+ // Find choices to delete
+ if (cellsToBeDeleted.count == 0) { return; }
+
+ [self sdl_findIdsOnChoices:cellsToBeDeleted];
+ SDLDeleteChoicesOperation *deleteOp = [[SDLDeleteChoicesOperation alloc] initWithConnectionManager:self.connectionManager cellsToDelete:cellsToBeDeleted];
+
+ __weak typeof(self) weakself = self;
+ __weak typeof(deleteOp) weakOp = deleteOp;
+ deleteOp.completionBlock = ^{
+ if (weakOp.error != nil) {
+ SDLLogE(@"Failed to delete choices: %@", weakOp.error);
+ return;
+ }
+
+ [weakself.preloadedMutableChoices minusSet:cellsToBeDeleted];
+ };
+ [self.transactionQueue addOperation:deleteOp];
+}
+
+#pragma mark Present
+
+- (void)presentChoiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode withKeyboardDelegate:(nullable id<SDLKeyboardDelegate>)delegate {
+ if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { return; }
+ if (choiceSet == nil) {
+ SDLLogW(@"Attempted to present a nil choice set, ignoring.");
+ return;
+ }
+
+ if (self.pendingPresentationSet != nil) {
+ [self.pendingPresentOperation cancel];
+ }
+
+ self.pendingPresentationSet = choiceSet;
+ [self preloadChoices:self.pendingPresentationSet.choices withCompletionHandler:nil];
+
+ [self sdl_findIdsOnChoiceSet:self.pendingPresentationSet];
+
+ 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];
+ } else {
+ // Searchable choice set
+ presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:self.keyboardConfiguration keyboardDelegate:delegate];
+ }
+ self.pendingPresentOperation = presentOp;
+
+ __weak typeof(self) weakself = self;
+ __weak typeof(presentOp) weakOp = presentOp;
+ self.pendingPresentOperation.completionBlock = ^{
+ __strong typeof(weakOp) strongOp = weakOp;
+
+ 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;
+ };
+ [self.transactionQueue addOperation:presentOp];
+}
+
+- (void)presentKeyboardWithInitialText:(NSString *)initialText delegate:(id<SDLKeyboardDelegate>)delegate {
+ if (![self.currentState isEqualToString:SDLChoiceManagerStateReady]) { return; }
+
+ if (self.pendingPresentationSet != nil) {
+ [self.pendingPresentOperation cancel];
+ self.pendingPresentationSet = nil;
+ }
+
+ // Present a keyboard with the choice set that we used to test VR's optional state
+ self.pendingPresentOperation = [[SDLPresentKeyboardOperation alloc] initWithConnectionManager:self.connectionManager keyboardProperties:self.keyboardConfiguration initialText:initialText keyboardDelegate:delegate];
+ [self.transactionQueue addOperation:self.pendingPresentOperation];
+}
+
+#pragma mark - Choice Management Helpers
+
+- (NSSet<SDLChoiceCell *> *)sdl_choicesToBeUploadedWithArray:(NSArray<SDLChoiceCell *> *)choices {
+ // Check if any of the choices already exist on the head unit and remove them from being preloaded
+ NSMutableSet<SDLChoiceCell *> *choicesSet = [NSMutableSet setWithArray:choices];
+ [choicesSet minusSet:self.preloadedChoices];
+
+ return [choicesSet copy];
+}
+
+- (NSSet<SDLChoiceCell *> *)sdl_choicesToBeDeletedWithArray:(NSArray<SDLChoiceCell *> *)choices {
+ NSMutableSet<SDLChoiceCell *> *choicesSet = [NSMutableSet setWithArray:choices];
+ [choicesSet intersectSet:self.preloadedChoices];
+
+ return [choicesSet copy];
+}
+
+- (NSSet<SDLChoiceCell *> *)sdl_choicesToBeRemovedFromPendingWithArray:(NSArray<SDLChoiceCell *> *)choices {
+ NSMutableSet<SDLChoiceCell *> *choicesSet = [NSMutableSet setWithArray:choices];
+ [choicesSet intersectSet:self.pendingPreloadChoices];
+
+ return [choicesSet copy];
+}
+
+- (void)sdl_updateIdsOnChoices:(NSSet<SDLChoiceCell *> *)choices {
+ for (SDLChoiceCell *cell in choices) {
+ cell.choiceId = self.nextChoiceId;
+ self.nextChoiceId++;
+ }
+}
+
+- (void)sdl_findIdsOnChoiceSet:(SDLChoiceSet *)choiceSet {
+ return [self sdl_findIdsOnChoices:[NSSet setWithArray:choiceSet.choices]];
+}
+
+- (void)sdl_findIdsOnChoices:(NSSet<SDLChoiceCell *> *)choices {
+ for (SDLChoiceCell *cell in choices) {
+ SDLChoiceCell *uploadCell = [self.pendingPreloadChoices member:cell] ?: [self.preloadedChoices member:cell];
+ if (uploadCell != nil) {
+ cell.choiceId = uploadCell.choiceId;
+ }
+ }
+}
+
+#pragma mark - Setters
+
+- (void)setKeyboardConfiguration:(nullable SDLKeyboardProperties *)keyboardConfiguration {
+ if (keyboardConfiguration == nil) {
+ _keyboardConfiguration = [self sdl_defaultKeyboardConfiguration];
+ } else {
+ _keyboardConfiguration = [[SDLKeyboardProperties alloc] initWithLanguage:keyboardConfiguration.language layout:keyboardConfiguration.keyboardLayout keypressMode:SDLKeypressModeResendCurrentEntry limitedCharacterList:keyboardConfiguration.limitedCharacterList autoCompleteText:keyboardConfiguration.autoCompleteText];
+
+ if (keyboardConfiguration.keypressMode != SDLKeypressModeResendCurrentEntry) {
+ SDLLogW(@"Attempted to set a keyboard configuration with an invalid keypress mode; only .resentCurrentEntry is valid. This value will be ignored, the rest of the properties will be set.");
+ }
+ }
+}
+
+- (SDLKeyboardProperties *)sdl_defaultKeyboardConfiguration {
+ return [[SDLKeyboardProperties alloc] initWithLanguage:SDLLanguageEnUs layout:SDLKeyboardLayoutQWERTY keypressMode:SDLKeypressModeResendCurrentEntry limitedCharacterList:nil autoCompleteText:nil];
+}
+
+#pragma mark - Getters
+
+- (NSSet<SDLChoiceCell *> *)preloadedChoices {
+ return [_preloadedMutableChoices copy];
+}
+
+- (NSSet<SDLChoiceCell *> *)pendingPreloadChoices {
+ return [_pendingMutablePreloadChoices copy];
+}
+
+- (NSString *)currentState {
+ return self.stateMachine.currentState;
+}
+
+#pragma mark - RPC Responses / Notifications
+
+- (void)sdl_registerResponse:(SDLRPCResponseNotification *)notification {
+ SDLRegisterAppInterfaceResponse *response = (SDLRegisterAppInterfaceResponse *)notification.response;
+
+ if (!response.success.boolValue) { return; }
+ if (response.displayCapabilities == nil) {
+ SDLLogE(@"RegisterAppInterface succeeded but didn't send a display capabilities. A lot of things will probably break.");
+ return;
+ }
+
+ self.displayCapabilities = response.displayCapabilities;
+}
+
+- (void)sdl_displayLayoutResponse:(SDLRPCResponseNotification *)notification {
+ SDLSetDisplayLayoutResponse *response = (SDLSetDisplayLayoutResponse *)notification.response;
+
+ if (!response.success.boolValue) { return; }
+ if (response.displayCapabilities == nil) {
+ SDLLogE(@"SetDisplayLayout succeeded but didn't send a display capabilities. A lot of things will probably break.");
+ return;
+ }
+
+ self.displayCapabilities = response.displayCapabilities;
+}
+
+- (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification {
+ // We can only present a choice set if we're in FULL
+ SDLOnHMIStatus *hmiStatus = (SDLOnHMIStatus *)notification.notification;
+ SDLHMILevel oldHMILevel = self.currentHMILevel;
+ self.currentHMILevel = hmiStatus.hmiLevel;
+
+ if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone]) {
+ self.transactionQueue.suspended = YES;
+ }
+
+ if ([oldHMILevel isEqualToEnum:SDLHMILevelNone] && ![self.currentHMILevel isEqualToEnum:SDLHMILevelNone]) {
+ self.transactionQueue.suspended = NO;
+ }
+
+ // 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;
+
+ if ([self.currentSystemContext isEqualToEnum:SDLSystemContextHMIObscured] || [self.currentSystemContext isEqualToEnum:SDLSystemContextAlert]) {
+ self.transactionQueue.suspended = YES;
+ }
+
+ if ([self.currentSystemContext isEqualToEnum:SDLSystemContextMain] && ![self.currentHMILevel isEqualToEnum:SDLHMILevelNone]) {
+ self.transactionQueue.suspended = NO;
+ }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLClimateControlCapabilities.h b/SmartDeviceLink/SDLClimateControlCapabilities.h
index 4b5c105c3..860827967 100644
--- a/SmartDeviceLink/SDLClimateControlCapabilities.h
+++ b/SmartDeviceLink/SDLClimateControlCapabilities.h
@@ -13,7 +13,9 @@ NS_ASSUME_NONNULL_BEGIN
*/
@interface SDLClimateControlCapabilities : SDLRPCStruct
-- (instancetype)initWithModuleName:(NSString *)moduleName fanSpeedAvailable:(BOOL)fanSpeedAvailable desiredTemperatureAvailable:(BOOL)desiredTemperatureAvailable acEnableAvailable:(BOOL)acEnableAvailable acMaxEnableAvailable:(BOOL)acMaxEnableAvailable circulateAirAvailable:(BOOL)circulateAirEnableAvailable autoModeEnableAvailable:(BOOL)autoModeEnableAvailable dualModeEnableAvailable:(BOOL)dualModeEnableAvailable defrostZoneAvailable:(BOOL)defrostZoneAvailable ventilationModeAvailable:(BOOL)ventilationModeAvailable;
+- (instancetype)initWithModuleName:(NSString *)moduleName fanSpeedAvailable:(BOOL)fanSpeedAvailable desiredTemperatureAvailable:(BOOL)desiredTemperatureAvailable acEnableAvailable:(BOOL)acEnableAvailable acMaxEnableAvailable:(BOOL)acMaxEnableAvailable circulateAirAvailable:(BOOL)circulateAirEnableAvailable autoModeEnableAvailable:(BOOL)autoModeEnableAvailable dualModeEnableAvailable:(BOOL)dualModeEnableAvailable defrostZoneAvailable:(BOOL)defrostZoneAvailable ventilationModeAvailable:(BOOL)ventilationModeAvailable __deprecated_msg("Use initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable: dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable: heatedSteeringWheelAvailable:heatedWindshieldAvailable: heatedRearWindowAvailable:heatedMirrorsAvailable: instead");
+
+- (instancetype)initWithModuleName:(NSString *)moduleName fanSpeedAvailable:(BOOL)fanSpeedAvailable desiredTemperatureAvailable:(BOOL)desiredTemperatureAvailable acEnableAvailable:(BOOL)acEnableAvailable acMaxEnableAvailable:(BOOL)acMaxEnableAvailable circulateAirAvailable:(BOOL)circulateAirEnableAvailable autoModeEnableAvailable:(BOOL)autoModeEnableAvailable dualModeEnableAvailable:(BOOL)dualModeEnableAvailable defrostZoneAvailable:(BOOL)defrostZoneAvailable ventilationModeAvailable:(BOOL)ventilationModeAvailable heatedSteeringWheelAvailable:(BOOL)heatedSteeringWheelAvailable heatedWindshieldAvailable:(BOOL)heatedWindshieldAvailable heatedRearWindowAvailable:(BOOL)heatedRearWindowAvailable heatedMirrorsAvailable:(BOOL)heatedMirrorsAvailable;
/**
* The short friendly name of the climate control module.
@@ -112,6 +114,38 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) NSArray<SDLVentilationMode> *ventilationMode;
+/**
+ * @abstract Availability of the control (enable/disable) of heated Steering Wheel.
+ * True: Available, False: Not Available, Not present: Not Available.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatedSteeringWheelAvailable;
+
+/**
+ * @abstract Availability of the control (enable/disable) of heated Windshield.
+ * True: Available, False: Not Available, Not present: Not Available.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatedWindshieldAvailable;
+
+/**
+ * @abstract Availability of the control (enable/disable) of heated Rear Window.
+ * True: Available, False: Not Available, Not present: Not Available.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatedRearWindowAvailable;
+
+/**
+ * @abstract Availability of the control (enable/disable) of heated Mirrors.
+ * True: Available, False: Not Available, Not present: Not Available.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatedMirrorsAvailable;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLClimateControlCapabilities.m b/SmartDeviceLink/SDLClimateControlCapabilities.m
index 9ea4143d8..429331ac1 100644
--- a/SmartDeviceLink/SDLClimateControlCapabilities.m
+++ b/SmartDeviceLink/SDLClimateControlCapabilities.m
@@ -11,6 +11,11 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLClimateControlCapabilities
- (instancetype)initWithModuleName:(NSString *)moduleName fanSpeedAvailable:(BOOL)fanSpeedAvailable desiredTemperatureAvailable:(BOOL)desiredTemperatureAvailable acEnableAvailable:(BOOL)acEnableAvailable acMaxEnableAvailable:(BOOL)acMaxEnableAvailable circulateAirAvailable:(BOOL)circulateAirEnableAvailable autoModeEnableAvailable:(BOOL)autoModeEnableAvailable dualModeEnableAvailable:(BOOL)dualModeEnableAvailable defrostZoneAvailable:(BOOL)defrostZoneAvailable ventilationModeAvailable:(BOOL)ventilationModeAvailable {
+
+ return [self initWithModuleName:moduleName fanSpeedAvailable:fanSpeedAvailable desiredTemperatureAvailable:desiredTemperatureAvailable acEnableAvailable:acEnableAvailable acMaxEnableAvailable:acMaxEnableAvailable circulateAirAvailable:circulateAirEnableAvailable autoModeEnableAvailable:autoModeEnableAvailable dualModeEnableAvailable:dualModeEnableAvailable defrostZoneAvailable:defrostZoneAvailable ventilationModeAvailable:ventilationModeAvailable heatedSteeringWheelAvailable:NO heatedWindshieldAvailable:NO heatedRearWindowAvailable:NO heatedMirrorsAvailable:NO];
+}
+
+- (instancetype)initWithModuleName:(NSString *)moduleName fanSpeedAvailable:(BOOL)fanSpeedAvailable desiredTemperatureAvailable:(BOOL)desiredTemperatureAvailable acEnableAvailable:(BOOL)acEnableAvailable acMaxEnableAvailable:(BOOL)acMaxEnableAvailable circulateAirAvailable:(BOOL)circulateAirEnableAvailable autoModeEnableAvailable:(BOOL)autoModeEnableAvailable dualModeEnableAvailable:(BOOL)dualModeEnableAvailable defrostZoneAvailable:(BOOL)defrostZoneAvailable ventilationModeAvailable:(BOOL)ventilationModeAvailable heatedSteeringWheelAvailable:(BOOL)steeringWheelAvailable heatedWindshieldAvailable:(BOOL)windshieldAvailable heatedRearWindowAvailable:(BOOL)rearWindowAvailable heatedMirrorsAvailable:(BOOL)mirrorsAvailable {
self = [self init];
if (!self) {
return nil;
@@ -26,6 +31,10 @@ NS_ASSUME_NONNULL_BEGIN
self.dualModeEnableAvailable = @(dualModeEnableAvailable);
self.defrostZoneAvailable = @(defrostZoneAvailable);
self.ventilationModeAvailable = @(ventilationModeAvailable);
+ self.heatedSteeringWheelAvailable = @(steeringWheelAvailable);
+ self.heatedWindshieldAvailable = @(windshieldAvailable);
+ self.heatedRearWindowAvailable = @(rearWindowAvailable);
+ self.heatedMirrorsAvailable = @(mirrorsAvailable);
return self;
}
@@ -125,6 +134,38 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameVentilationMode];
}
+- (void)setHeatedSteeringWheelAvailable:(nullable NSNumber<SDLBool> *)heatedSteeringWheelAvailable {
+ [store sdl_setObject:heatedSteeringWheelAvailable forName:SDLNameHeatedSteeringWheelAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatedSteeringWheelAvailable {
+ return [store sdl_objectForName:SDLNameHeatedSteeringWheelAvailable];
+}
+
+- (void)setHeatedWindshieldAvailable:(nullable NSNumber<SDLBool> *)heatedWindshieldAvailable {
+ [store sdl_setObject:heatedWindshieldAvailable forName:SDLNameHeatedWindshieldAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatedWindshieldAvailable {
+ return [store sdl_objectForName:SDLNameHeatedWindshieldAvailable];
+}
+
+- (void)setHeatedRearWindowAvailable:(nullable NSNumber<SDLBool> *)heatedRearWindowAvailable {
+ [store sdl_setObject:heatedRearWindowAvailable forName:SDLNameHeatedRearWindowAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatedRearWindowAvailable {
+ return [store sdl_objectForName:SDLNameHeatedRearWindowAvailable];
+}
+
+- (void)setHeatedMirrorsAvailable:(nullable NSNumber<SDLBool> *)heatedMirrorsAvailable {
+ [store sdl_setObject:heatedMirrorsAvailable forName:SDLNameHeatedMirrorsAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatedMirrorsAvailable {
+ return [store sdl_objectForName:SDLNameHeatedMirrorsAvailable];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLClimateControlData.h b/SmartDeviceLink/SDLClimateControlData.h
index 42c4c2761..29938b251 100644
--- a/SmartDeviceLink/SDLClimateControlData.h
+++ b/SmartDeviceLink/SDLClimateControlData.h
@@ -16,7 +16,9 @@ NS_ASSUME_NONNULL_BEGIN
*/
@interface SDLClimateControlData : SDLRPCStruct
-- (instancetype)initWithFanSpeed:(nullable NSNumber<SDLInt> *)fanSpeed desiredTemperature:(nullable SDLTemperature *)desiredTemperature acEnable:(nullable NSNumber<SDLBool> *)acEnable circulateAirEnable:(nullable NSNumber<SDLBool> *)circulateAirEnable autoModeEnable:(nullable NSNumber<SDLBool> *)autoModeEnable defrostZone:(nullable SDLDefrostZone)defrostZone dualModeEnable:(nullable NSNumber<SDLBool> *)dualModeEnable acMaxEnable:(nullable NSNumber<SDLBool> *)acMaxEnable ventilationMode:(nullable SDLVentilationMode)ventilationMode;
+- (instancetype)initWithFanSpeed:(nullable NSNumber<SDLInt> *)fanSpeed desiredTemperature:(nullable SDLTemperature *)desiredTemperature acEnable:(nullable NSNumber<SDLBool> *)acEnable circulateAirEnable:(nullable NSNumber<SDLBool> *)circulateAirEnable autoModeEnable:(nullable NSNumber<SDLBool> *)autoModeEnable defrostZone:(nullable SDLDefrostZone)defrostZone dualModeEnable:(nullable NSNumber<SDLBool> *)dualModeEnable acMaxEnable:(nullable NSNumber<SDLBool> *)acMaxEnable ventilationMode:(nullable SDLVentilationMode)ventilationMode __deprecated_msg("Use initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone: dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable: heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable: instead");
+
+- (instancetype)initWithFanSpeed:(nullable NSNumber<SDLInt> *)fanSpeed desiredTemperature:(nullable SDLTemperature *)desiredTemperature acEnable:(nullable NSNumber<SDLBool> *)acEnable circulateAirEnable:(nullable NSNumber<SDLBool> *)circulateAirEnable autoModeEnable:(nullable NSNumber<SDLBool> *)autoModeEnable defrostZone:(nullable SDLDefrostZone)defrostZone dualModeEnable:(nullable NSNumber<SDLBool> *)dualModeEnable acMaxEnable:(nullable NSNumber<SDLBool> *)acMaxEnable ventilationMode:(nullable SDLVentilationMode)ventilationMode heatedSteeringWheelEnable:(nullable NSNumber<SDLBool> *)heatedSteeringWheelEnable heatedWindshieldEnable:(nullable NSNumber<SDLBool> *)heatedWindshieldEnable heatedRearWindowEnable:(nullable NSNumber<SDLBool> *)heatedRearWindowEnable heatedMirrorsEnable:(nullable NSNumber<SDLBool> *)heatedMirrorsEnable;
/**
* Speed of Fan in integer
@@ -90,6 +92,34 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) SDLVentilationMode ventilationMode;
+/**
+ * @abstract value false means disabled/turn off, value true means enabled/turn on.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatedSteeringWheelEnable;
+
+/**
+ * @abstract value false means disabled, value true means enabled.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatedWindshieldEnable;
+
+/**
+ * @abstract value false means disabled, value true means enabled.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatedRearWindowEnable;
+
+/**
+ * @abstract Value false means disabled, value true means enabled.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatedMirrorsEnable;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLClimateControlData.m b/SmartDeviceLink/SDLClimateControlData.m
index ddb98c102..0a57e40c9 100644
--- a/SmartDeviceLink/SDLClimateControlData.m
+++ b/SmartDeviceLink/SDLClimateControlData.m
@@ -12,11 +12,15 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLClimateControlData
- (instancetype)initWithFanSpeed:(nullable NSNumber<SDLInt> *)fanSpeed desiredTemperature:(nullable SDLTemperature *)desiredTemperature acEnable:(nullable NSNumber<SDLBool> *)acEnable circulateAirEnable:(nullable NSNumber<SDLBool> *)circulateAirEnable autoModeEnable:(nullable NSNumber<SDLBool> *)autoModeEnable defrostZone:(nullable SDLDefrostZone)defrostZone dualModeEnable:(nullable NSNumber<SDLBool> *)dualModeEnable acMaxEnable:(nullable NSNumber<SDLBool> *)acMaxEnable ventilationMode:(nullable SDLVentilationMode)ventilationMode {
+ return [self initWithFanSpeed:fanSpeed desiredTemperature:desiredTemperature acEnable:acEnable circulateAirEnable:circulateAirEnable autoModeEnable:autoModeEnable defrostZone:defrostZone dualModeEnable:dualModeEnable acMaxEnable:acMaxEnable ventilationMode:ventilationMode heatedSteeringWheelEnable:@NO heatedWindshieldEnable:@NO heatedRearWindowEnable:@NO heatedMirrorsEnable:@NO];
+}
+
+- (instancetype)initWithFanSpeed:(nullable NSNumber<SDLInt> *)fanSpeed desiredTemperature:(nullable SDLTemperature *)desiredTemperature acEnable:(nullable NSNumber<SDLBool> *)acEnable circulateAirEnable:(nullable NSNumber<SDLBool> *)circulateAirEnable autoModeEnable:(nullable NSNumber<SDLBool> *)autoModeEnable defrostZone:(nullable SDLDefrostZone)defrostZone dualModeEnable:(nullable NSNumber<SDLBool> *)dualModeEnable acMaxEnable:(nullable NSNumber<SDLBool> *)acMaxEnable ventilationMode:(nullable SDLVentilationMode)ventilationMode heatedSteeringWheelEnable:(nullable NSNumber<SDLBool> *)heatedSteeringWheelEnable heatedWindshieldEnable:(nullable NSNumber<SDLBool> *)heatedWindshieldEnable heatedRearWindowEnable:(nullable NSNumber<SDLBool> *)heatedRearWindowEnable heatedMirrorsEnable:(nullable NSNumber<SDLBool> *)heatedMirrorsEnable {
self = [self init];
if (!self) {
return nil;
}
-
+
self.fanSpeed = fanSpeed;
self.desiredTemperature = desiredTemperature;
self.acEnable = acEnable;
@@ -26,7 +30,11 @@ NS_ASSUME_NONNULL_BEGIN
self.dualModeEnable = dualModeEnable;
self.acMaxEnable = acMaxEnable;
self.ventilationMode = ventilationMode;
-
+ self.heatedSteeringWheelEnable = heatedSteeringWheelEnable;
+ self.heatedWindshieldEnable = heatedWindshieldEnable;
+ self.heatedRearWindowEnable = heatedRearWindowEnable;
+ self.heatedMirrorsEnable = heatedMirrorsEnable;
+
return self;
}
@@ -110,6 +118,38 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameVentilationMode];
}
+- (void)setHeatedSteeringWheelEnable:(nullable NSNumber<SDLBool> *)heatedSteeringWheelEnable {
+ [store sdl_setObject:heatedSteeringWheelEnable forName:SDLNameHeatedSteeringWheelEnable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatedSteeringWheelEnable {
+ return [store sdl_objectForName:SDLNameHeatedSteeringWheelEnable];
+}
+
+- (void)setHeatedWindshieldEnable:(nullable NSNumber<SDLBool> *)heatedWindshieldEnable {
+ [store sdl_setObject:heatedWindshieldEnable forName:SDLNameHeatedWindshieldEnable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatedWindshieldEnable {
+ return [store sdl_objectForName:SDLNameHeatedWindshieldEnable];
+}
+
+- (void)setHeatedRearWindowEnable:(nullable NSNumber<SDLBool> *)heatedRearWindowEnable {
+ [store sdl_setObject:heatedRearWindowEnable forName:SDLNameHeatedRearWindowEnable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatedRearWindowEnable {
+ return [store sdl_objectForName:SDLNameHeatedRearWindowEnable];
+}
+
+- (void)setHeatedMirrorsEnable:(nullable NSNumber<SDLBool> *)heatedMirrorsEnable {
+ [store sdl_setObject:heatedMirrorsEnable forName:SDLNameHeatedMirrorsEnable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatedMirrorsEnable {
+ return [store sdl_objectForName:SDLNameHeatedMirrorsEnable];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLConfiguration.h b/SmartDeviceLink/SDLConfiguration.h
index 9f92cd6c1..2cd6420fd 100644
--- a/SmartDeviceLink/SDLConfiguration.h
+++ b/SmartDeviceLink/SDLConfiguration.h
@@ -8,6 +8,7 @@
#import <Foundation/Foundation.h>
+@class SDLFileManagerConfiguration;
@class SDLLifecycleConfiguration;
@class SDLLockScreenConfiguration;
@class SDLLogConfiguration;
@@ -28,56 +29,107 @@ NS_ASSUME_NONNULL_BEGIN
@property (copy, nonatomic, readonly) SDLLockScreenConfiguration *lockScreenConfig;
/**
- The log configuration.
+ * The log configuration.
*/
@property (copy, nonatomic, readonly) SDLLogConfiguration *loggingConfig;
/**
- The configuration
+ * The streaming media configuration.
*/
@property (copy, nonatomic, readonly) SDLStreamingMediaConfiguration *streamingMediaConfig;
/**
- Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, and logging configuration.
+ * The file manager configuration.
+ */
+@property (copy, nonatomic, readonly) SDLFileManagerConfiguration *fileManagerConfig;
- @param lifecycleConfig The lifecycle configuration to be used.
- @param lockScreenConfig The lockscreen configuration to be used, or `enabledConfiguration` if nil.
- @param logConfig The logging configuration to be used, or `defaultConfiguration` if nil.
- @return The configuration
+/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @return The configuration
*/
-- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig;
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:fileManager: instead");
/**
- Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, and logging configuration.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
+ */
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig;
- @param lifecycleConfig The lifecycle configuration to be used.
- @param lockScreenConfig The lockscreen configuration to be used, or `enabledConfiguration` if nil.
- @param logConfig The logging configuration to be used, or `defaultConfiguration` if nil.
- @return The configuration
+/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @return The configuration
*/
-+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig NS_SWIFT_UNAVAILABLE("Use an initializer instead");
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig __deprecated_msg("Use configurationWithLifecycle:lockScreen:logging:fileManager: instead") NS_SWIFT_UNAVAILABLE("Use an initializer instead");
/**
- Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, logging, and streaming media configuration.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
+ */
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig NS_SWIFT_UNAVAILABLE("Use an initializer instead");
- @param lifecycleConfig The lifecycle configuration to be used.
- @param lockScreenConfig The lockscreen configuration to be used, or `enabledConfiguration` if nil.
- @param logConfig The logging configuration to be used, or `defaultConfiguration` if nil.
- @param streamingMediaConfig The streaming media configuration to be used, or nil because it is not needed.
- @return The configuration
+/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
+ * @return The configuration
*/
-- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig;
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:streamingMedia:fileManager: instead");
/**
- Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, logging, and streaming media configuration.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
+ */
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig;
- @param lifecycleConfig The lifecycle configuration to be used.
- @param lockScreenConfig The lockscreen configuration to be used, or `enabledConfiguration` if nil.
- @param logConfig The logging configuration to be used, or `defaultConfiguration` if nil.
- @param streamingMediaConfig The streaming media configuration to be used, or nil because it is not needed.
- @return The configuration
+/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
+ * @return The configuration
+ */
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig __deprecated_msg("Use configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager: instead") NS_SWIFT_UNAVAILABLE("Use an initializer instead");
+
+/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
*/
-+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig NS_SWIFT_UNAVAILABLE("Use an initializer instead");
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig NS_SWIFT_UNAVAILABLE("Use an initializer instead");
@end
diff --git a/SmartDeviceLink/SDLConfiguration.m b/SmartDeviceLink/SDLConfiguration.m
index 98fddadc1..a96b27d68 100644
--- a/SmartDeviceLink/SDLConfiguration.m
+++ b/SmartDeviceLink/SDLConfiguration.m
@@ -8,6 +8,7 @@
#import "SDLConfiguration.h"
+#import "SDLFileManagerConfiguration.h"
#import "SDLLifecycleConfiguration.h"
#import "SDLLockScreenConfiguration.h"
#import "SDLLogConfiguration.h"
@@ -18,22 +19,18 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLConfiguration
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfiguration {
- return [self initWithLifecycle:lifecycleConfiguration lockScreen:nil logging:nil];
-}
-
-+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfiguration {
- return [[self alloc] initWithLifecycle:lifecycleConfiguration lockScreen:nil logging:nil];
+ return [self initWithLifecycle:lifecycleConfiguration lockScreen:nil];
}
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig {
- return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:nil];
+ return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:nil fileManager:nil];
}
-+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig {
- return [[self alloc] initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig];
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig {
+ return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig fileManager:nil];
}
-- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig {
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig {
self = [super init];
if (!self) {
return nil;
@@ -42,15 +39,32 @@ NS_ASSUME_NONNULL_BEGIN
_lifecycleConfig = lifecycleConfig;
_lockScreenConfig = lockScreenConfig ?: [SDLLockScreenConfiguration enabledConfiguration];
_loggingConfig = logConfig ?: [SDLLogConfiguration defaultConfiguration];
+ _fileManagerConfig = fileManagerConfig ?: [SDLFileManagerConfiguration defaultConfiguration];
return self;
}
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfiguration {
+ return [self configurationWithLifecycle:lifecycleConfiguration lockScreen:nil];
+}
+
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig {
+ return [self configurationWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:nil fileManager:nil];
+}
+
+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig {
- return [[self alloc] initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig];
+ return [self configurationWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig fileManager:nil];
+}
+
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig {
+ return [[self alloc] initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig fileManager:fileManagerConfig];
}
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig {
+ return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig streamingMedia:streamingMediaConfig fileManager:nil];
+}
+
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig {
self = [super init];
if (!self) {
return nil;
@@ -59,8 +73,8 @@ NS_ASSUME_NONNULL_BEGIN
_lifecycleConfig = lifecycleConfig;
_lockScreenConfig = lockScreenConfig ?: [SDLLockScreenConfiguration enabledConfiguration];
_loggingConfig = logConfig ?: [SDLLogConfiguration defaultConfiguration];
- _streamingMediaConfig = streamingMediaConfig;
+ _streamingMediaConfig = streamingMediaConfig;
if (_streamingMediaConfig != nil) {
// If we have a streaming config, the apptype MUST be navigation or projection
NSAssert(([_lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeNavigation] || [_lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeProjection] || [_lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeNavigation] || [_lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeProjection]), @"You should only set a streaming media configuration if your app is a NAVIGATION or PROJECTION HMI type");
@@ -70,18 +84,23 @@ NS_ASSUME_NONNULL_BEGIN
NSAssert(!([_lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeNavigation] || [_lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeProjection] || [_lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeNavigation] || [_lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeProjection]), @"If your app is a NAVIGATION or PROJECTION HMI type, you must set a streaming media configuration on SDLConfiguration");
}
+ _fileManagerConfig = fileManagerConfig ?: [SDLFileManagerConfiguration defaultConfiguration];
+
return self;
}
+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig {
- return [[self alloc] initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig streamingMedia:streamingMediaConfig];
+ return [self configurationWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig streamingMedia:streamingMediaConfig fileManager:nil];
+}
+
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig {
+ return [[self alloc] initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig streamingMedia:streamingMediaConfig fileManager:fileManagerConfig];
}
#pragma mark - NSCopying
- (id)copyWithZone:(nullable NSZone *)zone {
- SDLConfiguration *new = [[SDLConfiguration allocWithZone:zone] initWithLifecycle: _lifecycleConfig lockScreen: _lockScreenConfig logging:_loggingConfig streamingMedia:_streamingMediaConfig];
-
+ SDLConfiguration *new = [[SDLConfiguration allocWithZone:zone] initWithLifecycle:_lifecycleConfig lockScreen:_lockScreenConfig logging:_loggingConfig streamingMedia:_streamingMediaConfig fileManager:_fileManagerConfig];
return new;
}
diff --git a/SmartDeviceLink/SDLControlFramePayloadConstants.h b/SmartDeviceLink/SDLControlFramePayloadConstants.h
index f95b90ef8..37eb51dfc 100644
--- a/SmartDeviceLink/SDLControlFramePayloadConstants.h
+++ b/SmartDeviceLink/SDLControlFramePayloadConstants.h
@@ -14,8 +14,14 @@ extern int64_t const SDLControlFrameInt64NotFound;
extern char *const SDLControlFrameProtocolVersionKey;
extern char *const SDLControlFrameHashIdKey;
extern char *const SDLControlFrameMTUKey;
+extern char *const SDLControlFrameReasonKey;
extern char *const SDLControlFrameRejectedParams;
extern char *const SDLControlFrameVideoProtocolKey;
extern char *const SDLControlFrameVideoCodecKey;
extern char *const SDLControlFrameHeightKey;
extern char *const SDLControlFrameWidthKey;
+extern char *const SDLControlFrameSecondaryTransportsKey;
+extern char *const SDLControlFrameAudioServiceTransportsKey;
+extern char *const SDLControlFrameVideoServiceTransportsKey;
+extern char *const SDLControlFrameTCPIPAddressKey;
+extern char *const SDLControlFrameTCPPortKey;
diff --git a/SmartDeviceLink/SDLControlFramePayloadConstants.m b/SmartDeviceLink/SDLControlFramePayloadConstants.m
index 8d9965f37..41048765d 100644
--- a/SmartDeviceLink/SDLControlFramePayloadConstants.m
+++ b/SmartDeviceLink/SDLControlFramePayloadConstants.m
@@ -14,8 +14,14 @@ int64_t const SDLControlFrameInt64NotFound = -1;
char *const SDLControlFrameProtocolVersionKey = "protocolVersion";
char *const SDLControlFrameHashIdKey = "hashId";
char *const SDLControlFrameMTUKey = "mtu";
+char *const SDLControlFrameReasonKey = "reason";
char *const SDLControlFrameRejectedParams = "rejectedParams";
char *const SDLControlFrameVideoProtocolKey = "videoProtocol";
char *const SDLControlFrameVideoCodecKey = "videoCodec";
char *const SDLControlFrameHeightKey = "height";
char *const SDLControlFrameWidthKey = "width";
+char *const SDLControlFrameSecondaryTransportsKey = "secondaryTransports";
+char *const SDLControlFrameAudioServiceTransportsKey = "audioServiceTransports";
+char *const SDLControlFrameVideoServiceTransportsKey = "videoServiceTransports";
+char *const SDLControlFrameTCPIPAddressKey = "tcpIpAddress";
+char *const SDLControlFrameTCPPortKey = "tcpPort";
diff --git a/SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.h b/SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.h
index 078405e1e..ba339bdc2 100644
--- a/SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.h
+++ b/SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.h
@@ -23,7 +23,16 @@ NS_ASSUME_NONNULL_BEGIN
/// The negotiated version of the protocol. Must be in the format "Major.Minor.Patch"
@property (copy, nonatomic, readonly, nullable) NSString *protocolVersion;
-- (instancetype)initWithHashId:(int32_t)hashId mtu:(int64_t)mtu protocolVersion:(nullable NSString *)protocolVersion;
+/** The transport types for Secondary Transport */
+@property (copy, nonatomic, readonly, nullable) NSArray<NSString *> *secondaryTransports;
+
+/** List of transports that are allowed to carry audio service. The values can be either 1 (primary transport) or 2 (secondary transport) and are listed in preferred order. */
+@property (copy, nonatomic, readonly, nullable) NSArray<NSNumber *> *audioServiceTransports;
+
+/** List of transports that are allowed to carry video service. The values can be either 1 (primary transport) or 2 (secondary transport) and are listed in preferred order. */
+@property (copy, nonatomic, readonly, nullable) NSArray<NSNumber *> *videoServiceTransports;
+
+- (instancetype)initWithHashId:(int32_t)hashId mtu:(int64_t)mtu protocolVersion:(nullable NSString *)protocolVersion secondaryTransports:(nullable NSArray<NSString *> *)secondaryTransports audioServiceTransports:(nullable NSArray<NSNumber *> *)audioServiceTransports videoServiceTransports:(nullable NSArray<NSNumber *> *)videoServiceTransports;
@end
diff --git a/SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.m b/SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.m
index cc2c2c3a5..536ecfc86 100644
--- a/SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.m
+++ b/SmartDeviceLink/SDLControlFramePayloadRPCStartServiceAck.m
@@ -19,19 +19,30 @@ NS_ASSUME_NONNULL_BEGIN
@property (assign, nonatomic, readwrite) int32_t hashId;
@property (assign, nonatomic, readwrite) int64_t mtu;
@property (copy, nonatomic, readwrite, nullable) NSString *protocolVersion;
+@property (copy, nonatomic, readwrite, nullable) NSArray<NSString *> *secondaryTransports;
+@property (copy, nonatomic, readwrite, nullable) NSArray<NSNumber *> *audioServiceTransports;
+@property (copy, nonatomic, readwrite, nullable) NSArray<NSNumber *> *videoServiceTransports;
@end
@implementation SDLControlFramePayloadRPCStartServiceAck
-- (instancetype)initWithHashId:(int32_t)hashId mtu:(int64_t)mtu protocolVersion:(nullable NSString *)protocolVersion {
+- (instancetype)initWithHashId:(int32_t)hashId
+ mtu:(int64_t)mtu
+ protocolVersion:(nullable NSString *)protocolVersion
+ secondaryTransports:(nullable NSArray<NSString *> *)secondaryTransports
+ audioServiceTransports:(nullable NSArray<NSNumber *> *)audioServiceTransports
+ videoServiceTransports:(nullable NSArray<NSNumber *> *)videoServiceTransports {
self = [super init];
if (!self) return nil;
_hashId = hashId;
_mtu = mtu;
_protocolVersion = protocolVersion;
+ _secondaryTransports = secondaryTransports;
+ _audioServiceTransports = audioServiceTransports;
+ _videoServiceTransports = videoServiceTransports;
return self;
}
@@ -72,6 +83,22 @@ NS_ASSUME_NONNULL_BEGIN
bson_object_put_string(&payloadObject, SDLControlFrameProtocolVersionKey, (char *)self.protocolVersion.UTF8String);
}
+ if (self.secondaryTransports != nil) {
+ BsonArray arrayObject;
+ // Currently there are 8 transport types defined. So initial value of 8 should be sufficient.
+ bson_array_initialize(&arrayObject, 8);
+
+ for (NSString *transport in self.secondaryTransports) {
+ bson_array_add_string(&arrayObject, (char *)transport.UTF8String);
+ }
+
+ bson_object_put_array(&payloadObject, SDLControlFrameSecondaryTransportsKey, &arrayObject);
+ }
+
+ [self sdl_addServiceTransports:&payloadObject fromArray:self.audioServiceTransports forKey:SDLControlFrameAudioServiceTransportsKey];
+
+ [self sdl_addServiceTransports:&payloadObject fromArray:self.videoServiceTransports forKey:SDLControlFrameVideoServiceTransportsKey];
+
BytePtr bsonData = bson_object_to_bytes(&payloadObject);
NSUInteger length = bson_object_size(&payloadObject);
@@ -91,11 +118,68 @@ NS_ASSUME_NONNULL_BEGIN
self.protocolVersion = [NSString stringWithUTF8String:utf8String];
}
+ BsonArray *arrayObject = bson_object_get_array(&payloadObject, SDLControlFrameSecondaryTransportsKey);
+ if (arrayObject != NULL) {
+ NSMutableArray<NSString *> *secondaryTransports = [NSMutableArray array];
+ size_t index = 0;
+
+ while ((utf8String = bson_array_get_string(arrayObject, index)) != NULL) {
+ [secondaryTransports addObject:[NSString stringWithUTF8String:utf8String]];
+ index++;
+ }
+ self.secondaryTransports = [secondaryTransports copy];
+ }
+
+ self.audioServiceTransports = [self sdl_getServiceTransports:&payloadObject forKey:SDLControlFrameAudioServiceTransportsKey];
+
+ self.videoServiceTransports = [self sdl_getServiceTransports:&payloadObject forKey:SDLControlFrameVideoServiceTransportsKey];
+
bson_object_deinitialize(&payloadObject);
}
+- (nullable NSArray<NSNumber *> *)sdl_getServiceTransports:(BsonObject *)payloadObject forKey:(const char * const)key {
+ if (payloadObject == NULL || key == NULL) {
+ return nil;
+ }
+
+ BsonArray *arrayObject = bson_object_get_array(payloadObject, key);
+ if (arrayObject == NULL) {
+ return nil;
+ }
+
+ NSMutableArray<NSNumber *> *transports = [NSMutableArray array];
+ int32_t num;
+ size_t index = 0;
+
+ while ((num = bson_array_get_int32(arrayObject, index)) != -1) {
+ [transports addObject:@(num)];
+ index++;
+ }
+
+ return [transports copy];
+}
+
+- (void)sdl_addServiceTransports:(BsonObject *)payloadObject fromArray:(NSArray<NSNumber *> *)array forKey:(const char * const)key {
+ if (payloadObject == NULL || array == nil || key == NULL) {
+ return;
+ }
+
+ BsonArray arrayObject;
+ // currently there are 2 transports defined (primary and secondary)
+ bson_array_initialize(&arrayObject, 2);
+
+ for (NSNumber *num in array) {
+ int32_t transport = [num intValue];
+ if (transport != -1) {
+ bson_array_add_int32(&arrayObject, transport);
+ }
+ }
+
+ bson_object_put_array(payloadObject, key, &arrayObject);
+}
+
- (NSString *)description {
- return [NSString stringWithFormat:@"<%@>: Protocol Version: %@, hash id: %d, MTU: %lld", NSStringFromClass(self.class), self.protocolVersion, self.hashId, self.mtu];
+ return [NSString stringWithFormat:@"<%@>: Protocol Version: %@, hash id: %d, MTU: %lld, secondary transports: %@, transports for audio service: %@, transports for video service: %@", NSStringFromClass(self.class), self.protocolVersion, self.hashId, self.mtu, self.secondaryTransports, self.audioServiceTransports, self.videoServiceTransports];
}
@end
diff --git a/SmartDeviceLink/SDLControlFramePayloadRegisterSecondaryTransportNak.h b/SmartDeviceLink/SDLControlFramePayloadRegisterSecondaryTransportNak.h
new file mode 100644
index 000000000..1435ba42e
--- /dev/null
+++ b/SmartDeviceLink/SDLControlFramePayloadRegisterSecondaryTransportNak.h
@@ -0,0 +1,24 @@
+//
+// SDLControlFramePayloadRegisterSecondaryTransportNak.h
+// SmartDeviceLink-iOS
+//
+// Created by Sho Amano on 2018/03/16.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLControlFramePayloadType.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLControlFramePayloadRegisterSecondaryTransportNak : NSObject <SDLControlFramePayloadType>
+
+@property (copy, nonatomic, readonly, nullable) NSString *reason;
+
+- (instancetype)initWithReason:(nullable NSString *)reason;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLControlFramePayloadRegisterSecondaryTransportNak.m b/SmartDeviceLink/SDLControlFramePayloadRegisterSecondaryTransportNak.m
new file mode 100644
index 000000000..570d41fa5
--- /dev/null
+++ b/SmartDeviceLink/SDLControlFramePayloadRegisterSecondaryTransportNak.m
@@ -0,0 +1,83 @@
+//
+// SDLControlFramePayloadRegisterSecondaryTransportNak.m
+// SmartDeviceLink
+//
+// Created by Sho Amano on 2018/03/16.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import "SDLControlFramePayloadRegisterSecondaryTransportNak.h"
+
+#import "bson_object.h"
+#import "SDLControlFramePayloadConstants.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLControlFramePayloadRegisterSecondaryTransportNak ()
+
+@property (copy, nonatomic, readwrite, nullable) NSString *reason;
+
+@end
+
+@implementation SDLControlFramePayloadRegisterSecondaryTransportNak
+
+- (instancetype)initWithReason:(nullable NSString *)reason {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ _reason = reason;
+
+ return self;
+}
+
+- (instancetype)initWithData:(nullable NSData *)data {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ if (data.length > 0) {
+ [self sdl_parse:data];
+ }
+
+ return self;
+}
+
+- (nullable NSData *)data {
+ if (self.reason == nil) {
+ return nil;
+ }
+
+ BsonObject payloadObject;
+ bson_object_initialize_default(&payloadObject);
+ bson_object_put_string(&payloadObject, SDLControlFrameReasonKey, (char *)self.reason.UTF8String);
+
+ BytePtr bsonData = bson_object_to_bytes(&payloadObject);
+ NSUInteger length = bson_object_size(&payloadObject);
+
+ bson_object_deinitialize(&payloadObject);
+
+ return [[NSData alloc] initWithBytes:bsonData length:length];
+}
+
+- (void)sdl_parse:(NSData *)data {
+ BsonObject payloadObject = bson_object_from_bytes((BytePtr)data.bytes);
+
+ char *reasonString = bson_object_get_string(&payloadObject, SDLControlFrameReasonKey);
+ if (reasonString != NULL) {
+ self.reason = [NSString stringWithUTF8String:reasonString];
+ }
+
+ bson_object_deinitialize(&payloadObject);
+}
+
+- (NSString *)description {
+ return [NSString stringWithFormat:@"<%@>: reason: %@", NSStringFromClass(self.class), self.reason];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLControlFramePayloadTransportEventUpdate.h b/SmartDeviceLink/SDLControlFramePayloadTransportEventUpdate.h
new file mode 100644
index 000000000..747934790
--- /dev/null
+++ b/SmartDeviceLink/SDLControlFramePayloadTransportEventUpdate.h
@@ -0,0 +1,27 @@
+//
+// SDLControlFramePayloadTransportEventUpdate.h
+// SmartDeviceLink-iOS
+//
+// Created by Sho Amano on 2018/03/05.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLControlFramePayloadType.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLControlFramePayloadTransportEventUpdate : NSObject <SDLControlFramePayloadType>
+
+/** A string representing IP address of Core's TCP transport. It can be either IPv4 or IPv6 address. */
+@property (copy, nonatomic, readonly, nullable) NSString *tcpIpAddress;
+/** TCP port number that Core is listening on */
+@property (assign, nonatomic, readonly) int32_t tcpPort;
+
+
+- (instancetype)initWithTcpIpAddress:(nullable NSString *)tcpIpAddress tcpPort:(int32_t)tcpPort;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLControlFramePayloadTransportEventUpdate.m b/SmartDeviceLink/SDLControlFramePayloadTransportEventUpdate.m
new file mode 100644
index 000000000..daaf3f13c
--- /dev/null
+++ b/SmartDeviceLink/SDLControlFramePayloadTransportEventUpdate.m
@@ -0,0 +1,100 @@
+//
+// SDLControlFramePayloadTransportEventUpdate.m
+// SmartDeviceLink-iOS
+//
+// Created by Sho Amano on 2018/03/05.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import "SDLControlFramePayloadTransportEventUpdate.h"
+
+#import "bson_object.h"
+#import "SDLControlFramePayloadConstants.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLControlFramePayloadTransportEventUpdate ()
+
+// A string representing IP address of Core's TCP transport. It can be either IPv4 or IPv6 address.
+@property (copy, nonatomic, readwrite, nullable) NSString *tcpIpAddress;
+// TCP port number that Core is listening on
+@property (assign, nonatomic, readwrite) int32_t tcpPort;
+
+@end
+
+@implementation SDLControlFramePayloadTransportEventUpdate
+
+- (instancetype)initWithTcpIpAddress:(nullable NSString *)tcpIpAddress tcpPort:(int32_t)tcpPort {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ _tcpIpAddress = tcpIpAddress;
+ if (tcpPort >= 0 && tcpPort <= 65535) {
+ _tcpPort = tcpPort;
+ } else {
+ _tcpPort = SDLControlFrameInt32NotFound;
+ }
+
+ return self;
+}
+
+- (instancetype)initWithData:(nullable NSData *)data {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ _tcpPort = SDLControlFrameInt32NotFound;
+
+ if (data.length > 0) {
+ [self sdl_parse:data];
+ }
+
+ return self;
+}
+
+- (nullable NSData *)data {
+ if (self.tcpIpAddress == nil && self.tcpPort == SDLControlFrameInt32NotFound) {
+ return nil;
+ }
+
+ BsonObject payloadObject;
+ bson_object_initialize_default(&payloadObject);
+
+ if (self.tcpIpAddress != nil) {
+ bson_object_put_string(&payloadObject, SDLControlFrameTCPIPAddressKey, (char *)self.tcpIpAddress.UTF8String);
+ }
+ if (self.tcpPort != SDLControlFrameInt32NotFound) {
+ bson_object_put_int32(&payloadObject, SDLControlFrameTCPPortKey, self.tcpPort);
+ }
+
+ BytePtr bsonData = bson_object_to_bytes(&payloadObject);
+ NSUInteger length = bson_object_size(&payloadObject);
+
+ bson_object_deinitialize(&payloadObject);
+
+ return [[NSData alloc] initWithBytes:bsonData length:length];
+}
+
+- (void)sdl_parse:(NSData *)data {
+ BsonObject payloadObject = bson_object_from_bytes((BytePtr)data.bytes);
+
+ char *utf8String = bson_object_get_string(&payloadObject, SDLControlFrameTCPIPAddressKey);
+ if (utf8String != NULL) {
+ self.tcpIpAddress = [NSString stringWithUTF8String:utf8String];
+ }
+ self.tcpPort = bson_object_get_int32(&payloadObject, SDLControlFrameTCPPortKey);
+
+ bson_object_deinitialize(&payloadObject);
+}
+
+- (NSString *)description {
+ return [NSString stringWithFormat:@"<%@>: TCP IP address: %@, TCP port: %d", NSStringFromClass(self.class), self.tcpIpAddress, self.tcpPort];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLDeleteChoicesOperation.h b/SmartDeviceLink/SDLDeleteChoicesOperation.h
new file mode 100644
index 000000000..b712759cb
--- /dev/null
+++ b/SmartDeviceLink/SDLDeleteChoicesOperation.h
@@ -0,0 +1,25 @@
+//
+// SDLDeleteChoicesOperation.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/23/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLAsynchronousOperation.h"
+
+@class SDLChoiceCell;
+
+@protocol SDLConnectionManagerType;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLDeleteChoicesOperation : SDLAsynchronousOperation
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager cellsToDelete:(NSSet<SDLChoiceCell *> *)cells;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLDeleteChoicesOperation.m b/SmartDeviceLink/SDLDeleteChoicesOperation.m
new file mode 100644
index 000000000..46b7c0d6d
--- /dev/null
+++ b/SmartDeviceLink/SDLDeleteChoicesOperation.m
@@ -0,0 +1,87 @@
+//
+// SDLDeleteChoicesOperation.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/23/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLDeleteChoicesOperation.h"
+
+#import "SDLChoiceCell.h"
+#import "SDLConnectionManagerType.h"
+#import "SDLDeleteInteractionChoiceSet.h"
+#import "SDLError.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLChoiceCell()
+
+@property (assign, nonatomic) UInt16 choiceId;
+
+@end
+
+@interface SDLDeleteChoicesOperation()
+
+@property (strong, nonatomic) NSSet<SDLChoiceCell *> *cellsToDelete;
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (copy, nonatomic, nullable) NSError *internalError;
+
+@end
+
+@implementation SDLDeleteChoicesOperation
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager cellsToDelete:(NSSet<SDLChoiceCell *> *)cells {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _connectionManager = connectionManager;
+ _cellsToDelete = cells;
+
+ return self;
+}
+
+- (void)start {
+ [super start];
+
+ [self sdl_sendDeletions];
+}
+
+- (void)sdl_sendDeletions {
+ NSMutableArray<SDLDeleteInteractionChoiceSet *> *deleteChoices = [NSMutableArray arrayWithCapacity:self.cellsToDelete.count];
+ for (SDLChoiceCell *cell in self.cellsToDelete) {
+ [deleteChoices addObject:[[SDLDeleteInteractionChoiceSet alloc] initWithId:cell.choiceId]];
+ }
+
+ __weak typeof(self) weakSelf = self;
+ __block NSMutableDictionary<SDLRPCRequest *, NSError *> *errors = [NSMutableDictionary dictionary];
+ [self.connectionManager sendRequests:deleteChoices progressHandler:^(__kindof SDLRPCRequest * _Nonnull request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error, float percentComplete) {
+ if (error != nil) {
+ errors[request] = error;
+ }
+ } completionHandler:^(BOOL success) {
+ if (!success) {
+ weakSelf.internalError = [NSError sdl_choiceSetManager_choiceDeletionFailed:errors];
+ }
+
+ [weakSelf finishOperation];
+ }];
+}
+
+#pragma mark - Property Overrides
+
+- (nullable NSString *)name {
+ return @"com.sdl.choicesetmanager.deleteChoices";
+}
+
+- (NSOperationQueuePriority)queuePriority {
+ return NSOperationQueuePriorityNormal;
+}
+
+- (nullable NSError *)error {
+ return self.internalError;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLDeleteFileOperation.m b/SmartDeviceLink/SDLDeleteFileOperation.m
index f45f3cbdd..4d974a2ad 100644
--- a/SmartDeviceLink/SDLDeleteFileOperation.m
+++ b/SmartDeviceLink/SDLDeleteFileOperation.m
@@ -48,20 +48,21 @@ NS_ASSUME_NONNULL_BEGIN
SDLDeleteFile *deleteFile = [[SDLDeleteFile alloc] initWithFileName:self.fileName];
typeof(self) weakself = self;
- [self.connectionManager sendConnectionManagerRequest:deleteFile
- withResponseHandler:^(__kindof SDLRPCRequest *request, __kindof SDLRPCResponse *response, NSError *error) {
- // Pull out the parameters
- SDLDeleteFileResponse *deleteFileResponse = (SDLDeleteFileResponse *)response;
- BOOL success = [deleteFileResponse.success boolValue];
- NSUInteger bytesAvailable = [deleteFileResponse.spaceAvailable unsignedIntegerValue];
-
- // Callback
- if (weakself.completionHandler != nil) {
- weakself.completionHandler(success, bytesAvailable, error);
- }
-
- [weakself finishOperation];
- }];
+ [self.connectionManager sendConnectionManagerRequest:deleteFile withResponseHandler:^(__kindof SDLRPCRequest *request, __kindof SDLRPCResponse *response, NSError *error) {
+ // Pull out the parameters
+ SDLDeleteFileResponse *deleteFileResponse = (SDLDeleteFileResponse *)response;
+ BOOL success = [deleteFileResponse.success boolValue];
+
+ // If spaceAvailable is nil, set it to the max value
+ NSUInteger bytesAvailable = deleteFileResponse.spaceAvailable != nil ? deleteFileResponse.spaceAvailable.unsignedIntegerValue : 2000000000;
+
+ // Callback
+ if (weakself.completionHandler != nil) {
+ weakself.completionHandler(success, bytesAvailable, error);
+ }
+
+ [weakself finishOperation];
+ }];
}
diff --git a/SmartDeviceLink/SDLDeleteFileResponse.h b/SmartDeviceLink/SDLDeleteFileResponse.h
index 8c3fc4fc5..c639dcdd7 100644
--- a/SmartDeviceLink/SDLDeleteFileResponse.h
+++ b/SmartDeviceLink/SDLDeleteFileResponse.h
@@ -17,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
The remaining available space for your application to store data on the remote system.
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *spaceAvailable;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *spaceAvailable;
@end
diff --git a/SmartDeviceLink/SDLDeleteFileResponse.m b/SmartDeviceLink/SDLDeleteFileResponse.m
index 5c54b9852..42689fafe 100644
--- a/SmartDeviceLink/SDLDeleteFileResponse.m
+++ b/SmartDeviceLink/SDLDeleteFileResponse.m
@@ -17,11 +17,11 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
-- (void)setSpaceAvailable:(NSNumber<SDLInt> *)spaceAvailable {
+- (void)setSpaceAvailable:(nullable NSNumber<SDLInt> *)spaceAvailable {
[parameters sdl_setObject:spaceAvailable forName:SDLNameSpaceAvailable];
}
-- (NSNumber<SDLInt> *)spaceAvailable {
+- (nullable NSNumber<SDLInt> *)spaceAvailable {
return [parameters sdl_objectForName:SDLNameSpaceAvailable];
}
diff --git a/SmartDeviceLink/SDLDisplayCapabilities.h b/SmartDeviceLink/SDLDisplayCapabilities.h
index 5df48f201..b278ef3a2 100644
--- a/SmartDeviceLink/SDLDisplayCapabilities.h
+++ b/SmartDeviceLink/SDLDisplayCapabilities.h
@@ -25,7 +25,14 @@ NS_ASSUME_NONNULL_BEGIN
*
* Required
*/
-@property (strong, nonatomic) SDLDisplayType displayType;
+@property (strong, nonatomic) SDLDisplayType displayType __deprecated_msg("See `displayName` instead");
+
+/**
+ The name of the connected display
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) NSString *displayName;
/**
* 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.
diff --git a/SmartDeviceLink/SDLDisplayCapabilities.m b/SmartDeviceLink/SDLDisplayCapabilities.m
index 06a8912e7..c1615431c 100644
--- a/SmartDeviceLink/SDLDisplayCapabilities.m
+++ b/SmartDeviceLink/SDLDisplayCapabilities.m
@@ -21,6 +21,14 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameDisplayType];
}
+- (void)setDisplayName:(nullable NSString *)displayName {
+ [store sdl_setObject:displayName forName:SDLNameDisplayName];
+}
+
+- (nullable NSString *)displayName {
+ return [store sdl_objectForName:SDLNameDisplayName];
+}
+
- (void)setTextFields:(NSArray<SDLTextField *> *)textFields {
[store sdl_setObject:textFields forName:SDLNameTextFields];
}
diff --git a/SmartDeviceLink/SDLDisplayMode.h b/SmartDeviceLink/SDLDisplayMode.h
new file mode 100644
index 000000000..e570243f5
--- /dev/null
+++ b/SmartDeviceLink/SDLDisplayMode.h
@@ -0,0 +1,26 @@
+// SDLDisplayMode.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * Identifies the various display types used by SDL.
+ *
+ * @since SDL 1.0
+ */
+typedef SDLEnum SDLDisplayMode SDL_SWIFT_ENUM;
+
+/**
+ * @abstract Display Mode : DAY
+ */
+extern SDLDisplayMode const SDLDisplayModeDay;
+
+/**
+ * @abstract Display Mode : NIGHT.
+ */
+extern SDLDisplayMode const SDLDisplayModeNight;
+
+/**
+ * @abstract Display Mode : AUTO.
+ */
+extern SDLDisplayMode const SDLDisplayModeAuto;
diff --git a/SmartDeviceLink/SDLDisplayMode.m b/SmartDeviceLink/SDLDisplayMode.m
new file mode 100644
index 000000000..fc5a5bb26
--- /dev/null
+++ b/SmartDeviceLink/SDLDisplayMode.m
@@ -0,0 +1,8 @@
+// SDLDisplayMode.m
+//
+
+#import "SDLDisplayMode.h"
+
+SDLDisplayMode const SDLDisplayModeDay = @"DAY";
+SDLDisplayMode const SDLDisplayModeNight = @"NIGHT";
+SDLDisplayMode const SDLDisplayModeAuto = @"AUTO";
diff --git a/SmartDeviceLink/SDLDistanceUnit.h b/SmartDeviceLink/SDLDistanceUnit.h
new file mode 100644
index 000000000..12092b92e
--- /dev/null
+++ b/SmartDeviceLink/SDLDistanceUnit.h
@@ -0,0 +1,19 @@
+// SDLDistanceUnit.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * Wiper Status
+ */
+typedef SDLEnum SDLDistanceUnit SDL_SWIFT_ENUM;
+
+/**
+ * @abstract SDLDistanceUnit: *MILES*
+ */
+extern SDLDistanceUnit const SDLDistanceUnitMiles;
+
+/**
+ * @abstract SDLDistanceUnit: *KILOMETERS*
+ */
+extern SDLDistanceUnit const SDLDistanceUnitKilometers;
diff --git a/SmartDeviceLink/SDLDistanceUnit.m b/SmartDeviceLink/SDLDistanceUnit.m
new file mode 100644
index 000000000..9b5881026
--- /dev/null
+++ b/SmartDeviceLink/SDLDistanceUnit.m
@@ -0,0 +1,7 @@
+// SDLDistanceUnit.m
+//
+
+#import "SDLDistanceUnit.h"
+
+SDLDistanceUnit const SDLDistanceUnitMiles = @"MILES";
+SDLDistanceUnit const SDLDistanceUnitKilometers = @"KILOMETERS";
diff --git a/SmartDeviceLink/SDLElectronicParkBrakeStatus.h b/SmartDeviceLink/SDLElectronicParkBrakeStatus.h
new file mode 100644
index 000000000..c0faaad55
--- /dev/null
+++ b/SmartDeviceLink/SDLElectronicParkBrakeStatus.h
@@ -0,0 +1,35 @@
+// SDLElectronicParkBrakeStatus.h
+//
+
+
+#import "SDLEnum.h"
+
+/**
+ Reflects the status of the Electronic Parking Brake. A Vehicle Data Type.
+ */
+typedef SDLEnum SDLElectronicParkBrakeStatus SDL_SWIFT_ENUM;
+
+/**
+ Parking brake actuators have been fully applied.
+ */
+extern SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusClosed;
+
+/**
+ Parking brake actuators are transitioning to either Apply/Closed or Release/Open state.
+ */
+extern SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusTransition;
+
+/**
+ Parking brake actuators are released.
+ */
+extern SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusOpen;
+
+/**
+ When driver pulls the Electronic Parking Brake switch while driving "at speed".
+ */
+extern SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusDriveActive;
+
+/**
+ When system has a fault or is under maintenance.
+ */
+extern SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusFault;
diff --git a/SmartDeviceLink/SDLElectronicParkBrakeStatus.m b/SmartDeviceLink/SDLElectronicParkBrakeStatus.m
new file mode 100644
index 000000000..23b55caa3
--- /dev/null
+++ b/SmartDeviceLink/SDLElectronicParkBrakeStatus.m
@@ -0,0 +1,18 @@
+//
+// SDLElectronicParkBrakeStatus.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 7/16/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLElectronicParkBrakeStatus.h"
+
+typedef SDLEnum SDLElectronicParkBrakeStatus SDL_SWIFT_ENUM;
+
+
+SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusClosed = @"CLOSED";
+SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusTransition = @"TRANSITION";
+SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusOpen = @"OPEN";
+SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusDriveActive = @"DRIVE_ACTIVE";
+SDLElectronicParkBrakeStatus const SDLElectronicParkBrakeStatusFault = @"FAULT";
diff --git a/SmartDeviceLink/SDLEqualizerSettings.h b/SmartDeviceLink/SDLEqualizerSettings.h
new file mode 100644
index 000000000..64da62126
--- /dev/null
+++ b/SmartDeviceLink/SDLEqualizerSettings.h
@@ -0,0 +1,41 @@
+// SDLEqualizerSettings.h
+//
+
+#import "SDLRPCMessage.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Defines the each Equalizer channel settings.
+ */
+
+@interface SDLEqualizerSettings : SDLRPCStruct
+
+- (instancetype)initWithChannelId:(UInt8)channelId channelSetting:(UInt8)channelSetting;
+
+/**
+ * @abstract Read-only channel / frequency name
+ * (e.i. "Treble, Midrange, Bass" or "125 Hz")
+ *
+ * Optional, Max String length 50 chars
+ */
+@property (nullable, strong, nonatomic) NSString *channelName;
+
+
+/**
+ * @abstract Reflects the setting, from 0%-100%.
+ *
+ * Required, Integer 1 - 100
+ */
+@property (strong, nonatomic) NSNumber<SDLInt> *channelSetting;
+
+/**
+ * @abstract id of the channel.
+ *
+ * Required, Integer 1 - 100
+ */
+@property (strong, nonatomic) NSNumber<SDLInt> *channelId;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLEqualizerSettings.m b/SmartDeviceLink/SDLEqualizerSettings.m
new file mode 100644
index 000000000..1106d454e
--- /dev/null
+++ b/SmartDeviceLink/SDLEqualizerSettings.m
@@ -0,0 +1,50 @@
+// SDLEqualizerSettings.m
+//
+
+#import "SDLEqualizerSettings.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLEqualizerSettings
+
+- (instancetype)initWithChannelId:(UInt8)channelId channelSetting:(UInt8)channelSetting {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+
+ self.channelId = @(channelId);
+ self.channelSetting = @(channelSetting);
+
+ return self;
+}
+
+- (void)setChannelId:(NSNumber<SDLInt> *)channelId {
+ [store sdl_setObject:channelId forName:SDLNameChannelId];
+}
+
+- (NSNumber<SDLInt> *)channelId {
+ return [store sdl_objectForName:SDLNameChannelId];
+}
+
+- (void)setChannelName:(nullable NSString *)channelName {
+ [store sdl_setObject:channelName forName:SDLNameChannelName];
+}
+
+- (nullable NSString *)channelName {
+ return [store sdl_objectForName:SDLNameChannelName];
+}
+
+- (void)setChannelSetting:(NSNumber<SDLInt> *)channelSetting {
+ [store sdl_setObject:channelSetting forName:SDLNameChannelSetting];
+}
+
+- (NSNumber<SDLInt> *)channelSetting {
+ return [store sdl_objectForName:SDLNameChannelSetting];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLError.h b/SmartDeviceLink/SDLError.h
index 4a6ccf21b..4a0cbd7ca 100644
--- a/SmartDeviceLink/SDLError.h
+++ b/SmartDeviceLink/SDLError.h
@@ -22,6 +22,8 @@ extern SDLErrorDomain *const SDLErrorDomainFileManager;
extern SDLErrorDomain *const SDLErrorDomainTextAndGraphicManager;
extern SDLErrorDomain *const SDLErrorDomainSoftButtonManager;
extern SDLErrorDomain *const SDLErrorDomainMenuManager;
+extern SDLErrorDomain *const SDLErrorDomainChoiceSetManager;
+extern SDLErrorDomain *const SDLErrorDomainTransport;
@interface NSError (SDLErrors)
@@ -58,6 +60,19 @@ extern SDLErrorDomain *const SDLErrorDomainMenuManager;
+ (NSError *)sdl_menuManager_failedToUpdateWithDictionary:(NSDictionary *)userInfo;
+#pragma mark Choice Set Manager
+
++ (NSError *)sdl_choiceSetManager_choicesDeletedBeforePresentation:(NSDictionary *)userInfo;
++ (NSError *)sdl_choiceSetManager_choiceDeletionFailed:(NSDictionary *)userInfo;
++ (NSError *)sdl_choiceSetManager_choiceUploadFailed:(NSDictionary *)userInfo;
+
+#pragma mark Transport
+
++ (NSError *)sdl_transport_unknownError;
++ (NSError *)sdl_transport_connectionRefusedError;
++ (NSError *)sdl_transport_connectionTimedOutError;
++ (NSError *)sdl_transport_networkDownError;
+
@end
@interface NSException (SDLExceptions)
diff --git a/SmartDeviceLink/SDLError.m b/SmartDeviceLink/SDLError.m
index 722eb3534..2597a563d 100644
--- a/SmartDeviceLink/SDLError.m
+++ b/SmartDeviceLink/SDLError.m
@@ -17,6 +17,8 @@ SDLErrorDomain *const SDLErrorDomainFileManager = @"com.sdl.filemanager.error";
SDLErrorDomain *const SDLErrorDomainTextAndGraphicManager = @"com.sdl.textandgraphicmanager.error";
SDLErrorDomain *const SDLErrorDomainSoftButtonManager = @"com.sdl.softbuttonmanager.error";
SDLErrorDomain *const SDLErrorDomainMenuManager = @"com.sdl.menumanager.error";
+SDLErrorDomain *const SDLErrorDomainChoiceSetManager = @"com.sdl.choicesetmanager.error";
+SDLErrorDomain *const SDLErrorDomainTransport = @"com.sdl.transport.error";
@implementation NSError (SDLErrors)
@@ -202,6 +204,58 @@ SDLErrorDomain *const SDLErrorDomainMenuManager = @"com.sdl.menumanager.error";
return [NSError errorWithDomain:SDLErrorDomainMenuManager code:SDLMenuManagerErrorRPCsFailed userInfo:userInfo];
}
+#pragma mark Choice Set Manager
+
++ (NSError *)sdl_choiceSetManager_choicesDeletedBeforePresentation:(NSDictionary *)userInfo {
+ return [NSError errorWithDomain:SDLErrorDomainChoiceSetManager code:SDLChoiceSetManagerErrorPendingPresentationDeleted userInfo:userInfo];
+}
+
++ (NSError *)sdl_choiceSetManager_choiceDeletionFailed:(NSDictionary *)userInfo {
+ return [NSError errorWithDomain:SDLErrorDomainChoiceSetManager code:SDLChoiceSetManagerErrorDeletionFailed userInfo:userInfo];
+}
+
++ (NSError *)sdl_choiceSetManager_choiceUploadFailed:(NSDictionary *)userInfo {
+ return [NSError errorWithDomain:SDLErrorDomainChoiceSetManager code:SDLChoiceSetManagerErrorUploadFailed userInfo:userInfo];
+}
+
+#pragma mark Transport
+
++ (NSError *)sdl_transport_unknownError {
+ NSDictionary<NSString *, NSString *> *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"TCP connection error", nil),
+ NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"TCP connection cannot be established due to unknown error.", nil),
+ NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that correct IP address and TCP port number are specified, and the phone is connected to the correct Wi-Fi network.", nil)
+ };
+ return [NSError errorWithDomain:SDLErrorDomainTransport code:SDLTransportErrorUnknown userInfo:userInfo];
+}
+
++ (NSError *)sdl_transport_connectionRefusedError {
+ NSDictionary<NSString *, NSString *> *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"TCP connection cannot be established", nil),
+ NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The TCP connection is refused by head unit. Possible causes are that the specified TCP port number is not correct, or SDL Core is not running properly on the head unit.", nil),
+ NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that correct IP address and TCP port number are specified. Also, make sure that SDL Core on the head unit enables TCP transport.", nil)
+ };
+ return [NSError errorWithDomain:SDLErrorDomainTransport code:SDLTransportErrorConnectionRefused userInfo:userInfo];
+}
+
++ (NSError *)sdl_transport_connectionTimedOutError {
+ NSDictionary<NSString *, NSString *> *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"TCP connection timed out", nil),
+ NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The TCP connection cannot be established within a given time. Possible causes are that the specified IP address is not correct, or the connection is blocked by a firewall.", nil),
+ NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that correct IP address and TCP port number are specified. Also, make sure that the head unit's system configuration accepts TCP connections.", nil)
+ };
+ return [NSError errorWithDomain:SDLErrorDomainTransport code:SDLTransportErrorConnectionTimedOut userInfo:userInfo];
+}
+
++ (NSError *)sdl_transport_networkDownError {
+ NSDictionary<NSString *, NSString *> *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Network is not available", nil),
+ NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"TCP connection cannot be established because the phone is not connected to the network. Possible causes are: Wi-Fi being disabled on the phone or the phone is connected to a wrong Wi-Fi network.", nil),
+ NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that the phone is connected to the Wi-Fi network that has the head unit on it. Also, make sure that correct IP address and TCP port number are specified.", nil)
+ };
+ return [NSError errorWithDomain:SDLErrorDomainTransport code:SDLTransportErrorNetworkDown userInfo:userInfo];
+}
+
@end
diff --git a/SmartDeviceLink/SDLErrorConstants.h b/SmartDeviceLink/SDLErrorConstants.h
index c22eac4ef..8503d8be8 100644
--- a/SmartDeviceLink/SDLErrorConstants.h
+++ b/SmartDeviceLink/SDLErrorConstants.h
@@ -114,3 +114,34 @@ typedef NS_ENUM(NSInteger, SDLSoftButtonManagerError) {
typedef NS_ENUM(NSInteger, SDLMenuManagerError) {
SDLMenuManagerErrorRPCsFailed = -1
};
+
+typedef NS_ENUM(NSInteger, SDLChoiceSetManagerError) {
+ SDLChoiceSetManagerErrorPendingPresentationDeleted = -1,
+ SDLChoiceSetManagerErrorDeletionFailed = -2,
+ SDLChoiceSetManagerErrorUploadFailed = -3,
+};
+
+/**
+ * Errors associated with transport.
+ */
+typedef NS_ENUM(NSInteger, SDLTransportError) {
+ /**
+ * Connection cannot be established due to a reason not listed here.
+ */
+ SDLTransportErrorUnknown = -1,
+ /**
+ * TCP connection is refused.
+ * Probably specified port number is invalid, or SDL Core is not running on the head unit.
+ */
+ SDLTransportErrorConnectionRefused = -2,
+ /**
+ * TCP connection cannot be established within given time.
+ * Probably because of wrong IP address, or the connection may be blocked by a firewall.
+ */
+ SDLTransportErrorConnectionTimedOut = -3,
+ /**
+ * TCP connection cannot be established since network is down.
+ * Probably the phone is not connected to the correct network.
+ */
+ SDLTransportErrorNetworkDown = -4,
+};
diff --git a/SmartDeviceLink/SDLFile.m b/SmartDeviceLink/SDLFile.m
index 522171f24..5e925711e 100644
--- a/SmartDeviceLink/SDLFile.m
+++ b/SmartDeviceLink/SDLFile.m
@@ -100,17 +100,17 @@ NS_ASSUME_NONNULL_BEGIN
/**
Initalizes a socket from which to read data.
+ @discussion A new `NSInputStream` is created when requested instead of returning the already open `NSInputStream`. This is done because once a opened, a stream *cannot* be closed and reopened. If the same file is accessed multiple times (i.e. a non-persistant file is uploaded before and after a disconnect from Core during the same session) the file cannot be accessed after the first access because the stream is closed once the upload is completed. Apple `NSInputStream` doc: https://developer.apple.com/documentation/foundation/nsstream/1411963-open
+
@return A socket
*/
- (NSInputStream *)inputStream {
- if (!_inputStream) {
- if (_fileURL) {
- // Data in file
- _inputStream = [[NSInputStream alloc] initWithURL:_fileURL];
- } else if (_data.length != 0) {
- // Data in memory
- _inputStream = [[NSInputStream alloc] initWithData:_data];
- }
+ if (_fileURL) {
+ // Data in file
+ _inputStream = [[NSInputStream alloc] initWithURL:_fileURL];
+ } else if (_data.length != 0) {
+ // Data in memory
+ _inputStream = [[NSInputStream alloc] initWithData:_data];
}
return _inputStream;
}
diff --git a/SmartDeviceLink/SDLFileManager.h b/SmartDeviceLink/SDLFileManager.h
index 49755aec6..5eae0ff4b 100644
--- a/SmartDeviceLink/SDLFileManager.h
+++ b/SmartDeviceLink/SDLFileManager.h
@@ -12,13 +12,12 @@
#import "SDLFileManagerConstants.h"
@class SDLFile;
+@class SDLFileManagerConfiguration;
@protocol SDLConnectionManagerType;
NS_ASSUME_NONNULL_BEGIN
-typedef NSString SDLFileName;
-
typedef void (^SDLFileManagerStartupCompletionHandler)(BOOL success, NSError *__nullable error);
@@ -66,7 +65,17 @@ typedef void (^SDLFileManagerStartupCompletionHandler)(BOOL success, NSError *__
*
* @return An instance of SDLFileManager
*/
-- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager __deprecated_msg("Use initWithConnectionManager:configuration: instead");
+
+/**
+ * Creates a new file manager with a specified connection manager and configuration
+ *
+ * @param manager A connection manager to use to forward on RPCs
+ * @param configuration A configuration for this file manager session
+ *
+ * @return An instance of SDLFileManager
+ */
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager configuration:(SDLFileManagerConfiguration *)configuration NS_DESIGNATED_INITIALIZER;
/**
* The manager stars up and attempts to fetch its initial list and transfer initial files.
diff --git a/SmartDeviceLink/SDLFileManager.m b/SmartDeviceLink/SDLFileManager.m
index c6ac7fc4b..9ff7498ef 100644
--- a/SmartDeviceLink/SDLFileManager.m
+++ b/SmartDeviceLink/SDLFileManager.m
@@ -13,13 +13,13 @@
#import "SDLDeleteFileOperation.h"
#import "SDLError.h"
#import "SDLFile.h"
+#import "SDLFileManagerConfiguration.h"
#import "SDLFileWrapper.h"
#import "SDLGlobals.h"
#import "SDLListFilesOperation.h"
#import "SDLManager.h"
#import "SDLNotificationConstants.h"
#import "SDLPutFile.h"
-#import "SDLPutFileResponse.h"
#import "SDLStateMachine.h"
#import "SDLUploadFileOperation.h"
@@ -50,6 +50,10 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
@property (strong, nonatomic) SDLStateMachine *stateMachine;
@property (copy, nonatomic, nullable) SDLFileManagerStartupCompletionHandler startupCompletionHandler;
+@property (strong, nonatomic) NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *failedFileUploadsCount;
+@property (assign, nonatomic) UInt8 maxFileUploadAttempts;
+@property (assign, nonatomic) UInt8 maxArtworkUploadAttempts;
+
@end
#pragma mark Constants
@@ -59,6 +63,10 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
#pragma mark - Lifecycle
- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager {
+ return [self initWithConnectionManager:manager configuration:[SDLFileManagerConfiguration defaultConfiguration]];
+}
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager configuration:(SDLFileManagerConfiguration *)configuration {
self = [super init];
if (!self) {
return nil;
@@ -76,10 +84,13 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
_stateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLFileManagerStateShutdown states:[self.class sdl_stateTransitionDictionary]];
+ _failedFileUploadsCount = [NSMutableDictionary dictionary];
+ _maxFileUploadAttempts = configuration.fileRetryCount + 1;
+ _maxArtworkUploadAttempts = configuration.artworkRetryCount + 1;
+
return self;
}
-
#pragma mark - Setup / Shutdown
- (void)startWithCompletionHandler:(nullable SDLFileManagerStartupCompletionHandler)handler {
@@ -94,6 +105,9 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
- (void)stop {
[self.stateMachine transitionToState:SDLFileManagerStateShutdown];
+
+ // Clear the failed uploads tracking so failed files can be uploaded again when a new connection has been established with Core
+ _failedFileUploadsCount = [NSMutableDictionary dictionary];
}
@@ -214,13 +228,13 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
__strong typeof(weakSelf) strongSelf = weakSelf;
// Mutate self based on the changes
- strongSelf.bytesAvailable = bytesAvailable;
if (success) {
+ strongSelf.bytesAvailable = bytesAvailable;
[strongSelf.mutableRemoteFileNames removeObject:name];
}
if (handler != nil) {
- handler(success, self.bytesAvailable, error);
+ handler(success, bytesAvailable, error);
}
}];
@@ -329,35 +343,6 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
});
}
-/**
- * Computes the total amount of bytes to be uploaded to the remote. This total is computed by summing up the file size of all files to be uploaded to the remote
- *
- * @param files All the files being uploaded to the remote
- * @return The total byte count
- */
-- (float)sdl_totalBytesToUpload:(NSArray<SDLFile *> *)files {
- float totalBytes = 0.0;
- for(SDLFile *file in files) {
- totalBytes += file.fileSize;
- }
-
- return totalBytes;
-}
-
-/**
- * Computes the percentage of files uploaded to the remote. This percentage is a decimal number between 0.0 - 1.0. It is calculated by dividing the total number of bytes in files successfully or unsuccessfully uploaded by the total number of bytes in all files to be uploaded.
- *
- * @param totalBytes The total number of bytes in all files to be uploaded
- * @param uploadedBytes The total number of bytes in files successfully or unsuccessfully uploaded
- * @return The upload percentage
- */
-- (float)sdl_uploadPercentage:(float)totalBytes uploadedBytes:(float)uploadedBytes {
- if (totalBytes == 0 || uploadedBytes == 0) {
- return 0.0;
- }
- return uploadedBytes / totalBytes;
-}
-
- (void)uploadFile:(SDLFile *)file completionHandler:(nullable SDLFileManagerUploadCompletionHandler)handler {
if (file == nil || file.data.length == 0) {
if (handler != nil) {
@@ -400,14 +385,23 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
if (self.uploadsInProgress[file.name]) {
[self.uploadsInProgress removeObjectForKey:file.name];
}
-
- if (bytesAvailable != 0) {
- weakSelf.bytesAvailable = bytesAvailable;
- }
+
if (success) {
+ weakSelf.bytesAvailable = bytesAvailable;
[weakSelf.mutableRemoteFileNames addObject:fileName];
[weakSelf.uploadedEphemeralFileNames addObject:fileName];
+ } else {
+ self.failedFileUploadsCount = [self.class sdl_incrementFailedUploadCountForFileName:file.name failedFileUploadsCount:self.failedFileUploadsCount];
+
+ UInt8 maxUploadCount = [file isKindOfClass:[SDLArtwork class]] ? self.maxArtworkUploadAttempts : self.maxFileUploadAttempts;
+ if ([self sdl_canFileBeUploadedAgain:file maxUploadCount:maxUploadCount failedFileUploadsCount:self.failedFileUploadsCount]) {
+ SDLLogD(@"Attempting to resend file with name %@ after a failed upload attempt", file.name);
+ return [self sdl_uploadFile:file completionHandler:handler];
+ } else {
+ SDLLogE(@"File named %@ failed to upload. Max number of upload attempts reached", file.name);
+ }
}
+
if (uploadCompletion != nil) {
uploadCompletion(success, bytesAvailable, error);
}
@@ -424,7 +418,7 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
- (void)uploadArtwork:(SDLArtwork *)artwork completionHandler:(nullable SDLFileManagerUploadArtworkCompletionHandler)completion {
[self uploadFile:artwork completionHandler:^(BOOL success, NSUInteger bytesAvailable, NSError * _Nullable error) {
if (completion == nil) { return; }
- if ([self isErrorACannotOverwriteError:error]) {
+ if ([self sdl_isErrorCannotOverwriteError:error]) {
// Artwork with same name already uploaded to remote
return completion(true, artwork.name, bytesAvailable, nil);
}
@@ -443,7 +437,7 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
[self uploadFiles:artworks progressHandler:^BOOL(SDLFileName * _Nonnull fileName, float uploadPercentage, NSError * _Nullable error) {
if (progressHandler == nil) { return YES; }
- if ([self isErrorACannotOverwriteError:error]) {
+ if ([self sdl_isErrorCannotOverwriteError:error]) {
return progressHandler(fileName, uploadPercentage, nil);
}
return progressHandler(fileName, uploadPercentage, error);
@@ -458,7 +452,7 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
if (error != nil) {
for (NSString *erroredArtworkName in error.userInfo) {
- if (![self isErrorACannotOverwriteError:[error.userInfo objectForKey:erroredArtworkName]]) {
+ if (![self sdl_isErrorCannotOverwriteError:[error.userInfo objectForKey:erroredArtworkName]]) {
[successfulArtworkUploadNames removeObject:erroredArtworkName];
} else {
// An overwrite error means that an artwork with the same name is already uploaded to the remote
@@ -471,13 +465,80 @@ SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
}];
}
-- (BOOL)isErrorACannotOverwriteError:(NSError * _Nullable)error {
- if (error != nil && error.code == SDLFileManagerErrorCannotOverwrite) {
+#pragma mark Helpers
+
+/**
+ * Checks an error returned by Core to see if it is a "can not overwrite" error.
+ *
+ * @param error The error returned by SDL Core
+ * @return True if the error is an overwrite error; false if not
+ */
+- (BOOL)sdl_isErrorCannotOverwriteError:(NSError * _Nullable)error {
+ if (error != nil && error.domain == SDLErrorDomainFileManager && error.code == SDLFileManagerErrorCannotOverwrite) {
return YES;
}
return NO;
}
+/**
+ * Computes the total amount of bytes to be uploaded to the remote. This total is computed by summing up the file size of all files to be uploaded to the remote
+ *
+ * @param files All the files being uploaded to the remote
+ * @return The total byte count
+ */
+- (float)sdl_totalBytesToUpload:(NSArray<SDLFile *> *)files {
+ float totalBytes = 0.0;
+ for(SDLFile *file in files) {
+ totalBytes += file.fileSize;
+ }
+
+ return totalBytes;
+}
+
+/**
+ * Computes the percentage of files uploaded to the remote. This percentage is a decimal number between 0.0 - 1.0. It is calculated by dividing the total number of bytes in files successfully or unsuccessfully uploaded by the total number of bytes in all files to be uploaded.
+ *
+ * @param totalBytes The total number of bytes in all files to be uploaded
+ * @param uploadedBytes The total number of bytes in files successfully or unsuccessfully uploaded
+ * @return The upload percentage
+ */
+- (float)sdl_uploadPercentage:(float)totalBytes uploadedBytes:(float)uploadedBytes {
+ if (totalBytes == 0 || uploadedBytes == 0) {
+ return 0.0;
+ }
+ return uploadedBytes / totalBytes;
+}
+
+#pragma mark Reuploads
+
+/**
+ * Checks if an artwork needs to be uploaded to Core. The arwork should not be sent to Core if the artwork is already on Core or if the artwork is not on Core after the maximum number of repeated upload attempts has been reached.
+ *
+ * @param file The file to be uploaded to Core
+ * @param maxUploadCount The max number of times the file is allowed to be uploaded to Core
+ * @return True if the file still needs to be (re)sent to Core; false if not.
+ */
+- (BOOL)sdl_canFileBeUploadedAgain:(nullable SDLFile *)file maxUploadCount:(UInt8)maxUploadCount failedFileUploadsCount:(NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *)failedFileUploadsCount {
+ if (!file || [self hasUploadedFile:file]) {
+ return NO;
+ }
+ NSNumber *failedUploadCount = failedFileUploadsCount[file.name];
+ return (failedUploadCount == nil) ? YES : (failedUploadCount.integerValue < maxUploadCount);
+}
+
+/**
+ * Increments the number of upload attempts for a file name by 1.
+ *
+ * @param fileName The name used to upload the file to Core
+ */
++ (NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *)sdl_incrementFailedUploadCountForFileName:(SDLFileName *)fileName failedFileUploadsCount:(NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *)failedFileUploadsCount {
+ NSNumber *currentFailedUploadCount = failedFileUploadsCount[fileName];
+ NSNumber *newFailedUploadCount = (currentFailedUploadCount != nil) ? @(currentFailedUploadCount.integerValue + 1) : @1;
+ failedFileUploadsCount[fileName] = newFailedUploadCount;
+ SDLLogW(@"File with name %@ failed to upload %@ times", fileName, newFailedUploadCount);
+ return failedFileUploadsCount;
+}
+
#pragma mark - Temporary Files
+ (NSURL *)temporaryFileDirectory {
diff --git a/SmartDeviceLink/SDLFileManagerConfiguration.h b/SmartDeviceLink/SDLFileManagerConfiguration.h
new file mode 100644
index 000000000..693a4111f
--- /dev/null
+++ b/SmartDeviceLink/SDLFileManagerConfiguration.h
@@ -0,0 +1,52 @@
+//
+// SDLFileManagerConfiguration.h
+// SmartDeviceLink
+//
+// Created by Nicole on 7/12/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "NSNumber+NumberType.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLFileManagerConfiguration : NSObject <NSCopying>
+
+/**
+ * Defines the number of times the file manager will attempt to reupload `SDLArtwork` files in the event of a failed upload to Core.
+ *
+ * Defaults to 1. To disable reuploads, set to 0.
+ */
+@property (assign, nonatomic) UInt8 artworkRetryCount;
+
+/**
+ * Defines the number of times the file manager will attempt to reupload general `SDLFile`s in the event of a failed upload to Core.
+ *
+ * Defaults to 1. To disable reuploads, set to 0.
+ */
+@property (assign, nonatomic) UInt8 fileRetryCount;
+
+/**
+ * Creates a default file manager configuration.
+ *
+ * @return A default configuration that may be customized.
+ */
++ (instancetype)defaultConfiguration;
+
+/**
+ Use `defaultConfiguration` instead
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ * Creates a file manager configuration with customized upload retry counts.
+ *
+ * @return The configuration
+ */
+- (instancetype)initWithArtworkRetryCount:(UInt8)artworkRetryCount fileRetryCount:(UInt8)fileRetryCount;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLFileManagerConfiguration.m b/SmartDeviceLink/SDLFileManagerConfiguration.m
new file mode 100644
index 000000000..781fdac1b
--- /dev/null
+++ b/SmartDeviceLink/SDLFileManagerConfiguration.m
@@ -0,0 +1,43 @@
+//
+// SDLFileManagerConfiguration.m
+// SmartDeviceLink
+//
+// Created by Nicole on 7/12/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLFileManagerConfiguration.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+static NSUInteger const DefaultRetryCount = 1;
+
+@implementation SDLFileManagerConfiguration
+
++ (instancetype)defaultConfiguration {
+ return [[self.class alloc] initWithArtworkRetryCount:DefaultRetryCount fileRetryCount:DefaultRetryCount];
+}
+
+- (instancetype)initWithArtworkRetryCount:(UInt8)artworkRetryCount fileRetryCount:(UInt8)fileRetryCount {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ _artworkRetryCount = artworkRetryCount;
+ _fileRetryCount = fileRetryCount;
+
+ return self;
+}
+
+
+#pragma mark - NSCopying
+
+- (id)copyWithZone:(nullable NSZone *)zone {
+ SDLFileManagerConfiguration *new = [[SDLFileManagerConfiguration allocWithZone:zone] initWithArtworkRetryCount:_artworkRetryCount fileRetryCount:_fileRetryCount];
+ return new;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLFuelRange.h b/SmartDeviceLink/SDLFuelRange.h
new file mode 100644
index 000000000..3220256cb
--- /dev/null
+++ b/SmartDeviceLink/SDLFuelRange.h
@@ -0,0 +1,35 @@
+//
+// SDLFuelRange.h
+// SmartDeviceLink
+//
+// Created by Nicole on 6/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLRPCMessage.h"
+#import "SDLFuelType.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Describes the distance a vehicle can travel with the current level of fuel.
+ */
+@interface SDLFuelRange : SDLRPCStruct
+
+/**
+ * The vehicle's fuel type
+ *
+ * Optional
+ */
+@property (nullable, strong, nonatomic) SDLFuelType type;
+
+/**
+ * The estimate range in KM the vehicle can travel based on fuel level and consumption.
+ *
+ * Optional, Float, 0 - 10,000
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *range;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLFuelRange.m b/SmartDeviceLink/SDLFuelRange.m
new file mode 100644
index 000000000..19ebeba4b
--- /dev/null
+++ b/SmartDeviceLink/SDLFuelRange.m
@@ -0,0 +1,37 @@
+//
+// SDLFuelRange.m
+// SmartDeviceLink
+//
+// Created by Nicole on 6/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLFuelRange.h"
+
+#import "NSMutableDictionary+Store.h"
+#import "SDLNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLFuelRange
+
+- (void)setType:(nullable SDLFuelType)type {
+ [store sdl_setObject:type forName:SDLNameType];
+}
+
+- (nullable SDLFuelType)type {
+ return [store sdl_objectForName:SDLNameType];
+}
+
+- (void)setRange:(nullable NSNumber<SDLFloat> *)range {
+ [store sdl_setObject:range forName:SDLNameRange];
+}
+
+- (nullable NSNumber<SDLFloat> *)range {
+ return [store sdl_objectForName:SDLNameRange];
+}
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLFuelType.h b/SmartDeviceLink/SDLFuelType.h
new file mode 100644
index 000000000..a87c1f332
--- /dev/null
+++ b/SmartDeviceLink/SDLFuelType.h
@@ -0,0 +1,52 @@
+//
+// SDLFuelType.h
+// SmartDeviceLink
+//
+// Created by Nicole on 6/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLEnum.h"
+
+/**
+ * Enumeration listing possible fuel types.
+ */
+typedef SDLEnum SDLFuelType SDL_SWIFT_ENUM;
+
+/**
+ * Fuel type: Gasoline
+ */
+extern SDLFuelType const SDLFuelTypeGasoline;
+
+/**
+ * Fuel type: Diesel
+ */
+extern SDLFuelType const SDLFuelTypeDiesel;
+
+/**
+ * Fuel type: CNG
+ *
+ * @discussion For vehicles using compressed natural gas
+ */
+extern SDLFuelType const SDLFuelTypeCNG;
+
+/**
+ * Fuel type: LPG
+ *
+ * @discussion For vehicles using liquefied petroleum gas
+ */
+extern SDLFuelType const SDLFuelTypeLPG;
+
+/**
+ * Fuel type: Hydrogen
+ *
+ * @discussion For FCEV (fuel cell electric vehicle)
+ */
+extern SDLFuelType const SDLFuelTypeHydrogen;
+
+/**
+ * Fuel type: Battery
+ *
+ * @discussion For BEV (Battery Electric Vehicle), PHEV (Plug-in Hybrid Electric Vehicle), solar vehicles and other vehicles which run on a battery.
+ */
+extern SDLFuelType const SDLFuelTypeBattery;
diff --git a/SmartDeviceLink/SDLFuelType.m b/SmartDeviceLink/SDLFuelType.m
new file mode 100644
index 000000000..32e2b9679
--- /dev/null
+++ b/SmartDeviceLink/SDLFuelType.m
@@ -0,0 +1,16 @@
+//
+// SDLFuelType.m
+// SmartDeviceLink
+//
+// Created by Nicole on 6/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLFuelType.h"
+
+SDLFuelType const SDLFuelTypeGasoline = @"GASOLINE";
+SDLFuelType const SDLFuelTypeDiesel = @"DIESEL";
+SDLFuelType const SDLFuelTypeCNG = @"CNG";
+SDLFuelType const SDLFuelTypeLPG = @"LPG";
+SDLFuelType const SDLFuelTypeHydrogen = @"HYDROGEN";
+SDLFuelType const SDLFuelTypeBattery = @"BATTERY";
diff --git a/SmartDeviceLink/SDLFunctionID.m b/SmartDeviceLink/SDLFunctionID.m
index 7d50014e5..f96bc83c6 100644
--- a/SmartDeviceLink/SDLFunctionID.m
+++ b/SmartDeviceLink/SDLFunctionID.m
@@ -96,6 +96,7 @@ NS_ASSUME_NONNULL_BEGIN
@32782: SDLNameOnHashChange,
@32783: SDLNameOnInteriorVehicleData,
@32784: SDLNameOnWayPointChange,
+ @32785: SDLNameOnRCStatus,
@65536: SDLNameEncodedSyncPData,
@65537: SDLNameSyncPData,
@98304: SDLNameOnEncodedSyncPData,
diff --git a/SmartDeviceLink/SDLGPSData.h b/SmartDeviceLink/SDLGPSData.h
index 12ddd90b5..f0bead9f7 100644
--- a/SmartDeviceLink/SDLGPSData.h
+++ b/SmartDeviceLink/SDLGPSData.h
@@ -34,122 +34,122 @@ NS_ASSUME_NONNULL_BEGIN
/**
* utc year
*
- * Required, Integer, 2010 - 2100
+ * Optional, Integer, 2010 - 2100
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *utcYear;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *utcYear;
/**
* utc month
*
- * Required, Integer, 1 - 12
+ * Optional, Integer, 1 - 12
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *utcMonth;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *utcMonth;
/**
* utc day
*
- * Required, Integer, 1 - 31
+ * Optional, Integer, 1 - 31
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *utcDay;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *utcDay;
/**
* utc hours
*
- * Required, Integer, 0 - 23
+ * Optional, Integer, 0 - 23
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *utcHours;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *utcHours;
/**
* utc minutes
*
- * Required, Integer, 0 - 59
+ * Optional, Integer, 0 - 59
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *utcMinutes;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *utcMinutes;
/**
* utc seconds
*
- * Required, Integer, 0 - 59
+ * Optional, Integer, 0 - 59
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *utcSeconds;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *utcSeconds;
/**
- * Potential Compass Directions
+ * Optional, Potential Compass Directions
*/
-@property (strong, nonatomic) SDLCompassDirection compassDirection;
+@property (nullable, strong, nonatomic) SDLCompassDirection compassDirection;
/**
* The 3D positional dilution of precision.
*
* @discussion If undefined or unavailable, then value shall be set to 0
*
- * Required, Float, 0.0 - 10.0
+ * Required, Float, 0.0 - 1000.0
*/
-@property (strong, nonatomic) NSNumber<SDLFloat> *pdop;
+@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *pdop;
/**
* The horizontal dilution of precision
*
* @discussion If undefined or unavailable, then value shall be set to 0
*
- * Required, Float, 0.0 - 10.0
+ * Required, Float, 0.0 - 1000.0
*/
-@property (strong, nonatomic) NSNumber<SDLFloat> *hdop;
+@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *hdop;
/**
* the vertical dilution of precision
*
* @discussion If undefined or unavailable, then value shall be set to 0
*
- * Required, Float, 0.0 - 10.0
+ * Required, Float, 0.0 - 1000.0
*/
-@property (strong, nonatomic) NSNumber<SDLFloat> *vdop;
+@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *vdop;
/**
* What the coordinates are based on
*
* @discussion YES, if coordinates are based on satellites. NO, if based on dead reckoning.
*
- * Required, Boolean
+ * Optional, Boolean
*/
-@property (strong, nonatomic) NSNumber<SDLBool> *actual;
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *actual;
/**
* The number of satellites in view
*
- * Required, Integer, 0 - 31
+ * Optional, Integer, 0 - 31
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *satellites;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *satellites;
/**
* The supported dimensions of the GPS
*
- * Required
+ * Optional
*/
-@property (strong, nonatomic) SDLDimension dimension;
+@property (nullable, strong, nonatomic) SDLDimension dimension;
/**
* Altitude in meters
*
- * Required, Float, -10000.0 - 10000.0
+ * Optional, Float, -10000.0 - 10000.0
*/
-@property (strong, nonatomic) NSNumber<SDLFloat> *altitude;
+@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *altitude;
/**
* Heading based on the GPS data.
*
* @discussion North is 0, East is 90, etc. Resolution is 0.01
*
- * Required, Float, 0.0 - 359.99
+ * Optional, Float, 0.0 - 359.99
*/
-@property (strong, nonatomic) NSNumber<SDLFloat> *heading;
+@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *heading;
/**
* Speed in KPH
*
- * Required, Float, 0.0 - 500.0
+ * Optional, Float, 0.0 - 500.0
*/
-@property (strong, nonatomic) NSNumber<SDLFloat> *speed;
+@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *speed;
@end
diff --git a/SmartDeviceLink/SDLGPSData.m b/SmartDeviceLink/SDLGPSData.m
index 8bd17706f..eda7edb31 100644
--- a/SmartDeviceLink/SDLGPSData.m
+++ b/SmartDeviceLink/SDLGPSData.m
@@ -26,131 +26,131 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameLatitudeDegrees];
}
-- (void)setUtcYear:(NSNumber<SDLInt> *)utcYear {
+- (void)setUtcYear:(nullable NSNumber<SDLInt> *)utcYear {
[store sdl_setObject:utcYear forName:SDLNameUTCYear];
}
-- (NSNumber<SDLInt> *)utcYear {
+- (nullable NSNumber<SDLInt> *)utcYear {
return [store sdl_objectForName:SDLNameUTCYear];
}
-- (void)setUtcMonth:(NSNumber<SDLInt> *)utcMonth {
+- (void)setUtcMonth:(nullable NSNumber<SDLInt> *)utcMonth {
[store sdl_setObject:utcMonth forName:SDLNameUTCMonth];
}
-- (NSNumber<SDLInt> *)utcMonth {
+- (nullable NSNumber<SDLInt> *)utcMonth {
return [store sdl_objectForName:SDLNameUTCMonth];
}
-- (void)setUtcDay:(NSNumber<SDLInt> *)utcDay {
+- (void)setUtcDay:(nullable NSNumber<SDLInt> *)utcDay {
[store sdl_setObject:utcDay forName:SDLNameUTCDay];
}
-- (NSNumber<SDLInt> *)utcDay {
+- (nullable NSNumber<SDLInt> *)utcDay {
return [store sdl_objectForName:SDLNameUTCDay];
}
-- (void)setUtcHours:(NSNumber<SDLInt> *)utcHours {
+- (void)setUtcHours:(nullable NSNumber<SDLInt> *)utcHours {
[store sdl_setObject:utcHours forName:SDLNameUTCHours];
}
-- (NSNumber<SDLInt> *)utcHours {
+- (nullable NSNumber<SDLInt> *)utcHours {
return [store sdl_objectForName:SDLNameUTCHours];
}
-- (void)setUtcMinutes:(NSNumber<SDLInt> *)utcMinutes {
+- (void)setUtcMinutes:(nullable NSNumber<SDLInt> *)utcMinutes {
[store sdl_setObject:utcMinutes forName:SDLNameUTCMinutes];
}
-- (NSNumber<SDLInt> *)utcMinutes {
+- (nullable NSNumber<SDLInt> *)utcMinutes {
return [store sdl_objectForName:SDLNameUTCMinutes];
}
-- (void)setUtcSeconds:(NSNumber<SDLInt> *)utcSeconds {
+- (void)setUtcSeconds:(nullable NSNumber<SDLInt> *)utcSeconds {
[store sdl_setObject:utcSeconds forName:SDLNameUTCSeconds];
}
-- (NSNumber<SDLInt> *)utcSeconds {
+- (nullable NSNumber<SDLInt> *)utcSeconds {
return [store sdl_objectForName:SDLNameUTCSeconds];
}
-- (void)setCompassDirection:(SDLCompassDirection)compassDirection {
+- (void)setCompassDirection:(nullable SDLCompassDirection)compassDirection {
[store sdl_setObject:compassDirection forName:SDLNameCompassDirection];
}
-- (SDLCompassDirection)compassDirection {
+- (nullable SDLCompassDirection)compassDirection {
return [store sdl_objectForName:SDLNameCompassDirection];
}
-- (void)setPdop:(NSNumber<SDLFloat> *)pdop {
+- (void)setPdop:(nullable NSNumber<SDLFloat> *)pdop {
[store sdl_setObject:pdop forName:SDLNamePDOP];
}
-- (NSNumber<SDLFloat> *)pdop {
+- (nullable NSNumber<SDLFloat> *)pdop {
return [store sdl_objectForName:SDLNamePDOP];
}
-- (void)setHdop:(NSNumber<SDLFloat> *)hdop {
+- (void)setHdop:(nullable NSNumber<SDLFloat> *)hdop {
[store sdl_setObject:hdop forName:SDLNameHDOP];
}
-- (NSNumber<SDLFloat> *)hdop {
+- (nullable NSNumber<SDLFloat> *)hdop {
return [store sdl_objectForName:SDLNameHDOP];
}
-- (void)setVdop:(NSNumber<SDLFloat> *)vdop {
+- (void)setVdop:(nullable NSNumber<SDLFloat> *)vdop {
[store sdl_setObject:vdop forName:SDLNameVDOP];
}
-- (NSNumber<SDLFloat> *)vdop {
+- (nullable NSNumber<SDLFloat> *)vdop {
return [store sdl_objectForName:SDLNameVDOP];
}
-- (void)setActual:(NSNumber<SDLBool> *)actual {
+- (void)setActual:(nullable NSNumber<SDLBool> *)actual {
[store sdl_setObject:actual forName:SDLNameActual];
}
-- (NSNumber<SDLBool> *)actual {
+- (nullable NSNumber<SDLBool> *)actual {
return [store sdl_objectForName:SDLNameActual];
}
-- (void)setSatellites:(NSNumber<SDLInt> *)satellites {
+- (void)setSatellites:(nullable NSNumber<SDLInt> *)satellites {
[store sdl_setObject:satellites forName:SDLNameSatellites];
}
-- (NSNumber<SDLInt> *)satellites {
+- (nullable NSNumber<SDLInt> *)satellites {
return [store sdl_objectForName:SDLNameSatellites];
}
-- (void)setDimension:(SDLDimension)dimension {
+- (void)setDimension:(nullable SDLDimension)dimension {
[store sdl_setObject:dimension forName:SDLNameDimension];
}
-- (SDLDimension)dimension {
+- (nullable SDLDimension)dimension {
return [store sdl_objectForName:SDLNameDimension];
}
-- (void)setAltitude:(NSNumber<SDLFloat> *)altitude {
+- (void)setAltitude:(nullable NSNumber<SDLFloat> *)altitude {
[store sdl_setObject:altitude forName:SDLNameAltitude];
}
-- (NSNumber<SDLFloat> *)altitude {
+- (nullable NSNumber<SDLFloat> *)altitude {
return [store sdl_objectForName:SDLNameAltitude];
}
-- (void)setHeading:(NSNumber<SDLFloat> *)heading {
+- (void)setHeading:(nullable NSNumber<SDLFloat> *)heading {
[store sdl_setObject:heading forName:SDLNameHeading];
}
-- (NSNumber<SDLFloat> *)heading {
+- (nullable NSNumber<SDLFloat> *)heading {
return [store sdl_objectForName:SDLNameHeading];
}
-- (void)setSpeed:(NSNumber<SDLFloat> *)speed {
+- (void)setSpeed:(nullable NSNumber<SDLFloat> *)speed {
[store sdl_setObject:speed forName:SDLNameSpeed];
}
-- (NSNumber<SDLFloat> *)speed {
+- (nullable NSNumber<SDLFloat> *)speed {
return [store sdl_objectForName:SDLNameSpeed];
}
diff --git a/SmartDeviceLink/SDLGetVehicleData.h b/SmartDeviceLink/SDLGetVehicleData.h
index 45c5dc9cc..82b3f7ce4 100644
--- a/SmartDeviceLink/SDLGetVehicleData.h
+++ b/SmartDeviceLink/SDLGetVehicleData.h
@@ -5,149 +5,231 @@
#import "SDLRPCRequest.h"
/**
- * Requests surrent values of specific published vehicle data items.
- * <p>
- * Function Group: Location, VehicleInfo and DrivingChara
- * <p>
- * <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b>
- * </p>
+ * Requests current values of specific published vehicle data items.
*
- * Since SmartDeviceLink 2.0<br/>
- * See SDLSubscribeVehicleData SDLUnsubscribeVehicleData
+ * Function Group: Location, VehicleInfo and DrivingChara
+ * HMILevel needs to be FULL, LIMITED or BACKGROUND
+ * Since SmartDeviceLink 2.0
+ * See SDLSubscribeVehicleData, SDLUnsubscribeVehicleData
*/
NS_ASSUME_NONNULL_BEGIN
@interface SDLGetVehicleData : SDLRPCRequest
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus;
/**
- * A boolean value. If true, requests Gps data
+ * Convenience init for getting data for all possible vehicle data items.
+ *
+ * @param accelerationPedalPosition Get accelerationPedalPosition data
+ * @param airbagStatus Get airbagStatus data
+ * @param beltStatus Get beltStatus data
+ * @param bodyInformation Get bodyInformation data
+ * @param clusterModeStatus Get clusterModeStatus data
+ * @param deviceStatus Get deviceStatus data
+ * @param driverBraking Get driverBraking data
+ * @param eCallInfo Get eCallInfo data
+ * @param emergencyEvent Get emergencyEvent data
+ * @param engineTorque Get engineTorque data
+ * @param externalTemperature Get externalTemperature data
+ * @param fuelLevel Get fuelLevel data
+ * @param fuelLevelState Get fuelLevelState data
+ * @param gps Get gps data
+ * @param headLampStatus Get headLampStatus data
+ * @param instantFuelConsumption Get instantFuelConsumption data
+ * @param myKey Get myKey data
+ * @param odometer Get odometer data
+ * @param prndl Get prndl data
+ * @param rpm Get rpm data
+ * @param speed Get speed data
+ * @param steeringWheelAngle Get steeringWheelAngle data
+ * @param tirePressure Get tirePressure data
+ * @param vin Get vin data
+ * @param wiperStatus Get wiperStatus data
+ * @return A SDLGetVehicleData object
+ */
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use 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: instead");
+
+/**
+ * Convenience init for getting data for all possible vehicle data items.
+ *
+ * @param accelerationPedalPosition Get accelerationPedalPosition data
+ * @param airbagStatus Get airbagStatus data
+ * @param beltStatus Get beltStatus data
+ * @param bodyInformation Get bodyInformation data
+ * @param clusterModeStatus Get clusterModeStatus data
+ * @param deviceStatus Get deviceStatus data
+ * @param driverBraking Get driverBraking data
+ * @param eCallInfo Get eCallInfo data
+ * @param electronicParkBrakeStatus Get electronicParkBrakeStatus data
+ * @param emergencyEvent Get emergencyEvent data
+ * @param engineOilLife Get engineOilLife data
+ * @param engineTorque Get engineTorque data
+ * @param externalTemperature Get externalTemperature data
+ * @param fuelLevel Get fuelLevel data
+ * @param fuelLevelState Get fuelLevelState data
+ * @param fuelRange Get fuelRange data
+ * @param gps Get gps data
+ * @param headLampStatus Get headLampStatus data
+ * @param instantFuelConsumption Get instantFuelConsumption data
+ * @param myKey Get myKey data
+ * @param odometer Get odometer data
+ * @param prndl Get prndl data
+ * @param rpm Get rpm data
+ * @param speed Get speed data
+ * @param steeringWheelAngle Get steeringWheelAngle data
+ * @param tirePressure Get tirePressure data
+ * @param turnSignal Get turnSignal data
+ * @param vin Get vin data
+ * @param wiperStatus Get wiperStatus data
+ * @return A SDLGetVehicleData object
+ */
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus;
+
+/**
+ * A boolean value. If true, requests GPS data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *gps;
/**
- * A boolean value. If true, requests speed data
+ * A boolean value. If true, requests Speed data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *speed;
/**
- * A boolean value. If true, requests rpm data
+ * A boolean value. If true, requests RPM data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *rpm;
/**
- * A boolean value. If true, requests FuelLevel data
+ * A boolean value. If true, requests Fuel Level data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *fuelLevel;
/**
- * A boolean value. If true, requests fuelLevel_State data
+ * A boolean value. If true, requests Fuel Level State data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *fuelLevel_State;
/**
- * A boolean value. If true, requests instantFuelConsumption data
+ * A boolean value. If true, requests Fuel Range data.
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *fuelRange;
+
+/**
+ * A boolean value. If true, requests Instant Fuel Consumption data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *instantFuelConsumption;
/**
- * A boolean value. If true, requests externalTemperature data
+ * A boolean value. If true, requests External Temperature data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *externalTemperature;
/**
- * A boolean value. If true, requests Vehicle Identification Number
+ * A boolean value. If true, requests the Vehicle Identification Number.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *vin;
/**
- * A boolean value. If true, requests Currently selected gear data
+ * A boolean value. If true, requests PRNDL data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *prndl;
/**
- * A boolean value. If true, requests tire pressure status data
+ * A boolean value. If true, requests Tire Pressure data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *tirePressure;
/**
- * A boolean value. If true, requests odometer data
+ * A boolean value. If true, requests Odometer data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *odometer;
/**
- * A boolean value. If true, requests belt Status data
+ * A boolean value. If true, requests Belt Status data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *beltStatus;
/**
- * A boolean value. If true, requests body Information data
+ * A boolean value. If true, requests Body Information data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *bodyInformation;
/**
- * A boolean value. If true, requests device Status data
+ * A boolean value. If true, requests Device Status data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *deviceStatus;
/**
- * A boolean value. If true, requests driver Braking data
+ * A boolean value. If true, requests Driver Braking data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *driverBraking;
/**
- * A boolean value. If true, requests wiper Status data
+ * A boolean value. If true, requests Wiper Status data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *wiperStatus;
/**
- * A boolean value. If true, requests Head Lamp Status data
+ * A boolean value. If true, requests Head Lamp Status data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *headLampStatus;
/**
- * A boolean value. If true, requests Engine Torque data
+ * A boolean value. If true, requests Engine Oil Life data.
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *engineOilLife;
+
+/**
+ * A boolean value. If true, requests Engine Torque data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *engineTorque;
/**
- * A boolean value. If true, means the accPedalPosition data has been
- * subscribed.
+ * A boolean value. If true, requests Acc Pedal Position data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *accPedalPosition;
/**
- * A boolean value. If true, means the steeringWheelAngle data has been
- * subscribed.
+ * A boolean value. If true, requests Steering Wheel Angle data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *steeringWheelAngle;
/**
- If true, the Emergency Call notification and confirmation data has been subscribed
+ * A boolean value. If true, requests Emergency Call Info data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *eCallInfo;
/**
- If true, the status of the air bags has been subscribed
+ * A boolean value. If true, requests Air Bag Status data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *airbagStatus;
/**
- If true, information related to an emergency event (and if it occurred) has been subscribed
+ * A boolean value. If true, requests Emergency Event (if it occurred) data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *emergencyEvent;
/**
- If true, the status modes of the cluster have been subscribed
+ * A boolean value. If true, requests Cluster Mode Status data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *clusterModeStatus;
/**
- If true, information related to the MyKey feature has been subscribed
+ * A boolean value. If true, requests MyKey data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *myKey;
+/**
+ A boolean value. If true, requests Electronic Parking Brake status data.
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *electronicParkBrakeStatus;
+
+/**
+ A boolean value. If true, requests Turn Signal data.
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *turnSignal;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLGetVehicleData.m b/SmartDeviceLink/SDLGetVehicleData.m
index 53a897b7d..6b795b057 100644
--- a/SmartDeviceLink/SDLGetVehicleData.m
+++ b/SmartDeviceLink/SDLGetVehicleData.m
@@ -18,6 +18,10 @@ NS_ASSUME_NONNULL_BEGIN
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus {
+ return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:NO emergencyEvent:emergencyEvent engineOilLife:NO engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:NO gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:NO vin:vin wiperStatus:wiperStatus];
+}
+
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus {
self = [self init];
if (!self) {
return nil;
@@ -31,11 +35,14 @@ NS_ASSUME_NONNULL_BEGIN
self.deviceStatus = @(deviceStatus);
self.driverBraking = @(driverBraking);
self.eCallInfo = @(eCallInfo);
+ self.electronicParkBrakeStatus = @(electronicParkBrakeStatus);
self.emergencyEvent = @(emergencyEvent);
+ self.engineOilLife = @(engineOilLife);
self.engineTorque = @(engineTorque);
self.externalTemperature = @(externalTemperature);
self.fuelLevel = @(fuelLevel);
self.fuelLevel_State = @(fuelLevelState);
+ self.fuelRange = @(fuelRange);
self.myKey = @(myKey);
self.odometer = @(odometer);
self.gps = @(gps);
@@ -46,6 +53,7 @@ NS_ASSUME_NONNULL_BEGIN
self.speed = @(speed);
self.steeringWheelAngle = @(steeringWheelAngle);
self.tirePressure = @(tirePressure);
+ self.turnSignal = @(turnSignal);
self.vin = @(vin);
self.wiperStatus = @(wiperStatus);
@@ -92,6 +100,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameFuelLevelState];
}
+- (void)setFuelRange:(nullable NSNumber<SDLBool> *)fuelRange {
+ [parameters sdl_setObject:fuelRange forName:SDLNameFuelRange];
+}
+
+- (nullable NSNumber<SDLBool> *)fuelRange {
+ return [parameters sdl_objectForName:SDLNameFuelRange];
+}
+
- (void)setInstantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption {
[parameters sdl_setObject:instantFuelConsumption forName:SDLNameInstantFuelConsumption];
}
@@ -188,6 +204,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameHeadLampStatus];
}
+- (void)setEngineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife {
+ [parameters sdl_setObject:engineOilLife forName:SDLNameEngineOilLife];
+}
+
+- (nullable NSNumber<SDLBool> *)engineOilLife {
+ return [parameters sdl_objectForName:SDLNameEngineOilLife];
+}
+
- (void)setEngineTorque:(nullable NSNumber<SDLBool> *)engineTorque {
[parameters sdl_setObject:engineTorque forName:SDLNameEngineTorque];
}
@@ -252,6 +276,22 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameMyKey];
}
+- (void)setElectronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus {
+ [parameters sdl_setObject:electronicParkBrakeStatus forName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (nullable NSNumber<SDLBool> *)electronicParkBrakeStatus {
+ return [parameters sdl_objectForName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (void)setTurnSignal:(nullable NSNumber<SDLBool> *)turnSignal {
+ [parameters sdl_setObject:turnSignal forName:SDLNameTurnSignal];
+}
+
+- (nullable NSNumber<SDLBool> *)turnSignal {
+ return [parameters sdl_objectForName:SDLNameTurnSignal];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLGetVehicleDataResponse.h b/SmartDeviceLink/SDLGetVehicleDataResponse.h
index 7fe9b8e74..689a750f2 100644
--- a/SmartDeviceLink/SDLGetVehicleDataResponse.h
+++ b/SmartDeviceLink/SDLGetVehicleDataResponse.h
@@ -4,7 +4,9 @@
#import "SDLRPCResponse.h"
#import "SDLComponentVolumeStatus.h"
+#import "SDLElectronicParkBrakeStatus.h"
#import "SDLPRNDL.h"
+#import "SDLTurnSignal.h"
#import "SDLVehicleDataEventStatus.h"
#import "SDLWiperStatus.h"
@@ -15,13 +17,13 @@
@class SDLDeviceStatus;
@class SDLECallInfo;
@class SDLEmergencyEvent;
+@class SDLFuelRange;
@class SDLGPSData;
@class SDLHeadLampStatus;
@class SDLMyKey;
@class SDLTireStatus;
-
/**
* Response to SDLGetVehicleData
*
@@ -58,6 +60,13 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) SDLComponentVolumeStatus fuelLevel_State;
/**
+ The estimate range in KM the vehicle can travel based on fuel level and consumption
+
+ Optional, Array of length 0 - 100, of SDLFuelRange
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLFuelRange *> *fuelRange;
+
+/**
The instantaneous fuel consumption in microlitres
*/
@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *instantFuelConsumption;
@@ -118,6 +127,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) SDLHeadLampStatus *headLampStatus;
/**
+ The estimated percentage (0% - 100%) of remaining oil life of the engine
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLFloat> *engineOilLife;
+
+/**
Torque value for engine (in Nm) on non-diesel variants
*/
@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *engineTorque;
@@ -157,6 +171,17 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) SDLMyKey *myKey;
+/**
+ The status of the electronic parking brake
+ */
+@property (nullable, strong, nonatomic) SDLElectronicParkBrakeStatus electronicParkBrakeStatus;
+
+/**
+ The status of the turn signal
+ */
+@property (nullable, strong, nonatomic) SDLTurnSignal turnSignal;
+
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLGetVehicleDataResponse.m b/SmartDeviceLink/SDLGetVehicleDataResponse.m
index 81b379b49..9e8aeff6c 100644
--- a/SmartDeviceLink/SDLGetVehicleDataResponse.m
+++ b/SmartDeviceLink/SDLGetVehicleDataResponse.m
@@ -12,6 +12,7 @@
#import "SDLDeviceStatus.h"
#import "SDLECallInfo.h"
#import "SDLEmergencyEvent.h"
+#import "SDLFuelRange.h"
#import "SDLGPSData.h"
#import "SDLHeadLampStatus.h"
#import "SDLMyKey.h"
@@ -72,6 +73,14 @@ NS_ASSUME_NONNULL_BEGIN
[parameters sdl_setObject:instantFuelConsumption forName:SDLNameInstantFuelConsumption];
}
+- (void)setFuelRange:(nullable NSArray<SDLFuelRange *> *)fuelRange {
+ [parameters sdl_setObject:fuelRange forName:SDLNameFuelRange];
+}
+
+- (nullable NSArray<SDLFuelRange *> *)fuelRange {
+ return [parameters sdl_objectsForName:SDLNameFuelRange ofClass:SDLFuelRange.class];
+}
+
- (nullable NSNumber<SDLFloat> *)instantFuelConsumption {
return [parameters sdl_objectForName:SDLNameInstantFuelConsumption];
}
@@ -164,6 +173,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameHeadLampStatus ofClass:SDLHeadLampStatus.class];
}
+- (void)setEngineOilLife:(nullable NSNumber<SDLFloat> *)engineOilLife {
+ [parameters sdl_setObject:engineOilLife forName:SDLNameEngineOilLife];
+}
+
+- (nullable NSNumber<SDLFloat> *)engineOilLife {
+ return [parameters sdl_objectForName:SDLNameEngineOilLife];
+}
+
- (void)setEngineTorque:(nullable NSNumber<SDLFloat> *)engineTorque {
[parameters sdl_setObject:engineTorque forName:SDLNameEngineTorque];
}
@@ -228,6 +245,22 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameMyKey ofClass:SDLMyKey.class];
}
+- (void)setElectronicParkBrakeStatus:(nullable SDLElectronicParkBrakeStatus)electronicParkBrakeStatus {
+ [parameters sdl_setObject:electronicParkBrakeStatus forName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (nullable SDLElectronicParkBrakeStatus)electronicParkBrakeStatus {
+ return [parameters sdl_objectForName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (void)setTurnSignal:(nullable SDLTurnSignal)turnSignal {
+ [parameters sdl_setObject:turnSignal forName:SDLNameTurnSignal];
+}
+
+- (nullable SDLTurnSignal)turnSignal {
+ return [parameters sdl_objectForName:SDLNameTurnSignal];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLGlobals.h b/SmartDeviceLink/SDLGlobals.h
index 5b9220398..84407f11d 100644
--- a/SmartDeviceLink/SDLGlobals.h
+++ b/SmartDeviceLink/SDLGlobals.h
@@ -9,6 +9,7 @@
#import <Foundation/Foundation.h>
#import "SDLProtocolHeader.h"
+#import "SDLSyncMsgVersion.h"
NS_ASSUME_NONNULL_BEGIN
@@ -17,6 +18,7 @@ NS_ASSUME_NONNULL_BEGIN
#define BLOCK_RETURN return
extern NSString *const SDLMaxProxyProtocolVersion;
+extern NSString *const SDLMaxProxyRPCVersion;
extern NSUInteger const SDLDefaultMTUSize;
extern NSUInteger const SDLV1MTUSize;
@@ -24,9 +26,10 @@ extern NSUInteger const SDLV3MTUSize;
@interface SDLGlobals : NSObject
-@property (strong, nonatomic, readonly) NSString *protocolVersion;
+@property (copy, nonatomic, readonly) NSString *protocolVersion;
@property (assign, nonatomic, readonly) NSInteger majorProtocolVersion;
-@property (strong, nonatomic) NSString *maxHeadUnitVersion;
+@property (strong, nonatomic) SDLSyncMsgVersion *rpcVersion;
+@property (copy, nonatomic) NSString *maxHeadUnitVersion;
+ (instancetype)sharedGlobals;
diff --git a/SmartDeviceLink/SDLGlobals.m b/SmartDeviceLink/SDLGlobals.m
index 7d63d606c..d5364a119 100644
--- a/SmartDeviceLink/SDLGlobals.m
+++ b/SmartDeviceLink/SDLGlobals.m
@@ -13,21 +13,22 @@
NS_ASSUME_NONNULL_BEGIN
// VERSION DEPENDENT CODE
-NSString *const SDLMaxProxyProtocolVersion = @"5.0.0";
+NSString *const SDLMaxProxyProtocolVersion = @"5.1.0";
+NSString *const SDLMaxProxyRPCVersion = @"5.0.0";
NSUInteger const SDLDefaultMTUSize = UINT32_MAX;
NSUInteger const SDLV1MTUSize = 1024;
NSUInteger const SDLV3MTUSize = 131024;
-typedef NSNumber* ServiceTypeBox;
-typedef NSNumber* MTUBox;
+typedef NSNumber *ServiceTypeBox;
+typedef NSNumber *MTUBox;
@interface SDLGlobals ()
@property (strong, nonatomic) NSMutableDictionary<ServiceTypeBox, MTUBox> *dynamicMTUDict;
-@property (strong, nonatomic, readwrite) NSString *protocolVersion;
+@property (copy, nonatomic, readwrite) NSString *protocolVersion;
@end
@@ -52,6 +53,7 @@ typedef NSNumber* MTUBox;
_protocolVersion = @"1.0.0";
_maxHeadUnitVersion = @"0.0.0";
+ _rpcVersion = [[SDLSyncMsgVersion alloc] initWithMajorVersion:1 minorVersion:0 patchVersion:0];
_dynamicMTUDict = [NSMutableDictionary dictionary];
return self;
diff --git a/SmartDeviceLink/SDLHMISettingsControlCapabilities.h b/SmartDeviceLink/SDLHMISettingsControlCapabilities.h
new file mode 100644
index 000000000..da7d04310
--- /dev/null
+++ b/SmartDeviceLink/SDLHMISettingsControlCapabilities.h
@@ -0,0 +1,62 @@
+// SDLHMISettingsControlCapabilities.h
+//
+
+#import "SDLRPCMessage.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLHMISettingsControlCapabilities : SDLRPCStruct
+
+/**
+ Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName
+
+ @param moduleName The short friendly name of the hmi setting module
+
+ @return An instance of the SDLHMISettingsControlCapabilities class
+ */
+- (instancetype)initWithModuleName:(NSString *)moduleName;
+
+/**
+ Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters
+
+ @param moduleName The short friendly name of the hmi setting module
+ @param distanceUnitAvailable Availability of the control of distance unit.
+ @param temperatureUnitAvailable Availability of the control of temperature unit.
+ @param displayModeUnitAvailable Availability of the control of displayMode unit.
+
+ @return An instance of the SDLHMISettingsControlCapabilities class
+ */
+- (instancetype)initWithModuleName:(NSString *)moduleName distanceUnitAvailable:(BOOL)distanceUnitAvailable temperatureUnitAvailable:(BOOL)temperatureUnitAvailable displayModeUnitAvailable:(BOOL)displayModeUnitAvailable;
+
+/**
+ * @abstract The short friendly name of the hmi setting module.
+ * It should not be used to identify a module by mobile application.
+ *
+ * Required, Max String length 100 chars
+ */
+@property (strong, nonatomic) NSString *moduleName;
+
+/**
+ * @abstract Availability of the control of distance unit.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *distanceUnitAvailable;
+
+/**
+ * @abstract Availability of the control of temperature unit.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *temperatureUnitAvailable;
+
+/**
+ * @abstract Availability of the control of HMI display mode.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *displayModeUnitAvailable;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLHMISettingsControlCapabilities.m b/SmartDeviceLink/SDLHMISettingsControlCapabilities.m
new file mode 100644
index 000000000..505936732
--- /dev/null
+++ b/SmartDeviceLink/SDLHMISettingsControlCapabilities.m
@@ -0,0 +1,70 @@
+// SDLHMISettingsControlCapabilities.m
+//
+
+#import "SDLHMISettingsControlCapabilities.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLHMISettingsControlCapabilities
+
+- (instancetype)initWithModuleName:(NSString *)moduleName {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.moduleName = moduleName;
+
+ return self;
+}
+
+- (instancetype)initWithModuleName:(NSString *)moduleName distanceUnitAvailable:(BOOL)distanceUnitAvailable temperatureUnitAvailable:(BOOL)temperatureUnitAvailable displayModeUnitAvailable:(BOOL)displayModeUnitAvailable {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.moduleName = moduleName;
+ self.distanceUnitAvailable = @(distanceUnitAvailable);
+ self.temperatureUnitAvailable = @(temperatureUnitAvailable);
+ self.displayModeUnitAvailable = @(displayModeUnitAvailable);
+
+ return self;
+}
+
+- (void)setModuleName:(NSString *)moduleName {
+ [store sdl_setObject:moduleName forName:SDLNameModuleName];
+}
+
+- (NSString *)moduleName {
+ return [store sdl_objectForName:SDLNameModuleName];
+}
+
+
+- (void)setDistanceUnitAvailable:(nullable NSNumber<SDLBool> *)distanceUnitAvailable {
+ [store sdl_setObject:distanceUnitAvailable forName:SDLNameDistanceUnitAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)distanceUnitAvailable {
+ return [store sdl_objectForName:SDLNameDistanceUnitAvailable];
+}
+
+- (void)setTemperatureUnitAvailable:(nullable NSNumber<SDLBool> *)temperatureUnitAvailable {
+ [store sdl_setObject:temperatureUnitAvailable forName:SDLNameTemperatureUnitAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)temperatureUnitAvailable {
+ return [store sdl_objectForName:SDLNameTemperatureUnitAvailable];
+}
+
+- (void)setDisplayModeUnitAvailable:(nullable NSNumber<SDLBool> *)displayModeUnitAvailable {
+ [store sdl_setObject:displayModeUnitAvailable forName:SDLNameDisplayModeUnitAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)displayModeUnitAvailable {
+ return [store sdl_objectForName:SDLNameDisplayModeUnitAvailable];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLHMISettingsControlData.h b/SmartDeviceLink/SDLHMISettingsControlData.h
new file mode 100644
index 000000000..c16afb7d7
--- /dev/null
+++ b/SmartDeviceLink/SDLHMISettingsControlData.h
@@ -0,0 +1,50 @@
+// SDLHMISettingsControlData.h
+//
+
+#import "SDLRPCMessage.h"
+#import "SDLDisplayMode.h"
+#import "SDLTemperatureUnit.h"
+#import "SDLDistanceUnit.h"
+
+/**
+ * Corresponds to "HMI_SETTINGS" ModuleType
+ */
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLHMISettingsControlData : SDLRPCStruct
+
+/**
+ Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters
+
+ @param displayMode Display Mode used in HMI setting
+ @param temperatureUnit temperature unit used in HMI setting
+ @param distanceUnit distance unit used in HMI setting
+ @return An instance of the SDLHMISettingsControlCapabilities class
+ */
+- (instancetype)initWithDisplaymode:(SDLDisplayMode)displayMode temperatureUnit:(SDLTemperatureUnit)temperatureUnit distanceUnit:(SDLDistanceUnit)distanceUnit;
+
+/**
+ * @abstract Display the Display Mode used HMI setting
+ *
+ * Optional, SDLDisplayMode
+ */
+@property (nullable, strong, nonatomic) SDLDisplayMode displayMode;
+
+/**
+ * @abstract Display the temperature unit used HMI setting
+ *
+ * Optional, SDLTemperatureUnit
+ */
+@property (nullable, strong, nonatomic) SDLTemperatureUnit temperatureUnit;
+
+/**
+ * @abstract Display the distance unit used HMI setting
+ *
+ * Optional, SDLDistanceUnit
+ */
+@property (nullable, strong, nonatomic) SDLDistanceUnit distanceUnit;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLHMISettingsControlData.m b/SmartDeviceLink/SDLHMISettingsControlData.m
new file mode 100644
index 000000000..4a17a9220
--- /dev/null
+++ b/SmartDeviceLink/SDLHMISettingsControlData.m
@@ -0,0 +1,50 @@
+// SDLHMISettingsControlData.m
+//
+
+#import "SDLHMISettingsControlData.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLHMISettingsControlData
+
+- (instancetype)initWithDisplaymode:(SDLDisplayMode)displayMode temperatureUnit:(SDLTemperatureUnit)temperatureUnit distanceUnit:(SDLDistanceUnit)distanceUnit {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.displayMode = displayMode;
+ self.distanceUnit = distanceUnit;
+ self.temperatureUnit = temperatureUnit;
+
+ return self;
+}
+
+- (void)setDisplayMode:(nullable SDLDisplayMode)displayMode {
+ [store sdl_setObject:displayMode forName:SDLNameDisplayMode];
+}
+
+- (nullable SDLDisplayMode)displayMode {
+ return [store sdl_objectForName:SDLNameDisplayMode];
+}
+
+- (void)setDistanceUnit:(nullable SDLDistanceUnit)distanceUnit {
+ [store sdl_setObject:distanceUnit forName:SDLNameDistanceUnit];
+}
+
+- (nullable SDLDistanceUnit)distanceUnit {
+ return [store sdl_objectForName:SDLNameDistanceUnit];
+}
+
+- (void)setTemperatureUnit:(nullable SDLTemperatureUnit)temperatureUnit {
+ [store sdl_setObject:temperatureUnit forName:SDLNameTemperatureUnit];
+}
+
+- (nullable SDLTemperatureUnit)temperatureUnit {
+ return [store sdl_objectForName:SDLNameTemperatureUnit];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLIAPSession.m b/SmartDeviceLink/SDLIAPSession.m
index 47047ece9..98cc35813 100644
--- a/SmartDeviceLink/SDLIAPSession.m
+++ b/SmartDeviceLink/SDLIAPSession.m
@@ -11,7 +11,7 @@
NS_ASSUME_NONNULL_BEGIN
NSString *const IOStreamThreadName = @"com.smartdevicelink.iostream";
-NSTimeInterval const StreamThreadWaitSecs = 1.0;
+NSTimeInterval const StreamThreadWaitSecs = 10.0;
@interface SDLIAPSession ()
@@ -80,7 +80,6 @@ NSTimeInterval const StreamThreadWaitSecs = 1.0;
}
- (void)stop {
- // This method must be called on the main thread
if ([NSThread isMainThread]) {
[self sdl_stop];
} else {
@@ -91,6 +90,7 @@ NSTimeInterval const StreamThreadWaitSecs = 1.0;
}
- (void)sdl_stop {
+ NSAssert(NSThread.isMainThread, @"%@ must only be called on the main thread", NSStringFromSelector(_cmd));
if (self.isDataSession) {
[self.ioStreamThread cancel];
@@ -137,6 +137,9 @@ NSTimeInterval const StreamThreadWaitSecs = 1.0;
if (bytesWritten < 0) {
if (ostream.streamError != nil) {
[self sdl_handleOutputStreamWriteError:ostream.streamError];
+ } else {
+ // The write operation failed but there is no further information about the error. This can occur when disconnecting from an external accessory.
+ SDLLogE(@"Output stream write operation failed");
}
} else if (bytesWritten == bytesRemaining) {
// Remove the data from the queue
@@ -173,13 +176,10 @@ NSTimeInterval const StreamThreadWaitSecs = 1.0;
[self startStream:self.easession.outputStream];
SDLLogD(@"Starting the accessory event loop");
- do {
- if (self.sendDataQueue.count > 0 && !self.sendDataQueue.frontDequeued) {
- [self sdl_dequeueAndWriteToOutputStream];
- }
- // The principle here is to give the event loop enough time to process stream events while also allowing it to handle new enqueued data buffers in a timely manner. We're capping the run loop CPU time at 0.25s maximum before it will return control to the rest of the loop.
+ while (!NSThread.currentThread.cancelled) {
+ // Enqueued data will be written to and read from the streams in the runloop
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.25f]];
- } while (![NSThread currentThread].cancelled);
+ }
SDLLogD(@"Closing the accessory session for id: %tu, name: %@", self.easession.accessory.connectionID, self.easession.accessory.name);
diff --git a/SmartDeviceLink/SDLIAPTransport.m b/SmartDeviceLink/SDLIAPTransport.m
index df623d980..5283ae652 100644
--- a/SmartDeviceLink/SDLIAPTransport.m
+++ b/SmartDeviceLink/SDLIAPTransport.m
@@ -549,28 +549,33 @@ int const ProtocolIndexTimeoutSeconds = 10;
- (SDLStreamEndHandler)sdl_dataStreamEndedHandler {
__weak typeof(self) weakSelf = self;
-
return ^(NSStream *stream) {
+ NSAssert(!NSThread.isMainThread, @"%@ should only be called on the IO thread", NSStringFromSelector(_cmd));
__strong typeof(weakSelf) strongSelf = weakSelf;
+
SDLLogD(@"Data stream ended");
- if (strongSelf.session != nil) {
- // The handler will be called on the IO thread, but the session stop method must be called on the main thread and we need to wait for the session to stop before nil'ing it out. To do this, we use dispatch_sync() on the main thread.
- dispatch_sync(dispatch_get_main_queue(), ^{
- [strongSelf.session stop];
- });
+ if (strongSelf.session == nil) {
+ SDLLogD(@"Data session is nil");
+ return;
+ }
+ // The handler will be called on the IO thread, but the session stop method must be called on the main thread
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [strongSelf.session stop];
strongSelf.session.streamDelegate = nil;
strongSelf.session = nil;
- }
- // We don't call sdl_retryEstablishSession here because the stream end event usually fires when the accessory is disconnected
+
+ // We don't call sdl_retryEstablishSession here because the stream end event usually fires when the accessory is disconnected
+ });
+
+ // To prevent deadlocks the handler must return to the runloop and not block the thread
};
}
- (SDLStreamHasBytesHandler)sdl_dataStreamHasBytesHandler {
__weak typeof(self) weakSelf = self;
-
return ^(NSInputStream *istream) {
+ NSAssert(!NSThread.isMainThread, @"%@ should only be called on the IO thread", NSStringFromSelector(_cmd));
__strong typeof(weakSelf) strongSelf = weakSelf;
-
uint8_t buf[[[SDLGlobals sharedGlobals] mtuSizeForServiceType:SDLServiceTypeRPC]];
while (istream.streamStatus == NSStreamStatusOpen && istream.hasBytesAvailable) {
// It is necessary to check the stream status and whether there are bytes available because the dataStreamHasBytesHandler is executed on the IO thread and the accessory disconnect notification arrives on the main thread, causing data to be passed to the delegate while the main thread is tearing down the transport.
@@ -597,18 +602,20 @@ int const ProtocolIndexTimeoutSeconds = 10;
- (SDLStreamErrorHandler)sdl_dataStreamErroredHandler {
__weak typeof(self) weakSelf = self;
-
return ^(NSStream *stream) {
+ NSAssert(!NSThread.isMainThread, @"%@ should only be called on the IO thread", NSStringFromSelector(_cmd));
__strong typeof(weakSelf) strongSelf = weakSelf;
SDLLogE(@"Data stream error");
- dispatch_sync(dispatch_get_main_queue(), ^{
+ dispatch_async(dispatch_get_main_queue(), ^{
[strongSelf.session stop];
+ strongSelf.session.streamDelegate = nil;
+ strongSelf.session = nil;
+ if (![LegacyProtocolString isEqualToString:strongSelf.session.protocol]) {
+ [strongSelf sdl_retryEstablishSession];
+ }
});
- strongSelf.session.streamDelegate = nil;
- strongSelf.session = nil;
- if (![LegacyProtocolString isEqualToString:strongSelf.session.protocol]) {
- [strongSelf sdl_retryEstablishSession];
- }
+
+ // To prevent deadlocks the handler must return to the runloop and not block the thread
};
}
diff --git a/SmartDeviceLink/SDLImage.h b/SmartDeviceLink/SDLImage.h
index 5ef4f6b69..83a05b664 100644
--- a/SmartDeviceLink/SDLImage.h
+++ b/SmartDeviceLink/SDLImage.h
@@ -4,6 +4,7 @@
#import "SDLRPCMessage.h"
#import "SDLImageType.h"
+#import "SDLStaticIconName.h"
/**
* Specifies which image shall be used e.g. in SDLAlerts or on SDLSoftbuttons provided the display supports it.
@@ -15,26 +16,77 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLImage : SDLRPCStruct
-- (instancetype)initWithName:(NSString *)name ofType:(SDLImageType)imageType;
+/**
+ * Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.
+ *
+ * @param name The unique name used to upload the image to SDL Core
+ * @param imageType Describes whether the image is static or dynamic
+ * @return A SDLImage object
+ */
+- (instancetype)initWithName:(NSString *)name ofType:(SDLImageType)imageType __deprecated_msg("Use initWithName:ofType:isTemplate: instead");
+
+/**
+ * Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.
+ *
+ * @param name The unique name used to upload the image to SDL Core
+ * @param imageType Describes whether the image is static or dynamic
+ * @param isTemplate Whether or not the image is a template that can be (re)colored by the SDL HMI. Static images are templates by default.
+ * @return A SDLImage object
+ */
+- (instancetype)initWithName:(NSString *)name ofType:(SDLImageType)imageType isTemplate:(BOOL)isTemplate;
+
+/**
+ * Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.
+ *
+ * @param name The unique name used to upload the image to SDL Core
+ * @return A SDLImage object
+ */
+- (instancetype)initWithName:(NSString *)name __deprecated_msg("Use initWithName:isTemplate: instead");
-- (instancetype)initWithName:(NSString *)name;
+/**
+ * Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.
+ *
+ * @param name The unique name used to upload the image to SDL Core
+ * @param isTemplate Whether or not the image is a template that can be (re)colored by the SDL HMI
+ * @return A SDLImage object
+ */
+- (instancetype)initWithName:(NSString *)name isTemplate:(BOOL)isTemplate;
+/**
+ * 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.
+ *
+ * @param staticImageValue The image value assigned to the static image
+ * @return A SDLImage object
+ */
- (instancetype)initWithStaticImageValue:(UInt16)staticImageValue;
/**
- * The static hex icon value or the binary image file name identifier (sent by SDLPutFile)
+ * 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.
+ *
+ * @param staticIconName A SDLStaticIconName value
+ * @return A SDLImage object
+ */
+- (instancetype)initWithStaticIconName:(SDLStaticIconName)staticIconName;
+
+/**
+ * The static hex icon value or the binary image file name identifier (sent by SDLPutFile)
*
- * Required, max length = 65535
+ * Required, max length = 65535
*/
@property (strong, nonatomic) NSString *value;
/**
- * Describes whether the image is static or dynamic
+ * Describes whether the image is static or dynamic
*
- * Required
+ * Required
*/
@property (strong, nonatomic) SDLImageType imageType;
+/**
+ * Indicates that this image can be (re)colored by the HMI to best fit the current color scheme.
+ */
+@property (assign, nonatomic) NSNumber<SDLBool> *isTemplate;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLImage.m b/SmartDeviceLink/SDLImage.m
index 0728295aa..fcf05819a 100644
--- a/SmartDeviceLink/SDLImage.m
+++ b/SmartDeviceLink/SDLImage.m
@@ -18,6 +18,20 @@ NS_ASSUME_NONNULL_BEGIN
self.value = name;
self.imageType = imageType;
+ self.isTemplate = @NO;
+
+ return self;
+}
+
+- (instancetype)initWithName:(NSString *)name ofType:(SDLImageType)imageType isTemplate:(BOOL)isTemplate {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+
+ self.value = name;
+ self.imageType = imageType;
+ self.isTemplate = @(isTemplate);
return self;
}
@@ -26,11 +40,22 @@ NS_ASSUME_NONNULL_BEGIN
return [self initWithName:name ofType:SDLImageTypeDynamic];
}
+- (instancetype)initWithName:(NSString *)name isTemplate:(BOOL)isTemplate {
+ return [self initWithName:name ofType:SDLImageTypeDynamic isTemplate:isTemplate];
+}
+
- (instancetype)initWithStaticImageValue:(UInt16)staticImageValue {
NSString *value = [NSString stringWithFormat:@"%hu", staticImageValue];
- return [self initWithName:value ofType:SDLImageTypeStatic];
+ // All static images are templated by default
+ return [self initWithName:value ofType:SDLImageTypeStatic isTemplate:YES];
+}
+
+- (instancetype)initWithStaticIconName:(SDLStaticIconName)staticIconName {
+ return [self initWithName:staticIconName ofType:SDLImageTypeStatic isTemplate:YES];
}
+#pragma mark - Getters / Setters
+
- (void)setValue:(NSString *)value {
[store sdl_setObject:value forName:SDLNameValue];
}
@@ -47,6 +72,14 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameImageType];
}
+- (void)setIsTemplate:(NSNumber<SDLBool> *)isTemplate {
+ [store sdl_setObject:isTemplate forName:SDLNameImageTemplate];
+}
+
+- (NSNumber<SDLBool> *)isTemplate {
+ return [store sdl_objectForName:SDLNameImageTemplate];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLImageFieldName.h b/SmartDeviceLink/SDLImageFieldName.h
index 8c61eccf4..34e50c3b3 100644
--- a/SmartDeviceLink/SDLImageFieldName.h
+++ b/SmartDeviceLink/SDLImageFieldName.h
@@ -41,8 +41,8 @@ extern SDLImageFieldName const SDLImageFieldNameTurnIcon;
*/
extern SDLImageFieldName const SDLImageFieldNameMenuIcon;
-/**
- The image filed for AddCommand.
+/** The image field for AddCommand.
+ *
*/
extern SDLImageFieldName const SDLImageFieldNameCommandIcon;
@@ -51,13 +51,18 @@ extern SDLImageFieldName const SDLImageFieldNameCommandIcon;
*/
extern SDLImageFieldName const SDLImageFieldNameAppIcon;
-/**
- The image filed for Show.
+/** The primary image field for Show.
+ *
*/
extern SDLImageFieldName const SDLImageFieldNameGraphic;
-/**
- The primary image field for ShowConstant TBT.
+/** The secondary image field for Show.
+ *
+ */
+extern SDLImageFieldName const SDLImageFieldNameSecondaryGraphic;
+
+/** The primary image field for ShowConstant TBT.
+ *
*/
extern SDLImageFieldName const SDLImageFieldNameShowConstantTBTIcon;
diff --git a/SmartDeviceLink/SDLImageFieldName.m b/SmartDeviceLink/SDLImageFieldName.m
index 74054d65a..63397b089 100644
--- a/SmartDeviceLink/SDLImageFieldName.m
+++ b/SmartDeviceLink/SDLImageFieldName.m
@@ -13,6 +13,7 @@ SDLImageFieldName const SDLImageFieldNameMenuIcon = @"menuIcon";
SDLImageFieldName const SDLImageFieldNameCommandIcon = @"cmdIcon";
SDLImageFieldName const SDLImageFieldNameAppIcon = @"appIcon";
SDLImageFieldName const SDLImageFieldNameGraphic = @"graphic";
+SDLImageFieldName const SDLImageFieldNameSecondaryGraphic = @"secondaryGraphic";
SDLImageFieldName const SDLImageFieldNameShowConstantTBTIcon = @"showConstantTBTIcon";
SDLImageFieldName const SDLImageFieldNameShowConstantTBTNextTurnIcon = @"showConstantTBTNextTurnIcon";
SDLImageFieldName const SDLImageFieldNameLocationImage = @"locationImage";
diff --git a/SmartDeviceLink/SDLKeyboardDelegate.h b/SmartDeviceLink/SDLKeyboardDelegate.h
new file mode 100644
index 000000000..517832748
--- /dev/null
+++ b/SmartDeviceLink/SDLKeyboardDelegate.h
@@ -0,0 +1,90 @@
+//
+// SDLKeyboardDelegate.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLKeyboardEvent.h"
+
+@class SDLKeyboardProperties;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ This handler is called when you wish to update your autocomplete text in response to the user's input
+
+ @param updatedAutocompleteText The new autocomplete text to use
+ */
+typedef void(^SDLKeyboardAutocompleteCompletionHandler)(NSString *_Nullable updatedAutocompleteText);
+
+/**
+ This handler is called when you wish to update your keyboard's limitedCharacterSet in response to the user's input
+
+ @param updatedCharacterSet The new set of characters to use
+ */
+typedef void(^SDLKeyboardCharacterSetCompletionHandler)(NSArray<NSString *> *_Nullable updatedCharacterSet);
+
+@protocol SDLKeyboardDelegate <NSObject>
+
+//
+
+/**
+ The keyboard session completed with some input.
+
+ This will be sent upon ENTRY_SUBMITTED or ENTRY_VOICE. If the event is ENTRY_VOICE, the user requested to start a voice session in order to submit input to this keyboard. This MUST be handled by you. Start an Audio Pass Thru session if supported.
+
+ @param inputText The submitted input text on the keyboard
+ @param source ENTRY_SUBMITTED if the user pressed the submit button on the keyboard, ENTRY_VOICE if the user requested that a voice session begin
+ */
+- (void)userDidSubmitInput:(NSString *)inputText withEvent:(SDLKeyboardEvent)source;
+
+/**
+ The keyboard session aborted.
+
+ This will be sent if the keyboard event ENTRY_CANCELLED or ENTRY_ABORTED is sent
+
+ @param event ENTRY_CANCELLED if the user cancelled the keyboard input, or ENTRY_ABORTED if the system aborted the input due to a higher priority event
+ */
+- (void)keyboardDidAbortWithReason:(SDLKeyboardEvent)event;
+
+@optional
+/**
+ Implement this in order to provide a custom keyboard configuration to just this keyboard. To apply default settings to all keyboards, see SDLScreenManager.keyboardConfiguration
+
+ @return The custom keyboard configuration to use.
+ */
+- (SDLKeyboardProperties *)customKeyboardConfiguration;
+
+/**
+ Implement this if you wish to update the KeyboardProperties.autoCompleteText as the user updates their input. This is called upon a KEYPRESS event.
+
+ @param currentInputText The user's full current input text
+ @param completionHandler A completion handler to update the autoCompleteText
+ */
+- (void)updateAutocompleteWithInput:(NSString *)currentInputText completionHandler:(SDLKeyboardAutocompleteCompletionHandler)completionHandler;
+
+/**
+ Implement this if you wish to update the limitedCharacterSet as the user updates their input. This is called upon a KEYPRESS event.
+
+ @param currentInputText The user's full current input text
+ @param completionHandler A completion handler to update the limitedCharacterSet
+ */
+-(void)updateCharacterSetWithInput:(NSString *)currentInputText completionHandler:(SDLKeyboardCharacterSetCompletionHandler)completionHandler;
+
+// This will be sent for any event that occurs with the event and the current input text
+
+/**
+ Implement this to be notified of all events occurring on the keyboard
+
+ @param event The event that occurred
+ @param currentInputText The user's full current input text
+ */
+- (void)keyboardDidSendEvent:(SDLKeyboardEvent)event text:(NSString *)currentInputText;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleConfiguration.h b/SmartDeviceLink/SDLLifecycleConfiguration.h
index a50e43644..a558c0dea 100644
--- a/SmartDeviceLink/SDLLifecycleConfiguration.h
+++ b/SmartDeviceLink/SDLLifecycleConfiguration.h
@@ -12,6 +12,7 @@
#import "SDLLanguage.h"
@class SDLFile;
+@class SDLTemplateColorScheme;
@class SDLTTSChunk;
@@ -28,23 +29,45 @@ NS_ASSUME_NONNULL_BEGIN
* A production configuration that runs using IAP. Additional functionality should be customized on the properties.
*
* @param appName The name of the app.
- * @param appId The appId to be used. This should be registered with the radio's manufacturer.
+ * @param appId The app id to be used. This should be registered with the head unit's manufacturer.
*
* @return The lifecycle configuration
*/
-+ (SDLLifecycleConfiguration *)defaultConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId NS_SWIFT_NAME(init(appName:appId:));
++ (SDLLifecycleConfiguration *)defaultConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId NS_SWIFT_NAME(init(appName:appId:)) __deprecated_msg("Use defaultConfigurationWithAppName:fullAppId: instead");
+
+/**
+ * A production configuration that runs using IAP. Additional functionality should be customized on the properties.
+ *
+ * @param appName The name of the app.
+ * @param fullAppId The full app id to be used. This should be registered with the head unit's manufacturer. When set, the `appId` parameter will be set automatically to the first 10 non-dash characters of the `fullAppId`.
+ *
+ * @return The lifecycle configuration
+ */
++ (SDLLifecycleConfiguration *)defaultConfigurationWithAppName:(NSString *)appName fullAppId:(NSString *)fullAppId NS_SWIFT_NAME(init(appName:fullAppId:));
/**
* A debug configuration that runs using TCP. Additional functionality should be customized on the properties.
*
* @param appName The name of the app.
- * @param appId The appId to be used. This should be registered with the radio's manufacturer.
+ * @param appId The app id to be used. This should be registered with the head unit's manufacturer.
* @param ipAddress The ip address of the server to connect to
* @param port The port of the server to connect to
*
* @return The lifecycle configuration
*/
-+ (SDLLifecycleConfiguration *)debugConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId ipAddress:(NSString *)ipAddress port:(UInt16)port NS_SWIFT_NAME(init(appName:appId:ipAddress:port:));
++ (SDLLifecycleConfiguration *)debugConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId ipAddress:(NSString *)ipAddress port:(UInt16)port NS_SWIFT_NAME(init(appName:appId:ipAddress:port:)) __deprecated_msg("Use debugConfigurationWithAppName:fullAppId:ipAddress:port: instead");
+
+/**
+ * A debug configuration that runs using TCP. Additional functionality should be customized on the properties.
+ *
+ * @param appName The name of the app.
+ * @param fullAppId The full app id to be used. This should be registered with the head unit's manufacturer. When set, the `appId` parameter will be set automatically to the first 10 non-dash characters of the `fullAppId`.
+ * @param ipAddress The ip address of the server to connect to
+ * @param port The port of the server to connect to
+ *
+ * @return The lifecycle configuration
+ */
++ (SDLLifecycleConfiguration *)debugConfigurationWithAppName:(NSString *)appName fullAppId:(NSString *)fullAppId ipAddress:(NSString *)ipAddress port:(UInt16)port NS_SWIFT_NAME(init(appName:fullAppId:ipAddress:port:));
/**
* Whether or not debug mode is enabled
@@ -67,11 +90,24 @@ NS_ASSUME_NONNULL_BEGIN
@property (copy, nonatomic) NSString *appName;
/**
- * The app id. This must be the same as the app id received from the SDL developer portal or OEM.
+ * The app id. This must be the same as the app id received from the SDL developer portal.
+ *
+ * @see `fullAppId`
+ *
+ * Required
*/
@property (copy, nonatomic, readonly) NSString *appId;
/**
+ * The full app id. This must be the same as the full app id received from the SDL developer portal.
+ *
+ * Optional
+ *
+ * @discussion The `fullAppId` is used to authenticate apps that connect with head units that implement SDL Core v.5.0 and newer. If connecting with older head units, the `fullAppId` can be truncated to create the required `appId` needed to register the app. The `appId` is the first 10 non-dash ("-") characters of the `fullAppId` (e.g. if you have a `fullAppId` of 123e4567-e89b-12d3-a456-426655440000, the `appId` will be 123e4567e8).
+ */
+@property (copy, nonatomic, nullable, readonly) NSString *fullAppId;
+
+/**
* A hash id which should be passed to the remote system in the RegisterAppInterface
*/
@property (copy, nonatomic, nullable) NSString *resumeHash;
@@ -87,7 +123,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic, null_resettable) SDLAppHMIType appType;
/**
- Additional application types beyond `appType`
+ * Additional application types beyond `appType`
*/
@property (copy, nonatomic, nullable) NSArray<SDLAppHMIType> *additionalAppTypes;
@@ -121,6 +157,16 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (copy, nonatomic, nullable) NSArray<NSString *> *voiceRecognitionCommandNames;
+/**
+ * The color scheme to use when the head unit is in a light / day situation.
+ */
+@property (copy, nonatomic, nullable) SDLTemplateColorScheme *dayColorScheme;
+
+/**
+ * The color scheme to use when the head unit is in a dark / night situation.
+ */
+@property (copy, nonatomic, nullable) SDLTemplateColorScheme *nightColorScheme;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleConfiguration.m b/SmartDeviceLink/SDLLifecycleConfiguration.m
index d14f0b01b..6c5b560c5 100644
--- a/SmartDeviceLink/SDLLifecycleConfiguration.m
+++ b/SmartDeviceLink/SDLLifecycleConfiguration.m
@@ -24,12 +24,31 @@ NS_ASSUME_NONNULL_BEGIN
@end
+static NSUInteger const AppIdCharacterCount = 10;
@implementation SDLLifecycleConfiguration
#pragma mark Lifecycle
-- (instancetype)initDefaultConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId {
++ (SDLLifecycleConfiguration *)defaultConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId {
+ return [[self alloc] initDefaultConfigurationWithAppName:appName fullAppId:nil appId:appId];
+}
+
++ (SDLLifecycleConfiguration *)defaultConfigurationWithAppName:(NSString *)appName fullAppId:(NSString *)fullAppId {
+ return [[self alloc] initDefaultConfigurationWithAppName:appName fullAppId:fullAppId appId:fullAppId];
+}
+
++ (SDLLifecycleConfiguration *)debugConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId ipAddress:(NSString *)ipAddress port:(UInt16)port {
+ return [[self alloc] initDefaultConfigurationWithAppName:appName fullAppId:nil appId:appId ipAddress:ipAddress port:port];
+}
+
++ (SDLLifecycleConfiguration *)debugConfigurationWithAppName:(NSString *)appName fullAppId:(NSString *)fullAppId ipAddress:(NSString *)ipAddress port:(UInt16)port {
+ return [[self alloc] initDefaultConfigurationWithAppName:appName fullAppId:fullAppId appId:fullAppId ipAddress:ipAddress port:port];
+}
+
+#pragma mark Initalization Helpers
+
+- (instancetype)initDefaultConfigurationWithAppName:(NSString *)appName fullAppId:(nullable NSString *)fullAppId appId:(NSString *)appId {
self = [super init];
if (!self) {
return nil;
@@ -40,8 +59,6 @@ NS_ASSUME_NONNULL_BEGIN
_tcpDebugPort = DefaultTCPIPPort;
_appName = appName;
- _appId = appId;
-
_appType = SDLAppHMITypeDefault;
_language = SDLLanguageEnUs;
_languagesSupported = @[_language];
@@ -50,15 +67,15 @@ NS_ASSUME_NONNULL_BEGIN
_ttsName = nil;
_voiceRecognitionCommandNames = nil;
+ _fullAppId = fullAppId;
+ _appId = fullAppId != nil ? [self.class sdlex_shortAppIdFromFullAppId:fullAppId] : appId;
+
return self;
}
-+ (SDLLifecycleConfiguration *)defaultConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId {
- return [[self alloc] initDefaultConfigurationWithAppName:appName appId:appId];
-}
+- (instancetype)initDefaultConfigurationWithAppName:(NSString *)appName fullAppId:(nullable NSString *)fullAppId appId:(nullable NSString *)appId ipAddress:(NSString *)ipAddress port:(UInt16)port {
+ SDLLifecycleConfiguration *config = [self initDefaultConfigurationWithAppName:appName fullAppId:fullAppId appId:appId];
-+ (SDLLifecycleConfiguration *)debugConfigurationWithAppName:(NSString *)appName appId:(NSString *)appId ipAddress:(NSString *)ipAddress port:(UInt16)port {
- SDLLifecycleConfiguration *config = [[self alloc] initDefaultConfigurationWithAppName:appName appId:appId];
config.tcpDebugMode = YES;
config.tcpDebugIPAddress = ipAddress;
config.tcpDebugPort = port;
@@ -66,7 +83,7 @@ NS_ASSUME_NONNULL_BEGIN
return config;
}
-#pragma mark Computed Properties
+#pragma mark - Computed Properties
- (BOOL)isMedia {
if ([self.appType isEqualToEnum:SDLAppHMITypeMedia] || [self.additionalAppTypes containsObject:SDLAppHMITypeMedia]) {
@@ -93,11 +110,36 @@ NS_ASSUME_NONNULL_BEGIN
_appType = appType;
}
+#pragma mark - Full App ID Helpers
+
+/**
+ * Generates the `appId` from the `fullAppId`
+ *
+ * @discussion When an app is registered with an OEM, it is assigned an `appID` and a `fullAppID`. The `fullAppID` is the full UUID appID. The `appID` is the first 10 non-dash (i.e. "-") characters of the `fullAppID`.
+ *
+ * @param fullAppId A `fullAppId`
+ * @return An `appID` made of the first 10 non-dash characters of the "fullAppID"
+ */
++ (NSString *)sdlex_shortAppIdFromFullAppId:(NSString *)fullAppId {
+ NSString *filteredString = [self sdlex_filterDashesFromText:fullAppId];
+ return [filteredString substringToIndex:MIN(AppIdCharacterCount, filteredString.length)];
+}
+
+/**
+ * Filters the dash characters from a string
+ *
+ * @param text The string
+ * @return The string with all dash characters removed
+ */
++ (NSString *)sdlex_filterDashesFromText:(NSString *)text {
+ NSCharacterSet *supportedCharacters = [NSCharacterSet characterSetWithCharactersInString:@"-"];
+ return [[text componentsSeparatedByCharactersInSet:supportedCharacters] componentsJoinedByString:@""];
+}
-#pragma mark NSCopying
+#pragma mark - NSCopying
- (id)copyWithZone:(nullable NSZone *)zone {
- SDLLifecycleConfiguration *newConfig = [[self.class allocWithZone:zone] initDefaultConfigurationWithAppName:_appName appId:_appId];
+ SDLLifecycleConfiguration *newConfig = [[self.class allocWithZone:zone] initDefaultConfigurationWithAppName:_appName fullAppId:_fullAppId appId:_appId];
newConfig->_tcpDebugMode = _tcpDebugMode;
newConfig->_tcpDebugIPAddress = _tcpDebugIPAddress;
newConfig->_tcpDebugPort = _tcpDebugPort;
@@ -109,6 +151,8 @@ NS_ASSUME_NONNULL_BEGIN
newConfig->_shortAppName = _shortAppName;
newConfig->_ttsName = _ttsName;
newConfig->_voiceRecognitionCommandNames = _voiceRecognitionCommandNames;
+ newConfig->_dayColorScheme = _dayColorScheme;
+ newConfig->_nightColorScheme = _nightColorScheme;
return newConfig;
}
diff --git a/SmartDeviceLink/SDLLifecycleManager.m b/SmartDeviceLink/SDLLifecycleManager.m
index 7843fe7a7..c05ac986e 100644
--- a/SmartDeviceLink/SDLLifecycleManager.m
+++ b/SmartDeviceLink/SDLLifecycleManager.m
@@ -13,6 +13,7 @@
#import "NSMapTable+Subscripting.h"
#import "SDLAsynchronousRPCRequestOperation.h"
#import "SDLChangeRegistration.h"
+#import "SDLChoiceSetManager.h"
#import "SDLConfiguration.h"
#import "SDLConnectionManagerType.h"
#import "SDLLogMacros.h"
@@ -20,6 +21,8 @@
#import "SDLError.h"
#import "SDLFile.h"
#import "SDLFileManager.h"
+#import "SDLFileManagerConfiguration.h"
+#import "SDLGlobals.h"
#import "SDLLifecycleConfiguration.h"
#import "SDLLifecycleConfigurationUpdate.h"
#import "SDLLockScreenConfiguration.h"
@@ -42,11 +45,13 @@
#import "SDLResponseDispatcher.h"
#import "SDLResult.h"
#import "SDLScreenManager.h"
+#import "SDLSecondaryTransportManager.h"
#import "SDLSequentialRPCRequestOperation.h"
#import "SDLSetAppIcon.h"
#import "SDLStateMachine.h"
#import "SDLStreamingMediaConfiguration.h"
#import "SDLStreamingMediaManager.h"
+#import "SDLStreamingProtocolDelegate.h"
#import "SDLSystemCapabilityManager.h"
#import "SDLUnregisterAppInterface.h"
@@ -67,7 +72,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
#pragma mark - SDLManager Private Interface
-@interface SDLLifecycleManager () <SDLConnectionManagerType>
+@interface SDLLifecycleManager () <SDLConnectionManagerType, SDLStreamingProtocolDelegate>
// Readonly public properties
@property (copy, nonatomic, readwrite) SDLConfiguration *configuration;
@@ -76,6 +81,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
@property (strong, nonatomic, readwrite) SDLStateMachine *lifecycleStateMachine;
// Private properties
+@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager;
@property (copy, nonatomic) SDLManagerReadyBlock readyHandler;
@property (copy, nonatomic) dispatch_queue_t lifecycleQueue;
@@ -87,7 +93,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
#pragma mark Lifecycle
- (instancetype)init {
- return [self initWithConfiguration:[SDLConfiguration configurationWithLifecycle:[SDLLifecycleConfiguration defaultConfigurationWithAppName:@"SDL APP" appId:@"001"] lockScreen:[SDLLockScreenConfiguration disabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration]] delegate:nil];
+ return [self initWithConfiguration:[SDLConfiguration configurationWithLifecycle:[SDLLifecycleConfiguration defaultConfigurationWithAppName:@"SDL APP" fullAppId:@"001"] lockScreen:[SDLLockScreenConfiguration disabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration]] delegate:nil];
}
- (instancetype)initWithConfiguration:(SDLConfiguration *)configuration delegate:(nullable id<SDLManagerDelegate>)delegate {
@@ -118,7 +124,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
_lifecycleQueue = dispatch_queue_create("com.sdl.lifecycle", DISPATCH_QUEUE_SERIAL);
// Managers
- _fileManager = [[SDLFileManager alloc] initWithConnectionManager:self];
+ _fileManager = [[SDLFileManager alloc] initWithConnectionManager:self configuration:_configuration.fileManagerConfig];
_permissionManager = [[SDLPermissionManager alloc] init];
_lockScreenManager = [[SDLLockScreenManager alloc] initWithConfiguration:_configuration.lockScreenConfig notificationDispatcher:_notificationDispatcher presenter:[[SDLLockScreenPresenter alloc] init]];
_screenManager = [[SDLScreenManager alloc] initWithConnectionManager:self fileManager:_fileManager];
@@ -157,16 +163,16 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
SDLLogD(@"Starting lifecycle manager");
self.readyHandler = [readyHandler copy];
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateStarted];
+ [self sdl_transitionToState:SDLLifecycleStateStarted];
}
- (void)stop {
dispatch_sync(_lifecycleQueue, ^{
SDLLogD(@"Lifecycle manager stopped");
if ([self.lifecycleStateMachine isCurrentState:SDLLifecycleStateReady]) {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateUnregistering];
+ [self sdl_transitionToState:SDLLifecycleStateUnregistering];
} else {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateStopped];
+ [self sdl_transitionToState:SDLLifecycleStateStopped];
}
});
}
@@ -202,17 +208,20 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
if (self.configuration.lifecycleConfig.tcpDebugMode) {
+ // secondary transport manager is not used
+ self.secondaryTransportManager = nil;
self.proxy = [SDLProxy tcpProxyWithListener:self.notificationDispatcher
tcpIPAddress:self.configuration.lifecycleConfig.tcpDebugIPAddress
- tcpPort:@(self.configuration.lifecycleConfig.tcpDebugPort).stringValue];
+ tcpPort:@(self.configuration.lifecycleConfig.tcpDebugPort).stringValue
+ secondaryTransportManager:self.secondaryTransportManager];
} else {
- self.proxy = [SDLProxy iapProxyWithListener:self.notificationDispatcher];
+ // we reuse our queue to run secondary transport manager's state machine
+ self.secondaryTransportManager = [[SDLSecondaryTransportManager alloc] initWithStreamingProtocolDelegate:self
+ serialQueue:self.lifecycleQueue];
+ self.proxy = [SDLProxy iapProxyWithListener:self.notificationDispatcher
+ secondaryTransportManager:self.secondaryTransportManager];
}
#pragma clang diagnostic pop
-
- if (self.streamManager != nil) {
- [self.streamManager startWithProtocol:self.proxy.protocol];
- }
}
- (void)didEnterStateStopped {
@@ -230,7 +239,12 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
[self.permissionManager stop];
[self.lockScreenManager stop];
[self.screenManager stop];
- [self.streamManager stop];
+ if (self.secondaryTransportManager != nil) {
+ [self.secondaryTransportManager stop];
+ } else {
+ [self audioServiceProtocolDidUpdateFromOldProtocol:self.proxy.protocol toNewProtocol:nil];
+ [self videoServiceProtocolDidUpdateFromOldProtocol:self.proxy.protocol toNewProtocol:nil];
+ }
[self.systemCapabilityManager stop];
[self.responseDispatcher clear];
@@ -247,10 +261,13 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
// Apple Bug ID #30059457
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [weakSelf.delegate managerDidDisconnect];
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (!strongSelf) { return; }
+
+ [strongSelf.delegate managerDidDisconnect];
if (shouldRestart) {
- [weakSelf.lifecycleStateMachine transitionToState:SDLLifecycleStateStarted];
+ [strongSelf sdl_transitionToState:SDLLifecycleStateStarted];
}
});
}
@@ -276,14 +293,15 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
weakSelf.readyHandler(NO, error);
if (weakSelf.lifecycleState != SDLLifecycleStateReconnecting) {
- [weakSelf.lifecycleStateMachine transitionToState:SDLLifecycleStateStopped];
+ [weakSelf sdl_transitionToState:SDLLifecycleStateStopped];
}
return;
}
weakSelf.registerResponse = (SDLRegisterAppInterfaceResponse *)response;
- [weakSelf.lifecycleStateMachine transitionToState:SDLLifecycleStateRegistered];
+ [SDLGlobals sharedGlobals].rpcVersion = weakSelf.registerResponse.syncMsgVersion;
+ [weakSelf sdl_transitionToState:SDLLifecycleStateRegistered];
});
}];
}
@@ -295,10 +313,10 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
BOOL delegateCanUpdateLifecycle = [self.delegate respondsToSelector:@selector(managerShouldUpdateLifecycleToLanguage:)];
// language mismatch? but actual language is a supported language? and delegate has implemented method?
- if (actualLanguage != desiredLanguage && [supportedLanguages containsObject:actualLanguage] && delegateCanUpdateLifecycle) {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateUpdatingConfiguration];
+ if (![actualLanguage isEqualToEnum:desiredLanguage] && [supportedLanguages containsObject:actualLanguage] && delegateCanUpdateLifecycle) {
+ [self sdl_transitionToState:SDLLifecycleStateUpdatingConfiguration];
} else {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateSettingUpManagers];
+ [self sdl_transitionToState:SDLLifecycleStateSettingUpManagers];
}
}
@@ -332,7 +350,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
[self sendConnectionManagerRequest:changeRegistration withResponseHandler:nil];
}
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateSettingUpManagers];
+ [self sdl_transitionToState:SDLLifecycleStateSettingUpManagers];
}
- (void)didEnterStateSettingUpManagers {
@@ -361,6 +379,21 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
dispatch_group_leave(managerGroup);
}];
+ // if secondary transport manager is used, streaming media manager will be started through onAudioServiceProtocolUpdated and onVideoServiceProtocolUpdated
+ if (self.secondaryTransportManager == nil && self.streamManager != nil) {
+ [self audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:self.proxy.protocol];
+ [self videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:self.proxy.protocol];
+ }
+
+ dispatch_group_enter(managerGroup);
+ [self.screenManager startWithCompletionHandler:^(NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogW(@"Screen Manager was unable to start; error: %@", error);
+ }
+
+ dispatch_group_leave(managerGroup);
+ }];
+
// We're done synchronously calling all startup methods, so we can now wait.
dispatch_group_leave(managerGroup);
@@ -368,19 +401,24 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
dispatch_group_notify(managerGroup, self.lifecycleQueue, ^{
// We could have been shut down while waiting for the completion of starting file manager and permission manager.
if (self.lifecycleState == SDLLifecycleStateSettingUpManagers) {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateSettingUpAppIcon];
+ [self sdl_transitionToState:SDLLifecycleStateSettingUpAppIcon];
}
});
}
- (void)didEnterStateSettingUpAppIcon {
+ if (self.registerResponse.iconResumed.boolValue) {
+ [self sdl_transitionToState:SDLLifecycleStateSettingUpHMI];
+ return;
+ }
+
// We only want to send the app icon when the file manager is complete, and when that's done, wait for hmi status to be ready
__weak typeof(self) weakself = self;
[self sdl_sendAppIcon:self.configuration.lifecycleConfig.appIcon withCompletion:^() {
dispatch_async(weakself.lifecycleQueue, ^{
// We could have been shut down while setting up the app icon, make sure we still want to continue or we could crash
if (weakself.lifecycleState == SDLLifecycleStateSettingUpAppIcon) {
- [weakself.lifecycleStateMachine transitionToState:SDLLifecycleStateSettingUpHMI];
+ [weakself sdl_transitionToState:SDLLifecycleStateSettingUpHMI];
}
});
}];
@@ -394,7 +432,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
}
// We are sure to have a HMIStatus, set state to ready
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateReady];
+ [self sdl_transitionToState:SDLLifecycleStateReady];
}
- (void)didEnterStateReady {
@@ -435,7 +473,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
SDLLogE(@"SDL Error unregistering, we are going to hard disconnect: %@, response: %@", error, response);
}
- [weakSelf.lifecycleStateMachine transitionToState:SDLLifecycleStateStopped];
+ [weakSelf sdl_transitionToState:SDLLifecycleStateStopped];
}];
}
@@ -576,6 +614,18 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
return YES;
}
+// this is to make sure that the transition happens on the dedicated queue
+- (void)sdl_transitionToState:(SDLState *)state {
+ if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(self.lifecycleQueue)) == 0) {
+ [self.lifecycleStateMachine transitionToState:state];
+ } else {
+ // once this method returns, the transition is completed
+ dispatch_sync(self.lifecycleQueue, ^{
+ [self.lifecycleStateMachine transitionToState:state];
+ });
+ }
+}
+
#pragma mark SDL notification observers
@@ -583,7 +633,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
SDLLogD(@"Transport connected");
dispatch_async(self.lifecycleQueue, ^{
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateConnected];
+ [self sdl_transitionToState:SDLLifecycleStateConnected];
});
}
@@ -592,9 +642,9 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
dispatch_async(self.lifecycleQueue, ^{
if (self.lifecycleState == SDLLifecycleStateUnregistering || self.lifecycleState == SDLLifecycleStateStopped) {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateStopped];
+ [self sdl_transitionToState:SDLLifecycleStateStopped];
} else {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateReconnecting];
+ [self sdl_transitionToState:SDLLifecycleStateReconnecting];
}
});
}
@@ -624,7 +674,7 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
SDLLogD(@"Audio streaming state changed from %@ to %@", oldStreamingState, self.audioStreamingState);
if ([self.lifecycleStateMachine isCurrentState:SDLLifecycleStateSettingUpHMI]) {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateReady];
+ [self sdl_transitionToState:SDLLifecycleStateReady];
}
if (![self.lifecycleStateMachine isCurrentState:SDLLifecycleStateReady]) {
@@ -666,14 +716,42 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
SDLLogE(@"Remote Device forced unregistration for reason: %@", appUnregisteredNotification.reason);
if ([self.lifecycleStateMachine isCurrentState:SDLLifecycleStateUnregistering]) {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateStopped];
+ [self sdl_transitionToState:SDLLifecycleStateStopped];
} else if ([self.lifecycleStateMachine isCurrentState:SDLLifecycleStateStopped]) {
return;
} else if ([appUnregisteredNotification.reason isKindOfClass:[NSString class]] && [appUnregisteredNotification.reason isEqualToEnum:SDLAppInterfaceUnregisteredReasonAppUnauthorized]) {
// HAX: The string check is due to a core "feature" that could cause -1 to be sent as the enum value, which will crash here.
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateStopped];
+ [self sdl_transitionToState:SDLLifecycleStateStopped];
} else {
- [self.lifecycleStateMachine transitionToState:SDLLifecycleStateReconnecting];
+ [self sdl_transitionToState:SDLLifecycleStateReconnecting];
+ }
+}
+
+#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];
}
}
diff --git a/SmartDeviceLink/SDLLightCapabilities.h b/SmartDeviceLink/SDLLightCapabilities.h
new file mode 100644
index 000000000..0bdac1a62
--- /dev/null
+++ b/SmartDeviceLink/SDLLightCapabilities.h
@@ -0,0 +1,63 @@
+// SDLLightCapabilities.h
+//
+
+#import "SDLRPCMessage.h"
+
+#import "SDLLightName.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLightCapabilities : SDLRPCStruct
+
+/**
+ Constructs a newly allocated SDLLightCapabilities object with the name of the light or group of lights
+
+ @param name The name of a light or a group of lights
+ @return An instance of the SDLLightCapabilities class
+ */
+- (instancetype)initWithName:(SDLLightName)name;
+
+/**
+ Constructs a newly allocated SDLLightCapabilities object with given parameters
+
+ @param name The name of a light or a group of lights
+ @param densityAvailable light's density can be set remotely
+ @param colorAvailable Light's color can be set remotely by using the RGB color space
+ @param statusAvailable whether status is available
+
+ @return An instance of the SDLLightCapabilities class
+ */
+- (instancetype)initWithName:(SDLLightName)name densityAvailable:(BOOL)densityAvailable colorAvailable:(BOOL)colorAvailable statusAvailable:(BOOL)statusAvailable;
+
+/**
+ * @abstract The name of a light or a group of lights
+ *
+ * Required, SDLLightName
+ */
+@property (strong, nonatomic) SDLLightName name;
+
+/**
+ * @abstract Indicates if the light's density can be set remotely (similar to a dimmer).
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *densityAvailable;
+
+/**
+ * @abstract Indicates if the light's color can be set remotely by using the RGB color space.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *colorAvailable;
+
+/**
+ * @abstract Indicates if the status (ON/OFF) can be set remotely.
+ * App shall not use read-only values (RAMP_UP/RAMP_DOWN/UNKNOWN/INVALID) in a setInteriorVehicleData request.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *statusAvailable;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLightCapabilities.m b/SmartDeviceLink/SDLLightCapabilities.m
new file mode 100644
index 000000000..3db0454ff
--- /dev/null
+++ b/SmartDeviceLink/SDLLightCapabilities.m
@@ -0,0 +1,69 @@
+// SDLLightCapabilities.m
+//
+
+#import "SDLLightCapabilities.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLLightCapabilities
+
+- (instancetype)initWithName:(SDLLightName)name {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.name = name;
+
+ return self;
+}
+
+- (instancetype)initWithName:(SDLLightName)name densityAvailable:(BOOL)densityAvailable colorAvailable:(BOOL)colorAvailable statusAvailable:(BOOL)statusAvailable {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.name = name;
+ self.densityAvailable = @(densityAvailable);
+ self.colorAvailable = @(colorAvailable);
+ self.statusAvailable = @(statusAvailable);
+
+ return self;
+}
+
+- (void)setName:(SDLLightName)name {
+ [store sdl_setObject:name forName:SDLNameName];
+}
+
+- (SDLLightName)name {
+ return [store sdl_objectForName:SDLNameName];
+}
+
+- (void)setDensityAvailable:(nullable NSNumber<SDLBool> *)densityAvailable {
+ [store sdl_setObject:densityAvailable forName:SDLNameDensityAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)densityAvailable {
+ return [store sdl_objectForName:SDLNameDensityAvailable];
+}
+
+- (void)setColorAvailable:(nullable NSNumber<SDLBool> *)colorAvailable {
+ [store sdl_setObject:colorAvailable forName:SDLNameRGBColorSpaceAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)colorAvailable {
+ return [store sdl_objectForName:SDLNameRGBColorSpaceAvailable];
+}
+
+- (void)setStatusAvailable:(nullable NSNumber<SDLBool> *)statusAvailable {
+ [store sdl_setObject:statusAvailable forName:SDLNameStatusAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)statusAvailable {
+ return [store sdl_objectForName:SDLNameStatusAvailable];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLightControlCapabilities.h b/SmartDeviceLink/SDLLightControlCapabilities.h
new file mode 100644
index 000000000..26e675cea
--- /dev/null
+++ b/SmartDeviceLink/SDLLightControlCapabilities.h
@@ -0,0 +1,40 @@
+// SDLLightControlCapabilities.h
+//
+
+#import "SDLRPCMessage.h"
+
+@class SDLLightCapabilities;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLightControlCapabilities : SDLRPCStruct
+
+/**
+ Constructs a newly allocated SDLLightControlCapabilities object with given parameters
+
+
+ @param moduleName friendly name of the light control module
+ @param supportedLights array of available LightCapabilities
+ @return An instance of the SDLLightControlCapabilities class
+ */
+- (instancetype)initWithModuleName:(NSString *)moduleName supportedLights:(NSArray<SDLLightCapabilities *> *)supportedLights;
+
+/**
+ * @abstract The short friendly name of the light control module.
+ * It should not be used to identify a module by mobile application.
+ *
+ * Required, Max String length 100 chars
+ */
+@property (strong, nonatomic) NSString *moduleName;
+
+/**
+ * @abstract An array of available LightCapabilities that are controllable.
+ *
+ * Required, NSArray of type SDLLightCapabilities minsize="1" maxsize="100"
+ */
+@property (strong, nonatomic) NSArray<SDLLightCapabilities *> *supportedLights;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLightControlCapabilities.m b/SmartDeviceLink/SDLLightControlCapabilities.m
new file mode 100644
index 000000000..90494d2a6
--- /dev/null
+++ b/SmartDeviceLink/SDLLightControlCapabilities.m
@@ -0,0 +1,45 @@
+// SDLLightControlCapabilities.m
+//
+
+#import "SDLLightControlCapabilities.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+#import "SDLLightCapabilities.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLLightControlCapabilities
+
+
+- (instancetype)initWithModuleName:(NSString *)moduleName supportedLights:(NSArray<SDLLightCapabilities *> *)supportedLights {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.moduleName = moduleName;
+ self.supportedLights = supportedLights;
+
+ return self;
+}
+
+- (void)setModuleName:(NSString *)moduleName {
+ [store sdl_setObject:moduleName forName:SDLNameModuleName];
+}
+
+- (NSString *)moduleName {
+ return [store sdl_objectForName:SDLNameModuleName];
+}
+
+- (void)setSupportedLights:(NSArray<SDLLightCapabilities *> *)supportedLights {
+ [store sdl_setObject:supportedLights forName:SDLNameSupportedLights];
+
+}
+
+- (NSArray<SDLLightCapabilities *> *)supportedLights {
+ return [store sdl_objectsForName:SDLNameSupportedLights ofClass:SDLLightCapabilities.class];
+}
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLightControlData.h b/SmartDeviceLink/SDLLightControlData.h
new file mode 100644
index 000000000..49d2fe692
--- /dev/null
+++ b/SmartDeviceLink/SDLLightControlData.h
@@ -0,0 +1,30 @@
+// SDLLightControlData.h
+//
+
+#import "SDLRPCMessage.h"
+
+@class SDLLightState;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLightControlData : SDLRPCStruct
+
+/**
+ Constructs a newly allocated SDLLightControlData object with lightState
+
+ @param lightState An array of LightNames and their current or desired status
+ @return An instance of the SDLLightControlData class
+ */
+- (instancetype)initWithLightStates:(NSArray<SDLLightState *> *)lightState;
+
+/**
+ * @abstract An array of LightNames and their current or desired status.
+ * Status of the LightNames that are not listed in the array shall remain unchanged.
+ *
+ * Required, NSArray of type SDLLightState minsize="1" maxsize="100"
+ */
+@property (strong, nonatomic) NSArray<SDLLightState *> *lightState;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLightControlData.m b/SmartDeviceLink/SDLLightControlData.m
new file mode 100644
index 000000000..ca8bdba76
--- /dev/null
+++ b/SmartDeviceLink/SDLLightControlData.m
@@ -0,0 +1,33 @@
+// SDLLightControlData.m
+//
+
+#import "SDLLightControlData.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+#import "SDLLightState.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLLightControlData
+
+-(instancetype)initWithLightStates:(NSArray<SDLLightState *> *)lightState {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.lightState = lightState;
+
+ return self;
+}
+
+- (void)setLightState:(NSArray<SDLLightState *> *)lightState {
+ [store sdl_setObject:lightState forName:SDLNameLightState];
+}
+
+- (NSArray<SDLLightState *> *)lightState {
+ return [store sdl_objectsForName:SDLNameLightState ofClass:SDLLightState.class];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLightName.h b/SmartDeviceLink/SDLLightName.h
new file mode 100644
index 000000000..09a954f74
--- /dev/null
+++ b/SmartDeviceLink/SDLLightName.h
@@ -0,0 +1,259 @@
+// SDLLightName.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * The name that identifies the Light
+ *
+ */
+typedef SDLEnum SDLLightName SDL_SWIFT_ENUM;
+
+/**
+ * @abstract Represents the Light with name FRONT_LEFT_HIGH_BEAM.
+ */
+extern SDLLightName const SDLLightNameFrontLeftHighBeam;
+
+/**
+ * @abstract Represents the Light with name FRONT_RIGHT_HIGH_BEAM.
+ */
+extern SDLLightName const SDLLightNameFrontRightHighBeam;
+
+/**
+ * @abstract Represents the Light with name FRONT_LEFT_LOW_BEAM.
+ */
+extern SDLLightName const SDLLightNameFrontLeftLowBeam;
+
+/**
+ * @abstract Represents the Light with name FRONT_RIGHT_LOW_BEAM.
+ */
+extern SDLLightName const SDLLightNameFrontRightLowBeam;
+
+/**
+ * @abstract Represents the Light with name FRONT_LEFT_PARKING_LIGHT
+ */
+extern SDLLightName const SDLLightNameFrontLeftParkingLight;
+
+/**
+ * @abstract Represents the Light with name FRONT_RIGHT_PARKING_LIGHT
+ */
+extern SDLLightName const SDLLightNameFrontRightParkingLight;
+
+/**
+ * @abstract Represents the Light with name FRONT_LEFT_FOG_LIGHT
+ */
+extern SDLLightName const SDLLightNameFrontLeftFogLight;
+
+/**
+ * @abstract Represents the Light with name FRONT_RIGHT_FOG_LIGHT
+ */
+extern SDLLightName const SDLLightNameFrontRightFogLight;
+
+/**
+ * @abstract Represents the Light with name FRONT_LEFT_DAYTIME_RUNNING_LIGHT
+ */
+extern SDLLightName const SDLLightNameFrontLeftDaytimeRunningLight;
+
+/**
+ * @abstract Represents the Light with name FRONT_RIGHT_DAYTIME_RUNNING_LIGHT
+ */
+extern SDLLightName const SDLLightNameFrontRightDaytimeRunningLight;
+
+/**
+ * @abstract Represents the Light with name FRONT_LEFT_TURN_LIGHT
+ */
+extern SDLLightName const SDLLightNameFrontLeftTurnLight;
+
+/**
+ * @abstract Represents the Light with name FRONT_Right_TURN_LIGHT
+ */
+extern SDLLightName const SDLLightNameFrontRightTurnLight;
+
+/**
+ * @abstract Represents the Light with name REAR_LEFT_FOG_LIGHT.
+ */
+extern SDLLightName const SDLLightNameRearLeftFogLight;
+
+/**
+ * @abstract Represents the Light with name REAR_RIGHT_FOG_LIGHT
+ */
+extern SDLLightName const SDLLightNameRearRightFogLight;
+
+/**
+ * @abstract Represents the Light with name REAR_LEFT_TAIL_LIGHT
+ */
+extern SDLLightName const SDLLightNameRearLeftTailLight;
+
+/**
+ * @abstract Represents the Light with name REAR_RIGHT_TAIL_LIGHT
+ */
+extern SDLLightName const SDLLightNameRearRightTailLight;
+
+/**
+ * @abstract Represents the Light with name REAR_LEFT_BRAKE_LIGHT
+ */
+extern SDLLightName const SDLLightNameRearLeftBrakeLight;
+
+/**
+ * @abstract Represents the Light with name REAR_RIGHT_BRAKE_LIGHT
+ */
+extern SDLLightName const SDLLightNameRearRightBrakeLight;
+
+/**
+ * @abstract Represents the Light with name REAR_LEFT_TURN_LIGHT
+ */
+extern SDLLightName const SDLLightNameRearLeftTurnLight;
+
+/**
+ * @abstract Represents the Light with name REAR_RIGHT_TURN_LIGHT
+ */
+extern SDLLightName const SDLLightNameRearRightTurnLight;
+
+/**
+ * @abstract Represents the Light with name REAR_REGISTRATION_PLATE_LIGHT
+ */
+extern SDLLightName const SDLLightNameRearRegistrationPlateLight;
+
+#pragma mark - Exterior Lights by common function groups
+/**
+ * @abstract Include all high beam lights: front_left and front_right.
+ */
+extern SDLLightName const SDLLightNameHighBeams;
+
+/**
+ * @abstract Include all low beam lights: front_left and front_right.
+ */
+extern SDLLightName const SDLLightNameLowBeams;
+
+/**
+ * @abstract Include all fog lights: front_left, front_right, rear_left and rear_right.
+ */
+extern SDLLightName const SDLLightNameFogLights;
+
+/**
+ * @abstract Include all daytime running lights: front_left and front_right.
+ */
+extern SDLLightName const SDLLightNameRunningLights;
+
+/**
+ * @abstract Include all parking lights: front_left and front_right.
+ */
+extern SDLLightName const SDLLightNameParkingLights;
+
+/**
+ * @abstract Include all brake lights: rear_left and rear_right.
+ */
+extern SDLLightName const SDLLightNameBrakeLights;
+
+/**
+ * @abstract Represents the Light with name REAR_REVERSING_LIGHTS
+ */
+extern SDLLightName const SDLLightNameRearReversingLights;
+
+/**
+ * @abstract Represents the Light with name SIDE_MARKER_LIGHTS
+ */
+extern SDLLightName const SDLLightNameSideMarkerLights;
+
+/**
+ * @abstract Include all left turn signal lights: front_left, rear_left, left_side and mirror_mounted.
+ */
+extern SDLLightName const SDLLightNameLeftTurnLights;
+
+/**
+ * @abstract Include all right turn signal lights: front_right, rear_right, right_side and mirror_mounted.
+ */
+extern SDLLightName const SDLLightNameRightTurnLights;
+
+/**
+ * @abstract Include all hazard lights: front_left, front_right, rear_left and rear_right.
+ */
+extern SDLLightName const SDLLightNameHazardLights;
+
+#pragma mark - Interior Lights by common function groups
+
+/**
+ * @abstract Represents the Light with name AMBIENT_LIGHTS
+ */
+extern SDLLightName const SDLLightNameAmbientLights;
+
+/**
+ * @abstract Represents the Light with name OVERHEAD_LIGHTS
+ */
+extern SDLLightName const SDLLightNameOverHeadLights;
+
+/**
+ * @abstract Represents the Light with name READING_LIGHTS
+ */
+extern SDLLightName const SDLLightNameReadingLights;
+
+/**
+ * @abstract Represents the Light with name TRUNK_LIGHTS
+ */
+extern SDLLightName const SDLLightNameTrunkLights;
+
+#pragma mark - Lights by location
+
+/**
+ * @abstract Include exterior lights located in front of the vehicle. For example, fog lights and low beams.
+ */
+extern SDLLightName const SDLLightNameExteriorFrontLights;
+
+/**
+ * @abstract Include exterior lights located at the back of the vehicle.
+ * For example, license plate lights, reverse lights, cargo lights, bed lights an trailer assist lights.
+ */
+extern SDLLightName const SDLLightNameExteriorRearLights;
+
+/**
+ * @abstract Include exterior lights located at the left side of the vehicle.
+ * For example, left puddle lights and spot lights.
+ */
+extern SDLLightName const SDLLightNameExteriorLeftLights;
+
+/**
+ * @abstract Include exterior lights located at the right side of the vehicle.
+ * For example, right puddle lights and spot lights.
+ */
+extern SDLLightName const SDLLightNameExteriorRightLights;
+
+/**
+ * @abstract Cargo lamps illuminate the cargo area.
+ */
+extern SDLLightName const SDLLightNameExteriorRearCargoLights;
+
+/**
+ * @abstract Truck bed lamps light up the bed of the truck.
+ */
+extern SDLLightName const SDLLightNameExteriorRearTruckBedLights;
+
+/**
+ * @abstract Trailer lights are lamps mounted on a trailer hitch.
+ */
+extern SDLLightName const SDLLightNameExteriorRearTrailerLights;
+
+/**
+ * @abstract It is the spotlights mounted on the left side of a vehicle.
+ *
+ */
+extern SDLLightName const SDLLightNameExteriorLeftSpotLights;
+
+/**
+ * @abstract It is the spotlights mounted on the right side of a vehicle.
+ */
+extern SDLLightName const SDLLightNameExteriorRightSpotLights;
+
+/**
+ * @abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.
+ */
+extern SDLLightName const SDLLightNameExteriorLeftPuddleLights;
+
+/**
+ * @abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.
+ */
+extern SDLLightName const SDLLightNameExteriorRightPuddleLights;
+
+/**
+ * @abstract Include all exterior lights around the vehicle.
+ */
+extern SDLLightName const SDLLightNameExteriorAllLights;
diff --git a/SmartDeviceLink/SDLLightName.m b/SmartDeviceLink/SDLLightName.m
new file mode 100644
index 000000000..f236bea07
--- /dev/null
+++ b/SmartDeviceLink/SDLLightName.m
@@ -0,0 +1,54 @@
+// SDLLightName.m
+//
+
+#import "SDLLightName.h"
+
+SDLLightName const SDLLightNameFrontLeftHighBeam = @"FRONT_LEFT_HIGH_BEAM";
+SDLLightName const SDLLightNameFrontRightHighBeam = @"FRONT_RIGHT_HIGH_BEAM";
+SDLLightName const SDLLightNameFrontLeftLowBeam = @"FRONT_LEFT_LOW_BEAM";
+SDLLightName const SDLLightNameFrontRightLowBeam = @"FRONT_RIGHT_LOW_BEAM";
+SDLLightName const SDLLightNameFrontLeftParkingLight = @"FRONT_LEFT_PARKING_LIGHT";
+SDLLightName const SDLLightNameFrontRightParkingLight = @"FRONT_RIGHT_PARKING_LIGHT";
+SDLLightName const SDLLightNameFrontLeftFogLight = @"FRONT_LEFT_FOG_LIGHT";
+SDLLightName const SDLLightNameFrontRightFogLight = @"FRONT_RIGHT_FOG_LIGHT";
+SDLLightName const SDLLightNameFrontLeftDaytimeRunningLight = @"FRONT_LEFT_DAYTIME_RUNNING_LIGHT";
+SDLLightName const SDLLightNameFrontRightDaytimeRunningLight = @"FRONT_RIGHT_DAYTIME_RUNNING_LIGHT";
+SDLLightName const SDLLightNameFrontLeftTurnLight = @"FRONT_LEFT_TURN_LIGHT";
+SDLLightName const SDLLightNameFrontRightTurnLight = @"FRONT_RIGHT_TURN_LIGHT";
+SDLLightName const SDLLightNameRearLeftFogLight = @"REAR_LEFT_FOG_LIGHT";
+SDLLightName const SDLLightNameRearRightFogLight = @"REAR_RIGHT_FOG_LIGHT";
+SDLLightName const SDLLightNameRearLeftTailLight = @"REAR_LEFT_TAIL_LIGHT";
+SDLLightName const SDLLightNameRearRightTailLight = @"REAR_RIGHT_TAIL_LIGHT";
+SDLLightName const SDLLightNameRearLeftBrakeLight = @"REAR_LEFT_BRAKE_LIGHT";
+SDLLightName const SDLLightNameRearRightBrakeLight = @"REAR_RIGHT_BRAKE_LIGHT";
+SDLLightName const SDLLightNameRearLeftTurnLight = @"REAR_LEFT_TURN_LIGHT";
+SDLLightName const SDLLightNameRearRightTurnLight = @"REAR_RIGHT_TURN_LIGHT";
+SDLLightName const SDLLightNameRearRegistrationPlateLight = @"REAR_REGISTRATION_PLATE_LIGHT";
+SDLLightName const SDLLightNameHighBeams = @"HIGH_BEAMS";
+SDLLightName const SDLLightNameLowBeams = @"LOW_BEAMS";
+SDLLightName const SDLLightNameFogLights = @"FOG_LIGHTS";
+SDLLightName const SDLLightNameRunningLights = @"RUNNING_LIGHTS";
+SDLLightName const SDLLightNameParkingLights = @"PARKING_LIGHTS";
+SDLLightName const SDLLightNameBrakeLights = @"BRAKE_LIGHTS";
+SDLLightName const SDLLightNameRearReversingLights = @"REAR_REVERSING_LIGHTS";
+SDLLightName const SDLLightNameSideMarkerLights = @"SIDE_MARKER_LIGHTS";
+SDLLightName const SDLLightNameLeftTurnLights = @"LEFT_TURN_LIGHTS";
+SDLLightName const SDLLightNameRightTurnLights = @"RIGHT_TURN_LIGHTS";
+SDLLightName const SDLLightNameHazardLights = @"HAZARD_LIGHTS";
+SDLLightName const SDLLightNameAmbientLights = @"AMBIENT_LIGHTS";
+SDLLightName const SDLLightNameOverHeadLights = @"OVERHEAD_LIGHTS";
+SDLLightName const SDLLightNameReadingLights = @"READING_LIGHTS";
+SDLLightName const SDLLightNameTrunkLights = @"TRUNK_LIGHTS";
+SDLLightName const SDLLightNameExteriorFrontLights = @"EXTERIOR_FRONT_LIGHTS";
+SDLLightName const SDLLightNameExteriorRearLights = @"EXTERIOR_REAR_LIGHTS";
+SDLLightName const SDLLightNameExteriorLeftLights = @"EXTERIOR_LEFT_LIGHTS";
+SDLLightName const SDLLightNameExteriorRightLights = @"EXTERIOR_RIGHT_LIGHTS";
+SDLLightName const SDLLightNameExteriorRearCargoLights = @"REAR_CARGO_LIGHTS";
+SDLLightName const SDLLightNameExteriorRearTruckBedLights = @"REAR_TRUCK_BED_LIGHTS";
+SDLLightName const SDLLightNameExteriorRearTrailerLights = @"REAR_TRAILER_LIGHTS";
+SDLLightName const SDLLightNameExteriorLeftSpotLights = @"LEFT_SPOT_LIGHTS";
+SDLLightName const SDLLightNameExteriorRightSpotLights = @"RIGHT_SPOT_LIGHTS";
+SDLLightName const SDLLightNameExteriorLeftPuddleLights = @"LEFT_PUDDLE_LIGHTS";
+SDLLightName const SDLLightNameExteriorRightPuddleLights = @"RIGHT_PUDDLE_LIGHTS";
+SDLLightName const SDLLightNameExteriorAllLights = @"EXTERIOR_ALL_LIGHTS";
+
diff --git a/SmartDeviceLink/SDLLightState.h b/SmartDeviceLink/SDLLightState.h
new file mode 100644
index 000000000..c44ebf48e
--- /dev/null
+++ b/SmartDeviceLink/SDLLightState.h
@@ -0,0 +1,76 @@
+// SDLLightState.h
+//
+#import <UIKit/UIKit.h>
+
+#import "SDLRPCMessage.h"
+#import "SDLLightName.h"
+#import "SDLLightStatus.h"
+
+@class SDLRGBColor;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLightState : SDLRPCStruct
+
+/**
+ Constructs a newly allocated SDLLightState object with given parameters
+
+ @param id The name of a light or a group of lights
+ @param status Reflects the status of Light.
+ @return An instance of the SDLLightState class
+ */
+- (instancetype)initWithId:(SDLLightName)id status:(SDLLightStatus)status;
+
+/**
+ Constructs a newly allocated SDLLightState object with given parameters
+
+ @param id The name of a light or a group of lights
+ @param status Reflects the status of Light.
+ @param density Reflects the density of Light.
+ @param color Reflects the color of Light.
+ @return An instance of the SDLLightState class
+ */
+- (instancetype)initWithId:(SDLLightName)id status:(SDLLightStatus)status density:(double)density color:(SDLRGBColor *)color;
+
+/**
+ Constructs a newly allocated SDLLightState object with given parameters
+
+ @param id The name of a light or a group of lights
+ @param lightStatus Reflects the status of Light.
+ @param lightDensity Reflects the density of Light.
+ @param lightColor Reflects the color of Light.
+ @return An instance of the SDLLightState class
+ */
+- (instancetype)initWithId:(SDLLightName)id lightStatus:(SDLLightStatus)lightStatus lightDensity:(double)lightDensity lightColor:(UIColor *)lightColor;
+
+/**
+ * @abstract The name of a light or a group of lights
+ *
+ * Required, SDLLightName
+ */
+@property (strong, nonatomic) SDLLightName id;
+
+/**
+ * @abstract Reflects the status of Light.
+ *
+ * Required, SDLLightStatus
+ */
+@property (strong, nonatomic) SDLLightStatus status;
+
+/**
+ * @abstract Reflects the density of Light.
+ *
+ * Optional, Float type with minValue: 0 maxValue:1
+ */
+@property (nullable, copy, nonatomic) NSNumber<SDLFloat> *density;
+
+/**
+ * @abstract Reflects the color of Light.
+ *
+ * Optional, SDLLightStatus
+ */
+@property (nullable, strong, nonatomic) SDLRGBColor *color;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLightState.m b/SmartDeviceLink/SDLLightState.m
new file mode 100644
index 000000000..24e1909e6
--- /dev/null
+++ b/SmartDeviceLink/SDLLightState.m
@@ -0,0 +1,84 @@
+// SDLLightState.m
+//
+
+#import "SDLLightState.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+#import "SDLRGBColor.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLLightState
+
+- (instancetype)initWithId:(SDLLightName)id status:(SDLLightStatus)status{
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.id = id;
+ self.status = status;
+
+ return self;
+}
+
+- (instancetype)initWithId:(SDLLightName)id status:(SDLLightStatus)status density:(double)density color:(SDLRGBColor *)color {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.id = id;
+ self.status = status;
+ self.density = @(density);
+ self.color = color;
+
+ return self;
+}
+
+- (instancetype)initWithId:(SDLLightName)id lightStatus:(SDLLightStatus)lightStatus lightDensity:(double)lightDensity lightColor:(UIColor *)lightColor {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.id = id;
+ self.status = lightStatus;
+ self.density = @(lightDensity);
+ self.color = [[SDLRGBColor alloc] initWithColor:lightColor];
+
+ return self;
+}
+
+- (void)setId:(SDLLightName)id {
+ [store sdl_setObject:id forName:SDLNameId];
+}
+
+- (SDLLightName)id {
+ return [store sdl_objectForName:SDLNameId];
+}
+
+- (void)setStatus:(SDLLightStatus)status {
+ [store sdl_setObject:status forName:SDLNameStatus];
+}
+
+- (SDLLightStatus)status {
+ return [store sdl_objectForName:SDLNameStatus];
+}
+
+- (void)setDensity:(nullable NSNumber<SDLFloat> *)density {
+ [store sdl_setObject:density forName:SDLNameDensity];
+}
+
+- (nullable NSNumber<SDLFloat> *)density {
+ return [store sdl_objectForName:SDLNameDensity];
+}
+
+- (void)setColor:(nullable SDLRGBColor *)color {
+ [store sdl_setObject:color forName:SDLNameColor];
+}
+
+- (nullable SDLRGBColor *)color {
+ return [store sdl_objectForName:SDLNameColor ofClass:[SDLRGBColor class]];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLightStatus.h b/SmartDeviceLink/SDLLightStatus.h
new file mode 100644
index 000000000..ee9fc4ae6
--- /dev/null
+++ b/SmartDeviceLink/SDLLightStatus.h
@@ -0,0 +1,40 @@
+// SDLLightStatus.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * Reflects the status of Light.
+ *
+ */
+typedef SDLEnum SDLLightStatus SDL_SWIFT_ENUM;
+
+/**
+ * @abstract Light status currently on.
+ */
+extern SDLLightStatus const SDLLightStatusOn;
+
+/**
+ * @abstract Light status currently Off.
+ */
+extern SDLLightStatus const SDLLightStatusOFF;
+
+/**
+ * @abstract Light status currently RAMP_UP.
+ */
+extern SDLLightStatus const SDLLightStatusRampUp;
+
+/**
+ * @abstract Light status currently RAMP_DOWN.
+ */
+extern SDLLightStatus const SDLLightStatusRampDown;
+
+/**
+ * @abstract Light status currently UNKNOWN.
+ */
+extern SDLLightStatus const SDLLightStatusUnknown;
+
+/**
+ * @abstract Light status currently INVALID.
+ */
+extern SDLLightStatus const SDLLightStatusInvalid;
diff --git a/SmartDeviceLink/SDLLightStatus.m b/SmartDeviceLink/SDLLightStatus.m
new file mode 100644
index 000000000..d3ede6321
--- /dev/null
+++ b/SmartDeviceLink/SDLLightStatus.m
@@ -0,0 +1,11 @@
+// SDLLightStatus.m
+//
+
+#import "SDLLightStatus.h"
+
+SDLLightStatus const SDLLightStatusOn = @"ON";
+SDLLightStatus const SDLLightStatusOFF = @"OFF";
+SDLLightStatus const SDLLightStatusRampUp = @"RAMP_UP";
+SDLLightStatus const SDLLightStatusRampDown = @"RAMP_DOWN";
+SDLLightStatus const SDLLightStatusUnknown = @"UNKNOWN";
+SDLLightStatus const SDLLightStatusInvalid = @"INVALID";
diff --git a/SmartDeviceLink/SDLListFilesOperation.m b/SmartDeviceLink/SDLListFilesOperation.m
index 6929f1f84..ca45ac928 100644
--- a/SmartDeviceLink/SDLListFilesOperation.m
+++ b/SmartDeviceLink/SDLListFilesOperation.m
@@ -47,19 +47,20 @@ NS_ASSUME_NONNULL_BEGIN
SDLListFiles *listFiles = [[SDLListFiles alloc] init];
__weak typeof(self) weakSelf = self;
- [self.connectionManager sendConnectionManagerRequest:listFiles
- withResponseHandler:^(__kindof SDLRPCRequest *request, __kindof SDLRPCResponse *response, NSError *error) {
- SDLListFilesResponse *listFilesResponse = (SDLListFilesResponse *)response;
- BOOL success = [listFilesResponse.success boolValue];
- NSUInteger bytesAvailable = [listFilesResponse.spaceAvailable unsignedIntegerValue];
- NSArray<NSString *> *fileNames = [NSArray arrayWithArray:listFilesResponse.filenames];
-
- if (weakSelf.completionHandler != nil) {
- weakSelf.completionHandler(success, bytesAvailable, fileNames, error);
- }
-
- [weakSelf finishOperation];
- }];
+ [self.connectionManager sendConnectionManagerRequest:listFiles withResponseHandler:^(__kindof SDLRPCRequest *request, __kindof SDLRPCResponse *response, NSError *error) {
+ SDLListFilesResponse *listFilesResponse = (SDLListFilesResponse *)response;
+ BOOL success = [listFilesResponse.success boolValue];
+ NSArray<NSString *> *fileNames = [NSArray arrayWithArray:listFilesResponse.filenames];
+
+ // If spaceAvailable is nil, set it to the max value
+ NSUInteger bytesAvailable = listFilesResponse.spaceAvailable != nil ? listFilesResponse.spaceAvailable.unsignedIntegerValue : 2000000000;
+
+ if (weakSelf.completionHandler != nil) {
+ weakSelf.completionHandler(success, bytesAvailable, fileNames, error);
+ }
+
+ [weakSelf finishOperation];
+ }];
}
diff --git a/SmartDeviceLink/SDLListFilesResponse.h b/SmartDeviceLink/SDLListFilesResponse.h
index b269b11c4..b5ddef16e 100644
--- a/SmartDeviceLink/SDLListFilesResponse.h
+++ b/SmartDeviceLink/SDLListFilesResponse.h
@@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Provides the total local space available on the module for the registered app.
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *spaceAvailable;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *spaceAvailable;
@end
diff --git a/SmartDeviceLink/SDLListFilesResponse.m b/SmartDeviceLink/SDLListFilesResponse.m
index f78d83acb..376e81702 100644
--- a/SmartDeviceLink/SDLListFilesResponse.m
+++ b/SmartDeviceLink/SDLListFilesResponse.m
@@ -25,11 +25,11 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameFilenames];
}
-- (void)setSpaceAvailable:(NSNumber<SDLInt> *)spaceAvailable {
+- (void)setSpaceAvailable:(nullable NSNumber<SDLInt> *)spaceAvailable {
[parameters sdl_setObject:spaceAvailable forName:SDLNameSpaceAvailable];
}
-- (NSNumber<SDLInt> *)spaceAvailable {
+- (nullable NSNumber<SDLInt> *)spaceAvailable {
return [parameters sdl_objectForName:SDLNameSpaceAvailable];
}
diff --git a/SmartDeviceLink/SDLLockScreenConfiguration.h b/SmartDeviceLink/SDLLockScreenConfiguration.h
index cf1287cc3..80575567a 100644
--- a/SmartDeviceLink/SDLLockScreenConfiguration.h
+++ b/SmartDeviceLink/SDLLockScreenConfiguration.h
@@ -14,7 +14,13 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLLockScreenConfiguration : NSObject <NSCopying>
/**
- * Whether or not the lock screen should be shown in the "lock screen optional" state. Defaults to 'NO'.
+ * Whether or not the lock screen should be shown in the "lock screen optional" state. Defaults to false.
+ *
+ * @discussion In order for the "lock screen optional" state to occur, the following must be true:
+ * 1. The app should have received at least 1 driver distraction notification (i.e. a `OnDriverDistraction` notification) from SDL Core. Older versions of Core did not send a notification immediately on connection.
+ * 2. The driver is not distracted (i.e. the last `OnDriverDistraction` notification received was for a driver distraction state off).
+ * 3. The `hmiLevel` can not be `NONE`.
+ * 4. If the `hmiLevel` is currently `BACKGROUND` then the previous `hmiLevel` should have been `FULL` or `LIMITED` (i.e. the user should have interacted with app before it was backgrounded).
*/
@property (assign, nonatomic) BOOL showInOptionalState;
diff --git a/SmartDeviceLink/SDLLockScreenManager.m b/SmartDeviceLink/SDLLockScreenManager.m
index c15c5318c..a8c8c3758 100644
--- a/SmartDeviceLink/SDLLockScreenManager.m
+++ b/SmartDeviceLink/SDLLockScreenManager.m
@@ -137,7 +137,7 @@ NS_ASSUME_NONNULL_BEGIN
} else if ([self.lastLockNotification.lockScreenStatus isEqualToEnum:SDLLockScreenStatusOptional]) {
if (self.config.showInOptionalState && !self.presenter.presented && self.canPresent) {
[self.presenter present];
- } else if (self.presenter.presented) {
+ } else if (!self.config.showInOptionalState && self.presenter.presented) {
[self.presenter dismiss];
}
} else if ([self.lastLockNotification.lockScreenStatus isEqualToEnum:SDLLockScreenStatusOff]) {
diff --git a/SmartDeviceLink/SDLLogFileModuleMap.m b/SmartDeviceLink/SDLLogFileModuleMap.m
index 812c75313..1ac7615d9 100644
--- a/SmartDeviceLink/SDLLogFileModuleMap.m
+++ b/SmartDeviceLink/SDLLogFileModuleMap.m
@@ -22,11 +22,16 @@
[self sdl_lifecycleManagerModule],
[self sdl_lockscreenManagerModule],
[self sdl_streamingMediaManagerModule],
- [self sdl_screenManagerModule]]];
+ [self sdl_streamingMediaAudioTranscoderModule],
+ [self sdl_screenManagerModule],
+ [self sdl_screenManagerTextAndGraphicModule],
+ [self sdl_screenManagerSoftButtonModule],
+ [self sdl_screenManagerMenuModule],
+ [self sdl_screenManagerChoiceSetModule]]];
}
+ (SDLLogFileModule *)sdl_transportModule {
- return [SDLLogFileModule moduleWithName:@"Transport" files:[NSSet setWithArray:@[@"SDLIAPSession", @"SDLIAPTransport", @"SDLStreamDelegate", @"SDLTCPTransport"]]];
+ return [SDLLogFileModule moduleWithName:@"Transport" files:[NSSet setWithArray:@[@"SDLIAPSession", @"SDLIAPTransport", @"SDLSecondaryTransportManager", @"SDLSecondaryTransportPrimaryProtocolHandler", @"SDLStreamDelegate", @"SDLTCPTransport"]]];
}
+ (SDLLogFileModule *)sdl_proxyModule {
@@ -61,11 +66,31 @@
}
+ (SDLLogFileModule *)sdl_streamingMediaManagerModule {
- return [SDLLogFileModule moduleWithName:@"Streaming" files:[NSSet setWithArray:@[@"SDLH264VideoEncoder", @"SDLRAWH264Packetizer", @"SDLRTPH264Packetizer", @"SDLStreamingMediaManager", @"SDLStreamingMediaLifecycleManager", @"SDLTouchManager", @"SDLCarWindow"]]];
+ return [SDLLogFileModule moduleWithName:@"Streaming" files:[NSSet setWithArray:@[@"SDLH264VideoEncoder", @"SDLRAWH264Packetizer", @"SDLRTPH264Packetizer", @"SDLStreamingMediaManager", @"SDLStreamingAudioLifecycleManager", @"SDLStreamingVideoLifecycleManager", @"SDLTouchManager", @"SDLCarWindow"]]];
+}
+
++ (SDLLogFileModule *)sdl_streamingMediaAudioTranscoderModule {
+ return [SDLLogFileModule moduleWithName:@"Streaming/Audio Transcode" files:[NSSet setWithArray:@[@"SDLAudioStreamManager", @"SDLPCMAudioConverter"]]];
}
+ (SDLLogFileModule *)sdl_screenManagerModule {
- return [SDLLogFileModule moduleWithName:@"Screen" files:[NSSet setWithArray:@[@"SDLTextAndGraphicManager", @"SDLSoftButtonManager", @"SDLScreenManager", @"SDLSoftButtonObject", @"SDLSoftButtonState", @"SDLMenuManager", @"SDLVoiceCommandManager"]]];
+ return [SDLLogFileModule moduleWithName:@"Screen" files:[NSSet setWithArray:@[@"SDLScreenManager"]]];
+}
+
++ (SDLLogFileModule *)sdl_screenManagerTextAndGraphicModule {
+ return [SDLLogFileModule moduleWithName:@"Screen/TextAndGraphic" files:[NSSet setWithArray:@[@"SDLTextAndGraphicManager"]]];
+}
+
++ (SDLLogFileModule *)sdl_screenManagerSoftButtonModule {
+ return [SDLLogFileModule moduleWithName:@"Screen/SoftButton" files:[NSSet setWithArray:@[@"SDLSoftButtonManager", @"SDLSoftButtonObject", @"SDLSoftButtonState"]]];
+}
+
++ (SDLLogFileModule *)sdl_screenManagerMenuModule {
+ return [SDLLogFileModule moduleWithName:@"Screen/Menu" files:[NSSet setWithArray:@[@"SDLMenuManager", @"SDLVoiceCommandManager"]]];
+}
+
++ (SDLLogFileModule *)sdl_screenManagerChoiceSetModule {
+ return [SDLLogFileModule moduleWithName:@"Screen/ChoiceSet" files:[NSSet setWithArray:@[@"SDLChoiceSetManager", @"SDLCheckChoiceVROptionalOperation", @"SDLDeleteChoicesOperation", @"SDLPreloadChoicesOperation", @"SDLPresentChoiceSetOperation", @"SDLPresentKeyboardOperation", @"SDLChoiceSet"]]];
}
diff --git a/SmartDeviceLink/SDLManager.m b/SmartDeviceLink/SDLManager.m
index e30ae87ea..fa7c9e8e0 100644
--- a/SmartDeviceLink/SDLManager.m
+++ b/SmartDeviceLink/SDLManager.m
@@ -7,6 +7,7 @@
#import "NSMapTable+Subscripting.h"
#import "SDLConfiguration.h"
#import "SDLConnectionManagerType.h"
+#import "SDLFileManagerConfiguration.h"
#import "SDLLifecycleConfiguration.h"
#import "SDLLifecycleManager.h"
#import "SDLLockScreenConfiguration.h"
@@ -39,7 +40,7 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark Lifecycle
- (instancetype)init {
- return [self initWithConfiguration:[SDLConfiguration configurationWithLifecycle:[SDLLifecycleConfiguration defaultConfigurationWithAppName:@"SDL APP" appId:@"001"] lockScreen:[SDLLockScreenConfiguration enabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration]] delegate:nil];
+ return [self initWithConfiguration:[SDLConfiguration configurationWithLifecycle:[SDLLifecycleConfiguration defaultConfigurationWithAppName:@"SDL APP" fullAppId:@"001"] lockScreen:[SDLLockScreenConfiguration enabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration]] delegate:nil];
}
- (instancetype)initWithConfiguration:(SDLConfiguration *)configuration delegate:(nullable id<SDLManagerDelegate>)delegate {
diff --git a/SmartDeviceLink/SDLMassageCushion.h b/SmartDeviceLink/SDLMassageCushion.h
new file mode 100644
index 000000000..f4886d312
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageCushion.h
@@ -0,0 +1,35 @@
+// SDLMassageCushion.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * The List possible cushions of a multi-contour massage seat.
+ */
+typedef SDLEnum SDLMassageCushion SDL_SWIFT_ENUM;
+
+/**
+ * @abstract TOP LUMBAR cushions of a multi-contour massage seat
+ */
+extern SDLMassageCushion const SDLMassageCushionTopLumbar;
+
+/**
+ * @abstract MIDDLE LUMBAR cushion of a multi-contour massage seat
+ */
+extern SDLMassageCushion const SDLMassageCushionMiddleLumbar;
+
+/**
+ * @abstract BOTTOM LUMBAR cushion of a multi-contour massage seat
+ */
+extern SDLMassageCushion const SDLMassageCushionBottomLumbar;
+
+/**
+ * @abstract BACK BOLSTERS cushion of a multi-contour massage seat
+ */
+extern SDLMassageCushion const SDLMassageCushionBackBolsters;
+
+/**
+ * @abstract SEAT BOLSTERS cushion of a multi-contour massage seat
+ */
+extern SDLMassageCushion const SDLMassageCushionSeatBolsters;
+
diff --git a/SmartDeviceLink/SDLMassageCushion.m b/SmartDeviceLink/SDLMassageCushion.m
new file mode 100644
index 000000000..0b8162619
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageCushion.m
@@ -0,0 +1,10 @@
+// SDLMassageCushion.m
+//
+
+#import "SDLMassageCushion.h"
+
+SDLMassageCushion const SDLMassageCushionTopLumbar = @"TOP_LUMBAR";
+SDLMassageCushion const SDLMassageCushionMiddleLumbar = @"MIDDLE_LUMBAR";
+SDLMassageCushion const SDLMassageCushionBottomLumbar = @"BOTTOM_LUMBAR";
+SDLMassageCushion const SDLMassageCushionBackBolsters = @"BACK_BOLSTERS";
+SDLMassageCushion const SDLMassageCushionSeatBolsters = @"SEAT_BOLSTERS";
diff --git a/SmartDeviceLink/SDLMassageCushionFirmness.h b/SmartDeviceLink/SDLMassageCushionFirmness.h
new file mode 100644
index 000000000..d8bb5d48c
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageCushionFirmness.h
@@ -0,0 +1,40 @@
+// SDLMassageCushionFirmness.h
+//
+
+#import "SDLRPCStruct.h"
+#import "SDLMassageCushion.h"
+/**
+ * The intensity or firmness of a cushion.
+ */
+
+NS_ASSUME_NONNULL_BEGIN
+@interface SDLMassageCushionFirmness : SDLRPCStruct
+
+
+/**
+ Constructs a newly allocated SDLMassageCushionFirmness object with cushion and firmness
+
+ @param cushion The cushion type for a multi-contour massage seat
+ @param firmness The firmness value for the multi-contour massage seat, MinValue: 0 MaxValue: 100
+ @return An instance of the SDLMassageCushionFirmness class
+ */
+- (instancetype)initWithMassageCushion:(SDLMassageCushion)cushion firmness:(UInt8)firmness;
+
+/**
+ * @abstract cushion of a multi-contour massage seat.
+ *
+ * @see SDLMassageCushion
+ */
+@property (strong, nonatomic) SDLMassageCushion cushion;
+
+/**
+ * @abstract zone of a multi-contour massage seat.
+ *
+ * Required, MinValue: 0 MaxValue: 100
+ *
+ */
+@property (strong, nonatomic) NSNumber<SDLInt> *firmness;
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/SmartDeviceLink/SDLMassageCushionFirmness.m b/SmartDeviceLink/SDLMassageCushionFirmness.m
new file mode 100644
index 000000000..480f13184
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageCushionFirmness.m
@@ -0,0 +1,42 @@
+// SDLMassageCushionFirmness.m
+//
+
+#import "SDLNames.h"
+#import "SDLMassageCushionFirmness.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLMassageCushionFirmness
+
+- (instancetype)initWithMassageCushion:(SDLMassageCushion)cushion firmness:(UInt8)firmness {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ self.cushion = cushion;
+ self.firmness = @(firmness);
+
+ return self;
+}
+
+- (void)setCushion:(SDLMassageCushion)cushion {
+ [store sdl_setObject:cushion forName:SDLNameCushion];
+}
+
+- (SDLMassageCushion)cushion {
+ return [store sdl_objectForName:SDLNameCushion];
+}
+
+- (void)setFirmness:(NSNumber<SDLInt> *)firmness {
+ [store sdl_setObject:firmness forName:SDLNameFirmness];
+}
+
+- (NSNumber<SDLInt> *)firmness {
+ return [store sdl_objectForName:SDLNameFirmness];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLMassageMode.h b/SmartDeviceLink/SDLMassageMode.h
new file mode 100644
index 000000000..bcd0055ee
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageMode.h
@@ -0,0 +1,25 @@
+// SDLMassageMode.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * The List possible modes of a massage zone.
+ */
+typedef SDLEnum SDLMassageMode SDL_SWIFT_ENUM;
+
+/**
+ * @abstract Massage Mode Status : OFF
+ */
+extern SDLMassageMode const SDLMassageModeOff;
+
+/**
+ * @abstract Massage Mode Status : LOW
+ */
+extern SDLMassageMode const SDLMassageModeLow;
+
+/**
+ * @abstract Massage Mode Status : HIGH
+ */
+extern SDLMassageMode const SDLMassageModeHigh;
+
diff --git a/SmartDeviceLink/SDLMassageMode.m b/SmartDeviceLink/SDLMassageMode.m
new file mode 100644
index 000000000..782aa6681
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageMode.m
@@ -0,0 +1,9 @@
+// SDLMassageMode.m
+//
+
+#import "SDLMassageMode.h"
+
+SDLMassageMode const SDLMassageModeOff = @"OFF";
+SDLMassageMode const SDLMassageModeLow = @"LOW";
+SDLMassageMode const SDLMassageModeHigh = @"HIGH";
+
diff --git a/SmartDeviceLink/SDLMassageModeData.h b/SmartDeviceLink/SDLMassageModeData.h
new file mode 100644
index 000000000..25d3d0dfa
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageModeData.h
@@ -0,0 +1,39 @@
+// SDLMassageModeData.h
+//
+
+#import "SDLRPCStruct.h"
+#import "SDLMassageZone.h"
+#import "SDLMassageMode.h"
+
+/**
+ * Specify the mode of a massage zone.
+ */
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLMassageModeData : SDLRPCStruct
+
+/**
+ * @abstract Constructs a newly allocated SDLMassageModeData object with massageMode and massageZone
+ */
+- (instancetype)initWithMassageMode:(SDLMassageMode)massageMode massageZone:(SDLMassageZone)massageZone;
+
+/**
+* @abstract mode of a massage zone
+*
+* @see SDLMassageMode
+*
+*/
+@property (strong, nonatomic) SDLMassageMode massageMode;
+
+/**
+ * @abstract zone of a multi-contour massage seat.
+ *
+ * @see SDLMassageZone
+ *
+ */
+@property (strong, nonatomic) SDLMassageZone massageZone;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLMassageModeData.m b/SmartDeviceLink/SDLMassageModeData.m
new file mode 100644
index 000000000..83046f3f2
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageModeData.m
@@ -0,0 +1,41 @@
+// SDLMassageModeData.m
+//
+
+#import "SDLNames.h"
+#import "SDLMassageModeData.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLMassageModeData
+
+- (instancetype)initWithMassageMode:(SDLMassageMode)massageMode massageZone:(SDLMassageZone)massageZone {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ self.massageMode = massageMode;
+ self.massageZone = massageZone;
+
+ return self;
+}
+
+- (void)setMassageMode:(SDLMassageMode)massageMode {
+ [store sdl_setObject:massageMode forName:SDLNameMassageMode];
+}
+
+- (SDLMassageMode)massageMode {
+ return [store sdl_objectForName:SDLNameMassageMode];
+}
+
+- (void)setMassageZone:(SDLMassageZone)massageZone {
+ [store sdl_setObject:massageZone forName:SDLNameMassageZone];
+}
+
+- (SDLMassageZone)massageZone {
+ return [store sdl_objectForName:SDLNameMassageZone];
+}
+
+@end
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLMassageZone.h b/SmartDeviceLink/SDLMassageZone.h
new file mode 100644
index 000000000..06b7aa438
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageZone.h
@@ -0,0 +1,20 @@
+// SDLMassageZone.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * List possible zones of a multi-contour massage seat.
+ */
+typedef SDLEnum SDLMassageZone SDL_SWIFT_ENUM;
+
+/**
+ * @abstract The back of a multi-contour massage seat. or SEAT_BACK
+ */
+extern SDLMassageZone const SDLMassageZoneLumbar;
+
+/**
+ * @abstract The bottom a multi-contour massage seat. or SEAT_BOTTOM
+ */
+extern SDLMassageZone const SDLMassageZoneSeatCushion;
+
diff --git a/SmartDeviceLink/SDLMassageZone.m b/SmartDeviceLink/SDLMassageZone.m
new file mode 100644
index 000000000..26f9e0a85
--- /dev/null
+++ b/SmartDeviceLink/SDLMassageZone.m
@@ -0,0 +1,7 @@
+// SDLMassageZone.m
+//
+
+#import "SDLMassageZone.h"
+
+SDLMassageZone const SDLMassageZoneLumbar = @"LUMBAR";
+SDLMassageZone const SDLMassageZoneSeatCushion = @"SEAT_CUSHION";
diff --git a/SmartDeviceLink/SDLMenuCell.h b/SmartDeviceLink/SDLMenuCell.h
index 80edc70b1..1c9c8dcbc 100644
--- a/SmartDeviceLink/SDLMenuCell.h
+++ b/SmartDeviceLink/SDLMenuCell.h
@@ -43,8 +43,35 @@ typedef void(^SDLMenuCellSelectionHandler)(SDLTriggerSource triggerSource);
*/
@property (copy, nonatomic, readonly, nullable) NSArray<SDLMenuCell *> *subCells;
+/**
+ Create a menu cell that has no subcells.
+
+ @param title The cell's primary text
+ @param icon The cell's image
+ @param voiceCommands Voice commands that will activate the menu cell
+ @param handler The code that will be run when the menu cell is selected
+ @return The menu cell
+ */
- (instancetype)initWithTitle:(NSString *)title icon:(nullable SDLArtwork *)icon voiceCommands:(nullable NSArray<NSString *> *)voiceCommands handler:(SDLMenuCellSelectionHandler)handler;
-- (instancetype)initWithTitle:(NSString *)title subCells:(NSArray<SDLMenuCell *> *)subCells;
+
+/**
+ Create a menu cell that has subcells and when selected will go into a deeper part of the menu
+
+ @param title The cell's primary text
+ @param subCells The subcells that will appear when the cell is selected
+ @return The menu cell
+ */
+- (instancetype)initWithTitle:(NSString *)title subCells:(NSArray<SDLMenuCell *> *)subCells __deprecated_msg(("Use initWithTitle:icon:subcells: instead"));
+
+/**
+ Create a menu cell that has subcells and when selected will go into a deeper part of the menu
+
+ @param title The cell's primary text
+ @param icon The cell's image
+ @param subCells The subcells that will appear when the cell is selected
+ @return The menu cell
+ */
+- (instancetype)initWithTitle:(NSString *)title icon:(nullable SDLArtwork *)icon subCells:(NSArray<SDLMenuCell *> *)subCells;
@end
diff --git a/SmartDeviceLink/SDLMenuCell.m b/SmartDeviceLink/SDLMenuCell.m
index 0d2d9f03e..cc7bfd53c 100644
--- a/SmartDeviceLink/SDLMenuCell.m
+++ b/SmartDeviceLink/SDLMenuCell.m
@@ -37,10 +37,15 @@ NS_ASSUME_NONNULL_BEGIN
}
- (instancetype)initWithTitle:(NSString *)title subCells:(NSArray<SDLMenuCell *> *)subCells {
+ return [self initWithTitle:title icon:nil subCells:subCells];
+}
+
+- (instancetype)initWithTitle:(NSString *)title icon:(nullable SDLArtwork *)icon subCells:(NSArray<SDLMenuCell *> *)subCells {
self = [super init];
if (!self) { return nil; }
_title = title;
+ _icon = icon;
_subCells = subCells;
_cellId = UINT32_MAX;
diff --git a/SmartDeviceLink/SDLMenuManager.m b/SmartDeviceLink/SDLMenuManager.m
index 4ad83d939..aa8528a17 100644
--- a/SmartDeviceLink/SDLMenuManager.m
+++ b/SmartDeviceLink/SDLMenuManager.m
@@ -117,16 +117,28 @@ UInt32 const MenuCellIdMin = 1;
self.waitingOnHMIUpdate = NO;
- // Check for duplicate titles
NSMutableSet *titleCheckSet = [NSMutableSet set];
+ NSMutableSet<NSString *> *allMenuVoiceCommands = [NSMutableSet set];
+ NSUInteger voiceCommandCount = 0;
for (SDLMenuCell *cell in menuCells) {
[titleCheckSet addObject:cell.title];
+ if (cell.voiceCommands == nil) { continue; }
+ [allMenuVoiceCommands addObjectsFromArray:cell.voiceCommands];
+ voiceCommandCount += cell.voiceCommands.count;
}
+
+ // Check for duplicate titles
if (titleCheckSet.count != menuCells.count) {
SDLLogE(@"Not all cell titles are unique. The menu will not be set.");
return;
}
+ // Check for duplicate voice recognition commands
+ if (allMenuVoiceCommands.count != voiceCommandCount) {
+ SDLLogE(@"Attempted to create a menu with duplicate voice commands. Voice commands must be unique. The menu will not be set.");
+ return;
+ }
+
// Set the ids
self.lastMenuId = MenuCellIdMin;
[self sdl_updateIdsOnMenuCells:menuCells parentId:ParentIdNotFound];
@@ -318,7 +330,7 @@ UInt32 const MenuCellIdMin = 1;
NSMutableArray<SDLRPCRequest *> *mutableCommands = [NSMutableArray array];
[cells enumerateObjectsUsingBlock:^(SDLMenuCell * _Nonnull cell, NSUInteger index, BOOL * _Nonnull stop) {
if (cell.subCells.count > 0) {
- [mutableCommands addObject:[self sdl_subMenuCommandForMenuCell:cell position:(UInt16)index]];
+ [mutableCommands addObject:[self sdl_subMenuCommandForMenuCell:cell withArtwork:shouldHaveArtwork position:(UInt16)index]];
} else {
[mutableCommands addObject:[self sdl_commandForMenuCell:cell withArtwork:shouldHaveArtwork position:(UInt16)index]];
}
@@ -342,7 +354,7 @@ UInt32 const MenuCellIdMin = 1;
NSMutableArray<SDLRPCRequest *> *mutableCommands = [NSMutableArray array];
[cells enumerateObjectsUsingBlock:^(SDLMenuCell * _Nonnull cell, NSUInteger index, BOOL * _Nonnull stop) {
if (cell.subCells.count > 0) {
- [mutableCommands addObject:[self sdl_subMenuCommandForMenuCell:cell position:(UInt16)index]];
+ [mutableCommands addObject:[self sdl_subMenuCommandForMenuCell:cell withArtwork:shouldHaveArtwork position:(UInt16)index]];
[mutableCommands addObjectsFromArray:[self sdl_allCommandsForCells:cell.subCells withArtwork:shouldHaveArtwork]];
} else {
[mutableCommands addObject:[self sdl_commandForMenuCell:cell withArtwork:shouldHaveArtwork position:(UInt16)index]];
@@ -362,17 +374,15 @@ UInt32 const MenuCellIdMin = 1;
command.menuParams = params;
command.vrCommands = cell.voiceCommands;
- command.cmdIcon = (cell.icon && shouldHaveArtwork) ? [[SDLImage alloc] initWithName:cell.icon.name] : nil;
+ command.cmdIcon = (cell.icon && shouldHaveArtwork) ? [[SDLImage alloc] initWithName:cell.icon.name isTemplate:cell.icon.isTemplate] : nil;
command.cmdID = @(cell.cellId);
return command;
}
-- (SDLAddSubMenu *)sdl_subMenuCommandForMenuCell:(SDLMenuCell *)cell position:(UInt16)position {
- SDLAddSubMenu *submenu = [[SDLAddSubMenu alloc] initWithId:cell.cellId menuName:cell.title];
- submenu.position = @(position);
-
- return submenu;
+- (SDLAddSubMenu *)sdl_subMenuCommandForMenuCell:(SDLMenuCell *)cell withArtwork:(BOOL)shouldHaveArtwork position:(UInt16)position {
+ SDLImage *icon = (shouldHaveArtwork && (cell.icon.name != nil)) ? [[SDLImage alloc] initWithName:cell.icon.name isTemplate:cell.icon.isTemplate] : nil;
+ return [[SDLAddSubMenu alloc] initWithId:cell.cellId menuName:cell.title menuIcon:icon position:(UInt8)position];
}
#pragma mark - Calling handlers
@@ -403,11 +413,25 @@ UInt32 const MenuCellIdMin = 1;
- (void)sdl_registerResponse:(SDLRPCResponseNotification *)notification {
SDLRegisterAppInterfaceResponse *response = (SDLRegisterAppInterfaceResponse *)notification.response;
+
+ if (!response.success.boolValue) { return; }
+ if (response.displayCapabilities == nil) {
+ SDLLogE(@"RegisterAppInterface succeeded but didn't send a display capabilities. A lot of things will probably break.");
+ return;
+ }
+
self.displayCapabilities = response.displayCapabilities;
}
- (void)sdl_displayLayoutResponse:(SDLRPCResponseNotification *)notification {
SDLSetDisplayLayoutResponse *response = (SDLSetDisplayLayoutResponse *)notification.response;
+
+ if (!response.success.boolValue) { return; }
+ if (response.displayCapabilities == nil) {
+ SDLLogE(@"SetDisplayLayout succeeded but didn't send a display capabilities. A lot of things will probably break.");
+ return;
+ }
+
self.displayCapabilities = response.displayCapabilities;
}
@@ -430,7 +454,9 @@ UInt32 const MenuCellIdMin = 1;
SDLSystemContext oldSystemContext = self.currentSystemContext;
self.currentSystemContext = hmiStatus.systemContext;
- if ([oldSystemContext isEqualToEnum:SDLSystemContextMenu] && ![self.currentSystemContext isEqualToEnum:SDLSystemContextMenu] && ![self.currentHMILevel isEqualToEnum:SDLHMILevelNone]) {
+ if ([oldSystemContext isEqualToEnum:SDLSystemContextMenu]
+ && ![self.currentSystemContext isEqualToEnum:SDLSystemContextMenu]
+ && ![self.currentHMILevel isEqualToEnum:SDLHMILevelNone]) {
if (self.waitingOnHMIUpdate) {
[self setMenuCells:self.waitingUpdateMenuCells];
self.waitingUpdateMenuCells = @[];
diff --git a/SmartDeviceLink/SDLModuleData.h b/SmartDeviceLink/SDLModuleData.h
index fb4a9ecf4..cd652804c 100644
--- a/SmartDeviceLink/SDLModuleData.h
+++ b/SmartDeviceLink/SDLModuleData.h
@@ -7,6 +7,11 @@
@class SDLRadioControlData;
@class SDLClimateControlData;
+@class SDLSeatControlData;
+@class SDLAudioControlData;
+@class SDLHMISettingsControlData;
+@class SDLLightControlData;
+
NS_ASSUME_NONNULL_BEGIN
@@ -15,10 +20,55 @@ NS_ASSUME_NONNULL_BEGIN
*/
@interface SDLModuleData : SDLRPCStruct
+/**
+ Constructs a newly allocated SDLModuleData object with radio control data
+
+ @param radioControlData The radio control data
+ @return An instance of the SDLModuleData class
+ */
- (instancetype)initWithRadioControlData:(SDLRadioControlData *)radioControlData;
+
+/**
+ Constructs a newly allocated SDLModuleData object with climate control data
+
+ @param climateControlData The climate control data
+ @return An instance of the SDLModuleData class
+ */
- (instancetype)initWithClimateControlData:(SDLClimateControlData *)climateControlData;
/**
+ Constructs a newly allocated SDLModuleData object with audio control data
+
+ @param audioControlData The audio control data
+ @return An instance of the SDLModuleData class
+ */
+- (instancetype)initWithAudioControlData:(SDLAudioControlData *)audioControlData;
+
+/**
+ Constructs a newly allocated SDLModuleData object with light control data
+
+ @param lightControlData The light control data
+ @return An instance of the SDLModuleData class
+ */
+- (instancetype)initWithLightControlData:(SDLLightControlData *)lightControlData;
+
+/**
+ Constructs a newly allocated SDLModuleData object with hmi settings data
+
+ @param hmiSettingsControlData The hmi settings data
+ @return An instance of the SDLModuleData class
+ */
+- (instancetype)initWithHMISettingsControlData:(SDLHMISettingsControlData *)hmiSettingsControlData;
+
+/**
+ Constructs a newly allocated SDLModuleData object with seat control data
+
+ @param seatControlData The seat control data
+ @return An instance of the SDLModuleData class
+ */
+- (instancetype)initWithSeatControlData:(SDLSeatControlData *)seatControlData;
+
+/**
The moduleType indicates which type of data should be changed and identifies which data object exists in this struct.
For example, if the moduleType is CLIMATE then a "climateControlData" should exist
@@ -41,6 +91,34 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) SDLClimateControlData *climateControlData;
+/**
+ The seat control data
+
+ Optional
+ */
+@property (nullable, strong, nonatomic) SDLSeatControlData *seatControlData;
+
+/**
+ The audio control data
+
+ Optional
+ */
+@property (nullable, strong, nonatomic) SDLAudioControlData *audioControlData;
+
+/**
+ The light control data
+
+ Optional
+ */
+@property (nullable, strong, nonatomic) SDLLightControlData *lightControlData;
+
+/**
+ The hmi control data
+
+ Optional
+ */
+@property (nullable, strong, nonatomic) SDLHMISettingsControlData *hmiSettingsControlData;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLModuleData.m b/SmartDeviceLink/SDLModuleData.m
index 3d3789639..947f8b5a0 100644
--- a/SmartDeviceLink/SDLModuleData.m
+++ b/SmartDeviceLink/SDLModuleData.m
@@ -6,6 +6,10 @@
#import "SDLNames.h"
#import "SDLClimateControlData.h"
#import "SDLRadioControlData.h"
+#import "SDLSeatControlData.h"
+#import "SDLAudioControlData.h"
+#import "SDLLightControlData.h"
+#import "SDLHMISettingsControlData.h"
#import "NSMutableDictionary+Store.h"
NS_ASSUME_NONNULL_BEGIN
@@ -36,6 +40,54 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithAudioControlData:(SDLAudioControlData *)audioControlData {
+ self = [self init];
+ if(!self){
+ return nil;
+ }
+
+ self.moduleType = SDLModuleTypeAudio;
+ self.audioControlData = audioControlData;
+
+ return self;
+}
+
+- (instancetype)initWithLightControlData:(SDLLightControlData *)lightControlData {
+ self = [self init];
+ if(!self){
+ return nil;
+ }
+
+ self.moduleType = SDLModuleTypeLight;
+ self.lightControlData = lightControlData;
+
+ return self;
+}
+
+- (instancetype)initWithHMISettingsControlData:(SDLHMISettingsControlData *)hmiSettingsControlData {
+ self = [self init];
+ if(!self){
+ return nil;
+ }
+
+ self.moduleType = SDLModuleTypeHMISettings;
+ self.hmiSettingsControlData = hmiSettingsControlData;
+
+ return self;
+}
+
+- (instancetype)initWithSeatControlData:(SDLSeatControlData *)seatControlData {
+ self = [self init];
+ if(!self){
+ return nil;
+ }
+
+ self.moduleType = SDLModuleTypeSeat;
+ self.seatControlData = seatControlData;
+
+ return self;
+}
+
- (void)setModuleType:(SDLModuleType)moduleType {
[store sdl_setObject:moduleType forName:SDLNameModuleType];
}
@@ -60,6 +112,38 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameClimateControlData ofClass:SDLClimateControlData.class];
}
+- (void)setSeatControlData:(nullable SDLSeatControlData *)seatControlData {
+ [store sdl_setObject:seatControlData forName:SDLNameSeatControlData];
+}
+
+- (nullable SDLSeatControlData *)seatControlData {
+ return [store sdl_objectForName:SDLNameSeatControlData ofClass:SDLSeatControlData.class];
+}
+
+- (void)setAudioControlData:(nullable SDLAudioControlData *)audioControlData {
+ [store sdl_setObject:audioControlData forName:SDLNameAudioControlData];
+}
+
+- (nullable SDLAudioControlData *)audioControlData {
+ return [store sdl_objectForName:SDLNameAudioControlData ofClass:SDLAudioControlData.class];
+}
+
+- (void)setLightControlData:(nullable SDLLightControlData *)lightControlData {
+ [store sdl_setObject:lightControlData forName:SDLNameLightControlData];
+}
+
+- (nullable SDLLightControlData *)lightControlData {
+ return [store sdl_objectForName:SDLNameLightControlData ofClass:SDLLightControlData.class];
+}
+
+- (void)setHmiSettingsControlData:(nullable SDLHMISettingsControlData *)hmiSettingsControlData {
+ [store sdl_setObject:hmiSettingsControlData forName:SDLNameHmiSettingsControlData];
+}
+
+- (nullable SDLHMISettingsControlData *)hmiSettingsControlData {
+ return [store sdl_objectForName:SDLNameHmiSettingsControlData ofClass:SDLHMISettingsControlData.class];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLModuleType.h b/SmartDeviceLink/SDLModuleType.h
index 508c2fbaa..c69004e8a 100644
--- a/SmartDeviceLink/SDLModuleType.h
+++ b/SmartDeviceLink/SDLModuleType.h
@@ -18,3 +18,24 @@ extern SDLModuleType const SDLModuleTypeClimate;
* A SDLModuleType with the value of *RADIO*
*/
extern SDLModuleType const SDLModuleTypeRadio;
+
+/**
+ * A SDLModuleType with the value of *SEAT*
+ */
+extern SDLModuleType const SDLModuleTypeSeat;
+
+/**
+ * A SDLModuleType with the value of *AUDIO*
+ */
+extern SDLModuleType const SDLModuleTypeAudio;
+
+/**
+ * A SDLModuleType with the value of *LIGHT*
+ */
+extern SDLModuleType const SDLModuleTypeLight;
+
+/**
+ * A SDLModuleType with the value of *HMI_SETTINGS*
+ */
+extern SDLModuleType const SDLModuleTypeHMISettings;
+
diff --git a/SmartDeviceLink/SDLModuleType.m b/SmartDeviceLink/SDLModuleType.m
index 30744e0c2..d23b19534 100644
--- a/SmartDeviceLink/SDLModuleType.m
+++ b/SmartDeviceLink/SDLModuleType.m
@@ -6,3 +6,7 @@
SDLModuleType const SDLModuleTypeClimate = @"CLIMATE";
SDLModuleType const SDLModuleTypeRadio = @"RADIO";
+SDLModuleType const SDLModuleTypeSeat = @"SEAT";
+SDLModuleType const SDLModuleTypeAudio = @"AUDIO";
+SDLModuleType const SDLModuleTypeLight = @"LIGHT";
+SDLModuleType const SDLModuleTypeHMISettings = @"HMI_SETTINGS";
diff --git a/SmartDeviceLink/SDLNames.h b/SmartDeviceLink/SDLNames.h
index a1790afa0..514899a7c 100644
--- a/SmartDeviceLink/SDLNames.h
+++ b/SmartDeviceLink/SDLNames.h
@@ -13,6 +13,7 @@ extern SDLName const SDLNameACEnableAvailable;
extern SDLName const SDLNameACMaxEnable;
extern SDLName const SDLNameACMaxEnableAvailable;
extern SDLName const SDLNameAccelerationPedalPosition;
+extern SDLName const SDLNameAction;
extern SDLName const SDLNameActual;
extern SDLName const SDLNameAddCommand;
extern SDLName const SDLNameAddress;
@@ -26,8 +27,10 @@ extern SDLName const SDLNameAlertText1;
extern SDLName const SDLNameAlertText2;
extern SDLName const SDLNameAlertText3;
extern SDLName const SDLNameAlignment;
+extern SDLName const SDLNameAllocatedModules;
extern SDLName const SDLNameAllowed;
extern SDLName const SDLNameAltitude;
+extern SDLName const SDLNameAltitudeMeters;
extern SDLName const SDLNameAmbientLightSensorStatus;
extern SDLName const SDLNameAmbientLightStatus;
extern SDLName const SDLNameAppBundleId;
@@ -37,9 +40,12 @@ extern SDLName const SDLNameAppInfo;
extern SDLName const SDLNameAppName;
extern SDLName const SDLNameAppDisplayName;
extern SDLName const SDLNameAppVersion;
+extern SDLName const SDLNameAudioControlCapabilities;
+extern SDLName const SDLNameAudioControlData;
extern SDLName const SDLNameAudioPassThruCapabilities;
extern SDLName const SDLNameAudioPassThruDisplayText1;
extern SDLName const SDLNameAudioPassThruDisplayText2;
+extern SDLName const SDLNameAudioStreamingIndicator;
extern SDLName const SDLNameAudioStreamingState;
extern SDLName const SDLNameAudioType;
extern SDLName const SDLNameAutoCompleteText;
@@ -48,11 +54,17 @@ extern SDLName const SDLNameAutoModeEnableAvailable;
extern SDLName const SDLNameAuxECallNotificationStatus;
extern SDLName const SDLNameAvailableHDs;
extern SDLName const SDLNameAvailableHDsAvailable;
+extern SDLName const SDLNameBackgroundColor;
+extern SDLName const SDLNameBackTiltAngle;
+extern SDLName const SDLNameBackTiltAngleAvailable;
+extern SDLName const SDLNameBackVerticalPosition;
+extern SDLName const SDLNameBackVerticalPositionAvailable;
extern SDLName const SDLNameBand;
extern SDLName const SDLNameBatteryLevelStatus;
extern SDLName const SDLNameBeltStatus;
extern SDLName const SDLNameBitsPerSample;
extern SDLName const SDLNameBodyInformation;
+extern SDLName const SDLNameBlue;
extern SDLName const SDLNameBluetoothIconOn;
extern SDLName const SDLNameBulkData;
extern SDLName const SDLNameButtonCapabilities;
@@ -60,11 +72,19 @@ extern SDLName const SDLNameButtonEventMode;
extern SDLName const SDLNameButtonName;
extern SDLName const SDLNameButtonPress;
extern SDLName const SDLNameButtonPressMode;
+extern SDLName const SDLNameColor;
+extern SDLName const SDLNameCoolingEnabled;
+extern SDLName const SDLNameCoolingEnabledAvailable;
+extern SDLName const SDLNameCoolingLevel;
+extern SDLName const SDLNameCoolingLevelAvailable;
extern SDLName const SDLNameCoordinate;
extern SDLName const SDLNameCallActive;
extern SDLName const SDLNameCarModeStatus;
extern SDLName const SDLNameCarrier;
extern SDLName const SDLNameChangeRegistration;
+extern SDLName const SDLNameChannelId;
+extern SDLName const SDLNameChannelName;
+extern SDLName const SDLNameChannelSetting;
extern SDLName const SDLNameCharacterSet;
extern SDLName const SDLNameChoiceId;
extern SDLName const SDLNameChoiceSet;
@@ -80,15 +100,18 @@ extern SDLName const SDLNameCompassDirection;
extern SDLName const SDLNameCorrelationId;
extern SDLName const SDLNameCountryCode;
extern SDLName const SDLNameCountryName;
+extern SDLName const SDLNameCRC;
extern SDLName const SDLNameCreateInteractionChoiceSet;
extern SDLName const SDLNameClockText;
extern SDLName const SDLNameCurrentTemperature;
+extern SDLName const SDLNameCushion;
extern SDLName const SDLNameCustomButtonId;
extern SDLName const SDLNameCustomPresets;
extern SDLName const SDLNameData;
extern SDLName const SDLNameDataResult;
extern SDLName const SDLNameDataType;
extern SDLName const SDLNameDay;
+extern SDLName const SDLNameDayColorScheme;
extern SDLName const SDLNameDefrostZone;
extern SDLName const SDLNameDefrostZoneAvailable;
extern SDLName const SDLNameDeleteCommand;
@@ -96,6 +119,8 @@ extern SDLName const SDLNameDeleteFile;
extern SDLName const SDLNameDeleteInteractionChoiceSet;
extern SDLName const SDLNameDeleteSubMenu;
extern SDLName const SDLNameDeliveryMode;
+extern SDLName const SDLNameDensity;
+extern SDLName const SDLNameDensityAvailable;
extern SDLName const SDLNameDesiredTemperature;
extern SDLName const SDLNameDesiredTemperatureAvailable;
extern SDLName const SDLNameDeviceInfo;
@@ -107,11 +132,16 @@ extern SDLName const SDLNameDIDLocation;
extern SDLName const SDLNameDIDResult;
extern SDLName const SDLNameDimension;
extern SDLName const SDLNameDisplayCapabilities;
+extern SDLName const SDLNameDisplayMode;
+extern SDLName const SDLNameDisplayModeUnitAvailable;
extern SDLName const SDLNameDisplayLayout;
+extern SDLName const SDLNameDisplayName;
extern SDLName const SDLNameDisplayType;
+extern SDLName const SDLNameDistanceUnit;
extern SDLName const SDLNameDistanceToEmpty;
extern SDLName const SDLNameDistanceToManeuver;
extern SDLName const SDLNameDistanceToManeuverScale;
+extern SDLName const SDLNameDistanceUnitAvailable;
extern SDLName const SDLNameDoublePressAvailable;
extern SDLName const SDLNameDriverAirbagDeployed;
extern SDLName const SDLNameDriverBeltDeployed;
@@ -134,27 +164,39 @@ extern SDLName const SDLNameECallInfo;
extern SDLName const SDLNameECallNotificationStatus;
extern SDLName const SDLNameECUHeader;
extern SDLName const SDLNameECUName;
+extern SDLName const SDLNameElectronicParkBrakeStatus;
extern SDLName const SDLNameEmergencyEvent;
extern SDLName const SDLNameEmergencyEventType;
extern SDLName const SDLNameEncodedSyncPData;
extern SDLName const SDLNameEndAudioPassThru;
extern SDLName const SDLNameEndTime;
+extern SDLName const SDLNameEngineOilLife;
extern SDLName const SDLNameEngineTorque;
+extern SDLName const SDLNameEqualizerAvailable;
+extern SDLName const SDLNameEqualizerMaxChannelId;
+extern SDLName const SDLNameEqualizerSettings;
extern SDLName const SDLNameETA;
extern SDLName const SDLNameEvent;
extern SDLName const SDLNameExternalTemperature;
extern SDLName const SDLNameFanSpeed;
extern SDLName const SDLNameFanSpeedAvailable;
+extern SDLName const SDLNameFCCFacilityId;
extern SDLName const SDLNameFilename;
extern SDLName const SDLNameFilenames;
extern SDLName const SDLNameFileType;
+extern SDLName const SDLNameFirmness;
extern SDLName const SDLNameFirmwareRevision;
+extern SDLName const SDLNameFreeModules;
extern SDLName const SDLNameFrequencyInteger;
extern SDLName const SDLNameFrequencyFraction;
+extern SDLName const SDLNameFrontVerticalPosition;
+extern SDLName const SDLNameFrontVerticalPositionAvailable;
extern SDLName const SDLNameFuelCutoffStatus;
extern SDLName const SDLNameFuelLevel;
extern SDLName const SDLNameFuelLevelState;
extern SDLName const SDLNameFuelMaintenanceMode;
+extern SDLName const SDLNameFuelRange;
+extern SDLName const SDLNameFullAppID;
extern SDLName const SDLNameGenericResponse;
extern SDLName const SDLNameGetDTCs;
extern SDLName const SDLNameGetInteriorVehicleData;
@@ -165,6 +207,7 @@ extern SDLName const SDLNameGetWayPointsEnabled;
extern SDLName const SDLNameGPS;
extern SDLName const SDLNameGraphic;
extern SDLName const SDLNameGraphicSupported;
+extern SDLName const SDLNameGreen;
extern SDLName const SDLNameHapticRectData;
extern SDLName const SDLNameHapticSpatialDataSupported;
extern SDLName const SDLNameHardware;
@@ -172,19 +215,42 @@ extern SDLName const SDLNameHashId;
extern SDLName const SDLNameHDOP;
extern SDLName const SDLNameHDChannel;
extern SDLName const SDLNameHDChannelAvailable;
+extern SDLName const SDLNameHDRadioEnable;
+extern SDLName const SDLNameHDRadioEnableAvailable;
extern SDLName const SDLNameHeading;
extern SDLName const SDLNameHeadLampStatus;
+extern SDLName const SDLNameHeadSupportHorizontalPosition;
+extern SDLName const SDLNameHeadSupportHorizontalPositionAvailable;
+extern SDLName const SDLNameHeadSupportVerticalPosition;
+extern SDLName const SDLNameHeadSupportVerticalPositionAvailable;
+extern SDLName const SDLNameHeatingLevel;
+extern SDLName const SDLNameHeatingLevelAvailable;
+extern SDLName const SDLNameHeatingEnabled;
+extern SDLName const SDLNameHeatingEnabledAvailable;
+extern SDLName const SDLNameHeatedSteeringWheelAvailable;
+extern SDLName const SDLNameHeatedWindshieldAvailable;
+extern SDLName const SDLNameHeatedRearWindowAvailable;
+extern SDLName const SDLNameHeatedMirrorsAvailable;
+extern SDLName const SDLNameHeatedSteeringWheelEnable;
+extern SDLName const SDLNameHeatedWindshieldEnable;
+extern SDLName const SDLNameHeatedRearWindowEnable;
+extern SDLName const SDLNameHeatedMirrorsEnable;
extern SDLName const SDLNameHeight;
extern SDLName const SDLNameHelpPrompt;
extern SDLName const SDLNameHighBeamsOn;
+extern SDLName const SDLNameHMICapabilities;
extern SDLName const SDLNameHMIDisplayLanguage;
extern SDLName const SDLNameHMIDisplayLanguageDesired;
extern SDLName const SDLNameHMILevel;
extern SDLName const SDLNameHMIPermissions;
-extern SDLName const SDLNameHMICapabilities;
+extern SDLName const SDLNameHmiSettingsControlCapabilities;
+extern SDLName const SDLNameHmiSettingsControlData;
extern SDLName const SDLNameHMIZoneCapabilities;
+extern SDLName const SDLNameHorizontalPosition;
+extern SDLName const SDLNameHorizontalPositionAvailable;
extern SDLName const SDLNameHour;
extern SDLName const SDLNameHours;
+extern SDLName const SDLNameIconResumed;
extern SDLName const SDLNameId;
extern SDLName const SDLNameIgnitionStableStatus;
extern SDLName const SDLNameIgnitionStatus;
@@ -192,6 +258,7 @@ extern SDLName const SDLNameImage;
extern SDLName const SDLNameImageFields;
extern SDLName const SDLNameImageResolution;
extern SDLName const SDLNameImageSupported;
+extern SDLName const SDLNameImageTemplate;
extern SDLName const SDLNameImageType;
extern SDLName const SDLNameImageTypeSupported;
extern SDLName const SDLNameInfo;
@@ -207,9 +274,12 @@ extern SDLName const SDLNameInteractionMode;
extern SDLName const SDLNameIsHighlighted;
extern SDLName const SDLNameIsMediaApplication;
extern SDLName const SDLNameIsSubscribed;
+extern SDLName const SDLNameKeepContext;
+extern SDLName const SDLNameKeepContextAvailable;
extern SDLName const SDLNameKeyboardLayout;
extern SDLName const SDLNameKeyboardProperties;
extern SDLName const SDLNameKeypressMode;
+extern SDLName const SDLNameLabel;
extern SDLName const SDLNameLanguage;
extern SDLName const SDLNameLanguageDesired;
extern SDLName const SDLNameLatitudeDegrees;
@@ -219,6 +289,9 @@ extern SDLName const SDLNameLeftRearInflatableBelted;
extern SDLName const SDLNameLeftRow2BuckleBelted;
extern SDLName const SDLNameLeftRow3BuckleBelted;
extern SDLName const SDLNameLength;
+extern SDLName const SDLNameLightControlCapabilities;
+extern SDLName const SDLNameLightControlData;
+extern SDLName const SDLNameLightState;
extern SDLName const SDLNameLimitedCharacterList;
extern SDLName const SDLNameListFiles;
extern SDLName const SDLNameLocality;
@@ -243,6 +316,14 @@ extern SDLName const SDLNameMajorVersion;
extern SDLName const SDLNameMake;
extern SDLName const SDLNameManeuverComplete;
extern SDLName const SDLNameManualTextEntry;
+extern SDLName const SDLNameMassageCushionFirmness;
+extern SDLName const SDLNameMassageCushionFirmnessAvailable;
+extern SDLName const SDLNameMassageEnabled;
+extern SDLName const SDLNameMassageEnabledAvailable;
+extern SDLName const SDLNameMassageMode;
+extern SDLName const SDLNameMassageModeAvailable;
+extern SDLName const SDLNameMemoryAvailable;
+extern SDLName const SDLNameMassageZone;
extern SDLName const SDLNameMaxBitrate;
extern SDLName const SDLNameMaxDuration;
extern SDLName const SDLNameMaximumChangeVelocity;
@@ -250,6 +331,7 @@ extern SDLName const SDLNameMaxNumberRFCOMMPorts;
extern SDLName const SDLNameMediaClock;
extern SDLName const SDLNameMediaClockFormats;
extern SDLName const SDLNameMediaTrack;
+extern SDLName const SDLNameMemory;
extern SDLName const SDLNameMenuIcon;
extern SDLName const SDLNameMenuId;
extern SDLName const SDLNameMenuName;
@@ -286,6 +368,7 @@ extern SDLName const SDLNameNavigationText1;
extern SDLName const SDLNameNavigationText2;
extern SDLName const SDLNameNextTurnIcon;
extern SDLName const SDLNameNGNMediaScreenAppName;
+extern SDLName const SDLNameNightColorScheme;
extern SDLName const SDLNameNotification;
extern SDLName const SDLNameNumber;
extern SDLName const SDLNameNumberCustomPresetsAvailable;
@@ -306,6 +389,7 @@ extern SDLName const SDLNameOnKeyboardInput;
extern SDLName const SDLNameOnLanguageChange;
extern SDLName const SDLNameOnLockScreenStatus;
extern SDLName const SDLNameOnPermissionsChange;
+extern SDLName const SDLNameOnRCStatus;
extern SDLName const SDLNameOnScreenPresetsAvailable;
extern SDLName const SDLNameOnSyncPData;
extern SDLName const SDLNameOnSystemRequest;
@@ -353,6 +437,7 @@ extern SDLName const SDLNamePressAvailable;
extern SDLName const SDLNamePressure;
extern SDLName const SDLNamePressureTelltale;
extern SDLName const SDLNamePrimaryAudioSource;
+extern SDLName const SDLNamePrimaryColor;
extern SDLName const SDLNamePRNDL;
extern SDLName const SDLNameProgressIndicator;
extern SDLName const SDLNameProperties;
@@ -365,6 +450,7 @@ extern SDLName const SDLNameRadioControlData;
extern SDLName const SDLNameRadioEnable;
extern SDLName const SDLNameRadioEnableAvailable;
extern SDLName const SDLNameRadioFrequencyAvailable;
+extern SDLName const SDLNameRange;
extern SDLName const SDLNameRDSData;
extern SDLName const SDLNameRDSDataAvailable;
extern SDLName const SDLNameReadDID;
@@ -372,10 +458,12 @@ extern SDLName const SDLNameRearLeftDoorAjar;
extern SDLName const SDLNameRearRightDoorAjar;
extern SDLName const SDLNameReason;
extern SDLName const SDLNameRect;
+extern SDLName const SDLNameRed;
extern SDLName const SDLNameRegion;
extern SDLName const SDLNameRegisterAppInterface;
extern SDLName const SDLNameRemoteControlCapability;
extern SDLName const SDLNameRequest;
+extern SDLName const SDLNameRequestSubType;
extern SDLName const SDLNameRequestType;
extern SDLName const SDLNameReserved;
extern SDLName const SDLNameResetGlobalProperties;
@@ -402,6 +490,9 @@ extern SDLName const SDLNameScrollableMessage;
extern SDLName const SDLNameScrollableMessageBody;
extern SDLName const SDLNameSDLVersion;
extern SDLName const SDLNameSearchAddress;
+extern SDLName const SDLNameSeatControlData;
+extern SDLName const SDLNameSeatControlCapabilities;
+extern SDLName const SDLNameSecondaryColor;
extern SDLName const SDLNameSecondaryGraphic;
extern SDLName const SDLNameSecondaryImage;
extern SDLName const SDLNameSecondaryText;
@@ -425,6 +516,9 @@ extern SDLName const SDLNameSignalChangeThreshold;
extern SDLName const SDLNameSignalChangeThresholdAvailable;
extern SDLName const SDLNameSignalStrength;
extern SDLName const SDLNameSignalStrengthAvailable;
+extern SDLName const SDLNameSiriusXMRadioAvailable;
+extern SDLName const SDLNameSISData;
+extern SDLName const SDLNameSISDataAvailable;
extern SDLName const SDLNameSlider;
extern SDLName const SDLNameSliderFooter;
extern SDLName const SDLNameSliderHeader;
@@ -432,15 +526,24 @@ extern SDLName const SDLNameSliderPosition;
extern SDLName const SDLNameSoftButtonCapabilities;
extern SDLName const SDLNameSoftButtonId;
extern SDLName const SDLNameSoftButtons;
+extern SDLName const SDLNameSource;
+extern SDLName const SDLNameSourceAvailable;
extern SDLName const SDLNameSpaceAvailable;
extern SDLName const SDLNameSpeak;
extern SDLName const SDLNameSpeechCapabilities;
extern SDLName const SDLNameSpeed;
+extern SDLName const SDLNameRGBColorSpaceAvailable;
extern SDLName const SDLNameStartTime;
extern SDLName const SDLNameState;
extern SDLName const SDLNameStateAvailable;
extern SDLName const SDLNameStateOfCharge;
+extern SDLName const SDLNameStationIDNumber;
+extern SDLName const SDLNameStationLongName;
+extern SDLName const SDLNameStationLocation;
+extern SDLName const SDLNameStationMessage;
+extern SDLName const SDLNameStationShortName;
extern SDLName const SDLNameStatus;
+extern SDLName const SDLNameStatusAvailable;
extern SDLName const SDLNameStatusBar;
extern SDLName const SDLNameSteeringWheelAngle;
extern SDLName const SDLNameStereoAudioOutputMuted;
@@ -454,6 +557,7 @@ extern SDLName const SDLNameSubThoroughfare;
extern SDLName const SDLNameSuccess;
extern SDLName const SDLNameSupportedDiagnosticModes;
extern SDLName const SDLNameSupportedFormats;
+extern SDLName const SDLNameSupportedLights;
extern SDLName const SDLNameSyncFileName;
extern SDLName const SDLNameSyncMessageVersion;
extern SDLName const SDLNameSyncPData;
@@ -466,6 +570,8 @@ extern SDLName const SDLNameSystemRequest;
extern SDLName const SDLNameSystemSoftwareVersion;
extern SDLName const SDLNameTrafficAnnouncementIdentification;
extern SDLName const SDLNameTargetId;
+extern SDLName const SDLNameTemperatureUnit;
+extern SDLName const SDLNameTemperatureUnitAvailable;
extern SDLName const SDLNameTemplatesAvailable;
extern SDLName const SDLNameTertiaryText;
extern SDLName const SDLNameText;
@@ -481,6 +587,7 @@ extern SDLName const SDLNameTimezoneMinuteOffset;
extern SDLName const SDLNameTirePressure;
extern SDLName const SDLNameTotalDistance;
extern SDLName const SDLNameTouchEventAvailable;
+extern SDLName const SDLNameTPMS;
extern SDLName const SDLNameTrafficProgramIdentification;
extern SDLName const SDLNameTriggerSource;
extern SDLName const SDLNameTrim;
@@ -490,6 +597,7 @@ extern SDLName const SDLNameTTSChunks;
extern SDLName const SDLNameTTSName;
extern SDLName const SDLNameTurnIcon;
extern SDLName const SDLNameTurnList;
+extern SDLName const SDLNameTurnSignal;
extern SDLName const SDLNameType;
extern SDLName const SDLNameUnit;
extern SDLName const SDLNameUnregisterAppInterface;
@@ -513,14 +621,19 @@ extern SDLName const SDLNameUTCYear;
extern SDLName const SDLNameValue;
extern SDLName const SDLNameVDOP;
extern SDLName const SDLNameVehicleType;
+extern SDLName const SDLNameVerticalPosition;
+extern SDLName const SDLNameVerticalPositionAvailable;
extern SDLName const SDLNameVideoCodec;
extern SDLName const SDLNameVideoProtocol;
extern SDLName const SDLNameVideoStreaming;
extern SDLName const SDLNameVideoStreamingCapability;
+extern SDLName const SDLNameVideoStreamingState;
extern SDLName const SDLNameVentilationMode;
extern SDLName const SDLNameVentilationModeAvailable;
extern SDLName const SDLNameVIN;
extern SDLName const SDLNameVoiceRecognitionOn;
+extern SDLName const SDLNameVolume;
+extern SDLName const SDLNameVolumeAvailable;
extern SDLName const SDLNameVRCapabilities;
extern SDLName const SDLNameVRCommands;
extern SDLName const SDLNameVRHelp;
diff --git a/SmartDeviceLink/SDLNames.m b/SmartDeviceLink/SDLNames.m
index c2fec2b75..62ad20ecf 100644
--- a/SmartDeviceLink/SDLNames.m
+++ b/SmartDeviceLink/SDLNames.m
@@ -11,6 +11,7 @@ SDLName const SDLNameACEnableAvailable = @"acEnableAvailable";
SDLName const SDLNameACMaxEnable = @"acMaxEnable";
SDLName const SDLNameACMaxEnableAvailable = @"acMaxEnableAvailable";
SDLName const SDLNameAccelerationPedalPosition = @"accPedalPosition";
+SDLName const SDLNameAction = @"action";
SDLName const SDLNameActual = @"actual";
SDLName const SDLNameAddCommand = @"AddCommand";
SDLName const SDLNameAddress = @"address";
@@ -25,7 +26,9 @@ SDLName const SDLNameAlertText2 = @"alertText2";
SDLName const SDLNameAlertText3 = @"alertText3";
SDLName const SDLNameAlignment = @"alignment";
SDLName const SDLNameAllowed = @"allowed";
+SDLName const SDLNameAllocatedModules = @"allocatedModules";
SDLName const SDLNameAltitude = @"altitude";
+SDLName const SDLNameAltitudeMeters = @"altitudeMeters";
SDLName const SDLNameAmbientLightSensorStatus = @"ambientLightSensorStatus";
SDLName const SDLNameAmbientLightStatus = @"ambientLightStatus";
SDLName const SDLNameAppBundleId = @"appBundleID";
@@ -35,9 +38,12 @@ SDLName const SDLNameAppInfo = @"appInfo";
SDLName const SDLNameAppName = @"appName";
SDLName const SDLNameAppDisplayName = @"appDisplayName";
SDLName const SDLNameAppVersion = @"appVersion";
+SDLName const SDLNameAudioControlCapabilities = @"audioControlCapabilities";
+SDLName const SDLNameAudioControlData = @"audioControlData";
SDLName const SDLNameAudioPassThruCapabilities = @"audioPassThruCapabilities";
SDLName const SDLNameAudioPassThruDisplayText1 = @"audioPassThruDisplayText1";
SDLName const SDLNameAudioPassThruDisplayText2 = @"audioPassThruDisplayText2";
+SDLName const SDLNameAudioStreamingIndicator = @"audioStreamingIndicator";
SDLName const SDLNameAudioStreamingState = @"audioStreamingState";
SDLName const SDLNameAudioType = @"audioType";
SDLName const SDLNameAutoCompleteText = @"autoCompleteText";
@@ -46,11 +52,17 @@ SDLName const SDLNameAutoModeEnableAvailable = @"autoModeEnableAvailable";
SDLName const SDLNameAuxECallNotificationStatus = @"auxECallNotificationStatus";
SDLName const SDLNameAvailableHDs = @"availableHDs";
SDLName const SDLNameAvailableHDsAvailable = @"availableHDsAvailable";
+SDLName const SDLNameBackgroundColor = @"backgroundColor";
+SDLName const SDLNameBackTiltAngle = @"backTiltAngle";
+SDLName const SDLNameBackTiltAngleAvailable = @"backTiltAngleAvailable";
+SDLName const SDLNameBackVerticalPosition = @"backVerticalPosition";
+SDLName const SDLNameBackVerticalPositionAvailable = @"backVerticalPositionAvailable";
SDLName const SDLNameBand = @"band";
SDLName const SDLNameBatteryLevelStatus = @"battLevelStatus";
SDLName const SDLNameBeltStatus = @"beltStatus";
SDLName const SDLNameBitsPerSample = @"bitsPerSample";
SDLName const SDLNameBodyInformation = @"bodyInformation";
+SDLName const SDLNameBlue = @"blue";
SDLName const SDLNameBluetoothIconOn = @"btIconOn";
SDLName const SDLNameBulkData = @"bulkData";
SDLName const SDLNameButtonCapabilities = @"buttonCapabilities";
@@ -58,11 +70,18 @@ SDLName const SDLNameButtonEventMode = @"buttonEventMode";
SDLName const SDLNameButtonName = @"buttonName";
SDLName const SDLNameButtonPress = @"ButtonPress";
SDLName const SDLNameButtonPressMode = @"buttonPressMode";
+SDLName const SDLNameCoolingEnabled = @"coolingEnabled";
+SDLName const SDLNameCoolingEnabledAvailable = @"coolingEnabledAvailable";
+SDLName const SDLNameCoolingLevel = @"coolingLevel";
+SDLName const SDLNameCoolingLevelAvailable = @"coolingLevelAvailable";
SDLName const SDLNameCoordinate = @"c";
SDLName const SDLNameCallActive = @"callActive";
SDLName const SDLNameCarModeStatus = @"carModeStatus";
SDLName const SDLNameCarrier = @"carrier";
SDLName const SDLNameChangeRegistration = @"ChangeRegistration";
+SDLName const SDLNameChannelId = @"channelId";
+SDLName const SDLNameChannelName = @"channelName";
+SDLName const SDLNameChannelSetting = @"channelSetting";
SDLName const SDLNameCharacterSet = @"characterSet";
SDLName const SDLNameChoiceId = @"choiceID";
SDLName const SDLNameChoiceSet = @"choiceSet";
@@ -72,21 +91,25 @@ SDLName const SDLNameClimateControlData = @"climateControlData";
SDLName const SDLNameClimateControlCapabilities = @"climateControlCapabilities";
SDLName const SDLNameClusterModes = @"clusterModes";
SDLName const SDLNameClusterModeStatus = @"clusterModeStatus";
+SDLName const SDLNameColor = @"color";
SDLName const SDLNameCommandIcon = @"cmdIcon";
SDLName const SDLNameCommandId = @"cmdID";
SDLName const SDLNameCompassDirection = @"compassDirection";
SDLName const SDLNameCorrelationId = @"correlationID";
SDLName const SDLNameCountryCode = @"countryCode";
SDLName const SDLNameCountryName = @"countryName";
+SDLName const SDLNameCRC = @"crc";
SDLName const SDLNameCreateInteractionChoiceSet = @"CreateInteractionChoiceSet";
SDLName const SDLNameClockText = @"CT";
SDLName const SDLNameCurrentTemperature = @"currentTemperature";
+SDLName const SDLNameCushion = @"cushion";
SDLName const SDLNameCustomButtonId = @"customButtonID";
SDLName const SDLNameCustomPresets = @"customPresets";
SDLName const SDLNameData = @"data";
SDLName const SDLNameDataResult = @"dataResult";
SDLName const SDLNameDataType = @"dataType";
SDLName const SDLNameDay = @"day";
+SDLName const SDLNameDayColorScheme = @"dayColorScheme";
SDLName const SDLNameDefrostZone = @"defrostZone";
SDLName const SDLNameDefrostZoneAvailable = @"defrostZoneAvailable";
SDLName const SDLNameDeleteCommand = @"DeleteCommand";
@@ -94,6 +117,8 @@ SDLName const SDLNameDeleteFile = @"DeleteFile";
SDLName const SDLNameDeleteInteractionChoiceSet = @"DeleteInteractionChoiceSet";
SDLName const SDLNameDeleteSubMenu = @"DeleteSubMenu";
SDLName const SDLNameDeliveryMode = @"deliveryMode";
+SDLName const SDLNameDensity = @"density";
+SDLName const SDLNameDensityAvailable = @"densityAvailable";
SDLName const SDLNameDesiredTemperature = @"desiredTemperature";
SDLName const SDLNameDesiredTemperatureAvailable = @"desiredTemperatureAvailable";
SDLName const SDLNameDeviceInfo = @"deviceInfo";
@@ -105,10 +130,14 @@ SDLName const SDLNameDIDResult = @"didResult";
SDLName const SDLNameDimension = @"dimension";
SDLName const SDLNameDisplayCapabilities = @"displayCapabilities";
SDLName const SDLNameDisplayLayout = @"displayLayout";
+SDLName const SDLNameDisplayMode = @"displayMode";
+SDLName const SDLNameDisplayModeUnitAvailable = @"displayModeUnitAvailable";
SDLName const SDLNameDisplayType = @"displayType";
SDLName const SDLNameDistanceToEmpty = @"distanceToEmpty";
SDLName const SDLNameDistanceToManeuver = @"distanceToManeuver";
SDLName const SDLNameDistanceToManeuverScale = @"distanceToManeuverScale";
+SDLName const SDLNameDistanceUnitAvailable = @"distanceUnitAvailable";
+SDLName const SDLNameDistanceUnit = @"distanceUnit";
SDLName const SDLNameDoublePressAvailable = @"doublePressAvailable";
SDLName const SDLNameDriverAirbagDeployed = @"driverAirbagDeployed";
SDLName const SDLNameDriverBeltDeployed = @"driverBeltDeployed";
@@ -131,27 +160,39 @@ SDLName const SDLNameECallInfo = @"eCallInfo";
SDLName const SDLNameECallNotificationStatus = @"eCallNotificationStatus";
SDLName const SDLNameECUHeader = @"ecuHeader";
SDLName const SDLNameECUName = @"ecuName";
+SDLName const SDLNameElectronicParkBrakeStatus = @"electronicParkBrakeStatus";
SDLName const SDLNameEmergencyEvent = @"emergencyEvent";
SDLName const SDLNameEmergencyEventType = @"emergencyEventType";
SDLName const SDLNameEncodedSyncPData = @"EncodedSyncPData";
SDLName const SDLNameEndAudioPassThru = @"EndAudioPassThru";
SDLName const SDLNameEndTime = @"endTime";
+SDLName const SDLNameEngineOilLife = @"engineOilLife";
SDLName const SDLNameEngineTorque = @"engineTorque";
+SDLName const SDLNameEqualizerAvailable = @"equalizerAvailable";
+SDLName const SDLNameEqualizerMaxChannelId = @"equalizerMaxChannelId";
+SDLName const SDLNameEqualizerSettings = @"equalizerSettings";;
SDLName const SDLNameETA = @"eta";
SDLName const SDLNameEvent = @"event";
SDLName const SDLNameExternalTemperature = @"externalTemperature";
SDLName const SDLNameFanSpeed = @"fanSpeed";
SDLName const SDLNameFanSpeedAvailable = @"fanSpeedAvailable";
+SDLName const SDLNameFCCFacilityId = @"fccFacilityId";
SDLName const SDLNameFilename = @"fileName";
SDLName const SDLNameFilenames = @"filenames";
SDLName const SDLNameFileType = @"fileType";
+SDLName const SDLNameFirmness = @"firmness";
SDLName const SDLNameFirmwareRevision = @"firmwareRev";
+SDLName const SDLNameFreeModules = @"freeModules";
SDLName const SDLNameFrequencyInteger = @"frequencyInteger";
SDLName const SDLNameFrequencyFraction = @"frequencyFraction";
+SDLName const SDLNameFrontVerticalPosition = @"frontVerticalPosition";
+SDLName const SDLNameFrontVerticalPositionAvailable = @"frontVerticalPositionAvailable";
SDLName const SDLNameFuelCutoffStatus = @"fuelCutoffStatus";
SDLName const SDLNameFuelLevel = @"fuelLevel";
SDLName const SDLNameFuelLevelState = @"fuelLevel_State";
SDLName const SDLNameFuelMaintenanceMode = @"fuelMaintenanceMode";
+SDLName const SDLNameFuelRange = @"fuelRange";
+SDLName const SDLNameFullAppID = @"fullAppID";
SDLName const SDLNameGenericResponse = @"GenericResponse";
SDLName const SDLNameGetDTCs = @"GetDTCs";
SDLName const SDLNameGetInteriorVehicleData = @"GetInteriorVehicleData";
@@ -162,6 +203,7 @@ SDLName const SDLNameGetWayPointsEnabled = @"getWayPointsEnabled";
SDLName const SDLNameGPS = @"gps";
SDLName const SDLNameGraphic = @"graphic";
SDLName const SDLNameGraphicSupported = @"graphicSupported";
+SDLName const SDLNameGreen = @"green";
SDLName const SDLNameHapticRectData = @"hapticRectData";
SDLName const SDLNameHapticSpatialDataSupported = @"hapticSpatialDataSupported";
SDLName const SDLNameHardware = @"hardware";
@@ -169,20 +211,43 @@ SDLName const SDLNameHashId = @"hashID";
SDLName const SDLNameHDChannel = @"hdChannel";
SDLName const SDLNameHDChannelAvailable = @"hdChannelAvailable";
SDLName const SDLNameHDOP = @"hdop";
+SDLName const SDLNameHDRadioEnable = @"hdRadioEnable";
+SDLName const SDLNameHDRadioEnableAvailable = @"hdRadioEnableAvailable";
SDLName const SDLNameHeading = @"heading";
SDLName const SDLNameHeadLampStatus = @"headLampStatus";
+SDLName const SDLNameHeadSupportHorizontalPosition = @"headSupportHorizontalPosition";
+SDLName const SDLNameHeadSupportHorizontalPositionAvailable = @"headSupportHorizontalPositionAvailable";
+SDLName const SDLNameHeadSupportVerticalPosition = @"headSupportVerticalPosition";
+SDLName const SDLNameHeadSupportVerticalPositionAvailable = @"headSupportVerticalPositionAvailable";
+SDLName const SDLNameHeatingLevel = @"heatingLevel";
+SDLName const SDLNameHeatingLevelAvailable = @"heatingLevelAvailable";
+SDLName const SDLNameHeatingEnabled = @"heatingEnabled";
+SDLName const SDLNameHeatingEnabledAvailable = @"heatingEnabledAvailable";
+SDLName const SDLNameHeatedSteeringWheelAvailable = @"heatedSteeringWheelAvailable";
+SDLName const SDLNameHeatedWindshieldAvailable = @"heatedWindshieldAvailable";
+SDLName const SDLNameHeatedRearWindowAvailable = @"heatedRearWindowAvailable";
+SDLName const SDLNameHeatedMirrorsAvailable = @"heatedMirrorsAvailable";
+SDLName const SDLNameHeatedSteeringWheelEnable = @"heatedSteeringWheelEnable";
+SDLName const SDLNameHeatedWindshieldEnable = @"heatedWindshieldEnable";
+SDLName const SDLNameHeatedRearWindowEnable = @"heatedRearWindowEnable";
+SDLName const SDLNameHeatedMirrorsEnable = @"heatedMirrorsEnable";
SDLName const SDLNameHeight = @"height";
SDLName const SDLNameHelpPrompt = @"helpPrompt";
SDLName const SDLNameHighBeamsOn = @"highBeamsOn";
+SDLName const SDLNameHMICapabilities = @"hmiCapabilities";
+SDLName const SDLNameHmiSettingsControlData = @"hmiSettingsControlData";
SDLName const SDLNameHMIDisplayLanguage = @"hmiDisplayLanguage";
SDLName const SDLNameHMIDisplayLanguageDesired = @"hmiDisplayLanguageDesired";
SDLName const SDLNameHMILevel = @"hmiLevel";
SDLName const SDLNameHMILevelLowercase = @"hmilevel";
SDLName const SDLNameHMIPermissions = @"hmiPermissions";
-SDLName const SDLNameHMICapabilities = @"hmiCapabilities";
+SDLName const SDLNameHmiSettingsControlCapabilities = @"hmiSettingsControlCapabilities";
SDLName const SDLNameHMIZoneCapabilities = @"hmiZoneCapabilities";
+SDLName const SDLNameHorizontalPosition = @"horizontalPosition";
+SDLName const SDLNameHorizontalPositionAvailable = @"horizontalPositionAvailable";
SDLName const SDLNameHour = @"hour";
SDLName const SDLNameHours = @"hours";
+SDLName const SDLNameIconResumed = @"iconResumed";
SDLName const SDLNameId = @"id";
SDLName const SDLNameIgnitionStableStatus = @"ignitionStableStatus";
SDLName const SDLNameIgnitionStatus = @"ignitionStatus";
@@ -190,6 +255,7 @@ SDLName const SDLNameImage = @"image";
SDLName const SDLNameImageFields = @"imageFields";
SDLName const SDLNameImageResolution = @"imageResolution";
SDLName const SDLNameImageSupported = @"imageSupported";
+SDLName const SDLNameImageTemplate = @"isTemplate";
SDLName const SDLNameImageType = @"imageType";
SDLName const SDLNameImageTypeSupported = @"imageTypeSupported";
SDLName const SDLNameInfo = @"info";
@@ -205,9 +271,12 @@ SDLName const SDLNameInteractionMode = @"interactionMode";
SDLName const SDLNameIsHighlighted = @"isHighlighted";
SDLName const SDLNameIsMediaApplication = @"isMediaApplication";
SDLName const SDLNameIsSubscribed = @"isSubscribed";
+SDLName const SDLNameKeepContext = @"keepContext";
+SDLName const SDLNameKeepContextAvailable = @"keepContextAvailable";
SDLName const SDLNameKeyboardLayout = @"keyboardLayout";
SDLName const SDLNameKeyboardProperties = @"keyboardProperties";
SDLName const SDLNameKeypressMode = @"keypressMode";
+SDLName const SDLNameLabel = @"label";
SDLName const SDLNameLanguage = @"language";
SDLName const SDLNameLanguageDesired = @"languageDesired";
SDLName const SDLNameLatitudeDegrees = @"latitudeDegrees";
@@ -217,6 +286,9 @@ SDLName const SDLNameLeftRearInflatableBelted = @"leftRearInflatableBelted";
SDLName const SDLNameLeftRow2BuckleBelted = @"leftRow2BuckleBelted";
SDLName const SDLNameLeftRow3BuckleBelted = @"leftRow3BuckleBelted";
SDLName const SDLNameLength = @"length";
+SDLName const SDLNameLightControlCapabilities = @"lightControlCapabilities";
+SDLName const SDLNameLightControlData = @"lightControlData";
+SDLName const SDLNameLightState = @"lightState";
SDLName const SDLNameLimitedCharacterList = @"limitedCharacterList";
SDLName const SDLNameListFiles = @"ListFiles";
SDLName const SDLNameLocality = @"locality";
@@ -237,6 +309,13 @@ SDLName const SDLNameMajorVersion = @"majorVersion";
SDLName const SDLNameMake = @"make";
SDLName const SDLNameManeuverComplete = @"maneuverComplete";
SDLName const SDLNameManualTextEntry = @"manualTextEntry";
+SDLName const SDLNameMassageCushionFirmness = @"massageCushionFirmness";
+SDLName const SDLNameMassageCushionFirmnessAvailable = @"massageCushionFirmnessAvailable";
+SDLName const SDLNameMassageEnabled = @"massageEnabled";
+SDLName const SDLNameMassageEnabledAvailable = @"massageEnabledAvailable";
+SDLName const SDLNameMassageMode = @"massageMode";
+SDLName const SDLNameMassageModeAvailable = @"massageModeAvailable";
+SDLName const SDLNameMassageZone = @"massageZone";
SDLName const SDLNameMaxBitrate = @"maxBitrate";
SDLName const SDLNameMaxDuration = @"maxDuration";
SDLName const SDLNameMaximumChangeVelocity = @"maximumChangeVelocity";
@@ -244,6 +323,8 @@ SDLName const SDLNameMaxNumberRFCOMMPorts = @"maxNumberRFCOMMPorts";
SDLName const SDLNameMediaClock = @"mediaClock";
SDLName const SDLNameMediaClockFormats = @"mediaClockFormats";
SDLName const SDLNameMediaTrack = @"mediaTrack";
+SDLName const SDLNameMemory = @"memory";
+SDLName const SDLNameMemoryAvailable = @"memoryAvailable";
SDLName const SDLNameMenuIcon = @"menuIcon";
SDLName const SDLNameMenuId = @"menuID";
SDLName const SDLNameMenuName = @"menuName";
@@ -280,6 +361,7 @@ SDLName const SDLNameNavigationText1 = @"navigationText1";
SDLName const SDLNameNavigationText2 = @"navigationText2";
SDLName const SDLNameNextTurnIcon = @"nextTurnIcon";
SDLName const SDLNameNGNMediaScreenAppName = @"ngnMediaScreenAppName";
+SDLName const SDLNameNightColorScheme = @"nightColorScheme";
SDLName const SDLNameNotification = @"notification";
SDLName const SDLNameNumber = @"number";
SDLName const SDLNameNumberCustomPresetsAvailable = @"numCustomPresetsAvailable";
@@ -300,6 +382,7 @@ SDLName const SDLNameOnKeyboardInput = @"OnKeyboardInput";
SDLName const SDLNameOnLanguageChange = @"OnLanguageChange";
SDLName const SDLNameOnLockScreenStatus = @"OnLockScreenStatus";
SDLName const SDLNameOnPermissionsChange = @"OnPermissionsChange";
+SDLName const SDLNameOnRCStatus = @"OnRCStatus";
SDLName const SDLNameOnScreenPresetsAvailable = @"onScreenPresetsAvailable";
SDLName const SDLNameOnSyncPData = @"OnSyncPData";
SDLName const SDLNameOnSystemRequest = @"OnSystemRequest";
@@ -333,6 +416,7 @@ SDLName const SDLNamePhoneCall = @"phoneCall";
SDLName const SDLNamePhoneCapability = @"phoneCapability";
SDLName const SDLNamePhoneNumber = @"phoneNumber";
SDLName const SDLNamePhoneRoaming = @"phoneRoaming";
+SDLName const SDLNamePrimaryColor = @"primaryColor";
SDLName const SDLNameProgramIdentification = @"PI";
SDLName const SDLNamePlayTone = @"playTone";
SDLName const SDLNamePosition = @"position";
@@ -359,20 +443,24 @@ SDLName const SDLNameRadioFrequencyAvailable = @"radioFrequencyAvailable";
SDLName const SDLNameRadioControlData = @"radioControlData";
SDLName const SDLNameRadioEnable = @"radioEnable";
SDLName const SDLNameRadioEnableAvailable = @"radioEnableAvailable";
+SDLName const SDLNameRange = @"range";
SDLName const SDLNameRDSData = @"rdsData";
SDLName const SDLNameRDSDataAvailable = @"rdsDataAvailable";
SDLName const SDLNameReadDID = @"ReadDID";
SDLName const SDLNameRearLeftDoorAjar = @"rearLeftDoorAjar";
SDLName const SDLNameRearRightDoorAjar = @"rearRightDoorAjar";
SDLName const SDLNameReason = @"reason";
+SDLName const SDLNameRed = @"red";
SDLName const SDLNameRect = @"rect";
SDLName const SDLNameRegion = @"REG";
SDLName const SDLNameRegisterAppInterface = @"RegisterAppInterface";
SDLName const SDLNameRemoteControlCapability = @"remoteControlCapability";
SDLName const SDLNameRequest = @"request";
+SDLName const SDLNameRequestSubType = @"requestSubType";
SDLName const SDLNameRequestType = @"requestType";
SDLName const SDLNameReserved = @"reserved";
SDLName const SDLNameResetGlobalProperties = @"ResetGlobalProperties";
+SDLName const SDLNameSecondaryColor = @"secondaryColor";
SDLName const SDLNameSetInteriorVehicleData = @"SetInteriorVehicleData";
SDLName const SDLNameResolution = @"resolution";
SDLName const SDLNameResolutionHeight = @"resolutionHeight";
@@ -397,6 +485,8 @@ SDLName const SDLNameScrollableMessage = @"ScrollableMessage";
SDLName const SDLNameScrollableMessageBody = @"scrollableMessageBody";
SDLName const SDLNameSDLVersion = @"sdlVersion";
SDLName const SDLNameSearchAddress = @"searchAddress";
+SDLName const SDLNameSeatControlData = @"seatControlData";
+SDLName const SDLNameSeatControlCapabilities = @"seatControlCapabilities";
SDLName const SDLNameSecondaryGraphic = @"secondaryGraphic";
SDLName const SDLNameSecondaryImage = @"secondaryImage";
SDLName const SDLNameSecondaryText = @"secondaryText";
@@ -408,6 +498,7 @@ SDLName const SDLNameSendLocation = @"SendLocation";
SDLName const SDLNameSendLocationEnabled = @"sendLocationEnabled";
SDLName const SDLNameSetAppIcon = @"SetAppIcon";
SDLName const SDLNameSetDisplayLayout = @"SetDisplayLayout";
+SDLName const SDLNameDisplayName = @"displayName";
SDLName const SDLNameSetGlobalProperties = @"SetGlobalProperties";
SDLName const SDLNameSetMediaClockTimer = @"SetMediaClockTimer";
SDLName const SDLNameShortPress = @"shortPress";
@@ -419,6 +510,9 @@ SDLName const SDLNameSignalChangeThreshold = @"signalChangeThreshold";
SDLName const SDLNameSignalChangeThresholdAvailable = @"signalChangeThresholdAvailable";
SDLName const SDLNameSignalStrength = @"signalStrength";
SDLName const SDLNameSignalStrengthAvailable = @"signalStrengthAvailable";
+SDLName const SDLNameSiriusXMRadioAvailable = @"siriusxmRadioAvailable";
+SDLName const SDLNameSISData = @"sisData";
+SDLName const SDLNameSISDataAvailable = @"sisDataAvailable";
SDLName const SDLNameSlider = @"Slider";
SDLName const SDLNameSliderFooter = @"sliderFooter";
SDLName const SDLNameSliderHeader = @"sliderHeader";
@@ -426,15 +520,24 @@ SDLName const SDLNameSliderPosition = @"sliderPosition";
SDLName const SDLNameSoftButtonCapabilities = @"softButtonCapabilities";
SDLName const SDLNameSoftButtonId = @"softButtonID";
SDLName const SDLNameSoftButtons = @"softButtons";
+SDLName const SDLNameSource = @"source";
+SDLName const SDLNameSourceAvailable = @"sourceAvailable";
SDLName const SDLNameSpaceAvailable = @"spaceAvailable";
SDLName const SDLNameSpeak = @"Speak";
SDLName const SDLNameSpeechCapabilities = @"speechCapabilities";
SDLName const SDLNameSpeed = @"speed";
+SDLName const SDLNameRGBColorSpaceAvailable = @"rgbColorSpaceAvailable";
SDLName const SDLNameStartTime = @"startTime";
SDLName const SDLNameState = @"state";
SDLName const SDLNameStateAvailable = @"stateAvailable";
SDLName const SDLNameStateOfCharge = @"stateOfCharge";
+SDLName const SDLNameStationIDNumber = @"stationIDNumber";
+SDLName const SDLNameStationLongName = @"stationLongName";
+SDLName const SDLNameStationLocation = @"stationLocation";
+SDLName const SDLNameStationMessage = @"stationMessage";
+SDLName const SDLNameStationShortName = @"stationShortName";
SDLName const SDLNameStatus = @"status";
+SDLName const SDLNameStatusAvailable = @"statusAvailable";
SDLName const SDLNameStatusBar = @"statusBar";
SDLName const SDLNameSteeringWheelAngle = @"steeringWheelAngle";
SDLName const SDLNameStereoAudioOutputMuted = @"stereoAudioOutputMuted";
@@ -448,6 +551,7 @@ SDLName const SDLNameSubThoroughfare = @"subThoroughfare";
SDLName const SDLNameSuccess = @"success";
SDLName const SDLNameSupportedDiagnosticModes = @"supportedDiagModes";
SDLName const SDLNameSupportedFormats = @"supportedFormats";
+SDLName const SDLNameSupportedLights = @"supportedLights";
SDLName const SDLNameSyncFileName = @"syncFileName";
SDLName const SDLNameSyncMessageVersion = @"syncMsgVersion";
SDLName const SDLNameSyncPData = @"SyncPData";
@@ -461,6 +565,8 @@ SDLName const SDLNameSystemSoftwareVersion = @"systemSoftwareVersion";
SDLName const SDLNameDialNumber = @"DialNumber";
SDLName const SDLNameTrafficAnnouncementIdentification = @"TA";
SDLName const SDLNameTargetId = @"targetID";
+SDLName const SDLNameTemperatureUnit = @"temperatureUnit";
+SDLName const SDLNameTemperatureUnitAvailable = @"temperatureUnitAvailable";
SDLName const SDLNameTemplatesAvailable = @"templatesAvailable";
SDLName const SDLNameTertiaryText = @"tertiaryText";
SDLName const SDLNameText = @"text";
@@ -476,6 +582,7 @@ SDLName const SDLNameTimezoneMinuteOffset = @"tz_minute";
SDLName const SDLNameTirePressure = @"tirePressure";
SDLName const SDLNameTotalDistance = @"totalDistance";
SDLName const SDLNameTouchEventAvailable = @"touchEventAvailable";
+SDLName const SDLNameTPMS = @"tpms";
SDLName const SDLNameTrafficProgramIdentification = @"TP";
SDLName const SDLNameTriggerSource = @"triggerSource";
SDLName const SDLNameTrim = @"trim";
@@ -485,6 +592,7 @@ SDLName const SDLNameTTSChunks = @"ttsChunks";
SDLName const SDLNameTTSName = @"ttsName";
SDLName const SDLNameTurnIcon = @"turnIcon";
SDLName const SDLNameTurnList = @"turnList";
+SDLName const SDLNameTurnSignal = @"turnSignal";
SDLName const SDLNameType = @"type";
SDLName const SDLNameUnit = @"unit";
SDLName const SDLNameUnregisterAppInterface = @"UnregisterAppInterface";
@@ -508,14 +616,19 @@ SDLName const SDLNameUTCYear = @"utcYear";
SDLName const SDLNameValue = @"value";
SDLName const SDLNameVDOP = @"vdop";
SDLName const SDLNameVehicleType = @"vehicleType";
+SDLName const SDLNameVerticalPosition = @"verticalPosition";
+SDLName const SDLNameVerticalPositionAvailable = @"verticalPositionAvailable";
SDLName const SDLNameVideoCodec = @"codec";
SDLName const SDLNameVideoProtocol = @"protocol";
SDLName const SDLNameVideoStreaming = @"videoStreaming";
SDLName const SDLNameVideoStreamingCapability = @"videoStreamingCapability";
+SDLName const SDLNameVideoStreamingState = @"videoStreamingState";
SDLName const SDLNameVentilationMode = @"ventilationMode";
SDLName const SDLNameVentilationModeAvailable = @"ventilationModeAvailable";
SDLName const SDLNameVIN = @"vin";
SDLName const SDLNameVoiceRecognitionOn = @"voiceRecOn";
+SDLName const SDLNameVolume = @"volume";
+SDLName const SDLNameVolumeAvailable = @"volumeAvailable";
SDLName const SDLNameVRCapabilities = @"vrCapabilities";
SDLName const SDLNameVRCommands = @"vrCommands";
SDLName const SDLNameVRHelp = @"vrHelp";
diff --git a/SmartDeviceLink/SDLNotificationConstants.h b/SmartDeviceLink/SDLNotificationConstants.h
index 41b220134..a2a371d3f 100644
--- a/SmartDeviceLink/SDLNotificationConstants.h
+++ b/SmartDeviceLink/SDLNotificationConstants.h
@@ -106,6 +106,7 @@ extern SDLNotificationUserInfoKey const SDLNotificationUserInfoObject;
#pragma mark - General notifications
extern SDLNotificationName const SDLTransportDidDisconnect;
extern SDLNotificationName const SDLTransportDidConnect;
+extern SDLNotificationName const SDLTransportConnectError;
extern SDLNotificationName const SDLDidReceiveError;
extern SDLNotificationName const SDLDidReceiveLockScreenIcon;
extern SDLNotificationName const SDLDidBecomeReady;
@@ -184,6 +185,7 @@ extern SDLNotificationName const SDLDidChangeLockScreenStatusNotification;
extern SDLNotificationName const SDLDidReceiveNewHashNotification;
extern SDLNotificationName const SDLDidReceiveVehicleIconNotification;
extern SDLNotificationName const SDLDidChangePermissionsNotification;
+extern SDLNotificationName const SDLDidReceiveRemoteControlStatusNotification;
extern SDLNotificationName const SDLDidReceiveSystemRequestNotification;
extern SDLNotificationName const SDLDidChangeTurnByTurnStateNotification;
extern SDLNotificationName const SDLDidReceiveTouchEventNotification;
diff --git a/SmartDeviceLink/SDLNotificationConstants.m b/SmartDeviceLink/SDLNotificationConstants.m
index 864524205..35f12b473 100644
--- a/SmartDeviceLink/SDLNotificationConstants.m
+++ b/SmartDeviceLink/SDLNotificationConstants.m
@@ -16,6 +16,7 @@ SDLNotificationUserInfoKey const SDLNotificationUserInfoObject = @"SDLNotificati
#pragma mark - General notifications
SDLNotificationName const SDLTransportDidDisconnect = @"com.sdl.transport.disconnect";
SDLNotificationName const SDLTransportDidConnect = @"com.sdl.transport.connect";
+SDLNotificationName const SDLTransportConnectError = @"com.sdl.transport.connectError";
SDLNotificationName const SDLDidReceiveError = @"com.sdl.general.error";
SDLNotificationName const SDLDidReceiveLockScreenIcon = @"com.sdl.general.lockscreenIconReceived";
SDLNotificationName const SDLDidBecomeReady = @"com.sdl.notification.managerReady";
@@ -89,6 +90,7 @@ SDLNotificationName const SDLDidChangeLockScreenStatusNotification = @"com.sdl.n
SDLNotificationName const SDLDidReceiveNewHashNotification = @"com.sdl.notification.newHash";
SDLNotificationName const SDLDidChangePermissionsNotification = @"com.sdl.notification.changePermission";
SDLNotificationName const SDLDidReceiveSystemRequestNotification = @"com.sdl.notification.receiveSystemRequest";
+SDLNotificationName const SDLDidReceiveRemoteControlStatusNotification = @"com.sdl.notification.rcStatus";
SDLNotificationName const SDLDidChangeTurnByTurnStateNotification = @"com.sdl.notification.changeTurnByTurnState";
SDLNotificationName const SDLDidReceiveTouchEventNotification = @"com.sdl.notification.touchEvent";
SDLNotificationName const SDLDidReceiveVehicleDataNotification = @"com.sdl.notification.vehicleData";
diff --git a/SmartDeviceLink/SDLNotificationDispatcher.m b/SmartDeviceLink/SDLNotificationDispatcher.m
index a28befb68..f2a4b6950 100644
--- a/SmartDeviceLink/SDLNotificationDispatcher.m
+++ b/SmartDeviceLink/SDLNotificationDispatcher.m
@@ -59,6 +59,10 @@ NS_ASSUME_NONNULL_BEGIN
[self postNotificationName:SDLTransportDidDisconnect infoObject:nil];
}
+- (void)onTransportError:(NSError *)error {
+ [self postNotificationName:SDLTransportConnectError infoObject:error];
+}
+
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
@@ -325,6 +329,10 @@ NS_ASSUME_NONNULL_BEGIN
[self postRPCNotificationNotification:SDLDidChangePermissionsNotification notification:notification];
}
+- (void)onOnRCStatus:(SDLOnRCStatus *)notification {
+ [self postRPCNotificationNotification:SDLDidReceiveRemoteControlStatusNotification notification:notification];
+}
+
- (void)onOnSyncPData:(SDLOnSyncPData *)notification {
[self postRPCNotificationNotification:SDLDidReceiveSystemRequestNotification notification:notification];
}
diff --git a/SmartDeviceLink/SDLOnHMIStatus.h b/SmartDeviceLink/SDLOnHMIStatus.h
index f91667959..069f7789d 100644
--- a/SmartDeviceLink/SDLOnHMIStatus.h
+++ b/SmartDeviceLink/SDLOnHMIStatus.h
@@ -6,6 +6,7 @@
#import "SDLAudioStreamingState.h"
#import "SDLHMILevel.h"
#import "SDLSystemContext.h"
+#import "SDLVideoStreamingState.h"
/**
* Notifies an application that HMI conditions have changed for the application. This indicates whether the application can speak phrases, display text, perform interactions, receive button presses and events, stream audio, etc. This notification will be sent to the application when there has been a change in any one or several of the indicated states (<i>SDLHMILevel</i>, <i>SDLAudioStreamingState</i> or <i>SDLSystemContext</i>) for the application.
@@ -34,6 +35,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) SDLAudioStreamingState audioStreamingState;
/**
+ Current availablility of video streaming for the application. When this parameter is NOT_STREAMABLE, the application must stop video streaming to SDL.
+ */
+@property (strong, nonatomic, nullable) SDLVideoStreamingState videoStreamingState;
+
+/**
Whether a user-initiated interaction is in-progress (VRSESSION or MENU), or not (MAIN)
*/
@property (strong, nonatomic) SDLSystemContext systemContext;
diff --git a/SmartDeviceLink/SDLOnHMIStatus.m b/SmartDeviceLink/SDLOnHMIStatus.m
index 6240ec9c2..b345856f4 100644
--- a/SmartDeviceLink/SDLOnHMIStatus.m
+++ b/SmartDeviceLink/SDLOnHMIStatus.m
@@ -37,6 +37,14 @@ NS_ASSUME_NONNULL_BEGIN
return (SDLAudioStreamingState)obj;
}
+- (void)setVideoStreamingState:(nullable SDLVideoStreamingState)videoStreamingState {
+ [parameters sdl_setObject:videoStreamingState forName:SDLNameVideoStreamingState];
+}
+
+- (nullable SDLVideoStreamingState)videoStreamingState {
+ return [parameters sdl_objectForName:SDLNameVideoStreamingState];
+}
+
- (void)setSystemContext:(SDLSystemContext)systemContext {
[parameters sdl_setObject:systemContext forName:SDLNameSystemContext];
}
diff --git a/SmartDeviceLink/SDLOnRCStatus.h b/SmartDeviceLink/SDLOnRCStatus.h
new file mode 100644
index 000000000..9c3d73c7e
--- /dev/null
+++ b/SmartDeviceLink/SDLOnRCStatus.h
@@ -0,0 +1,49 @@
+// SDLOnRCStatus.h
+//
+
+#import "SDLRPCNotification.h"
+
+@class SDLModuleData;
+
+/**
+ * OnRCStatus notifications to all registered mobile applications and the HMI whenever
+ * (1) SDL allocates a module to an application or
+ * (2) it de-allocates a module from an application, or
+ * (3) an application registers with SDL
+ *
+ */
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLOnRCStatus : SDLRPCNotification
+
+/**
+ * @abstract Contains a list (zero or more) of module types that
+ * are allocated to the application.
+ *
+ * Required, Array of SDLModuleData, Array size 0 - 100
+ *
+ * @see SDLPermissionItem
+ */
+@property (strong, nonatomic) NSArray<SDLModuleData *> *allocatedModules;
+
+/**
+ * @abstract Contains a list (zero or more) of module types that are free to access for the application.
+ *
+ * Required, Array of SDLModuleData, Array size 0 - 100
+ *
+ * @see SDLPermissionItem
+ */
+@property (strong, nonatomic) NSArray<SDLModuleData *> *freeModules;
+
+/**
+ * Issued by SDL to notify the application about remote control status change on SDL
+ * If "true" - RC is allowed; if "false" - RC is disallowed.
+ *
+ * optional, Boolean, default Value = false
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *allowed;
+
+NS_ASSUME_NONNULL_END
+
+@end
diff --git a/SmartDeviceLink/SDLOnRCStatus.m b/SmartDeviceLink/SDLOnRCStatus.m
new file mode 100644
index 000000000..eeae2506e
--- /dev/null
+++ b/SmartDeviceLink/SDLOnRCStatus.m
@@ -0,0 +1,47 @@
+// SDLOnRCStatus.m
+//
+
+#import "SDLOnRCStatus.h"
+
+#import "NSMutableDictionary+Store.h"
+#import "SDLModuleData.h"
+#import "SDLNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLOnRCStatus
+
+- (instancetype)init {
+ if (self = [super initWithName:SDLNameOnRCStatus]) {
+ }
+ return self;
+}
+
+- (nullable NSNumber<SDLBool> *)allowed {
+ return [parameters sdl_objectForName:SDLNameAllowed];
+}
+
+- (void)setAllowed:(nullable NSNumber<SDLBool> *)allowed {
+ [parameters sdl_setObject:allowed forName:SDLNameAllowed];
+}
+
+- (void)setAllocatedModules:(NSArray<SDLModuleData *> *)allocatedModules {
+ [parameters sdl_setObject:allocatedModules forName:SDLNameAllocatedModules];
+
+}
+
+- (NSArray<SDLModuleData *> *)allocatedModules {
+ return [parameters sdl_objectsForName:SDLNameAllocatedModules ofClass:SDLModuleData.class];
+}
+
+- (void)setFreeModules:(NSArray<SDLModuleData *> *)freeModules {
+ [parameters sdl_setObject:freeModules forName:SDLNameFreeModules];
+}
+
+- (NSArray<SDLModuleData *> *)freeModules {
+ return [parameters sdl_objectsForName:SDLNameFreeModules ofClass:SDLModuleData.class];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLOnSystemRequest.h b/SmartDeviceLink/SDLOnSystemRequest.h
index 24eb44f69..c4a540f95 100644
--- a/SmartDeviceLink/SDLOnSystemRequest.h
+++ b/SmartDeviceLink/SDLOnSystemRequest.h
@@ -19,6 +19,13 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) SDLRequestType requestType;
/**
+ A request subType used when the `requestType` is `OEM_SPECIFIC`.
+
+ Optional, Max length 255
+ */
+@property (strong, nonatomic, nullable) NSString *requestSubType;
+
+/**
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.
*/
@property (nullable, strong, nonatomic) NSString *url;
diff --git a/SmartDeviceLink/SDLOnSystemRequest.m b/SmartDeviceLink/SDLOnSystemRequest.m
index 30e58a1a9..aecd16ab3 100644
--- a/SmartDeviceLink/SDLOnSystemRequest.m
+++ b/SmartDeviceLink/SDLOnSystemRequest.m
@@ -24,6 +24,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameRequestType];
}
+- (void)setRequestSubType:(nullable NSString *)requestSubType {
+ [parameters sdl_setObject:requestSubType forName:SDLNameRequestSubType];
+}
+
+- (nullable NSString *)requestSubType {
+ return [parameters sdl_objectForName:SDLNameRequestSubType];
+}
+
- (void)setUrl:(nullable NSString *)url {
[parameters sdl_setObject:url forName:SDLNameURL];
}
diff --git a/SmartDeviceLink/SDLOnVehicleData.h b/SmartDeviceLink/SDLOnVehicleData.h
index 225d94e99..f4449c070 100644
--- a/SmartDeviceLink/SDLOnVehicleData.h
+++ b/SmartDeviceLink/SDLOnVehicleData.h
@@ -4,7 +4,9 @@
#import "SDLRPCNotification.h"
#import "SDLComponentVolumeStatus.h"
+#import "SDLElectronicParkBrakeStatus.h"
#import "SDLPRNDL.h"
+#import "SDLTurnSignal.h"
#import "SDLVehicleDataEventStatus.h"
#import "SDLWiperStatus.h"
@@ -15,6 +17,7 @@
@class SDLDeviceStatus;
@class SDLECallInfo;
@class SDLEmergencyEvent;
+@class SDLFuelRange;
@class SDLGPSData;
@class SDLHeadLampStatus;
@class SDLMyKey;
@@ -57,6 +60,13 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) SDLComponentVolumeStatus fuelLevel_State;
/**
+ The estimate range in KM the vehicle can travel based on fuel level and consumption
+
+ Optional, Array of length 0 - 100, of SDLFuelRange
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLFuelRange *> *fuelRange;
+
+/**
The instantaneous fuel consumption in microlitres
*/
@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *instantFuelConsumption;
@@ -117,6 +127,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) SDLHeadLampStatus *headLampStatus;
/**
+ The estimated percentage (0% - 100%) of remaining oil life of the engine
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *engineOilLife;
+
+/**
Torque value for engine (in Nm) on non-diesel variants
*/
@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *engineTorque;
@@ -156,6 +171,15 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) SDLMyKey *myKey;
+/**
+ The status of the electronic parking brake
+ */
+@property (nullable, strong, nonatomic) SDLElectronicParkBrakeStatus electronicParkBrakeStatus;
+
+/**
+ The status of the turn signal
+ */
+@property (nullable, strong, nonatomic) SDLTurnSignal turnSignal;
@end
diff --git a/SmartDeviceLink/SDLOnVehicleData.m b/SmartDeviceLink/SDLOnVehicleData.m
index 6f4e99521..8c77db316 100644
--- a/SmartDeviceLink/SDLOnVehicleData.m
+++ b/SmartDeviceLink/SDLOnVehicleData.m
@@ -11,6 +11,7 @@
#import "SDLDeviceStatus.h"
#import "SDLECallInfo.h"
#import "SDLEmergencyEvent.h"
+#import "SDLFuelRange.h"
#import "SDLGPSData.h"
#import "SDLHeadLampStatus.h"
#import "SDLMyKey.h"
@@ -67,6 +68,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameFuelLevelState];
}
+- (void)setFuelRange:(nullable NSArray<SDLFuelRange *> *)fuelRange {
+ [parameters sdl_setObject:fuelRange forName:SDLNameFuelRange];
+}
+
+- (nullable NSArray<SDLFuelRange *> *)fuelRange {
+ return [parameters sdl_objectsForName:SDLNameFuelRange ofClass:SDLFuelRange.class];
+}
+
- (void)setInstantFuelConsumption:(nullable NSNumber<SDLFloat> *)instantFuelConsumption {
[parameters sdl_setObject:instantFuelConsumption forName:SDLNameInstantFuelConsumption];
}
@@ -164,6 +173,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameHeadLampStatus ofClass:SDLHeadLampStatus.class];
}
+- (void)setEngineOilLife:(nullable NSNumber<SDLFloat> *)engineOilLife {
+ [parameters sdl_setObject:engineOilLife forName:SDLNameEngineOilLife];
+}
+
+- (nullable NSNumber<SDLFloat> *)engineOilLife {
+ return [parameters sdl_objectForName:SDLNameEngineOilLife];
+}
+
- (void)setEngineTorque:(nullable NSNumber<SDLFloat> *)engineTorque {
[parameters sdl_setObject:engineTorque forName:SDLNameEngineTorque];
}
@@ -228,6 +245,22 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameMyKey ofClass:SDLMyKey.class];
}
+- (void)setElectronicParkBrakeStatus:(nullable SDLElectronicParkBrakeStatus)electronicParkBrakeStatus {
+ [parameters sdl_setObject:electronicParkBrakeStatus forName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (nullable SDLElectronicParkBrakeStatus)electronicParkBrakeStatus {
+ return [parameters sdl_objectForName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (void)setTurnSignal:(nullable SDLTurnSignal)turnSignal {
+ [parameters sdl_setObject:turnSignal forName:SDLNameTurnSignal];
+}
+
+- (nullable SDLTurnSignal)turnSignal {
+ return [parameters sdl_objectForName:SDLNameTurnSignal];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPreloadChoicesOperation.h b/SmartDeviceLink/SDLPreloadChoicesOperation.h
new file mode 100644
index 000000000..cc6c7ae30
--- /dev/null
+++ b/SmartDeviceLink/SDLPreloadChoicesOperation.h
@@ -0,0 +1,38 @@
+//
+// SDLPreloadChoicesOperation.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/23/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLAsynchronousOperation.h"
+
+@class SDLChoiceCell;
+@class SDLDisplayCapabilities;
+@class SDLFileManager;
+
+@protocol SDLConnectionManagerType;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSUInteger, SDLPreloadChoicesOperationState) {
+ SDLPreloadChoicesOperationStateWaitingToStart,
+ SDLPreloadChoicesOperationStateUploadingArtworks,
+ SDLPreloadChoicesOperationStatePreloadingChoices,
+ SDLPreloadChoicesOperationStateFinished
+};
+
+@interface SDLPreloadChoicesOperation : SDLAsynchronousOperation
+
+@property (assign, nonatomic) SDLPreloadChoicesOperationState currentState;
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager fileManager:(SDLFileManager *)fileManager displayCapabilities:(SDLDisplayCapabilities *)displayCapabilities isVROptional:(BOOL)isVROptional cellsToPreload:(NSSet<SDLChoiceCell *> *)cells;
+
+- (BOOL)removeChoicesFromUpload:(NSSet<SDLChoiceCell *> *)choices;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPreloadChoicesOperation.m b/SmartDeviceLink/SDLPreloadChoicesOperation.m
new file mode 100644
index 000000000..725c6bae1
--- /dev/null
+++ b/SmartDeviceLink/SDLPreloadChoicesOperation.m
@@ -0,0 +1,180 @@
+//
+// SDLPreloadChoicesOperation.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/23/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLPreloadChoicesOperation.h"
+
+#import "SDLChoice.h"
+#import "SDLChoiceCell.h"
+#import "SDLConnectionManagerType.h"
+#import "SDLCreateInteractionChoiceSet.h"
+#import "SDLCreateInteractionChoiceSetResponse.h"
+#import "SDLDisplayCapabilities.h"
+#import "SDLDisplayCapabilities+ShowManagerExtensions.h"
+#import "SDLError.h"
+#import "SDLFileManager.h"
+#import "SDLImage.h"
+#import "SDLLogMacros.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLChoiceCell()
+
+@property (assign, nonatomic) UInt16 choiceId;
+
+@end
+
+@interface SDLPreloadChoicesOperation()
+
+@property (strong, nonatomic) NSMutableSet<SDLChoiceCell *> *cellsToUpload;
+@property (strong, nonatomic) SDLDisplayCapabilities *displayCapabilities;
+@property (assign, nonatomic, getter=isVROptional) BOOL vrOptional;
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (weak, nonatomic) SDLFileManager *fileManager;
+@property (copy, nonatomic, nullable) NSError *internalError;
+
+@end
+
+@implementation SDLPreloadChoicesOperation
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager fileManager:(SDLFileManager *)fileManager displayCapabilities:(SDLDisplayCapabilities *)displayCapabilities isVROptional:(BOOL)isVROptional cellsToPreload:(NSSet<SDLChoiceCell *> *)cells {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _connectionManager = connectionManager;
+ _fileManager = fileManager;
+ _displayCapabilities = displayCapabilities;
+ _vrOptional = isVROptional;
+ _cellsToUpload = [cells mutableCopy];
+
+ _currentState = SDLPreloadChoicesOperationStateWaitingToStart;
+
+ return self;
+}
+
+- (void)start {
+ [super start];
+
+ [self sdl_preloadCellArtworksWithCompletionHandler:^(NSError * _Nullable error) {
+ self.internalError = error;
+
+ [self sdl_preloadCells];
+ }];
+}
+
+- (BOOL)removeChoicesFromUpload:(NSSet<SDLChoiceCell *> *)choices {
+ if (self.isExecuting) { return NO; }
+
+ [self.cellsToUpload minusSet:choices];
+ return YES;
+}
+
+#pragma mark - Sending Choice Data
+
+- (void)sdl_preloadCellArtworksWithCompletionHandler:(void(^)(NSError *_Nullable))completionHandler {
+ _currentState = SDLPreloadChoicesOperationStateUploadingArtworks;
+
+ NSMutableArray<SDLArtwork *> *artworksToUpload = [NSMutableArray arrayWithCapacity:self.cellsToUpload.count];
+ for (SDLChoiceCell *cell in self.cellsToUpload) {
+ if ([self.displayCapabilities hasImageFieldOfName:SDLImageFieldNameChoiceImage]) {
+ cell.artwork != nil ? [artworksToUpload addObject:cell.artwork] : nil;
+ }
+ if ([self.displayCapabilities hasImageFieldOfName:SDLImageFieldNameChoiceSecondaryImage]) {
+ cell.secondaryArtwork != nil ? [artworksToUpload addObject:cell.secondaryArtwork] : nil;
+ }
+ }
+
+ if (artworksToUpload.count == 0) {
+ SDLLogD(@"No choice artworks to be uploaded");
+ completionHandler(nil);
+ return;
+ }
+
+ [self.fileManager uploadArtworks:[artworksToUpload copy] completionHandler:^(NSArray<NSString *> * _Nonnull artworkNames, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogE(@"Error uploading choice artworks: %@", error);
+ } else {
+ SDLLogD(@"Finished uploading choice artworks");
+ SDLLogV(@"%@", artworkNames);
+ }
+
+ completionHandler(error);
+ }];
+}
+
+- (void)sdl_preloadCells {
+ _currentState = SDLPreloadChoicesOperationStatePreloadingChoices;
+
+ NSMutableArray<SDLCreateInteractionChoiceSet *> *choiceRPCs = [NSMutableArray arrayWithCapacity:self.cellsToUpload.count];
+ for (SDLChoiceCell *cell in self.cellsToUpload) {
+ [choiceRPCs addObject:[self sdl_choiceFromCell:cell]];
+ }
+
+ __weak typeof(self) weakSelf = self;
+ __block NSMutableDictionary<SDLRPCRequest *, NSError *> *errors = [NSMutableDictionary dictionary];
+ [self.connectionManager sendRequests:[choiceRPCs copy] progressHandler:^(__kindof SDLRPCRequest * _Nonnull request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error, float percentComplete) {
+ if (error != nil) {
+ errors[request] = error;
+ }
+ } completionHandler:^(BOOL success) {
+ if (!success) {
+ SDLLogW(@"Error preloading choice cells: %@", errors);
+ weakSelf.internalError = [NSError sdl_choiceSetManager_choiceUploadFailed:errors];
+ }
+
+ SDLLogD(@"Finished preloading choice cells");
+
+ [weakSelf finishOperation];
+ }];
+}
+
+#pragma mark - Assembling Choice Data
+
+- (SDLCreateInteractionChoiceSet *)sdl_choiceFromCell:(SDLChoiceCell *)cell {
+ NSArray<NSString *> *vrCommands = nil;
+ if (cell.voiceCommands == nil) {
+ vrCommands = self.isVROptional ? nil : @[[NSString stringWithFormat:@"%hu", cell.choiceId]];
+ } else {
+ vrCommands = cell.voiceCommands;
+ }
+
+ NSString *menuName = [self.displayCapabilities hasTextFieldOfName:SDLTextFieldNameMenuName] ? cell.text : nil;
+ NSString *secondaryText = [self.displayCapabilities hasTextFieldOfName:SDLTextFieldNameSecondaryText] ? cell.secondaryText : nil;
+ NSString *tertiaryText = [self.displayCapabilities hasTextFieldOfName:SDLTextFieldNameTertiaryText] ? cell.tertiaryText : nil;
+
+ SDLImage *image = ([self.displayCapabilities hasImageFieldOfName:SDLImageFieldNameChoiceImage] && cell.artwork != nil) ? [[SDLImage alloc] initWithName:cell.artwork.name isTemplate:cell.artwork.isTemplate] : nil;
+ SDLImage *secondaryImage = ([self.displayCapabilities hasImageFieldOfName:SDLImageFieldNameChoiceSecondaryImage] && cell.secondaryArtwork != nil) ? [[SDLImage alloc] initWithName:cell.secondaryArtwork.name isTemplate:cell.secondaryArtwork.isTemplate] : nil;
+
+ SDLChoice *choice = [[SDLChoice alloc] initWithId:cell.choiceId menuName:(NSString *_Nonnull)menuName vrCommands:(NSArray<NSString *> * _Nonnull)vrCommands image:image secondaryText:secondaryText secondaryImage:secondaryImage tertiaryText:tertiaryText];
+
+ return [[SDLCreateInteractionChoiceSet alloc] initWithId:(UInt32)choice.choiceID.unsignedIntValue choiceSet:@[choice]];
+}
+
+#pragma mark - Property Overrides
+
+- (void)finishOperation {
+ _currentState = SDLPreloadChoicesOperationStateFinished;
+
+ [super finishOperation];
+}
+
+- (nullable NSString *)name {
+ return @"com.sdl.choicesetmanager.preloadChoices";
+}
+
+- (NSOperationQueuePriority)queuePriority {
+ return NSOperationQueuePriorityNormal;
+}
+
+- (nullable NSError *)error {
+ return self.internalError;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPresentChoiceSetOperation.h b/SmartDeviceLink/SDLPresentChoiceSetOperation.h
new file mode 100644
index 000000000..cf92f51b0
--- /dev/null
+++ b/SmartDeviceLink/SDLPresentChoiceSetOperation.h
@@ -0,0 +1,35 @@
+//
+// SDLPresentChoiceSetOperation.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/24/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLAsynchronousOperation.h"
+#import "SDLInteractionMode.h"
+#import "SDLTriggerSource.h"
+
+@class SDLChoiceCell;
+@class SDLChoiceSet;
+@class SDLKeyboardProperties;
+
+@protocol SDLConnectionManagerType;
+@protocol SDLKeyboardDelegate;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLPresentChoiceSetOperation : SDLAsynchronousOperation
+
+@property (strong, nonatomic, readonly) SDLChoiceSet *choiceSet;
+@property (strong, nonatomic, readonly, nullable) SDLChoiceCell *selectedCell;
+@property (strong, nonatomic, readonly, nullable) SDLTriggerSource selectedTriggerSource;
+@property (assign, nonatomic, readonly) NSUInteger selectedCellRow;
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager choiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode keyboardProperties:(nullable SDLKeyboardProperties *)originalKeyboardProperties keyboardDelegate:(nullable id<SDLKeyboardDelegate>)keyboardDelegate;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPresentChoiceSetOperation.m b/SmartDeviceLink/SDLPresentChoiceSetOperation.m
new file mode 100644
index 000000000..4e923b8e1
--- /dev/null
+++ b/SmartDeviceLink/SDLPresentChoiceSetOperation.m
@@ -0,0 +1,270 @@
+//
+// SDLPresentChoiceSetOperation.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/24/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLPresentChoiceSetOperation.h"
+
+#import "SDLChoiceCell.h"
+#import "SDLChoiceSet.h"
+#import "SDLChoiceSetDelegate.h"
+#import "SDLConnectionManagerType.h"
+#import "SDLKeyboardDelegate.h"
+#import "SDLKeyboardProperties.h"
+#import "SDLLogMacros.h"
+#import "SDLNotificationConstants.h"
+#import "SDLOnKeyboardInput.h"
+#import "SDLPerformInteraction.h"
+#import "SDLPerformInteractionResponse.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLSetGlobalProperties.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLChoiceCell()
+
+@property (assign, nonatomic) UInt16 choiceId;
+
+@end
+
+@interface SDLPresentChoiceSetOperation()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (strong, nonatomic, readwrite) SDLChoiceSet *choiceSet;
+@property (strong, nonatomic) SDLInteractionMode presentationMode;
+@property (strong, nonatomic, nullable) SDLKeyboardProperties *originalKeyboardProperties;
+@property (strong, nonatomic, nullable) SDLKeyboardProperties *keyboardProperties;
+@property (weak, nonatomic) id<SDLKeyboardDelegate> keyboardDelegate;
+
+@property (strong, nonatomic, readonly) SDLPerformInteraction *performInteraction;
+@property (strong, nonatomic, readonly) SDLLayoutMode layoutMode;
+@property (strong, nonatomic, readonly) NSArray<NSNumber<SDLInt> *> *choiceIds;
+@property (assign, nonatomic) BOOL updatedKeyboardProperties;
+
+@property (copy, nonatomic, nullable) NSError *internalError;
+@property (strong, nonatomic, readwrite, nullable) SDLChoiceCell *selectedCell;
+@property (strong, nonatomic, readwrite, nullable) SDLTriggerSource selectedTriggerSource;
+@property (assign, nonatomic, readwrite) NSUInteger selectedCellRow;
+
+@end
+
+@implementation SDLPresentChoiceSetOperation
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager choiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode keyboardProperties:(nullable SDLKeyboardProperties *)originalKeyboardProperties keyboardDelegate:(nullable id<SDLKeyboardDelegate>)keyboardDelegate {
+ self = [super init];
+ if (!self) { return self; }
+
+ _connectionManager = connectionManager;
+ _choiceSet = choiceSet;
+ _presentationMode = mode;
+
+ _originalKeyboardProperties = originalKeyboardProperties;
+ _keyboardProperties = originalKeyboardProperties;
+ _keyboardDelegate = keyboardDelegate;
+
+ _selectedCellRow = NSNotFound;
+
+ return self;
+}
+
+- (void)start {
+ [super start];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_keyboardInputNotification:) name:SDLDidReceiveKeyboardInputNotification object:nil];
+
+ [self sdl_start];
+}
+
+- (void)sdl_start {
+ // Check if we're using a keyboard (searchable) choice set and setup keyboard properties if we need to
+ if (self.keyboardDelegate != nil && [self.keyboardDelegate respondsToSelector:@selector(customKeyboardConfiguration)]) {
+ SDLKeyboardProperties *customProperties = self.keyboardDelegate.customKeyboardConfiguration;
+ if (customProperties != nil) {
+ self.keyboardProperties = customProperties;
+ }
+ }
+
+ [self sdl_updateKeyboardPropertiesWithCompletionHandler:^{
+ if (self.isCancelled) {
+ [self finishOperation];
+ return;
+ }
+
+ [self sdl_presentChoiceSet];
+ }];
+}
+
+#pragma mark - Sending Requests
+
+- (void)sdl_updateKeyboardPropertiesWithCompletionHandler:(nullable void(^)(void))completionHandler {
+ if (self.keyboardProperties == nil) {
+ if (completionHandler != nil) {
+ completionHandler();
+ }
+ return;
+ }
+
+ SDLSetGlobalProperties *setProperties = [[SDLSetGlobalProperties alloc] init];
+ setProperties.keyboardProperties = self.keyboardProperties;
+
+ __weak typeof(self) weakself = self;
+ [self.connectionManager sendConnectionRequest:setProperties withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogE(@"Error setting keyboard properties to new value: %@, with error: %@", request, error);
+ }
+
+ weakself.updatedKeyboardProperties = YES;
+
+ if (completionHandler != nil) {
+ completionHandler();
+ }
+ }];
+}
+
+- (void)sdl_presentChoiceSet {
+ __weak typeof(self) weakself = self;
+ [self.connectionManager sendConnectionRequest:self.performInteraction withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogE(@"Presenting choice set failed with response: %@, error: %@", response, error);
+ weakself.internalError = error;
+
+ [weakself finishOperation];
+ return;
+ }
+
+ SDLPerformInteractionResponse *performResponse = (SDLPerformInteractionResponse *)response;
+ [weakself sdl_setSelectedCellWithId:performResponse.choiceID];
+ weakself.selectedTriggerSource = performResponse.triggerSource;
+
+ [weakself finishOperation];
+ }];
+}
+
+#pragma mark - Helpers
+
+- (void)sdl_setSelectedCellWithId:(NSNumber<SDLInt> *)cellId {
+ __weak typeof(self) weakself = self;
+ [self.choiceSet.choices enumerateObjectsUsingBlock:^(SDLChoiceCell * _Nonnull cell, NSUInteger i, BOOL * _Nonnull stop) {
+ if (cell.choiceId == cellId.unsignedIntValue) {
+ weakself.selectedCell = cell;
+ weakself.selectedCellRow = i;
+ }
+ }];
+}
+
+#pragma mark - Getters
+
+- (SDLPerformInteraction *)performInteraction {
+ SDLPerformInteraction *performInteraction = [[SDLPerformInteraction alloc] init];
+ performInteraction.interactionMode = self.presentationMode;
+ performInteraction.initialText = self.choiceSet.title;
+ performInteraction.initialPrompt = self.choiceSet.initialPrompt;
+ performInteraction.helpPrompt = self.choiceSet.helpPrompt;
+ performInteraction.timeoutPrompt = self.choiceSet.timeoutPrompt;
+ performInteraction.vrHelp = self.choiceSet.helpList;
+ performInteraction.timeout = @((NSUInteger)(self.choiceSet.timeout * 1000));
+ performInteraction.interactionLayout = self.layoutMode;
+ performInteraction.interactionChoiceSetIDList = self.choiceIds;
+
+ return performInteraction;
+}
+
+- (SDLLayoutMode)layoutMode {
+ switch (self.choiceSet.layout) {
+ case SDLChoiceSetLayoutList:
+ return self.keyboardDelegate ? SDLLayoutModeListWithSearch : SDLLayoutModeListOnly;
+ case SDLChoiceSetLayoutTiles:
+ return self.keyboardDelegate ? SDLLayoutModeIconWithSearch : SDLLayoutModeIconOnly;
+ }
+}
+
+- (NSArray<NSNumber<SDLInt> *> *)choiceIds {
+ NSMutableArray<NSNumber<SDLInt> *> *choiceIds = [NSMutableArray arrayWithCapacity:self.choiceSet.choices.count];
+ for (SDLChoiceCell *cell in self.choiceSet.choices) {
+ [choiceIds addObject:@(cell.choiceId)];
+ }
+
+ return [choiceIds copy];
+}
+
+#pragma mark - SDL Notifications
+
+- (void)sdl_keyboardInputNotification:(SDLRPCNotificationNotification *)notification {
+ if (self.isCancelled) {
+ [self finishOperation];
+ return;
+ }
+
+ if (self.keyboardDelegate == nil) { return; }
+ SDLOnKeyboardInput *onKeyboard = notification.notification;
+
+ if ([self.keyboardDelegate respondsToSelector:@selector(keyboardDidSendEvent:text:)]) {
+ [self.keyboardDelegate keyboardDidSendEvent:onKeyboard.event text:onKeyboard.data];
+ }
+
+ __weak typeof(self) weakself = self;
+ if ([onKeyboard.event isEqualToEnum:SDLKeyboardEventVoice] || [onKeyboard.event isEqualToEnum:SDLKeyboardEventSubmitted]) {
+ // Submit voice or text
+ [self.keyboardDelegate userDidSubmitInput:onKeyboard.data withEvent:onKeyboard.event];
+ } else if ([onKeyboard.event isEqualToEnum:SDLKeyboardEventKeypress]) {
+ // Notify of keypress
+ if ([self.keyboardDelegate respondsToSelector:@selector(updateAutocompleteWithInput:completionHandler:)]) {
+ [self.keyboardDelegate updateAutocompleteWithInput:onKeyboard.data completionHandler:^(NSString *updatedAutocompleteText) {
+ weakself.keyboardProperties.autoCompleteText = updatedAutocompleteText;
+ [weakself sdl_updateKeyboardPropertiesWithCompletionHandler:nil];
+ }];
+ }
+
+ if ([self.keyboardDelegate respondsToSelector:@selector(updateCharacterSetWithInput:completionHandler:)]) {
+ [self.keyboardDelegate updateCharacterSetWithInput:onKeyboard.data completionHandler:^(NSArray<NSString *> *updatedCharacterSet) {
+ weakself.keyboardProperties.limitedCharacterList = updatedCharacterSet;
+ [self sdl_updateKeyboardPropertiesWithCompletionHandler:nil];
+ }];
+ }
+ } else if ([onKeyboard.event isEqualToEnum:SDLKeyboardEventAborted] || [onKeyboard.event isEqualToEnum:SDLKeyboardEventCancelled]) {
+ // Notify of abort / cancellation
+ [self.keyboardDelegate keyboardDidAbortWithReason:onKeyboard.event];
+ }
+}
+
+#pragma mark - Property Overrides
+
+- (void)finishOperation {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+ if (self.keyboardProperties == nil) {
+ [super finishOperation];
+ return;
+ }
+
+ // We need to reset the keyboard properties
+ SDLSetGlobalProperties *setProperties = [[SDLSetGlobalProperties alloc] init];
+ setProperties.keyboardProperties = self.originalKeyboardProperties;
+
+ [self.connectionManager sendConnectionRequest:setProperties withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogE(@"Error resetting keyboard properties to values: %@, with error: %@", request, error);
+ }
+
+ [super finishOperation];
+ }];
+}
+
+- (nullable NSString *)name {
+ return @"com.sdl.choicesetmanager.presentChoiceSet";
+}
+
+- (NSOperationQueuePriority)queuePriority {
+ return NSOperationQueuePriorityNormal;
+}
+
+- (nullable NSError *)error {
+ return self.internalError;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPresentKeyboardOperation.h b/SmartDeviceLink/SDLPresentKeyboardOperation.h
new file mode 100644
index 000000000..754260a53
--- /dev/null
+++ b/SmartDeviceLink/SDLPresentKeyboardOperation.h
@@ -0,0 +1,24 @@
+//
+// SDLPresentKeyboardOperation.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/24/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLAsynchronousOperation.h"
+
+@class SDLKeyboardProperties;
+
+@protocol SDLConnectionManagerType;
+@protocol SDLKeyboardDelegate;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLPresentKeyboardOperation : SDLAsynchronousOperation
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager keyboardProperties:(SDLKeyboardProperties *)originalKeyboardProperties initialText:(NSString *)initialText keyboardDelegate:(id<SDLKeyboardDelegate>)keyboardDelegate;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPresentKeyboardOperation.m b/SmartDeviceLink/SDLPresentKeyboardOperation.m
new file mode 100644
index 000000000..b81284ebe
--- /dev/null
+++ b/SmartDeviceLink/SDLPresentKeyboardOperation.m
@@ -0,0 +1,195 @@
+//
+// SDLPresentKeyboardOperation.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/24/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLPresentKeyboardOperation.h"
+
+#import "SDLConnectionManagerType.h"
+#import "SDLKeyboardDelegate.h"
+#import "SDLKeyboardProperties.h"
+#import "SDLLogMacros.h"
+#import "SDLNotificationConstants.h"
+#import "SDLOnKeyboardInput.h"
+#import "SDLPerformInteraction.h"
+#import "SDLPerformInteractionResponse.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLSetGlobalProperties.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLPresentKeyboardOperation()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (weak, nonatomic) id<SDLKeyboardDelegate> keyboardDelegate;
+@property (copy, nonatomic) NSString *initialText;
+@property (strong, nonatomic) SDLKeyboardProperties *originalKeyboardProperties;
+@property (strong, nonatomic) SDLKeyboardProperties *keyboardProperties;
+
+@property (strong, nonatomic, readonly) SDLPerformInteraction *performInteraction;
+
+@property (copy, nonatomic, nullable) NSError *internalError;
+
+@end
+
+@implementation SDLPresentKeyboardOperation
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager keyboardProperties:(SDLKeyboardProperties *)originalKeyboardProperties initialText:(NSString *)initialText keyboardDelegate:(id<SDLKeyboardDelegate>)keyboardDelegate {
+ self = [super init];
+ if (!self) { return self; }
+
+ _connectionManager = connectionManager;
+ _initialText = initialText;
+ _keyboardDelegate = keyboardDelegate;
+ _originalKeyboardProperties = originalKeyboardProperties;
+ _keyboardProperties = originalKeyboardProperties;
+
+ return self;
+}
+
+- (void)start {
+ [super start];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_keyboardInputNotification:) name:SDLDidReceiveKeyboardInputNotification object:nil];
+
+ [self sdl_start];
+}
+
+- (void)sdl_start {
+ if (self.keyboardDelegate != nil && [self.keyboardDelegate respondsToSelector:@selector(customKeyboardConfiguration)]) {
+ SDLKeyboardProperties *customProperties = self.keyboardDelegate.customKeyboardConfiguration;
+ if (customProperties != nil) {
+ self.keyboardProperties = customProperties;
+ }
+ }
+
+ [self sdl_updateKeyboardPropertiesWithCompletionHandler:^{
+ if (self.isCancelled) {
+ [self finishOperation];
+ return;
+ }
+
+ [self sdl_presentKeyboard];
+ }];
+}
+
+#pragma mark - Sending Requests
+
+- (void)sdl_updateKeyboardPropertiesWithCompletionHandler:(nullable void(^)(void))completionHandler {
+ SDLSetGlobalProperties *setProperties = [[SDLSetGlobalProperties alloc] init];
+ setProperties.keyboardProperties = self.keyboardProperties;
+
+ [self.connectionManager sendConnectionRequest:setProperties withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogE(@"Error setting keyboard properties to new value: %@, with error: %@", request, error);
+ }
+
+ if (completionHandler != nil) {
+ completionHandler();
+ }
+ }];
+}
+
+- (void)sdl_presentKeyboard {
+ [self.connectionManager sendConnectionRequest:self.performInteraction withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ if (self.isCancelled) {
+ [self finishOperation];
+ return;
+ }
+
+ if (error != nil) {
+ self.internalError = error;
+ }
+
+ [self finishOperation];
+ }];
+}
+
+#pragma mark - Private Getters / Setters
+
+- (SDLPerformInteraction *)performInteraction {
+ SDLPerformInteraction *performInteraction = [[SDLPerformInteraction alloc] init];
+ performInteraction.initialText = self.initialText;
+ performInteraction.interactionMode = SDLInteractionModeManualOnly;
+ performInteraction.interactionChoiceSetIDList = @[];
+ performInteraction.interactionLayout = SDLLayoutModeKeyboard;
+
+ return performInteraction;
+}
+
+#pragma mark - Notification Observers
+
+- (void)sdl_keyboardInputNotification:(SDLRPCNotificationNotification *)notification {
+ if (self.isCancelled) {
+ [self finishOperation];
+ return;
+ }
+
+ if (self.keyboardDelegate == nil) { return; }
+ SDLOnKeyboardInput *onKeyboard = notification.notification;
+
+ if ([self.keyboardDelegate respondsToSelector:@selector(keyboardDidSendEvent:text:)]) {
+ [self.keyboardDelegate keyboardDidSendEvent:onKeyboard.event text:onKeyboard.data];
+ }
+
+ __weak typeof(self) weakself = self;
+ if ([onKeyboard.event isEqualToEnum:SDLKeyboardEventVoice] || [onKeyboard.event isEqualToEnum:SDLKeyboardEventSubmitted]) {
+ // Submit voice or text
+ [self.keyboardDelegate userDidSubmitInput:onKeyboard.data withEvent:onKeyboard.event];
+ } else if ([onKeyboard.event isEqualToEnum:SDLKeyboardEventKeypress]) {
+ // Notify of keypress
+ if ([self.keyboardDelegate respondsToSelector:@selector(updateAutocompleteWithInput:completionHandler:)]) {
+ [self.keyboardDelegate updateAutocompleteWithInput:onKeyboard.data completionHandler:^(NSString *updatedAutocompleteText) {
+ weakself.keyboardProperties.autoCompleteText = updatedAutocompleteText;
+ [weakself sdl_updateKeyboardPropertiesWithCompletionHandler:nil];
+ }];
+ }
+
+ if ([self.keyboardDelegate respondsToSelector:@selector(updateCharacterSetWithInput:completionHandler:)]) {
+ [self.keyboardDelegate updateCharacterSetWithInput:onKeyboard.data completionHandler:^(NSArray<NSString *> *updatedCharacterSet) {
+ weakself.keyboardProperties.limitedCharacterList = updatedCharacterSet;
+ [self sdl_updateKeyboardPropertiesWithCompletionHandler:nil];
+ }];
+ }
+ } else if ([onKeyboard.event isEqualToEnum:SDLKeyboardEventAborted] || [onKeyboard.event isEqualToEnum:SDLKeyboardEventCancelled]) {
+ // Notify of abort / cancellation
+ [self.keyboardDelegate keyboardDidAbortWithReason:onKeyboard.event];
+ }
+}
+
+#pragma mark - Property Overrides
+
+- (nullable NSString *)name {
+ return @"com.sdl.choicesetmanager.presentKeyboard";
+}
+
+- (NSOperationQueuePriority)queuePriority {
+ return NSOperationQueuePriorityNormal;
+}
+
+- (void)finishOperation {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+ // We need to reset the keyboard properties
+ SDLSetGlobalProperties *setProperties = [[SDLSetGlobalProperties alloc] init];
+ setProperties.keyboardProperties = self.originalKeyboardProperties;
+
+ [self.connectionManager sendConnectionRequest:setProperties withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogE(@"Error resetting keyboard properties to values: %@, with error: %@", request, error);
+ }
+
+ [super finishOperation];
+ }];
+}
+
+- (nullable NSError *)error {
+ return self.internalError;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPrimaryAudioSource.h b/SmartDeviceLink/SDLPrimaryAudioSource.h
index 6c3d32732..c02bd0927 100644
--- a/SmartDeviceLink/SDLPrimaryAudioSource.h
+++ b/SmartDeviceLink/SDLPrimaryAudioSource.h
@@ -45,3 +45,28 @@ extern SDLPrimaryAudioSource const SDLPrimaryAudioSourceIpod;
* Mobile app is current source
*/
extern SDLPrimaryAudioSource const SDLPrimaryAudioSourceMobileApp;
+
+/**
+ * @abstract CD is current source
+ */
+extern SDLPrimaryAudioSource const SDLPrimaryAudioSourceCD;
+
+/**
+ * @abstract Radio frequency AM is current source
+ */
+extern SDLPrimaryAudioSource const SDLPrimaryAudioSourceAM;
+
+/**
+ * @abstract Radio frequency FM is current source
+ */
+extern SDLPrimaryAudioSource const SDLPrimaryAudioSourceFM;
+
+/**
+ * @abstract Radio frequency XM is current source
+ */
+extern SDLPrimaryAudioSource const SDLPrimaryAudioSourceXM;
+
+/**
+ * @abstract Radio frequency DAB is current source
+ */
+extern SDLPrimaryAudioSource const SDLPrimaryAudioSourceDAB;
diff --git a/SmartDeviceLink/SDLPrimaryAudioSource.m b/SmartDeviceLink/SDLPrimaryAudioSource.m
index d0cdd8214..c9764cbfb 100644
--- a/SmartDeviceLink/SDLPrimaryAudioSource.m
+++ b/SmartDeviceLink/SDLPrimaryAudioSource.m
@@ -11,3 +11,9 @@ SDLPrimaryAudioSource const SDLPrimaryAudioSourceBluetoothStereo = @"BLUETOOTH_S
SDLPrimaryAudioSource const SDLPrimaryAudioSourceLineIn = @"LINE_IN";
SDLPrimaryAudioSource const SDLPrimaryAudioSourceIpod = @"IPOD";
SDLPrimaryAudioSource const SDLPrimaryAudioSourceMobileApp = @"MOBILE_APP";
+SDLPrimaryAudioSource const SDLPrimaryAudioSourceCD = @"CD";
+SDLPrimaryAudioSource const SDLPrimaryAudioSourceRadioTuner = @"RADIO_TUNER";
+SDLPrimaryAudioSource const SDLPrimaryAudioSourceAM = @"AM";
+SDLPrimaryAudioSource const SDLPrimaryAudioSourceFM = @"FM";
+SDLPrimaryAudioSource const SDLPrimaryAudioSourceXM = @"XM";
+SDLPrimaryAudioSource const SDLPrimaryAudioSourceDAB = @"DAB";
diff --git a/SmartDeviceLink/SDLProtocol.h b/SmartDeviceLink/SDLProtocol.h
index 35055fbf6..e4d0e44fc 100644
--- a/SmartDeviceLink/SDLProtocol.h
+++ b/SmartDeviceLink/SDLProtocol.h
@@ -41,6 +41,8 @@ extern NSString *const SDLProtocolSecurityErrorDomain;
/**
* A table for tracking all subscribers
+ *
+ * If you update protocolDelegateTable while the protocol is running, please make sure to guard with @synchronized.
*/
@property (nullable, strong, nonatomic) NSHashTable<id<SDLProtocolListener>> *protocolDelegateTable;
@@ -57,6 +59,17 @@ extern NSString *const SDLProtocolSecurityErrorDomain;
#pragma mark - Sending
/**
+ * Pre-configure protocol header for specified service type
+ *
+ * This is used to initialize Session ID before starting a protocol.
+ *
+ * @param header The header which is applied to the service type
+ * @param serviceType A SDLServiceType object
+ * @return YES if the header is successfully set, NO otherwise
+ */
+- (BOOL)storeHeader:(SDLProtocolHeader *)header forServiceType:(SDLServiceType)serviceType;
+
+/**
* Sends a start service message to Core
*
* @param serviceType A SDLServiceType object
@@ -81,6 +94,11 @@ extern NSString *const SDLProtocolSecurityErrorDomain;
- (void)endServiceWithType:(SDLServiceType)serviceType;
/**
+ * Sends a Register Secondary Transport control frame to Core
+ */
+- (void)registerSecondaryTransport;
+
+/**
* Sends an unencrypted RPC to Core
*
* @param message A SDLRPCMessage message
diff --git a/SmartDeviceLink/SDLProtocol.m b/SmartDeviceLink/SDLProtocol.m
index 89bd5aeb8..ab6eb647e 100644
--- a/SmartDeviceLink/SDLProtocol.m
+++ b/SmartDeviceLink/SDLProtocol.m
@@ -8,6 +8,7 @@
#import "SDLControlFramePayloadConstants.h"
#import "SDLControlFramePayloadEndService.h"
#import "SDLControlFramePayloadNak.h"
+#import "SDLControlFramePayloadRegisterSecondaryTransportNak.h"
#import "SDLControlFramePayloadRPCStartService.h"
#import "SDLControlFramePayloadRPCStartServiceAck.h"
#import "SDLLogMacros.h"
@@ -74,6 +75,15 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Service metadata
+- (BOOL)storeHeader:(SDLProtocolHeader *)header forServiceType:(SDLServiceType)serviceType {
+ if (header == nil) {
+ return NO;
+ }
+
+ SDLLogD(@"Storing SessionID %i of serviceType %i", header.sessionID, serviceType);
+ self.serviceHeaders[@(serviceType)] = [header copy];
+ return YES;
+}
- (UInt8)sdl_retrieveSessionIDforServiceType:(SDLServiceType)serviceType {
SDLProtocolHeader *header = self.serviceHeaders[@(serviceType)];
@@ -87,7 +97,11 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - SDLTransportDelegate
- (void)onTransportConnected {
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners;
+ @synchronized(self.protocolDelegateTable) {
+ listeners = self.protocolDelegateTable.allObjects;
+ }
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(onProtocolOpened)]) {
[listener onProtocolOpened];
}
@@ -95,7 +109,11 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)onTransportDisconnected {
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners;
+ @synchronized(self.protocolDelegateTable) {
+ listeners = self.protocolDelegateTable.allObjects;
+ }
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(onProtocolClosed)]) {
[listener onProtocolClosed];
}
@@ -106,6 +124,14 @@ NS_ASSUME_NONNULL_BEGIN
[self handleBytesFromTransport:receivedData];
}
+- (void)onError:(NSError *)error {
+ for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ if ([listener respondsToSelector:@selector(onTransportError:)]) {
+ [listener onTransportError:error];
+ }
+ }
+}
+
#pragma mark - Start Service
- (void)startServiceWithType:(SDLServiceType)serviceType payload:(nullable NSData *)payload {
@@ -211,6 +237,23 @@ NS_ASSUME_NONNULL_BEGIN
}
+#pragma mark - Register Secondary Transport
+
+- (void)registerSecondaryTransport {
+ SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:(UInt8)[SDLGlobals sharedGlobals].majorProtocolVersion];
+ header.frameType = SDLFrameTypeControl;
+ header.serviceType = SDLServiceTypeControl;
+ header.frameData = SDLFrameInfoRegisterSecondaryTransport;
+ header.sessionID = [self sdl_retrieveSessionIDforServiceType:SDLServiceTypeControl];
+ if ([SDLGlobals sharedGlobals].majorProtocolVersion >= 2) {
+ [((SDLV2ProtocolHeader *)header) setMessageID:++_messageID];
+ }
+
+ SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
+ [self sdl_sendDataToTransport:message.data onService:SDLServiceTypeControl];
+}
+
+
#pragma mark - Send Data
- (void)sendRPC:(SDLRPCMessage *)message {
@@ -459,7 +502,8 @@ NS_ASSUME_NONNULL_BEGIN
self.serviceHeaders[@(startServiceACK.header.serviceType)] = [startServiceACK.header copy];
// Pass along to all the listeners
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(handleProtocolStartServiceACKMessage:)]) {
[listener handleProtocolStartServiceACKMessage:startServiceACK];
}
@@ -469,7 +513,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK {
[self sdl_logControlNAKPayload:startServiceNAK];
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(handleProtocolStartServiceNAKMessage:)]) {
[listener handleProtocolStartServiceNAKMessage:startServiceNAK];
}
@@ -480,7 +525,8 @@ NS_ASSUME_NONNULL_BEGIN
// Remove the session id
[self.serviceHeaders removeObjectForKey:@(endServiceACK.header.serviceType)];
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(handleProtocolEndServiceACKMessage:)]) {
[listener handleProtocolEndServiceACKMessage:endServiceACK];
}
@@ -490,13 +536,34 @@ NS_ASSUME_NONNULL_BEGIN
- (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK {
[self sdl_logControlNAKPayload:endServiceNAK];
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(handleProtocolEndServiceNAKMessage:)]) {
[listener handleProtocolEndServiceNAKMessage:endServiceNAK];
}
}
}
+- (void)handleProtocolRegisterSecondaryTransportACKMessage:(SDLProtocolMessage *)registerSecondaryTransportACK {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
+ if ([listener respondsToSelector:@selector(handleProtocolRegisterSecondaryTransportACKMessage:)]) {
+ [listener handleProtocolRegisterSecondaryTransportACKMessage:registerSecondaryTransportACK];
+ }
+ }
+}
+
+- (void)handleProtocolRegisterSecondaryTransportNAKMessage:(SDLProtocolMessage *)registerSecondaryTransportNAK {
+ [self sdl_logControlNAKPayload:registerSecondaryTransportNAK];
+
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
+ if ([listener respondsToSelector:@selector(handleProtocolRegisterSecondaryTransportNAKMessage:)]) {
+ [listener handleProtocolRegisterSecondaryTransportNAKMessage:registerSecondaryTransportNAK];
+ }
+ }
+}
+
- (void)handleHeartbeatForSession:(Byte)session {
// Respond with a heartbeat ACK
SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:(UInt8)[SDLGlobals sharedGlobals].majorProtocolVersion];
@@ -507,7 +574,8 @@ NS_ASSUME_NONNULL_BEGIN
SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
[self sdl_sendDataToTransport:message.data onService:header.serviceType];
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(handleHeartbeatForSession:)]) {
[listener handleHeartbeatForSession:session];
}
@@ -515,13 +583,23 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)handleHeartbeatACK {
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(handleHeartbeatACK)]) {
[listener handleHeartbeatACK];
}
}
}
+- (void)handleTransportEventUpdateMessage:(SDLProtocolMessage *)transportEventUpdate {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
+ if ([listener respondsToSelector:@selector(handleTransportEventUpdateMessage:)]) {
+ [listener handleTransportEventUpdateMessage:transportEventUpdate];
+ }
+ }
+}
+
- (void)onProtocolMessageReceived:(SDLProtocolMessage *)msg {
// Control service (but not control frame type) messages are TLS handshake messages
if (msg.header.serviceType == SDLServiceTypeControl) {
@@ -529,7 +607,8 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(onProtocolMessageReceived:)]) {
[listener onProtocolMessageReceived:msg];
}
@@ -537,7 +616,8 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)onProtocolOpened {
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(onProtocolOpened)]) {
[listener onProtocolOpened];
}
@@ -545,7 +625,8 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)onProtocolClosed {
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(onProtocolClosed)]) {
[listener onProtocolClosed];
}
@@ -553,7 +634,8 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)onError:(NSString *)info exception:(NSException *)e {
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
+ NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolListener> listener in listeners) {
if ([listener respondsToSelector:@selector(onError:exception:)]) {
[listener onError:info exception:e];
}
@@ -561,12 +643,29 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)sdl_logControlNAKPayload:(SDLProtocolMessage *)nakMessage {
- if (nakMessage.header.version >= 5) {
- SDLControlFramePayloadNak *endServiceNakPayload = [[SDLControlFramePayloadNak alloc] initWithData:nakMessage.payload];
- NSArray<NSString *> *rejectedParams = endServiceNakPayload.rejectedParams;
- if (rejectedParams.count > 0) {
- SDLLogE(@"Start Service NAK'd, service type: %@, rejectedParams: %@", @(nakMessage.header.serviceType), rejectedParams);
- }
+ switch (nakMessage.header.frameData) {
+ case SDLFrameInfoStartServiceNACK: // fallthrough
+ case SDLFrameInfoEndServiceNACK: {
+ if (nakMessage.header.version >= 5) {
+ SDLControlFramePayloadNak *endServiceNakPayload = [[SDLControlFramePayloadNak alloc] initWithData:nakMessage.payload];
+ NSArray<NSString *> *rejectedParams = endServiceNakPayload.rejectedParams;
+ if (rejectedParams.count > 0) {
+ SDLLogE(@"Start Service NAK'd, service type: %@, rejectedParams: %@", @(nakMessage.header.serviceType), rejectedParams);
+ }
+ }
+ } break;
+ case SDLFrameInfoRegisterSecondaryTransportNACK: {
+ SDLControlFramePayloadRegisterSecondaryTransportNak *payload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithData:nakMessage.payload];
+ SDLLogE(@"Register Secondary Transport NAK'd, reason: %@", payload.reason);
+ } break;
+ default:
+ break;
+ }
+}
+
+- (NSArray<id<SDLProtocolListener>> *)sdl_getProtocolListeners {
+ @synchronized(self.protocolDelegateTable) {
+ return self.protocolDelegateTable.allObjects;
}
}
diff --git a/SmartDeviceLink/SDLProtocolConstants.h b/SmartDeviceLink/SDLProtocolConstants.h
index 8ce267964..592605b24 100644
--- a/SmartDeviceLink/SDLProtocolConstants.h
+++ b/SmartDeviceLink/SDLProtocolConstants.h
@@ -49,6 +49,10 @@ typedef NS_ENUM(UInt8, SDLServiceType) {
- SDLFrameInfoEndService: Requests that a specific type of service is ended.
- SDLFrameInfoEndServiceACK: Acknowledges that the specific service has been ended successfully.
- SDLFrameInfoEndServiceNACK: Negatively acknowledges that the specific service was not ended or has not yet been started.
+ - SDLFrameInfoRegisterSecondaryTransport: Notifies that a Secondary Transport has been established.
+ - SDLFrameInfoRegisterSecondaryTransportACK: Acknowledges that the Secondary Transport has been recognized.
+ - SDLFrameInfoRegisterSecondaryTransportNACK: Negatively acknowledges that the Secondary Transport has not been recognized.
+ - SDLFrameInfoTransportEventUpdate: Indicates the status or configuration of transport(s) is/are updated.
- SDLFrameInfoServiceDataAck: Deprecated.
- SDLFrameInfoHeartbeatACK: Acknowledges that a Heartbeat control packet has been received.
- SDLFrameInfoSingleFrame: Payload contains a single packet.
@@ -63,6 +67,10 @@ typedef NS_ENUM(UInt8, SDLFrameInfo) {
SDLFrameInfoEndService = 0x04,
SDLFrameInfoEndServiceACK = 0x05,
SDLFrameInfoEndServiceNACK = 0x06,
+ SDLFrameInfoRegisterSecondaryTransport = 0x07,
+ SDLFrameInfoRegisterSecondaryTransportACK = 0x08,
+ SDLFrameInfoRegisterSecondaryTransportNACK = 0x09,
+ SDLFrameInfoTransportEventUpdate = 0xFD,
SDLFrameInfoServiceDataAck = 0xFE,
SDLFrameInfoHeartbeatACK = 0xFF,
// If frameType == Single (0x01)
diff --git a/SmartDeviceLink/SDLProtocolListener.h b/SmartDeviceLink/SDLProtocolListener.h
index 35d6a7623..e944f25f6 100644
--- a/SmartDeviceLink/SDLProtocolListener.h
+++ b/SmartDeviceLink/SDLProtocolListener.h
@@ -40,6 +40,9 @@ NS_ASSUME_NONNULL_BEGIN
* @param endServiceNAK A SDLProtocolMessage object
*/
- (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK;
+- (void)handleProtocolRegisterSecondaryTransportACKMessage:(SDLProtocolMessage *)registerSecondaryTransportACK;
+- (void)handleProtocolRegisterSecondaryTransportNAKMessage:(SDLProtocolMessage *)registerSecondaryTransportNAK;
+- (void)handleTransportEventUpdateMessage:(SDLProtocolMessage *)transportEventUpdate;
#pragma mark - Older protocol handlers
@@ -80,6 +83,15 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)onError:(NSString *)info exception:(NSException *)e;
+/**
+ * Called when an error is notified from transport.
+ *
+ * Note: currently, this is used only by TCP transport.
+ *
+ * @param error The type of the error
+ */
+- (void)onTransportError:(NSError *)error;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLProtocolReceivedMessageRouter.m b/SmartDeviceLink/SDLProtocolReceivedMessageRouter.m
index cb12229cf..a4bbf71e2 100644
--- a/SmartDeviceLink/SDLProtocolReceivedMessageRouter.m
+++ b/SmartDeviceLink/SDLProtocolReceivedMessageRouter.m
@@ -72,6 +72,16 @@ NS_ASSUME_NONNULL_BEGIN
[self.delegate handleProtocolEndServiceNAKMessage:message];
}
} break;
+ case SDLFrameInfoRegisterSecondaryTransportACK: {
+ if ([self.delegate respondsToSelector:@selector(handleProtocolRegisterSecondaryTransportACKMessage:)]) {
+ [self.delegate handleProtocolRegisterSecondaryTransportACKMessage:message];
+ }
+ } break;
+ case SDLFrameInfoRegisterSecondaryTransportNACK: {
+ if ([self.delegate respondsToSelector:@selector(handleProtocolRegisterSecondaryTransportNAKMessage:)]) {
+ [self.delegate handleProtocolRegisterSecondaryTransportNAKMessage:message];
+ }
+ } break;
case SDLFrameInfoHeartbeat: {
if ([self.delegate respondsToSelector:@selector(handleHeartbeatForSession:)]) {
[self.delegate handleHeartbeatForSession:message.header.sessionID];
@@ -82,6 +92,11 @@ NS_ASSUME_NONNULL_BEGIN
[self.delegate handleHeartbeatACK];
}
} break;
+ case SDLFrameInfoTransportEventUpdate: {
+ if ([self.delegate respondsToSelector:@selector(handleTransportEventUpdateMessage:)]) {
+ [self.delegate handleTransportEventUpdateMessage:message];
+ }
+ } break;
default: break; // Other frame data is possible, but we don't care about them
}
}
diff --git a/SmartDeviceLink/SDLProxy.h b/SmartDeviceLink/SDLProxy.h
index 2863eef23..9049cf93f 100644
--- a/SmartDeviceLink/SDLProxy.h
+++ b/SmartDeviceLink/SDLProxy.h
@@ -4,6 +4,7 @@
@class SDLProtocol;
@class SDLPutFile;
@class SDLRPCMessage;
+@class SDLSecondaryTransportManager;
@class SDLStreamingMediaManager;
@class SDLTimer;
@@ -48,29 +49,32 @@ NS_ASSUME_NONNULL_BEGIN
/**
* Convenience init.
*
- * @param transport The type of network connection
- * @param delegate The subscriber
- * @return A SDLProxy object
+ * @param transport The type of network connection
+ * @param delegate The subscriber
+ * @param secondaryTransportManager The secondary transport manager
+ * @return A SDLProxy object
*/
-- (id)initWithTransport:(id<SDLTransportType>)transport delegate:(id<SDLProxyListener>)delegate;
+- (id)initWithTransport:(id<SDLTransportType>)transport delegate:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager;
/**
* Creates a SDLProxy object with an iap (USB / Bluetooth) transport network connection.
*
- * @param delegate The subscriber
- * @return A SDLProxy object
+ * @param delegate The subscriber
+ * @param secondaryTransportManager The secondary transport manager
+ * @return A SDLProxy object
*/
-+ (SDLProxy *)iapProxyWithListener:(id<SDLProxyListener>)delegate;
++ (SDLProxy *)iapProxyWithListener:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager;
/**
* Creates a SDLProxy object with a TCP (WiFi) transport network connection.
*
- * @param delegate The subscriber
- * @param ipaddress The IP address of Core
- * @param port The port address of Core
- * @return A SDLProxy object
+ * @param delegate The subscriber
+ * @param ipaddress The IP address of Core
+ * @param port The port address of Core
+ * @param secondaryTransportManager The secondary transport manager
+ * @return A SDLProxy object
*/
-+ (SDLProxy *)tcpProxyWithListener:(id<SDLProxyListener>)delegate tcpIPAddress:(NSString *)ipaddress tcpPort:(NSString *)port;
++ (SDLProxy *)tcpProxyWithListener:(id<SDLProxyListener>)delegate tcpIPAddress:(NSString *)ipaddress tcpPort:(NSString *)port secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager;
/**
* Adds a delegate.
diff --git a/SmartDeviceLink/SDLProxy.m b/SmartDeviceLink/SDLProxy.m
index ddaff8fe0..4d78fcf3b 100644
--- a/SmartDeviceLink/SDLProxy.m
+++ b/SmartDeviceLink/SDLProxy.m
@@ -6,7 +6,6 @@
#import <UIKit/UIKit.h>
#import <objc/runtime.h>
-#import "SDLTransportType.h"
#import "SDLAudioStreamingState.h"
#import "SDLLogMacros.h"
#import "SDLEncodedSyncPData.h"
@@ -18,6 +17,8 @@
#import "SDLLanguage.h"
#import "SDLLayoutMode.h"
#import "SDLLockScreenStatusManager.h"
+#import "SDLOnButtonEvent.h"
+#import "SDLOnButtonPress.h"
#import "SDLOnHMIStatus.h"
#import "SDLOnSystemRequest.h"
#import "SDLPolicyDataParser.h"
@@ -28,11 +29,15 @@
#import "SDLRPCResponse.h"
#import "SDLRegisterAppInterfaceResponse.h"
#import "SDLRequestType.h"
+#import "SDLSecondaryTransportManager.h"
#import "SDLStreamingMediaManager.h"
+#import "SDLSubscribeButton.h"
#import "SDLSystemContext.h"
#import "SDLSystemRequest.h"
#import "SDLTCPTransport.h"
#import "SDLTimer.h"
+#import "SDLTransportType.h"
+#import "SDLUnsubscribeButton.h"
#import "SDLVehicleType.h"
NS_ASSUME_NONNULL_BEGIN
@@ -42,7 +47,7 @@ typedef NSString SDLVehicleMake;
typedef void (^URLSessionTaskCompletionHandler)(NSData *data, NSURLResponse *response, NSError *error);
typedef void (^URLSessionDownloadTaskCompletionHandler)(NSURL *location, NSURLResponse *response, NSError *error);
-NSString *const SDLProxyVersion = @"6.0.2";
+NSString *const SDLProxyVersion = @"6.1.0";
const float StartSessionTime = 10.0;
const float NotifyProxyClosedDelay = (float)0.1;
const int PoliciesCorrelationId = 65535;
@@ -65,7 +70,7 @@ static float DefaultConnectionTimeout = 45.0;
@implementation SDLProxy
#pragma mark - Object lifecycle
-- (instancetype)initWithTransport:(id<SDLTransportType>)transport delegate:(id<SDLProxyListener>)delegate {
+- (instancetype)initWithTransport:(id<SDLTransportType>)transport delegate:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager {
if (self = [super init]) {
SDLLogD(@"Framework Version: %@", self.proxyVersion);
_lsm = [[SDLLockScreenStatusManager alloc] init];
@@ -80,6 +85,11 @@ static float DefaultConnectionTimeout = 45.0;
[_protocol.protocolDelegateTable addObject:self];
_protocol.transport = transport;
+ // make sure that secondary transport manager is started prior to starting protocol
+ if (secondaryTransportManager != nil) {
+ [secondaryTransportManager startWithPrimaryProtocol:_protocol];
+ }
+
[self.transport connect];
SDLLogV(@"Proxy transport initialization");
@@ -97,17 +107,17 @@ static float DefaultConnectionTimeout = 45.0;
return self;
}
-+ (SDLProxy *)iapProxyWithListener:(id<SDLProxyListener>)delegate {
++ (SDLProxy *)iapProxyWithListener:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager {
SDLIAPTransport *transport = [[SDLIAPTransport alloc] init];
- SDLProxy *ret = [[SDLProxy alloc] initWithTransport:transport delegate:delegate];
+ SDLProxy *ret = [[SDLProxy alloc] initWithTransport:transport delegate:delegate secondaryTransportManager:secondaryTransportManager];
return ret;
}
-+ (SDLProxy *)tcpProxyWithListener:(id<SDLProxyListener>)delegate tcpIPAddress:(NSString *)ipaddress tcpPort:(NSString *)port {
++ (SDLProxy *)tcpProxyWithListener:(id<SDLProxyListener>)delegate tcpIPAddress:(NSString *)ipaddress tcpPort:(NSString *)port secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager {
SDLTCPTransport *transport = [[SDLTCPTransport alloc] initWithHostName:ipaddress portNumber:port];
- SDLProxy *ret = [[SDLProxy alloc] initWithTransport:transport delegate:delegate];
+ SDLProxy *ret = [[SDLProxy alloc] initWithTransport:transport delegate:delegate secondaryTransportManager:secondaryTransportManager];
return ret;
}
@@ -243,6 +253,10 @@ static float DefaultConnectionTimeout = 45.0;
[self invokeMethodOnDelegates:@selector(onError:) withObject:e];
}
+- (void)onTransportError:(NSError *)error {
+ [self invokeMethodOnDelegates:@selector(onTransportError:) withObject:error];
+}
+
- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
// Turn off the timer, the start session response came back
[self.startSessionTimer cancel];
@@ -262,8 +276,16 @@ static float DefaultConnectionTimeout = 45.0;
}
-#pragma mark - Message sending and recieving
+#pragma mark - Message sending
- (void)sendRPC:(SDLRPCMessage *)message {
+ if ([message.getFunctionName isEqualToString:@"SubscribeButton"]) {
+ BOOL handledRPC = [self sdl_adaptButtonSubscribeMessage:(SDLSubscribeButton *)message];
+ if (handledRPC) { return; }
+ } else if ([message.getFunctionName isEqualToString:@"UnsubscribeButton"]) {
+ BOOL handledRPC = [self sdl_adaptButtonUnsubscribeMessage:(SDLUnsubscribeButton *)message];
+ if (handledRPC) { return; }
+ }
+
@try {
[self.protocol sendRPC:message];
} @catch (NSException *exception) {
@@ -271,6 +293,85 @@ static float DefaultConnectionTimeout = 45.0;
}
}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (BOOL)sdl_adaptButtonSubscribeMessage:(SDLSubscribeButton *)message {
+ if ([SDLGlobals sharedGlobals].rpcVersion.majorVersion.intValue >= 5) {
+ if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ SDLSubscribeButton *playPauseMessage = [message copy];
+ playPauseMessage.buttonName = SDLButtonNamePlayPause;
+
+ @try {
+ [self.protocol sendRPC:message];
+ [self.protocol sendRPC:playPauseMessage];
+ } @catch (NSException *exception) {
+ SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
+ }
+
+ return YES;
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ return NO;
+ }
+ } else { // Major version < 5
+ if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ return NO;
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ SDLSubscribeButton *okMessage = [message copy];
+ okMessage.buttonName = SDLButtonNameOk;
+
+ @try {
+ [self.protocol sendRPC:okMessage];
+ } @catch (NSException *exception) {
+ SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
+ }
+
+ return YES;
+ }
+ }
+
+ return NO;
+}
+
+- (BOOL)sdl_adaptButtonUnsubscribeMessage:(SDLUnsubscribeButton *)message {
+ if ([SDLGlobals sharedGlobals].rpcVersion.majorVersion.intValue >= 5) {
+ if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ SDLUnsubscribeButton *playPauseMessage = [message copy];
+ playPauseMessage.buttonName = SDLButtonNamePlayPause;
+
+ @try {
+ [self.protocol sendRPC:message];
+ [self.protocol sendRPC:playPauseMessage];
+ } @catch (NSException *exception) {
+ SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
+ }
+
+ return YES;
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ return NO;
+ }
+ } else { // Major version < 5
+ if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ return NO;
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ SDLUnsubscribeButton *okMessage = [message copy];
+ okMessage.buttonName = SDLButtonNameOk;
+
+ @try {
+ [self.protocol sendRPC:okMessage];
+ } @catch (NSException *exception) {
+ SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
+ }
+
+ return YES;
+ }
+ }
+
+ return NO;
+}
+#pragma clang diagnostic pop
+
+#pragma mark - Message Receiving
+
- (void)handleProtocolMessage:(SDLProtocolMessage *)incomingMessage {
// Convert protocol message to dictionary
NSDictionary<NSString *, id> *rpcMessageAsDictionary = [incomingMessage rpcDictionary];
@@ -294,9 +395,6 @@ static float DefaultConnectionTimeout = 45.0;
NSString *functionClassName = [NSString stringWithFormat:@"SDL%@", functionName];
SDLRPCMessage *newMessage = [[NSClassFromString(functionClassName) alloc] initWithDictionary:[dict mutableCopy]];
- // Log the RPC message
- SDLLogV(@"Message received: %@", newMessage);
-
// Intercept and handle several messages ourselves
if ([functionName isEqualToString:SDLNameOnAppInterfaceUnregistered] || [functionName isEqualToString:SDLNameUnregisterAppInterface]) {
[self handleRPCUnregistered:dict];
@@ -318,10 +416,30 @@ static float DefaultConnectionTimeout = 45.0;
[self handleSystemRequestResponse:newMessage];
}
- // 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:newMessage];
+
+ if ([functionName isEqualToString:@"OnButtonPress"]) {
+ SDLOnButtonPress *message = (SDLOnButtonPress *)newMessage;
+ if ([SDLGlobals sharedGlobals].rpcVersion.majorVersion.intValue >= 5) {
+ BOOL handledRPC = [self sdl_handleOnButtonPressPostV5:message];
+ if (handledRPC) { return; }
+ } else { // RPC version of 4 or less (connected to an old head unit)
+ BOOL handledRPC = [self sdl_handleOnButtonPressPreV5:message];
+ if (handledRPC) { return; }
+ }
+ }
+
+ if ([functionName isEqualToString:@"OnButtonEvent"]) {
+ SDLOnButtonEvent *message = (SDLOnButtonEvent *)newMessage;
+ if ([SDLGlobals sharedGlobals].rpcVersion.majorVersion.intValue >= 5) {
+ BOOL handledRPC = [self sdl_handleOnButtonEventPostV5:message];
+ if (handledRPC) { return; }
+ } else {
+ BOOL handledRPC = [self sdl_handleOnButtonEventPreV5:message];
+ if (handledRPC) { return; }
+ }
+ }
+
+ [self sdl_invokeDelegateMethodsWithFunction:functionName message:newMessage];
// When an OnHMIStatus notification comes in, after passing it on (above), generate an "OnLockScreenNotification"
if ([functionName isEqualToString:@"OnHMIStatus"]) {
@@ -334,6 +452,13 @@ static float DefaultConnectionTimeout = 45.0;
}
}
+- (void)sdl_invokeDelegateMethodsWithFunction:(NSString *)functionName message:(SDLRPCMessage *)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];
+}
+
#pragma mark - RPC Handlers
@@ -393,6 +518,89 @@ static float DefaultConnectionTimeout = 45.0;
SDLLogV(@"SystemRequestResponse to be discarded");
}
+#pragma mark BackCompatability ButtonName Helpers
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (BOOL)sdl_handleOnButtonPressPreV5:(SDLOnButtonPress *)message {
+ // Drop PlayPause, this shouldn't come in
+ if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ return YES;
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ // Send Ok and Play/Pause notifications
+ SDLOnButtonPress *playPausePress = [message copy];
+ playPausePress.buttonName = SDLButtonNamePlayPause;
+
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:playPausePress];
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
+ return YES;
+ }
+
+ return NO;
+}
+
+- (BOOL)sdl_handleOnButtonPressPostV5:(SDLOnButtonPress *)message {
+ if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ // Send PlayPause & OK notifications
+ SDLOnButtonPress *okPress = [message copy];
+ okPress.buttonName = SDLButtonNameOk;
+
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:okPress];
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
+ return YES;
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ // Send PlayPause and OK notifications
+ SDLOnButtonPress *playPausePress = [message copy];
+ playPausePress.buttonName = SDLButtonNamePlayPause;
+
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:playPausePress];
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
+ return YES;
+ }
+
+ return NO;
+}
+
+- (BOOL)sdl_handleOnButtonEventPreV5:(SDLOnButtonEvent *)message {
+ // Drop PlayPause, this shouldn't come in
+ if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ return YES;
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ // Send Ok and Play/Pause notifications
+ SDLOnButtonEvent *playPauseEvent = [message copy];
+ playPauseEvent.buttonName = SDLButtonNamePlayPause;
+
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:playPauseEvent];
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
+ return YES;
+ }
+
+ return NO;
+}
+
+- (BOOL)sdl_handleOnButtonEventPostV5:(SDLOnButtonEvent *)message {
+ if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ // Send PlayPause & OK notifications
+ SDLOnButtonEvent *okEvent = [message copy];
+ okEvent.buttonName = SDLButtonNameOk;
+
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:okEvent];
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
+ return YES;
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ // Send PlayPause and OK notifications
+ SDLOnButtonEvent *playPauseEvent = [message copy];
+ playPauseEvent.buttonName = SDLButtonNamePlayPause;
+
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:playPauseEvent];
+ [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
+ return YES;
+ }
+
+ return NO;
+}
+#pragma clang diagnostic pop
+
#pragma mark Handle Post-Invoke of Delegate Methods
- (void)handleAfterHMIStatus:(SDLRPCMessage *)message {
diff --git a/SmartDeviceLink/SDLProxyListener.h b/SmartDeviceLink/SDLProxyListener.h
index 8c4a47f19..d9f0c25ed 100644
--- a/SmartDeviceLink/SDLProxyListener.h
+++ b/SmartDeviceLink/SDLProxyListener.h
@@ -39,6 +39,7 @@
@class SDLOnLanguageChange;
@class SDLOnLockScreenStatus;
@class SDLOnPermissionsChange;
+@class SDLOnRCStatus;
@class SDLOnSyncPData;
@class SDLOnSystemRequest;
@class SDLOnVehicleData;
@@ -357,6 +358,13 @@ NS_ASSUME_NONNULL_BEGIN
- (void)onOnPermissionsChange:(SDLOnPermissionsChange *)notification;
/**
+ * Called when an On RC Change notification is received from Core
+ *
+ * @param notification A SDLOnRCStatus object
+ */
+- (void)onOnRCStatus:(SDLOnRCStatus *)notification;
+
+/**
* Called when an On Sync P notification is received from Core
*
* @param notification A SDLOnSyncPData object
diff --git a/SmartDeviceLink/SDLPutFile.h b/SmartDeviceLink/SDLPutFile.h
index 247228fbd..ac621a0b4 100644
--- a/SmartDeviceLink/SDLPutFile.h
+++ b/SmartDeviceLink/SDLPutFile.h
@@ -6,72 +6,132 @@
#import "SDLFileType.h"
/**
- * Used to push a binary data onto the SDL module from a mobile device, such as
- * icons and album art
+ * Used to push a binary data onto the SDL module from a mobile device, such as icons and album art.
*
- * Since SmartDeviceLink 2.0
- * @see SDLDeleteFile
- * @see SDLListFiles
+ * Since SmartDeviceLink 2.0
+ * @see SDLDeleteFile, SDLListFiles
*/
NS_ASSUME_NONNULL_BEGIN
@interface SDLPutFile : SDLRPCRequest
+/**
+ * Init
+ *
+ * @return A SDLPutFile object
+ */
+- (instancetype)init;
+
+/**
+ * Convenience init for creating a putfile with a name and file format.
+ *
+ * @param fileName The file's name
+ * @param fileType The file's format
+ * @return A SDLPutFile object
+ */
- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType;
+/**
+ * Convenience init for creating a putfile with a name, file format, and persistance.
+ *
+ * @param fileName The file's name
+ * @param fileType The file's format
+ * @param persistentFile Whether or not the image should persist between ignition cycles
+ * @return A SDLPutFile object
+ */
- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile;
-- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile systemFile:(BOOL)systemFile offset:(UInt32)offset length:(UInt32)length;
+/**
+ * Convenience init for creating a putfile that is part of a multiple frame payload.
+ *
+ * @param fileName The file's name
+ * @param fileType The file's format
+ * @param persistentFile Whether or not the image should persist between ignition cycles
+ * @param systemFile Whether or not the file is meant to be passed through Core to elsewhere on the system
+ * @param offset Offset in bytes for resuming partial data chunks
+ * @param length Length in bytes for resuming partial data chunks
+ * @return A SDLPutFile object
+ */
+- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile systemFile:(BOOL)systemFile offset:(UInt32)offset length:(UInt32)length __deprecated_msg("Use initWithFileName:fileType:persistentFile:systemFile:offset:length:crc: instead");
/**
- * A file reference name
+ * Convenience init for creating a putfile that is part of a multiple frame payload.
*
- * Required, maxlength 255 characters
+ * @param fileName The file's name
+ * @param fileType The file's format
+ * @param persistentFile Whether or not the image should persist between ignition cycles
+ * @param systemFile Whether or not the file is meant to be passed through Core to elsewhere on the system
+ * @param offset Offset in bytes for resuming partial data chunks
+ * @param length Length in bytes for resuming partial data chunks
+ * @param crc Checksum of the bulk data. Used by Core to check data integrity
+ * @return A SDLPutFile object
+ */
+- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile systemFile:(BOOL)systemFile offset:(UInt32)offset length:(UInt32)length crc:(UInt64)crc;
+
+/**
+ * Convenience init for creating a putfile that is part of a multiple frame payload. A CRC checksum is calculated for the bulk data.
+ *
+ * @param fileName The file's name
+ * @param fileType The file's format
+ * @param persistentFile Whether or not the image should persist between ignition cycles
+ * @param systemFile Whether or not the file is meant to be passed through Core to elsewhere on the system
+ * @param offset Offset in bytes for resuming partial data chunks
+ * @param length Length in bytes for resuming partial data chunks
+ * @param bulkData Data being sent in the putfile
+ * @return A SDLPutFile object
+ */
+- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile systemFile:(BOOL)systemFile offset:(UInt32)offset length:(UInt32)length bulkData:(NSData *)bulkData;
+
+/**
+ * File reference name
+ *
+ * Required, max length 255 characters
*/
@property (strong, nonatomic) NSString *syncFileName;
/**
- * A FileType value representing a selected file type
+ * A FileType value representing a selected file type
*
- * Required
+ * Required
*/
@property (strong, nonatomic) SDLFileType fileType;
/**
- * 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
+ * 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.
*
- * Boolean, Optional, default = NO
+ * Boolean, Optional, default = NO
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *persistentFile;
/**
- * 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.
+ * 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.
*
- * Boolean, Optional, default = NO
+ * Boolean, Optional, default = NO
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *systemFile;
/**
- * Offset in bytes for resuming partial data chunks.
+ * Offset in bytes for resuming partial data chunks.
*
- * Integer, Optional, 0 - 100,000,000,000
+ * Integer, Optional, 0 - 100,000,000,000
*/
@property (nullable, strong, nonatomic) NSNumber<SDLUInt> *offset;
/**
- * 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
+ * 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
*
- * Integer, Optional, 0 - 100,000,000,000
+ * Integer, Optional, 0 - 100,000,000,000
*/
@property (nullable, strong, nonatomic) NSNumber<SDLUInt> *length;
+/**
+ * Additional CRC32 checksum to protect data integrity up to 512 Mbits.
+ *
+ * Integer, Optional, 0 - 4,294,967,295
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLUInt> *crc;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPutFile.m b/SmartDeviceLink/SDLPutFile.m
index 5b289d4ce..f058b5ec2 100644
--- a/SmartDeviceLink/SDLPutFile.m
+++ b/SmartDeviceLink/SDLPutFile.m
@@ -6,6 +6,8 @@
#import "NSMutableDictionary+Store.h"
#import "SDLNames.h"
+#import <zlib.h>
+
NS_ASSUME_NONNULL_BEGIN
@implementation SDLPutFile
@@ -16,6 +18,29 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+
+ self.syncFileName = fileName;
+ self.fileType = fileType;
+
+ return self;
+}
+
+- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile {
+ self = [self initWithFileName:fileName fileType:fileType];
+ if (!self) {
+ return nil;
+ }
+
+ self.persistentFile = @(persistentFile);
+
+ return self;
+}
+
- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile systemFile:(BOOL)systemFile offset:(UInt32)offset length:(UInt32)length {
self = [self initWithFileName:fileName fileType:fileType persistentFile:persistentFile];
if (!self) {
@@ -29,29 +54,34 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
-- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile {
- self = [self initWithFileName:fileName fileType:fileType];
+- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile systemFile:(BOOL)systemFile offset:(UInt32)offset length:(UInt32)length crc:(UInt64)crc {
+ self = [self initWithFileName:fileName fileType:fileType persistentFile:persistentFile];
if (!self) {
return nil;
}
- self.persistentFile = @(persistentFile);
+ self.systemFile = @(systemFile);
+ self.offset = @(offset);
+ self.length = @(length);
+ self.crc = crc == 0 ? nil : @(crc);
return self;
}
-- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType {
- self = [self init];
+- (instancetype)initWithFileName:(NSString *)fileName fileType:(SDLFileType)fileType persistentFile:(BOOL)persistentFile systemFile:(BOOL)systemFile offset:(UInt32)offset length:(UInt32)length bulkData:(NSData *)bulkData {
+
+ self = [self initWithFileName:fileName fileType:fileType persistentFile:persistentFile systemFile:systemFile offset:offset length:length crc:[self.class sdl_getCRC32ChecksumForBulkData:bulkData]];
if (!self) {
return nil;
}
- self.syncFileName = fileName;
- self.fileType = fileType;
+ self.bulkData = bulkData;
return self;
}
+#pragma mark - Getters and Setters
+
- (void)setSyncFileName:(NSString *)syncFileName {
[parameters sdl_setObject:syncFileName forName:SDLNameSyncFileName];
}
@@ -100,6 +130,24 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameLength];
}
+- (void)setCrc:(nullable NSNumber<SDLUInt> *)crc {
+ [parameters sdl_setObject:crc forName:SDLNameCRC];
+}
+
+- (nullable NSNumber<SDLUInt> *)crc {
+ return [parameters sdl_objectForName:SDLNameCRC];
+}
+
+#pragma mark - Helpers
+
++ (unsigned long)sdl_getCRC32ChecksumForBulkData:(NSData *)data {
+ if (data.length == 0) {
+ return 0;
+ }
+
+ return crc32(0, data.bytes, (uInt)data.length);
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPutFileResponse.h b/SmartDeviceLink/SDLPutFileResponse.h
index fbc9744b5..0c8772125 100644
--- a/SmartDeviceLink/SDLPutFileResponse.h
+++ b/SmartDeviceLink/SDLPutFileResponse.h
@@ -15,9 +15,9 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLPutFileResponse : SDLRPCResponse
/**
- 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.
+ * 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.
*/
-@property (strong, nonatomic) NSNumber<SDLInt> *spaceAvailable;
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *spaceAvailable;
@end
diff --git a/SmartDeviceLink/SDLPutFileResponse.m b/SmartDeviceLink/SDLPutFileResponse.m
index 2d3de3352..93d0caa5e 100644
--- a/SmartDeviceLink/SDLPutFileResponse.m
+++ b/SmartDeviceLink/SDLPutFileResponse.m
@@ -17,11 +17,11 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
-- (void)setSpaceAvailable:(NSNumber<SDLInt> *)spaceAvailable {
+- (void)setSpaceAvailable:(nullable NSNumber<SDLInt> *)spaceAvailable {
[parameters sdl_setObject:spaceAvailable forName:SDLNameSpaceAvailable];
}
-- (NSNumber<SDLInt> *)spaceAvailable {
+- (nullable NSNumber<SDLInt> *)spaceAvailable {
return [parameters sdl_objectForName:SDLNameSpaceAvailable];
}
diff --git a/SmartDeviceLink/SDLRGBColor.h b/SmartDeviceLink/SDLRGBColor.h
new file mode 100644
index 000000000..4de64a6ad
--- /dev/null
+++ b/SmartDeviceLink/SDLRGBColor.h
@@ -0,0 +1,58 @@
+//
+// SDLRGBColor.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/18/18.
+// Copyright © 2018 Livio. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "NSNumber+NumberType.h"
+#import "SDLRPCStruct.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLRGBColor : SDLRPCStruct
+
+/**
+ Create an SDL color object with red / green / blue values between 0-255
+
+ @param red The red value of the color
+ @param green The green value of the color
+ @param blue The blue value of the color
+ @return The color
+ */
+- (instancetype)initWithRed:(UInt8)red green:(UInt8)green blue:(UInt8)blue;
+
+/**
+ Create an SDL color object with a UIColor object.
+
+ @warning The alpha color of the UIColor object will be ignored
+
+ @param color The UIColor object to base this color on
+ @return The color
+ */
+- (instancetype)initWithColor:(UIColor *)color;
+
+/**
+ * The red value of the RGB color
+ * Required, Integer, 0-255
+ */
+@property (copy, nonatomic) NSNumber<SDLInt> *red;
+
+/**
+ * The green value of the RGB color
+ * Required, Integer, 0-255
+ */
+@property (copy, nonatomic) NSNumber<SDLInt> *green;
+
+/**
+ * The blue value of the RGB color
+ * Required, Integer, 0-255
+ */
+@property (copy, nonatomic) NSNumber<SDLInt> *blue;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRGBColor.m b/SmartDeviceLink/SDLRGBColor.m
new file mode 100644
index 000000000..9ed7b30e9
--- /dev/null
+++ b/SmartDeviceLink/SDLRGBColor.m
@@ -0,0 +1,69 @@
+//
+// SDLRGBColor.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/18/18.
+// Copyright © 2018 Livio. All rights reserved.
+//
+
+#import "SDLRGBColor.h"
+
+#import "NSMutableDictionary+Store.h"
+#import "SDLNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLRGBColor
+
+- (instancetype)initWithRed:(UInt8)red green:(UInt8)green blue:(UInt8)blue {
+ self = [self init];
+ if (!self) { return nil; }
+
+ self.red = @(red);
+ self.green = @(green);
+ self.blue = @(blue);
+
+ return self;
+}
+
+- (instancetype)initWithColor:(UIColor *)color {
+ CGFloat redf, greenf, bluef, alphaf;
+ [color getRed:&redf green:&greenf blue:&bluef alpha:&alphaf];
+
+ UInt8 red, green, blue;
+ red = (UInt8)round(redf * 255.0);
+ green = (UInt8)round(greenf * 255.0);
+ blue = (UInt8)round(bluef * 255.0);
+
+ return [self initWithRed:red green:green blue:blue];
+}
+
+#pragma mark - Setters
+
+- (void)setRed:(NSNumber<SDLInt> *)red {
+ [store sdl_setObject:red forName:SDLNameRed];
+}
+
+- (NSNumber<SDLInt> *)red {
+ return [store sdl_objectForName:SDLNameRed];
+}
+
+- (void)setGreen:(NSNumber<SDLInt> *)green {
+ [store sdl_setObject:green forName:SDLNameGreen];
+}
+
+- (NSNumber<SDLInt> *)green {
+ return [store sdl_objectForName:SDLNameGreen];
+}
+
+- (void)setBlue:(NSNumber<SDLInt> *)blue {
+ [store sdl_setObject:blue forName:SDLNameBlue];
+}
+
+- (NSNumber<SDLInt> *)blue {
+ return [store sdl_objectForName:SDLNameBlue];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRPCMessage.h b/SmartDeviceLink/SDLRPCMessage.h
index d2c7e02ce..dcc545715 100644
--- a/SmartDeviceLink/SDLRPCMessage.h
+++ b/SmartDeviceLink/SDLRPCMessage.h
@@ -7,7 +7,7 @@
NS_ASSUME_NONNULL_BEGIN
-@interface SDLRPCMessage : SDLRPCStruct {
+@interface SDLRPCMessage : SDLRPCStruct <NSCopying> {
NSMutableDictionary<NSString *, id> *function;
NSMutableDictionary<NSString *, id> *parameters;
NSString *messageType;
diff --git a/SmartDeviceLink/SDLRPCMessage.m b/SmartDeviceLink/SDLRPCMessage.m
index 140762dc2..7ca6b4b56 100644
--- a/SmartDeviceLink/SDLRPCMessage.m
+++ b/SmartDeviceLink/SDLRPCMessage.m
@@ -34,10 +34,13 @@ NS_ASSUME_NONNULL_BEGIN
}
}
if (messageType != nil) {
- function = [[store objectForKey:messageType] mutableCopy];
- parameters = [[function objectForKey:SDLNameParameters] mutableCopy];
+ store[messageType] = [store[messageType] mutableCopy];
+ function = store[messageType];
+
+ function[SDLNameParameters] = [function[SDLNameParameters] mutableCopy];
+ parameters = function[SDLNameParameters];
}
- self.bulkData = [dict objectForKey:SDLNameBulkData];
+ self.bulkData = dict[SDLNameBulkData];
}
return self;
@@ -69,6 +72,12 @@ NS_ASSUME_NONNULL_BEGIN
return description;
}
+- (id)copyWithZone:(nullable NSZone *)zone {
+ SDLRPCMessage *newMessage = [[self.class allocWithZone:zone] initWithDictionary:self->store];
+
+ return newMessage;
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRPCStruct.m b/SmartDeviceLink/SDLRPCStruct.m
index b6a588823..b0bccaac1 100644
--- a/SmartDeviceLink/SDLRPCStruct.m
+++ b/SmartDeviceLink/SDLRPCStruct.m
@@ -31,10 +31,10 @@ NS_ASSUME_NONNULL_BEGIN
- (NSDictionary<NSString *, id> *)serializeAsDictionary:(Byte)version {
if (version >= 2) {
- NSString *messageType = [[store keyEnumerator] nextObject];
- NSMutableDictionary<NSString *, id> *function = [store objectForKey:messageType];
+ NSString *messageType = store.keyEnumerator.nextObject;
+ NSMutableDictionary<NSString *, id> *function = store[messageType];
if ([function isKindOfClass:NSMutableDictionary.class]) {
- NSMutableDictionary<NSString *, id> *parameters = [function objectForKey:SDLNameParameters];
+ NSMutableDictionary<NSString *, id> *parameters = function[SDLNameParameters];
return [self.class sdl_serializeDictionary:parameters version:version];
} else {
return [self.class sdl_serializeDictionary:store version:version];
@@ -50,34 +50,34 @@ NS_ASSUME_NONNULL_BEGIN
+ (NSDictionary<NSString *, id> *)sdl_serializeDictionary:(NSDictionary *)dict version:(Byte)version {
NSMutableDictionary<NSString *, id> *ret = [NSMutableDictionary dictionaryWithCapacity:dict.count];
- for (NSString *key in [dict keyEnumerator]) {
- NSObject *value = [dict objectForKey:key];
+ for (NSString *key in dict.keyEnumerator) {
+ NSObject *value = dict[key];
if ([value isKindOfClass:SDLRPCStruct.class]) {
- [ret setObject:[(SDLRPCStruct *)value serializeAsDictionary:version] forKey:key];
+ ret[key] = [(SDLRPCStruct *)value serializeAsDictionary:version];
} else if ([value isKindOfClass:NSDictionary.class]) {
- [ret setObject:[self sdl_serializeDictionary:(NSDictionary *)value version:version] forKey:key];
+ ret[key] = [self sdl_serializeDictionary:(NSDictionary *)value version:version];
} else if ([value isKindOfClass:NSArray.class]) {
NSArray<NSObject *> *arrayVal = (NSArray<NSObject *> *)value;
- if (arrayVal.count > 0 && ([[arrayVal objectAtIndex:0] isKindOfClass:SDLRPCStruct.class])) {
+ if (arrayVal.count > 0 && ([arrayVal.firstObject isKindOfClass:SDLRPCStruct.class])) {
NSMutableArray<NSDictionary<NSString *, id> *> *serializedList = [NSMutableArray arrayWithCapacity:arrayVal.count];
for (SDLRPCStruct *serializeable in arrayVal) {
[serializedList addObject:[serializeable serializeAsDictionary:version]];
}
- [ret setObject:serializedList forKey:key];
+ ret[key] = serializedList;
} else {
- [ret setObject:value forKey:key];
+ ret[key] = value;
}
} else {
- [ret setObject:value forKey:key];
+ ret[key] = value;
}
}
return ret;
}
--(id)copyWithZone:(nullable NSZone *)zone {
+- (id)copyWithZone:(nullable NSZone *)zone {
SDLRPCStruct *newStruct = [[[self class] allocWithZone:zone] init];
- newStruct->store = [self->store copy];
+ newStruct->store = [self->store mutableCopy];
return newStruct;
}
diff --git a/SmartDeviceLink/SDLRadioControlCapabilities.h b/SmartDeviceLink/SDLRadioControlCapabilities.h
index 9e7bce545..5bdcbebbf 100644
--- a/SmartDeviceLink/SDLRadioControlCapabilities.h
+++ b/SmartDeviceLink/SDLRadioControlCapabilities.h
@@ -11,10 +11,45 @@ NS_ASSUME_NONNULL_BEGIN
*/
@interface SDLRadioControlCapabilities : SDLRPCStruct
-- (instancetype)initWithModuleName:(NSString *)moduleName radioEnableAvailable:(BOOL)radioEnableAvailable radioBandAvailable:(BOOL)radioBandAvailable radioFrequencyAvailable:(BOOL)radioFrequencyAvailable hdChannelAvailable:(BOOL)hdChannelAvailable rdsDataAvailable:(BOOL)rdsDataAvailable availableHDsAvailable:(BOOL)availableHDsAvailable stateAvailable:(BOOL)stateAvailable signalStrengthAvailable:(BOOL)signalStrengthAvailable signalChangeThresholdAvailable:(BOOL)signalChangeThresholdAvailable;
+/**
+ Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.
+
+ @param moduleName The short friendly name of the radio control module.
+ @param radioEnableAvailable Availability of the control of enable/disable radio.
+ @param radioBandAvailable Availability of the control of radio band.
+ @param radioFrequencyAvailable Availability of the control of radio frequency.
+ @param hdChannelAvailable Availability of the control of HD radio channel.
+ @param rdsDataAvailable Availability of the getting Radio Data System (RDS) data.
+ @param availableHDsAvailable Availability of the getting the number of available HD channels.
+ @param stateAvailable Availability of the getting the Radio state.
+ @param signalStrengthAvailable Availability of the getting the signal strength.
+ @param signalChangeThresholdAvailable Availability of the getting the signal Change Threshold.
+ @return An instance of the SDLRadioControlCapabilities class.
+ */
+- (instancetype)initWithModuleName:(NSString *)moduleName radioEnableAvailable:(BOOL)radioEnableAvailable radioBandAvailable:(BOOL)radioBandAvailable radioFrequencyAvailable:(BOOL)radioFrequencyAvailable hdChannelAvailable:(BOOL)hdChannelAvailable rdsDataAvailable:(BOOL)rdsDataAvailable availableHDsAvailable:(BOOL)availableHDsAvailable stateAvailable:(BOOL)stateAvailable signalStrengthAvailable:(BOOL)signalStrengthAvailable signalChangeThresholdAvailable:(BOOL)signalChangeThresholdAvailable __deprecated_msg(("Use initWithModuleName:moduleName:radioEnableAvailable radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable: instead"));
+
+/**
+ Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.
+
+ @param moduleName The short friendly name of the radio control module.
+ @param radioEnableAvailable Availability of the control of enable/disable radio.
+ @param radioBandAvailable Availability of the control of radio band.
+ @param radioFrequencyAvailable Availability of the control of radio frequency.
+ @param hdChannelAvailable Availability of the control of HD radio channel.
+ @param rdsDataAvailable Availability of the getting Radio Data System (RDS) data.
+ @param availableHDsAvailable Availability of the getting the number of available HD channels.
+ @param stateAvailable Availability of the getting the Radio state.
+ @param signalStrengthAvailable Availability of the getting the signal strength.
+ @param signalChangeThresholdAvailable Availability of the getting the signal Change Threshold.
+ @param hdRadioEnableAvailable Availability of the control of enable/disable HD radio.
+ @param siriusXMRadioAvailable Availability of sirius XM radio.
+ @param sisDataAvailable Availability of sis data.
+ @return An instance of the SDLRadioControlCapabilities class
+ */
+- (instancetype)initWithModuleName:(NSString *)moduleName radioEnableAvailable:(BOOL)radioEnableAvailable radioBandAvailable:(BOOL)radioBandAvailable radioFrequencyAvailable:(BOOL)radioFrequencyAvailable hdChannelAvailable:(BOOL)hdChannelAvailable rdsDataAvailable:(BOOL)rdsDataAvailable availableHDsAvailable:(BOOL)availableHDsAvailable stateAvailable:(BOOL)stateAvailable signalStrengthAvailable:(BOOL)signalStrengthAvailable signalChangeThresholdAvailable:(BOOL)signalChangeThresholdAvailable hdRadioEnableAvailable:(BOOL)hdRadioEnableAvailable siriusXMRadioAvailable:(BOOL)siriusXMRadioAvailable sisDataAvailable:(BOOL)sisDataAvailable;
/**
- * The short friendly name of the climate control module.
+ * The short friendly name of the radio control module.
* It should not be used to identify a module by mobile application.
*
@@ -103,6 +138,30 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *signalChangeThresholdAvailable;
+/**
+ * Availability of the control of enable/disable HD radio.
+ * True: Available, False: Not Available, Not present: Not Available.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *hdRadioEnableAvailable;
+
+/**
+ * Availability of sirius XM radio.
+ * True: Available, False: Not Available, Not present: Not Available.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *siriusXMRadioAvailable;
+
+/**
+ * Availability of the getting HD radio Station Information Service (SIS) data.
+ * True: Available, False: Not Available, Not present: Not Available.
+ *
+ * Optional, Boolean
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *sisDataAvailable;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRadioControlCapabilities.m b/SmartDeviceLink/SDLRadioControlCapabilities.m
index 775178a9b..db45eb8ae 100644
--- a/SmartDeviceLink/SDLRadioControlCapabilities.m
+++ b/SmartDeviceLink/SDLRadioControlCapabilities.m
@@ -11,6 +11,10 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLRadioControlCapabilities
- (instancetype)initWithModuleName:(NSString *)moduleName radioEnableAvailable:(BOOL)radioEnableAvailable radioBandAvailable:(BOOL)radioBandAvailable radioFrequencyAvailable:(BOOL)radioFrequencyAvailable hdChannelAvailable:(BOOL)hdChannelAvailable rdsDataAvailable:(BOOL)rdsDataAvailable availableHDsAvailable:(BOOL)availableHDsAvailable stateAvailable:(BOOL)stateAvailable signalStrengthAvailable:(BOOL)signalStrengthAvailable signalChangeThresholdAvailable:(BOOL)signalChangeThresholdAvailable {
+ return [self initWithModuleName:moduleName radioEnableAvailable:radioEnableAvailable radioBandAvailable:radioBandAvailable radioFrequencyAvailable:radioFrequencyAvailable hdChannelAvailable:hdChannelAvailable rdsDataAvailable:rdsDataAvailable availableHDsAvailable:availableHDsAvailable stateAvailable:stateAvailable signalStrengthAvailable:signalStrengthAvailable signalChangeThresholdAvailable:signalChangeThresholdAvailable hdRadioEnableAvailable:NO siriusXMRadioAvailable:NO sisDataAvailable:NO];
+}
+
+- (instancetype)initWithModuleName:(NSString *)moduleName radioEnableAvailable:(BOOL)radioEnableAvailable radioBandAvailable:(BOOL)radioBandAvailable radioFrequencyAvailable:(BOOL)radioFrequencyAvailable hdChannelAvailable:(BOOL)hdChannelAvailable rdsDataAvailable:(BOOL)rdsDataAvailable availableHDsAvailable:(BOOL)availableHDsAvailable stateAvailable:(BOOL)stateAvailable signalStrengthAvailable:(BOOL)signalStrengthAvailable signalChangeThresholdAvailable:(BOOL)signalChangeThresholdAvailable hdRadioEnableAvailable:(BOOL)hdRadioEnableAvailable siriusXMRadioAvailable:(BOOL)siriusXMRadioAvailable sisDataAvailable:(BOOL)sisDataAvailable {
self = [self init];
if(!self){
return nil;
@@ -26,6 +30,9 @@ NS_ASSUME_NONNULL_BEGIN
self.stateAvailable = @(stateAvailable);
self.signalStrengthAvailable = @(signalStrengthAvailable);
self.signalChangeThresholdAvailable = @(signalChangeThresholdAvailable);
+ self.hdRadioEnableAvailable = @(hdRadioEnableAvailable);
+ self.siriusXMRadioAvailable = @(siriusXMRadioAvailable);
+ self.sisDataAvailable = @(sisDataAvailable);
return self;
}
@@ -72,7 +79,6 @@ NS_ASSUME_NONNULL_BEGIN
- (void)setRdsDataAvailable:(nullable NSNumber<SDLBool> *)rdsDataAvailable {
[store sdl_setObject:rdsDataAvailable forName:SDLNameRDSDataAvailable];
-
}
- (nullable NSNumber<SDLBool> *)rdsDataAvailable {
@@ -111,6 +117,30 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameSignalChangeThresholdAvailable];
}
+- (void)setHdRadioEnableAvailable:(nullable NSNumber<SDLBool> *)hdRadioEnableAvailable {
+ [store sdl_setObject:hdRadioEnableAvailable forName:SDLNameHDRadioEnableAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)hdRadioEnableAvailable {
+ return [store sdl_objectForName:SDLNameHDRadioEnableAvailable];
+}
+
+- (void)setSiriusXMRadioAvailable:(nullable NSNumber<SDLBool> *)siriusXMRadioAvailable {
+ [store sdl_setObject:siriusXMRadioAvailable forName:SDLNameSiriusXMRadioAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)siriusXMRadioAvailable {
+ return [store sdl_objectForName:SDLNameSiriusXMRadioAvailable];
+}
+
+- (void)setSisDataAvailable:(nullable NSNumber<SDLBool> *)sisDataAvailable {
+ [store sdl_setObject:sisDataAvailable forName:SDLNameSISDataAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)sisDataAvailable {
+ return [store sdl_objectForName:SDLNameSISDataAvailable];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRadioControlData.h b/SmartDeviceLink/SDLRadioControlData.h
index 13f4bb64f..0fe489eb9 100644
--- a/SmartDeviceLink/SDLRadioControlData.h
+++ b/SmartDeviceLink/SDLRadioControlData.h
@@ -7,6 +7,7 @@
#import "SDLRadioState.h"
@class SDLRDSData;
+@class SDLSISData;
NS_ASSUME_NONNULL_BEGIN
@@ -15,7 +16,30 @@ NS_ASSUME_NONNULL_BEGIN
*/
@interface SDLRadioControlData : SDLRPCStruct
-- (instancetype)initWithFrequencyInteger:(nullable NSNumber<SDLInt> *)frequencyInteger frequencyFraction:(nullable NSNumber<SDLInt> *)frequencyFraction band:(nullable SDLRadioBand)band hdChannel:(nullable NSNumber<SDLInt> *)hdChannel radioEnable:(nullable NSNumber<SDLBool> *)radioEnable;
+/**
+ Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.
+
+ @param frequencyInteger integer part of the frequency
+ @param frequencyFraction fractional part of the frequency
+ @param band Radio band value
+ @param hdChannel Current HD sub-channel
+ @param radioEnable whether or not radio is enabled
+ @return An instance of the SDLRadioControlData class
+ */
+- (instancetype)initWithFrequencyInteger:(nullable NSNumber<SDLInt> *)frequencyInteger frequencyFraction:(nullable NSNumber<SDLInt> *)frequencyFraction band:(nullable SDLRadioBand)band hdChannel:(nullable NSNumber<SDLInt> *)hdChannel radioEnable:(nullable NSNumber<SDLBool> *)radioEnable __deprecated_msg(("Use initWithFrequencyInteger:frequencyInteger:frequencyFraction:band:hdChannel:radioEnable:sisData: instead"));
+
+/**
+ Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.
+
+ @param frequencyInteger integer part of the frequency
+ @param frequencyFraction fractional part of the frequency
+ @param band Radio band value
+ @param hdChannel Current HD sub-channel
+ @param radioEnable whether or not radio is enabled
+ @param hdRadioEnable whether or not hdradio is enabled
+ @return An instance of the SDLRadioControlData class
+ */
+- (instancetype)initWithFrequencyInteger:(nullable NSNumber<SDLInt> *)frequencyInteger frequencyFraction:(nullable NSNumber<SDLInt> *)frequencyFraction band:(nullable SDLRadioBand)band hdChannel:(nullable NSNumber<SDLInt> *)hdChannel radioEnable:(nullable NSNumber<SDLBool> *)radioEnable hdRadioEnable:(nullable NSNumber<SDLBool> *)hdRadioEnable;
/**
* The integer part of the frequency ie for 101.7 this value should be 101
@@ -52,14 +76,14 @@ NS_ASSUME_NONNULL_BEGIN
*
* @warning This property is readonly and cannot be set on the module.
*
- * Integer value Min Value - 1 Max Value -3
+ * Integer value Min Value - 1 Max Value -7
*/
@property (nullable, strong, nonatomic) NSNumber<SDLInt> *availableHDs;
/**
* Current HD sub-channel if available
*
- * Integer value Min Value - 1 Max Value -3
+ * Integer value Min Value - 1 Max Value -7
*/
@property (nullable, strong, nonatomic) NSNumber<SDLInt> *hdChannel;
@@ -97,6 +121,22 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) SDLRadioState state;
+/**
+ * True if the hd radio is on, false is the radio is off
+ *
+ * Boolean value
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *hdRadioEnable;
+
+/**
+ * Read Read-only Station Information Service (SIS) data provides basic information
+ * about the station such as call sign,
+ * as well as information not displayable to the consumer such as the station identification number
+ *
+ * Optional, SDLSISData
+ */
+@property (nullable, strong, nonatomic) SDLSISData *sisData;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRadioControlData.m b/SmartDeviceLink/SDLRadioControlData.m
index d996a8c87..f1af68204 100644
--- a/SmartDeviceLink/SDLRadioControlData.m
+++ b/SmartDeviceLink/SDLRadioControlData.m
@@ -5,6 +5,7 @@
#import "SDLRadioControlData.h"
#import "SDLNames.h"
#import "SDLRDSData.h"
+#import "SDLSISData.h"
#import "NSMutableDictionary+Store.h"
NS_ASSUME_NONNULL_BEGIN
@@ -26,6 +27,22 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithFrequencyInteger:(nullable NSNumber<SDLInt> *)frequencyInteger frequencyFraction:(nullable NSNumber<SDLInt> *)frequencyFraction band:(nullable SDLRadioBand)band hdChannel:(nullable NSNumber<SDLInt> *)hdChannel radioEnable:(nullable NSNumber<SDLBool> *)radioEnable hdRadioEnable:(nullable NSNumber<SDLBool> *)hdRadioEnable {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+
+ self.frequencyInteger = frequencyInteger;
+ self.frequencyFraction = frequencyFraction;
+ self.band = band;
+ self.hdChannel = hdChannel;
+ self.radioEnable = radioEnable;
+ self.hdRadioEnable = hdRadioEnable;
+
+ return self;
+}
+
- (void)setFrequencyInteger:(nullable NSNumber<SDLInt> *)frequencyInteger {
[store sdl_setObject:frequencyInteger forName:SDLNameFrequencyInteger];
}
@@ -106,6 +123,22 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectForName:SDLNameState];
}
+- (void)setHdRadioEnable:(nullable NSNumber<SDLBool> *)hdRadioEnable {
+ [store sdl_setObject:hdRadioEnable forName:SDLNameHDRadioEnable];
+}
+
+- (nullable NSNumber<SDLBool> *)hdRadioEnable {
+ return [store sdl_objectForName:SDLNameHDRadioEnable];
+}
+
+- (void)setSisData:(nullable SDLSISData *)sisData {
+ [store sdl_setObject:sisData forName:SDLNameSISData];
+}
+
+- (nullable SDLSISData *)sisData {
+ return [store sdl_objectForName:SDLNameSISData ofClass:SDLSISData.class];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRegisterAppInterface.h b/SmartDeviceLink/SDLRegisterAppInterface.h
index 6e9501e4a..a03c438b2 100644
--- a/SmartDeviceLink/SDLRegisterAppInterface.h
+++ b/SmartDeviceLink/SDLRegisterAppInterface.h
@@ -10,91 +10,93 @@
@class SDLDeviceInfo;
@class SDLLifecycleConfiguration;
@class SDLSyncMsgVersion;
+@class SDLTemplateColorScheme;
@class SDLTTSChunk;
/**
- * Registers the application's interface with SDL&reg;, declaring properties of
- * the registration, 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&reg; can take place. The
- * registration lasts until it is terminated either by the application calling
- * the <i> SDLUnregisterAppInterface</i> method, or by SDL&reg;
- * sending an <i> SDLOnAppInterfaceUnregistered</i> notification, or
- * by loss of the underlying transport connection, or closing of the underlying
- * message transmission protocol RPC session
- * <p>
- * Until the application receives its first <i>SDLOnHMIStatus</i>
- * Notification, its HMI Status is assumed to be: <i>
- * SDLHMILevel</i>=NONE, <i>
- * SDLAudioStreamingState
- * </i>=NOT_AUDIBLE, <i>
- * SDLSystemContext</i>=MAIN
- * <p>
- * All SDL&reg; resources which the application creates or uses (e.g. Choice
- * Sets, Command Menu, etc.) are associated with the application's interface
- * registration. Therefore, when the interface registration ends, the SDL&reg;
- * resources associated with the application are disposed of. As a result, even
- * though the application itself may continue to run on its host platform (e.g.
- * mobile device) after the interface registration terminates, the application
- * will not be able to use the SDL&reg; HMI without first establishing a new
- * interface registration and re-creating its required SDL&reg; resources. That
- * is, SDL&reg; resources created by (or on behalf of) an application do not
- * persist beyond the life-span of the interface registration
- * <p>
- * Resources and settings whose lifespan is tied to the duration of an
- * application's interface registration:<br/>
- * <ul>
- * <li>Choice Sets</li>
- * <li>Command Menus (built by successive calls to <i>SDLAddCommand
- * </i>)</li>
- * <li>Media clock timer display value</li>
- * <li>Media clock timer display value</li>
- * <li>Media clock timer display value</li>
- * </ul>
- * <p>
- * The autoActivateID is used to grant an application the HMILevel and
- * AudioStreamingState it had when it last disconnected
- * <p>
- * <b>Notes: </b>The autoActivateID parameter, and associated behavior, is
- * currently ignored by SDL&reg;
- * <p>
- * When first calling this method (i.e. first time within life cycle of mobile
- * app), an autoActivateID should not be included. After successfully
- * registering an interface, an autoActivateID is returned to the mobile
- * application for it to use in subsequent connections. If the connection
- * between SDL&reg; and the mobile application is lost, such as the vehicle is
- * turned off while the application is running, the autoActivateID can then be
- * passed in another call to RegisterAppInterface to re-acquire <i>
- * SDLHMILevel</i>=FULL
- * <p>
- * If the application intends to stream audio it is important to indicate so via
- * the isMediaApp parameter. When set to true, audio will reliably stream
- * without any configuration required by the user. When not set, audio may
- * stream, depending on what the user might have manually configured as a media
- * source on SDL&reg;
- * <p>
- * There is no time limit for how long the autoActivateID is "valid" (i.e. would
- * confer focus and opt-in)
- * <p>
- * <b>HMILevel is not defined before registering</b><br/>
- * </p>
+ * 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.
+ *
+ * Until the application receives its first `SDLOnHMIStatus` notification, its `SDLHMILevel` is assumed to be `NONE`, the `SDLAudioStreamingState` is assumed to be `NOT_AUDIBLE`, and the `SDLSystemContext` is assumed to be `MAIN`.
+ *
+ * All SDL resources which the application creates or uses (e.g. choice sets, command menu, etc.) are associated with the application's interface registration. Therefore, when the interface registration ends, the SDL resources associated with the application are disposed of. As a result, even though the application itself may continue to run on its host platform (e.g. mobile device) after the interface registration terminates, the application will not be able to use the SDL HMI without first establishing a new interface registration and re-creating its required SDL resources. That is, SDL resources created by (or on behalf of) an application do not persist beyond the life-span of the interface registration. Resources and settings whose lifespan is tied to the duration of an application's interface registration include: choice sets, command menus, and the media clock timer display value
+ *
+ * If the application intends to stream audio it is important to indicate so via the `isMediaApp` parameter. When set to true, audio will reliably stream without any configuration required by the user. When not set, audio may stream, depending on what the user might have manually configured as a media source on SDL.
*
* @since SDL 1.0
*
- * @see SDLUnregisterAppInterface SDLOnAppInterfaceUnregistered
+ * @see SDLUnregisterAppInterface, SDLOnAppInterfaceUnregistered
*/
NS_ASSUME_NONNULL_BEGIN
@interface SDLRegisterAppInterface : SDLRPCRequest
+/**
+ * Convenience init for registering the application with a lifecycle configuration.
+ *
+ * @param lifecycleConfiguration Configuration options for SDLManager
+ */
- (instancetype)initWithLifecycleConfiguration:(SDLLifecycleConfiguration *)lifecycleConfiguration;
+/**
+ * Convenience init for registering the application.
+ *
+ * @param appName The mobile application's name
+ * @param appId An appId used to validate app with policy table entries
+ * @param languageDesired The language the application intends to use for user interaction
+ * @return A SDLRegisterAppInterface object
+ */
- (instancetype)initWithAppName:(NSString *)appName appId:(NSString *)appId languageDesired:(SDLLanguage)languageDesired;
-- (instancetype)initWithAppName:(NSString *)appName appId:(NSString *)appId languageDesired:(SDLLanguage)languageDesired isMediaApp:(BOOL)isMediaApp appTypes:(NSArray<SDLAppHMIType> *)appTypes shortAppName:(nullable NSString *)shortAppName;
+/**
+ * Convenience init for registering the application.
+ *
+ * @param appName The mobile application's name
+ * @param appId An appId used to validate app with policy table entries
+ * @param languageDesired The language the application intends to use for user interaction
+ * @param isMediaApp Indicates if the application is a media or a non-media application
+ * @param appTypes A list of all applicable app types stating which classifications to be given to the app
+ * @param shortAppName An abbreviated version of the mobile application's name
+ * @return A SDLRegisterAppInterface object
+ */
+- (instancetype)initWithAppName:(NSString *)appName appId:(NSString *)appId languageDesired:(SDLLanguage)languageDesired isMediaApp:(BOOL)isMediaApp appTypes:(NSArray<SDLAppHMIType> *)appTypes shortAppName:(nullable NSString *)shortAppName __deprecated_msg(("Use initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme: instead"));
+
+/**
+ * Convenience init for registering the application.
+ *
+ * @param appName The mobile application's name
+ * @param appId An appId used to validate app with policy table entries
+ * @param languageDesired The language the application intends to use for user interaction
+ * @param isMediaApp Indicates if the application is a media or a non-media application
+ * @param appTypes A list of all applicable app types stating which classifications to be given to the app
+ * @param shortAppName An abbreviated version of the mobile application's name
+ * @param ttsName TTS string for VR recognition of the mobile application name
+ * @param vrSynonyms Additional voice recognition commands
+ * @param hmiDisplayLanguageDesired Current app's expected VR+TTS language
+ * @param resumeHash ID used to uniquely identify current state of all app data that can persist through connection cycles
+ * @return A SDLRegisterAppInterface object
+ */
+- (instancetype)initWithAppName:(NSString *)appName appId:(NSString *)appId languageDesired:(SDLLanguage)languageDesired isMediaApp:(BOOL)isMediaApp appTypes:(NSArray<SDLAppHMIType> *)appTypes shortAppName:(nullable NSString *)shortAppName ttsName:(nullable NSArray<SDLTTSChunk *> *)ttsName vrSynonyms:(nullable NSArray<NSString *> *)vrSynonyms hmiDisplayLanguageDesired:(SDLLanguage)hmiDisplayLanguageDesired resumeHash:(nullable NSString *)resumeHash __deprecated_msg(("Use initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme: instead"));
-- (instancetype)initWithAppName:(NSString *)appName appId:(NSString *)appId languageDesired:(SDLLanguage)languageDesired isMediaApp:(BOOL)isMediaApp appTypes:(NSArray<SDLAppHMIType> *)appTypes shortAppName:(nullable NSString *)shortAppName ttsName:(nullable NSArray<SDLTTSChunk *> *)ttsName vrSynonyms:(nullable NSArray<NSString *> *)vrSynonyms hmiDisplayLanguageDesired:(SDLLanguage)hmiDisplayLanguageDesired resumeHash:(nullable NSString *)resumeHash;
+/**
+ * Convenience init for registering the application with all possible options.
+ *
+ * @param appName The mobile application's name
+ * @param appId An appId used to validate app with policy table entries
+ * @param fullAppId A full UUID appID used to validate app with policy table entries.
+ * @param languageDesired The language the application intends to use for user interaction
+ * @param isMediaApp Indicates if the application is a media or a non-media application
+ * @param appTypes A list of all applicable app types stating which classifications to be given to the app
+ * @param shortAppName An abbreviated version of the mobile application's name
+ * @param ttsName TTS string for VR recognition of the mobile application name
+ * @param vrSynonyms Additional voice recognition commands
+ * @param hmiDisplayLanguageDesired Current app's expected VR+TTS language
+ * @param resumeHash ID used to uniquely identify current state of all app data that can persist through connection cycles
+ * @param dayColorScheme The color scheme to be used on a head unit using a "light" or "day" color scheme.
+ * @param nightColorScheme The color scheme to be used on a head unit using a "dark" or "night" color scheme
+ * @return A SDLRegisterAppInterface object
+ */
+- (instancetype)initWithAppName:(NSString *)appName appId:(NSString *)appId fullAppId:(nullable NSString *)fullAppId languageDesired:(SDLLanguage)languageDesired isMediaApp:(BOOL)isMediaApp appTypes:(NSArray<SDLAppHMIType> *)appTypes shortAppName:(nullable NSString *)shortAppName ttsName:(nullable NSArray<SDLTTSChunk *> *)ttsName vrSynonyms:(nullable NSArray<NSString *> *)vrSynonyms hmiDisplayLanguageDesired:(SDLLanguage)hmiDisplayLanguageDesired resumeHash:(nullable NSString *)resumeHash dayColorScheme:(nullable SDLTemplateColorScheme *)dayColorScheme nightColorScheme:(nullable SDLTemplateColorScheme *)nightColorScheme;
/**
* The version of the SDL interface
@@ -104,14 +106,12 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) SDLSyncMsgVersion *syncMsgVersion;
/**
- * 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
+ * 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.
*
- * @discussion
- * <li>Needs to be unique over all applications.</li>
- * <li>May not be empty.</li>
- * <li>May not start with a new line character.</li>
- * <li>May not interfere with any name or synonym of previously registered applications and any predefined blacklist of words (global commands).</li>
- * <li>Needs to be unique over all applications. Applications with the same name will be rejected.</li>
+ * 1. Needs to be unique over all applications. Applications with the same name will be rejected.
+ * 2. May not be empty.
+ * 3. May not start with a new line character.
+ * 4. May not interfere with any name or synonym of previously registered applications and any predefined blacklist of words (global commands).
*
* Required, Max length 100 chars
*/
@@ -121,9 +121,9 @@ NS_ASSUME_NONNULL_BEGIN
* TTS string for VR recognition of the mobile application name.
*
* @discussion Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.
- * <li>Needs to be unique over all applications.</li>
- * <li>May not be empty.</li>
- * <li>May not start with a new line character.</li>
+ * 1. Needs to be unique over all applications.
+ * 2. May not be empty.
+ * 3. May not start with a new line character.
*
* Optional, Array of SDLTTSChunk, Array size 1 - 100
*
@@ -133,7 +133,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) NSArray<SDLTTSChunk *> *ttsName;
/**
- * A String representing an abbreviated version of the mobile application's name (if necessary) that will be displayed on the media screen
+ * A String representing an abbreviated version of the mobile application's name (if necessary) that will be displayed on the media screen.
*
* @discussion If not provided, the appName is used instead (and will be truncated if too long)
*
@@ -142,9 +142,9 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) NSString *ngnMediaScreenAppName;
/**
- * Defines a additional voice recognition commands
+ * Defines additional voice recognition commands
*
- * @discussion May not interfere with any app name of previously registered applications and any predefined blacklist of words (global commands)
+ * @discussion May not interfere with any app name of previously registered applications and any predefined blacklist of words (global commands).
*
* Optional, Array of Strings, Array length 1 - 100, Max String length 40
*/
@@ -212,17 +212,42 @@ NS_ASSUME_NONNULL_BEGIN
*
* Required, max length 100
*
+ * @see `fullAppID`
+ *
* @since SDL 2.0
*/
@property (strong, nonatomic) NSString *appID;
/**
+ * A full UUID appID used to validate app with policy table entries.
+ *
+ * Optional
+ *
+ * @discussion The `fullAppId` is used to authenticate apps that connect with head units that implement SDL Core v.5.0 and newer. If connecting with older head units, the `fullAppId` can be truncated to create the required `appId` needed to register the app. The `appId` is the first 10 non-dash ("-") characters of the `fullAppID` (e.g. if you have a `fullAppId` of 123e4567-e89b-12d3-a456-426655440000, the `appId` will be 123e4567e8).
+ */
+@property (nullable, strong, nonatomic) NSString *fullAppID;
+
+/**
* Information about the application running
*
* Optional
*/
@property (nullable, strong, nonatomic) SDLAppInfo *appInfo;
+/**
+ * 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.
+ *
+ * Optional
+ */
+@property (strong, nonatomic, nullable) SDLTemplateColorScheme *dayColorScheme;
+
+/**
+ * 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.
+ *
+ * Optional
+ */
+@property (strong, nonatomic, nullable) SDLTemplateColorScheme *nightColorScheme;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRegisterAppInterface.m b/SmartDeviceLink/SDLRegisterAppInterface.m
index 34fe41ac5..cf23d1be6 100644
--- a/SmartDeviceLink/SDLRegisterAppInterface.m
+++ b/SmartDeviceLink/SDLRegisterAppInterface.m
@@ -8,16 +8,20 @@
#import "SDLAppHMIType.h"
#import "SDLAppInfo.h"
#import "SDLDeviceInfo.h"
+#import "SDLGlobals.h"
#import "SDLLanguage.h"
#import "SDLLifecycleConfiguration.h"
#import "SDLNames.h"
#import "SDLSyncMsgVersion.h"
+#import "SDLTemplateColorScheme.h"
#import "SDLTTSChunk.h"
NS_ASSUME_NONNULL_BEGIN
@implementation SDLRegisterAppInterface
+#pragma mark - Lifecycle
+
- (instancetype)init {
if (self = [super initWithName:SDLNameRegisterAppInterface]) {
}
@@ -29,6 +33,7 @@ NS_ASSUME_NONNULL_BEGIN
return [self initWithAppName:lifecycleConfiguration.appName
appId:lifecycleConfiguration.appId
+ fullAppId:lifecycleConfiguration.fullAppId
languageDesired:lifecycleConfiguration.language
isMediaApp:lifecycleConfiguration.isMedia
appTypes:allHMITypes
@@ -36,7 +41,9 @@ NS_ASSUME_NONNULL_BEGIN
ttsName:lifecycleConfiguration.ttsName
vrSynonyms:lifecycleConfiguration.voiceRecognitionCommandNames
hmiDisplayLanguageDesired:lifecycleConfiguration.language
- resumeHash:lifecycleConfiguration.resumeHash];
+ resumeHash:lifecycleConfiguration.resumeHash
+ dayColorScheme:lifecycleConfiguration.dayColorScheme
+ nightColorScheme:lifecycleConfiguration.nightColorScheme];
}
- (instancetype)initWithAppName:(NSString *)appName appId:(NSString *)appId languageDesired:(SDLLanguage)languageDesired {
@@ -44,16 +51,23 @@ NS_ASSUME_NONNULL_BEGIN
if (!self) {
return nil;
}
-
+
self.appName = appName;
self.appID = appId;
+ self.fullAppID = nil;
self.languageDesired = languageDesired;
-
- self.syncMsgVersion = [[SDLSyncMsgVersion alloc] initWithMajorVersion:1 minorVersion:0 patchVersion:0];
+
+ self.hmiDisplayLanguageDesired = languageDesired;
+
+ UInt8 majorVersion = (UInt8)[SDLMaxProxyRPCVersion substringWithRange:NSMakeRange(0, 1)].intValue;
+ UInt8 minorVersion = (UInt8)[SDLMaxProxyRPCVersion substringWithRange:NSMakeRange(2, 1)].intValue;
+ UInt8 patchVersion = (UInt8)[SDLMaxProxyRPCVersion substringWithRange:NSMakeRange(4, 1)].intValue;
+ self.syncMsgVersion = [[SDLSyncMsgVersion alloc] initWithMajorVersion:majorVersion minorVersion:minorVersion patchVersion:patchVersion];
self.appInfo = [SDLAppInfo currentAppInfo];
self.deviceInfo = [SDLDeviceInfo currentDevice];
self.correlationID = @1;
-
+ self.isMediaApplication = @NO;
+
return self;
}
@@ -84,6 +98,23 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithAppName:(NSString *)appName appId:(NSString *)appId fullAppId:(nullable NSString *)fullAppId languageDesired:(SDLLanguage)languageDesired isMediaApp:(BOOL)isMediaApp appTypes:(NSArray<SDLAppHMIType> *)appTypes shortAppName:(nullable NSString *)shortAppName ttsName:(nullable NSArray<SDLTTSChunk *> *)ttsName vrSynonyms:(nullable NSArray<NSString *> *)vrSynonyms hmiDisplayLanguageDesired:(SDLLanguage)hmiDisplayLanguageDesired resumeHash:(nullable NSString *)resumeHash dayColorScheme:(nullable SDLTemplateColorScheme *)dayColorScheme nightColorScheme:(nullable SDLTemplateColorScheme *)nightColorScheme {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self = [self initWithAppName:appName appId:appId languageDesired:languageDesired isMediaApp:isMediaApp appTypes:appTypes shortAppName:shortAppName ttsName:ttsName vrSynonyms:vrSynonyms hmiDisplayLanguageDesired:hmiDisplayLanguageDesired resumeHash:resumeHash];
+#pragma clang diagnostic pop
+
+ if (!self) { return nil; }
+
+ self.fullAppID = fullAppId;
+ self.dayColorScheme = dayColorScheme;
+ self.nightColorScheme = nightColorScheme;
+
+ return self;
+}
+
+#pragma mark - Getters and Setters
+
- (void)setSyncMsgVersion:(SDLSyncMsgVersion *)syncMsgVersion {
[parameters sdl_setObject:syncMsgVersion forName:SDLNameSyncMessageVersion];
}
@@ -180,6 +211,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameAppId];
}
+- (void)setFullAppID:(nullable NSString *)fullAppID {
+ [parameters sdl_setObject:fullAppID forName:SDLNameFullAppID];
+}
+
+- (nullable NSString *)fullAppID {
+ return [parameters sdl_objectForName:SDLNameFullAppID];
+}
+
- (void)setAppInfo:(nullable SDLAppInfo *)appInfo {
[parameters sdl_setObject:appInfo forName:SDLNameAppInfo];
}
@@ -188,6 +227,22 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameAppInfo ofClass:SDLAppInfo.class];
}
+- (void)setDayColorScheme:(nullable SDLTemplateColorScheme *)dayColorScheme {
+ [parameters sdl_setObject:dayColorScheme forName:SDLNameDayColorScheme];
+}
+
+- (nullable SDLTemplateColorScheme *)dayColorScheme {
+ return [parameters sdl_objectForName:SDLNameDayColorScheme ofClass:[SDLTemplateColorScheme class]];
+}
+
+- (void)setNightColorScheme:(nullable SDLTemplateColorScheme *)nightColorScheme {
+ [parameters sdl_setObject:nightColorScheme forName:SDLNameNightColorScheme];
+}
+
+- (nullable SDLTemplateColorScheme *)nightColorScheme {
+ return [parameters sdl_objectForName:SDLNameNightColorScheme ofClass:[SDLTemplateColorScheme class]];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRegisterAppInterfaceResponse.h b/SmartDeviceLink/SDLRegisterAppInterfaceResponse.h
index b89bc0164..90a16000e 100644
--- a/SmartDeviceLink/SDLRegisterAppInterfaceResponse.h
+++ b/SmartDeviceLink/SDLRegisterAppInterfaceResponse.h
@@ -154,6 +154,10 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) NSString *systemSoftwareVersion;
+/**
+ Whether or not the app's icon already existed on the system and was resumed. That means that the icon does not need to be sent by the app.
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *iconResumed;
@end
diff --git a/SmartDeviceLink/SDLRegisterAppInterfaceResponse.m b/SmartDeviceLink/SDLRegisterAppInterfaceResponse.m
index f8017f898..f8b3b626b 100644
--- a/SmartDeviceLink/SDLRegisterAppInterfaceResponse.m
+++ b/SmartDeviceLink/SDLRegisterAppInterfaceResponse.m
@@ -135,7 +135,7 @@ NS_ASSUME_NONNULL_BEGIN
}
- (nullable SDLVehicleType *)vehicleType {
- return [parameters sdl_objectForName:SDLNameVehicleType ofClass:SDLVehicleType.class];
+ return [parameters sdl_objectForName:SDLNameVehicleType ofClass:[SDLVehicleType class]];
}
- (void)setSupportedDiagModes:(nullable NSArray<NSNumber<SDLInt> *> *)supportedDiagModes {
@@ -170,6 +170,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameSystemSoftwareVersion];
}
+- (void)setIconResumed:(nullable NSNumber<SDLBool> *)iconResumed {
+ [parameters sdl_setObject:iconResumed forName:SDLNameIconResumed];
+}
+
+- (nullable NSNumber<SDLBool> *)iconResumed {
+ return [parameters sdl_objectForName:SDLNameIconResumed];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRemoteControlCapabilities.h b/SmartDeviceLink/SDLRemoteControlCapabilities.h
index d3ad1936f..15eedffdd 100644
--- a/SmartDeviceLink/SDLRemoteControlCapabilities.h
+++ b/SmartDeviceLink/SDLRemoteControlCapabilities.h
@@ -4,9 +4,13 @@
#import "SDLRPCMessage.h"
+@class SDLAudioControlCapabilities;
+@class SDLButtonCapabilities;
@class SDLClimateControlCapabilities;
+@class SDLHMISettingsControlCapabilities;
+@class SDLLightControlCapabilities;
@class SDLRadioControlCapabilities;
-@class SDLButtonCapabilities;
+@class SDLSeatControlCapabilities;
NS_ASSUME_NONNULL_BEGIN
@@ -15,7 +19,21 @@ NS_ASSUME_NONNULL_BEGIN
*/
@interface SDLRemoteControlCapabilities : SDLRPCStruct
-- (instancetype)initWithClimateControlCapabilities:(nullable NSArray<SDLClimateControlCapabilities *> *)climateControlCapabilities radioControlCapabilities:(nullable NSArray<SDLRadioControlCapabilities *> *)radioControlCapabilities buttonCapabilities:(nullable NSArray<SDLButtonCapabilities *> *)buttonCapabilities;
+- (instancetype)initWithClimateControlCapabilities:(nullable NSArray<SDLClimateControlCapabilities *> *)climateControlCapabilities radioControlCapabilities:(nullable NSArray<SDLRadioControlCapabilities *> *)radioControlCapabilities buttonCapabilities:(nullable NSArray<SDLButtonCapabilities *> *)buttonCapabilities __deprecated_msg("Use initWithClimateControlCapabilities:climateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities: instead");
+
+/**
+ Constructs a newly allocated SDLRemoteControlCapabilities object with given parameters
+
+ @param climateControlCapabilities Array of SDLClimateControlCapabilities
+ @param radioControlCapabilities Array of SDLRadioControlCapabilities
+ @param buttonCapabilities Array of SDLButtonCapabilities
+ @param lightControlCapabilities Array of SDLLightControlCapabilities
+ @param seatControlCapabilities Array of SDLSeatControlCapabilities
+
+ @return An instance of the SDLRemoteControlCapabilities class
+
+ */
+- (instancetype)initWithClimateControlCapabilities:(nullable NSArray<SDLClimateControlCapabilities *> *)climateControlCapabilities radioControlCapabilities:(nullable NSArray<SDLRadioControlCapabilities *> *)radioControlCapabilities buttonCapabilities:(nullable NSArray<SDLButtonCapabilities *> *)buttonCapabilities seatControlCapabilities:(nullable NSArray<SDLSeatControlCapabilities *> *)seatControlCapabilities audioControlCapabilities:(nullable NSArray<SDLAudioControlCapabilities *> *)audioControlCapabilities hmiSettingsControlCapabilities:(nullable NSArray<SDLHMISettingsControlCapabilities *> *)hmiSettingsControlCapabilities lightControlCapabilities:(nullable NSArray<SDLLightControlCapabilities *> *)lightControlCapabilities;
/**
* If included, the platform supports RC climate controls.
@@ -40,6 +58,34 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) NSArray<SDLButtonCapabilities *> *buttonCapabilities;
+/**
+ * If included, the platform supports seat controls.
+ *
+ * Optional, Array of SDLSeatControlCapabilities, Array length 1 - 100
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLSeatControlCapabilities *> *seatControlCapabilities;
+
+/**
+ * If included, the platform supports audio controls.
+ *
+ * Optional, Array of SDLAudioControlCapabilities, Array length 1 - 100
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLAudioControlCapabilities *> *audioControlCapabilities;
+
+/**
+ * If included, the platform supports hmi setting controls.
+ *
+ * Optional, Array of SDLHMISettingsControlCapabilities, Array length 1 - 100
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLHMISettingsControlCapabilities *> *hmiSettingsControlCapabilities;
+
+/**
+ * If included, the platform supports light controls.
+ *
+ * Optional, Array of SDLLightControlCapabilities, Array length 1 - 100
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLLightControlCapabilities *> *lightControlCapabilities;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRemoteControlCapabilities.m b/SmartDeviceLink/SDLRemoteControlCapabilities.m
index 1a12d7c5c..2e4ab7492 100644
--- a/SmartDeviceLink/SDLRemoteControlCapabilities.m
+++ b/SmartDeviceLink/SDLRemoteControlCapabilities.m
@@ -2,10 +2,14 @@
// SDLRemoteControlCapabilities.m
//
-#import "SDLRemoteControlCapabilities.h"
+#import "SDLAudioControlCapabilities.h"
+#import "SDLButtonCapabilities.h"
#import "SDLClimateControlCapabilities.h"
+#import "SDLHMISettingsControlCapabilities.h"
+#import "SDLLightControlCapabilities.h"
+#import "SDLRemoteControlCapabilities.h"
#import "SDLRadioControlCapabilities.h"
-#import "SDLButtonCapabilities.h"
+#import "SDLSeatControlCapabilities.h"
#import "NSMutableDictionary+Store.h"
#import "SDLNames.h"
@@ -14,14 +18,23 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLRemoteControlCapabilities
- (instancetype)initWithClimateControlCapabilities:(nullable NSArray<SDLClimateControlCapabilities *> *)climateControlCapabilities radioControlCapabilities:(nullable NSArray<SDLRadioControlCapabilities *> *)radioControlCapabilities buttonCapabilities:(nullable NSArray<SDLButtonCapabilities *> *)buttonCapabilities {
+
+ return [self initWithClimateControlCapabilities:climateControlCapabilities radioControlCapabilities:radioControlCapabilities buttonCapabilities:buttonCapabilities seatControlCapabilities:nil audioControlCapabilities:nil hmiSettingsControlCapabilities:nil lightControlCapabilities:nil];
+}
+
+- (instancetype)initWithClimateControlCapabilities:(nullable NSArray<SDLClimateControlCapabilities *> *)climateControlCapabilities radioControlCapabilities:(nullable NSArray<SDLRadioControlCapabilities *> *)radioControlCapabilities buttonCapabilities:(nullable NSArray<SDLButtonCapabilities *> *)buttonCapabilities seatControlCapabilities:(nullable NSArray<SDLSeatControlCapabilities *> *)seatControlCapabilities audioControlCapabilities:(nullable NSArray<SDLAudioControlCapabilities *> *)audioControlCapabilities hmiSettingsControlCapabilities:(nullable NSArray<SDLHMISettingsControlCapabilities *> *)hmiSettingsControlCapabilities lightControlCapabilities:(nullable NSArray<SDLLightControlCapabilities *> *)lightControlCapabilities {
self = [super init];
if (!self) {
return nil;
}
-
+
self.climateControlCapabilities = climateControlCapabilities;
self.radioControlCapabilities = radioControlCapabilities;
self.buttonCapabilities = buttonCapabilities;
+ self.seatControlCapabilities = seatControlCapabilities;
+ self.audioControlCapabilities = audioControlCapabilities;
+ self.hmiSettingsControlCapabilities = hmiSettingsControlCapabilities;
+ self.lightControlCapabilities = lightControlCapabilities;
return self;
}
@@ -49,6 +62,39 @@ NS_ASSUME_NONNULL_BEGIN
return [store sdl_objectsForName:SDLNameButtonCapabilities ofClass:SDLButtonCapabilities.class];
}
+- (void)setSeatControlCapabilities:(nullable NSArray<SDLSeatControlCapabilities *> *)seatControlCapabilities {
+ [store sdl_setObject:seatControlCapabilities forName:SDLNameSeatControlCapabilities];
+}
+
+- (nullable NSArray<SDLSeatControlCapabilities *> *)seatControlCapabilities {
+ return [store sdl_objectsForName:SDLNameSeatControlCapabilities ofClass:SDLSeatControlCapabilities.class];
+}
+
+- (void)setAudioControlCapabilities:(nullable NSArray<SDLAudioControlCapabilities *> *)audioControlCapabilities {
+ [store sdl_setObject:audioControlCapabilities forName:SDLNameAudioControlCapabilities];
+}
+
+- (nullable NSArray<SDLAudioControlCapabilities *> *)audioControlCapabilities {
+ return [store sdl_objectsForName:SDLNameAudioControlCapabilities ofClass:SDLAudioControlCapabilities.class];
+
+}
+
+- (void)setHmiSettingsControlCapabilities:(nullable NSArray<SDLHMISettingsControlCapabilities *> *)hmiSettingsControlCapabilities {
+ [store sdl_setObject:hmiSettingsControlCapabilities forName:SDLNameHmiSettingsControlCapabilities];
+}
+
+- (nullable NSArray<SDLHMISettingsControlCapabilities *> *)hmiSettingsControlCapabilities {
+ return [store sdl_objectsForName:SDLNameHmiSettingsControlCapabilities ofClass:SDLHMISettingsControlCapabilities.class];
+}
+
+- (void)setLightControlCapabilities:(nullable NSArray<SDLLightControlCapabilities *> *)lightControlCapabilities {
+ [store sdl_setObject:lightControlCapabilities forName:SDLNameLightControlCapabilities];
+}
+
+- (nullable NSArray<SDLLightControlCapabilities *> *)lightControlCapabilities {
+ return [store sdl_objectsForName:SDLNameLightControlCapabilities ofClass:SDLLightControlCapabilities.class];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRequestType.h b/SmartDeviceLink/SDLRequestType.h
index 0a59b0dc3..918ce0218 100644
--- a/SmartDeviceLink/SDLRequestType.h
+++ b/SmartDeviceLink/SDLRequestType.h
@@ -105,6 +105,11 @@ extern SDLRequestType const SDLRequestTypeEmergency;
extern SDLRequestType const SDLRequestTypeMedia;
/**
- A firmeware over-the-air request
+ A firmware over-the-air request
*/
extern SDLRequestType const SDLRequestTypeFOTA;
+
+/**
+ A request that is OEM specific using the `RequestSubType` in SystemRequest
+ */
+extern SDLRequestType const SDLRequestTypeOEMSpecific;
diff --git a/SmartDeviceLink/SDLRequestType.m b/SmartDeviceLink/SDLRequestType.m
index ba3d2d91e..d766e04ee 100644
--- a/SmartDeviceLink/SDLRequestType.m
+++ b/SmartDeviceLink/SDLRequestType.m
@@ -24,3 +24,4 @@ SDLRequestType const SDLRequestTypeVehicleDiagnostics = @"VEHICLE_DIAGNOSTICS";
SDLRequestType const SDLRequestTypeEmergency = @"EMERGENCY";
SDLRequestType const SDLRequestTypeMedia = @"MEDIA";
SDLRequestType const SDLRequestTypeFOTA = @"FOTA";
+SDLRequestType const SDLRequestTypeOEMSpecific = @"OEM_SPECIFIC";
diff --git a/SmartDeviceLink/SDLResponseDispatcher.m b/SmartDeviceLink/SDLResponseDispatcher.m
index e95c3be6c..6851a1575 100644
--- a/SmartDeviceLink/SDLResponseDispatcher.m
+++ b/SmartDeviceLink/SDLResponseDispatcher.m
@@ -8,6 +8,7 @@
#import "SDLResponseDispatcher.h"
+#import "NSMutableArray+Safe.h"
#import "NSMutableDictionary+SafeRemove.h"
#import "SDLAddCommand.h"
#import "SDLAlert.h"
@@ -15,6 +16,7 @@
#import "SDLDeleteCommand.h"
#import "SDLDeleteCommandResponse.h"
#import "SDLError.h"
+#import "SDLGlobals.h"
#import "SDLLogMacros.h"
#import "SDLOnAudioPassThru.h"
#import "SDLOnButtonEvent.h"
@@ -215,10 +217,9 @@ NS_ASSUME_NONNULL_BEGIN
- (void)sdl_runHandlerForButton:(SDLRPCNotificationNotification *)notification {
__kindof SDLRPCNotification *rpcNotification = notification.notification;
-
- SDLRPCButtonNotificationHandler handler = nil;
SDLButtonName name = nil;
NSNumber *customID = nil;
+ SDLRPCButtonNotificationHandler handler = nil;
if ([rpcNotification isMemberOfClass:[SDLOnButtonEvent class]]) {
name = ((SDLOnButtonEvent *)rpcNotification).buttonName;
@@ -226,20 +227,26 @@ NS_ASSUME_NONNULL_BEGIN
} else if ([rpcNotification isMemberOfClass:[SDLOnButtonPress class]]) {
name = ((SDLOnButtonPress *)rpcNotification).buttonName;
customID = ((SDLOnButtonPress *)rpcNotification).customButtonID;
+ } else {
+ return;
}
if ([name isEqualToEnum:SDLButtonNameCustomButton]) {
+ // Custom buttons
handler = self.customButtonHandlerMap[customID];
} else {
+ // Static buttons
handler = self.buttonHandlerMap[name];
}
- if (handler) {
- if ([rpcNotification isMemberOfClass:[SDLOnButtonEvent class]]) {
- handler(nil, rpcNotification);
- } else if ([rpcNotification isMemberOfClass:[SDLOnButtonPress class]]) {
- handler(rpcNotification, nil);
- }
+ if (handler == nil) {
+ return;
+ }
+
+ if ([rpcNotification isMemberOfClass:[SDLOnButtonEvent class]]) {
+ handler(nil, rpcNotification);
+ } else if ([rpcNotification isMemberOfClass:[SDLOnButtonPress class]]) {
+ handler(rpcNotification, nil);
}
}
diff --git a/SmartDeviceLink/SDLResult.h b/SmartDeviceLink/SDLResult.h
index 99678b852..fe9820475 100644
--- a/SmartDeviceLink/SDLResult.h
+++ b/SmartDeviceLink/SDLResult.h
@@ -160,6 +160,11 @@ extern SDLResult const SDLResultTimedOut;
extern SDLResult const SDLResultCancelRoute;
/**
+ * The data sent failed to pass CRC check in receiver end.
+ */
+extern SDLResult const SDLResultCorruptedData;
+
+/**
The RPC (e.g. ReadDID) executed successfully but the data exceeded the platform maximum threshold and thus, only part of the data is available.
*/
extern SDLResult const SDLResultTruncatedData;
diff --git a/SmartDeviceLink/SDLResult.m b/SmartDeviceLink/SDLResult.m
index 77c8c5529..5e169c3a2 100644
--- a/SmartDeviceLink/SDLResult.m
+++ b/SmartDeviceLink/SDLResult.m
@@ -30,6 +30,7 @@ SDLResult const SDLResultDisallowed = @"DISALLOWED";
SDLResult const SDLResultUserDisallowed = @"USER_DISALLOWED";
SDLResult const SDLResultTimedOut = @"TIMED_OUT";
SDLResult const SDLResultCancelRoute = @"CANCEL_ROUTE";
+SDLResult const SDLResultCorruptedData = @"CORRUPTED_DATA";
SDLResult const SDLResultTruncatedData = @"TRUNCATED_DATA";
SDLResult const SDLResultRetry = @"RETRY";
SDLResult const SDLResultWarnings = @"WARNINGS";
diff --git a/SmartDeviceLink/SDLSISData.h b/SmartDeviceLink/SDLSISData.h
new file mode 100644
index 000000000..b7d939644
--- /dev/null
+++ b/SmartDeviceLink/SDLSISData.h
@@ -0,0 +1,61 @@
+// SDLSISData.h
+//
+
+#import "SDLRPCMessage.h"
+
+@class SDLStationIDNumber;
+@class SDLGPSData;
+
+/**
+ * HD radio Station Information Service (SIS) data.
+ *
+ */
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLSISData : SDLRPCStruct
+
+- (instancetype)initWithStationShortName:(nullable NSString *)stationShortName stationIDNumber:(nullable SDLStationIDNumber *)id stationLongName:(nullable NSString *)stationLongName stationLocation:(nullable SDLGPSData *)stationLocation stationMessage:(nullable NSString *)stationMessage;
+
+/**
+ * @abstract Identifies the 4-alpha-character station call sign
+ * plus an optional (-FM) extension
+ *
+ * Optional, String, minLength: 4characters maxlength: 7characters
+ */
+@property (nullable, strong, nonatomic) NSString *stationShortName;
+
+/**
+ * @abstract Used for network Application.
+ * Consists of Country Code and FCC Facility ID.
+ *
+ * Optional, SDLStationIDNumber type
+ */
+@property (nullable, strong, nonatomic) SDLStationIDNumber *stationIDNumber;
+
+/**
+ * @abstract Identifies the station call sign or other identifying
+ * information in the long format.
+ *
+ * Optional, String, minLength: 0characters maxlength: 56characters
+ */
+@property (nullable, strong, nonatomic) NSString *stationLongName;
+
+/**
+ * @abstract Provides the 3-dimensional geographic station location
+ *
+ * Optional, SDLGPSData type
+ */
+@property (nullable, strong, nonatomic) SDLGPSData *stationLocation;
+
+/**
+ * @abstract May be used to convey textual information of general interest
+ * to the consumer such as weather forecasts or public service announcements.
+ *
+ * Optional, String, minLength: 0characters maxlength: 56characters
+ */
+@property (nullable, strong, nonatomic) NSString *stationMessage;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSISData.m b/SmartDeviceLink/SDLSISData.m
new file mode 100644
index 000000000..27681aab9
--- /dev/null
+++ b/SmartDeviceLink/SDLSISData.m
@@ -0,0 +1,72 @@
+// SDLSISData.m
+//
+
+#import "SDLSISData.h"
+
+#import "SDLStationIDNumber.h"
+#import "SDLGPSData.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLSISData
+
+- (instancetype)initWithStationShortName:(nullable NSString *)stationShortName stationIDNumber:(nullable SDLStationIDNumber *)stationIDNumber stationLongName:(nullable NSString *)stationLongName stationLocation:(nullable SDLGPSData *)stationLocation stationMessage:(nullable NSString *)stationMessage {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+ self.stationShortName = stationShortName;
+ self.stationIDNumber = stationIDNumber;
+ self.stationLongName = stationLongName;
+ self.stationLocation = stationLocation;
+ self.stationMessage = stationMessage;
+
+ return self;
+}
+
+- (void)setStationShortName:(nullable NSString *)stationShortName {
+ [store sdl_setObject:stationShortName forName:SDLNameStationShortName];
+}
+
+- (nullable NSString *)stationShortName {
+ return [store sdl_objectForName:SDLNameStationShortName];
+}
+
+- (void)setStationIDNumber:(nullable SDLStationIDNumber *)stationIDNumber {
+ [store sdl_setObject:stationIDNumber forName:SDLNameStationIDNumber];
+}
+
+- (nullable SDLStationIDNumber *)stationIDNumber {
+ return [store sdl_objectForName:SDLNameStationIDNumber ofClass:SDLStationIDNumber.class];
+}
+
+- (void)setStationLongName:(nullable NSString *)stationLongName {
+ [store sdl_setObject:stationLongName forName:SDLNameStationLongName];
+}
+
+- (nullable NSString *)stationLongName {
+ return [store sdl_objectForName:SDLNameStationLongName];
+}
+
+- (void)setStationLocation:(nullable SDLGPSData *)stationLocation {
+ [store sdl_setObject:stationLocation forName:SDLNameStationLocation];
+}
+
+- (nullable SDLGPSData *)stationLocation {
+ return [store sdl_objectForName:SDLNameStationLocation ofClass:SDLGPSData.class];
+}
+
+- (void)setStationMessage:(nullable NSString *)stationMessage {
+ [store sdl_setObject:stationMessage forName:SDLNameStationMessage];
+}
+
+- (nullable NSString *)stationMessage {
+ return [store sdl_objectForName:SDLNameStationMessage];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLScreenManager.h b/SmartDeviceLink/SDLScreenManager.h
index c058a710d..34764b05d 100644
--- a/SmartDeviceLink/SDLScreenManager.h
+++ b/SmartDeviceLink/SDLScreenManager.h
@@ -8,16 +8,22 @@
#import <Foundation/Foundation.h>
+#import "SDLInteractionMode.h"
#import "SDLMetadataType.h"
#import "SDLTextAlignment.h"
@class SDLArtwork;
+@class SDLChoiceCell;
+@class SDLChoiceSet;
@class SDLFileManager;
+@class SDLKeyboardProperties;
@class SDLMenuCell;
-@class SDLVoiceCommand;
@class SDLSoftButtonObject;
+@class SDLVoiceCommand;
@protocol SDLConnectionManagerType;
+@protocol SDLChoiceSetDelegate;
+@protocol SDLKeyboardDelegate;
NS_ASSUME_NONNULL_BEGIN
@@ -28,8 +34,17 @@ NS_ASSUME_NONNULL_BEGIN
*/
typedef void(^SDLScreenManagerUpdateCompletionHandler)(NSError *__nullable error);
+/**
+ Return an error with userinfo [key: SDLChoiceCell, value: NSError] if choices failed to upload
+
+ @param error The error if one occurred
+ */
+typedef void(^SDLPreloadChoiceCompletionHandler)(NSError *__nullable error);
+
@interface SDLScreenManager : NSObject
+#pragma mark Text and Graphics
+
/**
The top text field within a template layout
*/
@@ -90,11 +105,15 @@ typedef void(^SDLScreenManagerUpdateCompletionHandler)(NSError *__nullable error
*/
@property (copy, nonatomic, nullable) SDLMetadataType textField4Type;
+#pragma mark Soft Buttons
+
/**
The current list of soft buttons within a template layout. Set this array to change the displayed soft buttons.
*/
@property (copy, nonatomic) NSArray<SDLSoftButtonObject *> *softButtonObjects;
+#pragma mark Menu
+
/**
The current list of menu cells displayed in the app's menu.
*/
@@ -105,6 +124,23 @@ typedef void(^SDLScreenManagerUpdateCompletionHandler)(NSError *__nullable error
*/
@property (copy, nonatomic) NSArray<SDLVoiceCommand *> *voiceCommands;
+#pragma mark Choice Sets
+
+/**
+ The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.
+ */
+@property (strong, nonatomic, null_resettable) SDLKeyboardProperties *keyboardConfiguration;
+
+/**
+ 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.
+ */
+@property (copy, nonatomic, readonly) NSSet<SDLChoiceCell *> *preloadedChoices;
+
+
+#pragma mark - Methods
+
+#pragma mark Lifecycle
+
/**
Initialize a screen manager
@@ -114,15 +150,24 @@ typedef void(^SDLScreenManagerUpdateCompletionHandler)(NSError *__nullable error
@param fileManager The file manager used to upload files
@return The screen manager
*/
+
- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager fileManager:(SDLFileManager *)fileManager;
/**
+ Starts the manager and all sub-managers
+
+ @param handler The handler called when setup is complete
+ */
+- (void)startWithCompletionHandler:(void(^)(NSError * _Nullable error))handler;
+
+/**
Stops the manager.
@warning For internal use
*/
- (void)stop;
+#pragma mark Text and Graphic
/**
Delays all screen updates until endUpdatesWithCompletionHandler: is called.
*/
@@ -142,18 +187,83 @@ typedef void(^SDLScreenManagerUpdateCompletionHandler)(NSError *__nullable error
Also updates the primary and secondary images with new image(s) if new one(s) been set. This method will take care of naming the files (based on a hash). This is assumed to be a non-persistant image.
If it needs to be uploaded, it will be. Once the upload is complete, the on-screen graphic will be updated.
+ */
+- (void)endUpdates;
+
+/**
+ Update text fields with new text set into the text field properties. Pass an empty string `\@""` to clear the text field.
+
+ If the system does not support a full 4 fields, this will automatically be concatenated and properly send the field available.
+
+ If 3 lines are available: [field1, field2, field3 - field 4]
+
+ If 2 lines are available: [field1 - field2, field3 - field4]
+
+ If 1 line is available: [field1 - field2 - field3 - field4]
+
+ Also updates the primary and secondary images with new image(s) if new one(s) been set. This method will take care of naming the files (based on a hash). This is assumed to be a non-persistant image.
+
+ If it needs to be uploaded, it will be. Once the upload is complete, the on-screen graphic will be updated.
@param handler A handler run when the fields have finished updating, with an error if the update failed. This handler may be called multiple times when the text update is sent and the image update is sent.
*/
- (void)endUpdatesWithCompletionHandler:(nullable SDLScreenManagerUpdateCompletionHandler)handler;
+#pragma mark Soft Button
+
+- (nullable SDLSoftButtonObject *)softButtonObjectNamed:(NSString *)name;
+
+#pragma mark Choice Sets
+
/**
- Find a current soft button object with a specific name
+ 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.
- @param name The name of the soft button object to find
- @return The soft button object or nil if there isn't one with that name
+ @param choices The choices to be preloaded.
+ @param handler The handler to be called when complete.
*/
-- (nullable SDLSoftButtonObject *)softButtonObjectNamed:(NSString *)name;
+- (void)preloadChoices:(NSArray<SDLChoiceCell *> *)choices withCompletionHandler:(nullable SDLPreloadChoiceCompletionHandler)handler;
+
+/**
+ Delete loaded cells from the head unit. If the cells don't exist on the head unit they will be ignored.
+
+ @param choices The choices to be deleted. These will be matched via a hash of the text, image name(s), and VR commands.
+ */
+- (void)deleteChoices:(NSArray<SDLChoiceCell *> *)choices;
+
+/**
+ 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.
+
+ If the cells in the set are not already preloaded, they will be preloaded before the presentation occurs; this could take a while depending on the contents of the cells.
+
+ If the cells have voice commands and images attached, this could take upwards of 10 seconds. If there are no cells on the set, this will fail, calling `choiceSet:didReceiveError:` on the choice set delegate.
+
+ @param choiceSet The set to be displayed
+ @param mode If the set should be presented for the user to interact via voice, touch, or both
+ */
+- (void)presentChoiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode;
+
+/**
+ 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.
+
+ This presents the choice set as searchable when in a touch interaction. The user, when not in a distracted state, will have a keyboard available for searching this set. The user's input in the keyboard will be available in the SDLKeyboardDelegate.
+
+ If the cells in the set are not already preloaded, they will be preloaded before the presentation occurs; this could take a while depending on the contents of the cells.
+
+ If the cells have voice commands and images attached, this could take upwards of 10 seconds. If there are no cells on the set, this will fail, calling `choiceSet:didReceiveError:` on the choice set delegate.
+
+ @param choiceSet The set to be displayed
+ @param mode If the set should be presented for the user to interact via voice, touch, or both
+ @param delegate The keyboard delegate called when the user interacts with the search field of the choice set
+ */
+- (void)presentSearchableChoiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode withKeyboardDelegate:(id<SDLKeyboardDelegate>)delegate;
+
+/**
+ 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.
+
+ @param initialText The initial text within the keyboard input field. It will disappear once the user selects the field in order to enter text
+ @param delegate The keyboard delegate called when the user interacts with the keyboard
+ */
+- (void)presentKeyboardWithInitialText:(NSString *)initialText delegate:(id<SDLKeyboardDelegate>)delegate;
@end
diff --git a/SmartDeviceLink/SDLScreenManager.m b/SmartDeviceLink/SDLScreenManager.m
index 798659283..bfd8c9b71 100644
--- a/SmartDeviceLink/SDLScreenManager.m
+++ b/SmartDeviceLink/SDLScreenManager.m
@@ -9,6 +9,7 @@
#import "SDLScreenManager.h"
#import "SDLArtwork.h"
+#import "SDLChoiceSetManager.h"
#import "SDLMenuManager.h"
#import "SDLSoftButtonManager.h"
#import "SDLTextAndGraphicManager.h"
@@ -22,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) SDLSoftButtonManager *softButtonManager;
@property (strong, nonatomic) SDLMenuManager *menuManager;
@property (strong, nonatomic) SDLVoiceCommandManager *voiceCommandMenuManager;
+@property (strong, nonatomic) SDLChoiceSetManager *choiceSetManager;
@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
@property (weak, nonatomic) SDLFileManager *fileManager;
@@ -41,15 +43,23 @@ NS_ASSUME_NONNULL_BEGIN
_softButtonManager = [[SDLSoftButtonManager alloc] initWithConnectionManager:connectionManager fileManager:fileManager];
_menuManager = [[SDLMenuManager alloc] initWithConnectionManager:connectionManager fileManager:fileManager];
_voiceCommandMenuManager = [[SDLVoiceCommandManager alloc] initWithConnectionManager:connectionManager];
+ _choiceSetManager = [[SDLChoiceSetManager alloc] initWithConnectionManager:connectionManager fileManager:fileManager];
return self;
}
+- (void)startWithCompletionHandler:(void (^)(NSError * _Nullable))handler {
+ [self.choiceSetManager start];
+
+ handler(nil);
+}
+
- (void)stop {
[self.textAndGraphicManager stop];
[self.softButtonManager stop];
[self.menuManager stop];
[self.voiceCommandMenuManager stop];
+ [self.choiceSetManager stop];
}
- (nullable SDLSoftButtonObject *)softButtonObjectNamed:(NSString *)name {
@@ -129,6 +139,10 @@ NS_ASSUME_NONNULL_BEGIN
self.voiceCommandMenuManager.voiceCommands = voiceCommands;
}
+- (void)setKeyboardConfiguration:(nullable SDLKeyboardProperties *)keyboardConfiguration {
+ self.choiceSetManager.keyboardConfiguration = keyboardConfiguration;
+}
+
#pragma mark - Getters
- (nullable NSString *)textField1 {
@@ -199,6 +213,14 @@ NS_ASSUME_NONNULL_BEGIN
return _voiceCommandMenuManager.voiceCommands;
}
+- (NSSet<SDLChoiceCell *> *)preloadedChoices {
+ return _choiceSetManager.preloadedChoices;
+}
+
+- (SDLKeyboardProperties *)keyboardConfiguration {
+ return _choiceSetManager.keyboardConfiguration;
+}
+
#pragma mark - Begin / End Updates
- (void)beginUpdates {
@@ -206,6 +228,10 @@ NS_ASSUME_NONNULL_BEGIN
self.textAndGraphicManager.batchUpdates = YES;
}
+- (void)endUpdates {
+ [self endUpdatesWithCompletionHandler:nil];
+}
+
- (void)endUpdatesWithCompletionHandler:(nullable SDLScreenManagerUpdateCompletionHandler)handler {
self.softButtonManager.batchUpdates = NO;
self.textAndGraphicManager.batchUpdates = NO;
@@ -214,6 +240,28 @@ NS_ASSUME_NONNULL_BEGIN
[self.softButtonManager updateWithCompletionHandler:handler];
}
+#pragma mark - Choice Sets
+
+- (void)deleteChoices:(NSArray<SDLChoiceCell *> *)choices {
+ [self.choiceSetManager deleteChoices:choices];
+}
+
+- (void)preloadChoices:(NSArray<SDLChoiceCell *> *)choices withCompletionHandler:(nullable SDLPreloadChoiceCompletionHandler)handler {
+ [self.choiceSetManager preloadChoices:choices withCompletionHandler:handler];
+}
+
+- (void)presentChoiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode {
+ [self.choiceSetManager presentChoiceSet:choiceSet mode:mode withKeyboardDelegate:nil];
+}
+
+- (void)presentSearchableChoiceSet:(SDLChoiceSet *)choiceSet mode:(SDLInteractionMode)mode withKeyboardDelegate:(id<SDLKeyboardDelegate>)delegate {
+ [self.choiceSetManager presentChoiceSet:choiceSet mode:mode withKeyboardDelegate:delegate];
+}
+
+- (void)presentKeyboardWithInitialText:(NSString *)initialText delegate:(id<SDLKeyboardDelegate>)delegate {
+ [self.choiceSetManager presentKeyboardWithInitialText:initialText delegate:delegate];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSeatControlCapabilities.h b/SmartDeviceLink/SDLSeatControlCapabilities.h
new file mode 100644
index 000000000..de166d34d
--- /dev/null
+++ b/SmartDeviceLink/SDLSeatControlCapabilities.h
@@ -0,0 +1,134 @@
+// SDLSeatControlCapabilities.h
+//
+
+
+#import "SDLRPCStruct.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Include information about a seat control capabilities.
+ */
+@interface SDLSeatControlCapabilities : SDLRPCStruct
+
+- (instancetype)initWithName:(NSString *)moduleName;
+
+- (instancetype)initWithName:(NSString *)moduleName heatingEnabledAvailable:(BOOL)heatingEnabledAvail
+ coolingEnabledAvailable:(BOOL)coolingEnabledAvail heatingLevelAvailable:(BOOL)heatingLevelAvail coolingLevelAvailable:(BOOL)coolingLevelAvail horizontalPositionAvailable:(BOOL)horizontalPositionAvail verticalPositionAvailable:(BOOL)verticalPositionAvail frontVerticalPositionAvailable:(BOOL)frontVerticalPositionAvail backVerticalPositionAvailable:(BOOL)backVerticalPositionAvail backTiltAngleAvailable:(BOOL)backTitlAngleAvail headSupportHorizontalPositionAvailable:(BOOL)headSupportHorizontalPositionAvail headSupportVerticalPositionAvailable:(BOOL)headSupportVerticalPositionAvail massageEnabledAvailable:(BOOL)massageEnabledAvail massageModeAvailable:(BOOL)massageModeAvail massageCushionFirmnessAvailable:(BOOL)massageCushionFirmnessAvail memoryAvailable:(BOOL)memoryAvail;
+/**
+ * @abstract The short friendly name of the light control module.
+ * It should not be used to identify a module by mobile application.
+ *
+ * Required, Max length 100 chars
+ */
+@property (strong, nonatomic) NSString *moduleName;
+
+/**
+ * @abstract Whether or not heating is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatingEnabledAvailable;
+
+/**
+ * @abstract Whether or not cooling is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *coolingEnabledAvailable;
+
+/**
+ * @abstract Whether or not heating level is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatingLevelAvailable;
+
+/**
+ * @abstract Whether or not cooling level is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *coolingLevelAvailable;
+
+/**
+ * @abstract Whether or not horizontal Position is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *horizontalPositionAvailable;
+
+/**
+ * @abstract Whether or not vertical Position is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *verticalPositionAvailable;
+
+/**
+ * @abstract Whether or not front Vertical Position is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *frontVerticalPositionAvailable;
+
+/**
+ * @abstract Whether or not back Vertical Position is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *backVerticalPositionAvailable;
+
+/**
+ * @abstract Whether or not backTilt Angle Available is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *backTiltAngleAvailable;
+
+/**
+ * @abstract Whether or not head Supports for Horizontal Position is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *headSupportHorizontalPositionAvailable;
+
+/**
+ * @abstract Whether or not head Supports for Vertical Position is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *headSupportVerticalPositionAvailable;
+
+/**
+ * @abstract Whether or not massage Enabled is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *massageEnabledAvailable;
+
+/**
+ * @abstract Whether or not massage Mode is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *massageModeAvailable;
+
+/**
+ * @abstract Whether or not massage Cushion Firmness is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *massageCushionFirmnessAvailable;
+
+/**
+ * @abstract Whether or not memory is Available.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *memoryAvailable;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSeatControlCapabilities.m b/SmartDeviceLink/SDLSeatControlCapabilities.m
new file mode 100644
index 000000000..5f7fd93b0
--- /dev/null
+++ b/SmartDeviceLink/SDLSeatControlCapabilities.m
@@ -0,0 +1,203 @@
+// SDLSeatControlCapabilities.m
+//
+
+#import "SDLSeatControlCapabilities.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLSeatControlCapabilities
+
+- (instancetype)initWithName:(NSString *)moduleName {
+ if (self = [super init]) {
+ self.moduleName = moduleName;
+ }
+ return self;
+}
+
+- (instancetype)initWithName:(NSString *)moduleName heatingEnabledAvailable:(BOOL)heatingEnabledAvail coolingEnabledAvailable:(BOOL)coolingEnabledAvail heatingLevelAvailable:(BOOL)heatingLevelAvail coolingLevelAvailable:(BOOL)coolingLevelAvail horizontalPositionAvailable:(BOOL)horizontalPositionAvail verticalPositionAvailable:(BOOL)verticalPositionAvail frontVerticalPositionAvailable:(BOOL)frontVerticalPositionAvail backVerticalPositionAvailable:(BOOL)backVerticalPositionAvail backTiltAngleAvailable:(BOOL)backTitlAngleAvail headSupportHorizontalPositionAvailable:(BOOL)headSupportHorizontalPositionAvail headSupportVerticalPositionAvailable:(BOOL)headSupportVerticalPositionAvail massageEnabledAvailable:(BOOL)massageEnabledAvail massageModeAvailable:(BOOL)massageModeAvail massageCushionFirmnessAvailable:(BOOL)massageCushionFirmnessAvail memoryAvailable:(BOOL)memoryAvail {
+
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ self.moduleName = moduleName;
+ self.heatingEnabledAvailable = @(heatingEnabledAvail);
+ self.coolingEnabledAvailable = @(coolingEnabledAvail);
+ self.heatingLevelAvailable = @(heatingLevelAvail);
+ self.coolingLevelAvailable = @(coolingLevelAvail);
+ self.horizontalPositionAvailable = @(horizontalPositionAvail);
+ self.verticalPositionAvailable = @(verticalPositionAvail);
+ self.frontVerticalPositionAvailable = @(frontVerticalPositionAvail);
+ self.backVerticalPositionAvailable = @(backVerticalPositionAvail);
+ self.backTiltAngleAvailable = @(backTitlAngleAvail);
+ self.headSupportVerticalPositionAvailable = @(headSupportVerticalPositionAvail);
+ self.headSupportHorizontalPositionAvailable = @(headSupportHorizontalPositionAvail);
+ self.massageEnabledAvailable = @(massageEnabledAvail);
+ self.massageModeAvailable = @(massageModeAvail);
+ self.massageCushionFirmnessAvailable = @(massageCushionFirmnessAvail);
+ self.memoryAvailable = @(memoryAvail);
+
+ return self;
+}
+
+- (void)setModuleName:(NSString *)moduleName {
+ [store sdl_setObject:moduleName forName:SDLNameModuleName];
+}
+
+- (NSString *)moduleName {
+ return [store sdl_objectForName:SDLNameModuleName];
+}
+
+- (void)setHeatingEnabledAvailable:(nullable NSNumber<SDLBool> *)heatingEnabledAvailable {
+ [store sdl_setObject:heatingEnabledAvailable forName:SDLNameHeatingEnabledAvailable];
+}
+
+- (nullable NSNumber<SDLBool> *)heatingEnabledAvailable {
+ return [store sdl_objectForName:SDLNameHeatingEnabledAvailable];
+}
+
+- (void)setCoolingEnabledAvailable:(nullable NSNumber<SDLBool> *)coolingEnabledAvailable {
+ [store sdl_setObject:coolingEnabledAvailable forName:SDLNameCoolingEnabledAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)coolingEnabledAvailable {
+ return [store sdl_objectForName:SDLNameCoolingEnabledAvailable];
+
+}
+
+- (void)setHeatingLevelAvailable:(nullable NSNumber<SDLBool> *)heatingLevelAvailable {
+ [store sdl_setObject:heatingLevelAvailable forName:SDLNameHeatingLevelAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)heatingLevelAvailable {
+ return [store sdl_objectForName:SDLNameHeatingLevelAvailable];
+
+}
+
+- (void)setCoolingLevelAvailable:(nullable NSNumber<SDLBool> *)coolingLevelAvailable {
+ [store sdl_setObject:coolingLevelAvailable forName:SDLNameCoolingLevelAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)coolingLevelAvailable {
+ return [store sdl_objectForName:SDLNameCoolingLevelAvailable];
+
+}
+
+- (void)setHorizontalPositionAvailable:(nullable NSNumber<SDLBool> *)horizontalPositionAvailable {
+ [store sdl_setObject:horizontalPositionAvailable forName:SDLNameHorizontalPositionAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)horizontalPositionAvailable {
+ return [store sdl_objectForName:SDLNameHorizontalPositionAvailable];
+
+}
+
+- (void)setVerticalPositionAvailable:(nullable NSNumber<SDLBool> *)verticalPositionAvailable {
+ [store sdl_setObject:verticalPositionAvailable forName:SDLNameVerticalPositionAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)verticalPositionAvailable {
+ return [store sdl_objectForName:SDLNameVerticalPositionAvailable];
+
+}
+
+- (void)setFrontVerticalPositionAvailable:(nullable NSNumber<SDLBool> *)frontVerticalPositionAvailable {
+ [store sdl_setObject:frontVerticalPositionAvailable forName:SDLNameFrontVerticalPositionAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)frontVerticalPositionAvailable {
+ return [store sdl_objectForName:SDLNameFrontVerticalPositionAvailable];
+
+}
+
+- (void)setBackVerticalPositionAvailable:(nullable NSNumber<SDLBool> *)backVerticalPositionAvailable {
+ [store sdl_setObject:backVerticalPositionAvailable forName:SDLNameBackVerticalPositionAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)backVerticalPositionAvailable {
+ return [store sdl_objectForName:SDLNameBackVerticalPositionAvailable];
+
+}
+
+- (void)setBackTiltAngleAvailable:(nullable NSNumber<SDLBool> *)backTiltAngleAvailable {
+ [store sdl_setObject:backTiltAngleAvailable forName:SDLNameBackTiltAngleAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)backTiltAngleAvailable {
+ return [store sdl_objectForName:SDLNameBackTiltAngleAvailable];
+
+}
+
+- (void)setHeadSupportHorizontalPositionAvailable:(nullable NSNumber<SDLBool> *)headSupportHorizontalPositionAvailable {
+ [store sdl_setObject:headSupportHorizontalPositionAvailable forName:SDLNameHeadSupportHorizontalPositionAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)headSupportHorizontalPositionAvailable {
+ return [store sdl_objectForName:SDLNameHeadSupportHorizontalPositionAvailable];
+
+}
+
+- (void)setHeadSupportVerticalPositionAvailable:(nullable NSNumber<SDLBool> *)headSupportVerticalPositionAvailable {
+ [store sdl_setObject:headSupportVerticalPositionAvailable forName:SDLNameHeadSupportVerticalPositionAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)headSupportVerticalPositionAvailable {
+ return [store sdl_objectForName:SDLNameHeadSupportVerticalPositionAvailable];
+
+}
+
+- (void)setMassageEnabledAvailable:(nullable NSNumber<SDLBool> *)massageEnabledAvailable {
+ [store sdl_setObject:massageEnabledAvailable forName:SDLNameMassageEnabledAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)massageEnabledAvailable {
+ return [store sdl_objectForName:SDLNameMassageEnabledAvailable];
+
+}
+
+- (void)setMassageModeAvailable:(nullable NSNumber<SDLBool> *)massageModeAvailable {
+ [store sdl_setObject:massageModeAvailable forName:SDLNameMassageModeAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)massageModeAvailable {
+ return [store sdl_objectForName:SDLNameMassageModeAvailable];
+
+}
+
+- (void)setMassageCushionFirmnessAvailable:(nullable NSNumber<SDLBool> *)massageCushionFirmnessAvailable {
+ [store sdl_setObject:massageCushionFirmnessAvailable forName:SDLNameMassageCushionFirmnessAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)massageCushionFirmnessAvailable {
+ return [store sdl_objectForName:SDLNameMassageCushionFirmnessAvailable];
+
+}
+
+- (void)setMemoryAvailable:(nullable NSNumber<SDLBool> *)memoryAvailable {
+ [store sdl_setObject:memoryAvailable forName:SDLNameMemoryAvailable];
+
+}
+
+- (nullable NSNumber<SDLBool> *)memoryAvailable {
+ return [store sdl_objectForName:SDLNameMemoryAvailable];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSeatControlData.h b/SmartDeviceLink/SDLSeatControlData.h
new file mode 100644
index 000000000..e08492d28
--- /dev/null
+++ b/SmartDeviceLink/SDLSeatControlData.h
@@ -0,0 +1,166 @@
+// SDLSeatControlData.h
+//
+
+#import "SDLRPCStruct.h"
+#import "SDLSeatMemoryActionType.h"
+#import "SDLSupportedSeat.h"
+
+@class SDLMassageModeData;
+@class SDLMassageCushionFirmness;
+@class SDLSeatMemoryAction;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Seat control data corresponds to "SEAT" ModuleType.
+ */
+
+@interface SDLSeatControlData : SDLRPCStruct
+
+/**
+ Constructs a newly allocated SDLSeatControlData object with cushion and firmness
+
+ @param supportedSeat id of remote controllable seat.
+ @return An instance of the SDLSeatControlData class
+ */
+- (instancetype)initWithId:(SDLSupportedSeat)supportedSeat;
+
+/**
+ Constructs a newly allocated SDLSeatControlData object with cushion and firmness
+
+ @param supportedSeat id of remote controllable seat.
+ @param heatingEnable Whether or not heating is enabled.
+ @param coolingEnable Whether or not cooling is enabled.
+ @param heatingLevel heating level
+ @param coolingLevel cooling Level
+ @param horizontal horizontal Position
+ @param vertical vertical Position
+ @param frontVertical frontVertical Position
+ @param backVertical backVertical Position
+ @param backAngle backAngle Position
+ @param headSupportedHorizontal headSupportedHorizontal Position
+ @param headSupportedVertical headSupportedVertical Position
+ @param massageEnable Whether or not massage is enabled.
+ @param massageMode Array of massage mode data.
+ @param firmness Array of firmness data.
+ @param memoryAction type of action to be performed.
+ @return An instance of the SDLSeatControlData class
+ */
+- (instancetype)initWithId:(SDLSupportedSeat)supportedSeat heatingEnabled:(BOOL)heatingEnable coolingEnable:(BOOL)coolingEnable heatingLevel:(UInt8)heatingLevel coolingLevel:(UInt8)coolingLevel horizontalPostion:(UInt8)horizontal verticalPostion:(UInt8)vertical frontVerticalPostion:(UInt8)frontVertical backVerticalPostion:(UInt8)backVertical backTiltAngle:(UInt8)backAngle headSupportedHorizontalPostion:(UInt8)headSupportedHorizontal headSupportedVerticalPostion:(UInt8)headSupportedVertical massageEnabled:(BOOL)massageEnable massageMode:(NSArray<SDLMassageModeData *> *)massageMode massageCussionFirmness:(NSArray<SDLMassageCushionFirmness *> *)firmness memory:(SDLSeatMemoryAction *)memoryAction;
+
+/**
+ * @abstract id of seat that is a remote controllable seat.
+ *
+ * Required
+ */
+@property (strong, nonatomic) SDLSupportedSeat id;
+
+/**
+ * @abstract Whether or not heating is enabled.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *heatingEnabled;
+
+/**
+ * @abstract Whether or not cooling is enabled.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *coolingEnabled;
+
+/**
+ * @abstract heating level in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *heatingLevel;
+
+/**
+ * @abstract cooling level in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *coolingLevel;
+
+/**
+ * @abstract horizontal Position in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *horizontalPosition;
+
+/**
+ * @abstract heating level in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *verticalPosition;
+
+/**
+ * @abstract heating level in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *frontVerticalPosition;
+
+/**
+ * @abstract heating level in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *backVerticalPosition;
+
+/**
+ * @abstract heating level in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *backTiltAngle;
+
+/**
+ * @abstract head Support Horizontal Position in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *headSupportHorizontalPosition;
+
+/**
+ * @abstract head Support Vertical Position in integer
+ *
+ * Optional, MinValue- 0 MaxValue= 100
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *headSupportVerticalPosition;
+
+/**
+ * @abstract Whether or not massage is enabled.
+
+ * Optional
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *massageEnabled;
+
+/**
+ * @abstract Array of massage mode data.
+
+ * Optional, Array of SDLMassageModeData objects, MinArray size-1 MaxArray size-2
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLMassageModeData *> *massageMode;
+
+
+/**
+ * @abstract Array of firmness of a cushion.
+
+ * Optional, Array of SDLMassageCushionFirmness objects, MinArray size-1 MaxArray size-5
+ */
+@property (nullable, strong, nonatomic) NSArray<SDLMassageCushionFirmness *> *massageCushionFirmness;
+
+/**
+ * @abstract type of action to be performed
+ *
+ * Required, @see SDLSeatMemoryAction
+ */
+@property (nullable, strong, nonatomic) SDLSeatMemoryAction *memory;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSeatControlData.m b/SmartDeviceLink/SDLSeatControlData.m
new file mode 100644
index 000000000..df2b43585
--- /dev/null
+++ b/SmartDeviceLink/SDLSeatControlData.m
@@ -0,0 +1,187 @@
+// SDLSeatControlData.m
+//
+
+#import "SDLSeatControlData.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+#import "SDLMassageModeData.h"
+#import "SDLMassageCushionFirmness.h"
+#import "SDLSeatMemoryAction.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLSeatControlData
+
+- (instancetype)initWithId:(SDLSupportedSeat)supportedSeat {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+ self.id = supportedSeat;
+
+ return self;
+}
+
+- (instancetype)initWithId:(SDLSupportedSeat)supportedSeat heatingEnabled:(BOOL)heatingEnable coolingEnable:(BOOL)coolingEnabled heatingLevel:(UInt8)heatingLevel coolingLevel:(UInt8)coolingLevel horizontalPostion:(UInt8)horizontal verticalPostion:(UInt8)vertical frontVerticalPostion:(UInt8)frontVertical backVerticalPostion:(UInt8)backVertical backTiltAngle:(UInt8)backAngle headSupportedHorizontalPostion:(UInt8)headSupportedHorizontal headSupportedVerticalPostion:(UInt8)headSupportedVertical massageEnabled:(BOOL)massageEnable massageMode:(NSArray<SDLMassageModeData *> *)massageMode massageCussionFirmness:(NSArray<SDLMassageCushionFirmness *> *)firmness memory:(SDLSeatMemoryAction *)memoryAction {
+
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ self.id = supportedSeat;
+ self.heatingEnabled = @(heatingEnable);
+ self.coolingEnabled = @(coolingEnabled);
+ self.heatingLevel = @(heatingLevel);
+ self.coolingLevel = @(coolingLevel);
+
+ self.horizontalPosition = @(horizontal);
+ self.verticalPosition = @(vertical);
+ self.frontVerticalPosition = @(frontVertical);
+ self.backVerticalPosition = @(backVertical);
+ self.backTiltAngle = @(backAngle);
+
+ self.headSupportHorizontalPosition = @(headSupportedHorizontal);
+ self.headSupportVerticalPosition = @(headSupportedVertical);
+
+ self.massageEnabled = @(massageEnable);
+ self.massageMode = massageMode;
+ self.massageCushionFirmness = firmness;
+ self.memory = memoryAction;
+
+ return self;
+}
+
+- (void)setId:(SDLSupportedSeat)id {
+ [store sdl_setObject:id forName:SDLNameId];
+}
+
+- (SDLSupportedSeat)id {
+ return [store sdl_objectForName:SDLNameId];
+}
+
+- (void)setHeatingEnabled:(nullable NSNumber<SDLBool> *)heatingEnabled {
+ [store sdl_setObject:heatingEnabled forName:SDLNameHeatingEnabled];
+}
+
+- (nullable NSNumber<SDLBool> *)heatingEnabled {
+ return [store sdl_objectForName:SDLNameHeatingEnabled];
+}
+
+- (void)setCoolingEnabled:(nullable NSNumber<SDLBool> *)coolingEnabled {
+ [store sdl_setObject:coolingEnabled forName:SDLNameCoolingEnabled];
+}
+
+- (nullable NSNumber<SDLBool> *)coolingEnabled {
+ return [store sdl_objectForName:SDLNameCoolingEnabled];
+}
+
+- (void)setHeatingLevel:(nullable NSNumber<SDLInt> *)heatingLevel {
+ [store sdl_setObject:heatingLevel forName:SDLNameHeatingLevel];
+}
+
+- (nullable NSNumber<SDLInt> *)heatingLevel {
+ return [store sdl_objectForName:SDLNameHeatingLevel];
+}
+
+- (void)setCoolingLevel:(nullable NSNumber<SDLInt> *)coolingLevel {
+ [store sdl_setObject:coolingLevel forName:SDLNameCoolingLevel];
+}
+
+- (nullable NSNumber<SDLInt> *)coolingLevel {
+ return [store sdl_objectForName:SDLNameCoolingLevel];
+}
+
+- (void)setHorizontalPosition:(nullable NSNumber<SDLInt> *)horizontalPosition {
+ [store sdl_setObject:horizontalPosition forName:SDLNameHorizontalPosition];
+}
+
+- (nullable NSNumber<SDLInt> *)horizontalPosition {
+ return [store sdl_objectForName:SDLNameHorizontalPosition];
+}
+
+- (void)setVerticalPosition:(nullable NSNumber<SDLInt> *)verticalPosition {
+ [store sdl_setObject:verticalPosition forName:SDLNameVerticalPosition];
+}
+
+- (nullable NSNumber<SDLInt> *)verticalPosition {
+ return [store sdl_objectForName:SDLNameVerticalPosition];
+}
+
+- (void)setFrontVerticalPosition:(nullable NSNumber<SDLInt> *)frontVerticalPosition {
+ [store sdl_setObject:frontVerticalPosition forName:SDLNameFrontVerticalPosition];
+}
+
+- (nullable NSNumber<SDLInt> *)frontVerticalPosition {
+ return [store sdl_objectForName:SDLNameFrontVerticalPosition];
+}
+
+- (void)setBackVerticalPosition:(nullable NSNumber<SDLInt> *)backVerticalPosition {
+ [store sdl_setObject:backVerticalPosition forName:SDLNameBackVerticalPosition];
+}
+
+- (nullable NSNumber<SDLInt> *)backVerticalPosition {
+ return [store sdl_objectForName:SDLNameBackVerticalPosition];
+}
+
+- (void)setBackTiltAngle:(nullable NSNumber<SDLInt> *)backTiltAngle {
+ [store sdl_setObject:backTiltAngle forName:SDLNameBackTiltAngle];
+}
+
+- (nullable NSNumber<SDLInt> *)backTiltAngle {
+ return [store sdl_objectForName:SDLNameBackTiltAngle];
+}
+
+- (void)setHeadSupportHorizontalPosition:(nullable NSNumber<SDLInt> *)headSupportHorizontalPosition {
+ [store sdl_setObject:headSupportHorizontalPosition forName:SDLNameHeadSupportHorizontalPosition];
+}
+
+- (nullable NSNumber<SDLInt> *)headSupportHorizontalPosition {
+ return [store sdl_objectForName:SDLNameHeadSupportHorizontalPosition];
+}
+
+-(void)setHeadSupportVerticalPosition:(nullable NSNumber<SDLInt> *)headSupportVerticalPosition {
+ [store sdl_setObject:headSupportVerticalPosition forName:SDLNameHeadSupportVerticalPosition];
+}
+
+- (nullable NSNumber<SDLInt> *)headSupportVerticalPosition {
+ return [store sdl_objectForName:SDLNameHeadSupportVerticalPosition];
+}
+
+- (void)setMassageEnabled:(nullable NSNumber<SDLBool> *)massageEnabled {
+ [store sdl_setObject:massageEnabled forName:SDLNameMassageEnabled];
+}
+
+- (nullable NSNumber<SDLBool> *)massageEnabled {
+ return [store sdl_objectForName:SDLNameMassageEnabled];
+
+}
+
+- (void)setMassageMode:(nullable NSArray<SDLMassageModeData *> *)massageMode {
+ [store sdl_setObject:massageMode forName:SDLNameMassageMode];
+}
+
+- (nullable NSArray<SDLMassageModeData *> *)massageMode {
+ return [store sdl_objectForName:SDLNameMassageMode ];
+}
+
+- (void)setMassageCushionFirmness:(nullable NSArray<SDLMassageCushionFirmness *> *)massageCushionFirmness {
+ [store sdl_setObject:massageCushionFirmness forName:SDLNameMassageCushionFirmness];
+}
+
+- (nullable NSArray<SDLMassageCushionFirmness *> *)massageCushionFirmness {
+ return [store sdl_objectForName:SDLNameMassageCushionFirmness];
+}
+
+- (void)setMemory:(nullable SDLSeatMemoryAction *)memory {
+ [store sdl_setObject:memory forName:SDLNameMemory];
+}
+
+- (nullable SDLSeatMemoryAction *)memory {
+ return [store sdl_objectForName:SDLNameMemory ofClass:SDLSeatMemoryAction.class];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSeatMemoryAction.h b/SmartDeviceLink/SDLSeatMemoryAction.h
new file mode 100644
index 000000000..7dbcf64f8
--- /dev/null
+++ b/SmartDeviceLink/SDLSeatMemoryAction.h
@@ -0,0 +1,61 @@
+// SDLSeatMemoryAction.h
+//
+
+#import "SDLRPCStruct.h"
+#import "SDLSeatMemoryActionType.h"
+
+/**
+ * Specify the action to be performed.
+ */
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLSeatMemoryAction : SDLRPCStruct
+
+
+/**
+ @abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type
+
+ @param id of the action to be performed
+ @param action type of action to be performed
+ @return A SDLSeatMemoryAction object
+ */
+- (instancetype)initWithId:(UInt8)id action:(SDLSeatMemoryActionType)action;
+
+/**
+ @abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type
+
+ @param id of the action to be performed
+ @param label of the action to be performed.
+ @param action type of action to be performed
+ @return A SDLSeatMemoryAction object
+ */
+- (instancetype)initWithId:(UInt8)id label:(nullable NSString*) label action:(SDLSeatMemoryActionType)action;
+
+/**
+ * @abstract id of the action to be performed.
+ *
+ * Required, MinValue- 0 MaxValue= 10
+ *
+ */
+@property (strong, nonatomic) NSNumber<SDLInt> *id;
+
+/**
+ * @abstract label of the action to be performed.
+ *
+ * Optional, Max length 100 chars
+ */
+@property (nullable, strong, nonatomic) NSString *label;
+
+/**
+ * @abstract type of action to be performed
+ *
+ * Required, @see SDLSeatMemoryActionType
+ *
+ */
+@property (strong, nonatomic) SDLSeatMemoryActionType action;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSeatMemoryAction.m b/SmartDeviceLink/SDLSeatMemoryAction.m
new file mode 100644
index 000000000..76f519238
--- /dev/null
+++ b/SmartDeviceLink/SDLSeatMemoryAction.m
@@ -0,0 +1,60 @@
+// SDLSeatMemoryAction.m
+//
+
+#import "SDLSeatMemoryAction.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLSeatMemoryAction
+
+- (instancetype)initWithId:(UInt8)id action:(SDLSeatMemoryActionType)action {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ self.id = @(id);
+ self.action = action;
+
+ return self;
+}
+
+- (instancetype)initWithId:(UInt8)id label:(nullable NSString*)label action:(SDLSeatMemoryActionType)action {
+ self = [self initWithId:id action:action];
+ if (!self) {
+ return nil;
+ }
+
+ self.label = label;
+ return self;
+}
+
+- (void)setId:(NSNumber<SDLInt> *)id {
+ [store sdl_setObject:id forName:SDLNameId];
+}
+
+- (NSNumber<SDLInt> *)id {
+ return [store sdl_objectForName:SDLNameId];
+}
+
+- (void)setLabel:(nullable NSString *)label {
+ [store sdl_setObject:label forName:SDLNameLabel];
+}
+
+- (nullable NSString *)label {
+ return [store sdl_objectForName:SDLNameLabel];
+}
+
+- (void)setAction:(SDLSeatMemoryActionType)action {
+ [store sdl_setObject:action forName:SDLNameAction];
+}
+
+- (SDLSeatMemoryActionType)action {
+ return [store sdl_objectForName:SDLNameAction];
+}
+@end
+
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSeatMemoryActionType.h b/SmartDeviceLink/SDLSeatMemoryActionType.h
new file mode 100644
index 000000000..9ac8eafae
--- /dev/null
+++ b/SmartDeviceLink/SDLSeatMemoryActionType.h
@@ -0,0 +1,27 @@
+// SDLSeatMemoryActionType.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * List of possible actions on Seat Meomry
+ *
+ * @since SDL 2.0
+ */
+typedef SDLEnum SDLSeatMemoryActionType SDL_SWIFT_ENUM;
+
+/**
+ * @abstract Save current seat postions and settings to seat memory.
+ */
+extern SDLSeatMemoryActionType const SDLSeatMemoryActionTypeSave;
+
+/**
+ * @abstract Restore / apply the seat memory settings to the current seat.
+ */
+extern SDLSeatMemoryActionType const SDLSeatMemoryActionTypeRestore;
+
+/**
+ * @abstract No action to be performed.
+ */
+extern SDLSeatMemoryActionType const SDLSeatMemoryActionTypeNone;
+
diff --git a/SmartDeviceLink/SDLSeatMemoryActionType.m b/SmartDeviceLink/SDLSeatMemoryActionType.m
new file mode 100644
index 000000000..6e27c1cc2
--- /dev/null
+++ b/SmartDeviceLink/SDLSeatMemoryActionType.m
@@ -0,0 +1,8 @@
+// SDLSeatMemoryActionType.m
+//
+
+#import "SDLSeatMemoryActionType.h"
+
+SDLSeatMemoryActionType const SDLSeatMemoryActionTypeSave = @"SAVE";
+SDLSeatMemoryActionType const SDLSeatMemoryActionTypeRestore = @"RESTORE";
+SDLSeatMemoryActionType const SDLSeatMemoryActionTypeNone = @"NONE";
diff --git a/SmartDeviceLink/SDLSecondaryTransportManager.h b/SmartDeviceLink/SDLSecondaryTransportManager.h
new file mode 100644
index 000000000..0af612d7e
--- /dev/null
+++ b/SmartDeviceLink/SDLSecondaryTransportManager.h
@@ -0,0 +1,80 @@
+//
+// SDLSecondaryTransportManager.h
+// SmartDeviceLink-iOS
+//
+// Created by Sho Amano on 2018/02/28.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import "SDLProtocolListener.h"
+#import "SDLStreamingProtocolDelegate.h"
+
+@class SDLControlFramePayloadRPCStartServiceAck;
+@class SDLControlFramePayloadTransportEventUpdate;
+@class SDLProtocol;
+@class SDLStateMachine;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NSString SDLSecondaryTransportState;
+extern SDLSecondaryTransportState *const SDLSecondaryTransportStateStopped;
+extern SDLSecondaryTransportState *const SDLSecondaryTransportStateStarted;
+extern SDLSecondaryTransportState *const SDLSecondaryTransportStateConfigured;
+extern SDLSecondaryTransportState *const SDLSecondaryTransportStateConnecting;
+extern SDLSecondaryTransportState *const SDLSecondaryTransportStateRegistered;
+extern SDLSecondaryTransportState *const SDLSecondaryTransportStateReconnecting;
+
+/**
+ A class to control and manage secondary transport feature.
+
+ Secondary transport manager does most of the things required for the feature. It listens
+ on the primary transport and receives necessary information through Version Negotiation
+ and TransportEventUpdate control frame. It initiates secondary transport's connection
+ and sets up SDLProtocol that runs on the transport. Then it starts streaming media
+ manager with appropriate SDLProtocol instance. When the secondary transport is
+ disconnected, this manager retries connection with a regular interval.
+ */
+@interface SDLSecondaryTransportManager : NSObject <SDLProtocolListener>
+
+/** 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
+ */
+- (instancetype)initWithStreamingProtocolDelegate:(id<SDLStreamingProtocolDelegate>)streamingProtocolDelegate
+ serialQueue:(dispatch_queue_t)queue;
+
+/**
+ * Start the manager.
+
+ @param primaryProtocol protocol that runs on the main (primary) transport
+ */
+- (void)startWithPrimaryProtocol:(SDLProtocol *)primaryProtocol;
+
+/**
+ * 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;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSecondaryTransportManager.m b/SmartDeviceLink/SDLSecondaryTransportManager.m
new file mode 100644
index 000000000..6f3b95273
--- /dev/null
+++ b/SmartDeviceLink/SDLSecondaryTransportManager.m
@@ -0,0 +1,710 @@
+//
+// SDLSecondaryTransportManager.m
+// SmartDeviceLink
+//
+// Created by Sho Amano on 2018/02/28.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+#import "SDLSecondaryTransportManager.h"
+
+#import "SDLControlFramePayloadConstants.h"
+#import "SDLControlFramePayloadRPCStartServiceAck.h"
+#import "SDLControlFramePayloadTransportEventUpdate.h"
+#import "SDLIAPTransport.h"
+#import "SDLLogMacros.h"
+#import "SDLProtocol.h"
+#import "SDLProtocolHeader.h"
+#import "SDLSecondaryTransportPrimaryProtocolHandler.h"
+#import "SDLStateMachine.h"
+#import "SDLTCPTransport.h"
+#import "SDLTimer.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+// same as SDLProtocol.m
+typedef NSNumber SDLServiceTypeBox;
+
+typedef NS_ENUM(NSInteger, SDLTransportClass) {
+ SDLTransportClassInvalid = 0,
+ SDLTransportClassPrimary = 1,
+ SDLTransportClassSecondary = 2,
+};
+typedef NSNumber SDLTransportClassBox;
+
+typedef NS_ENUM(NSInteger, SDLSecondaryTransportType) {
+ SDLSecondaryTransportTypeDisabled, // only for Secondary Transport
+ SDLSecondaryTransportTypeIAP,
+ SDLSecondaryTransportTypeTCP
+};
+typedef NSNumber SDLSecondaryTransportTypeBox;
+
+SDLSecondaryTransportState *const SDLSecondaryTransportStateStopped = @"Stopped";
+SDLSecondaryTransportState *const SDLSecondaryTransportStateStarted = @"Started";
+SDLSecondaryTransportState *const SDLSecondaryTransportStateConfigured = @"Configured";
+SDLSecondaryTransportState *const SDLSecondaryTransportStateConnecting = @"Connecting";
+SDLSecondaryTransportState *const SDLSecondaryTransportStateRegistered = @"Registered";
+SDLSecondaryTransportState *const SDLSecondaryTransportStateReconnecting = @"Reconnecting";
+
+// Timeout for receiving Register Secondary Transport ACK frame
+static const float RegisterTransportTime = 10.0;
+
+// Delay to retry connection after secondary transport is disconnected or registration is failed
+static const float RetryConnectionDelay = 5.0;
+
+// Indicates that a TCP port is not specified (unconfigured).
+static const int TCPPortUnspecified = -1;
+
+
+@interface SDLSecondaryTransportManager ()
+
+// State of this manager.
+@property (strong, nonatomic, readwrite) 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 (weak, nonatomic) SDLProtocol *primaryProtocol;
+// A class to catch Start Service ACK and Transport Config Update frames.
+@property (strong, nonatomic) SDLSecondaryTransportPrimaryProtocolHandler *primaryProtocolHandler;
+
+// 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<SDLTransportType> secondaryTransport;
+// Instance of the protocol that runs on secondary transport.
+@property (nullable, strong, nonatomic) SDLProtocol *secondaryProtocol;
+// Timer to check Register Secondary Transport ACK response on secondary transport.
+@property (strong, nonatomic, nullable) SDLTimer *registerTransportTimer;
+
+// A delegate to notify protocol change.
+@property (weak, nonatomic) id<SDLStreamingProtocolDelegate> streamingProtocolDelegate;
+
+// Configuration sent by system; list of transports that are allowed to carry audio service
+@property (strong, nonatomic, nonnull) NSArray<SDLTransportClassBox *> *transportsForAudioService;
+// Configuration sent by system; list of transports that are allowed to carry video service
+@property (strong, nonatomic, nonnull) NSArray<SDLTransportClassBox *> *transportsForVideoService;
+// A map to remember which service is currently running on which transport
+@property (strong, nonatomic) NSMutableDictionary<SDLServiceTypeBox *, SDLTransportClassBox *> *streamingServiceTransportMap;
+
+// IP address of SDL Core (either IPv4 or IPv6 address)
+@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;
+
+@end
+
+@implementation SDLSecondaryTransportManager
+
+#pragma mark - Public
+
+- (instancetype)initWithStreamingProtocolDelegate:(id<SDLStreamingProtocolDelegate>)streamingProtocolDelegate
+ serialQueue:(dispatch_queue_t)queue {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ _stateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLSecondaryTransportStateStopped states:[self.class sdl_stateTransitionDictionary]];
+ _stateMachineQueue = queue;
+ _streamingProtocolDelegate = streamingProtocolDelegate;
+
+ _secondaryTransportType = SDLSecondaryTransportTypeDisabled;
+ _transportsForAudioService = @[];
+ _transportsForVideoService = @[];
+ _streamingServiceTransportMap = [@{@(SDLServiceTypeAudio):@(SDLTransportClassInvalid),
+ @(SDLServiceTypeVideo):@(SDLTransportClassInvalid)} mutableCopy];
+ _tcpPort = TCPPortUnspecified;
+
+ return self;
+}
+
+- (void)startWithPrimaryProtocol:(SDLProtocol *)primaryProtocol {
+ SDLLogD(@"SDLSecondaryTransportManager start");
+
+ // this method must be called in SDLLifecycleManager's state machine queue
+ if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(self.stateMachineQueue)) != 0) {
+ SDLLogE(@"startWithPrimaryProtocol: must be called in SDLLifecycleManager's state machine queue!");
+ }
+
+ if (![self.stateMachine isCurrentState:SDLSecondaryTransportStateStopped]) {
+ SDLLogW(@"Secondary transport manager is already started!");
+ return;
+ }
+
+ self.primaryProtocol = primaryProtocol;
+ self.primaryProtocolHandler = [[SDLSecondaryTransportPrimaryProtocolHandler alloc] initWithSecondaryTransportManager:self primaryProtocol:primaryProtocol];
+
+ [self.stateMachine transitionToState:SDLSecondaryTransportStateStarted];
+}
+
+- (void)stop {
+ SDLLogD(@"SDLSecondaryTransportManager stop");
+
+ // this method must be called in SDLLifecycleManager's state machine queue
+ if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(self.stateMachineQueue)) != 0) {
+ SDLLogE(@"stop must be called in SDLLifecycleManager's state machine queue!");
+ }
+
+ // stop all services, including those running on primary transport
+ SDLLogD(@"Stopping audio / video services on both transports");
+ [self sdl_handleTransportUpdateWithPrimaryAvailable:NO secondaryAvailable:NO];
+
+ [self.stateMachine transitionToState:SDLSecondaryTransportStateStopped];
+}
+
+// called from SDLProtocol's _receiveQueue of "primary" transport
+- (void)onStartServiceAckReceived:(SDLControlFramePayloadRPCStartServiceAck *)payload {
+ NSMutableArray<SDLSecondaryTransportTypeBox *> *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<SDLTransportClassBox *> *transportsForAudio = [self sdl_convertServiceTransports:payload.audioServiceTransports];
+ NSArray<SDLTransportClassBox *> *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<SDLState *, SDLAllowableStateTransitions *> *)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.secondaryTransportType == SDLSecondaryTransportTypeIAP) {
+ [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 {
+ __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];
+ }
+ });
+}
+
+- (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 {
+ SDLLogD(@"SDLSecondaryTransportManager stop");
+
+ [[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;
+ self.transportsForAudioService = @[];
+ self.transportsForVideoService = @[];
+
+ self.ipAddress = nil;
+ self.tcpPort = TCPPortUnspecified;
+}
+
+- (void)sdl_configureManager:(nullable NSArray<SDLSecondaryTransportTypeBox *> *)availableSecondaryTransports
+ availableTransportsForAudio:(nullable NSArray<SDLTransportClassBox *> *)availableTransportsForAudio
+ availableTransportsForVideo:(nullable NSArray<SDLTransportClassBox *> *)availableTransportsForVideo {
+ if (![self.stateMachine isCurrentState:SDLSecondaryTransportStateStarted]) {
+ SDLLogW(@"SecondaryTransportManager ignores duplicate Start Service ACK frame");
+ return;
+ }
+
+ // default values
+ self.secondaryTransportType = SDLSecondaryTransportTypeDisabled;
+ self.transportsForAudioService = @[@(SDLTransportClassPrimary)]; // If SDL Core did not send a transport list for the service, start it on Primary Transport.
+ self.transportsForVideoService = @[@(SDLTransportClassPrimary)];
+ BOOL validConfig = YES;
+
+ if (availableSecondaryTransports.count > 0) {
+ // current proposal says the list should contain only one element
+ SDLSecondaryTransportTypeBox *transportType = availableSecondaryTransports[0];
+ self.secondaryTransportType = [transportType integerValue];
+ } else {
+ SDLLogW(@"Did not receive secondary transport type from system. Secondary transport is disabled.");
+ }
+
+ SDLSecondaryTransportType primaryTransportType = [self sdl_getTransportTypeFromProtocol:self.primaryProtocol];
+ if (self.secondaryTransportType == primaryTransportType) {
+ SDLLogW(@"Same transport is specified for both primary and secondary transport. Secondary transport is disabled.");
+ self.secondaryTransportType = SDLSecondaryTransportTypeDisabled;
+ validConfig = NO; // let audio and video services start on primary transport
+ } else if (self.secondaryTransportType == SDLSecondaryTransportTypeIAP) {
+ SDLLogW(@"Starting IAP as secondary transport, which does not usually happen");
+ }
+
+ if (availableTransportsForAudio != nil && validConfig) {
+ self.transportsForAudioService = availableTransportsForAudio;
+ }
+ if (availableTransportsForVideo != nil && validConfig) {
+ self.transportsForVideoService = availableTransportsForVideo;
+ }
+
+ // this will trigger audio / video streaming if they are allowed on primary transport
+ [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:NO];
+
+ [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;
+ }
+
+ if ([self.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured] && [self sdl_isTCPReady]) {
+ [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];
+}
+
+
+#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<SDLTransportClassBox *> *)transportList
+ primaryAvailable:(BOOL)primaryTransportAvailable
+ secondaryAvailable:(BOOL)secondaryTransportAvailable
+ transportUpdatedBlock:(void (^)(SDLProtocol * _Nullable oldProtocol, SDLProtocol * _Nullable newProtocol))transportUpdatedBlock {
+ SDLTransportClass newTransport = SDLTransportClassInvalid;
+ // the list is in preferred order, so take a look from the beginning
+ for (SDLTransportClassBox *transport in transportList) {
+ if ([transport intValue] == SDLTransportClassSecondary && secondaryTransportAvailable) {
+ newTransport = SDLTransportClassSecondary;
+ break;
+ } else if ([transport intValue] == SDLTransportClassPrimary && primaryTransportAvailable) {
+ newTransport = SDLTransportClassPrimary;
+ break;
+ }
+ }
+
+ SDLTransportClass oldTransport = [self.streamingServiceTransportMap[@(service)] intValue];
+
+ // update transport, and notify the change to start/stop/restart service
+ self.streamingServiceTransportMap[@(service)] = @(newTransport);
+
+ if (oldTransport != newTransport) {
+ if (oldTransport != SDLTransportClassInvalid && newTransport != SDLTransportClassInvalid) {
+ SDLLogD(@"Restarting service 0x%X from %@ to %@ transport", service, [self sdl_getTransportClassName:oldTransport], [self sdl_getTransportClassName:newTransport]);
+ } else if (oldTransport != SDLTransportClassInvalid) {
+ SDLLogD(@"Stopping service 0x%X on %@ transport", service, [self sdl_getTransportClassName:oldTransport]);
+ } 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]);
+ }
+}
+
+- (nullable SDLProtocol *)sdl_getProtocolFromTransportClass:(SDLTransportClass)transportClass {
+ switch (transportClass) {
+ case SDLTransportClassPrimary: return self.primaryProtocol;
+ case SDLTransportClassSecondary: return self.secondaryProtocol;
+ default: return nil;
+ }
+}
+
+- (nullable NSString *)sdl_getTransportClassName:(SDLTransportClass)transportClass {
+ switch (transportClass) {
+ case SDLTransportClassPrimary: return @"primary";
+ case SDLTransportClassSecondary: return @"secondary";
+ default: return nil;
+ }
+}
+
+
+#pragma mark - Transport management
+
+// try establishing secondary transport. Returns NO if failed
+- (BOOL)sdl_connectSecondaryTransport {
+ if (self.secondaryTransport != nil) {
+ SDLLogW(@"Attempting to connect secondary transport, but it's already started.");
+ return NO;
+ }
+
+ switch (self.secondaryTransportType) {
+ case SDLSecondaryTransportTypeTCP:
+ return [self sdl_startTCPSecondaryTransport];
+ case SDLSecondaryTransportTypeIAP:
+ return [self sdl_startIAPSecondaryTransport];
+ default:
+ SDLLogW(@"Unknown transport type for secondary transport: %ld", (long)self.secondaryTransportType);
+ return NO;
+ }
+}
+
+- (BOOL)sdl_disconnectSecondaryTransport {
+ if (self.secondaryTransport == nil) {
+ SDLLogW(@"Attempted to disconnect secondary transport, but it's already stopped.");
+ return NO;
+ }
+
+ SDLLogD(@"Disconnect secondary transport");
+ [self.secondaryTransport disconnect];
+ self.secondaryTransport = nil;
+
+ return YES;
+}
+
+- (BOOL)sdl_startTCPSecondaryTransport {
+ if (![self sdl_isTCPReady]) {
+ SDLLogD(@"TCP secondary transport is not ready.");
+ return NO;
+ }
+
+ SDLLogD(@"Starting TCP Secondary Transport (IP address = \"%@\", port = \"%d\")", self.ipAddress, self.tcpPort);
+
+ SDLTCPTransport *transport = [[SDLTCPTransport alloc] init];
+ transport.hostName = self.ipAddress;
+ transport.portNumber = [NSString stringWithFormat:@"%d", self.tcpPort];
+ SDLProtocol *protocol = [[SDLProtocol alloc] init];
+ transport.delegate = protocol;
+ protocol.transport = transport;
+ [protocol.protocolDelegateTable addObject:self];
+
+ self.secondaryProtocol = protocol;
+ self.secondaryTransport = transport;
+
+ // 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];
+ // this is for video and audio services
+ [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeRPC];
+
+ [self.secondaryTransport connect];
+ return YES;
+}
+
+- (BOOL)sdl_startIAPSecondaryTransport {
+ SDLLogD(@"Starting Secondary Transport: iAP");
+
+ SDLIAPTransport *transport = [[SDLIAPTransport alloc] init];
+ SDLProtocol *protocol = [[SDLProtocol alloc] init];
+ transport.delegate = protocol;
+ protocol.transport = transport;
+ [protocol.protocolDelegateTable addObject:self];
+
+ self.secondaryProtocol = protocol;
+ self.secondaryTransport = transport;
+
+ // 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];
+ // this is for video and audio services
+ [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeRPC];
+
+ [self.secondaryTransport connect];
+ return YES;
+}
+
+- (BOOL)sdl_isTCPReady {
+ if ([self.ipAddress length] == 0) {
+ SDLLogD(@"IP address is empty");
+ return NO;
+ }
+ if (self.tcpPort == TCPPortUnspecified) {
+ SDLLogD(@"TCP port number is not available");
+ return NO;
+ }
+ if (!(self.tcpPort > 0 && self.tcpPort <= 65535)) {
+ SDLLogW(@"Invalid TCP port number for secondary transport: %d", self.tcpPort);
+ return NO;
+ }
+
+ if ([self sdl_getAppState] != UIApplicationStateActive) {
+ SDLLogD(@"App state is not Active, abort starting TCP transport");
+ return NO;
+ }
+
+ return YES;
+}
+
+- (UIApplicationState)sdl_getAppState {
+ if ([NSThread isMainThread]) {
+ return [UIApplication sharedApplication].applicationState;
+ } else {
+ __block UIApplicationState appState;
+ dispatch_sync(dispatch_get_main_queue(), ^{
+ appState = [UIApplication sharedApplication].applicationState;
+ });
+ return appState;
+ }
+}
+
+
+#pragma mark - SDLProtocolListener Implementation
+
+// called on transport's thread, notifying that the transport is established
+- (void)onProtocolOpened {
+ SDLLogD(@"Secondary transport connected");
+
+ self.registerTransportTimer = [[SDLTimer alloc] initWithDuration:RegisterTransportTime repeat:NO];
+ __weak typeof(self) weakSelf = self;
+ self.registerTransportTimer.elapsedBlock = ^{
+ SDLLogW(@"Timeout for registration of secondary transport");
+ dispatch_async(weakSelf.stateMachineQueue, ^{
+ __strong typeof(self) strongSelf = weakSelf;
+ if (!strongSelf) {
+ return;
+ }
+
+ // if the state is still Connecting, go back to Configured state and retry immediately
+ if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateConnecting]) {
+ SDLLogD(@"Retry secondary transport connection after registration timeout");
+ [strongSelf.stateMachine transitionToState:SDLSecondaryTransportStateConfigured];
+ }
+ });
+ };
+ [self.registerTransportTimer start];
+
+ [self.secondaryProtocol registerSecondaryTransport];
+}
+
+// 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 {
+ SDLLogD(@"secondary transport disconnected");
+
+ dispatch_async(self.stateMachineQueue, ^{
+ if ([self sdl_isTransportOpened]) {
+ [self.stateMachine transitionToState:SDLSecondaryTransportStateReconnecting];
+ }
+ });
+}
+
+// called from SDLProtocol's _receiveQueue of secondary transport
+- (void)handleProtocolRegisterSecondaryTransportACKMessage:(SDLProtocolMessage *)registerSecondaryTransportACK {
+ SDLLogD(@"Received Register Secondary Transport ACK frame");
+
+ dispatch_async(self.stateMachineQueue, ^{
+ // secondary transport is now ready
+ [self.stateMachine transitionToState:SDLSecondaryTransportStateRegistered];
+ });
+}
+
+// called from SDLProtocol's _receiveQueue of secondary transport
+- (void)handleProtocolRegisterSecondaryTransportNAKMessage:(SDLProtocolMessage *)registerSecondaryTransportNAK {
+ SDLLogW(@"Received Register Secondary Transport NAK frame");
+
+ dispatch_async(self.stateMachineQueue, ^{
+ [self.stateMachine transitionToState:SDLSecondaryTransportStateReconnecting];
+ });
+}
+
+#pragma mark - App state handling
+
+- (void)sdl_onAppStateUpdated:(NSNotification *)notification {
+ dispatch_async(_stateMachineQueue, ^{
+ 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];
+ }
+ } else if (notification.name == UIApplicationDidBecomeActiveNotification) {
+ if (([self.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured])
+ && self.secondaryTransportType == SDLSecondaryTransportTypeTCP && [self sdl_isTCPReady]) {
+ SDLLogD(@"Resuming TCP transport since the app becomes foreground");
+ [self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting];
+ }
+ }
+ });
+}
+
+#pragma mark - Utility methods
+
+- (SDLSecondaryTransportType)sdl_convertTransportType:(NSString *)transportString {
+ if ([transportString isEqualToString:@"TCP_WIFI"]) {
+ return SDLSecondaryTransportTypeTCP;
+ } else if ([transportString isEqualToString:@"IAP_BLUETOOTH"] ||
+ [transportString isEqualToString:@"IAP_USB"] ||
+ [transportString isEqualToString:@"IAP_USB_HOST_MODE"] ||
+ [transportString isEqualToString:@"IAP_USB_DEVICE_MODE"] ||
+ [transportString isEqualToString:@"IAP_CARPLAY"]) {
+ return SDLSecondaryTransportTypeIAP;
+ } else {
+ // "SPP_BLUETOOTH" and "AOA_USB" are not used
+ return SDLSecondaryTransportTypeDisabled;
+ }
+}
+
+- (nullable NSArray<SDLTransportClassBox *> *)sdl_convertServiceTransports:(nullable NSArray<NSNumber *> *)transports {
+ if (transports == nil) {
+ return nil;
+ }
+
+ // Actually there is nothing to "convert" here. We just check the range and recreate an array.
+ NSMutableArray<SDLTransportClassBox *> *array = [[NSMutableArray alloc] init];
+ for (NSNumber *num in transports) {
+ int transport = [num intValue];
+ if (transport == 1) {
+ [array addObject:@(SDLTransportClassPrimary)];
+ } else if (transport == 2) {
+ [array addObject:@(SDLTransportClassSecondary)];
+ } else {
+ SDLLogE(@"Unknown transport class received: %d", transport);
+ }
+ }
+
+ return [array copy];
+}
+
+- (SDLSecondaryTransportType)sdl_getTransportTypeFromProtocol:(SDLProtocol *)protocol {
+ if ([protocol.transport isMemberOfClass:[SDLIAPTransport class]]) {
+ return SDLSecondaryTransportTypeIAP;
+ } else if ([protocol.transport isMemberOfClass:[SDLTCPTransport class]]) {
+ return SDLSecondaryTransportTypeTCP;
+ } else {
+ SDLLogE(@"Unknown type of primary transport");
+ return SDLSecondaryTransportTypeDisabled;
+ }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h b/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h
new file mode 100644
index 000000000..d3e8510ee
--- /dev/null
+++ b/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h
@@ -0,0 +1,46 @@
+//
+// 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 <SDLProtocolListener>
+
+/** 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
new file mode 100644
index 000000000..066a68999
--- /dev/null
+++ b/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m
@@ -0,0 +1,76 @@
+//
+// SDLSecondaryTransportPrimaryProtocolHandler.m
+// SmartDeviceLink
+//
+// Created by Sho Amano on 2018/08/09.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#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/SDLSetDisplayLayout.h b/SmartDeviceLink/SDLSetDisplayLayout.h
index 19bd84f8f..e19c2599c 100644
--- a/SmartDeviceLink/SDLSetDisplayLayout.h
+++ b/SmartDeviceLink/SDLSetDisplayLayout.h
@@ -6,6 +6,8 @@
#import "SDLPredefinedLayout.h"
+@class SDLTemplateColorScheme;
+
/**
* Used to set an alternate display layout. If not sent, default screen for
* given platform will be shown
@@ -21,6 +23,8 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithLayout:(NSString *)displayLayout;
+- (instancetype)initWithPredefinedLayout:(SDLPredefinedLayout)predefinedLayout dayColorScheme:(SDLTemplateColorScheme *)dayColorScheme nightColorScheme:(SDLTemplateColorScheme *)nightColorScheme;
+
/**
* A display layout. Predefined or dynamically created screen layout.
@@ -30,6 +34,20 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (strong, nonatomic) NSString *displayLayout;
+/**
+ 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.
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLTemplateColorScheme *dayColorScheme;
+
+/**
+ 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.
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLTemplateColorScheme *nightColorScheme;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSetDisplayLayout.m b/SmartDeviceLink/SDLSetDisplayLayout.m
index 21c8627f1..ac3736b5b 100644
--- a/SmartDeviceLink/SDLSetDisplayLayout.m
+++ b/SmartDeviceLink/SDLSetDisplayLayout.m
@@ -6,6 +6,7 @@
#import "NSMutableDictionary+Store.h"
#import "SDLNames.h"
+#import "SDLTemplateColorScheme.h"
NS_ASSUME_NONNULL_BEGIN
@@ -32,6 +33,16 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithPredefinedLayout:(SDLPredefinedLayout)predefinedLayout dayColorScheme:(SDLTemplateColorScheme *)dayColorScheme nightColorScheme:(SDLTemplateColorScheme *)nightColorScheme {
+ self = [self initWithPredefinedLayout:predefinedLayout];
+ if (!self) { return nil; }
+
+ self.dayColorScheme = dayColorScheme;
+ self.nightColorScheme = nightColorScheme;
+
+ return self;
+}
+
- (void)setDisplayLayout:(NSString *)displayLayout {
[parameters sdl_setObject:displayLayout forName:SDLNameDisplayLayout];
}
@@ -40,6 +51,22 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameDisplayLayout];
}
+- (void)setDayColorScheme:(nullable SDLTemplateColorScheme *)dayColorScheme {
+ [parameters sdl_setObject:dayColorScheme forName:SDLNameDayColorScheme];
+}
+
+- (nullable SDLTemplateColorScheme *)dayColorScheme {
+ return [parameters sdl_objectForName:SDLNameDayColorScheme ofClass:[SDLTemplateColorScheme class]];
+}
+
+- (void)setNightColorScheme:(nullable SDLTemplateColorScheme *)nightColorScheme {
+ [parameters sdl_setObject:nightColorScheme forName:SDLNameNightColorScheme];
+}
+
+- (nullable SDLTemplateColorScheme *)nightColorScheme {
+ return [parameters sdl_objectForName:SDLNameNightColorScheme ofClass:[SDLTemplateColorScheme class]];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSetMediaClockTimer.h b/SmartDeviceLink/SDLSetMediaClockTimer.h
index bc26a8ed9..db415916f 100644
--- a/SmartDeviceLink/SDLSetMediaClockTimer.h
+++ b/SmartDeviceLink/SDLSetMediaClockTimer.h
@@ -4,6 +4,7 @@
#import "SDLRPCRequest.h"
#import "SDLUpdateMode.h"
+#import "SDLAudioStreamingIndicator.h"
@class SDLStartTime;
@@ -22,6 +23,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLSetMediaClockTimer : SDLRPCRequest
+- (instancetype)initWithUpdateMode:(SDLUpdateMode)updateMode hours:(UInt8)hours minutes:(UInt8)minutes seconds:(UInt8)seconds audioStreamingIndicator:(SDLAudioStreamingIndicator)audioStreamingIndicator;
+
- (instancetype)initWithUpdateMode:(SDLUpdateMode)updateMode hours:(UInt8)hours minutes:(UInt8)minutes seconds:(UInt8)seconds;
- (instancetype)initWithUpdateMode:(SDLUpdateMode)updateMode;
@@ -60,6 +63,16 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (strong, nonatomic) SDLUpdateMode updateMode;
+/**
+ * The audio streaming indicator used for a play/pause button.
+ *
+ * @discussion Set the indicator icon of a play/pause button depending on the
+ * current audio playback. This parameter is optional. If omitted the last indicator sent
+ * will not change.
+ */
+@property (strong, nonatomic, nullable) SDLAudioStreamingIndicator audioStreamingIndicator;
+
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSetMediaClockTimer.m b/SmartDeviceLink/SDLSetMediaClockTimer.m
index 793fd1493..ac14c215e 100644
--- a/SmartDeviceLink/SDLSetMediaClockTimer.m
+++ b/SmartDeviceLink/SDLSetMediaClockTimer.m
@@ -18,6 +18,16 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithUpdateMode:(SDLUpdateMode)updateMode hours:(UInt8)hours minutes:(UInt8)minutes seconds:(UInt8)seconds audioStreamingIndicator:(SDLAudioStreamingIndicator)audioStreamingIndicator {
+ self = [self initWithUpdateMode:updateMode hours:hours minutes:minutes seconds:seconds];
+ if (!self) {
+ return nil;
+ }
+
+ self.audioStreamingIndicator = audioStreamingIndicator;
+
+ return self;
+}
- (instancetype)initWithUpdateMode:(SDLUpdateMode)updateMode hours:(UInt8)hours minutes:(UInt8)minutes seconds:(UInt8)seconds {
self = [self initWithUpdateMode:updateMode];
@@ -65,6 +75,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameUpdateMode];
}
+- (void)setAudioStreamingIndicator:(nullable SDLAudioStreamingIndicator)audioStreamingIndicator {
+ [parameters sdl_setObject:audioStreamingIndicator forName:SDLNameAudioStreamingIndicator];
+}
+
+- (nullable SDLAudioStreamingIndicator)audioStreamingIndicator {
+ return [parameters sdl_objectForName:SDLNameAudioStreamingIndicator];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSingleTireStatus.h b/SmartDeviceLink/SDLSingleTireStatus.h
index 107123e90..9ebe1b32e 100644
--- a/SmartDeviceLink/SDLSingleTireStatus.h
+++ b/SmartDeviceLink/SDLSingleTireStatus.h
@@ -4,6 +4,7 @@
#import "SDLRPCMessage.h"
#import "SDLComponentVolumeStatus.h"
+#import "SDLTPMS.h"
NS_ASSUME_NONNULL_BEGIN
@@ -21,6 +22,20 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (strong, nonatomic) SDLComponentVolumeStatus status;
+/**
+ The status of TPMS for this particular tire
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLTPMS monitoringSystemStatus;
+
+/**
+ The pressure value of this particular tire in kPa (kilopascals)
+
+ Optional, Float, 0-2000
+ */
+@property (copy, nonatomic, nullable) NSNumber<SDLFloat> *pressure;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSingleTireStatus.m b/SmartDeviceLink/SDLSingleTireStatus.m
index a43be45b9..6f88953af 100644
--- a/SmartDeviceLink/SDLSingleTireStatus.m
+++ b/SmartDeviceLink/SDLSingleTireStatus.m
@@ -4,8 +4,11 @@
#import "SDLSingleTireStatus.h"
#import "NSMutableDictionary+Store.h"
+#import "NSNumber+NumberType.h"
#import "SDLNames.h"
+NS_ASSUME_NONNULL_BEGIN
+
@implementation SDLSingleTireStatus
- (void)setStatus:(SDLComponentVolumeStatus)status {
@@ -16,4 +19,22 @@
return [store sdl_objectForName:SDLNameStatus];
}
+- (void)setMonitoringSystemStatus:(nullable SDLTPMS)monitoringSystemStatus {
+ [store sdl_setObject:monitoringSystemStatus forName:SDLNameTPMS];
+}
+
+- (nullable SDLTPMS)monitoringSystemStatus {
+ return [store sdl_objectForName:SDLNameTPMS];
+}
+
+- (void)setPressure:(nullable NSNumber<SDLFloat> *)pressure {
+ [store sdl_setObject:pressure forName:SDLNamePressure];
+}
+
+- (nullable NSNumber<SDLFloat> *)pressure {
+ return [store sdl_objectForName:SDLNamePressure];
+}
+
@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSoftButtonManager.m b/SmartDeviceLink/SDLSoftButtonManager.m
index e3e9278b2..10e61fa1d 100644
--- a/SmartDeviceLink/SDLSoftButtonManager.m
+++ b/SmartDeviceLink/SDLSoftButtonManager.m
@@ -355,6 +355,13 @@ NS_ASSUME_NONNULL_BEGIN
- (void)sdl_registerResponse:(SDLRPCResponseNotification *)notification {
SDLRegisterAppInterfaceResponse *response = (SDLRegisterAppInterfaceResponse *)notification.response;
+
+ if (!response.success.boolValue) { return; }
+ if (response.displayCapabilities == nil) {
+ SDLLogE(@"RegisterAppInterface succeeded but didn't send a display capabilities. A lot of things will probably break.");
+ return;
+ }
+
self.softButtonCapabilities = response.softButtonCapabilities ? response.softButtonCapabilities.firstObject : nil;
self.displayCapabilities = response.displayCapabilities;
}
@@ -362,6 +369,12 @@ NS_ASSUME_NONNULL_BEGIN
- (void)sdl_displayLayoutResponse:(SDLRPCResponseNotification *)notification {
SDLSetDisplayLayoutResponse *response = (SDLSetDisplayLayoutResponse *)notification.response;
+ if (!response.success.boolValue) { return; }
+ if (response.displayCapabilities == nil) {
+ SDLLogE(@"SetDisplayLayout succeeded but didn't send a display capabilities. A lot of things will probably break.");
+ return;
+ }
+
self.softButtonCapabilities = response.softButtonCapabilities ? response.softButtonCapabilities.firstObject : nil;
self.displayCapabilities = response.displayCapabilities;
diff --git a/SmartDeviceLink/SDLSoftButtonState.m b/SmartDeviceLink/SDLSoftButtonState.m
index 38da17151..a150a223a 100644
--- a/SmartDeviceLink/SDLSoftButtonState.m
+++ b/SmartDeviceLink/SDLSoftButtonState.m
@@ -71,7 +71,7 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable SDLImage *)image {
if (self.artwork == nil) { return nil; }
- return [[SDLImage alloc] initWithName:self.artwork.name ofType:SDLImageTypeDynamic];
+ return [[SDLImage alloc] initWithName:self.artwork.name ofType:SDLImageTypeDynamic isTemplate:self.artwork.isTemplate];
}
- (NSString *)description {
diff --git a/SmartDeviceLink/SDLSpeechCapabilities.h b/SmartDeviceLink/SDLSpeechCapabilities.h
index c6ebca70b..6f25deebc 100644
--- a/SmartDeviceLink/SDLSpeechCapabilities.h
+++ b/SmartDeviceLink/SDLSpeechCapabilities.h
@@ -35,3 +35,8 @@ extern SDLSpeechCapabilities const SDLSpeechCapabilitiesPrerecorded;
The SDL platform can speak Silence.
*/
extern SDLSpeechCapabilities const SDLSpeechCapabilitiesSilence;
+
+/**
+ The SDL platform can play a file
+ */
+extern SDLSpeechCapabilities const SDLSpeechCapabilitiesFile;
diff --git a/SmartDeviceLink/SDLSpeechCapabilities.m b/SmartDeviceLink/SDLSpeechCapabilities.m
index 22dceb60a..33a349974 100644
--- a/SmartDeviceLink/SDLSpeechCapabilities.m
+++ b/SmartDeviceLink/SDLSpeechCapabilities.m
@@ -9,3 +9,4 @@ SDLSpeechCapabilities const SDLSpeechCapabilitiesSAPIPhonemes = @"SAPI_PHONEMES"
SDLSpeechCapabilities const SDLSpeechCapabilitiesLHPlusPhonemes = @"LHPLUS_PHONEMES";
SDLSpeechCapabilities const SDLSpeechCapabilitiesPrerecorded = @"PRE_RECORDED";
SDLSpeechCapabilities const SDLSpeechCapabilitiesSilence = @"SILENCE";
+SDLSpeechCapabilities const SDLSpeechCapabilitiesFile = @"FILE";
diff --git a/SmartDeviceLink/SDLStaticIconName.h b/SmartDeviceLink/SDLStaticIconName.h
new file mode 100644
index 000000000..fcda703f1
--- /dev/null
+++ b/SmartDeviceLink/SDLStaticIconName.h
@@ -0,0 +1,900 @@
+//
+// SDLStaticIconName.h
+// SmartDeviceLink
+//
+// Created by Nicole on 7/23/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLEnum.h"
+
+/*
+ * Static icon names
+ */
+typedef SDLEnum SDLStaticIconName SDL_SWIFT_ENUM;
+
+/*
+ * Static icon accept call / active phone call in progress / initiate a phone call
+ */
+extern SDLStaticIconName const SDLStaticIconNameAcceptCall;
+
+/*
+ * Static icon add waypoint
+ */
+extern SDLStaticIconName const SDLStaticIconNameAddWaypoint;
+
+/*
+ * Static icon album
+ */
+extern SDLStaticIconName const SDLStaticIconNameAlbum;
+
+/*
+ * Static icon ambient lighting
+ */
+extern SDLStaticIconName const SDLStaticIconNameAmbientLighting;
+
+/*
+ * Static icon arrow - north
+ */
+extern SDLStaticIconName const SDLStaticIconNameArrowNorth;
+
+/*
+ * Static icon audio mute
+ */
+extern SDLStaticIconName const SDLStaticIconNameAudioMute;
+
+/*
+ * Static icon audiobook episode
+ */
+extern SDLStaticIconName const SDLStaticIconNameAudiobookEpisode;
+
+/*
+ * Static icon audiobook narrator
+ */
+extern SDLStaticIconName const SDLStaticIconNameAudiobookNarrator;
+
+/*
+ * Static icon auxillary audio
+ */
+extern SDLStaticIconName const SDLStaticIconNameAuxillaryAudio;
+
+/*
+ * Static icon back / return
+ */
+extern SDLStaticIconName const SDLStaticIconNameBack;
+
+/*
+ * Static icon battery capacity 0 of 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameBatteryCapacity0Of5;
+
+/*
+ * Static icon battery capacity 1 of 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameBatteryCapacity1Of5;
+
+/*
+ * Static icon battery capacity 2 of 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameBatteryCapacity2Of5;
+
+/*
+ * Static icon battery capacity 3 of 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameBatteryCapacity3Of5;
+
+/*
+ * Static icon battery capacity 4 of 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameBatteryCapacity4Of5;
+
+/*
+ * Static icon battery capacity 5 of 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameBatteryCapacity5Of5;
+
+/*
+ * Static icon bluetooth audio source
+ */
+extern SDLStaticIconName const SDLStaticIconNameBluetoothAudioSource;
+
+/*
+ * Static icon bluetooth1
+ */
+extern SDLStaticIconName const SDLStaticIconNameBluetooth1;
+
+/*
+ * Static icon bluetooth2
+ */
+extern SDLStaticIconName const SDLStaticIconNameBluetooth2;
+
+/*
+ * Static icon browse
+ */
+extern SDLStaticIconName const SDLStaticIconNameBrowse;
+
+/*
+ * Static icon cell phone in roaming mode
+ */
+extern SDLStaticIconName const SDLStaticIconNameCellPhoneInRoamingMode;
+
+/*
+ * Static icon cell service signal strength 0 of 5 bars
+ */
+extern SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength0Of5Bars;
+
+/*
+ * Static icon cell service signal strength 1 of 5 bars
+ */
+extern SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength1Of5Bars;
+
+/*
+ * Static icon cell service signal strength 2 of 5 bars
+ */
+extern SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength2Of5Bars;
+
+/*
+ * Static icon cell service signal strength 3 of 5 bars
+ */
+extern SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength3Of5Bars;
+
+/*
+ * Static icon cell service signal strength 4 of 5 bars
+ */
+extern SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength4Of5Bars;
+
+/*
+ * Static icon cell service signal strength 5 of 5 bars
+ */
+extern SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength5Of5Bars;
+
+/*
+ * Static icon change lane left
+ */
+extern SDLStaticIconName const SDLStaticIconNameChangeLaneLeft;
+
+/*
+ * Static icon change lane right
+ */
+extern SDLStaticIconName const SDLStaticIconNameChangeLaneRight;
+
+/*
+ * Static icon check box checked
+ */
+extern SDLStaticIconName const SDLStaticIconNameCheckBoxChecked;
+
+/*
+ * Static icon check box unchecked
+ */
+extern SDLStaticIconName const SDLStaticIconNameCheckBoxUnchecked;
+
+/*
+ * Static icon climate
+ */
+extern SDLStaticIconName const SDLStaticIconNameClimate;
+
+/*
+ * Static icon clock
+ */
+extern SDLStaticIconName const SDLStaticIconNameClock;
+
+/*
+ * Static icon compose (e.g. message)
+ */
+extern SDLStaticIconName const SDLStaticIconNameCompose;
+
+/*
+ * Static icon contact / person
+ */
+extern SDLStaticIconName const SDLStaticIconNameContact;
+
+/*
+ * Static icon continue
+ */
+extern SDLStaticIconName const SDLStaticIconNameContinue;
+
+/*
+ * Static icon dash / bullet point
+ */
+extern SDLStaticIconName const SDLStaticIconNameDash;
+
+/*
+ * Static icon date / calendar
+ */
+extern SDLStaticIconName const SDLStaticIconNameDate;
+
+/*
+ * Static icon delete/remove - trash
+ */
+extern SDLStaticIconName const SDLStaticIconNameDelete;
+
+/*
+ * Static icon destination
+ */
+extern SDLStaticIconName const SDLStaticIconNameDestination;
+
+/*
+ * Static icon destination ferry ahead
+ */
+extern SDLStaticIconName const SDLStaticIconNameDestinationFerryAhead;
+
+/*
+ * Static icon ebookmark (e.g. message, feed)
+ */
+extern SDLStaticIconName const SDLStaticIconNameEbookmark;
+
+/*
+ * Static icon empty (i.e. no image)
+ */
+extern SDLStaticIconName const SDLStaticIconNameEmpty;
+
+/*
+ * Static icon end call / reject call
+ */
+extern SDLStaticIconName const SDLStaticIconNameEndCall;
+
+/*
+ * Static icon fail / X
+ */
+extern SDLStaticIconName const SDLStaticIconNameFail;
+
+/*
+ * Static icon fast forward 30 secs
+ */
+extern SDLStaticIconName const SDLStaticIconNameFastForward30Secs;
+
+/*
+ * Static icon favorite / heart
+ */
+extern SDLStaticIconName const SDLStaticIconNameFavoriteHeart;
+
+/*
+ * Static icon favorite / star
+ */
+extern SDLStaticIconName const SDLStaticIconNameFavoriteStar;
+
+/*
+ * Static icon fax number
+ */
+extern SDLStaticIconName const SDLStaticIconNameFaxNumber;
+
+/*
+ * Static icon filename
+ */
+extern SDLStaticIconName const SDLStaticIconNameFilename;
+
+/*
+ * Static icon filter / search
+ */
+extern SDLStaticIconName const SDLStaticIconNameFilter;
+
+/*
+ * Static icon folder
+ */
+extern SDLStaticIconName const SDLStaticIconNameFolder;
+
+/*
+ * Static icon fuel prices
+ */
+extern SDLStaticIconName const SDLStaticIconNameFuelPrices;
+
+/*
+ * Static icon full map
+ */
+extern SDLStaticIconName const SDLStaticIconNameFullMap;
+
+/*
+ * Static icon generic phone number
+ */
+extern SDLStaticIconName const SDLStaticIconNameGenericPhoneNumber;
+
+/*
+ * Static icon genre
+ */
+extern SDLStaticIconName const SDLStaticIconNameGenre;
+
+/*
+ * Static icon global keyboard
+ */
+extern SDLStaticIconName const SDLStaticIconNameGlobalKeyboard;
+
+/*
+ * Static icon highway exit information
+ */
+extern SDLStaticIconName const SDLStaticIconNameHighwayExitInformation;
+
+/*
+ * Static icon home phone number
+ */
+extern SDLStaticIconName const SDLStaticIconNameHomePhoneNumber;
+
+/*
+ * Static icon hyperlink
+ */
+extern SDLStaticIconName const SDLStaticIconNameHyperlink;
+
+/*
+ * Static icon ID3 tag unknown
+ */
+extern SDLStaticIconName const SDLStaticIconNameID3TagUnknown;
+
+/*
+ * Static icon incoming calls (in list of phone calls)
+ */
+extern SDLStaticIconName const SDLStaticIconNameIncomingCalls;
+
+/*
+ * Static icon information
+ */
+extern SDLStaticIconName const SDLStaticIconNameInformation;
+
+/*
+ * Static icon IPOD media source
+ */
+extern SDLStaticIconName const SDLStaticIconNameIPodMediaSource;
+
+/*
+ * Static icon join calls
+ */
+extern SDLStaticIconName const SDLStaticIconNameJoinCalls;
+
+/*
+ * Static icon keep left
+ */
+extern SDLStaticIconName const SDLStaticIconNameKeepLeft;
+
+/*
+ * Static icon keep right
+ */
+extern SDLStaticIconName const SDLStaticIconNameKeepRight;
+
+/*
+ * Static icon key / keycode
+ */
+extern SDLStaticIconName const SDLStaticIconNameKey;
+
+/*
+ * Static icon left
+ */
+extern SDLStaticIconName const SDLStaticIconNameLeft;
+
+/*
+ * Static icon left arrow / back
+ */
+extern SDLStaticIconName const SDLStaticIconNameLeftArrow;
+
+/*
+ * Static icon left exit
+ */
+extern SDLStaticIconName const SDLStaticIconNameLeftExit;
+
+/*
+ * Static icon LINE IN audio source
+ */
+extern SDLStaticIconName const SDLStaticIconNameLineInAudioSource;
+
+/*
+ * Static icon locked
+ */
+extern SDLStaticIconName const SDLStaticIconNameLocked;
+
+/*
+ * Static icon media control - left arrow
+ */
+extern SDLStaticIconName const SDLStaticIconNameMediaControlLeftArrow;
+
+/*
+ * Static icon media control - recording
+ */
+extern SDLStaticIconName const SDLStaticIconNameMediaControlRecording;
+
+/*
+ * Static icon media control - right arrow
+ */
+extern SDLStaticIconName const SDLStaticIconNameMediaControlRightArrow;
+
+/*
+ * Static icon media control - stop (e.g. streaming)
+ */
+extern SDLStaticIconName const SDLStaticIconNameMediaControlStop;
+
+/*
+ * Static icon microphone
+ */
+extern SDLStaticIconName const SDLStaticIconNameMicrophone;
+
+/*
+ * Static icon missed calls (in list of phone calls)
+ */
+extern SDLStaticIconName const SDLStaticIconNameMissedCalls;
+
+/*
+ * Static icon mobile phone number
+ */
+extern SDLStaticIconName const SDLStaticIconNameMobilePhoneNumber;
+
+/*
+ * Static icon move down / download
+ */
+extern SDLStaticIconName const SDLStaticIconNameMoveDown;
+
+/*
+ * Static icon move up
+ */
+extern SDLStaticIconName const SDLStaticIconNameMoveUp;
+
+/*
+ * Static icon MP3 tag artist
+ */
+extern SDLStaticIconName const SDLStaticIconNameMP3TagArtist;
+
+/*
+ * Static icon navigation / navigation settings
+ */
+extern SDLStaticIconName const SDLStaticIconNameNavigation;
+
+/*
+ * Static icon navigation current direction
+ */
+extern SDLStaticIconName const SDLStaticIconNameNavigationCurrentDirection;
+
+/*
+ * Static icon negative rating - thumbs down
+ */
+extern SDLStaticIconName const SDLStaticIconNameNegativeRatingThumbsDown;
+
+/*
+ * Static icon new/unread text message/email
+ */
+extern SDLStaticIconName const SDLStaticIconNameNew;
+
+/*
+ * Static icon office phone number / work phone number
+ */
+extern SDLStaticIconName const SDLStaticIconNameOfficePhoneNumber;
+
+/*
+ * Static icon opened/read text message/email
+ */
+extern SDLStaticIconName const SDLStaticIconNameOpened;
+
+/*
+ * Static icon origin / nearby locale / current position
+ */
+extern SDLStaticIconName const SDLStaticIconNameOrigin;
+
+/*
+ * Static icon outgoing calls (in list of phone calls)
+ */
+extern SDLStaticIconName const SDLStaticIconNameOutgoingCalls;
+
+/*
+ * Static icon play / pause - pause active
+ */
+extern SDLStaticIconName const SDLStaticIconNamePause;
+
+/*
+ * Static icon phone call 1
+ */
+extern SDLStaticIconName const SDLStaticIconNamePhoneCall1;
+
+/*
+ * Static icon phone call 2
+ */
+extern SDLStaticIconName const SDLStaticIconNamePhoneCall2;
+
+/*
+ * Static icon phone device
+ */
+extern SDLStaticIconName const SDLStaticIconNamePhoneDevice;
+
+/*
+ * Static icon phonebook
+ */
+extern SDLStaticIconName const SDLStaticIconNamePhonebook;
+
+/*
+ * Static icon photo / picture
+ */
+extern SDLStaticIconName const SDLStaticIconNamePhoto;
+
+/*
+ * Static icon play / pause - play active
+ */
+extern SDLStaticIconName const SDLStaticIconNamePlay;
+
+/*
+ * Static icon playlist
+ */
+extern SDLStaticIconName const SDLStaticIconNamePlaylist;
+
+/*
+ * Static icon pop-up
+ */
+extern SDLStaticIconName const SDLStaticIconNamePopUp;
+
+/*
+ * Static icon positive rating - thumbs up
+ */
+extern SDLStaticIconName const SDLStaticIconNamePositiveRatingThumbsUp;
+
+/*
+ * Static icon power
+ */
+extern SDLStaticIconName const SDLStaticIconNamePower;
+
+/*
+ * Static icon primary phone (favorite)
+ */
+extern SDLStaticIconName const SDLStaticIconNamePrimaryPhone;
+
+/*
+ * Static icon radio button checked
+ */
+extern SDLStaticIconName const SDLStaticIconNameRadioButtonChecked;
+
+/*
+ * Static icon radio button unchecked
+ */
+extern SDLStaticIconName const SDLStaticIconNameRadioButtonUnchecked;
+
+/*
+ * Static icon recent calls / history
+ */
+extern SDLStaticIconName const SDLStaticIconNameRecentCalls;
+
+/*
+ * Static icon recent destinations
+ */
+extern SDLStaticIconName const SDLStaticIconNameRecentDestinations;
+
+/*
+ * Static icon redo
+ */
+extern SDLStaticIconName const SDLStaticIconNameRedo;
+
+/*
+ * Static icon refresh
+ */
+extern SDLStaticIconName const SDLStaticIconNameRefresh;
+
+/*
+ * Static icon remote diagnostics - check engine
+ */
+extern SDLStaticIconName const SDLStaticIconNameRemoteDiagnosticsCheckEngine;
+
+/*
+ * Static icon rendered 911 assist / emergency assistance
+ */
+extern SDLStaticIconName const SDLStaticIconNameRendered911Assist;
+
+/*
+ * Static icon repeat
+ */
+extern SDLStaticIconName const SDLStaticIconNameRepeat;
+
+/*
+ * Static icon repeat play
+ */
+extern SDLStaticIconName const SDLStaticIconNameRepeatPlay;
+
+/*
+ * Static icon reply
+ */
+extern SDLStaticIconName const SDLStaticIconNameReply;
+
+/*
+ * Static icon rewind 30 secs
+ */
+extern SDLStaticIconName const SDLStaticIconNameRewind30Secs;
+
+/*
+ * Static icon right
+ */
+extern SDLStaticIconName const SDLStaticIconNameRight;
+
+/*
+ * Static icon right exit
+ */
+extern SDLStaticIconName const SDLStaticIconNameRightExit;
+
+/*
+ * Static icon ringtones
+ */
+extern SDLStaticIconName const SDLStaticIconNameRingtones;
+
+/*
+ * Static icon roundabout left hand 1
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand1;
+
+/*
+ * Static icon roundabout left hand 2
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand2;
+
+/*
+ * Static icon roundabout left hand 3
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand3;
+
+/*
+ * Static icon roundabout left hand 4
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand4;
+
+/*
+ * Static icon roundabout left hand 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand5;
+
+/*
+ * Static icon roundabout left hand 6
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand6;
+
+/*
+ * Static icon roundabout left hand 7
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand7;
+
+/*
+ * Static icon roundabout right hand 1
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand1;
+
+/*
+ * Static icon roundabout right hand 2
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand2;
+
+/*
+ * Static icon roundabout right hand 3
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand3;
+
+/*
+ * Static icon roundabout right hand 4
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand4;
+
+/*
+ * Static icon roundabout right hand 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand5;
+
+/*
+ * Static icon roundabout right hand 6
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand6;
+
+/*
+ * Static icon roundabout right hand 7
+ */
+extern SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand7;
+
+/*
+ * Static icon RSS
+ */
+extern SDLStaticIconName const SDLStaticIconNameRSS;
+
+/*
+ * Static icon settings / menu
+ */
+extern SDLStaticIconName const SDLStaticIconNameSettings;
+
+/*
+ * Static icon sharp left
+ */
+extern SDLStaticIconName const SDLStaticIconNameSharpLeft;
+
+/*
+ * Static icon sharp right
+ */
+extern SDLStaticIconName const SDLStaticIconNameSharpRight;
+
+/*
+ * Static icon show
+ */
+extern SDLStaticIconName const SDLStaticIconNameShow;
+
+/*
+ * Static icon shuffle play
+ */
+extern SDLStaticIconName const SDLStaticIconNameShufflePlay;
+
+/*
+ * Static icon ski places / elevation / altitude
+ */
+extern SDLStaticIconName const SDLStaticIconNameSkiPlaces;
+
+/*
+ * Static icon slight left
+ */
+extern SDLStaticIconName const SDLStaticIconNameSlightLeft;
+
+/*
+ * Static icon slight right
+ */
+extern SDLStaticIconName const SDLStaticIconNameSlightRight;
+
+/*
+ * Static icon smartphone
+ */
+extern SDLStaticIconName const SDLStaticIconNameSmartphone;
+
+/*
+ * Static icon sort list
+ */
+extern SDLStaticIconName const SDLStaticIconNameSortList;
+
+/*
+ * Static icon speed dial numbers - number 0
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber0;
+
+/*
+ * Static icon speed dial numbers - number 1
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber1;
+
+/*
+ * Static icon speed dial numbers - number 2
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber2;
+
+/*
+ * Static icon speed dial numbers - number 3
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber3;
+
+/*
+ * Static icon speed dial numbers - number 4
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber4;
+
+/*
+ * Static icon speed dial numbers - number 5
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber5;
+
+/*
+ * Static icon speed dial numbers - number 6
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber6;
+
+/*
+ * Static icon speed dial numbers - number 7
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber7;
+
+/*
+ * Static icon speed dial numbers - number 8
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber8;
+
+/*
+ * Static icon speed dial numbers - number 9
+ */
+extern SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber9;
+
+/*
+ * Static icon success / check
+ */
+extern SDLStaticIconName const SDLStaticIconNameSuccess;
+
+/*
+ * Static icon track title / song title
+ */
+extern SDLStaticIconName const SDLStaticIconNameTrackTitle;
+
+/*
+ * Static icon traffic report
+ */
+extern SDLStaticIconName const SDLStaticIconNameTrafficReport;
+
+/*
+ * Static icon turn list
+ */
+extern SDLStaticIconName const SDLStaticIconNameTurnList;
+
+/*
+ * Static icon u-turn left traffic
+ */
+extern SDLStaticIconName const SDLStaticIconNameUTurnLeftTraffic;
+
+/*
+ * Static icon u-turn right traffic
+ */
+extern SDLStaticIconName const SDLStaticIconNameUTurnRightTraffic;
+
+/*
+ * Static icon undo
+ */
+extern SDLStaticIconName const SDLStaticIconNameUndo;
+
+/*
+ * Static icon unlocked
+ */
+extern SDLStaticIconName const SDLStaticIconNameUnlocked;
+
+/*
+ * Static icon USB media audio source
+ */
+extern SDLStaticIconName const SDLStaticIconNameUSBMediaAudioSource;
+
+/*
+ * Static icon voice control scrollbar - list item no. 1
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceControlScrollbarListItemNo1;
+
+/*
+ * Static icon voice control scrollbar - list item no. 2
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceControlScrollbarListItemNo2;
+
+/*
+ * Static icon voice control scrollbar - list item no. 3
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceControlScrollbarListItemNo3;
+
+/*
+ * Static icon voice control scrollbar - list item no. 4
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceControlScrollbarListItemNo4;
+
+/*
+ * Static icon voice recognition - failed
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceRecognitionFailed;
+
+/*
+ * Static icon voice recognition - pause
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceRecognitionPause;
+
+/*
+ * Static icon voice recognition - successful
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceRecognitionSuccessful;
+
+/*
+ * Static icon voice recognition - system active
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceRecognitionSystemActive;
+
+/*
+ * Static icon voice recognition - system listening
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceRecognitionSystemListening;
+
+/*
+ * Static icon voice recognition - try again
+ */
+extern SDLStaticIconName const SDLStaticIconNameVoiceRecognitionTryAgain;
+
+/*
+ * Static icon warning / safety alert
+ */
+extern SDLStaticIconName const SDLStaticIconNameWarning;
+
+/*
+ * Static icon weather
+ */
+extern SDLStaticIconName const SDLStaticIconNameWeather;
+
+/*
+ * Static icon wifi full
+ */
+extern SDLStaticIconName const SDLStaticIconNameWifiFull;
+
+/*
+ * Static icon zoom in
+ */
+extern SDLStaticIconName const SDLStaticIconNameZoomIn;
+
+/*
+ * Static icon zoom out
+ */
+extern SDLStaticIconName const SDLStaticIconNameZoomOut;
+
diff --git a/SmartDeviceLink/SDLStaticIconName.m b/SmartDeviceLink/SDLStaticIconName.m
new file mode 100644
index 000000000..c39ef14f2
--- /dev/null
+++ b/SmartDeviceLink/SDLStaticIconName.m
@@ -0,0 +1,188 @@
+//
+// SDLStaticIconName.m
+// SmartDeviceLink
+//
+// Created by Nicole on 7/23/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLStaticIconName.h"
+
+SDLStaticIconName const SDLStaticIconNameAcceptCall = @"0x29";
+SDLStaticIconName const SDLStaticIconNameAddWaypoint = @"0x1B";
+SDLStaticIconName const SDLStaticIconNameAlbum = @"0x21";
+SDLStaticIconName const SDLStaticIconNameAmbientLighting = @"0x3d";
+SDLStaticIconName const SDLStaticIconNameArrowNorth = @"0x40";
+SDLStaticIconName const SDLStaticIconNameAudioMute = @"0x12";
+SDLStaticIconName const SDLStaticIconNameAudiobookEpisode = @"0x83";
+SDLStaticIconName const SDLStaticIconNameAudiobookNarrator = @"0x82";
+SDLStaticIconName const SDLStaticIconNameAuxillaryAudio = @"0x45";
+SDLStaticIconName const SDLStaticIconNameBack = @"0x86";
+SDLStaticIconName const SDLStaticIconNameBatteryCapacity0Of5 = @"0xF7";
+SDLStaticIconName const SDLStaticIconNameBatteryCapacity1Of5 = @"0xF8";
+SDLStaticIconName const SDLStaticIconNameBatteryCapacity2Of5 = @"0xF9";
+SDLStaticIconName const SDLStaticIconNameBatteryCapacity3Of5 = @"0xFA";
+SDLStaticIconName const SDLStaticIconNameBatteryCapacity4Of5 = @"0xf6";
+SDLStaticIconName const SDLStaticIconNameBatteryCapacity5Of5 = @"0xFB";
+SDLStaticIconName const SDLStaticIconNameBluetoothAudioSource = @"0x09";
+SDLStaticIconName const SDLStaticIconNameBluetooth1 = @"0xcc";
+SDLStaticIconName const SDLStaticIconNameBluetooth2 = @"0xCD";
+SDLStaticIconName const SDLStaticIconNameBrowse = @"0x77";
+SDLStaticIconName const SDLStaticIconNameCellPhoneInRoamingMode = @"0x66";
+SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength0Of5Bars = @"0x67";
+SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength1Of5Bars = @"0x68";
+SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength2Of5Bars = @"0x69";
+SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength3Of5Bars = @"0x6A";
+SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength4Of5Bars = @"0x6B";
+SDLStaticIconName const SDLStaticIconNameCellServiceSignalStrength5Of5Bars = @"0xd3";
+SDLStaticIconName const SDLStaticIconNameChangeLaneLeft = @"0xc3";
+SDLStaticIconName const SDLStaticIconNameChangeLaneRight = @"0xc1";
+SDLStaticIconName const SDLStaticIconNameCheckBoxChecked = @"0x27";
+SDLStaticIconName const SDLStaticIconNameCheckBoxUnchecked = @"0x28";
+SDLStaticIconName const SDLStaticIconNameClimate = @"0xd1";
+SDLStaticIconName const SDLStaticIconNameClock = @"0xfc";
+SDLStaticIconName const SDLStaticIconNameCompose = @"0x1A";
+SDLStaticIconName const SDLStaticIconNameContact = @"0x5C";
+SDLStaticIconName const SDLStaticIconNameContinue = @"0x42";
+SDLStaticIconName const SDLStaticIconNameDash = @"0x7F";
+SDLStaticIconName const SDLStaticIconNameDate = @"0x87";
+SDLStaticIconName const SDLStaticIconNameDelete = @"0x0F";
+SDLStaticIconName const SDLStaticIconNameDestination = @"0x94";
+SDLStaticIconName const SDLStaticIconNameDestinationFerryAhead = @"0x4D";
+SDLStaticIconName const SDLStaticIconNameEbookmark = @"0x2B";
+SDLStaticIconName const SDLStaticIconNameEmpty = @"0x01";
+SDLStaticIconName const SDLStaticIconNameEndCall = @"0x2C";
+SDLStaticIconName const SDLStaticIconNameFail = @"0xD6";
+SDLStaticIconName const SDLStaticIconNameFastForward30Secs = @"0x08";
+SDLStaticIconName const SDLStaticIconNameFavoriteHeart = @"0x0E";
+SDLStaticIconName const SDLStaticIconNameFavoriteStar = @"0x95";
+SDLStaticIconName const SDLStaticIconNameFaxNumber = @"0x80";
+SDLStaticIconName const SDLStaticIconNameFilename = @"0x50";
+SDLStaticIconName const SDLStaticIconNameFilter = @"0x79";
+SDLStaticIconName const SDLStaticIconNameFolder = @"0x1C";
+SDLStaticIconName const SDLStaticIconNameFuelPrices = @"0xe9";
+SDLStaticIconName const SDLStaticIconNameFullMap = @"0x0c";
+SDLStaticIconName const SDLStaticIconNameGenericPhoneNumber = @"0x53";
+SDLStaticIconName const SDLStaticIconNameGenre = @"0x4E";
+SDLStaticIconName const SDLStaticIconNameGlobalKeyboard = @"0xea";
+SDLStaticIconName const SDLStaticIconNameHighwayExitInformation = @"0xf4";
+SDLStaticIconName const SDLStaticIconNameHomePhoneNumber = @"0x55";
+SDLStaticIconName const SDLStaticIconNameHyperlink = @"0x78";
+SDLStaticIconName const SDLStaticIconNameID3TagUnknown = @"0x51";
+SDLStaticIconName const SDLStaticIconNameIncomingCalls = @"0x57";
+SDLStaticIconName const SDLStaticIconNameInformation = @"0x5d";
+SDLStaticIconName const SDLStaticIconNameIPodMediaSource = @"0x0D";
+SDLStaticIconName const SDLStaticIconNameJoinCalls = @"0x02";
+SDLStaticIconName const SDLStaticIconNameKeepLeft = @"0x46";
+SDLStaticIconName const SDLStaticIconNameKeepRight = @"0x48";
+SDLStaticIconName const SDLStaticIconNameKey = @"0x7D";
+SDLStaticIconName const SDLStaticIconNameLeft = @"0x9f";
+SDLStaticIconName const SDLStaticIconNameLeftArrow = @"0x4B";
+SDLStaticIconName const SDLStaticIconNameLeftExit = @"0xaf";
+SDLStaticIconName const SDLStaticIconNameLineInAudioSource = @"0x06";
+SDLStaticIconName const SDLStaticIconNameLocked = @"0x22";
+SDLStaticIconName const SDLStaticIconNameMediaControlLeftArrow = @"0x17";
+SDLStaticIconName const SDLStaticIconNameMediaControlRecording = @"0x20";
+SDLStaticIconName const SDLStaticIconNameMediaControlRightArrow = @"0x15";
+SDLStaticIconName const SDLStaticIconNameMediaControlStop = @"0x16";
+SDLStaticIconName const SDLStaticIconNameMicrophone = @"0xe8";
+SDLStaticIconName const SDLStaticIconNameMissedCalls = @"0x58";
+SDLStaticIconName const SDLStaticIconNameMobilePhoneNumber = @"0x54";
+SDLStaticIconName const SDLStaticIconNameMoveDown = @"0xE5";
+SDLStaticIconName const SDLStaticIconNameMoveUp = @"0xe4";
+SDLStaticIconName const SDLStaticIconNameMP3TagArtist = @"0x24";
+SDLStaticIconName const SDLStaticIconNameNavigation = @"0x8e";
+SDLStaticIconName const SDLStaticIconNameNavigationCurrentDirection = @"0x0a";
+SDLStaticIconName const SDLStaticIconNameNegativeRatingThumbsDown = @"0x14";
+SDLStaticIconName const SDLStaticIconNameNew = @"0x5E";
+SDLStaticIconName const SDLStaticIconNameOfficePhoneNumber = @"0x56";
+SDLStaticIconName const SDLStaticIconNameOpened = @"0x5F";
+SDLStaticIconName const SDLStaticIconNameOrigin = @"0x96";
+SDLStaticIconName const SDLStaticIconNameOutgoingCalls = @"0x59";
+SDLStaticIconName const SDLStaticIconNamePause = @"0xCF";
+SDLStaticIconName const SDLStaticIconNamePhoneCall1 = @"0x1D";
+SDLStaticIconName const SDLStaticIconNamePhoneCall2 = @"0x1E";
+SDLStaticIconName const SDLStaticIconNamePhoneDevice = @"0x03";
+SDLStaticIconName const SDLStaticIconNamePhonebook = @"0x81";
+SDLStaticIconName const SDLStaticIconNamePhoto = @"0x88";
+SDLStaticIconName const SDLStaticIconNamePlay = @"0xD0";
+SDLStaticIconName const SDLStaticIconNamePlaylist = @"0x4F";
+SDLStaticIconName const SDLStaticIconNamePopUp = @"0x76";
+SDLStaticIconName const SDLStaticIconNamePositiveRatingThumbsUp = @"0x13";
+SDLStaticIconName const SDLStaticIconNamePower = @"0x5b";
+SDLStaticIconName const SDLStaticIconNamePrimaryPhone = @"0x1F";
+SDLStaticIconName const SDLStaticIconNameRadioButtonChecked = @"0x25";
+SDLStaticIconName const SDLStaticIconNameRadioButtonUnchecked = @"0x26";
+SDLStaticIconName const SDLStaticIconNameRecentCalls = @"0xe7";
+SDLStaticIconName const SDLStaticIconNameRecentDestinations = @"0xf2";
+SDLStaticIconName const SDLStaticIconNameRedo = @"0x19";
+SDLStaticIconName const SDLStaticIconNameRefresh = @"0x97";
+SDLStaticIconName const SDLStaticIconNameRemoteDiagnosticsCheckEngine = @"0x7E";
+SDLStaticIconName const SDLStaticIconNameRendered911Assist = @"0xac";
+SDLStaticIconName const SDLStaticIconNameRepeat = @"0xe6";
+SDLStaticIconName const SDLStaticIconNameRepeatPlay = @"0x73";
+SDLStaticIconName const SDLStaticIconNameReply = @"0x04";
+SDLStaticIconName const SDLStaticIconNameRewind30Secs = @"0x07";
+SDLStaticIconName const SDLStaticIconNameRight = @"0xa3";
+SDLStaticIconName const SDLStaticIconNameRightExit = @"0xb1";
+SDLStaticIconName const SDLStaticIconNameRingtones = @"0x5A";
+SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand1 = @"0xee";
+SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand2 = @"0x8c";
+SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand3 = @"0x84";
+SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand4 = @"0x72";
+SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand5 = @"0x6e";
+SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand6 = @"0x64";
+SDLStaticIconName const SDLStaticIconNameRoundaboutLeftHand7 = @"0x60";
+SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand1 = @"0x62";
+SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand2 = @"0x6c";
+SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand3 = @"0x70";
+SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand4 = @"0x7a";
+SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand5 = @"0x8a";
+SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand6 = @"0xec";
+SDLStaticIconName const SDLStaticIconNameRoundaboutRightHand7 = @"0xf0";
+SDLStaticIconName const SDLStaticIconNameRSS = @"0x89";
+SDLStaticIconName const SDLStaticIconNameSettings = @"0x49";
+SDLStaticIconName const SDLStaticIconNameSharpLeft = @"0xa5";
+SDLStaticIconName const SDLStaticIconNameSharpRight = @"0xa7";
+SDLStaticIconName const SDLStaticIconNameShow = @"0xe1";
+SDLStaticIconName const SDLStaticIconNameShufflePlay = @"0x74";
+SDLStaticIconName const SDLStaticIconNameSkiPlaces = @"0xab";
+SDLStaticIconName const SDLStaticIconNameSlightLeft = @"0x9d";
+SDLStaticIconName const SDLStaticIconNameSlightRight = @"0xa1";
+SDLStaticIconName const SDLStaticIconNameSmartphone = @"0x05";
+SDLStaticIconName const SDLStaticIconNameSortList = @"0x7B";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber0 = @"0xE0";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber1 = @"0xD7";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber2 = @"0xD8";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber3 = @"0xD9";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber4 = @"0xDA";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber5 = @"0xDB";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber6 = @"0xDC";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber7 = @"0xDD";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber8 = @"0xDE";
+SDLStaticIconName const SDLStaticIconNameSpeedDialNumbersNumber9 = @"0xDF";
+SDLStaticIconName const SDLStaticIconNameSuccess = @"0xD5";
+SDLStaticIconName const SDLStaticIconNameTrackTitle = @"0x4C";
+SDLStaticIconName const SDLStaticIconNameTrafficReport = @"0x2A";
+SDLStaticIconName const SDLStaticIconNameTurnList = @"0x10";
+SDLStaticIconName const SDLStaticIconNameUTurnLeftTraffic = @"0xad";
+SDLStaticIconName const SDLStaticIconNameUTurnRightTraffic = @"0xa9";
+SDLStaticIconName const SDLStaticIconNameUndo = @"0x18";
+SDLStaticIconName const SDLStaticIconNameUnlocked = @"0x23";
+SDLStaticIconName const SDLStaticIconNameUSBMediaAudioSource = @"0x0B";
+SDLStaticIconName const SDLStaticIconNameVoiceControlScrollbarListItemNo1 = @"0xC7";
+SDLStaticIconName const SDLStaticIconNameVoiceControlScrollbarListItemNo2 = @"0xC8";
+SDLStaticIconName const SDLStaticIconNameVoiceControlScrollbarListItemNo3 = @"0xC9";
+SDLStaticIconName const SDLStaticIconNameVoiceControlScrollbarListItemNo4 = @"0xCA";
+SDLStaticIconName const SDLStaticIconNameVoiceRecognitionFailed = @"0x90";
+SDLStaticIconName const SDLStaticIconNameVoiceRecognitionPause = @"0x92";
+SDLStaticIconName const SDLStaticIconNameVoiceRecognitionSuccessful = @"0x8F";
+SDLStaticIconName const SDLStaticIconNameVoiceRecognitionSystemActive = @"0x11";
+SDLStaticIconName const SDLStaticIconNameVoiceRecognitionSystemListening = @"0x91";
+SDLStaticIconName const SDLStaticIconNameVoiceRecognitionTryAgain = @"0x93";
+SDLStaticIconName const SDLStaticIconNameWarning = @"0xfe";
+SDLStaticIconName const SDLStaticIconNameWeather = @"0xeb";
+SDLStaticIconName const SDLStaticIconNameWifiFull = @"0x43";
+SDLStaticIconName const SDLStaticIconNameZoomIn = @"0x98";
+SDLStaticIconName const SDLStaticIconNameZoomOut = @"0x9a";
+
diff --git a/SmartDeviceLink/SDLStationIDNumber.h b/SmartDeviceLink/SDLStationIDNumber.h
new file mode 100644
index 000000000..ffd249347
--- /dev/null
+++ b/SmartDeviceLink/SDLStationIDNumber.h
@@ -0,0 +1,35 @@
+//SDLStationIDNumber.h
+//
+
+#import "SDLRPCMessage.h"
+
+/**
+ * Describes the hour, minute and second values used to set the media clock.
+ *
+ * @since SDL 1.0
+ */
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLStationIDNumber : SDLRPCStruct
+
+- (instancetype)initWithCountryCode:(nullable NSNumber<SDLInt> *)countryCode fccFacilityId:(nullable NSNumber<SDLInt> *)id;
+
+/**
+ * @abstract Binary Representation of ITU Country Code. USA Code is 001.
+ *
+ * Optional, Integer, 0 - 999
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *countryCode;
+
+/**
+ * @abstract Binary representation of unique facility ID assigned by the FCC
+ * FCC controlled for U.S. territory
+ *
+ * Optional, Integer, 0 - 999
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *fccFacilityId;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLStationIDNumber.m b/SmartDeviceLink/SDLStationIDNumber.m
new file mode 100644
index 000000000..db1e6f095
--- /dev/null
+++ b/SmartDeviceLink/SDLStationIDNumber.m
@@ -0,0 +1,43 @@
+// SDLStationIDNumber.m
+//
+
+#import "SDLStationIDNumber.h"
+#import "SDLNames.h"
+#import "NSMutableDictionary+Store.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLStationIDNumber
+
+- (instancetype)initWithCountryCode:(nullable NSNumber<SDLInt> *)countryCode fccFacilityId:(nullable NSNumber<SDLInt> *)id {
+ self = [self init];
+ if(!self) {
+ return nil;
+ }
+
+ self.countryCode = countryCode;
+ self.fccFacilityId = id;
+
+ return self;
+}
+
+- (void)setCountryCode:(nullable NSNumber<SDLInt> *)countryCode {
+ [store sdl_setObject:countryCode forName:SDLNameCountryCode];
+}
+
+- (nullable NSNumber<SDLInt> *)countryCode {
+ return [store sdl_objectForName:SDLNameCountryCode];
+}
+
+
+- (void)setFccFacilityId:(nullable NSNumber<SDLInt> *)fccFacilityId {
+ [store sdl_setObject:fccFacilityId forName:SDLNameFCCFacilityId];
+}
+
+- (nullable NSNumber<SDLInt> *)fccFacilityId {
+ return [store sdl_objectForName:SDLNameFCCFacilityId];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h
new file mode 100644
index 000000000..3b9fdfae3
--- /dev/null
+++ b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h
@@ -0,0 +1,94 @@
+//
+// SDLStreamingAudioLifecycleManager.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/19/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLHMILevel.h"
+#import "SDLProtocolListener.h"
+#import "SDLStreamingAudioManagerType.h"
+#import "SDLStreamingMediaManagerConstants.h"
+
+@class SDLAudioStreamManager;
+@class SDLProtocol;
+@class SDLStateMachine;
+@class SDLStreamingMediaConfiguration;
+
+@protocol SDLConnectionManagerType;
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLStreamingAudioLifecycleManager : NSObject <SDLProtocolListener, SDLStreamingAudioManagerType>
+
+@property (nonatomic, strong, readonly) SDLAudioStreamManager *audioManager;
+
+@property (strong, nonatomic, readonly) SDLStateMachine *audioStreamStateMachine;
+@property (strong, nonatomic, readonly) SDLAudioStreamManagerState *currentAudioStreamState;
+
+@property (strong, nonatomic, readonly) SDLStateMachine *appStateMachine;
+@property (strong, nonatomic, readonly) SDLAppState *currentAppState;
+
+@property (copy, nonatomic, nullable) SDLHMILevel hmiLevel;
+
+/**
+ * Whether or not the audio session is connected.
+ */
+@property (assign, nonatomic, readonly, getter=isAudioConnected) BOOL audioConnected;
+
+/**
+ * Whether or not the audio session is encrypted. This may be different than the requestedEncryptionType.
+ */
+@property (assign, nonatomic, readonly, getter=isAudioEncrypted) BOOL audioEncrypted;
+
+/**
+ * Whether or not video streaming is supported
+ *
+ * @see SDLRegisterAppInterface SDLDisplayCapabilities
+ */
+@property (assign, nonatomic, readonly, getter=isStreamingSupported) BOOL streamingSupported;
+
+/**
+ * The requested encryption type when a session attempts to connect. This setting applies to both video and audio sessions.
+ *
+ * DEFAULT: SDLStreamingEncryptionFlagAuthenticateAndEncrypt
+ */
+@property (assign, nonatomic) SDLStreamingEncryptionFlag requestedEncryptionType;
+
+- (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 The configuration of this streaming media session
+ @return A new streaming manager
+ */
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLStreamingMediaConfiguration *)configuration 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.
+ */
+- (void)stop;
+
+/**
+ * This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback
+ *
+ * @param audioData The data in PCM audio format, to be played
+ *
+ * @return Whether or not the data was successfully sent.
+ */
+- (BOOL)sendAudioData:(NSData *)audioData;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m
new file mode 100644
index 000000000..215962283
--- /dev/null
+++ b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m
@@ -0,0 +1,356 @@
+//
+// SDLStreamingAudioLifecycleManager.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/19/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLStreamingAudioLifecycleManager.h"
+
+#import "SDLAudioStreamManager.h"
+#import "SDLConnectionManagerType.h"
+#import "SDLControlFramePayloadAudioStartServiceAck.h"
+#import "SDLControlFramePayloadConstants.h"
+#import "SDLControlFramePayloadNak.h"
+#import "SDLDisplayCapabilities.h"
+#import "SDLGlobals.h"
+#import "SDLHMICapabilities.h"
+#import "SDLLogMacros.h"
+#import "SDLOnHMIStatus.h"
+#import "SDLProtocol.h"
+#import "SDLProtocolMessage.h"
+#import "SDLRegisterAppInterfaceResponse.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLRPCResponseNotification.h"
+#import "SDLStateMachine.h"
+#import "SDLStreamingMediaConfiguration.h"
+#import "SDLVehicleType.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLStreamingAudioLifecycleManager()
+
+@property (strong, nonatomic, readwrite) SDLStateMachine *appStateMachine;
+@property (strong, nonatomic, readwrite) SDLStateMachine *audioStreamStateMachine;
+@property (assign, nonatomic, readonly, getter=isHmiStateAudioStreamCapable) BOOL hmiStateAudioStreamCapable;
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (weak, nonatomic) SDLProtocol *protocol;
+
+@property (copy, nonatomic) NSArray<NSString *> *secureMakes;
+@property (copy, nonatomic) NSString *connectedVehicleMake;
+
+@end
+
+@implementation SDLStreamingAudioLifecycleManager
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLStreamingMediaConfiguration *)configuration {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ SDLLogV(@"Creating AudioStreamingLifecycleManager");
+
+ _connectionManager = connectionManager;
+
+ _audioManager = [[SDLAudioStreamManager alloc] initWithManager:self];
+
+ _requestedEncryptionType = configuration.maximumDesiredEncryption;
+
+ NSMutableArray<NSString *> *tempMakeArray = [NSMutableArray array];
+ for (Class securityManagerClass in configuration.securityManagers) {
+ [tempMakeArray addObjectsFromArray:[securityManagerClass availableMakes].allObjects];
+ }
+ _secureMakes = [tempMakeArray copy];
+
+ SDLAppState *initialState = SDLAppStateInactive;
+ switch ([[UIApplication sharedApplication] applicationState]) {
+ case UIApplicationStateActive: {
+ initialState = SDLAppStateActive;
+ } break;
+ case UIApplicationStateInactive: // fallthrough
+ case UIApplicationStateBackground: {
+ initialState = SDLAppStateInactive;
+ } break;
+ default: break;
+ }
+
+ _appStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:initialState states:[self.class sdl_appStateTransitionDictionary]];
+ _audioStreamStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLAudioStreamManagerStateStopped states:[self.class sdl_audioStreamingStateTransitionDictionary]];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_didReceiveRegisterAppInterfaceResponse:) name:SDLDidReceiveRegisterAppInterfaceResponse object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiLevelDidChange:) name:SDLDidChangeHMIStatusNotification object:nil];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_appStateDidUpdate:) name:UIApplicationDidBecomeActiveNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_appStateDidUpdate:) name:UIApplicationWillResignActiveNotification object:nil];
+
+ return self;
+}
+
+- (void)startWithProtocol:(SDLProtocol *)protocol {
+ _protocol = protocol;
+
+ @synchronized(self.protocol.protocolDelegateTable) {
+ if (![self.protocol.protocolDelegateTable containsObject:self]) {
+ [self.protocol.protocolDelegateTable addObject:self];
+ }
+ }
+
+ // attempt to start streaming since we may already have necessary conditions met
+ [self sdl_startAudioSession];
+}
+
+- (void)stop {
+ SDLLogD(@"Stopping manager");
+ [self sdl_stopAudioSession];
+
+ self.hmiLevel = SDLHMILevelNone;
+
+ [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped];
+}
+
+- (BOOL)sendAudioData:(NSData*)audioData {
+ if (!self.isAudioConnected) {
+ return NO;
+ }
+
+ SDLLogV(@"Sending raw audio data");
+ if (self.isAudioEncrypted) {
+ [self.protocol sendEncryptedRawData:audioData onService:SDLServiceTypeAudio];
+ } else {
+ [self.protocol sendRawData:audioData withServiceType:SDLServiceTypeAudio];
+ }
+ return YES;
+}
+
+#pragma mark Getters
+
+- (BOOL)isAudioConnected {
+ return [self.audioStreamStateMachine isCurrentState:SDLAudioStreamManagerStateReady];
+}
+
+- (SDLAppState *)currentAppState {
+ return self.appStateMachine.currentState;
+}
+
+- (SDLAudioStreamManagerState *)currentAudioStreamState {
+ return self.audioStreamStateMachine.currentState;
+}
+
+#pragma mark - State Machines
+#pragma mark App State
++ (NSDictionary<SDLState *, SDLAllowableStateTransitions *> *)sdl_appStateTransitionDictionary {
+ return @{
+ // Will go from Inactive to Active if coming from a Phone Call.
+ // Will go from Inactive to IsRegainingActive if coming from Background.
+ SDLAppStateInactive : @[SDLAppStateActive],
+ SDLAppStateActive : @[SDLAppStateInactive]
+ };
+}
+
+- (void)sdl_appStateDidUpdate:(NSNotification*)notification {
+ if (notification.name == UIApplicationWillResignActiveNotification) {
+ [self.appStateMachine transitionToState:SDLAppStateInactive];
+ } else if (notification.name == UIApplicationDidBecomeActiveNotification) {
+ [self.appStateMachine transitionToState:SDLAppStateActive];
+ }
+}
+
+- (void)didEnterStateAppInactive {
+ SDLLogD(@"App became inactive");
+ [self sdl_stopAudioSession];
+}
+
+// Per Apple's guidelines: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StrategiesforHandlingAppStateTransitions/StrategiesforHandlingAppStateTransitions.html
+// We should be waiting to start any OpenGL drawing until UIApplicationDidBecomeActive is called.
+- (void)didEnterStateAppActive {
+ SDLLogD(@"App became active");
+ [self sdl_startAudioSession];
+}
+
+#pragma mark Audio
++ (NSDictionary<SDLState *, SDLAllowableStateTransitions *> *)sdl_audioStreamingStateTransitionDictionary {
+ return @{
+ SDLAudioStreamManagerStateStopped : @[SDLAudioStreamManagerStateStarting],
+ SDLAudioStreamManagerStateStarting : @[SDLAudioStreamManagerStateStopped, SDLAudioStreamManagerStateReady],
+ SDLAudioStreamManagerStateReady : @[SDLAudioStreamManagerStateShuttingDown, SDLAudioStreamManagerStateStopped],
+ SDLAudioStreamManagerStateShuttingDown : @[SDLAudioStreamManagerStateStopped]
+ };
+}
+
+- (void)didEnterStateAudioStreamStopped {
+ SDLLogD(@"Audio stream stopped");
+ _audioEncrypted = NO;
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLAudioStreamDidStopNotification object:nil];
+}
+
+- (void)didEnterStateAudioStreamStarting {
+ SDLLogD(@"Audio stream starting");
+ if ((self.requestedEncryptionType != SDLStreamingEncryptionFlagNone) && ([self.secureMakes containsObject:self.connectedVehicleMake])) {
+ [self.protocol startSecureServiceWithType:SDLServiceTypeAudio payload:nil completionHandler:^(BOOL success, NSError * _Nonnull error) {
+ if (error) {
+ SDLLogE(@"TLS setup error: %@", error);
+ [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped];
+ }
+ }];
+ } else {
+ [self.protocol startServiceWithType:SDLServiceTypeAudio payload:nil];
+ }
+}
+
+- (void)didEnterStateAudioStreamReady {
+ SDLLogD(@"Audio stream ready");
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLAudioStreamDidStartNotification object:nil];
+}
+
+- (void)didEnterStateAudioStreamShuttingDown {
+ SDLLogD(@"Audio stream shutting down");
+ [self.protocol endServiceWithType:SDLServiceTypeAudio];
+}
+
+#pragma mark - SDLProtocolListener
+#pragma mark Video / Audio Start Service ACK
+
+- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
+ switch (startServiceACK.header.serviceType) {
+ case SDLServiceTypeAudio: {
+ [self sdl_handleAudioStartServiceAck:startServiceACK];
+ } break;
+ default: break;
+ }
+}
+
+- (void)sdl_handleAudioStartServiceAck:(SDLProtocolMessage *)audioStartServiceAck {
+ SDLLogD(@"Audio service started");
+ _audioEncrypted = audioStartServiceAck.header.encrypted;
+
+ SDLControlFramePayloadAudioStartServiceAck *audioAckPayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithData:audioStartServiceAck.payload];
+ SDLLogV(@"ACK: %@", audioAckPayload);
+
+ if (audioAckPayload.mtu != SDLControlFrameInt64NotFound) {
+ [[SDLGlobals sharedGlobals] setDynamicMTUSize:(NSUInteger)audioAckPayload.mtu forServiceType:SDLServiceTypeAudio];
+ }
+
+ [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;
+ }
+}
+
+- (void)sdl_handleAudioStartServiceNak:(SDLProtocolMessage *)audioStartServiceNak {
+ SDLLogW(@"Audio service failed to start due to NAK");
+ [self sdl_transitionToStoppedState:SDLServiceTypeAudio];
+}
+
+#pragma mark Video / Audio End Service
+
+- (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK {
+ SDLLogD(@"%@ service ended", (endServiceACK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio"));
+ [self sdl_transitionToStoppedState:endServiceACK.header.serviceType];
+}
+
+- (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK {
+ SDLLogW(@"%@ service ended with end service NAK", (endServiceNAK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio"));
+ [self sdl_transitionToStoppedState:endServiceNAK.header.serviceType];
+}
+
+#pragma mark - SDL RPC Notification callbacks
+
+- (void)sdl_didReceiveRegisterAppInterfaceResponse:(SDLRPCResponseNotification *)notification {
+ NSAssert([notification.response isKindOfClass:[SDLRegisterAppInterfaceResponse class]], @"A notification was sent with an unanticipated object");
+ if (![notification.response isKindOfClass:[SDLRegisterAppInterfaceResponse class]]) {
+ return;
+ }
+
+ SDLLogD(@"Received Register App Interface");
+ SDLRegisterAppInterfaceResponse* registerResponse = (SDLRegisterAppInterfaceResponse*)notification.response;
+
+ SDLLogV(@"Determining whether streaming is supported");
+ _streamingSupported = registerResponse.hmiCapabilities.videoStreaming ? registerResponse.hmiCapabilities.videoStreaming.boolValue : registerResponse.displayCapabilities.graphicSupported.boolValue;
+
+ if (!self.isStreamingSupported) {
+ SDLLogE(@"Graphics are not supported on this head unit. We are are assuming screen size is also unavailable and exiting.");
+ return;
+ }
+
+ self.connectedVehicleMake = registerResponse.vehicleType.make;
+}
+
+- (void)sdl_hmiLevelDidChange:(SDLRPCNotificationNotification *)notification {
+ NSAssert([notification.notification isKindOfClass:[SDLOnHMIStatus class]], @"A notification was sent with an unanticipated object");
+ if (![notification.notification isKindOfClass:[SDLOnHMIStatus class]]) {
+ return;
+ }
+
+ SDLOnHMIStatus *hmiStatus = (SDLOnHMIStatus*)notification.notification;
+ SDLLogD(@"HMI level changed from level %@ to level %@", self.hmiLevel, hmiStatus.hmiLevel);
+ self.hmiLevel = hmiStatus.hmiLevel;
+
+ // if startWithProtocol has not been called yet, abort here
+ if (!self.protocol) { return; }
+
+ if (self.isHmiStateAudioStreamCapable) {
+ [self sdl_startAudioSession];
+ } else {
+ [self sdl_stopAudioSession];
+ }
+}
+
+#pragma mark - Streaming session helpers
+
+- (void)sdl_startAudioSession {
+ SDLLogV(@"Attempting to start audio session");
+ if (!self.protocol) {
+ return;
+ }
+
+ if (!self.isStreamingSupported) {
+ return;
+ }
+
+ if ([self.audioStreamStateMachine isCurrentState:SDLAudioStreamManagerStateStopped] && self.isHmiStateAudioStreamCapable) {
+ [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStarting];
+ }
+}
+
+- (void)sdl_stopAudioSession {
+ SDLLogV(@"Attempting to stop audio session");
+ if (!self.isStreamingSupported) {
+ return;
+ }
+
+ if (self.isAudioConnected) {
+ [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateShuttingDown];
+ }
+}
+
+- (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];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLStreamingMediaManager.h b/SmartDeviceLink/SDLStreamingMediaManager.h
index 9d714ea7e..6be499bec 100644
--- a/SmartDeviceLink/SDLStreamingMediaManager.h
+++ b/SmartDeviceLink/SDLStreamingMediaManager.h
@@ -40,7 +40,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
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.
*/
-@property (nonatomic, strong) UIViewController *rootViewController;
+@property (nonatomic, strong, nullable) UIViewController *rootViewController;
/**
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.
@@ -126,11 +126,31 @@ NS_ASSUME_NONNULL_BEGIN
- (void)startWithProtocol:(SDLProtocol *)protocol;
/**
+ * 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;
+
+/**
* Stop the manager. This method is used internally.
*/
- (void)stop;
/**
+ * Stop the audio feature of the manager. This method is used internally.
+ */
+- (void)stopAudio;
+
+/**
+ * Stop the video feature of the manager. This method is used internally.
+ */
+- (void)stopVideo;
+
+/**
* 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.
*
* @param imageBuffer A CVImageBufferRef to be encoded by Video Toolbox
diff --git a/SmartDeviceLink/SDLStreamingMediaManager.m b/SmartDeviceLink/SDLStreamingMediaManager.m
index ade1165e7..36a26c8ac 100644
--- a/SmartDeviceLink/SDLStreamingMediaManager.m
+++ b/SmartDeviceLink/SDLStreamingMediaManager.m
@@ -12,7 +12,8 @@
#import "SDLConnectionManagerType.h"
#import "SDLStreamingMediaConfiguration.h"
#import "SDLStreamingMediaManagerDataSource.h"
-#import "SDLStreamingMediaLifecycleManager.h"
+#import "SDLStreamingAudioLifecycleManager.h"
+#import "SDLStreamingVideoLifecycleManager.h"
#import "SDLTouchManager.h"
@@ -20,7 +21,10 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLStreamingMediaManager ()
-@property (strong, nonatomic) SDLStreamingMediaLifecycleManager *lifecycleManager;
+@property (strong, nonatomic) SDLStreamingAudioLifecycleManager *audioLifecycleManager;
+@property (strong, nonatomic) SDLStreamingVideoLifecycleManager *videoLifecycleManager;
+@property (assign, nonatomic) BOOL audioStarted;
+@property (assign, nonatomic) BOOL videoStarted;
@end
@@ -36,101 +40,133 @@ NS_ASSUME_NONNULL_BEGIN
return nil;
}
- _lifecycleManager = [[SDLStreamingMediaLifecycleManager alloc] initWithConnectionManager:connectionManager configuration:configuration];
+ _audioLifecycleManager = [[SDLStreamingAudioLifecycleManager alloc] initWithConnectionManager:connectionManager configuration:configuration];
+ _videoLifecycleManager = [[SDLStreamingVideoLifecycleManager alloc] initWithConnectionManager:connectionManager configuration:configuration];
return self;
}
- (void)startWithProtocol:(SDLProtocol *)protocol {
- [self.lifecycleManager startWithProtocol: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;
}
- (void)stop {
- [self.lifecycleManager stop];
+ [self stopAudio];
+ [self stopVideo];
+}
+
+- (void)stopAudio {
+ [self.audioLifecycleManager stop];
+ self.audioStarted = NO;
+}
+
+- (void)stopVideo {
+ [self.videoLifecycleManager stop];
+ self.videoStarted = NO;
}
- (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer {
- return [self.lifecycleManager sendVideoData:imageBuffer];
+ return [self.videoLifecycleManager sendVideoData:imageBuffer];
}
- (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer presentationTimestamp:(CMTime)presentationTimestamp {
- return [self.lifecycleManager sendVideoData:imageBuffer presentationTimestamp:presentationTimestamp];
+ return [self.videoLifecycleManager sendVideoData:imageBuffer presentationTimestamp:presentationTimestamp];
}
- (BOOL)sendAudioData:(NSData*)audioData {
- return [self.lifecycleManager sendAudioData:audioData];
+ return [self.audioLifecycleManager sendAudioData:audioData];
}
#pragma mark - Getters
- (SDLTouchManager *)touchManager {
- return self.lifecycleManager.touchManager;
+ return self.videoLifecycleManager.touchManager;
}
- (SDLAudioStreamManager *)audioManager {
- return self.lifecycleManager.audioManager;
+ return self.audioLifecycleManager.audioManager;
}
-- (UIViewController *)rootViewController {
- return self.lifecycleManager.rootViewController;
+- (nullable UIViewController *)rootViewController {
+ return self.videoLifecycleManager.rootViewController;
}
- (nullable id<SDLFocusableItemLocatorType>)focusableItemManager {
- return self.lifecycleManager.focusableItemManager;
+ return self.videoLifecycleManager.focusableItemManager;
}
- (BOOL)isStreamingSupported {
- return self.lifecycleManager.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;
}
- (BOOL)isAudioConnected {
- return self.lifecycleManager.isAudioConnected;
+ return self.audioLifecycleManager.isAudioConnected;
}
- (BOOL)isVideoConnected {
- return self.lifecycleManager.isVideoConnected;
+ return self.videoLifecycleManager.isVideoConnected;
}
- (BOOL)isAudioEncrypted {
- return self.lifecycleManager.isAudioEncrypted;
+ return self.audioLifecycleManager.isAudioEncrypted;
}
- (BOOL)isVideoEncrypted {
- return self.lifecycleManager.isVideoEncrypted;
+ return self.videoLifecycleManager.isVideoEncrypted;
}
- (BOOL)isVideoStreamingPaused {
- return self.lifecycleManager.isVideoStreamingPaused;
+ return self.videoLifecycleManager.isVideoStreamingPaused;
}
- (CGSize)screenSize {
- return self.lifecycleManager.screenSize;
+ return self.videoLifecycleManager.screenSize;
}
- (nullable SDLVideoStreamingFormat *)videoFormat {
- return self.lifecycleManager.videoFormat;
+ return self.videoLifecycleManager.videoFormat;
}
- (NSArray<SDLVideoStreamingFormat *> *)supportedFormats {
- return self.lifecycleManager.supportedFormats;
+ return self.videoLifecycleManager.supportedFormats;
}
- (CVPixelBufferPoolRef __nullable)pixelBufferPool {
- return self.lifecycleManager.pixelBufferPool;
+ return self.videoLifecycleManager.pixelBufferPool;
}
- (SDLStreamingEncryptionFlag)requestedEncryptionType {
- return self.lifecycleManager.requestedEncryptionType;
+ // both audio and video managers should have same type
+ return self.videoLifecycleManager.requestedEncryptionType;
}
#pragma mark - Setters
-- (void)setRootViewController:(UIViewController *)rootViewController {
- self.lifecycleManager.rootViewController = rootViewController;
+- (void)setRootViewController:(nullable UIViewController *)rootViewController {
+ self.videoLifecycleManager.rootViewController = rootViewController;
}
- (void)setRequestedEncryptionType:(SDLStreamingEncryptionFlag)requestedEncryptionType {
- self.lifecycleManager.requestedEncryptionType = requestedEncryptionType;
+ self.videoLifecycleManager.requestedEncryptionType = requestedEncryptionType;
+ self.audioLifecycleManager.requestedEncryptionType = requestedEncryptionType;
}
@end
diff --git a/SmartDeviceLink/SDLStreamingMediaManagerConstants.h b/SmartDeviceLink/SDLStreamingMediaManagerConstants.h
index acb455ccd..8e0475811 100644
--- a/SmartDeviceLink/SDLStreamingMediaManagerConstants.h
+++ b/SmartDeviceLink/SDLStreamingMediaManagerConstants.h
@@ -37,4 +37,21 @@ extern NSString *const SDLLockScreenManagerDidPresentLockScreenViewController;
extern NSString *const SDLLockScreenManagerWillDismissLockScreenViewController;
extern NSString *const SDLLockScreenManagerDidDismissLockScreenViewController;
+typedef NSString SDLVideoStreamManagerState;
+extern SDLVideoStreamManagerState *const SDLVideoStreamManagerStateStopped;
+extern SDLVideoStreamManagerState *const SDLVideoStreamManagerStateStarting;
+extern SDLVideoStreamManagerState *const SDLVideoStreamManagerStateReady;
+extern SDLVideoStreamManagerState *const SDLVideoStreamManagerStateSuspended;
+extern SDLVideoStreamManagerState *const SDLVideoStreamManagerStateShuttingDown;
+
+typedef NSString SDLAudioStreamManagerState;
+extern SDLAudioStreamManagerState *const SDLAudioStreamManagerStateStopped;
+extern SDLAudioStreamManagerState *const SDLAudioStreamManagerStateStarting;
+extern SDLAudioStreamManagerState *const SDLAudioStreamManagerStateReady;
+extern SDLAudioStreamManagerState *const SDLAudioStreamManagerStateShuttingDown;
+
+typedef NSString SDLAppState;
+extern SDLAppState *const SDLAppStateInactive;
+extern SDLAppState *const SDLAppStateActive;
+
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLStreamingMediaManagerConstants.m b/SmartDeviceLink/SDLStreamingMediaManagerConstants.m
index f80107e25..02dfa6bfa 100644
--- a/SmartDeviceLink/SDLStreamingMediaManagerConstants.m
+++ b/SmartDeviceLink/SDLStreamingMediaManagerConstants.m
@@ -22,3 +22,17 @@ NSString *const SDLLockScreenManagerWillPresentLockScreenViewController = @"com.
NSString *const SDLLockScreenManagerDidPresentLockScreenViewController = @"com.sdl.lockscreen.didPresent";
NSString *const SDLLockScreenManagerWillDismissLockScreenViewController = @"com.sdl.lockscreen.willDismiss";
NSString *const SDLLockScreenManagerDidDismissLockScreenViewController = @"com.sdl.lockscreen.didDismiss";
+
+SDLVideoStreamManagerState *const SDLVideoStreamManagerStateStopped = @"VideoStreamStopped";
+SDLVideoStreamManagerState *const SDLVideoStreamManagerStateStarting = @"VideoStreamStarting";
+SDLVideoStreamManagerState *const SDLVideoStreamManagerStateReady = @"VideoStreamReady";
+SDLVideoStreamManagerState *const SDLVideoStreamManagerStateSuspended = @"VideoStreamSuspended";
+SDLVideoStreamManagerState *const SDLVideoStreamManagerStateShuttingDown = @"VideoStreamShuttingDown";
+
+SDLAudioStreamManagerState *const SDLAudioStreamManagerStateStopped = @"AudioStreamStopped";
+SDLAudioStreamManagerState *const SDLAudioStreamManagerStateStarting = @"AudioStreamStarting";
+SDLAudioStreamManagerState *const SDLAudioStreamManagerStateReady = @"AudioStreamReady";
+SDLAudioStreamManagerState *const SDLAudioStreamManagerStateShuttingDown = @"AudioStreamShuttingDown";
+
+SDLAppState *const SDLAppStateInactive = @"AppInactive";
+SDLAppState *const SDLAppStateActive = @"AppActive";
diff --git a/SmartDeviceLink/SDLStreamingProtocolDelegate.h b/SmartDeviceLink/SDLStreamingProtocolDelegate.h
new file mode 100644
index 000000000..b3ec8f78a
--- /dev/null
+++ b/SmartDeviceLink/SDLStreamingProtocolDelegate.h
@@ -0,0 +1,41 @@
+//
+// SDLStreamingProtocolDelegate.h
+// SmartDeviceLink-iOS
+//
+// Created by Sho Amano on 2018/03/23.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class SDLProtocol;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol SDLStreamingProtocolDelegate <NSObject>
+
+/**
+ * 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;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLStreamingMediaLifecycleManager.h b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h
index 3fc753585..808d86c4b 100644
--- a/SmartDeviceLink/SDLStreamingMediaLifecycleManager.h
+++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h
@@ -1,75 +1,50 @@
//
-// SDLStreamingMediaLifecycleManager.h
-// SmartDeviceLink-iOS
+// SDLStreamingVideoLifecycleManager.h
+// SmartDeviceLink
//
-// Created by Muller, Alexander (A.) on 2/16/17.
-// Copyright © 2017 smartdevicelink. All rights reserved.
+// Created by Joel Fischer on 6/19/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
//
-#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
#import <VideoToolbox/VideoToolbox.h>
-#import "SDLConnectionManagerType.h"
#import "SDLHMILevel.h"
#import "SDLProtocolListener.h"
-#import "SDLStreamingAudioManagerType.h"
#import "SDLStreamingMediaManagerConstants.h"
+#import "SDLVideoStreamingFormat.h"
+#import "SDLVideoStreamingState.h"
-@class SDLAudioStreamManager;
@class SDLCarWindow;
@class SDLImageResolution;
@class SDLProtocol;
@class SDLStateMachine;
@class SDLStreamingMediaConfiguration;
@class SDLTouchManager;
-@class SDLVideoStreamingFormat;
+@protocol SDLConnectionManagerType;
@protocol SDLFocusableItemLocatorType;
@protocol SDLStreamingMediaManagerDataSource;
-NS_ASSUME_NONNULL_BEGIN
-
-typedef NSString SDLAppState;
-extern SDLAppState *const SDLAppStateInactive;
-extern SDLAppState *const SDLAppStateActive;
-
-typedef NSString SDLVideoStreamState;
-extern SDLVideoStreamState *const SDLVideoStreamStateStopped;
-extern SDLVideoStreamState *const SDLVideoStreamStateStarting;
-extern SDLVideoStreamState *const SDLVideoStreamStateReady;
-extern SDLVideoStreamState *const SDLVideoStreamStateSuspended;
-extern SDLVideoStreamState *const SDLVideoStreamStateShuttingDown;
-typedef NSString SDLAudioStreamState;
-extern SDLAudioStreamState *const SDLAudioStreamStateStopped;
-extern SDLAudioStreamState *const SDLAudioStreamStateStarting;
-extern SDLAudioStreamState *const SDLAudioStreamStateReady;
-extern SDLAudioStreamState *const SDLAudioStreamStateShuttingDown;
+NS_ASSUME_NONNULL_BEGIN
-#pragma mark - Interface
-
-@interface SDLStreamingMediaLifecycleManager : NSObject <SDLProtocolListener, SDLStreamingAudioManagerType>
+@interface SDLStreamingVideoLifecycleManager : NSObject <SDLProtocolListener>
-@property (strong, nonatomic, readonly) SDLStateMachine *appStateMachine;
@property (strong, nonatomic, readonly) SDLStateMachine *videoStreamStateMachine;
-@property (strong, nonatomic, readonly) SDLStateMachine *audioStreamStateMachine;
+@property (strong, nonatomic, readonly) SDLVideoStreamManagerState *currentVideoStreamState;
+@property (strong, nonatomic, readonly) SDLStateMachine *appStateMachine;
@property (strong, nonatomic, readonly) SDLAppState *currentAppState;
-@property (strong, nonatomic, readonly) SDLAudioStreamState *currentAudioStreamState;
-@property (strong, nonatomic, readonly) SDLVideoStreamState *currentVideoStreamState;
-
@property (copy, nonatomic, nullable) SDLHMILevel hmiLevel;
-
-@property (assign, nonatomic, readonly, getter=shouldRestartVideoStream) BOOL restartVideoStream __deprecated_msg("This is now unused as the stream doesn't restart anymore. The video stream suspends and resumes if the app changed the state during active video stream");
+@property (copy, nonatomic, nullable) SDLVideoStreamingState videoStreamingState;
/**
* Touch Manager responsible for providing touch event notifications.
*/
@property (nonatomic, strong, readonly) SDLTouchManager *touchManager;
-
-@property (nonatomic, strong, readonly) SDLAudioStreamManager *audioManager;
-@property (nonatomic, strong) UIViewController *rootViewController;
+@property (nonatomic, strong, nullable) UIViewController *rootViewController;
@property (strong, nonatomic, readonly, nullable) SDLCarWindow *carWindow;
/**
@@ -100,16 +75,6 @@ extern SDLAudioStreamState *const SDLAudioStreamStateShuttingDown;
@property (assign, nonatomic, readonly, getter=isVideoEncrypted) BOOL videoEncrypted;
/**
- * Whether or not the audio session is connected.
- */
-@property (assign, nonatomic, readonly, getter=isAudioConnected) BOOL audioConnected;
-
-/**
- * Whether or not the audio session is encrypted. This may be different than the requestedEncryptionType.
- */
-@property (assign, nonatomic, readonly, getter=isAudioEncrypted) BOOL audioEncrypted;
-
-/**
* 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.
*/
@property (assign, nonatomic, readonly, getter=isVideoStreamingPaused) BOOL videoStreamingPaused;
@@ -204,16 +169,6 @@ extern SDLAudioStreamState *const SDLAudioStreamStateShuttingDown;
*/
- (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer presentationTimestamp:(CMTime)presentationTimestamp;
-/**
- * This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback
- *
- * @param audioData The data in PCM audio format, to be played
- *
- * @return Whether or not the data was successfully sent.
- */
-- (BOOL)sendAudioData:(NSData *)audioData;
-
-
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLStreamingMediaLifecycleManager.m b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m
index 55416134d..5302e287d 100644
--- a/SmartDeviceLink/SDLStreamingMediaLifecycleManager.m
+++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m
@@ -1,31 +1,31 @@
//
-// SDLStreamingMediaLifecycleManager.m
-// SmartDeviceLink-iOS
+// SDLStreamingVideoLifecycleManager.m
+// SmartDeviceLink
//
-// Created by Muller, Alexander (A.) on 2/16/17.
-// Copyright © 2017 smartdevicelink. All rights reserved.
+// Created by Joel Fischer on 6/19/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
//
-#import "SDLStreamingMediaLifecycleManager.h"
+#import "SDLStreamingVideoLifecycleManager.h"
-#import "SDLAudioStreamManager.h"
+#import "CVPixelBufferRef+SDLUtil.h"
#import "SDLCarWindow.h"
-#import "SDLControlFramePayloadAudioStartServiceAck.h"
+#import "SDLConnectionManagerType.h"
#import "SDLControlFramePayloadConstants.h"
#import "SDLControlFramePayloadNak.h"
#import "SDLControlFramePayloadVideoStartService.h"
#import "SDLControlFramePayloadVideoStartServiceAck.h"
#import "SDLDisplayCapabilities.h"
+#import "SDLFocusableItemLocator.h"
#import "SDLGenericResponse.h"
#import "SDLGetSystemCapability.h"
#import "SDLGetSystemCapabilityResponse.h"
#import "SDLGlobals.h"
-#import "SDLFocusableItemLocator.h"
#import "SDLH264VideoEncoder.h"
#import "SDLHMICapabilities.h"
+#import "SDLHMILevel.h"
#import "SDLImageResolution.h"
#import "SDLLogMacros.h"
-#import "SDLNotificationConstants.h"
#import "SDLOnHMIStatus.h"
#import "SDLProtocol.h"
#import "SDLProtocolMessage.h"
@@ -39,44 +39,26 @@
#import "SDLSystemCapability.h"
#import "SDLTouchManager.h"
#import "SDLVehicleType.h"
+#import "SDLVideoEncoderDelegate.h"
#import "SDLVideoStreamingCapability.h"
-#import "SDLVideoStreamingCodec.h"
-#import "SDLVideoStreamingFormat.h"
-#import "SDLVideoStreamingProtocol.h"
-
-#import "CVPixelBufferRef+SDLUtil.h"
+static NSUInteger const FramesToSendOnBackground = 30;
NS_ASSUME_NONNULL_BEGIN
-SDLAppState *const SDLAppStateInactive = @"AppInactive";
-SDLAppState *const SDLAppStateActive = @"AppActive";
-
-SDLVideoStreamState *const SDLVideoStreamStateStopped = @"VideoStreamStopped";
-SDLVideoStreamState *const SDLVideoStreamStateStarting = @"VideoStreamStarting";
-SDLVideoStreamState *const SDLVideoStreamStateReady = @"VideoStreamReady";
-SDLVideoStreamState *const SDLVideoStreamStateSuspended = @"VideoStreamSuspended";
-SDLVideoStreamState *const SDLVideoStreamStateShuttingDown = @"VideoStreamShuttingDown";
-
-SDLAudioStreamState *const SDLAudioStreamStateStopped = @"AudioStreamStopped";
-SDLAudioStreamState *const SDLAudioStreamStateStarting = @"AudioStreamStarting";
-SDLAudioStreamState *const SDLAudioStreamStateReady = @"AudioStreamReady";
-SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShuttingDown";
-
-static NSUInteger const FramesToSendOnBackground = 30;
-
typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_Nullable capability);
-
-@interface SDLStreamingMediaLifecycleManager () <SDLVideoEncoderDelegate>
+@interface SDLStreamingVideoLifecycleManager() <SDLVideoEncoderDelegate>
@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
@property (weak, nonatomic) SDLProtocol *protocol;
@property (assign, nonatomic, readonly, getter=isAppStateVideoStreamCapable) BOOL appStateVideoStreamCapable;
-@property (assign, nonatomic, readonly, getter=isHmiStateAudioStreamCapable) BOOL hmiStateAudioStreamCapable;
@property (assign, nonatomic, readonly, getter=isHmiStateVideoStreamCapable) BOOL hmiStateVideoStreamCapable;
+@property (strong, nonatomic, readwrite) SDLStateMachine *videoStreamStateMachine;
+@property (strong, nonatomic, readwrite) SDLStateMachine *appStateMachine;
+
@property (strong, nonatomic, readwrite, nullable) SDLVideoStreamingFormat *videoFormat;
@property (strong, nonatomic, nullable) SDLH264VideoEncoder *videoEncoder;
@@ -84,10 +66,6 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
@property (copy, nonatomic) NSArray<NSString *> *secureMakes;
@property (copy, nonatomic) NSString *connectedVehicleMake;
-@property (strong, nonatomic, readwrite) SDLStateMachine *appStateMachine;
-@property (strong, nonatomic, readwrite) SDLStateMachine *videoStreamStateMachine;
-@property (strong, nonatomic, readwrite) SDLStateMachine *audioStreamStateMachine;
-
@property (assign, nonatomic) CV_NULLABLE CVPixelBufferRef backgroundingPixelBuffer;
@property (strong, nonatomic, nullable) CADisplayLink *displayLink;
@@ -97,11 +75,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
@end
-
-@implementation SDLStreamingMediaLifecycleManager
-
-#pragma mark - Public
-#pragma mark Lifecycle
+@implementation SDLStreamingVideoLifecycleManager
- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLStreamingMediaConfiguration *)configuration {
self = [super init];
@@ -127,7 +101,6 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
_touchManager = [[SDLTouchManager alloc] initWithHitTester:(id)_focusableItemManager];
- _audioManager = [[SDLAudioStreamManager alloc] initWithManager:self];
_requestedEncryptionType = configuration.maximumDesiredEncryption;
_dataSource = configuration.dataSource;
@@ -137,6 +110,9 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
_preferredFormatIndex = 0;
_preferredResolutionIndex = 0;
+ _hmiLevel = SDLHMILevelNone;
+ _videoStreamingState = SDLVideoStreamingStateNotStreamable;
+
NSMutableArray<NSString *> *tempMakeArray = [NSMutableArray array];
for (Class securityManagerClass in configuration.securityManagers) {
[tempMakeArray addObjectsFromArray:[securityManagerClass availableMakes].allObjects];
@@ -156,11 +132,10 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
_appStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:initialState states:[self.class sdl_appStateTransitionDictionary]];
- _videoStreamStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLVideoStreamStateStopped states:[self.class sdl_videoStreamStateTransitionDictionary]];
- _audioStreamStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLAudioStreamStateStopped states:[self.class sdl_audioStreamingStateTransitionDictionary]];
+ _videoStreamStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLVideoStreamManagerStateStopped states:[self.class sdl_videoStreamStateTransitionDictionary]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_didReceiveRegisterAppInterfaceResponse:) name:SDLDidReceiveRegisterAppInterfaceResponse object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiLevelDidChange:) name:SDLDidChangeHMIStatusNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiStatusDidChange:) name:SDLDidChangeHMIStatusNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_appStateDidUpdate:) name:UIApplicationDidBecomeActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_appStateDidUpdate:) name:UIApplicationWillResignActiveNotification object:nil];
@@ -173,20 +148,31 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
- (void)startWithProtocol:(SDLProtocol *)protocol {
_protocol = protocol;
- if (![self.protocol.protocolDelegateTable containsObject:self]) {
- [self.protocol.protocolDelegateTable addObject:self];
+ @synchronized(self.protocol.protocolDelegateTable) {
+ if (![self.protocol.protocolDelegateTable containsObject:self]) {
+ [self.protocol.protocolDelegateTable addObject:self];
+ }
}
+
+ // attempt to start streaming since we may already have necessary conditions met
+ [self sdl_startVideoSession];
}
- (void)stop {
SDLLogD(@"Stopping manager");
- [self sdl_stopAudioSession];
[self sdl_stopVideoSession];
- self.hmiLevel = SDLHMILevelNone;
+ _protocol = nil;
+ _screenSize = SDLDefaultScreenSize;
+ _backgroundingPixelBuffer = NULL;
+ _preferredFormatIndex = 0;
+ _preferredResolutionIndex = 0;
+
+ _hmiLevel = SDLHMILevelNone;
+ _videoStreamingState = SDLVideoStreamingStateNotStreamable;
+ _lastPresentationTimestamp = kCMTimeInvalid;
- [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateStopped];
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateStopped];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
}
- (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer {
@@ -221,31 +207,14 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
return [self.videoEncoder encodeFrame:imageBuffer presentationTimestamp:presentationTimestamp];
}
-- (BOOL)sendAudioData:(NSData*)audioData {
- if (!self.isAudioConnected) {
- return NO;
- }
-
- SDLLogV(@"Sending raw audio data");
- if (self.isAudioEncrypted) {
- [self.protocol sendEncryptedRawData:audioData onService:SDLServiceTypeAudio];
- } else {
- [self.protocol sendRawData:audioData withServiceType:SDLServiceTypeAudio];
- }
- return YES;
-}
-
#pragma mark Getters
-- (BOOL)isAudioConnected {
- return [self.audioStreamStateMachine isCurrentState:SDLAudioStreamStateReady];
-}
- (BOOL)isVideoConnected {
- return [self.videoStreamStateMachine isCurrentState:SDLVideoStreamStateReady];
+ return [self.videoStreamStateMachine isCurrentState:SDLVideoStreamManagerStateReady];
}
- (BOOL)isVideoSuspended {
- return [self.videoStreamStateMachine isCurrentState:SDLVideoStreamStateSuspended];
+ return [self.videoStreamStateMachine isCurrentState:SDLVideoStreamManagerStateSuspended];
}
- (BOOL)isVideoStreamingPaused {
@@ -260,11 +229,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
return self.appStateMachine.currentState;
}
-- (SDLAudioStreamState *)currentAudioStreamState {
- return self.audioStreamStateMachine.currentState;
-}
-
-- (SDLVideoStreamState *)currentVideoStreamState {
+- (SDLVideoStreamManagerState *)currentVideoStreamState {
return self.videoStreamStateMachine.currentState;
}
@@ -295,12 +260,10 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self.touchManager cancelPendingTouches];
if (self.isVideoConnected) {
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateSuspended];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateSuspended];
} else {
[self sdl_stopVideoSession];
}
-
- [self sdl_stopAudioSession];
}
// Per Apple's guidelines: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StrategiesforHandlingAppStateTransitions/StrategiesforHandlingAppStateTransitions.html
@@ -310,22 +273,20 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
if (!self.protocol) { return; }
if (self.isVideoSuspended) {
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateReady];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateReady];
} else {
[self sdl_startVideoSession];
}
-
- [self sdl_startAudioSession];
}
#pragma mark Video Streaming
+ (NSDictionary<SDLState *, SDLAllowableStateTransitions *> *)sdl_videoStreamStateTransitionDictionary {
return @{
- SDLVideoStreamStateStopped : @[SDLVideoStreamStateStarting],
- SDLVideoStreamStateStarting : @[SDLVideoStreamStateStopped, SDLVideoStreamStateReady],
- SDLVideoStreamStateReady : @[SDLVideoStreamStateSuspended, SDLVideoStreamStateShuttingDown, SDLVideoStreamStateStopped],
- SDLVideoStreamStateSuspended : @[SDLVideoStreamStateReady, SDLVideoStreamStateShuttingDown, SDLVideoStreamStateStopped],
- SDLVideoStreamStateShuttingDown : @[SDLVideoStreamStateStopped]
+ SDLVideoStreamManagerStateStopped : @[SDLVideoStreamManagerStateStarting],
+ SDLVideoStreamManagerStateStarting : @[SDLVideoStreamManagerStateStopped, SDLVideoStreamManagerStateReady],
+ SDLVideoStreamManagerStateReady : @[SDLVideoStreamManagerStateSuspended, SDLVideoStreamManagerStateShuttingDown, SDLVideoStreamManagerStateStopped],
+ SDLVideoStreamManagerStateSuspended : @[SDLVideoStreamManagerStateReady, SDLVideoStreamManagerStateShuttingDown, SDLVideoStreamManagerStateStopped],
+ SDLVideoStreamManagerStateShuttingDown : @[SDLVideoStreamManagerStateStopped]
};
}
@@ -399,7 +360,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self.videoEncoder stop];
self.videoEncoder = nil;
}
-
+
if (self.videoEncoder == nil) {
NSError* error = nil;
NSAssert(self.videoFormat != nil, @"No video format is known, but it must be if we got a protocol start service response");
@@ -409,7 +370,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
if (error || self.videoEncoder == nil) {
SDLLogE(@"Could not create a video encoder: %@", error);
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateStopped];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
return;
}
@@ -417,7 +378,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
CVPixelBufferRef backgroundingPixelBuffer = [self.videoEncoder newPixelBuffer];
if (CVPixelBufferAddText(backgroundingPixelBuffer, @"") == NO) {
SDLLogE(@"Could not create a backgrounding frame");
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateStopped];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
return;
}
@@ -448,7 +409,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
- (void)didEnterStateVideoStreamSuspended {
SDLLogD(@"Video stream suspended");
-
+
[[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamSuspendedNotification object:nil];
}
@@ -457,55 +418,11 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self.protocol endServiceWithType:SDLServiceTypeVideo];
}
-#pragma mark Audio
-+ (NSDictionary<SDLState *, SDLAllowableStateTransitions *> *)sdl_audioStreamingStateTransitionDictionary {
- return @{
- SDLAudioStreamStateStopped : @[SDLAudioStreamStateStarting],
- SDLAudioStreamStateStarting : @[SDLAudioStreamStateStopped, SDLAudioStreamStateReady],
- SDLAudioStreamStateReady : @[SDLAudioStreamStateShuttingDown, SDLAudioStreamStateStopped],
- SDLAudioStreamStateShuttingDown : @[SDLAudioStreamStateStopped]
- };
-}
-
-- (void)didEnterStateAudioStreamStopped {
- SDLLogD(@"Audio stream stopped");
- _audioEncrypted = NO;
-
- [[NSNotificationCenter defaultCenter] postNotificationName:SDLAudioStreamDidStopNotification object:nil];
-}
-
-- (void)didEnterStateAudioStreamStarting {
- SDLLogD(@"Audio stream starting");
- if ((self.requestedEncryptionType != SDLStreamingEncryptionFlagNone) && ([self.secureMakes containsObject:self.connectedVehicleMake])) {
- [self.protocol startSecureServiceWithType:SDLServiceTypeAudio payload:nil completionHandler:^(BOOL success, NSError * _Nonnull error) {
- if (error) {
- SDLLogE(@"TLS setup error: %@", error);
- [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateStopped];
- }
- }];
- } else {
- [self.protocol startServiceWithType:SDLServiceTypeAudio payload:nil];
- }
-}
-
-- (void)didEnterStateAudioStreamReady {
- SDLLogD(@"Audio stream ready");
- [[NSNotificationCenter defaultCenter] postNotificationName:SDLAudioStreamDidStartNotification object:nil];
-}
-
-- (void)didEnterStateAudioStreamShuttingDown {
- SDLLogD(@"Audio stream shutting down");
- [self.protocol endServiceWithType:SDLServiceTypeAudio];
-}
-
#pragma mark - SDLProtocolListener
#pragma mark Video / Audio Start Service ACK
- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
switch (startServiceACK.header.serviceType) {
- case SDLServiceTypeAudio: {
- [self sdl_handleAudioStartServiceAck:startServiceACK];
- } break;
case SDLServiceTypeVideo: {
[self sdl_handleVideoStartServiceAck:startServiceACK];
} break;
@@ -513,20 +430,6 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
}
-- (void)sdl_handleAudioStartServiceAck:(SDLProtocolMessage *)audioStartServiceAck {
- SDLLogD(@"Audio service started");
- _audioEncrypted = audioStartServiceAck.header.encrypted;
-
- SDLControlFramePayloadAudioStartServiceAck *audioAckPayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithData:audioStartServiceAck.payload];
- SDLLogV(@"ACK: %@", audioAckPayload);
-
- if (audioAckPayload.mtu != SDLControlFrameInt64NotFound) {
- [[SDLGlobals sharedGlobals] setDynamicMTUSize:(NSUInteger)audioAckPayload.mtu forServiceType:SDLServiceTypeAudio];
- }
-
- [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateReady];
-}
-
- (void)sdl_handleVideoStartServiceAck:(SDLProtocolMessage *)videoStartServiceAck {
SDLLogD(@"Video service started");
_videoEncrypted = videoStartServiceAck.header.encrypted;
@@ -556,16 +459,13 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
self.videoFormat.codec = videoAckPayload.videoCodec ?: SDLVideoStreamingCodecH264;
self.videoFormat.protocol = videoAckPayload.videoProtocol ?: SDLVideoStreamingProtocolRAW;
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateReady];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateReady];
}
#pragma mark Video / Audio Start Service NAK
- (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK {
switch (startServiceNAK.header.serviceType) {
- case SDLServiceTypeAudio: {
- [self sdl_handleAudioStartServiceNak:startServiceNAK];
- } break;
case SDLServiceTypeVideo: {
[self sdl_handleVideoStartServiceNak:startServiceNAK];
}
@@ -598,11 +498,6 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self sdl_sendVideoStartService];
}
-- (void)sdl_handleAudioStartServiceNak:(SDLProtocolMessage *)audioStartServiceNak {
- SDLLogW(@"Audio service failed to start due to NAK");
- [self sdl_transitionToStoppedState:SDLServiceTypeAudio];
-}
-
#pragma mark Video / Audio End Service
- (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK {
@@ -615,22 +510,6 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self sdl_transitionToStoppedState:endServiceNAK.header.serviceType];
}
-#pragma mark - SDLVideoEncoderDelegate
-
-- (void)videoEncoder:(SDLH264VideoEncoder *)encoder hasEncodedFrame:(NSData *)encodedVideo {
- SDLLogV(@"Video encoder encoded frame, sending data");
- // Do we care about app state here? I don't think so…
- BOOL capableVideoStreamState = [self.videoStreamStateMachine isCurrentState:SDLVideoStreamStateReady];
-
- if (self.isHmiStateVideoStreamCapable && capableVideoStreamState) {
- if (self.isVideoEncrypted) {
- [self.protocol sendEncryptedRawData:encodedVideo onService:SDLServiceTypeVideo];
- } else {
- [self.protocol sendRawData:encodedVideo withServiceType:SDLServiceTypeVideo];
- }
- }
-}
-
#pragma mark - SDL RPC Notification callbacks
- (void)sdl_didReceiveRegisterAppInterfaceResponse:(SDLRPCResponseNotification *)notification {
@@ -663,34 +542,59 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
SDLLogD(@"Determined base screen size on display capabilities: %@", NSStringFromCGSize(_screenSize));
}
-- (void)sdl_hmiLevelDidChange:(SDLRPCNotificationNotification *)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]]) {
return;
}
SDLOnHMIStatus *hmiStatus = (SDLOnHMIStatus*)notification.notification;
- SDLLogD(@"HMI level changed from level %@ to level %@", self.hmiLevel, hmiStatus.hmiLevel);
- self.hmiLevel = hmiStatus.hmiLevel;
+
+ if (![self.hmiLevel isEqualToEnum:hmiStatus.hmiLevel]) {
+ SDLLogD(@"HMI level changed from level %@ to level %@", self.hmiLevel, hmiStatus.hmiLevel);
+ self.hmiLevel = hmiStatus.hmiLevel;
+ }
+
+ SDLVideoStreamingState newState = hmiStatus.videoStreamingState ?: SDLVideoStreamingStateStreamable;
+ if (![self.videoStreamingState isEqualToEnum:newState]) {
+ SDLLogD(@"Video streaming state changed from %@ to %@", self.videoStreamingState, hmiStatus.videoStreamingState);
+ self.videoStreamingState = newState;
+ }
+
+ // if startWithProtocol has not been called yet, abort here
+ if (!self.protocol) { return; }
if (self.isHmiStateVideoStreamCapable) {
[self sdl_startVideoSession];
} else {
[self sdl_stopVideoSession];
}
+}
- if (self.isHmiStateAudioStreamCapable) {
- [self sdl_startAudioSession];
- } else {
- [self sdl_stopAudioSession];
+#pragma mark - SDLVideoEncoderDelegate
+
+- (void)videoEncoder:(SDLH264VideoEncoder *)encoder hasEncodedFrame:(NSData *)encodedVideo {
+ SDLLogV(@"Video encoder encoded frame, sending data");
+ // Do we care about app state here? I don't think so…
+ BOOL capableVideoStreamState = [self.videoStreamStateMachine isCurrentState:SDLVideoStreamManagerStateReady];
+
+ if (self.isHmiStateVideoStreamCapable && capableVideoStreamState) {
+ if (self.isVideoEncrypted) {
+ [self.protocol sendEncryptedRawData:encodedVideo onService:SDLServiceTypeVideo];
+ } else {
+ [self.protocol sendRawData:encodedVideo withServiceType:SDLServiceTypeVideo];
+ }
}
}
-
#pragma mark - Streaming session helpers
- (void)sdl_startVideoSession {
SDLLogV(@"Attempting to start video session");
+ if (!self.protocol) {
+ SDLLogV(@"Video manager is not yet started");
+ return;
+ }
if (!self.isHmiStateVideoStreamCapable) {
SDLLogV(@"SDL Core is not ready to stream video. Video start service request will not be sent.");
@@ -702,8 +606,8 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
return;
}
- if ([self.videoStreamStateMachine isCurrentState:SDLVideoStreamStateStopped] && self.isHmiStateVideoStreamCapable) {
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateStarting];
+ if ([self.videoStreamStateMachine isCurrentState:SDLVideoStreamManagerStateStopped] && self.isHmiStateVideoStreamCapable) {
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStarting];
} else {
SDLLogE(@"Unable to send video start service request\n"
"Video State must be in state STOPPED: %@\n"
@@ -712,47 +616,22 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
}
-- (void)sdl_startAudioSession {
- SDLLogV(@"Attempting to start audio session");
- if (!self.isStreamingSupported) {
- return;
- }
-
- if ([self.audioStreamStateMachine isCurrentState:SDLAudioStreamStateStopped]
- && self.isHmiStateAudioStreamCapable) {
- [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateStarting];
- }
-}
-
- (void)sdl_stopVideoSession {
SDLLogV(@"Attempting to stop video session");
if (!self.isStreamingSupported) {
return;
}
- if (self.isVideoConnected || self.isVideoSuspended) {
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateShuttingDown];
- }
-}
-- (void)sdl_stopAudioSession {
- SDLLogV(@"Attempting to stop audio session");
- if (!self.isStreamingSupported) {
- return;
- }
-
- if (self.isAudioConnected) {
- [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateShuttingDown];
+ if (self.isVideoConnected || self.isVideoSuspended) {
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateShuttingDown];
}
}
- (void)sdl_transitionToStoppedState:(SDLServiceType)serviceType {
switch (serviceType) {
- case SDLServiceTypeAudio:
- [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateStopped];
- break;
case SDLServiceTypeVideo:
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateStopped];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
break;
default:
break;
@@ -844,7 +723,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self.protocol startSecureServiceWithType:SDLServiceTypeVideo payload:startVideoPayload.data completionHandler:^(BOOL success, NSError *error) {
if (error) {
SDLLogE(@"TLS setup error: %@", error);
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateStopped];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
}
}];
} else {
@@ -853,10 +732,9 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
}
-
#pragma mark Setters / Getters
-- (void)setRootViewController:(UIViewController *)rootViewController {
+- (void)setRootViewController:(nullable UIViewController *)rootViewController {
if (self.focusableItemManager != nil) {
self.focusableItemManager.viewController = rootViewController;
}
@@ -866,22 +744,27 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
}
-- (BOOL)isAppStateVideoStreamCapable {
- return [self.appStateMachine isCurrentState:SDLAppStateActive];
+- (nullable UIViewController *)rootViewController {
+ if (self.carWindow != nil) {
+ return self.carWindow.rootViewController;
+ } else {
+ return nil;
+ }
}
-- (BOOL)isHmiStateAudioStreamCapable {
- return [self.hmiLevel isEqualToEnum:SDLHMILevelLimited] || [self.hmiLevel isEqualToEnum:SDLHMILevelFull];
+- (BOOL)isAppStateVideoStreamCapable {
+ return [self.appStateMachine isCurrentState:SDLAppStateActive];
}
- (BOOL)isHmiStateVideoStreamCapable {
- return [self.hmiLevel isEqualToEnum:SDLHMILevelLimited] || [self.hmiLevel isEqualToEnum:SDLHMILevelFull];
+ return (![self.videoStreamingState isEqualToEnum:SDLVideoStreamingStateNotStreamable]
+ && ([self.hmiLevel isEqualToEnum:SDLHMILevelLimited] || [self.hmiLevel isEqualToEnum:SDLHMILevelFull]));
}
- (NSArray<SDLVideoStreamingFormat *> *)supportedFormats {
SDLVideoStreamingFormat *h264raw = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRAW];
SDLVideoStreamingFormat *h264rtp = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP];
-
+
return @[h264raw, h264rtp];
}
diff --git a/SmartDeviceLink/SDLSubscribeVehicleData.h b/SmartDeviceLink/SDLSubscribeVehicleData.h
index 4e874d2ab..8549e58e3 100644
--- a/SmartDeviceLink/SDLSubscribeVehicleData.h
+++ b/SmartDeviceLink/SDLSubscribeVehicleData.h
@@ -5,19 +5,14 @@
#import "SDLRPCRequest.h"
/**
- * Subscribes for 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
- * very much dependent on sensors, vehicle architecture and vehicle type. Be
- * also prepared for the situation that a signal is not available on a vehicle
- * <p>
- * Function Group: Location, VehicleInfo and DrivingChara
- * <p>
- * <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b>
- * </p>
+ * 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.
*
- * Since SmartDeviceLink 2.0<br/>
- * See SDLUnsubscribeVehicleData SDLGetVehicleData
+ * @warning A vehicle may only support a subset of the vehicle data items. Be prepared for the situation where a signal is not available on a vehicle.
+ *
+ * Function Group: Location, VehicleInfo and DrivingChara
+ * HMILevel needs to be FULL, LIMITED or BACKGROUND
+ * Since SmartDeviceLink 2.0
+ * See SDLUnsubscribeVehicleData, SDLGetVehicleData
*/
NS_ASSUME_NONNULL_BEGIN
@@ -25,158 +20,212 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLSubscribeVehicleData : SDLRPCRequest
/**
- Initialize a subscribe RPC with various possible to describe to
-
- @param accelerationPedalPosition Subcribe to accelerationPedalPosition
- @param airbagStatus Subcribe to airbagStatus
- @param beltStatus Subcribe to beltStatus
- @param bodyInformation Subcribe to bodyInformation
- @param clusterModeStatus Subcribe to clusterModeStatus
- @param deviceStatus Subcribe to deviceStatus
- @param driverBraking Subcribe to driverBraking
- @param eCallInfo Subcribe to eCallInfo
- @param emergencyEvent Subcribe to v
- @param engineTorque Subcribe to engineTorque
- @param externalTemperature Subcribe to externalTemperature
- @param fuelLevel Subcribe to fuelLevel
- @param fuelLevelState Subcribe to fuelLevelState
- @param gps Subcribe to gps
- @param headLampStatus Subcribe to headLampStatus
- @param instantFuelConsumption Subcribe to instantFuelConsumption
- @param myKey Subcribe to myKey
- @param odometer Subcribe to odometer
- @param prndl Subcribe to prndl
- @param rpm Subcribe to rpm
- @param speed Subcribe to speed
- @param steeringWheelAngle Subcribe to steeringWheelAngle
- @param tirePressure Subcribe to tirePressure
- @param wiperStatus Subcribe to wiperStatus
- @return The RPC
- */
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus;
-
-/**
- * A boolean value. If true, subscribes Gps data
+ * Convenience init for subscribing to all possible vehicle data items.
+ *
+ * @param accelerationPedalPosition Subscribe to accelerationPedalPosition
+ * @param airbagStatus Subscribe to airbagStatus
+ * @param beltStatus Subscribe to beltStatus
+ * @param bodyInformation Subscribe to bodyInformation
+ * @param clusterModeStatus Subscribe to clusterModeStatus
+ * @param deviceStatus Subscribe to deviceStatus
+ * @param driverBraking Subscribe to driverBraking
+ * @param eCallInfo Subscribe to eCallInfo
+ * @param emergencyEvent Subscribe to emergencyEvent
+ * @param engineTorque Subscribe to engineTorque
+ * @param externalTemperature Subscribe to externalTemperature
+ * @param fuelLevel Subscribe to fuelLevel
+ * @param fuelLevelState Subscribe to fuelLevelState
+ * @param gps Subscribe to gps
+ * @param headLampStatus Subscribe to headLampStatus
+ * @param instantFuelConsumption Subscribe to instantFuelConsumption
+ * @param myKey Subscribe to myKey
+ * @param odometer Subscribe to odometer
+ * @param prndl Subscribe to prndl
+ * @param rpm Subscribe to rpm
+ * @param speed Subscribe to speed
+ * @param steeringWheelAngle Subscribe to steeringWheelAngle
+ * @param tirePressure Subscribe to tirePressure
+ * @param wiperStatus Subscribe to wiperStatus
+ * @return A SDLSubscribeVehicleData object
+ */
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use 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: instead");
+
+/**
+ * Convenience init for subscribing to all possible vehicle data items.
+ *
+ * @param accelerationPedalPosition Subscribe to accelerationPedalPosition
+ * @param airbagStatus Subscribe to airbagStatus
+ * @param beltStatus Subscribe to beltStatus
+ * @param bodyInformation Subscribe to bodyInformation
+ * @param clusterModeStatus Subscribe to clusterModeStatus
+ * @param deviceStatus Subscribe to deviceStatus
+ * @param driverBraking Subscribe to driverBraking
+ * @param eCallInfo Subscribe to eCallInfo
+ * @param electronicParkBrakeStatus Subscribe to electronicParkBrakeStatus
+ * @param emergencyEvent Subscribe to emergencyEvent
+ * @param engineOilLife Subscribe to engineOilLife
+ * @param engineTorque Subscribe to engineTorque
+ * @param externalTemperature Subscribe to externalTemperature
+ * @param fuelLevel Subscribe to fuelLevel
+ * @param fuelLevelState Subscribe to fuelLevelState
+ * @param fuelRange Subscribe to fuelRange
+ * @param gps Subscribe to gps
+ * @param headLampStatus Subscribe to headLampStatus
+ * @param instantFuelConsumption Subscribe to instantFuelConsumption
+ * @param myKey Subscribe to myKey
+ * @param odometer Subscribe to odometer
+ * @param prndl Subscribe to prndl
+ * @param rpm Subscribe to rpm
+ * @param speed Subscribe to speed
+ * @param steeringWheelAngle Subscribe to steeringWheelAngle
+ * @param tirePressure Subscribe to tirePressure
+ * @param turnSignal Subscribe to turnSignal
+ * @param wiperStatus Subscribe to wiperStatus
+ * @return A SDLSubscribeVehicleData object
+ */
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus;
+
+/**
+ * A boolean value. If true, subscribes GPS data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *gps;
/**
- * A boolean value. If true, subscribes speed data
+ * A boolean value. If true, subscribes Speed data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *speed;
/**
- * A boolean value. If true, subscribes rpm data
+ * A boolean value. If true, subscribes RPM data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *rpm;
/**
- * A boolean value. If true, subscribes FuelLevel data
+ * A boolean value. If true, subscribes Fuel Level data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel;
/**
- * A boolean value. If true, subscribes fuelLevel_State data
+ * A boolean value. If true, subscribes Fuel Level State data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel_State;
/**
- * A boolean value. If true, subscribes instantFuelConsumption data
+ * A boolean value. If true, subscribes Fuel Range data.
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelRange;
+
+/**
+ * A boolean value. If true, subscribes Instant Fuel Consumption data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *instantFuelConsumption;
/**
- * A boolean value. If true, subscribes externalTemperature data
+ * A boolean value. If true, subscribes External Temperature data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *externalTemperature;
/**
- * A boolean value. If true, subscribes Currently selected gear data
+ * A boolean value. If true, subscribes PRNDL data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *prndl;
/**
- * A boolean value. If true, subscribes tire pressure status data
+ * A boolean value. If true, subscribes Tire Pressure status data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *tirePressure;
/**
- * A boolean value. If true, subscribes odometer data
+ * A boolean value. If true, subscribes Odometer data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *odometer;
/**
- * A boolean value. If true, subscribes belt Status data
+ * A boolean value. If true, subscribes Belt Status data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *beltStatus;
/**
- * A boolean value. If true, subscribes body Information data
+ * A boolean value. If true, subscribes Body Information data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *bodyInformation;
/**
- * A boolean value. If true, subscribes device Status data
+ * A boolean value. If true, subscribes Device Status data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *deviceStatus;
/**
- * A boolean value. If true, subscribes driver Braking data
+ * A boolean value. If true, subscribes Driver Braking data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *driverBraking;
/**
- * A boolean value. If true, subscribes wiper Status data
+ * A boolean value. If true, subscribes Wiper Status data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *wiperStatus;
/**
- * A boolean value. If true, subscribes Head Lamp Status data
+ * A boolean value. If true, subscribes Head Lamp Status data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *headLampStatus;
/**
- * A boolean value. If true, subscribes Engine Torque data
+ * A boolean value. If true, subscribes to Engine Oil Life data.
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *engineOilLife;
+
+/**
+ * A boolean value. If true, subscribes Engine Torque data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *engineTorque;
/**
- * A boolean value. If true, means the accPedalPosition data has been
- * subscribed.
+ * A boolean value. If true, subscribes Acc Pedal Position data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *accPedalPosition;
/**
- * A boolean value. If true, means the steeringWheelAngle data has been
- * subscribed.
+ * A boolean value. If true, subscribes Steering Wheel Angle data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *steeringWheelAngle;
/**
- Subscribe to eCallInfo
+ * A boolean value. If true, subscribes eCall Info data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *eCallInfo;
/**
- Subscribe to airbagStatus
+ * A boolean value. If true, subscribes Airbag Status data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *airbagStatus;
/**
- Subscribe to emergencyEvent
+ * A boolean value. If true, subscribes Emergency Event data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *emergencyEvent;
/**
- Subscribe to clusterModeStatus
+ * A boolean value. If true, subscribes Cluster Mode Status data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *clusterModeStatus;
/**
- Subscribe to myKey
+ * A boolean value. If true, subscribes myKey data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *myKey;
+/**
+ * A boolean value. If true, subscribes to the electronic parking brake status.
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *electronicParkBrakeStatus;
+
+/**
+ * A boolean value. If true, subscribes to the turn signal status.
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *turnSignal;
+
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSubscribeVehicleData.m b/SmartDeviceLink/SDLSubscribeVehicleData.m
index d8973045e..013496525 100644
--- a/SmartDeviceLink/SDLSubscribeVehicleData.m
+++ b/SmartDeviceLink/SDLSubscribeVehicleData.m
@@ -18,6 +18,10 @@ NS_ASSUME_NONNULL_BEGIN
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus {
+ return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:NO emergencyEvent:emergencyEvent engineOilLife:NO engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:NO gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:NO wiperStatus:wiperStatus];
+}
+
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus {
self = [self init];
if (!self) {
return nil;
@@ -31,11 +35,14 @@ NS_ASSUME_NONNULL_BEGIN
self.deviceStatus = @(deviceStatus);
self.driverBraking = @(driverBraking);
self.eCallInfo = @(eCallInfo);
+ self.electronicParkBrakeStatus = @(electronicParkBrakeStatus);
self.emergencyEvent = @(emergencyEvent);
+ self.engineOilLife = @(engineOilLife);
self.engineTorque = @(engineTorque);
self.externalTemperature = @(externalTemperature);
self.fuelLevel = @(fuelLevel);
self.fuelLevel_State = @(fuelLevelState);
+ self.fuelRange = @(fuelRange);
self.myKey = @(myKey);
self.odometer = @(odometer);
self.gps = @(gps);
@@ -46,6 +53,7 @@ NS_ASSUME_NONNULL_BEGIN
self.speed = @(speed);
self.steeringWheelAngle = @(steeringWheelAngle);
self.tirePressure = @(tirePressure);
+ self.turnSignal = @(turnSignal);
self.wiperStatus = @(wiperStatus);
return self;
@@ -91,6 +99,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameFuelLevelState];
}
+- (void)setFuelRange:(nullable NSNumber<SDLBool> *)fuelRange {
+ [parameters sdl_setObject:fuelRange forName:SDLNameFuelRange];
+}
+
+- (nullable NSNumber<SDLBool> *)fuelRange {
+ return [parameters sdl_objectForName:SDLNameFuelRange];
+}
+
- (void)setInstantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption {
[parameters sdl_setObject:instantFuelConsumption forName:SDLNameInstantFuelConsumption];
}
@@ -179,6 +195,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameHeadLampStatus];
}
+- (void)setEngineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife {
+ [parameters sdl_setObject:engineOilLife forName:SDLNameEngineOilLife];
+}
+
+- (nullable NSNumber<SDLBool> *)engineOilLife {
+ return [parameters sdl_objectForName:SDLNameEngineOilLife];
+}
+
- (void)setEngineTorque:(nullable NSNumber<SDLBool> *)engineTorque {
[parameters sdl_setObject:engineTorque forName:SDLNameEngineTorque];
}
@@ -243,6 +267,21 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameMyKey];
}
+- (void)setElectronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus {
+ [parameters sdl_setObject:electronicParkBrakeStatus forName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (nullable NSNumber<SDLBool> *)electronicParkBrakeStatus {
+ return [parameters sdl_objectForName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (void)setTurnSignal:(nullable NSNumber<SDLBool> *)turnSignal {
+ [parameters sdl_setObject:turnSignal forName:SDLNameTurnSignal];
+}
+
+- (nullable NSNumber<SDLBool> *)turnSignal {
+ return [parameters sdl_objectForName:SDLNameTurnSignal];
+}
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h
index ec886fb82..1cc10c6b3 100644
--- a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h
+++ b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h
@@ -52,6 +52,13 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel_State;
/**
+ The result of requesting to subscribe to the fuel range.
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelRange;
+
+/**
The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.
Optional
@@ -129,6 +136,13 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic, nullable) SDLVehicleDataResult *headLampStatus;
/**
+ The result of requesting to subscribe to the estimated percentage of remaining oil life of the engine.
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *engineOilLife;
+
+/**
The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.
Optional
@@ -184,6 +198,20 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *myKey;
+/**
+ The result of requesting to subscribe to the electronic parking brake status
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *electronicParkBrakeStatus;
+
+/**
+ The result of requesting to subscribe to the turn signal
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *turnSignal;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m
index 283002a3d..b39328d7e 100644
--- a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m
+++ b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m
@@ -58,6 +58,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameFuelLevelState ofClass:SDLVehicleDataResult.class];
}
+- (void)setFuelRange:(nullable SDLVehicleDataResult *)fuelRange {
+ [parameters sdl_setObject:fuelRange forName:SDLNameFuelRange];
+}
+
+- (nullable SDLVehicleDataResult *)fuelRange {
+ return [parameters sdl_objectForName:SDLNameFuelRange ofClass:SDLVehicleDataResult.class];
+}
+
- (void)setInstantFuelConsumption:(nullable SDLVehicleDataResult *)instantFuelConsumption {
[parameters sdl_setObject:instantFuelConsumption forName:SDLNameInstantFuelConsumption];
}
@@ -146,6 +154,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameHeadLampStatus ofClass:SDLVehicleDataResult.class];
}
+- (void)setEngineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife {
+ [parameters sdl_setObject:engineOilLife forName:SDLNameEngineOilLife];
+}
+
+- (nullable NSNumber<SDLBool> *)engineOilLife {
+ return [parameters sdl_objectForName:SDLNameEngineOilLife];
+}
+
- (void)setEngineTorque:(nullable SDLVehicleDataResult *)engineTorque {
[parameters sdl_setObject:engineTorque forName:SDLNameEngineTorque];
}
@@ -210,6 +226,22 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameMyKey ofClass:SDLVehicleDataResult.class];
}
+- (void)setElectronicParkBrakeStatus:(nullable SDLVehicleDataResult *)electronicParkBrakeStatus {
+ [parameters sdl_setObject:electronicParkBrakeStatus forName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (nullable SDLVehicleDataResult *)electronicParkBrakeStatus {
+ return [parameters sdl_objectForName:SDLNameElectronicParkBrakeStatus ofClass:[SDLVehicleDataResult class]];
+}
+
+- (void)setTurnSignal:(nullable SDLVehicleDataResult *)turnSignal {
+ [parameters sdl_setObject:turnSignal forName:SDLNameTurnSignal];
+}
+
+- (nullable SDLVehicleDataResult *)turnSignal {
+ return [parameters sdl_objectForName:SDLNameTurnSignal ofClass:[SDLVehicleDataResult class]];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSupportedSeat.h b/SmartDeviceLink/SDLSupportedSeat.h
new file mode 100644
index 000000000..7c7df2f9d
--- /dev/null
+++ b/SmartDeviceLink/SDLSupportedSeat.h
@@ -0,0 +1,20 @@
+// SDLSupportedSeat.h
+//
+
+#import "SDLEnum.h"
+
+/**
+ * List possible seats that is a remote controllable seat.
+ *
+ */
+typedef SDLEnum SDLSupportedSeat SDL_SWIFT_ENUM;
+
+/**
+ * @abstract Save current seat postions and settings to seat memory.
+ */
+extern SDLSupportedSeat const SDLSupportedSeatDriver;
+
+/**
+ * @abstract Restore / apply the seat memory settings to the current seat.
+ */
+extern SDLSupportedSeat const SDLSupportedSeatFrontPassenger;
diff --git a/SmartDeviceLink/SDLSupportedSeat.m b/SmartDeviceLink/SDLSupportedSeat.m
new file mode 100644
index 000000000..f97678bb1
--- /dev/null
+++ b/SmartDeviceLink/SDLSupportedSeat.m
@@ -0,0 +1,7 @@
+// SDLSupportedSeat.m
+//
+
+#import "SDLSupportedSeat.h"
+
+SDLSupportedSeat const SDLSupportedSeatDriver = @"DRIVER";
+SDLSupportedSeat const SDLSupportedSeatFrontPassenger = @"FRONT_PASSENGER";
diff --git a/SmartDeviceLink/SDLSystemRequest.h b/SmartDeviceLink/SDLSystemRequest.h
index f0ad404f4..b029d37c9 100644
--- a/SmartDeviceLink/SDLSystemRequest.h
+++ b/SmartDeviceLink/SDLSystemRequest.h
@@ -15,9 +15,25 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLSystemRequest : SDLRPCRequest
+/**
+ Create a generic system request with a file name
+
+ @param requestType The request type to use
+ @param fileName The name of the file to use
+ @return The request
+ */
- (instancetype)initWithType:(SDLRequestType)requestType fileName:(nullable NSString *)fileName;
/**
+ Create an OEM_PROPRIETARY system request with a subtype and file name
+
+ @param proprietaryType The proprietary requestSubType to be used
+ @param fileName The name of the file to use
+ @return The request
+ */
+- (instancetype)initWithProprietaryType:(NSString *)proprietaryType fileName:(nullable NSString *)fileName;
+
+/**
* The type of system request. Note that Proprietary requests should forward the binary data to the known proprietary module on the system.
*
* Required
@@ -25,6 +41,13 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) SDLRequestType requestType;
/**
+ A request subType used when the `requestType` is `OEM_SPECIFIC`.
+
+ Optional, Max length 255
+ */
+@property (strong, nonatomic, nullable) NSString *requestSubType;
+
+/**
* Filename of HTTP data to store in predefined system staging area.
*
* Required if requestType is HTTP. PROPRIETARY requestType should ignore this parameter.
diff --git a/SmartDeviceLink/SDLSystemRequest.m b/SmartDeviceLink/SDLSystemRequest.m
index 5cb66258d..d481779cf 100644
--- a/SmartDeviceLink/SDLSystemRequest.m
+++ b/SmartDeviceLink/SDLSystemRequest.m
@@ -29,6 +29,17 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithProprietaryType:(NSString *)proprietaryType fileName:(nullable NSString *)fileName {
+ self = [self init];
+ if (!self) { return nil; }
+
+ self.requestType = SDLRequestTypeOEMSpecific;
+ self.requestSubType = proprietaryType;
+ self.fileName = fileName;
+
+ return self;
+}
+
- (void)setRequestType:(SDLRequestType)requestType {
[parameters sdl_setObject:requestType forName:SDLNameRequestType];
}
@@ -37,6 +48,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameRequestType];
}
+- (void)setRequestSubType:(nullable NSString *)requestSubType {
+ [parameters sdl_setObject:requestSubType forName:SDLNameRequestSubType];
+}
+
+- (nullable NSString *)requestSubType {
+ return [parameters sdl_objectForName:SDLNameRequestSubType];
+}
+
- (void)setFileName:(nullable NSString *)fileName {
[parameters sdl_setObject:fileName forName:SDLNameFilename];
}
diff --git a/SmartDeviceLink/SDLTCPTransport.h b/SmartDeviceLink/SDLTCPTransport.h
index 6349bb1a8..5b7ac09f0 100644
--- a/SmartDeviceLink/SDLTCPTransport.h
+++ b/SmartDeviceLink/SDLTCPTransport.h
@@ -5,9 +5,7 @@
NS_ASSUME_NONNULL_BEGIN
-@interface SDLTCPTransport : NSObject <SDLTransportType> {
- _Nullable CFSocketRef socket;
-}
+@interface SDLTCPTransport : NSObject <SDLTransportType, NSStreamDelegate>
/**
* Convenience init
diff --git a/SmartDeviceLink/SDLTCPTransport.m b/SmartDeviceLink/SDLTCPTransport.m
index b8b0a9520..f56641fe7 100644
--- a/SmartDeviceLink/SDLTCPTransport.m
+++ b/SmartDeviceLink/SDLTCPTransport.m
@@ -1,43 +1,45 @@
+//
// SDLTCPTransport.m
+// SmartDeviceLink
+//
+// Created by Sho Amano on 2018/04/23.
+// Copyright © 2018 Xevo Inc. All rights reserved.
//
-
#import "SDLTCPTransport.h"
-#import "SDLLogConstants.h"
+#import "SDLMutableDataQueue.h"
+#import "SDLError.h"
#import "SDLLogMacros.h"
-#import "SDLLogManager.h"
-#import "SDLHexUtility.h"
#import <errno.h>
-#import <netdb.h>
-#import <netinet/in.h>
-#import <signal.h>
-#import <stdio.h>
-#import <sys/socket.h>
-#import <sys/types.h>
-#import <sys/wait.h>
-#import <unistd.h>
NS_ASSUME_NONNULL_BEGIN
-// C function forward declarations.
-int call_socket(const char *hostname, const char *port);
-static void TCPCallback(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address, const void *data, void *info);
-
-@interface SDLTCPTransport () {
- dispatch_queue_t _sendQueue;
-}
-
+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;
+@property (nullable, nonatomic, strong) NSOutputStream *outputStream;
+@property (nonatomic, assign) BOOL outputStreamHasSpace;
+@property (nullable, nonatomic, strong) NSTimer *connectionTimer;
+@property (nonatomic, assign) BOOL transportConnected;
+@property (nonatomic, assign) BOOL transportErrorNotified;
@end
-
@implementation SDLTCPTransport
- (instancetype)init {
if (self = [super init]) {
- _sendQueue = dispatch_queue_create("com.sdl.transport.tcp.transmit", DISPATCH_QUEUE_SERIAL);
- SDLLogD(@"TCP Transport initialization");
+ _receiveBufferSize = DefaultReceiveBufferSize;
+ _sendDataQueue = [[SDLMutableDataQueue alloc] init];
}
-
return self;
}
@@ -52,125 +54,302 @@ static void TCPCallback(CFSocketRef socket, CFSocketCallBackType type, CFDataRef
}
- (void)dealloc {
+ SDLLogD(@"SDLTCPTransport dealloc");
[self disconnect];
}
+#pragma mark - Stream Lifecycle
+
+// Note: When a connection is refused (e.g. TCP port number is not correct) or timed out (e.g. invalid IP address), then onError will be notified.
- (void)connect {
- __weak typeof(self) weakself = self;
- [[NSOperationQueue mainQueue] addOperationWithBlock:^{
- __strong typeof(self) strongself = weakself;
- SDLLogD(@"Attemping to connect");
-
- int sock_fd = call_socket([self.hostName UTF8String], [self.portNumber UTF8String]);
- if (sock_fd < 0) {
- SDLLogE(@"Server not ready, connection failed");
- return;
- }
-
- CFSocketContext socketCtxt = {0, (__bridge void *)(self), NULL, NULL, NULL};
- strongself->socket = CFSocketCreateWithNative(kCFAllocatorDefault, sock_fd, kCFSocketDataCallBack | kCFSocketConnectCallBack, (CFSocketCallBack)&TCPCallback, &socketCtxt);
- CFRunLoopSourceRef source = CFSocketCreateRunLoopSource(kCFAllocatorDefault, strongself->socket, 0);
- CFRunLoopRef loop = CFRunLoopGetCurrent();
- CFRunLoopAddSource(loop, source, kCFRunLoopDefaultMode);
- CFRelease(source);
- }];
+ if (self.ioThread != nil) {
+ SDLLogW(@"TCP transport is already connected");
+ return;
+ }
+
+ unsigned int port;
+ int num = [self.portNumber intValue];
+ if (0 <= num && num <= 65535) {
+ port = (unsigned int)num;
+ } else {
+ // specify an invalid port, so that once connection is initiated we will receive an error through delegate
+ port = 65536;
+ }
+
+ 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;
+ CFStringRef hostName = (__bridge CFStringRef)self.hostName;
+
+ CFStreamCreatePairWithSocketToHost(NULL, hostName, port, &readStream, &writeStream);
+
+ // this transport is mainly for video streaming
+ CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVideo);
+ CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVideo);
+
+ self.inputStream = (__bridge_transfer NSInputStream *)readStream;
+ self.outputStream = (__bridge_transfer NSOutputStream *)writeStream;
+
+ [self.ioThread start];
+}
+
+- (void)disconnect {
+ if (self.ioThread == nil) {
+ // 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;
+
+ [self.sendDataQueue removeAllObjects];
+ self.transportErrorNotified = NO;
+ self.transportConnected = NO;
}
+#pragma mark - Data Transmission
+
- (void)sendData:(NSData *)msgBytes {
- dispatch_async(_sendQueue, ^{
- @autoreleasepool {
- SDLLogBytes(msgBytes, SDLLogBytesDirectionTransmit);
- CFSocketError e = CFSocketSendData(self->socket, NULL, (__bridge CFDataRef)msgBytes, 10000);
- if (e != kCFSocketSuccess) {
- NSString *errorCause = nil;
- switch (e) {
- case kCFSocketTimeout:
- errorCause = @"Socket Timeout Error.";
- break;
-
- case kCFSocketError:
- default:
- errorCause = @"Socket Error.";
- break;
- }
-
- SDLLogE(@"Socket send error: %@", errorCause);
+ [self.sendDataQueue enqueueBuffer:msgBytes.mutableCopy];
+
+ [self performSelector:@selector(sdl_writeToStream) onThread:self.ioThread withObject:nil waitUntilDone:NO];
+}
+
+#pragma mark - Run loop
+
+- (void)sdl_tcpTransportEventLoop {
+ @autoreleasepool {
+ [self sdl_setupStream:self.inputStream];
+ [self sdl_setupStream:self.outputStream];
+
+ // JFYI: NSStream itself has a connection timeout (about 1 minute). If you specify a large timeout value, you may get the NSStream's timeout event first.
+ self.connectionTimer = [NSTimer scheduledTimerWithTimeInterval:ConnectionTimeoutSecs target:self selector:@selector(sdl_onConnectionTimedOut:) userInfo:nil repeats:NO];
+
+ // these will initiate a connection to remote server
+ SDLLogD(@"Connecting to %@:%@ ...", self.hostName, self.portNumber);
+ [self.inputStream open];
+ [self.outputStream open];
+
+ while (![self.ioThread isCancelled]) {
+ BOOL ret = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
+ if (!ret) {
+ SDLLogW(@"Failed to start TCP transport run loop");
+ break;
}
}
- });
-}
+ SDLLogD(@"TCP transport run loop terminated");
-- (void)disconnect {
- SDLLogD(@"Disconnect connection");
-
- if (socket != nil) {
- CFSocketInvalidate(socket);
- CFRelease(socket);
- socket = nil;
+ [self sdl_teardownStream:self.inputStream];
+ [self sdl_teardownStream:self.outputStream];
+
+ [self.connectionTimer invalidate];
+
+ dispatch_semaphore_signal(self.ioThreadStoppedSemaphore);
}
}
-@end
+- (void)sdl_setupStream:(NSStream *)stream {
+ stream.delegate = self;
+ [stream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+}
+
+- (void)sdl_teardownStream:(NSStream *)stream {
+ NSStreamStatus streamStatus = stream.streamStatus;
+ if (streamStatus != NSStreamStatusNotOpen && streamStatus != NSStreamStatusClosed) {
+ [stream close];
+ }
+ [stream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+ [stream setDelegate:nil];
+}
-// C functions
-int call_socket(const char *hostname, const char *port) {
- int status, sock;
- struct addrinfo hints;
- struct addrinfo *servinfo;
+- (void)sdl_cancelIOThread {
+ [self.ioThread cancel];
+ // 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];
+}
- memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
+#pragma mark - NSStreamDelegate
+// this method runs only on the I/O thread (i.e. invoked from the run loop)
+
+- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
+ switch (eventCode) {
+ case NSStreamEventNone: {
+ // nothing to do
+ } break;
+ case NSStreamEventOpenCompleted: {
+ // 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.transportConnected = YES;
+ [self.delegate onTransportConnected];
+ }
+ } break;
+ case NSStreamEventHasBytesAvailable: {
+ [self sdl_readFromStream];
+ } break;
+ case NSStreamEventHasSpaceAvailable: {
+ self.outputStreamHasSpace = YES;
+ [self sdl_writeToStream];
+ } break;
+ case NSStreamEventErrorOccurred: {
+ SDLLogW(@"TCP transport error occurred with %@ stream: %@", aStream == self.inputStream ? @"input" : @"output", aStream.streamError);
+ [self sdl_onStreamError:aStream];
+ } break;
+ case NSStreamEventEndEncountered: {
+ SDLLogD(@"TCP transport %@ stream end encountered", aStream == self.inputStream ? @"input" : @"output");
+ [self sdl_onStreamEnd:aStream];
+ } break;
+ }
+}
- //no host name?, no problem, get local host
- if (hostname == nil) {
- char localhost[128];
- gethostname(localhost, sizeof localhost);
- hostname = (const char *)&localhost;
+#pragma mark - Stream event handlers
+// these methods run only on the I/O thread (i.e. invoked from the run loop)
+
+- (void)sdl_readFromStream {
+ NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_readFromStream is called on a wrong thread!");
+
+ BytePtr buffer = malloc(self.receiveBufferSize);
+ NSInteger readBytes = [self.inputStream read:buffer maxLength:self.receiveBufferSize];
+ if (readBytes < 0) {
+ SDLLogW(@"TCP transport read error: %@", self.inputStream.streamError);
+ [self sdl_onStreamError:self.inputStream];
+ free(buffer);
+ return;
+ } else if (readBytes == 0) {
+ SDLLogD(@"TCP transport input stream closed");
+ [self sdl_onStreamEnd:self.inputStream];
+ free(buffer);
+ return;
}
- //getaddrinfo setup
- if ((status = getaddrinfo(hostname, port, &hints, &servinfo)) != 0) {
- fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
- return (-1);
+ NSData *data = [NSData dataWithBytesNoCopy:buffer length:(NSUInteger)readBytes freeWhenDone:YES];
+ [self.delegate onDataReceived:data];
+}
+
+- (void)sdl_writeToStream {
+ NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_writeToStream is called on a wrong thread!");
+
+ if (!self.outputStreamHasSpace || [self.sendDataQueue count] == 0) {
+ return;
}
- //get socket
- if ((sock = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) < 0)
- return (-1);
+ NSMutableData *buffer = [self.sendDataQueue frontBuffer];
+ NSUInteger bufferLen = buffer.length;
+
+ NSInteger bytesWritten = [self.outputStream write:buffer.bytes maxLength:bufferLen];
+ if (bytesWritten < 0) {
+ SDLLogW(@"TCP transport write error: %@", self.outputStream.streamError);
+ [self sdl_onStreamError:self.outputStream];
+ return;
+ } else if (bytesWritten == 0) {
+ SDLLogD(@"TCP transport output stream closed");
+ [self sdl_onStreamEnd:self.outputStream];
+ return;
+ }
- //connect
- if (connect(sock, servinfo->ai_addr, servinfo->ai_addrlen) < 0) {
- close(sock);
- return (-1);
+ if (bytesWritten == bufferLen) {
+ // we have consumed all of data in this buffer
+ [self.sendDataQueue popBuffer];
+ } else {
+ [buffer replaceBytesInRange:NSMakeRange(0, (NSUInteger)bytesWritten) withBytes:NULL length:0];
}
- freeaddrinfo(servinfo); // free the linked-list
- return (sock);
+ // the output stream may still have some spaces, but let's wait for another NSStreamEventHasSpaceAvailable event before writing
+ self.outputStreamHasSpace = NO;
}
-static void TCPCallback(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address, const void *data, void *info) {
- if (kCFSocketConnectCallBack == type) {
- SDLTCPTransport *transport = (__bridge SDLTCPTransport *)info;
- [transport.delegate onTransportConnected];
- } else if (kCFSocketDataCallBack == type) {
- SDLTCPTransport *transport = (__bridge SDLTCPTransport *)info;
+- (void)sdl_onConnectionTimedOut:(NSTimer *)timer {
+ NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_onConnectionTimedOut is called on a wrong thread!");
- // Check if Core disconnected from us
- if (CFDataGetLength((CFDataRef)data) <= 0) {
- SDLLogW(@"Remote system terminated connection, data packet length 0");
- [transport.delegate onTransportDisconnected];
+ SDLLogW(@"TCP connection timed out");
+ [self sdl_cancelIOThread];
- return;
- }
+ if (!self.transportErrorNotified) {
+ NSAssert(!self.transportConnected, @"transport should not be connected in this case");
+ [self.delegate onError:[NSError sdl_transport_connectionTimedOutError]];
+ self.transportErrorNotified = YES;
+ }
+}
+
+- (void)sdl_onStreamError:(NSStream *)stream {
+ NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_onStreamError is called on a wrong thread!");
+
+ // stop I/O thread
+ [self sdl_cancelIOThread];
+
+ // avoid notifying multiple error events
+ if (self.transportErrorNotified) {
+ return;
+ }
- // Handle the data we received
- NSData *convertedData = [NSData dataWithBytes:(UInt8 *)CFDataGetBytePtr((CFDataRef)data) length:(NSUInteger)CFDataGetLength((CFDataRef)data)];
- SDLLogBytes(convertedData, SDLLogBytesDirectionReceive);
- [transport.delegate onDataReceived:convertedData];
+ if (self.transportConnected) {
+ // transport is disconnected while running
+ [self.delegate onTransportDisconnected];
+ self.transportErrorNotified = YES;
+ } else if ([stream.streamError.domain isEqualToString:NSPOSIXErrorDomain]) {
+ // connection error
+
+ // According to Apple's document "Error Objects, Domains, and Codes", the 'code' values of NSPOSIXErrorDomain are actually errno values.
+ NSError *error;
+ switch (stream.streamError.code) {
+ case ECONNREFUSED: {
+ SDLLogD(@"TCP connection error: ECONNREFUSED");
+ error = [NSError sdl_transport_connectionRefusedError];
+ } break;
+ case ETIMEDOUT: {
+ SDLLogD(@"TCP connection error: ETIMEDOUT");
+ error = [NSError sdl_transport_connectionTimedOutError];
+ } break;
+ case ENETDOWN: {
+ SDLLogD(@"TCP connection error: ENETDOWN");
+ 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");
+ error = [NSError sdl_transport_networkDownError];
+ } break;
+ default: {
+ SDLLogD(@"TCP connection error: unknown error %ld", (long)stream.streamError.code);
+ error = [NSError sdl_transport_unknownError];
+ } break;
+ }
+ [self.delegate onError:error];
+ self.transportErrorNotified = YES;
} else {
- SDLLogW(@"Unhandled callback type: %lu", type);
+ SDLLogE(@"Unhandled stream error! %@", stream.streamError);
}
}
+- (void)sdl_onStreamEnd:(NSStream *)stream {
+ NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_onStreamEnd is called on a wrong thread!");
+
+ [self sdl_cancelIOThread];
+
+ if (!self.transportErrorNotified) {
+ [self.delegate onTransportDisconnected];
+ self.transportErrorNotified = YES;
+ }
+}
+
+- (void)sdl_doNothing {}
+
+@end
+
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLTPMS.h b/SmartDeviceLink/SDLTPMS.h
new file mode 100644
index 000000000..4831af523
--- /dev/null
+++ b/SmartDeviceLink/SDLTPMS.h
@@ -0,0 +1,50 @@
+// SDLTPMS.h
+//
+
+
+#import "SDLEnum.h"
+
+/**
+ An enum representing values of the tire pressure monitoring system
+ */
+typedef SDLEnum SDLTPMS SDL_SWIFT_ENUM;
+
+/**
+ If set the status of the tire is not known.
+ */
+extern SDLTPMS const SDLTPMSUnknown;
+
+/**
+ TPMS does not function.
+ */
+extern SDLTPMS const SDLTPMSSystemFault;
+
+/**
+ The sensor of the tire does not function.
+ */
+extern SDLTPMS const SDLTPMSSensorFault;
+
+/**
+ TPMS is reporting a low tire pressure for the tire.
+ */
+extern SDLTPMS const SDLTPMSLow;
+
+/**
+ TPMS is active and the tire pressure is monitored.
+ */
+extern SDLTPMS const SDLTPMSSystemActive;
+
+/**
+ TPMS is reporting that the tire must be trained.
+ */
+extern SDLTPMS const SDLTPMSTrain;
+
+/**
+ TPMS reports the training for the tire is completed.
+ */
+extern SDLTPMS const SDLTPMSTrainingComplete;
+
+/**
+ TPMS reports the tire is not trained.
+ */
+extern SDLTPMS const SDLTPMSNotTrained;
diff --git a/SmartDeviceLink/SDLTPMS.m b/SmartDeviceLink/SDLTPMS.m
new file mode 100644
index 000000000..54a66d10b
--- /dev/null
+++ b/SmartDeviceLink/SDLTPMS.m
@@ -0,0 +1,18 @@
+//
+// SDLTPMS.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 7/2/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLTPMS.h"
+
+SDLTPMS const SDLTPMSUnknown = @"UNKNOWN";
+SDLTPMS const SDLTPMSSystemFault = @"SYSTEM_FAULT";
+SDLTPMS const SDLTPMSSensorFault = @"SENSOR_FAULT";
+SDLTPMS const SDLTPMSLow = @"LOW";
+SDLTPMS const SDLTPMSSystemActive = @"SYSTEM_ACTIVE";
+SDLTPMS const SDLTPMSTrain = @"TRAIN";
+SDLTPMS const SDLTPMSTrainingComplete = @"TRAINING_COMPLETE";
+SDLTPMS const SDLTPMSNotTrained = @"NOT_TRAINED";
diff --git a/SmartDeviceLink/SDLTTSChunk.h b/SmartDeviceLink/SDLTTSChunk.h
index 4c27ead53..d0d04a0fd 100644
--- a/SmartDeviceLink/SDLTTSChunk.h
+++ b/SmartDeviceLink/SDLTTSChunk.h
@@ -66,9 +66,16 @@ NS_ASSUME_NONNULL_BEGIN
*/
+ (NSArray<SDLTTSChunk *> *)silenceChunks;
+/**
+ Create "TTS" to play an audio file previously uploaded to the system.
+
+ @param fileName The name of the file used in the SDLFile or PutFile that was uploaded
+ @return The RPC
+ */
++ (NSArray<SDLTTSChunk *> *)fileChunksWithName:(NSString *)fileName;
/**
- * Text to be spoken, or a phoneme specification, or the name of a pre-recorded sound. The contents of this field are indicated by the "type" field.
+ * 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.
*
* Required, Max length 500
*/
diff --git a/SmartDeviceLink/SDLTTSChunk.m b/SmartDeviceLink/SDLTTSChunk.m
index e553d6342..a8874129b 100644
--- a/SmartDeviceLink/SDLTTSChunk.m
+++ b/SmartDeviceLink/SDLTTSChunk.m
@@ -39,15 +39,19 @@ NS_ASSUME_NONNULL_BEGIN
}
+ (NSArray<SDLTTSChunk *> *)silenceChunks {
- return [self sdl_chunksFromString:nil type:SDLSpeechCapabilitiesSilence];
+ return [self sdl_chunksFromString:@"" type:SDLSpeechCapabilitiesSilence];
+}
+
++ (NSArray<SDLTTSChunk *> *)fileChunksWithName:(NSString *)fileName {
+ return [self sdl_chunksFromString:fileName type:SDLSpeechCapabilitiesFile];
}
+ (nullable NSArray<SDLTTSChunk *> *)sdl_chunksFromString:(nullable NSString *)string type:(SDLSpeechCapabilities)type {
- if (string.length == 0) {
+ if (string == nil) {
return nil;
}
- return [NSArray arrayWithObject:[[[self class] alloc] initWithText:string type:type]];
+ return @[[[SDLTTSChunk alloc] initWithText:string type:type]];
}
- (void)setText:(NSString *)text {
diff --git a/SmartDeviceLink/SDLTemplateColorScheme.h b/SmartDeviceLink/SDLTemplateColorScheme.h
new file mode 100644
index 000000000..d62420326
--- /dev/null
+++ b/SmartDeviceLink/SDLTemplateColorScheme.h
@@ -0,0 +1,40 @@
+//
+// SDLTemplateColorScheme.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 Livio. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "NSNumber+NumberType.h"
+#import "SDLRPCStruct.h"
+
+@class SDLRGBColor;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLTemplateColorScheme : SDLRPCStruct
+
+- (instancetype)initWithPrimaryRGBColor:(SDLRGBColor *)primaryColor secondaryRGBColor:(SDLRGBColor *)secondaryColor backgroundRGBColor:(SDLRGBColor *)backgroundColor;
+- (instancetype)initWithPrimaryColor:(UIColor *)primaryColor secondaryColor:(UIColor *)secondaryColor backgroundColor:(UIColor *)backgroundColor;
+
+/**
+ 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.
+ */
+@property (strong, nonatomic, nullable) SDLRGBColor *primaryColor;
+
+/**
+ 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.
+ */
+@property (strong, nonatomic, nullable) SDLRGBColor *secondaryColor;
+
+/**
+ 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.
+ */
+@property (strong, nonatomic, nullable) SDLRGBColor *backgroundColor;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLTemplateColorScheme.m b/SmartDeviceLink/SDLTemplateColorScheme.m
new file mode 100644
index 000000000..42f18a702
--- /dev/null
+++ b/SmartDeviceLink/SDLTemplateColorScheme.m
@@ -0,0 +1,67 @@
+//
+// SDLTemplateColorScheme.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/21/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLTemplateColorScheme.h"
+
+#import "NSMutableDictionary+Store.h"
+#import "SDLNames.h"
+#import "SDLRGBColor.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLTemplateColorScheme
+
+- (instancetype)initWithPrimaryRGBColor:(SDLRGBColor *)primaryColor secondaryRGBColor:(SDLRGBColor *)secondaryColor backgroundRGBColor:(SDLRGBColor *)backgroundColor {
+ self = [self init];
+ if (!self) { return nil; }
+
+ self.primaryColor = primaryColor;
+ self.secondaryColor = secondaryColor;
+ self.backgroundColor = backgroundColor;
+
+ return self;
+}
+
+- (instancetype)initWithPrimaryColor:(UIColor *)primaryColor secondaryColor:(UIColor *)secondaryColor backgroundColor:(UIColor *)backgroundColor {
+ self = [self init];
+ if (!self) { return nil; }
+
+ self.primaryColor = [[SDLRGBColor alloc] initWithColor:primaryColor];
+ self.secondaryColor = [[SDLRGBColor alloc] initWithColor:secondaryColor];
+ self.backgroundColor = [[SDLRGBColor alloc] initWithColor:backgroundColor];
+
+ return self;
+}
+
+- (void)setPrimaryColor:(nullable SDLRGBColor *)primaryColor {
+ [store sdl_setObject:primaryColor forName:SDLNamePrimaryColor];
+}
+
+- (nullable SDLRGBColor *)primaryColor {
+ return [store sdl_objectForName:SDLNamePrimaryColor ofClass:[SDLRGBColor class]];
+}
+
+- (void)setSecondaryColor:(nullable SDLRGBColor *)secondaryColor {
+ [store sdl_setObject:secondaryColor forName:SDLNameSecondaryColor];
+}
+
+- (nullable SDLRGBColor *)secondaryColor {
+ return [store sdl_objectForName:SDLNameSecondaryColor ofClass:[SDLRGBColor class]];
+}
+
+- (void)setBackgroundColor:(nullable SDLRGBColor *)backgroundColor {
+ [store sdl_setObject:backgroundColor forName:SDLNameBackgroundColor];
+}
+
+- (nullable SDLRGBColor *)backgroundColor {
+ return [store sdl_objectForName:SDLNameBackgroundColor ofClass:[SDLRGBColor class]];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLTextAndGraphicManager.m b/SmartDeviceLink/SDLTextAndGraphicManager.m
index 64a3a5ffb..aaeba7187 100644
--- a/SmartDeviceLink/SDLTextAndGraphicManager.m
+++ b/SmartDeviceLink/SDLTextAndGraphicManager.m
@@ -156,43 +156,55 @@ NS_ASSUME_NONNULL_BEGIN
fullShow = [self sdl_assembleShowImages:fullShow];
self.inProgressHandler = handler;
+
__weak typeof(self)weakSelf = self;
if (!([self sdl_shouldUpdatePrimaryImage] || [self sdl_shouldUpdateSecondaryImage])) {
- SDLLogV(@"No images to send, only sending text");
- // If there are no images to update, just send the text update
+ SDLLogV(@"No images to send, sending text");
+ // If there are no images to update, just send the text
self.inProgressUpdate = [self sdl_extractTextFromShow:fullShow];
- } else if ([self sdl_uploadedArtworkOrDoesntExist:self.primaryGraphic] && [self sdl_uploadedArtworkOrDoesntExist:self.secondaryGraphic]) {
+ } else if ([self sdl_isArtworkUploadedOrNonExistent:self.primaryGraphic] && [self sdl_isArtworkUploadedOrNonExistent:self.secondaryGraphic]) {
SDLLogV(@"Images already uploaded, sending full update");
// The files to be updated are already uploaded, send the full show immediately
self.inProgressUpdate = fullShow;
} else {
SDLLogV(@"Images need to be uploaded, sending text and uploading images");
+
// We need to upload or queue the upload of the images
// Send the text immediately
self.inProgressUpdate = [self sdl_extractTextFromShow:fullShow];
+
// Start uploading the images
__block SDLShow *thisUpdate = fullShow;
[self sdl_uploadImagesWithCompletionHandler:^(NSError * _Nonnull error) {
__strong typeof(weakSelf) strongSelf = weakSelf;
if (error != nil) {
- SDLLogE(@"Error uploading text and graphic image: %@", error);
+ SDLShow *showWithGraphics = [self sdl_createImageOnlyShowWithPrimaryArtwork:self.primaryGraphic secondaryArtwork:self.secondaryGraphic];
+ if (showWithGraphics != nil) {
+ SDLLogW(@"Some images failed to upload. Sending update with the successfully uploaded images");
+ self.inProgressUpdate = showWithGraphics;
+ } else {
+ SDLLogE(@"All images failed to upload. No graphics to show, skipping update.");
+ self.inProgressUpdate = nil;
+ }
+ return;
}
// Check if queued image update still matches our images (there could have been a new Show in the meantime) and send a new update if it does. Since the images will already be on the head unit, the whole show will be sent
// TODO: Send delete if it doesn't?
if ([strongSelf sdl_showImages:thisUpdate isEqualToShowImages:strongSelf.queuedImageUpdate]) {
SDLLogV(@"Queued image update matches the images we need, sending update");
- [strongSelf sdl_updateWithCompletionHandler:strongSelf.inProgressHandler];
+ return [strongSelf sdl_updateWithCompletionHandler:strongSelf.inProgressHandler];
} else {
SDLLogV(@"Queued image update does not match the images we need, skipping update");
}
}];
-
// When the images are done uploading, send another show with the images
self.queuedImageUpdate = fullShow;
}
+ if (self.inProgressUpdate == nil) { return; }
+
[self.connectionManager sendConnectionRequest:self.inProgressUpdate withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
__strong typeof(weakSelf) strongSelf = weakSelf;
SDLLogD(@"Text and Graphic update completed");
@@ -227,6 +239,10 @@ NS_ASSUME_NONNULL_BEGIN
}
[self.fileManager uploadArtworks:artworksToUpload completionHandler:^(NSArray<NSString *> * _Nonnull artworkNames, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogW(@"Text and graphic manager artwork failed to upload with error: %@", error.localizedDescription);
+ }
+
handler(error);
}];
}
@@ -241,10 +257,10 @@ NS_ASSUME_NONNULL_BEGIN
}
if ([self sdl_shouldUpdatePrimaryImage]) {
- show.graphic = [[SDLImage alloc] initWithName:self.primaryGraphic.name ofType:SDLImageTypeDynamic];
+ show.graphic = [[SDLImage alloc] initWithName:self.primaryGraphic.name ofType:SDLImageTypeDynamic isTemplate:self.primaryGraphic.isTemplate];
}
if ([self sdl_shouldUpdateSecondaryImage]) {
- show.secondaryGraphic = [[SDLImage alloc] initWithName:self.secondaryGraphic.name ofType:SDLImageTypeDynamic];
+ show.secondaryGraphic = [[SDLImage alloc] initWithName:self.secondaryGraphic.name ofType:SDLImageTypeDynamic isTemplate:self.secondaryGraphic.isTemplate];
}
return show;
@@ -439,6 +455,19 @@ NS_ASSUME_NONNULL_BEGIN
return newShow;
}
+- (nullable SDLShow *)sdl_createImageOnlyShowWithPrimaryArtwork:(nullable SDLArtwork *)primaryArtwork secondaryArtwork:(nullable SDLArtwork *)secondaryArtwork {
+ SDLShow *newShow = [[SDLShow alloc] init];
+ newShow.graphic = [self sdl_isArtworkUploadedOrNonExistent:primaryArtwork] ? [[SDLImage alloc] initWithName:primaryArtwork.name ofType:SDLImageTypeDynamic isTemplate:primaryArtwork.isTemplate] : nil;
+ newShow.secondaryGraphic = [self sdl_isArtworkUploadedOrNonExistent:secondaryArtwork] ? [[SDLImage alloc] initWithName:secondaryArtwork.name ofType:SDLImageTypeDynamic isTemplate:secondaryArtwork.isTemplate] : nil;
+
+ if (newShow.graphic == nil && newShow.secondaryGraphic == nil) {
+ SDLLogV(@"No graphics to upload");
+ return nil;
+ }
+
+ return newShow;
+}
+
- (void)sdl_updateCurrentScreenDataFromShow:(SDLShow *)show {
// If the items are nil, they were not updated, so we can't just set it directly
self.currentScreenData.mainField1 = show.mainField1 ?: self.currentScreenData.mainField1;
@@ -454,7 +483,13 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Helpers
-- (BOOL)sdl_uploadedArtworkOrDoesntExist:(SDLArtwork *)artwork {
+/**
+ * Checks if an artwork needs to be uploaded to Core.
+ *
+ * @param artwork The artwork to be uploaded to Core
+ * @return True if the artwork does not need to be uploaded to Core; false if artwork stills needs to be sent to Core.
+ */
+- (BOOL)sdl_isArtworkUploadedOrNonExistent:(SDLArtwork *)artwork {
return (!artwork || [self.fileManager hasUploadedFile:artwork]);
}
@@ -639,11 +674,26 @@ NS_ASSUME_NONNULL_BEGIN
- (void)sdl_registerResponse:(SDLRPCResponseNotification *)notification {
SDLRegisterAppInterfaceResponse *response = (SDLRegisterAppInterfaceResponse *)notification.response;
+
+ if (!response.success.boolValue) { return; }
+ if (response.displayCapabilities == nil) {
+ SDLLogE(@"RegisterAppInterface succeeded but didn't send a display capabilities. A lot of things will probably break.");
+ return;
+ }
+
self.displayCapabilities = response.displayCapabilities;
}
- (void)sdl_displayLayoutResponse:(SDLRPCResponseNotification *)notification {
SDLSetDisplayLayoutResponse *response = (SDLSetDisplayLayoutResponse *)notification.response;
+
+ if (!response.success.boolValue) { return; }
+ if (!response.success.boolValue) { return; }
+ if (response.displayCapabilities == nil) {
+ SDLLogE(@"SetDisplayLayout succeeded but didn't send a display capabilities. A lot of things will probably break.");
+ return;
+ }
+
self.displayCapabilities = response.displayCapabilities;
// Auto-send an updated show
diff --git a/SmartDeviceLink/SDLTransportDelegate.h b/SmartDeviceLink/SDLTransportDelegate.h
index f81e2c043..c8350918a 100644
--- a/SmartDeviceLink/SDLTransportDelegate.h
+++ b/SmartDeviceLink/SDLTransportDelegate.h
@@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param receivedData The data received from Core
*/
- (void)onDataReceived:(NSData *)receivedData;
+- (void)onError:(NSError *)error;
@end
diff --git a/SmartDeviceLink/SDLTurnSignal.h b/SmartDeviceLink/SDLTurnSignal.h
new file mode 100644
index 000000000..b8d50c610
--- /dev/null
+++ b/SmartDeviceLink/SDLTurnSignal.h
@@ -0,0 +1,34 @@
+//
+// SDLTurnSignal.h
+// SmartDeviceLink
+//
+// Created by Nicole on 7/19/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLEnum.h"
+
+/*
+ * Enumeration that describes the status of the turn light indicator.
+ */
+typedef SDLEnum SDLTurnSignal SDL_SWIFT_ENUM;
+
+/*
+ * Turn signal is OFF
+ */
+extern SDLTurnSignal const SDLTurnSignalOff;
+
+/*
+ * Left turn signal is on
+ */
+extern SDLTurnSignal const SDLTurnSignalLeft;
+
+/*
+ * Right turn signal is on
+ */
+extern SDLTurnSignal const SDLTurnSignalRight;
+
+/*
+ * Both signals (left and right) are on
+ */
+extern SDLTurnSignal const SDLTurnSignalBoth;
diff --git a/SmartDeviceLink/SDLTurnSignal.m b/SmartDeviceLink/SDLTurnSignal.m
new file mode 100644
index 000000000..dedd49e72
--- /dev/null
+++ b/SmartDeviceLink/SDLTurnSignal.m
@@ -0,0 +1,14 @@
+//
+// SDLTurnSignal.m
+// SmartDeviceLink
+//
+// Created by Nicole on 7/19/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import "SDLTurnSignal.h"
+
+SDLTurnSignal const SDLTurnSignalOff = @"OFF";
+SDLTurnSignal const SDLTurnSignalLeft = @"LEFT";
+SDLTurnSignal const SDLTurnSignalRight = @"RIGHT";
+SDLTurnSignal const SDLTurnSignalBoth = @"BOTH";
diff --git a/SmartDeviceLink/SDLUnsubscribeVehicleData.h b/SmartDeviceLink/SDLUnsubscribeVehicleData.h
index 5ba4d627f..ace3cf584 100644
--- a/SmartDeviceLink/SDLUnsubscribeVehicleData.h
+++ b/SmartDeviceLink/SDLUnsubscribeVehicleData.h
@@ -21,128 +21,212 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLUnsubscribeVehicleData : SDLRPCRequest
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus;
-
/**
- * A boolean value. If true, unsubscribes Gps data
+ * Convenience init for unsubscribing to all possible vehicle data items.
+ *
+ * @param accelerationPedalPosition Unsubscribe to accelerationPedalPosition
+ * @param airbagStatus Unsubscribe to airbagStatus
+ * @param beltStatus Unsubscribe to beltStatus
+ * @param bodyInformation Unsubscribe to bodyInformation
+ * @param clusterModeStatus Unsubscribe to clusterModeStatus
+ * @param deviceStatus Unsubscribe to deviceStatus
+ * @param driverBraking Unsubscribe to driverBraking
+ * @param eCallInfo Unsubscribe to eCallInfo
+ * @param emergencyEvent Unsubscribe to emergencyEvent
+ * @param engineTorque Unsubscribe to engineTorque
+ * @param externalTemperature Unsubscribe to externalTemperature
+ * @param fuelLevel Unsubscribe to fuelLevel
+ * @param fuelLevelState Unsubscribe to fuelLevelState
+ * @param gps Unsubscribe to gps
+ * @param headLampStatus Unsubscribe to headLampStatus
+ * @param instantFuelConsumption Unsubscribe to instantFuelConsumption
+ * @param myKey Unsubscribe to myKey
+ * @param odometer Unsubscribe to odometer
+ * @param prndl Unsubscribe to prndl
+ * @param rpm Unsubscribe to rpm
+ * @param speed Unsubscribe to speed
+ * @param steeringWheelAngle Unsubscribe to steeringWheelAngle
+ * @param tirePressure Unsubscribe to tirePressure
+ * @param wiperStatus Unsubscribe to wiperStatus
+ * @return A SDLUnsubscribeVehicleData object
+ */
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use 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: instead");
+
+/**
+ * Convenience init for unsubscribing to all possible vehicle data items.
+ *
+ * @param accelerationPedalPosition Unsubscribe to accelerationPedalPosition
+ * @param airbagStatus Unsubscribe to airbagStatus
+ * @param beltStatus Unsubscribe to beltStatus
+ * @param bodyInformation Unsubscribe to bodyInformation
+ * @param clusterModeStatus Unsubscribe to clusterModeStatus
+ * @param deviceStatus Unsubscribe to deviceStatus
+ * @param driverBraking Unsubscribe to driverBraking
+ * @param eCallInfo Unsubscribe to eCallInfo
+ * @param electronicParkBrakeStatus Unsubscribe to electronicParkBrakeStatus
+ * @param emergencyEvent Unsubscribe to emergencyEvent
+ * @param engineOilLife Unsubscribe to engineOilLife
+ * @param engineTorque Unsubscribe to engineTorque
+ * @param externalTemperature Unsubscribe to externalTemperature
+ * @param fuelLevel Unsubscribe to fuelLevel
+ * @param fuelLevelState Unsubscribe to fuelLevelState
+ * @param fuelRange Unsubscribe to fuelRange
+ * @param gps Unsubscribe to gps
+ * @param headLampStatus Unsubscribe to headLampStatus
+ * @param instantFuelConsumption Unsubscribe to instantFuelConsumption
+ * @param myKey Unsubscribe to myKey
+ * @param odometer Unsubscribe to odometer
+ * @param prndl Unsubscribe to prndl
+ * @param rpm Unsubscribe to rpm
+ * @param speed Unsubscribe to speed
+ * @param steeringWheelAngle Unsubscribe to steeringWheelAngle
+ * @param tirePressure Unsubscribe to tirePressure
+ * @param turnSignal Unsubscribe to turnSignal
+ * @param wiperStatus Unsubscribe to wiperStatus
+ * @return A SDLUnsubscribeVehicleData object
+ */
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus;
+
+/**
+ * If true, unsubscribes from GPS
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *gps;
/**
- * A boolean value. If true, unsubscribes speed data
+ * If true, unsubscribes from Speed
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *speed;
/**
- * A boolean value. If true, unsubscribe data
+ * If true, unsubscribes from RPM
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *rpm;
/**
- * A boolean value. If true, unsubscribes FuelLevel data
+ * If true, unsubscribes from Fuel Level
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel;
/**
- * A boolean value. If true, unsubscribes fuelLevel_State data
+ * If true, unsubscribes from Fuel Level State
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel_State;
/**
- * A boolean value. If true, unsubscribes instantFuelConsumption data
+ * If true, unsubscribes from Fuel Range
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelRange;
+
+/**
+ * If true, unsubscribes from Instant Fuel Consumption
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *instantFuelConsumption;
/**
- * A boolean value. If true, unsubscribes externalTemperature data
+ * If true, unsubscribes from External Temperature
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *externalTemperature;
/**
- * A boolean value. If true, unsubscribes Currently selected gear data
+ * If true, unsubscribes from PRNDL
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *prndl;
/**
- * A boolean value. If true, unsubscribes tire pressure status data
+ * If true, unsubscribes from Tire Pressure
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *tirePressure;
/**
- * A boolean value. If true, unsubscribes odometer data
+ * If true, unsubscribes from Odometer
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *odometer;
/**
- * A boolean value. If true, unsubscribes belt Status data
+ * If true, unsubscribes from Belt Status
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *beltStatus;
/**
- * A boolean value. If true, unsubscribes body Information data
+ * If true, unsubscribes from Body Information
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *bodyInformation;
/**
- * A boolean value. If true, unsubscribes device Status data
+ * If true, unsubscribes from Device Status
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *deviceStatus;
/**
- * A boolean value. If true, unsubscribes driver Braking data
+ * If true, unsubscribes from Driver Braking
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *driverBraking;
/**
- * A boolean value. If true, unsubscribes wiper Status data
+ * If true, unsubscribes from Wiper Status
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *wiperStatus;
/**
- * A boolean value. If true, unsubscribes Head Lamp Status data
+ * If true, unsubscribes from Head Lamp Status
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *headLampStatus;
/**
- * A boolean value. If true, unsubscribes Engine Torque data
+ * If true, unsubscribes from Engine Oil Life
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *engineOilLife;
+
+/**
+ * If true, unsubscribes from Engine Torque
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *engineTorque;
/**
- * A boolean value. If true, unsubscribes accPedalPosition data
+ * If true, unsubscribes from Acc Pedal Position
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *accPedalPosition;
/**
- If true, unsubscribes from steeringWheelAngle
+ * If true, unsubscribes from Steering Wheel Angle data
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *steeringWheelAngle;
/**
- If true, unsubscribes from eCallInfo
+ * If true, unsubscribes from eCallInfo
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *eCallInfo;
/**
- If true, unsubscribes from airbagStatus
+ * If true, unsubscribes from Airbag Status
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *airbagStatus;
/**
- If true, unsubscribes from emergencyEvent
+ * If true, unsubscribes from Emergency Event
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *emergencyEvent;
/**
- If true, unsubscribes from clusterModeStatus
+ * If true, unsubscribes from Cluster Mode Status
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *clusterModeStatus;
/**
- If true, unsubscribes from myKey
+ * If true, unsubscribes from My Key
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *myKey;
+/**
+ A boolean value. If true, unsubscribes to the Electronic Parking Brake Status
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *electronicParkBrakeStatus;
+
+/**
+ A boolean value. If true, unsubscribes to the Turn Signal
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *turnSignal;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLUnsubscribeVehicleData.m b/SmartDeviceLink/SDLUnsubscribeVehicleData.m
index ec5312268..3ecf16bfc 100644
--- a/SmartDeviceLink/SDLUnsubscribeVehicleData.m
+++ b/SmartDeviceLink/SDLUnsubscribeVehicleData.m
@@ -18,6 +18,10 @@ NS_ASSUME_NONNULL_BEGIN
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus {
+ return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:NO emergencyEvent:emergencyEvent engineOilLife:NO engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:NO gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:NO wiperStatus:wiperStatus];
+}
+
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus {
self = [self init];
if (!self) {
return nil;
@@ -31,11 +35,14 @@ NS_ASSUME_NONNULL_BEGIN
self.deviceStatus = @(deviceStatus);
self.driverBraking = @(driverBraking);
self.eCallInfo = @(eCallInfo);
+ self.electronicParkBrakeStatus = @(electronicParkBrakeStatus);
self.emergencyEvent = @(emergencyEvent);
+ self.engineOilLife = @(engineOilLife);
self.engineTorque = @(engineTorque);
self.externalTemperature = @(externalTemperature);
self.fuelLevel = @(fuelLevel);
self.fuelLevel_State = @(fuelLevelState);
+ self.fuelRange = @(fuelRange);
self.myKey = @(myKey);
self.odometer = @(odometer);
self.gps = @(gps);
@@ -46,6 +53,7 @@ NS_ASSUME_NONNULL_BEGIN
self.speed = @(speed);
self.steeringWheelAngle = @(steeringWheelAngle);
self.tirePressure = @(tirePressure);
+ self.turnSignal = @(turnSignal);
self.wiperStatus = @(wiperStatus);
return self;
@@ -91,6 +99,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameFuelLevelState];
}
+- (void)setFuelRange:(nullable NSNumber<SDLBool> *)fuelRange {
+ [parameters sdl_setObject:fuelRange forName:SDLNameFuelRange];
+}
+
+- (nullable NSNumber<SDLBool> *)fuelRange {
+ return [parameters sdl_objectForName:SDLNameFuelRange];
+}
+
- (void)setInstantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption {
[parameters sdl_setObject:instantFuelConsumption forName:SDLNameInstantFuelConsumption];
}
@@ -179,6 +195,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameHeadLampStatus];
}
+- (void)setEngineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife {
+ [parameters sdl_setObject:engineOilLife forName:SDLNameEngineOilLife];
+}
+
+- (nullable NSNumber<SDLBool> *)engineOilLife {
+ return [parameters sdl_objectForName:SDLNameEngineOilLife];
+}
+
- (void)setEngineTorque:(nullable NSNumber<SDLBool> *)engineTorque {
[parameters sdl_setObject:engineTorque forName:SDLNameEngineTorque];
}
@@ -243,6 +267,22 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameMyKey];
}
+- (void)setElectronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus {
+ [parameters sdl_setObject:electronicParkBrakeStatus forName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (nullable NSNumber<SDLBool> *)electronicParkBrakeStatus {
+ return [parameters sdl_objectForName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (void)setTurnSignal:(nullable NSNumber<SDLBool> *)turnSignal {
+ [parameters sdl_setObject:turnSignal forName:SDLNameTurnSignal];
+}
+
+- (nullable NSNumber<SDLBool> *)turnSignal {
+ return [parameters sdl_objectForName:SDLNameTurnSignal];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h
index 6d3be038a..0500a1921 100644
--- a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h
+++ b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h
@@ -16,173 +16,201 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLUnsubscribeVehicleDataResponse : SDLRPCResponse
/**
- The result of requesting to subscribe to the GPSData.
+ The result of requesting to unsubscribe to the GPSData.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *gps;
/**
- The result of requesting to subscribe to the vehicle speed in kilometers per hour.
+ The result of requesting to unsubscribe to the vehicle speed in kilometers per hour.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *speed;
/**
- The result of requesting to subscribe to the number of revolutions per minute of the engine.
+ The result of requesting to unsubscribe to the number of revolutions per minute of the engine.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *rpm;
/**
- The result of requesting to subscribe to the fuel level in the tank (percentage)
+ The result of requesting to unsubscribe to the fuel level in the tank (percentage)
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel;
/**
- The result of requesting to subscribe to the fuel level state.
+ The result of requesting to unsubscribe to the fuel level state.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel_State;
/**
- The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.
+ The result of requesting to unsubscribe to the fuel range.
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelRange;
+
+/**
+ The result of requesting to unsubscribe to the instantaneous fuel consumption in microlitres.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *instantFuelConsumption;
/**
- The result of requesting to subscribe to the external temperature in degrees celsius.
+ The result of requesting to unsubscribe to the external temperature in degrees celsius.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *externalTemperature;
/**
- The result of requesting to subscribe to the PRNDL status.
+ The result of requesting to unsubscribe to the PRNDL status.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *prndl;
/**
- The result of requesting to subscribe to the tireStatus.
+ The result of requesting to unsubscribe to the tireStatus.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *tirePressure;
/**
- The result of requesting to subscribe to the odometer in km.
+ The result of requesting to unsubscribe to the odometer in km.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *odometer;
/**
- The result of requesting to subscribe to the status of the seat belts.
+ The result of requesting to unsubscribe to the status of the seat belts.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *beltStatus;
/**
- The result of requesting to subscribe to the body information including power modes.
+ The result of requesting to unsubscribe to the body information including power modes.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *bodyInformation;
/**
- The result of requesting to subscribe to the device status including signal and battery strength.
+ The result of requesting to unsubscribe to the device status including signal and battery strength.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *deviceStatus;
/**
- The result of requesting to subscribe to the status of the brake pedal.
+ The result of requesting to unsubscribe to the status of the brake pedal.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *driverBraking;
/**
- The result of requesting to subscribe to the status of the wipers.
+ The result of requesting to unsubscribe to the status of the wipers.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *wiperStatus;
/**
- The result of requesting to subscribe to the status of the head lamps.
+ The result of requesting to unsubscribe to the status of the head lamps.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *headLampStatus;
/**
- The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.
+ The result of requesting to unsubscribe to the estimated percentage of remaining oil life of the engine.
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *engineOilLife;
+
+/**
+ The result of requesting to unsubscribe to the torque value for engine (in Nm) on non-diesel variants.
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *engineTorque;
/**
- The result of requesting to subscribe to the accelerator pedal position (percentage depressed)
+ The result of requesting to unsubscribe to the accelerator pedal position (percentage depressed)
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *accPedalPosition;
/**
- The result of requesting to subscribe to the current angle of the steering wheel (in deg)
+ The result of requesting to unsubscribe to the current angle of the steering wheel (in deg)
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *steeringWheelAngle;
/**
- The result of requesting to subscribe to the emergency call info
+ The result of requesting to unsubscribe to the emergency call info
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *eCallInfo;
/**
- The result of requesting to subscribe to the airbag status
+ The result of requesting to unsubscribe to the airbag status
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *airbagStatus;
/**
- The result of requesting to subscribe to the emergency event
+ The result of requesting to unsubscribe to the emergency event
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *emergencyEvent;
/**
- The result of requesting to subscribe to the cluster modes
+ The result of requesting to unsubscribe to the cluster modes
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *clusterModes;
/**
- The result of requesting to subscribe to the myKey status
+ The result of requesting to unsubscribe to the myKey status
Optional
*/
@property (strong, nonatomic, nullable) SDLVehicleDataResult *myKey;
+/**
+ The result of requesting to unsubscribe to the electronic parking brake status
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *electronicParkBrakeStatus;
+
+/**
+ The result of requesting to unsubscribe to the turn signal
+
+ Optional
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *turnSignal;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m
index 5eb911d42..6ad213dee 100644
--- a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m
+++ b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m
@@ -58,6 +58,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameFuelLevelState ofClass:SDLVehicleDataResult.class];
}
+- (void)setFuelRange:(nullable SDLVehicleDataResult *)fuelRange {
+ [parameters sdl_setObject:fuelRange forName:SDLNameFuelRange];
+}
+
+- (nullable SDLVehicleDataResult *)fuelRange {
+ return [parameters sdl_objectForName:SDLNameFuelRange ofClass:SDLVehicleDataResult.class];
+}
+
- (void)setInstantFuelConsumption:(nullable SDLVehicleDataResult *)instantFuelConsumption {
[parameters sdl_setObject:instantFuelConsumption forName:SDLNameInstantFuelConsumption];
}
@@ -146,6 +154,14 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameHeadLampStatus ofClass:SDLVehicleDataResult.class];
}
+- (void)setEngineOilLife:(nullable SDLVehicleDataResult *)engineOilLife {
+ [parameters sdl_setObject:engineOilLife forName:SDLNameEngineOilLife];
+}
+
+- (nullable SDLVehicleDataResult *)engineOilLife {
+ return [parameters sdl_objectForName:SDLNameEngineOilLife];
+}
+
- (void)setEngineTorque:(nullable SDLVehicleDataResult *)engineTorque {
[parameters sdl_setObject:engineTorque forName:SDLNameEngineTorque];
}
@@ -210,6 +226,21 @@ NS_ASSUME_NONNULL_BEGIN
return [parameters sdl_objectForName:SDLNameMyKey ofClass:SDLVehicleDataResult.class];
}
+- (void)setElectronicParkBrakeStatus:(nullable SDLVehicleDataResult *)electronicParkBrakeStatus {
+ [parameters sdl_setObject:electronicParkBrakeStatus forName:SDLNameElectronicParkBrakeStatus];
+}
+
+- (nullable SDLVehicleDataResult *)electronicParkBrakeStatus {
+ return [parameters sdl_objectForName:SDLNameElectronicParkBrakeStatus ofClass:[SDLVehicleDataResult class]];
+}
+
+- (void)setTurnSignal:(nullable SDLVehicleDataResult *)turnSignal {
+ [parameters sdl_setObject:turnSignal forName:SDLNameTurnSignal];
+}
+
+- (nullable SDLVehicleDataResult *)turnSignal {
+ return [parameters sdl_objectForName:SDLNameTurnSignal ofClass:SDLVehicleDataResult.class];
+}
@end
diff --git a/SmartDeviceLink/SDLUploadFileOperation.m b/SmartDeviceLink/SDLUploadFileOperation.m
index a7366c7c3..620d0f833 100644
--- a/SmartDeviceLink/SDLUploadFileOperation.m
+++ b/SmartDeviceLink/SDLUploadFileOperation.m
@@ -66,7 +66,7 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)sdl_sendFile:(SDLFile *)file mtuSize:(NSUInteger)mtuSize withCompletion:(SDLFileManagerUploadCompletionHandler)completion {
__block NSError *streamError = nil;
- __block NSUInteger bytesAvailable = 0;
+ __block NSUInteger bytesAvailable = 2000000000;
__block NSInteger highestCorrelationIDReceived = -1;
if (self.isCancelled) {
@@ -94,9 +94,8 @@ NS_ASSUME_NONNULL_BEGIN
__weak typeof(self) weakself = self;
dispatch_group_notify(putFileGroup, dispatch_get_main_queue(), ^{
typeof(weakself) strongself = weakself;
-
[weakself sdl_closeInputStream];
-
+
if (streamError != nil || strongself.isCancelled) {
completion(NO, bytesAvailable, streamError);
} else {
@@ -110,19 +109,26 @@ NS_ASSUME_NONNULL_BEGIN
for (int i = 0; i < (((file.fileSize - 1) / mtuSize) + 1); i++) {
dispatch_group_enter(putFileGroup);
- // The putfile's length parameter is based on the current offset
- SDLPutFile *putFile = [[SDLPutFile alloc] initWithFileName:file.name fileType:file.fileType persistentFile:file.isPersistent];
- putFile.offset = @(currentOffset);
- putFile.length = @([self.class sdl_getPutFileLengthForOffset:currentOffset fileSize:(NSUInteger)file.fileSize mtuSize:mtuSize]);
-
// Get a chunk of data from the input stream
- NSUInteger dataSize = [self.class sdl_getDataSizeForOffset:currentOffset fileSize:file.fileSize mtuSize:mtuSize];
- putFile.bulkData = [self.class sdl_getDataChunkWithSize:dataSize inputStream:self.inputStream];
- currentOffset += dataSize;
+ UInt32 putFileLength = (UInt32)[self.class sdl_getPutFileLengthForOffset:currentOffset fileSize:(NSUInteger)file.fileSize mtuSize:mtuSize];
+ NSUInteger putFileBulkDataSize = [self.class sdl_getDataSizeForOffset:currentOffset fileSize:file.fileSize mtuSize:mtuSize];
+ NSData *putFileBulkData = [self.class sdl_getDataChunkWithSize:putFileBulkDataSize inputStream:self.inputStream];
+
+ SDLPutFile *putFile = [[SDLPutFile alloc]
+ initWithFileName:file.name
+ fileType:file.fileType
+ persistentFile:file.isPersistent
+ systemFile:NO
+ offset:(UInt32)currentOffset
+ length:putFileLength
+ bulkData:putFileBulkData];
+
+ currentOffset += putFileBulkDataSize;
__weak typeof(self) weakself = self;
[self.connectionManager sendConnectionManagerRequest:putFile withResponseHandler:^(__kindof SDLRPCRequest *_Nullable request, __kindof SDLRPCResponse *_Nullable response, NSError *_Nullable error) {
typeof(weakself) strongself = weakself;
+ SDLPutFileResponse *putFileResponse = (SDLPutFileResponse *)response;
// Check if the upload process has been cancelled by another packet. If so, stop the upload process.
// TODO: Is this the right way to handle this case? Should we just abort everything in the future? Should we be deleting what we sent? Should we have an automatic retry strategy based on what the error was?
@@ -142,7 +148,9 @@ NS_ASSUME_NONNULL_BEGIN
// If no errors, watch for a response containing the amount of storage left on the SDL Core
if ([self.class sdl_newHighestCorrelationID:request highestCorrelationIDReceived:highestCorrelationIDReceived]) {
highestCorrelationIDReceived = [request.correlationID integerValue];
- bytesAvailable = [(SDLPutFileResponse *)response spaceAvailable].unsignedIntegerValue;
+
+ // If spaceAvailable is nil, set it to the max value
+ bytesAvailable = putFileResponse.spaceAvailable != nil ? putFileResponse.spaceAvailable.unsignedIntegerValue : 2000000000;
}
dispatch_group_leave(putFileGroup);
diff --git a/SmartDeviceLink/SDLV2ProtocolHeader.m b/SmartDeviceLink/SDLV2ProtocolHeader.m
index ce426fd4d..d89fdeb1f 100644
--- a/SmartDeviceLink/SDLV2ProtocolHeader.m
+++ b/SmartDeviceLink/SDLV2ProtocolHeader.m
@@ -97,6 +97,8 @@ const int ProtocolV2HeaderByteSize = 12;
if (self.frameData >= 0 && self.frameData <= 5) {
NSArray *controlFrameDataNames = @[@"Heartbeat", @"StartSession", @"StartSessionACK", @"StartSessionNACK", @"EndSession", @"EndSessionACK", @"EndSessionNACK"];
frameDataString = controlFrameDataNames[self.frameData];
+ } else if (self.frameData == SDLFrameInfoTransportEventUpdate) {
+ frameDataString = @"TransportEventUpdate";
} else {
frameDataString = @"Reserved";
}
diff --git a/SmartDeviceLink/SDLV2ProtocolMessage.m b/SmartDeviceLink/SDLV2ProtocolMessage.m
index 291dde6a1..65694651e 100644
--- a/SmartDeviceLink/SDLV2ProtocolMessage.m
+++ b/SmartDeviceLink/SDLV2ProtocolMessage.m
@@ -36,8 +36,8 @@ NS_ASSUME_NONNULL_BEGIN
// Create the inner dictionary with the RPC properties
NSMutableDictionary <NSString *, id> *innerDictionary = [[NSMutableDictionary alloc] init];
NSString *functionName = [[SDLFunctionID sharedInstance] functionNameForId:rpcPayload.functionID];
- [innerDictionary setObject:functionName forKey:SDLNameOperationName];
- [innerDictionary setObject:[NSNumber numberWithUnsignedInt:rpcPayload.correlationID] forKey:SDLNameCorrelationId];
+ innerDictionary[SDLNameOperationName] = functionName;
+ innerDictionary[SDLNameCorrelationId] = @(rpcPayload.correlationID);
// Get the json data from the struct
if (rpcPayload.jsonData) {
diff --git a/SmartDeviceLink/SDLVehicleDataType.h b/SmartDeviceLink/SDLVehicleDataType.h
index 1100758b5..4afe818f8 100644
--- a/SmartDeviceLink/SDLVehicleDataType.h
+++ b/SmartDeviceLink/SDLVehicleDataType.h
@@ -85,6 +85,11 @@ extern SDLVehicleDataType const SDLVehicleDataTypeDeviceStatus;
extern SDLVehicleDataType const SDLVehicleDataTypeECallInfo;
/**
+ Vehicle fuel range data
+ */
+extern SDLVehicleDataType const SDLVehicleDataTypeFuelRange;
+
+/**
Vehicle airbag status data
*/
extern SDLVehicleDataType const SDLVehicleDataTypeAirbagStatus;
@@ -125,6 +130,11 @@ extern SDLVehicleDataType const SDLVehicleDataTypeHeadlampStatus;
extern SDLVehicleDataType const SDLVehicleDataTypeBatteryVoltage;
/**
+ Vehicle engine oil life data
+ */
+extern SDLVehicleDataType const SDLVehicleDataTypeEngineOilLife;
+
+/**
Vehicle engine torque data
*/
extern SDLVehicleDataType const SDLVehicleDataTypeEngineTorque;
@@ -138,3 +148,13 @@ extern SDLVehicleDataType const SDLVehicleDataTypeAccelerationPedal;
Vehicle steering wheel data
*/
extern SDLVehicleDataType const SDLVehicleDataTypeSteeringWheel;
+
+/**
+ Vehicle electronic parking brake status data
+ */
+extern SDLVehicleDataType const SDLVehicleDataTypeElectronicParkBrakeStatus;
+
+/**
+ Vehicle turn signal data
+ */
+extern SDLVehicleDataType const SDLVehicleDataTypeTurnSignal;
diff --git a/SmartDeviceLink/SDLVehicleDataType.m b/SmartDeviceLink/SDLVehicleDataType.m
index 49fefdc84..4b37a2456 100644
--- a/SmartDeviceLink/SDLVehicleDataType.m
+++ b/SmartDeviceLink/SDLVehicleDataType.m
@@ -10,6 +10,7 @@ SDLVehicleDataType const SDLVehicleDataTypeRPM = @"VEHICLEDATA_RPM";
SDLVehicleDataType const SDLVehicleDataTypeFuelLevel = @"VEHICLEDATA_FUELLEVEL";
SDLVehicleDataType const SDLVehicleDataTypeFuelLevelState = @"VEHICLEDATA_FUELLEVEL_STATE";
SDLVehicleDataType const SDLVehicleDataTypeFuelConsumption = @"VEHICLEDATA_FUELCONSUMPTION";
+SDLVehicleDataType const SDLVehicleDataTypeFuelRange = @"VEHICLEDATA_FUELRANGE";
SDLVehicleDataType const SDLVehicleDataTypeExternalTemperature = @"VEHICLEDATA_EXTERNTEMP";
SDLVehicleDataType const SDLVehicleDataTypeVIN = @"VEHICLEDATA_VIN";
SDLVehicleDataType const SDLVehicleDataTypePRNDL = @"VEHICLEDATA_PRNDL";
@@ -27,6 +28,10 @@ SDLVehicleDataType const SDLVehicleDataTypeBraking = @"VEHICLEDATA_BRAKING";
SDLVehicleDataType const SDLVehicleDataTypeWiperStatus = @"VEHICLEDATA_WIPERSTATUS";
SDLVehicleDataType const SDLVehicleDataTypeHeadlampStatus = @"VEHICLEDATA_HEADLAMPSTATUS";
SDLVehicleDataType const SDLVehicleDataTypeBatteryVoltage = @"VEHICLEDATA_BATTVOLTAGE";
+SDLVehicleDataType const SDLVehicleDataTypeEngineOilLife = @"VEHICLEDATA_ENGINEOILLIFE";
SDLVehicleDataType const SDLVehicleDataTypeEngineTorque = @"VEHICLEDATA_ENGINETORQUE";
SDLVehicleDataType const SDLVehicleDataTypeAccelerationPedal = @"VEHICLEDATA_ACCPEDAL";
SDLVehicleDataType const SDLVehicleDataTypeSteeringWheel = @"VEHICLEDATA_STEERINGWHEEL";
+SDLVehicleDataType const SDLVehicleDataTypeElectronicParkBrakeStatus = @"VEHICLEDATA_ELECTRONICPARKBRAKESTATUS";
+SDLVehicleDataType const SDLVehicleDataTypeTurnSignal = @"VEHICLEDATA_TURNSIGNAL";
+
diff --git a/SmartDeviceLink/SDLVideoStreamingState.h b/SmartDeviceLink/SDLVideoStreamingState.h
new file mode 100644
index 000000000..6ebe98b72
--- /dev/null
+++ b/SmartDeviceLink/SDLVideoStreamingState.h
@@ -0,0 +1,24 @@
+//
+// SDLVideoStreamingState.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/19/18.
+// Copyright © 2018 Livio. All rights reserved.
+//
+
+#import "SDLEnum.h"
+
+/**
+ * Enum for each type of video streaming protocol, used in VideoStreamingFormat
+ */
+typedef SDLEnum SDLVideoStreamingState SDL_SWIFT_ENUM;
+
+/**
+ * STREAMABLE, the current app is allowed to stream video
+ */
+extern SDLVideoStreamingState const SDLVideoStreamingStateStreamable;
+
+/**
+ * NOT_STREAMABLE, the current app is not allowed to stream video
+ */
+extern SDLVideoStreamingState const SDLVideoStreamingStateNotStreamable;
diff --git a/SmartDeviceLink/SDLVideoStreamingState.m b/SmartDeviceLink/SDLVideoStreamingState.m
new file mode 100644
index 000000000..5d4d8c8f5
--- /dev/null
+++ b/SmartDeviceLink/SDLVideoStreamingState.m
@@ -0,0 +1,12 @@
+//
+// SDLVideoStreamingState.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/19/18.
+// Copyright © 2018 Livio. All rights reserved.
+//
+
+#import "SDLVideoStreamingState.h"
+
+SDLVideoStreamingState const SDLVideoStreamingStateStreamable = @"STREAMABLE";
+SDLVideoStreamingState const SDLVideoStreamingStateNotStreamable = @"NOT_STREAMABLE";
diff --git a/SmartDeviceLink/SmartDeviceLink.h b/SmartDeviceLink/SmartDeviceLink.h
index 6a9fc4da7..3dfd5e2df 100644
--- a/SmartDeviceLink/SmartDeviceLink.h
+++ b/SmartDeviceLink/SmartDeviceLink.h
@@ -134,6 +134,7 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLOnLanguageChange.h"
#import "SDLOnLockScreenStatus.h"
#import "SDLOnPermissionsChange.h"
+#import "SDLOnRCStatus.h"
#import "SDLOnSyncPData.h"
#import "SDLOnSystemRequest.h"
#import "SDLOnTBTClientState.h"
@@ -144,6 +145,8 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
// Structs
#import "SDLAirbagStatus.h"
#import "SDLAppInfo.h"
+#import "SDLAudioControlData.h"
+#import "SDLAudioControlCapabilities.h"
#import "SDLAudioPassThruCapabilities.h"
#import "SDLBeltStatus.h"
#import "SDLBodyInformation.h"
@@ -159,17 +162,27 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLDisplayCapabilities.h"
#import "SDLECallInfo.h"
#import "SDLEmergencyEvent.h"
+#import "SDLFuelRange.h"
+#import "SDLEqualizerSettings.h"
#import "SDLGPSData.h"
#import "SDLHapticRect.h"
#import "SDLHMICapabilities.h"
#import "SDLHMIPermissions.h"
+#import "SDLHMISettingsControlData.h"
+#import "SDLHMISettingsControlCapabilities.h"
#import "SDLHeadLampStatus.h"
#import "SDLImage.h"
#import "SDLImageField.h"
#import "SDLImageResolution.h"
#import "SDLKeyboardProperties.h"
+#import "SDLLightCapabilities.h"
+#import "SDLLightControlCapabilities.h"
+#import "SDLLightControlData.h"
+#import "SDLLightState.h"
#import "SDLLocationCoordinate.h"
#import "SDLLocationDetails.h"
+#import "SDLMassageCushionFirmness.h"
+#import "SDLMassageModeData.h"
#import "SDLMenuParams.h"
#import "SDLMetadataTags.h"
#import "SDLModuleData.h"
@@ -185,15 +198,22 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLRDSData.h"
#import "SDLRectangle.h"
#import "SDLRemoteControlCapabilities.h"
+#import "SDLRGBColor.h"
#import "SDLScreenParams.h"
+#import "SDLSeatControlCapabilities.h"
+#import "SDLSeatControlData.h"
+#import "SDLSeatMemoryAction.h"
#import "SDLSingleTireStatus.h"
+#import "SDLSISData.h"
#import "SDLSoftButton.h"
#import "SDLSoftButtonCapabilities.h"
#import "SDLStartTime.h"
+#import "SDLStationIDNumber.h"
#import "SDLSyncMsgVersion.h"
#import "SDLSystemCapability.h"
#import "SDLTTSChunk.h"
#import "SDLTemperature.h"
+#import "SDLTemplateColorScheme.h"
#import "SDLTextField.h"
#import "SDLTireStatus.h"
#import "SDLTouchCoord.h"
@@ -211,6 +231,7 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLAppHMIType.h"
#import "SDLAppInterfaceUnregisteredReason.h"
#import "SDLAudioStreamingState.h"
+#import "SDLAudioStreamingIndicator.h"
#import "SDLAudioType.h"
#import "SDLBitsPerSample.h"
#import "SDLButtonEventMode.h"
@@ -224,12 +245,16 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLDeliveryMode.h"
#import "SDLDeviceLevelStatus.h"
#import "SDLDimension.h"
+#import "SDLDisplayMode.h"
#import "SDLDisplayType.h"
+#import "SDLDistanceUnit.h"
#import "SDLDriverDistractionState.h"
#import "SDLECallConfirmationStatus.h"
+#import "SDLElectronicParkBrakeStatus.h"
#import "SDLEmergencyEventType.h"
#import "SDLFileType.h"
#import "SDLFuelCutoffStatus.h"
+#import "SDLFuelType.h"
#import "SDLGlobalProperty.h"
#import "SDLHMILevel.h"
#import "SDLHMIZoneCapabilities.h"
@@ -244,7 +269,12 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLLanguage.h"
#import "SDLLayoutMode.h"
#import "SDLLockScreenStatus.h"
+#import "SDLLightName.h"
+#import "SDLLightStatus.h"
#import "SDLMaintenanceModeStatus.h"
+#import "SDLMassageCushion.h"
+#import "SDLMassageMode.h"
+#import "SDLMassageZone.h"
#import "SDLMediaClockFormat.h"
#import "SDLMetadataType.h"
#import "SDLModuleType.h"
@@ -261,8 +291,11 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLRequestType.h"
#import "SDLResult.h"
#import "SDLSamplingRate.h"
+#import "SDLSeatMemoryActionType.h"
+#import "SDLSupportedSeat.h"
#import "SDLSoftButtonType.h"
#import "SDLSpeechCapabilities.h"
+#import "SDLStaticIconName.h"
#import "SDLSystemAction.h"
#import "SDLSystemCapabilityType.h"
#import "SDLSystemContext.h"
@@ -272,7 +305,9 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLTextFieldName.h"
#import "SDLTimerMode.h"
#import "SDLTouchType.h"
+#import "SDLTPMS.h"
#import "SDLTriggerSource.h"
+#import "SDLTurnSignal.h"
#import "SDLUpdateMode.h"
#import "SDLVehicleDataActiveStatus.h"
#import "SDLVehicleDataEventStatus.h"
@@ -283,6 +318,7 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLVentilationMode.h"
#import "SDLVideoStreamingCodec.h"
#import "SDLVideoStreamingProtocol.h"
+#import "SDLVideoStreamingState.h"
#import "SDLVrCapabilities.h"
#import "SDLWarningLightStatus.h"
#import "SDLWayPointType.h"
@@ -291,6 +327,7 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
// Developer API
// Configurations
#import "SDLConfiguration.h"
+#import "SDLFileManagerConfiguration.h"
#import "SDLLifecycleConfiguration.h"
#import "SDLLifecycleConfigurationUpdate.h"
#import "SDLLockScreenConfiguration.h"
@@ -335,6 +372,11 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLMenuCell.h"
#import "SDLVoiceCommand.h"
+#import "SDLChoiceCell.h"
+#import "SDLChoiceSet.h"
+#import "SDLChoiceSetDelegate.h"
+#import "SDLKeyboardDelegate.h"
+
// Touches
#import "SDLPinchGesture.h"
#import "SDLTouch.h"
diff --git a/SmartDeviceLinkSwift/Info.plist b/SmartDeviceLinkSwift/Info.plist
index d446c7275..beff778ad 100644
--- a/SmartDeviceLinkSwift/Info.plist
+++ b/SmartDeviceLinkSwift/Info.plist
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
- <string>6.0.2</string>
+ <string>6.1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLArtworkSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLArtworkSpec.m
index 8e787411d..219479429 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLArtworkSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLArtworkSpec.m
@@ -15,11 +15,13 @@ describe(@"SDLArtwork", ^{
__block UIImage *testImagePNG = nil;
__block UIImage *testImagePNG2 = nil;
__block UIImage *testImageJPG = nil;
+ __block UIImage *testImagePNGTemplate = nil;
beforeEach(^{
testImagePNG = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil];
testImagePNG2 = [UIImage imageNamed:@"TestLockScreenAppIcon" inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil];
testImageJPG = [UIImage imageNamed:@"testImageJPG.jpg" inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil];
+ testImagePNGTemplate = [[UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
});
context(@"On creation", ^{
@@ -29,25 +31,39 @@ describe(@"SDLArtwork", ^{
it(@"should set the image data successfully for an image with a name", ^ {
expectedImageData = UIImagePNGRepresentation(testImagePNG);
expectedArtwork = [[SDLArtwork alloc] initWithImage:testImagePNG name:@"testImage" persistent:true asImageFormat:SDLArtworkImageFormatPNG];
+
+ expect(expectedImageData).to(equal(expectedArtwork.data));
});
it(@"should set the image data successfully for an image without a name", ^ {
expectedImageData = UIImagePNGRepresentation(testImagePNG);
expectedArtwork = [[SDLArtwork alloc] initWithImage:testImagePNG persistent:true asImageFormat:SDLArtworkImageFormatPNG];
+
+ expect(expectedImageData).to(equal(expectedArtwork.data));
});
it(@"should not set the image data if the image is nil", ^{
UIImage *testImage = nil;
expectedImageData = UIImagePNGRepresentation(testImage);
expectedArtwork = [[SDLArtwork alloc] initWithImage:testImage persistent:true asImageFormat:SDLArtworkImageFormatPNG];
+
+ expect(expectedArtwork.data).to(beNil());
});
- afterEach(^{
- if (expectedImageData == nil) {
- expect(expectedArtwork.data).to(beNil());
- } else {
- expect(expectedImageData).to(equal(expectedArtwork.data));
- }
+ describe(@"Setting the image data should also set whether or not the image is a template", ^{
+ it(@"should be a template if the UIImage is templated", ^{
+ expectedImageData = UIImagePNGRepresentation(testImagePNGTemplate);
+ expectedArtwork = [[SDLArtwork alloc] initWithImage:testImagePNGTemplate persistent:true asImageFormat:SDLArtworkImageFormatPNG];
+
+ expect(expectedArtwork.isTemplate).to(beTrue());
+ });
+
+ it(@"should not be a template if the UIImage is not templated", ^{
+ expectedImageData = UIImagePNGRepresentation(testImagePNG);
+ expectedArtwork = [[SDLArtwork alloc] initWithImage:testImagePNG persistent:true asImageFormat:SDLArtworkImageFormatPNG];
+
+ expect(expectedArtwork.isTemplate).to(beFalse());
+ });
});
});
@@ -89,6 +105,7 @@ describe(@"SDLArtwork", ^{
it(@"should create a PNG image successfully", ^{
expectedImageFormat = SDLFileTypePNG;
expectedImageData = UIImagePNGRepresentation(testImagePNG);
+
expectedArtwork = [[SDLArtwork alloc] initWithImage:testImagePNG name:@"testImagePNG" persistent:true asImageFormat:SDLArtworkImageFormatPNG];
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLAsynchronousRPCRequestOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLAsynchronousRPCRequestOperationSpec.m
index eed4efa81..7cec8f3e5 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLAsynchronousRPCRequestOperationSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLAsynchronousRPCRequestOperationSpec.m
@@ -17,7 +17,7 @@ describe(@"sending asynchronous requests", ^{
__block NSMutableArray<SDLAddCommand *> *sendRequests = nil;
__block NSMutableDictionary<NSNumber<SDLInt> *, TestRequestProgressResponse *> *testProgressResponses;
- __block NSMutableArray<SDLRPCResponse *> *resultResponses = [NSMutableArray array];
+ __block NSMutableArray<SDLRPCResponse *> *resultResponses = nil;
beforeEach(^{
testOperation = nil;
@@ -25,6 +25,7 @@ describe(@"sending asynchronous requests", ^{
sendRequests = [NSMutableArray array];
testProgressResponses = [NSMutableDictionary dictionary];
+ resultResponses = [NSMutableArray array];
testOperationQueue = [[NSOperationQueue alloc] init];
testOperationQueue.name = @"com.sdl.asynchronousRPCOp.testqueue";
@@ -62,6 +63,32 @@ describe(@"sending asynchronous requests", ^{
});
});
+ context(@"when request are cancelled", ^{
+ beforeEach(^{
+ for (int i = 0; i < 3; i++) {
+ SDLAddCommand *addCommand = [[SDLAddCommand alloc] init];
+ addCommand.correlationID = @(i);
+ [sendRequests addObject:addCommand];
+
+ testProgressResponses[addCommand.correlationID] = [[TestRequestProgressResponse alloc] initWithCorrelationId:addCommand.correlationID percentComplete:((float)(i+1)/3.0) error:nil];
+ }
+ });
+
+ it(@"should fail correctly", ^{
+ testOperation = [[SDLAsynchronousRPCRequestOperation alloc] initWithConnectionManager:testConnectionManager requests:[sendRequests copy] progressHandler:^(__kindof SDLRPCRequest * _Nonnull request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error, float percentComplete) {
+ expect(percentComplete).to(beCloseTo(0));
+ expect(response).to(beNil());
+ expect(error).toNot(beNil());
+ expect(error.code).to(equal(-8));
+ } completionHandler:^(BOOL success) {
+ expect(success).to(beFalsy());
+ }];
+
+ [testOperationQueue addOperation:testOperation];
+ [testOperationQueue cancelAllOperations];
+ });
+ });
+
context(@"where not all requests succeed", ^{
__block NSError *testError = [NSError errorWithDomain:@"com.test" code:-3 userInfo:nil];
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLCheckChoiceVROptionalOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLCheckChoiceVROptionalOperationSpec.m
new file mode 100644
index 000000000..2809c3871
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLCheckChoiceVROptionalOperationSpec.m
@@ -0,0 +1,143 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLCheckChoiceVROptionalOperation.h"
+
+#import "SDLChoice.h"
+#import "SDLCreateInteractionChoiceSet.h"
+#import "SDLCreateInteractionChoiceSetResponse.h"
+#import "TestConnectionManager.h"
+
+QuickSpecBegin(SDLCheckChoiceVROptionalOperationSpec)
+
+describe(@"check choice VR optional operation", ^{
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLCheckChoiceVROptionalOperation *testOp = nil;
+
+ __block BOOL resultVROptional = NO;
+ __block BOOL hasCalledOperationCompletionHandler = NO;
+ __block NSError *resultError = nil;
+
+ beforeEach(^{
+ resultVROptional = NO;
+ hasCalledOperationCompletionHandler = NO;
+
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ testOp = [[SDLCheckChoiceVROptionalOperation alloc] initWithConnectionManager:testConnectionManager];
+ testOp.completionBlock = ^{
+ hasCalledOperationCompletionHandler = YES;
+ resultVROptional = testOp.vrOptional;
+ resultError = testOp.error;
+ };
+ });
+
+ it(@"should have priority of 'very high'", ^{
+ expect(@(testOp.queuePriority)).to(equal(@(NSOperationQueuePriorityVeryHigh)));
+ });
+
+ describe(@"running the operation", ^{
+ __block SDLCreateInteractionChoiceSetResponse *testResponse;
+
+ beforeEach(^{
+ [testOp start];
+ });
+
+ it(@"should send a create choice set request with no VR", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLCreateInteractionChoiceSet class]));
+
+ SDLCreateInteractionChoiceSet *receivedRequest = testConnectionManager.receivedRequests.lastObject;
+ expect(receivedRequest.interactionChoiceSetID).to(equal(@0));
+ expect(receivedRequest.choiceSet).to(haveCount(1));
+
+ SDLChoice *receivedChoice = receivedRequest.choiceSet.firstObject;
+ expect(receivedChoice.choiceID).to(equal(@0));
+ expect(receivedChoice.menuName).to(equal(@"Test Cell"));
+ expect(receivedChoice.vrCommands).to(beNil());
+ });
+
+ context(@"when a good response comes back", ^{
+ beforeEach(^{
+ testResponse = [[SDLCreateInteractionChoiceSetResponse alloc] init];
+ testResponse.success = @YES;
+ testResponse.resultCode = SDLResultSuccess;
+
+ [testConnectionManager respondToLastRequestWithResponse:testResponse];
+ });
+
+ it(@"should have called the completion handler with proper data", ^{
+ expect(hasCalledOperationCompletionHandler).toEventually(beTrue());
+ expect(resultVROptional).to(beTrue());
+ expect(resultError).to(beNil());
+ });
+
+ it(@"should be set to finished", ^{
+ expect(@(testOp.finished)).to(equal(@YES));
+ expect(@(testOp.executing)).to(equal(@NO));
+ });
+ });
+
+ context(@"when a bad response comes back", ^{
+ beforeEach(^{
+ testResponse = [[SDLCreateInteractionChoiceSetResponse alloc] init];
+ testResponse.success = @NO;
+ testResponse.resultCode = SDLResultRejected;
+
+ [testConnectionManager respondToLastRequestWithResponse:testResponse];
+ });
+
+ it(@"should have sent out a new request", ^{
+ expect(hasCalledOperationCompletionHandler).to(beFalse());
+
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLCreateInteractionChoiceSet class]));
+
+ SDLCreateInteractionChoiceSet *receivedRequest = testConnectionManager.receivedRequests.lastObject;
+ expect(receivedRequest.interactionChoiceSetID).to(equal(@0));
+ expect(receivedRequest.choiceSet).to(haveCount(1));
+
+ SDLChoice *receivedChoice = receivedRequest.choiceSet.firstObject;
+ expect(receivedChoice.choiceID).to(equal(@0));
+ expect(receivedChoice.menuName).to(equal(@"Test Cell"));
+ expect(receivedChoice.vrCommands).to(equal(@[@"Test VR"]));
+ });
+
+ context(@"when a good response comes back", ^{
+ beforeEach(^{
+ testResponse = [[SDLCreateInteractionChoiceSetResponse alloc] init];
+ testResponse.success = @YES;
+ testResponse.resultCode = SDLResultSuccess;
+
+ [testConnectionManager respondToLastRequestWithResponse:testResponse];
+ });
+
+ it(@"should have called the completion handler with proper data", ^{
+ expect(hasCalledOperationCompletionHandler).toEventually(beTrue());
+ expect(resultVROptional).toEventually(beFalse());
+ expect(resultError).toEventually(beNil());
+ });
+
+ it(@"should be set to finished", ^{
+ expect(@(testOp.finished)).to(equal(@YES));
+ expect(@(testOp.executing)).to(equal(@NO));
+ });
+ });
+
+ context(@"when a bad response comes back", ^{
+ beforeEach(^{
+ testResponse = [[SDLCreateInteractionChoiceSetResponse alloc] init];
+ testResponse.success = @NO;
+ testResponse.resultCode = SDLResultRejected;
+
+ [testConnectionManager respondToLastRequestWithResponse:testResponse];
+ });
+
+ it(@"should return a failure", ^{
+ expect(hasCalledOperationCompletionHandler).toEventually(beTrue());
+ expect(resultVROptional).to(beFalse());
+ expect(resultError).toNot(beNil());
+ });
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceCellSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceCellSpec.m
new file mode 100644
index 000000000..1f4b6d469
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceCellSpec.m
@@ -0,0 +1,92 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLArtwork.h"
+#import "SDLChoiceCell.h"
+
+@interface SDLChoiceCell()
+
+@property (assign, nonatomic) UInt16 choiceId;
+
+@end
+
+QuickSpecBegin(SDLChoiceCellSpec)
+
+describe(@"an SDLChoiceCell", ^{
+ __block SDLChoiceCell *testCell = nil;
+
+ __block NSString *testText = @"testText";
+ __block NSString *testSecondaryText = @"testsecondary";
+ __block NSString *testTertiaryText = @"testtertiary";
+ __block NSString *testArtworkName = @"testArtworkName";
+ __block NSString *testSecondaryArtworkName = @"testsecondaryartworkname";
+ __block SDLArtwork *testArtwork = nil;
+ __block SDLArtwork *testSecondaryArtwork = nil;
+ __block NSArray<NSString *> *testVRCommands = nil;
+
+ beforeEach(^{
+ testArtwork = [[SDLArtwork alloc] initWithData:[@"testart" dataUsingEncoding:NSUTF8StringEncoding] name:testArtworkName fileExtension:@"png" persistent:NO];
+ testSecondaryArtwork = [[SDLArtwork alloc] initWithData:[@"testsecondary art" dataUsingEncoding:NSUTF8StringEncoding] name:testSecondaryArtworkName fileExtension:@"jpg" persistent:NO];
+ testVRCommands = @[@"testvr"];
+
+ testCell = nil;
+ });
+
+ describe(@"initializing", ^{
+ it(@"should initialize properly with initWithText:", ^{
+ testCell = [[SDLChoiceCell alloc] initWithText:testText];
+
+ expect(testCell.text).to(equal(testText));
+ expect(testCell.secondaryText).to(beNil());
+ expect(testCell.tertiaryText).to(beNil());
+ expect(testCell.voiceCommands).to(beNil());
+ expect(testCell.artwork).to(beNil());
+ expect(testCell.secondaryArtwork).to(beNil());
+ expect(@(testCell.choiceId)).to(equal(@(UINT16_MAX)));
+ });
+
+ it(@"should initialize properly with initWithText:artwork:voiceCommands:", ^{
+ testCell = [[SDLChoiceCell alloc] initWithText:testText artwork:testArtwork voiceCommands:testVRCommands];
+
+ expect(testCell.text).to(equal(testText));
+ expect(testCell.secondaryText).to(beNil());
+ expect(testCell.tertiaryText).to(beNil());
+ expect(testCell.voiceCommands).to(equal(testVRCommands));
+ expect(testCell.artwork).to(equal(testArtwork));
+ expect(testCell.secondaryArtwork).to(beNil());
+ expect(@(testCell.choiceId)).to(equal(@(UINT16_MAX)));
+ });
+
+ it(@"should initialize properly with initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:", ^{
+ testCell = [[SDLChoiceCell alloc] initWithText:testText secondaryText:testSecondaryText tertiaryText:testTertiaryText voiceCommands:testVRCommands artwork:testArtwork secondaryArtwork:testSecondaryArtwork];
+
+ expect(testCell.text).to(equal(testText));
+ expect(testCell.secondaryText).to(equal(testSecondaryText));
+ expect(testCell.tertiaryText).to(equal(testTertiaryText));
+ expect(testCell.voiceCommands).to(equal(testVRCommands));
+ expect(testCell.artwork).to(equal(testArtwork));
+ expect(testCell.secondaryArtwork).to(equal(testSecondaryArtwork));
+ expect(@(testCell.choiceId)).to(equal(@(UINT16_MAX)));
+ });
+ });
+
+ describe(@"equality tests", ^{
+ __block SDLChoiceCell *secondTestCell = nil;
+ __block SDLChoiceCell *matchingFirstCell = nil;
+ beforeEach(^{
+ testCell = [[SDLChoiceCell alloc] initWithText:testText secondaryText:testSecondaryText tertiaryText:testTertiaryText voiceCommands:testVRCommands artwork:testArtwork secondaryArtwork:testSecondaryArtwork];
+ secondTestCell = [[SDLChoiceCell alloc] initWithText:testSecondaryText secondaryText:testText tertiaryText:testTertiaryText voiceCommands:testVRCommands artwork:testArtwork secondaryArtwork:testSecondaryArtwork];
+ matchingFirstCell = [[SDLChoiceCell alloc] initWithText:testText secondaryText:testSecondaryText tertiaryText:testTertiaryText voiceCommands:testVRCommands artwork:testArtwork secondaryArtwork:testSecondaryArtwork];
+ });
+
+ it(@"should match cells with the same data", ^{
+ expect([testCell isEqual:matchingFirstCell]).to(beTrue());
+ });
+
+ it(@"should not match cells with data in different places", ^{
+ expect([testCell isEqual:secondTestCell]).to(beFalse());
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m
new file mode 100644
index 000000000..813bed28c
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m
@@ -0,0 +1,345 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLChoiceSetManager.h"
+
+#import "SDLCheckChoiceVROptionalOperation.h"
+#import "SDLChoiceCell.h"
+#import "SDLChoiceSet.h"
+#import "SDLChoiceSetDelegate.h"
+#import "SDLDeleteChoicesOperation.h"
+#import "SDLDisplayCapabilities.h"
+#import "SDLFileManager.h"
+#import "SDLHMILevel.h"
+#import "SDLKeyboardDelegate.h"
+#import "SDLKeyboardProperties.h"
+#import "SDLPreloadChoicesOperation.h"
+#import "SDLPresentChoiceSetOperation.h"
+#import "SDLPresentKeyboardOperation.h"
+#import "SDLStateMachine.h"
+#import "SDLSystemContext.h"
+#import "TestConnectionManager.h"
+
+@interface SDLPresentChoiceSetOperation()
+
+@property (copy, nonatomic, nullable) NSError *internalError;
+
+@end
+
+@interface SDLCheckChoiceVROptionalOperation()
+
+@property (copy, nonatomic, nullable) NSError *internalError;
+
+@end
+
+@interface SDLChoiceSetManager()
+
+@property (strong, nonatomic, readonly) SDLStateMachine *stateMachine;
+@property (strong, nonatomic) NSOperationQueue *transactionQueue;
+
+@property (copy, nonatomic, nullable) SDLHMILevel currentHMILevel;
+@property (copy, nonatomic, nullable) SDLSystemContext currentSystemContext;
+@property (strong, nonatomic, nullable) SDLDisplayCapabilities *displayCapabilities;
+
+@property (strong, nonatomic) NSMutableSet<SDLChoiceCell *> *preloadedMutableChoices;
+@property (strong, nonatomic, readonly) NSSet<SDLChoiceCell *> *pendingPreloadChoices;
+@property (strong, nonatomic) NSMutableSet<SDLChoiceCell *> *pendingMutablePreloadChoices;
+@property (strong, nonatomic, nullable) SDLChoiceSet *pendingPresentationSet;
+@property (strong, nonatomic, nullable) SDLAsynchronousOperation *pendingPresentOperation;
+
+@property (assign, nonatomic, getter=isVROptional) BOOL vrOptional;
+
+@end
+
+QuickSpecBegin(SDLChoiceSetManagerSpec)
+
+describe(@"choice set manager tests", ^{
+ __block SDLChoiceSetManager *testManager = nil;
+
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLFileManager *testFileManager = nil;
+
+ __block SDLChoiceCell *testCell1 = nil;
+ __block SDLChoiceCell *testCell2 = nil;
+ __block SDLChoiceCell *testCell3 = nil;
+
+ beforeEach(^{
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ testFileManager = OCMClassMock([SDLFileManager class]);
+
+ testManager = [[SDLChoiceSetManager alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager];
+
+ testCell1 = [[SDLChoiceCell alloc] initWithText:@"test1"];
+ testCell2 = [[SDLChoiceCell alloc] initWithText:@"test2"];
+ testCell3 = [[SDLChoiceCell alloc] initWithText:@"test3"];
+ });
+
+ it(@"should be in the correct startup state", ^{
+ expect(testManager.currentState).to(equal(SDLChoiceManagerStateShutdown));
+
+ SDLKeyboardProperties *defaultProperties = [[SDLKeyboardProperties alloc] initWithLanguage:SDLLanguageEnUs layout:SDLKeyboardLayoutQWERTY keypressMode:SDLKeypressModeResendCurrentEntry limitedCharacterList:nil autoCompleteText:nil];
+ expect(testManager.keyboardConfiguration).to(equal(defaultProperties));
+ });
+
+ describe(@"once started", ^{
+ beforeEach(^{
+ [testManager start];
+ testManager.transactionQueue.suspended = YES;
+ });
+
+ it(@"should start checking for VR Optional", ^{
+ expect(testManager.currentState).to(equal(SDLChoiceManagerStateCheckingVoiceOptional));
+
+ expect(testManager.transactionQueue.operationCount).to(equal(1)); expect(testManager.transactionQueue.operations.lastObject).to(beAnInstanceOf([SDLCheckChoiceVROptionalOperation class]));
+ });
+
+ describe(@"after the bad vr optional response", ^{
+ beforeEach(^{
+ SDLCheckChoiceVROptionalOperation *vrOptionalOp = testManager.transactionQueue.operations.lastObject;
+ vrOptionalOp.vrOptional = NO;
+ vrOptionalOp.internalError = [NSError errorWithDomain:@"test" code:0 userInfo:nil];
+ vrOptionalOp.completionBlock();
+ });
+
+ it(@"should be ready", ^{
+ expect(testManager.currentState).to(equal(SDLChoiceManagerStateStartupError));
+ });
+ });
+
+ describe(@"after the vr optional response", ^{
+ beforeEach(^{
+ SDLCheckChoiceVROptionalOperation *vrOptionalOp = testManager.transactionQueue.operations.lastObject;
+ vrOptionalOp.vrOptional = YES;
+ vrOptionalOp.completionBlock();
+ });
+
+ it(@"should be ready", ^{
+ expect(testManager.currentState).to(equal(SDLChoiceManagerStateReady));
+ });
+ });
+
+ describe(@"once shutdown", ^{
+ beforeEach(^{
+ [testManager stop];
+ });
+
+ it(@"should shutdown", ^{
+ expect(testManager.currentState).to(equal(SDLChoiceManagerStateShutdown));
+ });
+ });
+ });
+
+ describe(@"once ready", ^{
+ beforeEach(^{
+ [testManager.stateMachine setToState:SDLChoiceManagerStateReady fromOldState:SDLChoiceManagerStateCheckingVoiceOptional callEnterTransition:NO];
+ });
+
+ describe(@"preloading choices", ^{
+ context(@"when some choices are already uploaded", ^{
+ beforeEach(^{
+ testManager.preloadedMutableChoices = [NSMutableSet setWithArray:@[testCell1]];
+
+ [testManager preloadChoices:@[testCell1, testCell2, testCell3] withCompletionHandler:^(NSError * _Nullable error) {
+ }];
+ });
+
+ it(@"should properly start the preload", ^{
+ expect(testManager.pendingPreloadChoices).toNot(contain(testCell1));
+ expect(testManager.pendingPreloadChoices).to(contain(testCell2));
+ expect(testManager.pendingPreloadChoices).to(contain(testCell3));
+ expect(testManager.transactionQueue.operations.firstObject).to(beAnInstanceOf([SDLPreloadChoicesOperation class]));
+
+ SDLPreloadChoicesOperation *testOp = testManager.transactionQueue.operations.firstObject;
+ testOp.completionBlock();
+
+ expect(testManager.preloadedChoices).to(contain(testCell1));
+ expect(testManager.preloadedChoices).to(contain(testCell2));
+ expect(testManager.preloadedChoices).to(contain(testCell3));
+ expect(testManager.pendingPreloadChoices).to(haveCount(0));
+ });
+ });
+
+ context(@"when some choices are already pending", ^{
+ beforeEach(^{
+ testManager.pendingMutablePreloadChoices = [NSMutableSet setWithArray:@[testCell1]];
+
+ [testManager preloadChoices:@[testCell1, testCell2, testCell3] withCompletionHandler:^(NSError * _Nullable error) {
+ }];
+ });
+
+ it(@"should properly start the preload", ^{
+ 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]));
+
+ SDLPreloadChoicesOperation *testOp = testManager.transactionQueue.operations.firstObject;
+ testOp.completionBlock();
+
+ expect(testManager.preloadedChoices).toNot(contain(testCell1));
+ expect(testManager.preloadedChoices).to(contain(testCell2));
+ expect(testManager.preloadedChoices).to(contain(testCell3));
+ expect(testManager.pendingPreloadChoices).to(haveCount(1));
+ });
+ });
+ });
+
+ describe(@"deleting choices", ^{
+ context(@"used in a pending presentation", ^{
+ __block SDLPresentChoiceSetOperation *pendingPresentOp = nil;
+ __block id<SDLChoiceSetDelegate> 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 properly start the deletion", ^{
+ 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.transactionQueue.operations.lastObject.completionBlock();
+ expect(testManager.preloadedChoices).to(beEmpty());
+ });
+ });
+
+ context(@"used in pending preloads", ^{
+ __block SDLPreloadChoicesOperation *pendingPreloadOp = nil;
+
+ beforeEach(^{
+ pendingPreloadOp = [[SDLPreloadChoicesOperation alloc] init];
+ OCMPartialMock(pendingPreloadOp);
+ OCMStub([pendingPreloadOp removeChoicesFromUpload:[OCMArg any]]);
+ [testManager.transactionQueue addOperation:pendingPreloadOp];
+
+ testManager.pendingMutablePreloadChoices = [NSMutableSet setWithObject:testCell1];
+
+ [testManager deleteChoices:@[testCell1, testCell2, testCell3]];
+ });
+
+ it(@"should properly start the deletion", ^{
+ OCMStub([pendingPreloadOp removeChoicesFromUpload:[OCMArg checkWithBlock:^BOOL(id obj) {
+ NSArray<SDLChoiceCell *> *choices = (NSArray<SDLChoiceCell *> *)obj;
+ return (choices.count == 1) && ([choices.firstObject isEqual:testCell1]);
+ }]]);
+
+ expect(testManager.pendingPreloadChoices).to(beEmpty());
+ expect(testManager.transactionQueue.operationCount).to(equal(1)); // No delete operation
+ });
+ });
+ });
+
+ describe(@"presenting a choice set", ^{
+ __block SDLChoiceSet *testChoiceSet = nil;
+ __block NSString *testTitle = @"test title";
+ __block id<SDLChoiceSetDelegate> choiceDelegate = nil;
+ __block id<SDLKeyboardDelegate> keyboardDelegate = nil;
+ __block SDLInteractionMode testMode = SDLInteractionModeBoth;
+ __block SDLPresentKeyboardOperation *pendingPresentOp = nil;
+
+ beforeEach(^{
+ keyboardDelegate = OCMProtocolMock(@protocol(SDLKeyboardDelegate));
+ choiceDelegate = OCMProtocolMock(@protocol(SDLChoiceSetDelegate));
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:choiceDelegate choices:@[testCell1, testCell2, testCell3]];
+
+ pendingPresentOp = OCMClassMock([SDLPresentKeyboardOperation class]);
+ testManager.pendingPresentOperation = pendingPresentOp;
+ testManager.pendingPresentationSet = [[SDLChoiceSet alloc] init];
+ });
+
+ context(@"searchable", ^{
+ beforeEach(^{
+ [testManager presentChoiceSet:testChoiceSet mode:testMode withKeyboardDelegate:keyboardDelegate];
+ });
+
+ it(@"should properly start the presentation", ^{
+ OCMVerify([pendingPresentOp cancel]);
+ 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]));
+ });
+
+ describe(@"after the completion handler is called", ^{
+ context(@"with an error", ^{
+ beforeEach(^{
+ SDLPresentChoiceSetOperation *op = testManager.transactionQueue.operations.lastObject;
+ op.internalError = [[NSError alloc] init];
+ op.completionBlock();
+ });
+
+ it(@"should call the error handler", ^{
+ OCMVerify([choiceDelegate choiceSet:[OCMArg any] didReceiveError:[OCMArg isNotNil]]);
+ expect(testManager.pendingPresentationSet).to(beNil());
+ expect(testManager.pendingPresentOperation).to(beNil());
+ });
+ });
+ });
+ });
+
+ context(@"non-searchable", ^{
+ beforeEach(^{
+ [testManager presentChoiceSet:testChoiceSet mode:testMode withKeyboardDelegate:nil];
+ });
+
+ it(@"should properly start the presentation", ^{
+ OCMVerify([pendingPresentOp cancel]);
+ 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]));
+ });
+
+ describe(@"after the completion handler is called", ^{
+ context(@"with an error", ^{
+ beforeEach(^{
+ SDLPresentChoiceSetOperation *op = testManager.transactionQueue.operations.lastObject;
+ op.internalError = [[NSError alloc] init];
+ op.completionBlock();
+ });
+
+ it(@"should call the error handler", ^{
+ OCMVerify([choiceDelegate choiceSet:[OCMArg any] didReceiveError:[OCMArg isNotNil]]);
+ expect(testManager.pendingPresentationSet).to(beNil());
+ expect(testManager.pendingPresentOperation).to(beNil());
+ });
+ });
+ });
+ });
+ });
+
+ describe(@"presenting a keyboard", ^{
+ __block SDLPresentChoiceSetOperation *pendingPresentOp = nil;
+ __block NSString *testInitialText = @"Test text";
+ __block id<SDLKeyboardDelegate> testKeyboardDelegate = nil;
+
+ beforeEach(^{
+ testKeyboardDelegate = OCMProtocolMock(@protocol(SDLKeyboardDelegate));
+
+ pendingPresentOp = OCMClassMock([SDLPresentChoiceSetOperation class]);
+ testManager.pendingPresentOperation = pendingPresentOp;
+ testManager.pendingPresentationSet = [[SDLChoiceSet alloc] init];
+
+ [testManager presentKeyboardWithInitialText:testInitialText delegate:testKeyboardDelegate];
+ });
+
+ it(@"should properly start the keyboard presentation", ^{
+ OCMVerify([pendingPresentOp cancel]);
+ expect(testManager.transactionQueue.operations).to(haveCount(1));
+ expect(testManager.pendingPresentOperation).to(beAnInstanceOf([SDLPresentKeyboardOperation class]));
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetSpec.m
new file mode 100644
index 000000000..c89a969be
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetSpec.m
@@ -0,0 +1,155 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLChoiceSet.h"
+
+#import "SDLChoiceCell.h"
+#import "SDLChoiceSetDelegate.h"
+#import "SDLTTSChunk.h"
+#import "SDLVrHelpItem.h"
+
+QuickSpecBegin(SDLChoiceSetSpec)
+
+describe(@"an SDLChoiceSet", ^{
+ __block SDLChoiceSet *testChoiceSet = nil;
+ __block NSString *testTitle = @"title";
+ __block SDLChoiceCell *testCell = nil;
+ __block id<SDLChoiceSetDelegate> testDelegate = nil;
+ __block SDLChoiceSetLayout testLayout = SDLChoiceSetLayoutList;
+ __block NSTimeInterval testTimeout = 28;
+ __block NSString *testInitialPrompt = @"initial prompt";
+ __block NSString *testHelpPrompt = @"help prompt";
+ __block NSString *testTimeoutPrompt = @"timeout prompt";
+ __block SDLVRHelpItem *testHelpItem = nil;
+
+ beforeEach(^{
+ testCell = [[SDLChoiceCell alloc] initWithText:@"cell text"];
+ testDelegate = OCMProtocolMock(@protocol(SDLChoiceSetDelegate));
+ testHelpItem = [[SDLVRHelpItem alloc] initWithText:@"help item" image:nil];
+
+ testChoiceSet = nil;
+ });
+
+ describe(@"initializing", ^{
+ it(@"should initialize default properties correctly", ^{
+ expect(@(SDLChoiceSet.defaultLayout)).to(equal(@(SDLChoiceSetLayoutList)));
+ expect(SDLChoiceSet.defaultTimeout).to(equal(10));
+ });
+
+ it(@"should set default properties correctly", ^{
+ SDLChoiceSet.defaultLayout = SDLChoiceSetLayoutTiles;
+ SDLChoiceSet.defaultTimeout = 6;
+
+ expect(@(SDLChoiceSet.defaultLayout)).to(equal(@(SDLChoiceSetLayoutTiles)));
+ expect(SDLChoiceSet.defaultTimeout).to(equal(6));
+ });
+
+ it(@"should initialize correctly with initWithTitle:delegate:choices:", ^{
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate choices:@[testCell]];
+
+ expect(testChoiceSet.title).to(equal(testTitle));
+ expect(testChoiceSet.initialPrompt).to(beNil());
+ expect(@(testChoiceSet.layout)).to(equal(@(SDLChoiceSet.defaultLayout)));
+ expect(testChoiceSet.timeout).to(equal(SDLChoiceSet.defaultTimeout));
+ expect(testChoiceSet.timeoutPrompt).to(beNil());
+ expect(testChoiceSet.helpPrompt).to(beNil());
+ expect(testChoiceSet.helpList).to(beNil());
+ expect(testChoiceSet.delegate).to(equal(testDelegate));
+ expect(testChoiceSet.choices).to(equal(@[testCell]));
+ });
+
+ it(@"should initialize correctly with initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:", ^{
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate layout:testLayout timeout:testTimeout initialPromptString:testInitialPrompt timeoutPromptString:testTimeoutPrompt helpPromptString:testHelpPrompt vrHelpList:@[testHelpItem] choices:@[testCell]];
+
+ expect(testChoiceSet.title).to(equal(testTitle));
+ expect(testChoiceSet.initialPrompt).to(equal([SDLTTSChunk textChunksFromString:testInitialPrompt]));
+ expect(@(testChoiceSet.layout)).to(equal(@(testLayout)));
+ expect(testChoiceSet.timeout).to(equal(testTimeout));
+ expect(testChoiceSet.timeoutPrompt).to(equal([SDLTTSChunk textChunksFromString:testTimeoutPrompt]));
+ expect(testChoiceSet.helpPrompt).to(equal([SDLTTSChunk textChunksFromString:testHelpPrompt]));
+ expect(testChoiceSet.helpList).to(equal(@[testHelpItem]));
+ expect(testChoiceSet.delegate).to(equal(testDelegate));
+ expect(testChoiceSet.choices).to(equal(@[testCell]));
+ });
+
+ it(@"should initialize correctly with initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:", ^{
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate layout:testLayout timeout:testTimeout initialPrompt:[SDLTTSChunk textChunksFromString:testInitialPrompt] timeoutPrompt:[SDLTTSChunk textChunksFromString:testTimeoutPrompt] helpPrompt:[SDLTTSChunk textChunksFromString:testHelpPrompt] vrHelpList:@[testHelpItem] choices:@[testCell]];
+
+ expect(testChoiceSet.title).to(equal(testTitle));
+ expect(testChoiceSet.initialPrompt).to(equal([SDLTTSChunk textChunksFromString:testInitialPrompt]));
+ expect(@(testChoiceSet.layout)).to(equal(@(testLayout)));
+ expect(testChoiceSet.timeout).to(equal(testTimeout));
+ expect(testChoiceSet.timeoutPrompt).to(equal([SDLTTSChunk textChunksFromString:testTimeoutPrompt]));
+ expect(testChoiceSet.helpPrompt).to(equal([SDLTTSChunk textChunksFromString:testHelpPrompt]));
+ expect(testChoiceSet.helpList).to(equal(@[testHelpItem]));
+ expect(testChoiceSet.delegate).to(equal(testDelegate));
+ expect(testChoiceSet.choices).to(equal(@[testCell]));
+ });
+
+ context(@"with bad data", ^{
+ it(@"should return nil with too few or too many choices", ^{
+ // Choices must be between 1 and 100
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate choices:@[]];
+ expect(testChoiceSet).to(beNil());
+
+ NSMutableArray<SDLChoiceCell *> *choices = [NSMutableArray array];
+ for (int i = 0; i < 101; i++) {
+ [choices addObject:[[SDLChoiceCell alloc] initWithText:@"hi"]];
+ }
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate choices:choices];
+ expect(testChoiceSet).to(beNil());
+ });
+
+ it(@"should return nil with too short or too long timeout", ^{
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate layout:testLayout timeout:4.9 initialPromptString:nil timeoutPromptString:nil helpPromptString:nil vrHelpList:nil choices:@[testCell]];
+ expect(testChoiceSet).to(beNil());
+
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate layout:testLayout timeout:100.1 initialPromptString:nil timeoutPromptString:nil helpPromptString:nil vrHelpList:nil choices:@[testCell]];
+ expect(testChoiceSet).to(beNil());
+ });
+
+ it(@"should return nil with too short or too long title", ^{
+ // Title strings must be between 1 and 500 length
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:@"" delegate:testDelegate choices:@[]];
+ expect(testChoiceSet).to(beNil());
+
+ NSMutableString *testString = [NSMutableString string];
+ for (int i = 0; i < 51; i++) {
+ [testString appendString:@"abcdefghij"];
+ }
+
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:[testString copy] delegate:testDelegate choices:@[]];
+ expect(testChoiceSet).to(beNil());
+ });
+
+ it(@"should return nil with equivalent cell text", ^{
+ // Cell `text` cannot be equal
+ SDLChoiceCell *equalCell = [[SDLChoiceCell alloc] initWithText:@"Text"];
+ SDLChoiceCell *equalCell2 = [[SDLChoiceCell alloc] initWithText:@"Text"];
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate choices:@[equalCell, equalCell2]];
+ expect(testChoiceSet).to(beNil());
+ });
+
+ context(@"With bad VR data", ^{
+ it(@"should return nil if not all choice set items have voice commands", ^{
+ // Cell `voiceCommands` cannot be equal
+ SDLChoiceCell *equalCellVR = [[SDLChoiceCell alloc] initWithText:@"Text" artwork:nil voiceCommands:@[@"vr"]];
+ SDLChoiceCell *equalCellVR2 = [[SDLChoiceCell alloc] initWithText:@"Text2" artwork:nil voiceCommands:nil];
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate choices:@[equalCellVR, equalCellVR2]];
+ expect(testChoiceSet).to(beNil());
+ });
+
+ it(@"should return nil if there are duplicate voice command strings in the choice set", ^{
+ // Cell `voiceCommands` cannot be equal
+ SDLChoiceCell *equalCellVR = [[SDLChoiceCell alloc] initWithText:@"Text" artwork:nil voiceCommands:@[@"Dog"]];
+ SDLChoiceCell *equalCellVR2 = [[SDLChoiceCell alloc] initWithText:@"Text2" artwork:nil voiceCommands:@[@"Parrot", @"Dog"]];
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:testTitle delegate:testDelegate choices:@[equalCellVR, equalCellVR2]];
+ expect(testChoiceSet).to(beNil());
+ });
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m
index 6afb1f3cf..cdfef4f4d 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m
@@ -2,6 +2,7 @@
#import <Nimble/Nimble.h>
#import "SDLConfiguration.h"
+#import "SDLFileManagerConfiguration.h"
#import "SDLLifecycleConfiguration.h"
#import "SDLLogConfiguration.h"
#import "SDLLockScreenConfiguration.h"
@@ -17,6 +18,7 @@ describe(@"a configuration", ^{
__block SDLLockScreenConfiguration *someLockscreenConfig = nil;
__block SDLLogConfiguration *someLogConfig = nil;
__block SDLStreamingMediaConfiguration *someStreamingConfig = nil;
+ __block SDLFileManagerConfiguration *someFileManagerConfig = nil;
__block NSString *someAppName = nil;
__block NSString *someAppId = nil;
@@ -29,46 +31,110 @@ describe(@"a configuration", ^{
someBackgroundColor = [UIColor blueColor];
someImage = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil];
- someLifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:someAppName appId:someAppId];
+ someLifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:someAppName fullAppId:someAppId];
someLockscreenConfig = [SDLLockScreenConfiguration enabledConfigurationWithAppIcon:someImage backgroundColor:someBackgroundColor];
someLogConfig = [SDLLogConfiguration defaultConfiguration];
someStreamingConfig = [SDLStreamingMediaConfiguration insecureConfiguration];
+ someFileManagerConfig = [SDLFileManagerConfiguration defaultConfiguration];
});
-
- it(@"should create correctly with initWithLifecycle:lockScreen:logging:", ^{
+
+ it(@"initWithLifecycle:lockScreen:logging:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
testConfig = [[SDLConfiguration alloc] initWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig];
expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
expect(testConfig.loggingConfig).to(equal(someLogConfig));
expect(testConfig.streamingMediaConfig).to(beNil());
+ expect(testConfig.fileManagerConfig).toNot(beNil());
+ #pragma clang diagnostic pop
});
- it(@"should create correctly with configurationWithLifecycle:lockScreen:logging:", ^{
- testConfig = [SDLConfiguration configurationWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig];
+ it(@"initWithLifecycle:lockScreen:logging:fileManager:", ^{
+ testConfig = [[SDLConfiguration alloc] initWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig fileManager:someFileManagerConfig];
expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
expect(testConfig.loggingConfig).to(equal(someLogConfig));
expect(testConfig.streamingMediaConfig).to(beNil());
+ expect(testConfig.fileManagerConfig).to(equal(someFileManagerConfig));
});
- it(@"should create correctly with initWithLifecycle:lockScreen:logging:streamingMedia:", ^{
- testConfig = [[SDLConfiguration alloc] initWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig streamingMedia:nil];
+ it(@"configurationWithLifecycle:lockScreen:logging:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testConfig = [SDLConfiguration configurationWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig];
expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
expect(testConfig.loggingConfig).to(equal(someLogConfig));
expect(testConfig.streamingMediaConfig).to(beNil());
+ expect(testConfig.fileManagerConfig).toNot(beNil());
+ #pragma clang diagnostic pop
});
- it(@"should create correctly with configurationWithLifecycle:lockScreen:logging:streamingMedia:", ^{
- testConfig = [SDLConfiguration configurationWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig streamingMedia:nil];
+ it(@"configurationWithLifecycle:lockScreen:logging:fileManager", ^{
+ testConfig = [SDLConfiguration configurationWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig fileManager:someFileManagerConfig];
expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
expect(testConfig.loggingConfig).to(equal(someLogConfig));
expect(testConfig.streamingMediaConfig).to(beNil());
+ expect(testConfig.fileManagerConfig).to(equal(someFileManagerConfig));
+ });
+
+ describe(@"streaming media config", ^{
+ beforeEach(^{
+ someLifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:someAppName fullAppId:someAppId];
+ someLifecycleConfig.appType = SDLAppHMITypeNavigation;
+ });
+
+ it(@"initWithLifecycle:lockScreen:logging:streamingMedia:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testConfig = [[SDLConfiguration alloc] initWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig streamingMedia:someStreamingConfig];
+
+ expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
+ expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
+ expect(testConfig.loggingConfig).to(equal(someLogConfig));
+ expect(testConfig.streamingMediaConfig).to(equal(someStreamingConfig));
+ expect(testConfig.fileManagerConfig).toNot(beNil());
+ #pragma clang diagnostic pop
+ });
+
+ it(@"initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:", ^{
+ testConfig = [[SDLConfiguration alloc] initWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig streamingMedia:someStreamingConfig fileManager:someFileManagerConfig];
+
+ expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
+ expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
+ expect(testConfig.loggingConfig).to(equal(someLogConfig));
+ expect(testConfig.streamingMediaConfig).to(equal(someStreamingConfig));
+ expect(testConfig.fileManagerConfig).to(equal(someFileManagerConfig));
+ });
+
+ it(@"configurationWithLifecycle:lockScreen:logging:streamingMedia:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testConfig = [SDLConfiguration configurationWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig streamingMedia:someStreamingConfig];
+
+ expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
+ expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
+ expect(testConfig.loggingConfig).to(equal(someLogConfig));
+ expect(testConfig.streamingMediaConfig).to(equal(someStreamingConfig));
+ expect(testConfig.fileManagerConfig).toNot(beNil());
+ #pragma clang diagnostic pop
+ });
+
+ it(@"configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:", ^{
+ testConfig = [SDLConfiguration configurationWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig streamingMedia:someStreamingConfig fileManager:someFileManagerConfig];
+
+ expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
+ expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
+ expect(testConfig.loggingConfig).to(equal(someLogConfig));
+ expect(testConfig.streamingMediaConfig).to(equal(someStreamingConfig));
+ expect(testConfig.fileManagerConfig).to(equal(someFileManagerConfig));
+ });
});
});
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLDeleteChoicesOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLDeleteChoicesOperationSpec.m
new file mode 100644
index 000000000..2996da282
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLDeleteChoicesOperationSpec.m
@@ -0,0 +1,77 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLDeleteChoicesOperation.h"
+
+#import "SDLChoiceCell.h"
+#import "SDLDeleteInteractionChoiceSet.h"
+#import "SDLDeleteInteractionChoiceSetResponse.h"
+#import "TestConnectionManager.h"
+
+QuickSpecBegin(SDLDeleteChoicesOperationSpec)
+
+describe(@"delete choices operation", ^{
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLDeleteChoicesOperation *testOp = nil;
+ __block NSSet<SDLChoiceCell *> *testCellsToDelete = nil;
+
+ __block BOOL hasCalledOperationCompletionHandler = NO;
+ __block NSError *resultError = nil;
+
+ beforeEach(^{
+ hasCalledOperationCompletionHandler = NO;
+
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ testCellsToDelete = [NSSet setWithArray:@[[[SDLChoiceCell alloc] initWithText:@"Text"], [[SDLChoiceCell alloc] initWithText:@"Text 2"]]];
+ testOp = [[SDLDeleteChoicesOperation alloc] initWithConnectionManager:testConnectionManager cellsToDelete:testCellsToDelete];
+ testOp.completionBlock = ^{
+ hasCalledOperationCompletionHandler = YES;
+ resultError = testOp.error;
+ };
+ });
+
+ it(@"should have priority of 'normal'", ^{
+ expect(@(testOp.queuePriority)).to(equal(@(NSOperationQueuePriorityNormal)));
+ });
+
+ describe(@"running the operation", ^{
+ beforeEach(^{
+ [testOp start];
+ });
+
+ it(@"should send a deletion for each choice", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLDeleteInteractionChoiceSet class]));
+ expect(testConnectionManager.receivedRequests).to(haveCount(2));
+
+ SDLDeleteInteractionChoiceSet *delete1 = testConnectionManager.receivedRequests.firstObject;
+ expect(delete1.interactionChoiceSetID).to(equal(@(UINT16_MAX)));
+
+ SDLDeleteInteractionChoiceSet *delete2 = testConnectionManager.receivedRequests.lastObject;
+ expect(delete2.interactionChoiceSetID).to(equal(@(UINT16_MAX)));
+ });
+
+ context(@"when good responses comes back", ^{
+ beforeEach(^{
+ [testConnectionManager respondToLastMultipleRequestsWithSuccess:YES];
+ });
+
+ it(@"should finish with success", ^{
+ expect(hasCalledOperationCompletionHandler).toEventually(beTrue());
+ expect(resultError).to(beNil());
+ });
+ });
+
+ context(@"when bad responses comes back", ^{
+ beforeEach(^{
+ [testConnectionManager respondToLastMultipleRequestsWithSuccess:NO];
+ });
+
+ it(@"should finish with success", ^{
+ expect(hasCalledOperationCompletionHandler).toEventually(beTrue());
+ expect(resultError).toNot(beNil());
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLFileManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLFileManagerSpec.m
index 83b7d172b..afbd93873 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLFileManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLFileManagerSpec.m
@@ -5,6 +5,7 @@
#import "SDLError.h"
#import "SDLFile.h"
#import "SDLFileManager.h"
+#import "SDLFileManagerConfiguration.h"
#import "SDLFileType.h"
#import "SDLListFiles.h"
#import "SDLListFilesOperation.h"
@@ -22,10 +23,18 @@ typedef NSString SDLFileManagerState;
SDLFileManagerState *const SDLFileManagerStateShutdown = @"Shutdown";
SDLFileManagerState *const SDLFileManagerStateFetchingInitialList = @"FetchingInitialList";
SDLFileManagerState *const SDLFileManagerStateReady = @"Ready";
+SDLFileManagerState *const SDLFileManagerStateStartupError = @"StartupError";
@interface SDLFileManager ()
@property (strong, nonatomic) NSOperationQueue *transactionQueue;
@property (strong, nonatomic) NSMutableSet<SDLFileName *> *uploadedEphemeralFileNames;
+@property (strong, nonatomic) NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *failedFileUploadsCount;
+@property (assign, nonatomic) UInt8 maxFileUploadAttempts;
+@property (assign, nonatomic) UInt8 maxArtworkUploadAttempts;
+
+- (BOOL)sdl_canFileBeUploadedAgain:(nullable SDLFile *)file maxUploadCount:(int)maxRetryCount failedFileUploadsCount:(NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *)failedFileUploadsCount;
++ (NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *)sdl_incrementFailedUploadCountForFileName:(SDLFileName *)fileName failedFileUploadsCount:(NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *)failedFileUploadsCount;
+
@end
QuickSpecBegin(SDLFileManagerSpec)
@@ -33,11 +42,13 @@ QuickSpecBegin(SDLFileManagerSpec)
describe(@"SDLFileManager", ^{
__block TestConnectionManager *testConnectionManager = nil;
__block SDLFileManager *testFileManager = nil;
+ __block SDLFileManagerConfiguration *testFileManagerConfiguration = nil;
__block NSUInteger initialSpaceAvailable = 250;
beforeEach(^{
testConnectionManager = [[TestConnectionManager alloc] init];
- testFileManager = [[SDLFileManager alloc] initWithConnectionManager:testConnectionManager];
+ testFileManagerConfiguration = [[SDLFileManagerConfiguration alloc] initWithArtworkRetryCount:0 fileRetryCount:0];
+ testFileManager = [[SDLFileManager alloc] initWithConnectionManager:testConnectionManager configuration:testFileManagerConfiguration];
testFileManager.suspended = YES;
});
@@ -57,6 +68,11 @@ describe(@"SDLFileManager", ^{
it(@"should have no pending operations", ^{
expect(testFileManager.pendingTransactions).to(beEmpty());
});
+
+ it(@"should set the maximum number of upload attempts to 1", ^{
+ expect(testFileManager.maxFileUploadAttempts).to(equal(1));
+ expect(testFileManager.maxArtworkUploadAttempts).to(equal(1));
+ });
});
describe(@"after receiving a start message", ^{
@@ -108,6 +124,31 @@ describe(@"SDLFileManager", ^{
});
});
+ describe(@"after receiving a ListFiles error", ^{
+ __block SDLListFilesResponse *testListFilesResponse = nil;
+ __block NSSet<NSString *> *testInitialFileNames = nil;
+ __block NSUInteger initialBytesAvailable = 0;
+
+ beforeEach(^{
+ testInitialFileNames = [NSSet setWithArray:@[@"testFile1", @"testFile2", @"testFile3"]];
+ initialBytesAvailable = testFileManager.bytesAvailable;
+
+ testListFilesResponse = [[SDLListFilesResponse alloc] init];
+ testListFilesResponse.success = @NO;
+ testListFilesResponse.spaceAvailable = nil;
+ testListFilesResponse.filenames = nil;
+ [testConnectionManager respondToLastRequestWithResponse:testListFilesResponse];
+ });
+
+ it(@"should handle the error properly", ^{
+ [testConnectionManager respondToLastRequestWithResponse:testListFilesResponse];
+
+ expect(testFileManager.currentState).toEventually(match(SDLFileManagerStateStartupError));
+ expect(testFileManager.remoteFileNames).toEventually(beEmpty());
+ expect(@(testFileManager.bytesAvailable)).toEventually(equal(initialBytesAvailable));
+ });
+ });
+
describe(@"after receiving a ListFiles response", ^{
__block SDLListFilesResponse *testListFilesResponse = nil;
__block NSSet<NSString *> *testInitialFileNames = nil;
@@ -193,6 +234,40 @@ describe(@"SDLFileManager", ^{
expect(testFileManager.remoteFileNames).toNot(contain(someKnownFileName));
});
});
+
+ context(@"when the request returns an error", ^{
+ __block NSUInteger initialSpaceAvailable = 0;
+ __block NSString *someKnownFileName = nil;
+ __block BOOL completionSuccess = NO;
+ __block NSUInteger completionBytesAvailable = 0;
+ __block NSError *completionError = nil;
+
+ beforeEach(^{
+ initialSpaceAvailable = testFileManager.bytesAvailable;
+ someKnownFileName = [testInitialFileNames anyObject];
+ [testFileManager deleteRemoteFileWithName:someKnownFileName completionHandler:^(BOOL success, NSUInteger bytesAvailable, NSError * _Nullable error) {
+ completionSuccess = success;
+ completionBytesAvailable = bytesAvailable;
+ completionError = error;
+ }];
+
+ SDLDeleteFileResponse *deleteResponse = [[SDLDeleteFileResponse alloc] init];
+ deleteResponse.success = @NO;
+ deleteResponse.spaceAvailable = nil;
+
+ [NSThread sleepForTimeInterval:0.1];
+
+ [testConnectionManager respondToLastRequestWithResponse:deleteResponse];;
+ });
+
+ it(@"should handle the error properly", ^{
+ expect(testFileManager.currentState).toEventually(match(SDLFileManagerStateReady));
+ expect(completionSuccess).toEventually(beFalse());
+ expect(completionBytesAvailable).toEventually(equal(2000000000));
+ expect(completionError).toNot(beNil());
+ expect(@(testFileManager.bytesAvailable)).toEventually(equal(@(initialSpaceAvailable)));
+ });
+ });
});
describe(@"uploading a new file", ^{
@@ -270,16 +345,11 @@ describe(@"SDLFileManager", ^{
context(@"when the connection returns failure", ^{
__block SDLPutFileResponse *testResponse = nil;
- __block NSNumber *testResponseBytesAvailable = nil;
- __block NSNumber *testResponseSuccess = nil;
beforeEach(^{
- testResponseBytesAvailable = @750;
- testResponseSuccess = @NO;
-
testResponse = [[SDLPutFileResponse alloc] init];
- testResponse.spaceAvailable = testResponseBytesAvailable;
- testResponse.success = testResponseSuccess;
+ testResponse.spaceAvailable = nil;
+ testResponse.success = @NO;
[testConnectionManager respondToLastRequestWithResponse:testResponse];
});
@@ -292,9 +362,13 @@ describe(@"SDLFileManager", ^{
});
it(@"should call the completion handler with the correct data", ^{
- expect(@(completionBytesAvailable)).to(equal(@0));
- expect(@(completionSuccess)).to(equal(testResponseSuccess));
- expect(completionError).toEventually(beNil());
+ expect(completionBytesAvailable).to(equal(2000000000));
+ expect(@(completionSuccess)).to(equal(@NO));
+ expect(completionError).toEventuallyNot(beNil());
+ });
+
+ it(@"should increment the failure count for the artwork", ^{
+ expect(testFileManager.failedFileUploadsCount[testFileName]).toEventually(equal(1));
});
});
@@ -435,9 +509,9 @@ describe(@"SDLFileManager", ^{
});
it(@"should call the completion handler with the correct data", ^{
- expect(@(completionBytesAvailable)).to(equal(@0));
+ expect(@(completionBytesAvailable)).to(equal(@2000000000));
expect(@(completionSuccess)).to(equal(testResponseSuccess));
- expect(completionError).toEventually(beNil());
+ expect(completionError).toEventuallyNot(beNil());
});
});
@@ -575,7 +649,8 @@ describe(@"SDLFileManager uploading/deleting multiple files", ^{
beforeEach(^{
testConnectionManager = [[TestMultipleFilesConnectionManager alloc] init];
- testFileManager = [[SDLFileManager alloc] initWithConnectionManager:testConnectionManager];
+ SDLFileManagerConfiguration *testFileManagerConfiguration = [[SDLFileManagerConfiguration alloc] initWithArtworkRetryCount:0 fileRetryCount:0];
+ testFileManager = [[SDLFileManager alloc] initWithConnectionManager:testConnectionManager configuration:testFileManagerConfiguration];
initialSpaceAvailable = 66666;
});
@@ -1525,4 +1600,107 @@ describe(@"SDLFileManager uploading/deleting multiple files", ^{
});
});
+describe(@"SDLFileManager reupload failed files", ^{
+ context(@"setting max upload attempts with the file manager configuration", ^{
+ __block SDLFileManager *testFileManager = nil;
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLFileManagerConfiguration *testFileManagerConfiguration = nil;
+
+ it(@"should set the max upload attempts to 2 if the configuration properties are not set", ^{
+ testFileManagerConfiguration = [SDLFileManagerConfiguration defaultConfiguration];
+ testFileManager = [[SDLFileManager alloc] initWithConnectionManager:testConnectionManager configuration:testFileManagerConfiguration];
+
+ expect(testFileManager.maxFileUploadAttempts).to(equal(2));
+ expect(testFileManager.maxArtworkUploadAttempts).to(equal(2));
+ });
+
+ it(@"should set the max upload attempts to 1 if retry attempts are disabled", ^{
+ testFileManagerConfiguration = [[SDLFileManagerConfiguration alloc] initWithArtworkRetryCount:0 fileRetryCount:0];
+ testFileManager = [[SDLFileManager alloc] initWithConnectionManager:testConnectionManager configuration:testFileManagerConfiguration];
+
+ expect(testFileManager.maxFileUploadAttempts).to(equal(1));
+ expect(testFileManager.maxArtworkUploadAttempts).to(equal(1));
+ });
+
+ it(@"should set the max upload attempts to the corresponding file manager configuration retry attempt count + 1", ^{
+ UInt8 artworkRetryCount = 5;
+ UInt8 fileRetryCount = 3;
+ testFileManagerConfiguration = [[SDLFileManagerConfiguration alloc] initWithArtworkRetryCount:artworkRetryCount fileRetryCount:fileRetryCount];
+ testFileManager = [[SDLFileManager alloc] initWithConnectionManager:testConnectionManager configuration:testFileManagerConfiguration];
+
+ expect(testFileManager.maxArtworkUploadAttempts).to(equal((artworkRetryCount + 1)));
+ expect(testFileManager.maxFileUploadAttempts).to(equal(fileRetryCount + 1));
+ });
+ });
+
+ context(@"updating the failed upload count", ^{
+ __block NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *testFailedFileUploadsCount = nil;
+ __block NSString *testFileName = @"Test File A";
+
+ beforeEach(^{
+ testFailedFileUploadsCount = [NSMutableDictionary dictionary];
+
+ expect(testFailedFileUploadsCount).to(beEmpty());
+ });
+
+ it(@"should correctly add a file name", ^{
+ testFailedFileUploadsCount = [SDLFileManager sdl_incrementFailedUploadCountForFileName:testFileName failedFileUploadsCount:testFailedFileUploadsCount];
+
+ expect(testFailedFileUploadsCount[testFileName]).to(equal(1));
+ });
+
+ it(@"should correctly increment the count for a file name", ^{
+ testFailedFileUploadsCount[testFileName] = @1;
+ testFailedFileUploadsCount = [SDLFileManager sdl_incrementFailedUploadCountForFileName:testFileName failedFileUploadsCount:testFailedFileUploadsCount];
+
+ expect(testFailedFileUploadsCount[testFileName]).to(equal(2));
+ });
+ });
+
+ context(@"checking if a failed upload can be uploaded again", ^{
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLFileManager *testFileManager = nil;
+ __block SDLFileManagerConfiguration *testFileManagerConfiguration = nil;
+ __block NSMutableDictionary<SDLFileName *, NSNumber<SDLUInt> *> *testFailedFileUploadsCount = nil;
+ __block SDLFile *testFile = nil;
+ __block NSString *testFileName = @"Test File B";
+
+ beforeEach(^{
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ testFileManagerConfiguration = [[SDLFileManagerConfiguration alloc] initWithArtworkRetryCount:0 fileRetryCount:0];
+ testFileManager = [[SDLFileManager alloc] initWithConnectionManager:testConnectionManager configuration:testFileManagerConfiguration];
+ testFailedFileUploadsCount = [NSMutableDictionary dictionary];
+ testFile = [[SDLFile alloc] initWithData:[@"someData" dataUsingEncoding:NSUTF8StringEncoding] name:testFileName fileExtension:@"bin" persistent:false];
+ });
+
+ describe(@"the file cannot be uploaded again", ^{
+ it(@"should not upload a file that is nil", ^{
+ testFile = nil;
+ BOOL canUploadAgain = [testFileManager sdl_canFileBeUploadedAgain:testFile maxUploadCount:5 failedFileUploadsCount:testFailedFileUploadsCount];
+ expect(canUploadAgain).to(equal(NO));
+ });
+
+ it(@"should not upload a file that has already been uploaded the max number of times", ^{
+ testFailedFileUploadsCount[testFileName] = @4;
+ BOOL canUploadAgain = [testFileManager sdl_canFileBeUploadedAgain:testFile maxUploadCount:4 failedFileUploadsCount:testFailedFileUploadsCount];
+ expect(canUploadAgain).to(equal(NO));
+ });
+ });
+
+ describe(@"the file can be uploaded again", ^{
+ it(@"should upload a file that has not yet failed to upload", ^{
+ testFailedFileUploadsCount = [NSMutableDictionary dictionary];
+ BOOL canUploadAgain = [testFileManager sdl_canFileBeUploadedAgain:testFile maxUploadCount:2 failedFileUploadsCount:testFailedFileUploadsCount];
+ expect(canUploadAgain).to(equal(YES));
+ });
+
+ it(@"should upload a file that has not been reuploaded the max number of times", ^{
+ testFailedFileUploadsCount[testFileName] = @2;
+ BOOL canUploadAgain = [testFileManager sdl_canFileBeUploadedAgain:testFile maxUploadCount:4 failedFileUploadsCount:testFailedFileUploadsCount];
+ expect(canUploadAgain).to(equal(YES));
+ });
+ });
+ });
+});
+
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleConfigurationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleConfigurationSpec.m
index fa08d2e38..100acc9c2 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleConfigurationSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleConfigurationSpec.m
@@ -1,3 +1,10 @@
+//
+// SDLLifecycleConfigurationSpec.m
+// SmartDeviceLinkTests
+//
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
@@ -8,263 +15,234 @@
#import "SDLSpeechCapabilities.h"
#import "SDLTTSChunk.h"
+
+@interface SDLLifecycleConfiguration()
+
++ (NSString *)sdlex_shortAppIdFromFullAppId:(NSString *)fullAppId;
+
+@end
+
+
QuickSpecBegin(SDLLifecycleConfigurationSpec)
-describe(@"a lifecycle configuration", ^{
+describe(@"A lifecycle configuration", ^{
__block SDLLifecycleConfiguration *testConfig = nil;
-
- context(@"that is created with default settings", ^{
- __block NSString *someAppName = nil;
- __block NSString *someAppId = nil;
-
- beforeEach(^{
- someAppName = @"An App Name";
- someAppId = @"00542596432764329684352896423679";
-
- testConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:someAppName appId:someAppId];
- });
-
- it(@"should have properly set properties", ^{
- expect(testConfig.appName).to(match(someAppName));
- expect(testConfig.appId).to(match(someAppId));
- expect(@(testConfig.tcpDebugMode)).to(beFalsy());
- expect(testConfig.tcpDebugIPAddress).to(match(@"192.168.0.1"));
- expect(@(testConfig.tcpDebugPort)).to(equal(@12345));
- expect(@([testConfig.appType isEqualToEnum:SDLAppHMITypeDefault])).to(equal(@YES));
- expect(testConfig.additionalAppTypes).to(beNil());
- expect(@(testConfig.isMedia)).to(beFalsy());
- expect(@([testConfig.language isEqualToEnum:SDLLanguageEnUs])).to(equal(@YES));
- expect(@([[testConfig.languagesSupported firstObject] isEqualToEnum:SDLLanguageEnUs])).to(equal(@YES));
- expect(testConfig.shortAppName).to(beNil());
- expect(testConfig.ttsName).to(beNil());
- expect(testConfig.voiceRecognitionCommandNames).to(beNil());
- expect(testConfig.resumeHash).to(beNil());
+ __block NSString *testAppName = @"An App Name";
+ __block NSString *testAppId = @"00542596";
+ __block NSString *testFullAppId = @"-ab--987-adfa651kj-212346h3kjkaju";
+ __block NSString *expectedGeneratedAppId = @"ab987adfa6";
+
+ beforeEach(^{
+ testConfig = nil;
+ });
+
+ context(@"created with a default configuration", ^{
+ context(@"should be successfully initialized", ^{
+ it(@"defaultConfigurationWithAppName:appId:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:testAppName appId:testAppId];
+
+ expect(testConfig.appId).to(match(testAppId));
+ expect(testConfig.fullAppId).to(beNil());
+ #pragma clang diagnostic pop
+ });
+
+ it(@"defaultConfigurationWithAppName:fullAppId:", ^{
+ testConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:testAppName fullAppId:testFullAppId];
+
+ expect(testConfig.appId).to(match(expectedGeneratedAppId));
+ expect(testConfig.fullAppId).to(match(testFullAppId));
+ });
+
+ afterEach(^{
+ expect(testConfig.appName).to(match(testAppName));
+ expect(testConfig.tcpDebugMode).to(beFalse());
+ expect(testConfig.tcpDebugIPAddress).to(match(@"192.168.0.1"));
+ expect(@(testConfig.tcpDebugPort)).to(equal(@12345));
+ expect(testConfig.appType).to(match(SDLAppHMITypeDefault));
+ expect(testConfig.additionalAppTypes).to(beNil());
+ expect(testConfig.isMedia).to(beFalse());
+ expect(testConfig.language).to(match(SDLLanguageEnUs));
+ expect(testConfig.languagesSupported.firstObject).to(match(SDLLanguageEnUs));
+ expect(testConfig.shortAppName).to(beNil());
+ expect(testConfig.ttsName).to(beNil());
+ expect(testConfig.voiceRecognitionCommandNames).to(beNil());
+ expect(testConfig.resumeHash).to(beNil());
+ });
});
-
- describe(@"after setting properties manually", ^{
- __block NSString *someShortAppName = nil;
- __block SDLTTSChunk *someTTSChunk = nil;
- __block NSArray<SDLTTSChunk *> *someTTSName = nil;
- __block NSArray<NSString *> *someSynonyms = nil;
- __block NSString *someResumeHashString = nil;
-
+
+ context(@"If customized", ^{
+ __block NSString *testShortAppName = nil;
+ __block SDLTTSChunk *testTTSChunk = nil;
+ __block NSArray<SDLTTSChunk *> *testTTSName = nil;
+ __block NSArray<NSString *> *testSynonyms = nil;
+ __block NSString *testResumeHashString = nil;
+
beforeEach(^{
- someTTSChunk = [[SDLTTSChunk alloc] init];
- someTTSChunk.text = @"some tts name";
- someTTSChunk.type = SDLSpeechCapabilitiesText;
-
- someTTSName = @[someTTSChunk];
- someShortAppName = @"Short Name";
- someSynonyms = @[@"Test 1", @"Test 2", @"Test 3", @"Test 4"];
- someResumeHashString = @"testing";
-
+ testConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:testAppName fullAppId:testFullAppId];
+ });
+
+ it(@"it should get and set correctly", ^{
+ testShortAppName = @"Short Name";
+ testTTSChunk = [[SDLTTSChunk alloc] initWithText:@"test tts name" type:SDLSpeechCapabilitiesText];
+ testTTSName = @[testTTSChunk];
+ testSynonyms = @[@"Test 1", @"Test 2", @"Test 3", @"Test 4"];
+ testResumeHashString = @"testing";
+
testConfig.appType = SDLAppHMITypeMedia;
testConfig.additionalAppTypes = @[SDLAppHMITypeProjection];
testConfig.language = SDLLanguageArSa;
testConfig.languagesSupported = @[SDLLanguageArSa, SDLLanguageEnAu, SDLLanguageEnUs];
- testConfig.shortAppName = someShortAppName;
- testConfig.ttsName = someTTSName;
- testConfig.voiceRecognitionCommandNames = someSynonyms;
- testConfig.resumeHash = someResumeHashString;
+ testConfig.shortAppName = testShortAppName;
+ testConfig.ttsName = testTTSName;
+ testConfig.voiceRecognitionCommandNames = testSynonyms;
+ testConfig.resumeHash = testResumeHashString;
});
-
- it(@"should have properly set properties", ^{
- expect(testConfig.appName).to(match(someAppName));
- expect(testConfig.appId).to(match(someAppId));
- expect(@(testConfig.tcpDebugMode)).to(beFalsy());
+
+ afterEach(^{
+ expect(testConfig.appName).to(match(testAppName));
+ expect(testConfig.shortAppName).to(match(testShortAppName));
+ expect(testConfig.fullAppId).to(match(testFullAppId));
+ expect(testConfig.appId).to(match(expectedGeneratedAppId));
+ expect(testConfig.tcpDebugMode).to(beFalse());
expect(testConfig.tcpDebugIPAddress).to(match(@"192.168.0.1"));
expect(@(testConfig.tcpDebugPort)).to(equal(@12345));
- expect(@([testConfig.appType isEqualToEnum:SDLAppHMITypeMedia])).to(equal(@YES));
+ expect(testConfig.appType).to(match(SDLAppHMITypeMedia));
expect(testConfig.additionalAppTypes.firstObject).to(match(SDLAppHMITypeProjection));
- expect(@(testConfig.isMedia)).to(beTruthy());
- expect(@([testConfig.language isEqualToEnum:SDLLanguageArSa])).to(equal(@YES));
+ expect(testConfig.isMedia).to(beTrue());
+ expect(testConfig.language).to(match(SDLLanguageArSa));
expect(testConfig.languagesSupported).to(haveCount(@3));
- expect(testConfig.shortAppName).to(match(someShortAppName));
- expect(testConfig.ttsName).to(contain(someTTSChunk));
+ expect(testConfig.ttsName).to(contain(testTTSChunk));
expect(testConfig.ttsName).to(haveCount(@1));
- expect(testConfig.voiceRecognitionCommandNames).to(haveCount(@(someSynonyms.count)));
- expect(testConfig.resumeHash).to(match(someResumeHashString));
+ expect(testConfig.voiceRecognitionCommandNames).to(haveCount(@(testSynonyms.count)));
+ expect(testConfig.resumeHash).to(match(testResumeHashString));
});
});
});
- context(@"that is created with debug settings", ^{
- __block NSString *someAppName = nil;
- __block NSString *someAppId = nil;
- __block NSString *someIPAddress = nil;
- __block UInt16 somePort = 0;
+ context(@"created with a debug configuration", ^{
+ __block NSString *testIPAddress = nil;
+ __block UInt16 testPort = 0;
beforeEach(^{
- someAppName = @"An App Name";
- someAppId = @"00542596432764329684352896423679";
- someIPAddress = @"1.1.1.1";
- somePort = 42;
-
- testConfig = [SDLLifecycleConfiguration debugConfigurationWithAppName:someAppName appId:someAppId ipAddress:someIPAddress port:somePort];
+ testIPAddress = @"1.1.1.1";
+ testPort = 42;
});
-
- it(@"should have properly set properties", ^{
- expect(testConfig.appName).to(match(someAppName));
- expect(testConfig.appId).to(match(someAppId));
- expect(@(testConfig.tcpDebugMode)).to(beTruthy());
- expect(testConfig.tcpDebugIPAddress).to(match(someIPAddress));
- expect(@(testConfig.tcpDebugPort)).to(equal(@(somePort)));
- expect(@([testConfig.appType isEqualToEnum:SDLAppHMITypeDefault])).to(equal(@YES));
- expect(testConfig.additionalAppTypes).to(beNil());
- expect(@([testConfig.language isEqualToEnum:SDLLanguageEnUs])).to(equal(@YES));
- expect(@([[testConfig.languagesSupported firstObject] isEqualToEnum:SDLLanguageEnUs])).to(equal(@YES));
- expect(testConfig.shortAppName).to(beNil());
- expect(testConfig.ttsName).to(beNil());
- expect(testConfig.voiceRecognitionCommandNames).to(beNil());
- expect(testConfig.resumeHash).to(beNil());
+
+ context(@"should be successfully initialized", ^{
+ it(@"debugConfigurationWithAppName:appId:ipAddress:port:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testConfig = [SDLLifecycleConfiguration debugConfigurationWithAppName:testAppName appId:testAppId ipAddress:testIPAddress port:testPort];
+
+ expect(testConfig.appId).to(match(testAppId));
+ expect(testConfig.fullAppId).to(beNil());
+ #pragma clang diagnostic pop
+ });
+
+ it(@"debugConfigurationWithAppName:fullAppId:ipAddress:port:", ^{
+ testConfig = [SDLLifecycleConfiguration debugConfigurationWithAppName:testAppName fullAppId:testFullAppId ipAddress:testIPAddress port:testPort];
+
+ expect(testConfig.appId).to(match(expectedGeneratedAppId));
+ expect(testConfig.fullAppId).to(match(testFullAppId));
+ });
+
+ afterEach(^{
+ expect(testConfig.appName).to(match(testAppName));
+ expect(testConfig.tcpDebugMode).to(beTrue());
+ expect(testConfig.tcpDebugIPAddress).to(match(testIPAddress));
+ expect(@(testConfig.tcpDebugPort)).to(equal(@(testPort)));
+ expect(testConfig.appType).to(match(SDLAppHMITypeDefault));
+ expect(testConfig.additionalAppTypes).to(beNil());
+ expect(testConfig.language).to(match(SDLLanguageEnUs));
+ expect(testConfig.languagesSupported.firstObject).to(match(SDLLanguageEnUs));
+ expect(testConfig.shortAppName).to(beNil());
+ expect(testConfig.ttsName).to(beNil());
+ expect(testConfig.voiceRecognitionCommandNames).to(beNil());
+ expect(testConfig.resumeHash).to(beNil());
+ });
});
-
- describe(@"after setting properties manually", ^{
- __block NSString *someShortAppName = nil;
- __block SDLTTSChunk *someTTSChunk = nil;
- __block NSArray<SDLTTSChunk *> *someTTSName = nil;
- __block NSArray<NSString *> *someSynonyms = nil;
- __block NSString *someResumeHashString = nil;
-
+
+ context(@"If customized", ^{
+ __block NSString *testShortAppName = nil;
+ __block SDLTTSChunk *testTTSChunk = nil;
+ __block NSArray<SDLTTSChunk *> *testTTSName = nil;
+ __block NSArray<NSString *> *testSynonyms = nil;
+ __block NSString *testResumeHashString = nil;
+
beforeEach(^{
- someTTSChunk = [[SDLTTSChunk alloc] init];
- someTTSChunk.text = @"some tts name";
- someTTSChunk.type = SDLSpeechCapabilitiesText;
-
- someShortAppName = @"Short Name 2";
- someTTSName = @[someTTSChunk];
- someSynonyms = @[@"Test 1", @"Test 2"];
-
- testConfig.appType = SDLAppHMITypeMedia;
+ testConfig = [SDLLifecycleConfiguration debugConfigurationWithAppName:testAppName fullAppId:testFullAppId ipAddress:testIPAddress port:testPort];
+ });
+
+ it(@"it should get and set correctly", ^{
+ testShortAppName = @"Test Short Name";
+ testTTSChunk = [[SDLTTSChunk alloc] initWithText:@"test tts name" type:SDLSpeechCapabilitiesText];
+ testTTSName = @[testTTSChunk];
+ testSynonyms = @[@"Test 1", @"Test 2", @"Test 3", @"Test 4"];
+ testResumeHashString = @"testing";
+
+ testConfig.appType = SDLAppHMITypeInformation;
+ testConfig.additionalAppTypes = @[SDLAppHMITypeProjection];
testConfig.language = SDLLanguageArSa;
testConfig.languagesSupported = @[SDLLanguageArSa, SDLLanguageEnAu, SDLLanguageEnUs];
- testConfig.shortAppName = someShortAppName;
- testConfig.ttsName = someTTSName;
- testConfig.voiceRecognitionCommandNames = someSynonyms;
- testConfig.resumeHash = someResumeHashString;
+ testConfig.shortAppName = testShortAppName;
+ testConfig.ttsName = testTTSName;
+ testConfig.voiceRecognitionCommandNames = testSynonyms;
+ testConfig.resumeHash = testResumeHashString;
});
-
- it(@"should have properly set properties", ^{
- expect(testConfig.appName).to(match(someAppName));
- expect(testConfig.appId).to(match(someAppId));
- expect(@(testConfig.tcpDebugMode)).to(beTruthy());
- expect(testConfig.tcpDebugIPAddress).to(match(someIPAddress));
- expect(@(testConfig.tcpDebugPort)).to(equal(@(somePort)));
- expect(@([testConfig.appType isEqualToEnum:SDLAppHMITypeMedia])).to(equal(@YES));
- expect(testConfig.additionalAppTypes).to(beNil());
- expect(@(testConfig.isMedia)).to(beTruthy());
- expect(@([testConfig.language isEqualToEnum:SDLLanguageArSa])).to(equal(@YES));
+
+ afterEach(^{
+ expect(testConfig.appName).to(match(testAppName));
+ expect(testConfig.shortAppName).to(match(testShortAppName));
+ expect(testConfig.fullAppId).to(match(testFullAppId));
+ expect(testConfig.appId).to(match(expectedGeneratedAppId));
+ expect(testConfig.tcpDebugMode).to(beTrue());
+ expect(testConfig.tcpDebugIPAddress).to(match(@"1.1.1.1"));
+ expect(@(testConfig.tcpDebugPort)).to(equal(@42));
+ expect(testConfig.appType).to(match(SDLAppHMITypeInformation));
+ expect(testConfig.additionalAppTypes.firstObject).to(match(SDLAppHMITypeProjection));
+ expect(testConfig.isMedia).to(beFalse());
+ expect(testConfig.language).to(match(SDLLanguageArSa));
expect(testConfig.languagesSupported).to(haveCount(@3));
- expect(testConfig.shortAppName).to(match(someShortAppName));
- expect(testConfig.ttsName).to(contain(someTTSChunk));
+ expect(testConfig.ttsName).to(contain(testTTSChunk));
expect(testConfig.ttsName).to(haveCount(@1));
- expect(testConfig.voiceRecognitionCommandNames).to(haveCount(@(someSynonyms.count)));
+ expect(testConfig.voiceRecognitionCommandNames).to(haveCount(@(testSynonyms.count)));
+ expect(testConfig.resumeHash).to(match(testResumeHashString));
});
});
});
-
- context(@"that configuration update properties are set", ^{
- describe(@"after using default init", ^{
- __block SDLLifecycleConfigurationUpdate *update = nil;
-
- beforeEach(^{
- update = [[SDLLifecycleConfigurationUpdate alloc] init];
- });
-
- it(@"should have all properties to nil", ^{
- expect(update.appName).to(beNil());
- expect(update.shortAppName).to(beNil());
- expect(update.ttsName).to(beNil());
- expect(update.voiceRecognitionCommandNames).to(beNil());
- });
-
- it(@"should set app name", ^{
- NSString *test = @"Some Test String";
- update.appName = test;
- expect(update.appName).to(match(test));
- expect(update.shortAppName).to(beNil());
- expect(update.ttsName).to(beNil());
- expect(update.voiceRecognitionCommandNames).to(beNil());
- });
-
- it(@"should set short app name", ^{
- NSString *test = @"Some Test String";
- update.shortAppName = test;
- expect(update.appName).to(beNil());
- expect(update.shortAppName).to(match(test));
- expect(update.ttsName).to(beNil());
- expect(update.voiceRecognitionCommandNames).to(beNil());
- });
-
- it(@"should set tts app name", ^{
- NSArray<SDLTTSChunk *> *test = [SDLTTSChunk textChunksFromString:@"Some Test String"];
- update.ttsName = test;
- expect(update.appName).to(beNil());
- expect(update.shortAppName).to(beNil());
- expect(update.ttsName).to(equal(test));
- expect(update.voiceRecognitionCommandNames).to(beNil());
- });
-
- it(@"should set vr synonyms", ^{
- NSArray<NSString *> *test = @[@"Some Test String"];
- update.voiceRecognitionCommandNames = test;
- expect(update.appName).to(beNil());
- expect(update.shortAppName).to(beNil());
- expect(update.ttsName).to(beNil());
- expect(update.voiceRecognitionCommandNames).to(equal(test));
- });
- });
-
- describe(@"after using default init", ^{
- it(@"should have all properties to nil", ^{
- SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:nil shortAppName:nil ttsName:nil voiceRecognitionCommandNames:nil];
-
- expect(update.appName).to(beNil());
- expect(update.shortAppName).to(beNil());
- expect(update.ttsName).to(beNil());
- expect(update.voiceRecognitionCommandNames).to(beNil());
- });
-
- it(@"should set app name", ^{
- NSString *test = @"Some Test String";
- SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:test shortAppName:nil ttsName:nil voiceRecognitionCommandNames:nil];
-
- expect(update.appName).to(match(test));
- expect(update.shortAppName).to(beNil());
- expect(update.ttsName).to(beNil());
- expect(update.voiceRecognitionCommandNames).to(beNil());
- });
-
- it(@"should set short app name", ^{
- NSString *test = @"Some Test String";
- SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:nil shortAppName:test ttsName:nil voiceRecognitionCommandNames:nil];
-
- expect(update.appName).to(beNil());
- expect(update.shortAppName).to(match(test));
- expect(update.ttsName).to(beNil());
- expect(update.voiceRecognitionCommandNames).to(beNil());
- });
-
- it(@"should set tts app name", ^{
- NSArray<SDLTTSChunk *> *test = [SDLTTSChunk textChunksFromString:@"Some Test String"];
- SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:nil shortAppName:nil ttsName:test voiceRecognitionCommandNames:nil];
-
- expect(update.appName).to(beNil());
- expect(update.shortAppName).to(beNil());
- expect(update.ttsName).to(equal(test));
- expect(update.voiceRecognitionCommandNames).to(beNil());
- });
-
- it(@"should set vr synonyms", ^{
- NSArray<NSString *> *test = @[@"Some Test String"];
- SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:nil shortAppName:nil ttsName:nil voiceRecognitionCommandNames:test];
-
- expect(update.appName).to(beNil());
- expect(update.shortAppName).to(beNil());
- expect(update.ttsName).to(beNil());
- expect(update.voiceRecognitionCommandNames).to(equal(test));
- });
- });
+});
+
+describe(@"When generating the `appId` from the `fullAppId`", ^{
+ it(@"should return nil if full app id is nil", ^{
+ NSString *testFullAppId = nil;
+ NSString *appId = [SDLLifecycleConfiguration sdlex_shortAppIdFromFullAppId:testFullAppId];
+ expect(appId).to(beNil());
+ });
+
+ it(@"should return an empty string if the full app id is empty", ^{
+ NSString *testFullAppId = @"";
+ NSString *appId = [SDLLifecycleConfiguration sdlex_shortAppIdFromFullAppId:testFullAppId];
+ expect(appId).to(beEmpty());
+ });
+
+ it(@"should return a string truncated to the first non-dash 10 characters", ^{
+ NSString *testFullAppId = @"34-uipe--k-rtqwedeftg-1";
+ NSString *appId = [SDLLifecycleConfiguration sdlex_shortAppIdFromFullAppId:testFullAppId];
+ expect(appId).to(match(@"34uipekrtq"));
+ });
+
+ it(@"should return a string if the full app id is less than 10 characters", ^{
+ NSString *testFullAppId = @"a";
+ NSString *appId = [SDLLifecycleConfiguration sdlex_shortAppIdFromFullAppId:testFullAppId];
+ expect(appId).to(match(@"a"));
+ });
+
+ it(@"should return an empty string if the full app id only has dash characters", ^{
+ NSString *testFullAppId = @"-";
+ NSString *appId = [SDLLifecycleConfiguration sdlex_shortAppIdFromFullAppId:testFullAppId];
+ expect(appId).to(beEmpty());
});
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m
index acdcb833c..49892f366 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m
@@ -8,6 +8,7 @@
#import "SDLConnectionManagerType.h"
#import "SDLError.h"
#import "SDLFileManager.h"
+#import "SDLGlobals.h"
#import "SDLHMILevel.h"
#import "SDLLifecycleConfiguration.h"
#import "SDLLockScreenConfiguration.h"
@@ -38,6 +39,11 @@
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+@interface SDLLifecycleManager ()
+// this private property is used for testing
+@property (copy, nonatomic) dispatch_queue_t lifecycleQueue;
+@end
+
QuickConfigurationBegin(SendingRPCsConfiguration)
+ (void)configure:(Configuration *)configuration {
@@ -56,6 +62,12 @@ QuickConfigurationBegin(SendingRPCsConfiguration)
QuickConfigurationEnd
+@interface SDLLifecycleManager ()
+// reach the private property for testing
+@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager;
+@end
+
+
QuickSpecBegin(SDLLifecycleManagerSpec)
describe(@"a lifecycle manager", ^{
@@ -70,8 +82,20 @@ describe(@"a lifecycle manager", ^{
__block id streamingManagerMock = OCMClassMock([SDLStreamingMediaManager class]);
__block id systemCapabilityMock = OCMClassMock([SDLSystemCapabilityManager class]);
+ void (^transitionToState)(SDLState *) = ^(SDLState *state) {
+ dispatch_sync(testManager.lifecycleQueue, ^{
+ [testManager.lifecycleStateMachine transitionToState:state];
+ });
+ };
+
+ void (^setToStateWithEnterTransition)(SDLState *, SDLState *) = ^(SDLState *oldState, SDLState *newState) {
+ dispatch_sync(testManager.lifecycleQueue, ^{
+ [testManager.lifecycleStateMachine setToState:newState fromOldState:oldState callEnterTransition:YES];
+ });
+ };
+
beforeEach(^{
- OCMStub([proxyMock iapProxyWithListener:[OCMArg any]]).andReturn(proxyMock);
+ OCMStub([proxyMock iapProxyWithListener:[OCMArg any] secondaryTransportManager:[OCMArg any]]).andReturn(proxyMock);
OCMStub([(SDLProxy*)proxyMock protocol]).andReturn(protocolMock);
SDLLifecycleConfiguration *testLifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"Test App" appId:@"Test Id"];
@@ -186,7 +210,13 @@ describe(@"a lifecycle manager", ^{
expect(testManager.proxy).toNot(beNil());
expect(testManager.lifecycleState).to(match(SDLLifecycleStateStarted));
});
-
+
+ it(@"should initialize secondary transport manager if not in tcpDebugMode", ^{
+ if (!testManager.configuration.lifecycleConfig.tcpDebugMode) {
+ expect(testManager.secondaryTransportManager).toNot(beNil());
+ }
+ });
+
describe(@"after receiving a connect notification", ^{
beforeEach(^{
// When we connect, we should be creating an sending an RAI
@@ -238,11 +268,13 @@ describe(@"a lifecycle manager", ^{
OCMStub([(SDLLockScreenManager *)lockScreenManagerMock start]);
OCMStub([fileManagerMock startWithCompletionHandler:([OCMArg invokeBlockWithArgs:@(YES), fileManagerStartError, nil])]);
OCMStub([permissionManagerMock startWithCompletionHandler:([OCMArg invokeBlockWithArgs:@(YES), permissionManagerStartError, nil])]);
- OCMStub([streamingManagerMock startWithProtocol:protocolMock]);
-
+ if (testConfig.lifecycleConfig.tcpDebugMode) {
+ OCMStub([streamingManagerMock startWithProtocol:protocolMock]);
+ }
+
// Send an RAI response & make sure we have an HMI status to move the lifecycle forward
testManager.hmiLevel = SDLHMILevelFull;
- [testManager.lifecycleStateMachine transitionToState:SDLLifecycleStateRegistered];
+ transitionToState(SDLLifecycleStateRegistered);
[NSThread sleepForTimeInterval:0.3];
});
@@ -251,7 +283,9 @@ describe(@"a lifecycle manager", ^{
OCMVerify([(SDLLockScreenManager *)lockScreenManagerMock start]);
OCMVerify([fileManagerMock startWithCompletionHandler:[OCMArg any]]);
OCMVerify([permissionManagerMock startWithCompletionHandler:[OCMArg any]]);
- OCMVerify([streamingManagerMock startWithProtocol:[OCMArg any]]);
+ if (testManager.configuration.lifecycleConfig.tcpDebugMode) {
+ OCMVerify([streamingManagerMock startWithProtocol:[OCMArg any]]);
+ }
});
itBehavesLike(@"unable to send an RPC", ^{ return @{ @"manager": testManager }; });
@@ -285,8 +319,8 @@ describe(@"a lifecycle manager", ^{
response.resultCode = SDLResultSuccess;
testManager.registerResponse = response;
- [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpHMI fromOldState:nil callEnterTransition:YES];
-
+ setToStateWithEnterTransition(nil, SDLLifecycleStateSettingUpHMI);
+
expect(@(readyHandlerSuccess)).to(equal(@NO));
expect(readyHandlerError).to(beNil());
});
@@ -302,7 +336,7 @@ describe(@"a lifecycle manager", ^{
response.resultCode = SDLResultSuccess;
testManager.registerResponse = response;
- [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpHMI fromOldState:nil callEnterTransition:YES];
+ setToStateWithEnterTransition(nil, SDLLifecycleStateSettingUpHMI);
testHMILevel = SDLHMILevelFull;
testHMIStatus.hmiLevel = testHMILevel;
@@ -323,7 +357,7 @@ describe(@"a lifecycle manager", ^{
response.resultCode = SDLResultSuccess;
testManager.registerResponse = response;
- [testManager.lifecycleStateMachine setToState:SDLLifecycleStateReady fromOldState:nil callEnterTransition:YES];
+ setToStateWithEnterTransition(nil, SDLLifecycleStateReady);
expect(@(readyHandlerSuccess)).toEventually(equal(@YES));
expect(readyHandlerError).toEventually(beNil());
@@ -337,7 +371,7 @@ describe(@"a lifecycle manager", ^{
response.info = @"some info";
testManager.registerResponse = response;
- [testManager.lifecycleStateMachine setToState:SDLLifecycleStateReady fromOldState:nil callEnterTransition:YES];
+ setToStateWithEnterTransition(nil, SDLLifecycleStateReady);
expect(@(readyHandlerSuccess)).toEventually(equal(@YES));
expect(readyHandlerError).toEventuallyNot(beNil());
@@ -366,14 +400,14 @@ describe(@"a lifecycle manager", ^{
SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:@"EnGb" shortAppName:@"E" ttsName:[SDLTTSChunk textChunksFromString:@"EnGb ttsName"] voiceRecognitionCommandNames:nil];
OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]).andReturn(update);
- [testManager.lifecycleStateMachine setToState:SDLLifecycleStateUpdatingConfiguration fromOldState:SDLLifecycleStateRegistered callEnterTransition:YES];
+ setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
// Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
[testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
- expect(testManager.configuration.lifecycleConfig.language).to(equal(SDLLanguageEnGb));
- expect(testManager.configuration.lifecycleConfig.appName).to(equal(@"EnGb"));
- expect(testManager.configuration.lifecycleConfig.shortAppName).to(equal(@"E"));
- expect(testManager.configuration.lifecycleConfig.ttsName).to(equal([SDLTTSChunk textChunksFromString:@"EnGb ttsName"]));
+ expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnGb));
+ expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"EnGb"));
+ expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"E"));
+ expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(equal([SDLTTSChunk textChunksFromString:@"EnGb ttsName"]));
OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]);
});
@@ -388,14 +422,14 @@ describe(@"a lifecycle manager", ^{
OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]).andReturn(nil);
- [testManager.lifecycleStateMachine setToState:SDLLifecycleStateUpdatingConfiguration fromOldState:SDLLifecycleStateRegistered callEnterTransition:YES];
+ setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
// Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
[testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
- expect(testManager.configuration.lifecycleConfig.language).to(equal(SDLLanguageEnUs));
- expect(testManager.configuration.lifecycleConfig.appName).to(equal(@"Test App"));
- expect(testManager.configuration.lifecycleConfig.shortAppName).to(equal(@"Short Name"));
- expect(testManager.configuration.lifecycleConfig.ttsName).to(beNil());
+ expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnUs));
+ expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"Test App"));
+ expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"Short Name"));
+ expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(beNil());
OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]);
});
@@ -432,6 +466,7 @@ describe(@"a lifecycle manager", ^{
testUnregisterResponse.success = @YES;
testUnregisterResponse.correlationID = @(testManager.lastCorrelationId);
+ // This should run on `com.sdl.rpcProcessingQueue` to simulate the real case.
[testManager.notificationDispatcher postRPCResponseNotification:SDLDidReceiveUnregisterAppInterfaceResponse response:testUnregisterResponse];
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m
index 3889c37d1..489de7fb0 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m
@@ -1,5 +1,6 @@
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
#import "SDLFakeViewControllerPresenter.h"
#import "SDLLockScreenConfiguration.h"
@@ -201,6 +202,61 @@ describe(@"a lock screen manager", ^{
});
});
});
+
+ describe(@"A lock screen status of OPTIONAL", ^{
+ __block SDLLockScreenManager *testLockScreenManager = nil;
+ __block SDLLockScreenConfiguration *testLockScreenConfig = nil;
+ __block id mockViewControllerPresenter = nil;
+ __block SDLRPCNotificationNotification *testLockStatusNotification = nil;
+
+ beforeEach(^{
+ mockViewControllerPresenter = OCMClassMock([SDLFakeViewControllerPresenter class]);
+
+ SDLOnLockScreenStatus *testOptionalStatus = [[SDLOnLockScreenStatus alloc] init];
+ testOptionalStatus.lockScreenStatus = SDLLockScreenStatusOptional;
+ testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testOptionalStatus];
+
+ testLockScreenConfig = [SDLLockScreenConfiguration enabledConfiguration];
+ });
+
+ context(@"showInOptionalState is true", ^{
+ beforeEach(^{
+ testLockScreenConfig.showInOptionalState = true;
+
+ testLockScreenManager = [[SDLLockScreenManager alloc] initWithConfiguration:testLockScreenConfig notificationDispatcher:nil presenter:mockViewControllerPresenter];
+
+ [testLockScreenManager start]; // Sets `canPresent` to `true`
+ });
+
+ it(@"should present the lock screen if not already presented", ^{
+ OCMStub([mockViewControllerPresenter lockViewController]).andReturn([OCMArg any]);
+ OCMStub([mockViewControllerPresenter presented]).andReturn(false);
+
+ [[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification];
+
+ OCMVerify([mockViewControllerPresenter present]);
+ });
+ });
+
+ context(@"showInOptionalState is false", ^{
+ beforeEach(^{
+ testLockScreenConfig.showInOptionalState = false;
+
+ testLockScreenManager = [[SDLLockScreenManager alloc] initWithConfiguration:testLockScreenConfig notificationDispatcher:nil presenter:mockViewControllerPresenter];
+
+ [testLockScreenManager start]; // Sets `canPresent` to `true`
+ });
+
+ it(@"should dismiss the lock screen if already presented", ^{
+ OCMStub([mockViewControllerPresenter lockViewController]).andReturn([OCMArg any]);
+ OCMStub([mockViewControllerPresenter presented]).andReturn(true);
+
+ [[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification];
+
+ OCMVerify([mockViewControllerPresenter dismiss]);
+ });
+ });
+ });
});
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m
index b6b52f0a0..84936f211 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m
@@ -34,12 +34,24 @@ describe(@"a menu cell", ^{
});
it(@"should initialize properly as a submenu item", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
testCell = [[SDLMenuCell alloc] initWithTitle:someTitle subCells:someSubcells];
expect(testCell.title).to(equal(someTitle));
expect(testCell.icon).to(beNil());
expect(testCell.voiceCommands).to(beNil());
expect(testCell.subCells).to(equal(someSubcells));
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should initialize properly as a submenu item with icon", ^{
+ testCell = [[SDLMenuCell alloc] initWithTitle:someTitle icon:someArtwork subCells:someSubcells];
+
+ expect(testCell.title).to(equal(someTitle));
+ expect(testCell.icon).to(equal(someArtwork));
+ expect(testCell.voiceCommands).to(beNil());
+ expect(testCell.subCells).to(equal(someSubcells));
});
});
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m
index a0c078d40..9eb966520 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m
@@ -52,13 +52,23 @@ describe(@"menu manager", ^{
__block TestConnectionManager *mockConnectionManager = nil;
__block SDLFileManager *mockFileManager = nil;
- __block SDLArtwork *testArtwork = [[SDLArtwork alloc] initWithData:[@"Test data" dataUsingEncoding:NSUTF8StringEncoding] name:@"some artwork name" fileExtension:@"png" persistent:NO];
+ __block SDLArtwork *testArtwork = nil;
+ __block SDLArtwork *testArtwork2 = nil;
- __block SDLMenuCell *textOnlyCell = [[SDLMenuCell alloc] initWithTitle:@"Test 1" icon:nil voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {}];
- __block SDLMenuCell *textAndImageCell = [[SDLMenuCell alloc] initWithTitle:@"Test 2" icon:testArtwork voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {}];
- __block SDLMenuCell *submenuCell = [[SDLMenuCell alloc] initWithTitle:@"Test 3" subCells:@[textOnlyCell, textAndImageCell]];
+ __block SDLMenuCell *textOnlyCell = nil;
+ __block SDLMenuCell *textAndImageCell = nil;
+ __block SDLMenuCell *submenuCell = nil;
+ __block SDLMenuCell *submenuImageCell = nil;
beforeEach(^{
+ testArtwork = [[SDLArtwork alloc] initWithData:[@"Test data" dataUsingEncoding:NSUTF8StringEncoding] name:@"some artwork name" fileExtension:@"png" persistent:NO];
+ testArtwork2 = [[SDLArtwork alloc] initWithData:[@"Test data 2" dataUsingEncoding:NSUTF8StringEncoding] name:@"some artwork name 2" fileExtension:@"png" persistent:NO];
+
+ textOnlyCell = [[SDLMenuCell alloc] initWithTitle:@"Test 1" icon:nil voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {}];
+ textAndImageCell = [[SDLMenuCell alloc] initWithTitle:@"Test 2" icon:testArtwork voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {}];
+ submenuCell = [[SDLMenuCell alloc] initWithTitle:@"Test 3" icon:nil subCells:@[textOnlyCell, textAndImageCell]];
+ submenuImageCell = [[SDLMenuCell alloc] initWithTitle:@"Test 4" icon:testArtwork2 subCells:@[textOnlyCell]];
+
mockConnectionManager = [[TestConnectionManager alloc] init];
mockFileManager = OCMClassMock([SDLFileManager class]);
testManager = [[SDLMenuManager alloc] initWithConnectionManager:mockConnectionManager fileManager:mockFileManager];
@@ -156,10 +166,21 @@ describe(@"menu manager", ^{
testManager.displayCapabilities.graphicSupported = @YES;
});
- it(@"should fail with a duplicate title", ^{
- testManager.menuCells = @[textOnlyCell, textOnlyCell];
+ context(@"duplicate titles", ^{
+ it(@"should fail with a duplicate title", ^{
+ testManager.menuCells = @[textOnlyCell, textOnlyCell];
+ expect(testManager.menuCells).to(beEmpty());
+ });
+ });
- expect(testManager.menuCells).to(beEmpty());
+ context(@"duplicate VR commands", ^{
+ __block SDLMenuCell *textAndVRCell1 = [[SDLMenuCell alloc] initWithTitle:@"Test 1" icon:nil voiceCommands:@[@"Cat", @"Turtle"] handler:^(SDLTriggerSource _Nonnull triggerSource) {}];
+ __block SDLMenuCell *textAndVRCell2 = [[SDLMenuCell alloc] initWithTitle:@"Test 3" icon:nil voiceCommands:@[@"Cat", @"Dog"] handler:^(SDLTriggerSource _Nonnull triggerSource) {}];
+
+ it(@"should fail when menu items have duplicate vr commands", ^{
+ testManager.menuCells = @[textAndVRCell1, textAndVRCell2];
+ expect(testManager.menuCells).to(beEmpty());
+ });
});
it(@"should properly update a text cell", ^{
@@ -174,6 +195,20 @@ describe(@"menu manager", ^{
expect(add).toNot(beEmpty());
});
+ it(@"should properly update with subcells", ^{
+ testManager.menuCells = @[submenuCell];
+ [mockConnectionManager respondToLastMultipleRequestsWithSuccess:YES];
+
+ NSPredicate *addCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddCommand class]];
+ NSArray *adds = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:addCommandPredicate];
+
+ NSPredicate *submenuCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddSubMenu class]];
+ NSArray *submenus = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:submenuCommandPredicate];
+
+ expect(adds).to(haveCount(2));
+ expect(submenus).to(haveCount(1));
+ });
+
describe(@"updating with an image", ^{
context(@"when the image is already on the head unit", ^{
beforeEach(^{
@@ -181,14 +216,20 @@ describe(@"menu manager", ^{
});
it(@"should properly update an image cell", ^{
- testManager.menuCells = @[textAndImageCell];
+ testManager.menuCells = @[textAndImageCell, submenuImageCell];
NSPredicate *addCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddCommand class]];
NSArray *add = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:addCommandPredicate];
SDLAddCommand *sentCommand = add.firstObject;
+ NSPredicate *addSubmenuPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddSubMenu class]];
+ NSArray *submenu = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:addSubmenuPredicate];
+ SDLAddSubMenu *sentSubmenu = submenu.firstObject;
+
expect(add).to(haveCount(1));
+ expect(submenu).to(haveCount(1));
expect(sentCommand.cmdIcon.value).to(equal(testArtwork.name));
+ expect(sentSubmenu.menuIcon.value).to(equal(testArtwork2.name));
});
});
@@ -198,43 +239,39 @@ describe(@"menu manager", ^{
});
it(@"should immediately attempt to update without the image", ^{
- testManager.menuCells = @[textAndImageCell];
+ testManager.menuCells = @[textAndImageCell, submenuImageCell];
NSPredicate *addCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddCommand class]];
NSArray *add = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:addCommandPredicate];
SDLAddCommand *sentCommand = add.firstObject;
+ NSPredicate *addSubmenuPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddSubMenu class]];
+ NSArray *submenu = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:addSubmenuPredicate];
+ SDLAddSubMenu *sentSubmenu = submenu.firstObject;
+
expect(add).to(haveCount(1));
+ expect(submenu).to(haveCount(1));
expect(sentCommand.cmdIcon.value).to(beNil());
+ expect(sentSubmenu.menuIcon.value).to(beNil());
});
});
});
- it(@"should properly update with subcells", ^{
- testManager.menuCells = @[submenuCell];
-
- NSPredicate *addCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddCommand class]];
- NSArray *adds = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:addCommandPredicate];
-
- NSPredicate *submenuCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddSubMenu class]];
- NSArray *submenus = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:submenuCommandPredicate];
-
- expect(adds).to(haveCount(2));
- expect(submenus).to(haveCount(1));
- });
-
- context(@"when a menu already exists", ^{
+ describe(@"updating when a menu already exists", ^{
beforeEach(^{
testManager.menuCells = @[textOnlyCell];
- });
+ [mockConnectionManager respondToLastMultipleRequestsWithSuccess:YES]; // Adds
+ [mockConnectionManager respondToLastMultipleRequestsWithSuccess:YES]; // Submenu
- it(@"should send deletes first", ^{
testManager.menuCells = @[textAndImageCell];
+ [mockConnectionManager respondToLastMultipleRequestsWithSuccess:YES]; // Deletes
+ });
- NSPredicate *deleteCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLDeleteCommand class]];
+ it(@"should send deletes first", ^{
+ NSPredicate *deleteCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass:%@", [SDLDeleteCommand class]];
NSArray *deletes = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:deleteCommandPredicate];
- NSPredicate *addCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddCommand class]];
+ NSPredicate *addCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass:%@", [SDLAddCommand class]];
NSArray *adds = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:addCommandPredicate];
expect(deletes).to(haveCount(1));
@@ -292,7 +329,7 @@ describe(@"menu manager", ^{
testTriggerSource = triggerSource;
}];
- SDLMenuCell *submenuCell = [[SDLMenuCell alloc] initWithTitle:@"Submenu" subCells:@[cellWithHandler]];
+ SDLMenuCell *submenuCell = [[SDLMenuCell alloc] initWithTitle:@"Submenu" icon:nil subCells:@[cellWithHandler]];
testManager.menuCells = @[submenuCell];
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLNotificationDispatcherSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLNotificationDispatcherSpec.m
index fa53d0de8..47fc3ec74 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLNotificationDispatcherSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLNotificationDispatcherSpec.m
@@ -53,6 +53,7 @@ describe(@"a notification dispatcher", ^{
expect(@([testDispatcher respondsToSelector:@selector(onOnLanguageChange:)])).to(beTruthy());
expect(@([testDispatcher respondsToSelector:@selector(onOnLockScreenNotification:)])).to(beTruthy());
expect(@([testDispatcher respondsToSelector:@selector(onOnSyncPData:)])).to(beTruthy());
+ expect(@([testDispatcher respondsToSelector:@selector(onOnRCStatus:)])).to(beTruthy());
expect(@([testDispatcher respondsToSelector:@selector(onOnSystemRequest:)])).to(beTruthy());
expect(@([testDispatcher respondsToSelector:@selector(onOnTBTClientState:)])).to(beTruthy());
expect(@([testDispatcher respondsToSelector:@selector(onOnTouchEvent:)])).to(beTruthy());
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLPreloadChoicesOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLPreloadChoicesOperationSpec.m
new file mode 100644
index 000000000..0f5b781f7
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLPreloadChoicesOperationSpec.m
@@ -0,0 +1,247 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLPreloadChoicesOperation.h"
+
+#import "SDLChoice.h"
+#import "SDLChoiceCell.h"
+#import "SDLCreateInteractionChoiceSet.h"
+#import "SDLDisplayCapabilities.h"
+#import "SDLFileManager.h"
+#import "SDLImageField.h"
+#import "SDLImageFieldName.h"
+#import "SDLTextField.h"
+#import "SDLTextFieldName.h"
+#import "TestConnectionManager.h"
+
+QuickSpecBegin(SDLPreloadChoicesOperationSpec)
+
+describe(@"a preload choices operation", ^{
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLFileManager *testFileManager = nil;
+ __block SDLPreloadChoicesOperation *testOp = nil;
+
+ __block NSData *cellArtData = [@"testart" dataUsingEncoding:NSUTF8StringEncoding];
+
+ __block BOOL hasCalledOperationCompletionHandler = NO;
+ __block NSError *resultError = nil;
+
+ beforeEach(^{
+ resultError = nil;
+ hasCalledOperationCompletionHandler = NO;
+
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ testFileManager = OCMClassMock([SDLFileManager class]);
+ });
+
+ it(@"should have a priority of 'normal'", ^{
+ testOp = [[SDLPreloadChoicesOperation alloc] init];
+
+ expect(@(testOp.queuePriority)).to(equal(@(NSOperationQueuePriorityNormal)));
+ });
+
+ describe(@"running the operation", ^{
+ __block SDLDisplayCapabilities *displayCapabilities = nil;
+ beforeEach(^{
+ displayCapabilities = [[SDLDisplayCapabilities alloc] init];
+ displayCapabilities.graphicSupported = @YES;
+
+ OCMStub([testFileManager uploadArtworks:[OCMArg any] completionHandler:[OCMArg invokeBlock]]);
+ });
+
+ context(@"with artworks", ^{
+ __block NSSet<SDLChoiceCell *> *cellsWithArtwork = nil;
+ __block NSString *art1Name = @"Art1Name";
+ __block NSString *art2Name = @"Art2Name";
+
+ beforeEach(^{
+ SDLArtwork *cell1Art = [[SDLArtwork alloc] initWithData:cellArtData name:art1Name fileExtension:@"png" persistent:NO];
+ SDLChoiceCell *cell1WithArt = [[SDLChoiceCell alloc] initWithText:@"Cell1" artwork:cell1Art voiceCommands:nil];
+
+ SDLArtwork *cell2Art = [[SDLArtwork alloc] initWithData:cellArtData name:art2Name fileExtension:@"png" persistent:NO];
+ SDLChoiceCell *cell2WithArtAndSecondary = [[SDLChoiceCell alloc] initWithText:@"Cell2" secondaryText:nil tertiaryText:nil voiceCommands:nil artwork:cell2Art secondaryArtwork:cell2Art];
+
+ cellsWithArtwork = [NSSet setWithArray:@[cell1WithArt, cell2WithArtAndSecondary]];
+ });
+
+ context(@"disallowed display capabilities", ^{
+ it(@"should skip to preloading cells", ^{
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:NO cellsToPreload:cellsWithArtwork];
+ [testOp start];
+
+ expect(@(testOp.currentState)).to(equal(SDLPreloadChoicesOperationStatePreloadingChoices));
+ });
+ });
+
+ context(@"mixed display capabilities", ^{
+ beforeEach(^{
+ SDLImageField *choiceField = [[SDLImageField alloc] init];
+ choiceField.name = SDLImageFieldNameChoiceImage;
+
+ displayCapabilities.imageFields = @[choiceField];
+
+ OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(NO);
+
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:NO cellsToPreload:cellsWithArtwork];
+ [testOp start];
+ });
+
+ it(@"should upload some artworks", ^{
+ OCMVerify([testFileManager uploadArtworks:[OCMArg checkWithBlock:^BOOL(id obj) {
+ NSArray<SDLArtwork *> *artworks = (NSArray<SDLArtwork *> *)obj;
+ return (artworks.count == 2);
+ }] completionHandler:[OCMArg any]]);
+ expect(@(testOp.currentState)).to(equal(SDLPreloadChoicesOperationStatePreloadingChoices));
+ });
+ });
+
+ context(@"allowed display capabilities", ^{
+ beforeEach(^{
+ SDLImageField *choiceField = [[SDLImageField alloc] init];
+ choiceField.name = SDLImageFieldNameChoiceImage;
+ SDLImageField *choiceSecondaryField = [[SDLImageField alloc] init];
+ choiceSecondaryField.name = SDLImageFieldNameChoiceSecondaryImage;
+
+ displayCapabilities.imageFields = @[choiceField, choiceSecondaryField];
+ });
+
+ context(@"when artworks are already on the system", ^{
+ beforeEach(^{
+ OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(YES);
+
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:NO cellsToPreload:cellsWithArtwork];
+ [testOp start];
+ });
+
+ it(@"should not upload artworks", ^{
+ OCMReject([testFileManager uploadArtworks:[OCMArg checkWithBlock:^BOOL(id obj) {
+ NSArray<SDLArtwork *> *artworks = (NSArray<SDLArtwork *> *)obj;
+ return (artworks.count == 2);
+ }] completionHandler:[OCMArg any]]);
+ expect(@(testOp.currentState)).to(equal(SDLPreloadChoicesOperationStatePreloadingChoices));
+ });
+ });
+
+ context(@"when artwork are not already on the system", ^{
+ beforeEach(^{
+ OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(NO);
+
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:NO cellsToPreload:cellsWithArtwork];
+ [testOp start];
+ });
+
+ it(@"should upload artworks", ^{
+ OCMVerify([testFileManager uploadArtworks:[OCMArg checkWithBlock:^BOOL(id obj) {
+ NSArray<SDLArtwork *> *artworks = (NSArray<SDLArtwork *> *)obj;
+ return (artworks.count == 3);
+ }] completionHandler:[OCMArg any]]);
+ expect(@(testOp.currentState)).to(equal(SDLPreloadChoicesOperationStatePreloadingChoices));
+ });
+ });
+ });
+ });
+
+ context(@"without artworks", ^{
+ __block NSSet<SDLChoiceCell *> *cellsWithoutArtwork = nil;
+ beforeEach(^{
+ SDLChoiceCell *cellBasic = [[SDLChoiceCell alloc] initWithText:@"Cell1" artwork:nil voiceCommands:nil];
+ SDLChoiceCell *cellWithVR = [[SDLChoiceCell alloc] initWithText:@"Cell2" secondaryText:nil tertiaryText:nil voiceCommands:@[@"Cell2"] artwork:nil secondaryArtwork:nil];
+ SDLChoiceCell *cellWithAllText = [[SDLChoiceCell alloc] initWithText:@"Cell2" secondaryText:@"Cell2" tertiaryText:@"Cell2" voiceCommands:nil artwork:nil secondaryArtwork:nil];
+
+ cellsWithoutArtwork = [NSSet setWithArray:@[cellBasic, cellWithVR, cellWithAllText]];
+ });
+
+ it(@"should skip to preloading cells", ^{
+ expect(@(testOp.currentState)).to(equal(SDLPreloadChoicesOperationStatePreloadingChoices));
+ });
+
+ describe(@"assembling choices", ^{
+ it(@"should be correct with no text and VR required", ^{
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:NO cellsToPreload:cellsWithoutArtwork];
+ [testOp start];
+
+ NSArray<SDLCreateInteractionChoiceSet *> *receivedRequests = (NSArray<SDLCreateInteractionChoiceSet *> *)testConnectionManager.receivedRequests;
+
+ expect(receivedRequests).to(haveCount(3));
+ expect(receivedRequests.lastObject.choiceSet.firstObject.menuName).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.secondaryText).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.tertiaryText).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.vrCommands).toNot(beNil());
+ });
+
+ it(@"should be correct with only primary text", ^{
+ SDLTextField *primaryTextField = [[SDLTextField alloc] init];
+ primaryTextField.name = SDLTextFieldNameMenuName;
+ displayCapabilities.textFields = @[primaryTextField];
+
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:NO cellsToPreload:cellsWithoutArtwork];
+ [testOp start];
+
+ NSArray<SDLCreateInteractionChoiceSet *> *receivedRequests = (NSArray<SDLCreateInteractionChoiceSet *> *)testConnectionManager.receivedRequests;
+
+ expect(receivedRequests).to(haveCount(3));
+ expect(receivedRequests.lastObject.choiceSet.firstObject.menuName).toNot(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.secondaryText).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.tertiaryText).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.vrCommands).toNot(beNil());
+ });
+
+ it(@"should be correct with primary and secondary text", ^{
+ SDLTextField *primaryTextField = [[SDLTextField alloc] init];
+ primaryTextField.name = SDLTextFieldNameMenuName;
+ SDLTextField *secondaryTextField = [[SDLTextField alloc] init];
+ secondaryTextField.name = SDLTextFieldNameSecondaryText;
+ displayCapabilities.textFields = @[primaryTextField, secondaryTextField];
+
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:NO cellsToPreload:cellsWithoutArtwork];
+ [testOp start];
+
+ NSArray<SDLCreateInteractionChoiceSet *> *receivedRequests = (NSArray<SDLCreateInteractionChoiceSet *> *)testConnectionManager.receivedRequests;
+
+ expect(receivedRequests).to(haveCount(3));
+ expect(receivedRequests.lastObject.choiceSet.firstObject.menuName).toNot(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.secondaryText).toNot(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.tertiaryText).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.vrCommands).toNot(beNil());
+ });
+
+ it(@"should be correct with all text", ^{
+ SDLTextField *primaryTextField = [[SDLTextField alloc] init];
+ primaryTextField.name = SDLTextFieldNameMenuName;
+ SDLTextField *secondaryTextField = [[SDLTextField alloc] init];
+ secondaryTextField.name = SDLTextFieldNameSecondaryText;
+ SDLTextField *tertiaryTextField = [[SDLTextField alloc] init];
+ tertiaryTextField.name = SDLTextFieldNameTertiaryText;
+ displayCapabilities.textFields = @[primaryTextField, secondaryTextField, tertiaryTextField];
+
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:NO cellsToPreload:cellsWithoutArtwork];
+ [testOp start];
+
+ NSArray<SDLCreateInteractionChoiceSet *> *receivedRequests = (NSArray<SDLCreateInteractionChoiceSet *> *)testConnectionManager.receivedRequests;
+
+ expect(receivedRequests).to(haveCount(3));
+ expect(receivedRequests.lastObject.choiceSet.firstObject.menuName).toNot(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.secondaryText).toNot(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.tertiaryText).toNot(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.vrCommands).toNot(beNil());
+ });
+
+ it(@"should be correct with VR optional", ^{
+ testOp = [[SDLPreloadChoicesOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager displayCapabilities:displayCapabilities isVROptional:YES cellsToPreload:cellsWithoutArtwork];
+ [testOp start];
+
+ NSArray<SDLCreateInteractionChoiceSet *> *receivedRequests = (NSArray<SDLCreateInteractionChoiceSet *> *)testConnectionManager.receivedRequests;
+
+ expect(receivedRequests).to(haveCount(3));
+ expect(receivedRequests.lastObject.choiceSet.firstObject.menuName).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.secondaryText).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.tertiaryText).to(beNil());
+ expect(receivedRequests.lastObject.choiceSet.firstObject.vrCommands).to(beNil());
+ });
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLPresentChoiceSetOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLPresentChoiceSetOperationSpec.m
new file mode 100644
index 000000000..d9ae6869d
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLPresentChoiceSetOperationSpec.m
@@ -0,0 +1,322 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLPresentChoiceSetOperation.h"
+
+#import "SDLChoiceCell.h"
+#import "SDLChoiceSet.h"
+#import "SDLChoiceSetDelegate.h"
+#import "SDLKeyboardDelegate.h"
+#import "SDLOnKeyboardInput.h"
+#import "SDLKeyboardProperties.h"
+#import "SDLPerformInteraction.h"
+#import "SDLPerformInteractionResponse.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLSetGlobalProperties.h"
+#import "SDLSetGlobalPropertiesResponse.h"
+#import "TestConnectionManager.h"
+
+QuickSpecBegin(SDLPresentChoiceSetOperationSpec)
+
+describe(@"present choice operation", ^{
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLPresentChoiceSetOperation *testOp = nil;
+
+ __block SDLInteractionMode testInteractionMode = SDLInteractionModeBoth;
+ __block SDLChoiceSet *testChoiceSet = nil;
+ __block id<SDLChoiceSetDelegate> testChoiceDelegate = nil;
+ __block NSArray<SDLChoiceCell *> *testChoices = nil;
+
+ __block id<SDLKeyboardDelegate> testKeyboardDelegate = nil;
+ __block SDLKeyboardProperties *testKeyboardProperties = nil;
+
+ __block BOOL hasCalledOperationCompletionHandler = NO;
+ __block NSError *resultError = nil;
+
+ beforeEach(^{
+ resultError = nil;
+ hasCalledOperationCompletionHandler = NO;
+
+ testConnectionManager = [[TestConnectionManager alloc] init];
+
+ testChoiceDelegate = OCMProtocolMock(@protocol(SDLChoiceSetDelegate));
+ SDLChoiceCell *cell1 = [[SDLChoiceCell alloc] initWithText:@"Cell 1"];
+ testChoices = @[cell1];
+ testChoiceSet = [[SDLChoiceSet alloc] initWithTitle:@"Test Title" delegate:testChoiceDelegate layout:SDLChoiceSetLayoutTiles timeout:13 initialPromptString:@"Test initial prompt" timeoutPromptString:@"Test timeout prompt" helpPromptString:@"Test help prompt" vrHelpList:nil choices:testChoices];
+
+ testKeyboardDelegate = OCMProtocolMock(@protocol(SDLKeyboardDelegate));
+ OCMStub([testKeyboardDelegate customKeyboardConfiguration]).andReturn(nil);
+ testKeyboardProperties = [[SDLKeyboardProperties alloc] initWithLanguage:SDLLanguageArSa layout:SDLKeyboardLayoutAZERTY keypressMode:SDLKeypressModeResendCurrentEntry limitedCharacterList:nil autoCompleteText:nil];
+ });
+
+ it(@"should have a priority of 'normal'", ^{
+ testOp = [[SDLPresentChoiceSetOperation alloc] init];
+
+ expect(@(testOp.queuePriority)).to(equal(@(NSOperationQueuePriorityNormal)));
+ });
+
+ describe(@"running a non-searchable choice set operation", ^{
+ beforeEach(^{
+ testOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:testConnectionManager choiceSet:testChoiceSet mode:testInteractionMode keyboardProperties:nil keyboardDelegate:nil];
+ testOp.completionBlock = ^{
+ hasCalledOperationCompletionHandler = YES;
+ };
+ [testOp start];
+ });
+
+ it(@"should not update global keyboard properties", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).toNot(beAnInstanceOf([SDLSetGlobalProperties class]));
+ });
+
+ describe(@"presenting the choice set", ^{
+ it(@"should send the perform interaction", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLPerformInteraction class]));
+ SDLPerformInteraction *request = testConnectionManager.receivedRequests.lastObject;
+ expect(request.initialText).to(equal(testChoiceSet.title));
+ expect(request.initialPrompt).to(equal(testChoiceSet.initialPrompt));
+ expect(request.interactionMode).to(equal(testInteractionMode));
+ expect(request.interactionLayout).to(equal(SDLLayoutModeIconOnly));
+ expect(request.timeoutPrompt).to(equal(testChoiceSet.timeoutPrompt));
+ expect(request.helpPrompt).to(equal(testChoiceSet.helpPrompt));
+ expect(request.timeout).to(equal(testChoiceSet.timeout * 1000));
+ expect(request.vrHelp).to(beNil());
+ expect(request.interactionChoiceSetIDList).to(equal(@[@65535]));
+ });
+
+ describe(@"after a perform interaction response", ^{
+ __block UInt16 responseChoiceId = UINT16_MAX;
+ __block SDLTriggerSource responseTriggerSource = SDLTriggerSourceMenu;
+
+ beforeEach(^{
+ SDLPerformInteractionResponse *response = [[SDLPerformInteractionResponse alloc] init];
+ response.success = @YES;
+ response.choiceID = @(responseChoiceId);
+ response.triggerSource = responseTriggerSource;
+
+ [testConnectionManager respondToLastRequestWithResponse:response];
+ });
+
+
+ it(@"should not reset the keyboard properties and should be finished", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).toNot(beAnInstanceOf([SDLSetGlobalProperties class]));
+ expect(hasCalledOperationCompletionHandler).toEventually(beTrue());
+ expect(testOp.isFinished).to(beTrue());
+ expect(testOp.selectedCell).to(equal(testChoices.firstObject));
+ expect(testOp.selectedTriggerSource).to(equal(responseTriggerSource));
+ });
+ });
+ });
+ });
+
+ describe(@"running a searchable choice set operation", ^{
+ beforeEach(^{
+ testOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:testConnectionManager choiceSet:testChoiceSet mode:testInteractionMode keyboardProperties:testKeyboardProperties keyboardDelegate:testKeyboardDelegate];
+
+ testOp.completionBlock = ^{
+ hasCalledOperationCompletionHandler = YES;
+ };
+ [testOp start];
+ });
+
+ it(@"should ask for custom properties", ^{
+ OCMVerify([testKeyboardDelegate customKeyboardConfiguration]);
+ });
+
+ it(@"should update global keyboard properties", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLSetGlobalProperties class]));
+ });
+
+ describe(@"presenting the keyboard", ^{
+ beforeEach(^{
+ SDLSetGlobalPropertiesResponse *response = [[SDLSetGlobalPropertiesResponse alloc] init];
+ response.success = @YES;
+ [testConnectionManager respondToLastRequestWithResponse:response];
+ });
+
+ it(@"should send the perform interaction", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLPerformInteraction class]));
+ SDLPerformInteraction *request = testConnectionManager.receivedRequests.lastObject;
+ expect(request.initialText).to(equal(testChoiceSet.title));
+ expect(request.initialPrompt).to(equal(testChoiceSet.initialPrompt));
+ expect(request.interactionMode).to(equal(testInteractionMode));
+ expect(request.interactionLayout).to(equal(SDLLayoutModeIconWithSearch));
+ expect(request.timeoutPrompt).to(equal(testChoiceSet.timeoutPrompt));
+ expect(request.helpPrompt).to(equal(testChoiceSet.helpPrompt));
+ expect(request.timeout).to(equal(testChoiceSet.timeout * 1000));
+ expect(request.vrHelp).to(beNil());
+ expect(request.interactionChoiceSetIDList).to(equal(@[@65535]));
+ });
+
+ it(@"should respond to submitted notifications", ^{
+ NSString *inputData = @"Test";
+ SDLRPCNotificationNotification *notification = nil;
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventSubmitted;
+ input.data = inputData;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testKeyboardDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventSubmitted];
+ }] text:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }]]);
+
+ OCMVerify([testKeyboardDelegate userDidSubmitInput:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }] withEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventSubmitted];
+ }]]);
+ });
+
+ it(@"should respond to voice request notifications", ^{
+ SDLRPCNotificationNotification *notification = nil;
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventVoice;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testKeyboardDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventVoice];
+ }] text:[OCMArg isNil]]);
+
+ OCMVerify([testKeyboardDelegate userDidSubmitInput:[OCMArg isNil] withEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventVoice];
+ }]]);
+ });
+
+ it(@"should respond to abort notifications", ^{
+ SDLRPCNotificationNotification *notification = nil;
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventAborted;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testKeyboardDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventAborted];
+ }] text:[OCMArg isNil]]);
+
+ OCMVerify([testKeyboardDelegate keyboardDidAbortWithReason:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventAborted];
+ }]]);
+ });
+
+ it(@"should respond to cancellation notifications", ^{
+ SDLRPCNotificationNotification *notification = nil;
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventCancelled;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testKeyboardDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventCancelled];
+ }] text:[OCMArg isNil]]);
+
+ OCMVerify([testKeyboardDelegate keyboardDidAbortWithReason:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventCancelled];
+ }]]);
+ });
+
+ it(@"should respond to text input notification with autocomplete", ^{
+ NSString *inputData = @"Test";
+ SDLRPCNotificationNotification *notification = nil;
+
+ OCMStub([testKeyboardDelegate updateAutocompleteWithInput:[OCMArg any] completionHandler:([OCMArg invokeBlockWithArgs:inputData, nil])]);
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventKeypress;
+ input.data = inputData;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testKeyboardDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventKeypress];
+ }] text:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }]]);
+
+ OCMVerify([testKeyboardDelegate updateAutocompleteWithInput:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }] completionHandler:[OCMArg any]]);
+
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLSetGlobalProperties class]));
+
+ SDLSetGlobalProperties *setProperties = testConnectionManager.receivedRequests.lastObject;
+ expect(setProperties.keyboardProperties.autoCompleteText).to(equal(inputData));
+ });
+
+ it(@"should respond to text input notification with character set", ^{
+ NSString *inputData = @"Test";
+ SDLRPCNotificationNotification *notification = nil;
+
+ OCMStub([testKeyboardDelegate updateCharacterSetWithInput:[OCMArg any] completionHandler:([OCMArg invokeBlockWithArgs:@[inputData], nil])]);
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventKeypress;
+ input.data = inputData;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testKeyboardDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventKeypress];
+ }] text:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }]]);
+
+ OCMVerify([testKeyboardDelegate updateCharacterSetWithInput:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }] completionHandler:[OCMArg any]]);
+
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLSetGlobalProperties class]));
+
+ SDLSetGlobalProperties *setProperties = testConnectionManager.receivedRequests.lastObject;
+ expect(setProperties.keyboardProperties.limitedCharacterList).to(equal(@[inputData]));
+ });
+
+ describe(@"after a perform interaction response", ^{
+ beforeEach(^{
+ SDLPerformInteractionResponse *response = [[SDLPerformInteractionResponse alloc] init];
+ response.success = @YES;
+
+ [testConnectionManager respondToLastRequestWithResponse:response];
+ });
+
+ it(@"should reset the keyboard properties", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLSetGlobalProperties class]));
+ });
+
+ describe(@"after the reset response", ^{
+ beforeEach(^{
+ SDLSetGlobalPropertiesResponse *response = [[SDLSetGlobalPropertiesResponse alloc] init];
+ response.success = @YES;
+ [testConnectionManager respondToLastRequestWithResponse:response];
+ });
+
+ it(@"should be finished", ^{
+ expect(hasCalledOperationCompletionHandler).to(beTrue());
+ expect(testOp.isFinished).to(beTrue());
+ });
+ });
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLPresentKeyboardOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLPresentKeyboardOperationSpec.m
new file mode 100644
index 000000000..55ec13890
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLPresentKeyboardOperationSpec.m
@@ -0,0 +1,251 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLPresentKeyboardOperation.h"
+
+#import "SDLKeyboardDelegate.h"
+#import "SDLOnKeyboardInput.h"
+#import "SDLKeyboardProperties.h"
+#import "SDLPerformInteraction.h"
+#import "SDLPerformInteractionResponse.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLSetGlobalProperties.h"
+#import "SDLSetGlobalPropertiesResponse.h"
+#import "TestConnectionManager.h"
+
+QuickSpecBegin(SDLPresentKeyboardOperationSpec)
+
+describe(@"present keyboard operation", ^{
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLPresentKeyboardOperation *testOp = nil;
+
+ __block NSString *testInitialText = @"Initial Text";
+ __block id<SDLKeyboardDelegate> testDelegate = nil;
+ __block SDLKeyboardProperties *testInitialProperties = nil;
+
+ __block BOOL hasCalledOperationCompletionHandler = NO;
+ __block NSError *resultError = nil;
+
+ beforeEach(^{
+ resultError = nil;
+ hasCalledOperationCompletionHandler = NO;
+
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ testDelegate = OCMProtocolMock(@protocol(SDLKeyboardDelegate));
+ OCMStub([testDelegate customKeyboardConfiguration]).andReturn(nil);
+
+ testInitialProperties = [[SDLKeyboardProperties alloc] initWithLanguage:SDLLanguageArSa layout:SDLKeyboardLayoutAZERTY keypressMode:SDLKeypressModeResendCurrentEntry limitedCharacterList:nil autoCompleteText:nil];
+ });
+
+ it(@"should have a priority of 'normal'", ^{
+ testOp = [[SDLPresentKeyboardOperation alloc] init];
+
+ expect(@(testOp.queuePriority)).to(equal(@(NSOperationQueuePriorityNormal)));
+ });
+
+ describe(@"running the operation", ^{
+ beforeEach(^{
+ testOp = [[SDLPresentKeyboardOperation alloc] initWithConnectionManager:testConnectionManager keyboardProperties:testInitialProperties initialText:testInitialText keyboardDelegate:testDelegate];
+ testOp.completionBlock = ^{
+ hasCalledOperationCompletionHandler = YES;
+ };
+ [testOp start];
+ });
+
+ it(@"should ask for custom properties", ^{
+ OCMVerify([testDelegate customKeyboardConfiguration]);
+ });
+
+ it(@"should update global keyboard properties", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLSetGlobalProperties class]));
+ });
+
+ describe(@"presenting the keyboard", ^{
+ beforeEach(^{
+ SDLSetGlobalPropertiesResponse *response = [[SDLSetGlobalPropertiesResponse alloc] init];
+ response.success = @YES;
+ [testConnectionManager respondToLastRequestWithResponse:response];
+ });
+
+ it(@"should send the perform interaction", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLPerformInteraction class]));
+ SDLPerformInteraction *request = testConnectionManager.receivedRequests.lastObject;
+ expect(request.initialText).to(equal(testInitialText));
+ expect(request.interactionMode).to(equal(SDLInteractionModeManualOnly));
+ expect(request.interactionChoiceSetIDList).to(beEmpty());
+ expect(request.interactionLayout).to(equal(SDLLayoutModeKeyboard));
+ });
+
+ it(@"should respond to submitted notifications", ^{
+ NSString *inputData = @"Test";
+ SDLRPCNotificationNotification *notification = nil;
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventSubmitted;
+ input.data = inputData;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventSubmitted];
+ }] text:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }]]);
+
+ OCMVerify([testDelegate userDidSubmitInput:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }] withEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventSubmitted];
+ }]]);
+ });
+
+ it(@"should respond to voice request notifications", ^{
+ SDLRPCNotificationNotification *notification = nil;
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventVoice;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventVoice];
+ }] text:[OCMArg isNil]]);
+
+ OCMVerify([testDelegate userDidSubmitInput:[OCMArg isNil] withEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventVoice];
+ }]]);
+ });
+
+ it(@"should respond to abort notifications", ^{
+ SDLRPCNotificationNotification *notification = nil;
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventAborted;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventAborted];
+ }] text:[OCMArg isNil]]);
+
+ OCMVerify([testDelegate keyboardDidAbortWithReason:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventAborted];
+ }]]);
+ });
+
+ it(@"should respond to cancellation notifications", ^{
+ SDLRPCNotificationNotification *notification = nil;
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventCancelled;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventCancelled];
+ }] text:[OCMArg isNil]]);
+
+ OCMVerify([testDelegate keyboardDidAbortWithReason:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventCancelled];
+ }]]);
+ });
+
+ it(@"should respond to text input notification with autocomplete", ^{
+ NSString *inputData = @"Test";
+ SDLRPCNotificationNotification *notification = nil;
+
+ OCMStub([testDelegate updateAutocompleteWithInput:[OCMArg any] completionHandler:([OCMArg invokeBlockWithArgs:inputData, nil])]);
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventKeypress;
+ input.data = inputData;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventKeypress];
+ }] text:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }]]);
+
+ OCMVerify([testDelegate updateAutocompleteWithInput:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }] completionHandler:[OCMArg any]]);
+
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLSetGlobalProperties class]));
+
+ SDLSetGlobalProperties *setProperties = testConnectionManager.receivedRequests.lastObject;
+ expect(setProperties.keyboardProperties.autoCompleteText).to(equal(inputData));
+ });
+
+ it(@"should respond to text input notification with character set", ^{
+ NSString *inputData = @"Test";
+ SDLRPCNotificationNotification *notification = nil;
+
+ OCMStub([testDelegate updateCharacterSetWithInput:[OCMArg any] completionHandler:([OCMArg invokeBlockWithArgs:@[inputData], nil])]);
+
+ // Submit notification
+ SDLOnKeyboardInput *input = [[SDLOnKeyboardInput alloc] init];
+ input.event = SDLKeyboardEventKeypress;
+ input.data = inputData;
+ notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveKeyboardInputNotification object:nil rpcNotification:input];
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+
+ OCMVerify([testDelegate keyboardDidSendEvent:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(SDLKeyboardEvent)obj isEqualToEnum:SDLKeyboardEventKeypress];
+ }] text:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }]]);
+
+ OCMVerify([testDelegate updateCharacterSetWithInput:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [(NSString *)obj isEqualToString:inputData];
+ }] completionHandler:[OCMArg any]]);
+
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLSetGlobalProperties class]));
+
+ SDLSetGlobalProperties *setProperties = testConnectionManager.receivedRequests.lastObject;
+ expect(setProperties.keyboardProperties.limitedCharacterList).to(equal(@[inputData]));
+ });
+
+ describe(@"after a perform interaction response", ^{
+ beforeEach(^{
+ SDLPerformInteractionResponse *response = [[SDLPerformInteractionResponse alloc] init];
+ response.success = @YES;
+
+ [testConnectionManager respondToLastRequestWithResponse:response];
+ });
+
+ it(@"should reset the keyboard properties", ^{
+ expect(testConnectionManager.receivedRequests.lastObject).to(beAnInstanceOf([SDLSetGlobalProperties class]));
+ });
+
+ describe(@"after the reset response", ^{
+ beforeEach(^{
+ SDLSetGlobalPropertiesResponse *response = [[SDLSetGlobalPropertiesResponse alloc] init];
+ response.success = @YES;
+ [testConnectionManager respondToLastRequestWithResponse:response];
+ });
+
+ it(@"should be finished", ^{
+ expect(hasCalledOperationCompletionHandler).toEventually(beTrue());
+ expect(testOp.isFinished).to(beTrue());
+ });
+ });
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m
new file mode 100644
index 000000000..af2317ca9
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m
@@ -0,0 +1,401 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLControlFramePayloadAudioStartServiceAck.h"
+#import "SDLDisplayCapabilities.h"
+#import "SDLGlobals.h"
+#import "SDLImageResolution.h"
+#import "SDLOnHMIStatus.h"
+#import "SDLProtocol.h"
+#import "SDLRegisterAppInterfaceResponse.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLRPCResponseNotification.h"
+#import "SDLScreenParams.h"
+#import "SDLStateMachine.h"
+#import "SDLStreamingAudioLifecycleManager.h"
+#import "SDLStreamingMediaConfiguration.h"
+#import "SDLV2ProtocolHeader.h"
+#import "SDLV2ProtocolMessage.h"
+#import "TestConnectionManager.h"
+
+QuickSpecBegin(SDLStreamingAudioLifecycleManagerSpec)
+
+describe(@"the streaming audio manager", ^{
+ __block SDLStreamingAudioLifecycleManager *streamingLifecycleManager = nil;
+ __block SDLStreamingMediaConfiguration *testConfiguration = [SDLStreamingMediaConfiguration insecureConfiguration];
+ __block TestConnectionManager *testConnectionManager = 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(^{
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ streamingLifecycleManager = [[SDLStreamingAudioLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfiguration];
+ });
+
+ it(@"should initialize properties", ^{
+ expect(streamingLifecycleManager.audioManager).toNot(beNil());
+ expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@NO));
+ expect(@(streamingLifecycleManager.isAudioConnected)).to(equal(@NO));
+ expect(@(streamingLifecycleManager.isAudioEncrypted)).to(equal(@NO));
+ expect(@(streamingLifecycleManager.requestedEncryptionType)).to(equal(@(SDLStreamingEncryptionFlagNone)));
+ expect(streamingLifecycleManager.currentAppState).to(equal(SDLAppStateActive));
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ });
+
+ describe(@"when started", ^{
+ __block BOOL readyHandlerSuccess = NO;
+ __block NSError *readyHandlerError = nil;
+
+ __block SDLProtocol *protocolMock = OCMClassMock([SDLProtocol class]);
+
+ beforeEach(^{
+ readyHandlerSuccess = NO;
+ readyHandlerError = nil;
+
+ [streamingLifecycleManager startWithProtocol:protocolMock];
+ });
+
+ it(@"should be ready to stream", ^{
+ expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@NO));
+ expect(@(streamingLifecycleManager.isAudioConnected)).to(equal(@NO));
+ expect(@(streamingLifecycleManager.isAudioEncrypted)).to(equal(@NO));
+ expect(streamingLifecycleManager.currentAppState).to(equal(SDLAppStateActive));
+ expect(streamingLifecycleManager.currentAudioStreamState).to(match(SDLAudioStreamManagerStateStopped));
+ });
+
+ describe(@"after receiving a register app interface notification", ^{
+ __block SDLRegisterAppInterfaceResponse *someRegisterAppInterfaceResponse = nil;
+ __block SDLDisplayCapabilities *someDisplayCapabilities = nil;
+ __block SDLScreenParams *someScreenParams = nil;
+ __block SDLImageResolution *someImageResolution = 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;
+
+ someDisplayCapabilities.screenParams = someScreenParams;
+
+ someRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
+ someRegisterAppInterfaceResponse.displayCapabilities = someDisplayCapabilities;
+ 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));
+ });
+ });
+
+ context(@"that supports graphics", ^{
+ beforeEach(^{
+ someDisplayCapabilities = [[SDLDisplayCapabilities alloc] init];
+ someDisplayCapabilities.graphicSupported = @YES;
+
+ someDisplayCapabilities.screenParams = someScreenParams;
+
+ someRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
+ someRegisterAppInterfaceResponse.displayCapabilities = someDisplayCapabilities;
+ 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));
+ });
+ });
+ });
+
+ describe(@"if the app state is active", ^{
+ __block id streamStub = nil;
+
+ beforeEach(^{
+ streamStub = OCMPartialMock(streamingLifecycleManager);
+
+ OCMStub([streamStub isStreamingSupported]).andReturn(YES);
+
+ [streamingLifecycleManager.appStateMachine setToState:SDLAppStateActive fromOldState:nil callEnterTransition:NO];
+ });
+
+ describe(@"and the streams are open", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateReady fromOldState:nil callEnterTransition:NO];
+ });
+
+ describe(@"and the hmi state is limited", ^{
+ beforeEach(^{
+ streamingLifecycleManager.hmiLevel = SDLHMILevelLimited;
+ });
+
+ describe(@"and the hmi state changes to", ^{
+ context(@"none", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelNone);
+ });
+
+ it(@"should close the streams", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ });
+ });
+
+ context(@"background", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelBackground);
+ });
+
+ it(@"should close the stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ });
+ });
+
+ context(@"limited", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelLimited);
+ });
+
+ it(@"should not close the stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ });
+ });
+
+ context(@"full", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelFull);
+ });
+
+ it(@"should not close the stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ });
+ });
+ });
+
+ describe(@"and the app state changes to", ^{
+ context(@"inactive", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.appStateMachine setToState:SDLAppStateInactive fromOldState:nil callEnterTransition:YES];
+ });
+
+ it(@"should suspend the video stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ });
+ });
+ });
+ });
+
+ describe(@"and the hmi state is full", ^{
+ beforeEach(^{
+ streamingLifecycleManager.hmiLevel = SDLHMILevelFull;
+ });
+
+ context(@"and hmi state changes to none", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelNone);
+ });
+
+ it(@"should close the streams", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ });
+ });
+
+ context(@"and hmi state changes to background", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelBackground);
+ });
+
+ it(@"should close the stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ });
+ });
+
+ context(@"and hmi state changes to limited", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelLimited);
+ });
+
+ it(@"should not close the stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ });
+ });
+
+ context(@"and hmi state changes to full", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelFull);
+ });
+
+ it(@"should not close the stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ });
+ });
+ });
+ });
+
+ describe(@"and the streams are closed", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateStopped fromOldState:nil callEnterTransition:NO];
+ });
+
+ describe(@"and the hmi state is none", ^{
+ beforeEach(^{
+ streamingLifecycleManager.hmiLevel = SDLHMILevelNone;
+ });
+
+ context(@"and hmi state changes to none", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelNone);
+ });
+
+ it(@"should not start the stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ });
+ });
+
+ context(@"and hmi state changes to background", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelBackground);
+ });
+
+ it(@"should not start the stream", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ });
+ });
+
+ context(@"and hmi state changes to limited", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelLimited);
+ });
+
+ it(@"should start the streams", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStarting));
+ });
+ });
+
+ context(@"and hmi state changes to full", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelFull);
+ });
+
+ it(@"should start the streams", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStarting));
+ });
+ });
+ });
+ });
+ });
+
+ describe(@"after receiving an Audio Start ACK", ^{
+ __block SDLProtocolHeader *testAudioHeader = nil;
+ __block SDLProtocolMessage *testAudioMessage = nil;
+ __block SDLControlFramePayloadAudioStartServiceAck *testAudioStartServicePayload = nil;
+ __block int64_t testMTU = 786579;
+
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
+
+ testAudioHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
+ testAudioHeader.frameType = SDLFrameTypeSingle;
+ testAudioHeader.frameData = SDLFrameInfoStartServiceACK;
+ testAudioHeader.encrypted = YES;
+ testAudioHeader.serviceType = SDLServiceTypeAudio;
+
+ testAudioStartServicePayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithMTU:testMTU];
+ testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:testAudioStartServicePayload.data];
+ [streamingLifecycleManager handleProtocolStartServiceACKMessage:testAudioMessage];
+ });
+
+ it(@"should have set all the right properties", ^{
+ expect([[SDLGlobals sharedGlobals] mtuSizeForServiceType:SDLServiceTypeAudio]).to(equal(testMTU));
+ expect(streamingLifecycleManager.audioEncrypted).to(equal(YES));
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ });
+ });
+
+ describe(@"after receiving an Audio Start NAK", ^{
+ __block SDLProtocolHeader *testAudioHeader = nil;
+ __block SDLProtocolMessage *testAudioMessage = nil;
+
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
+
+ testAudioHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
+ testAudioHeader.frameType = SDLFrameTypeSingle;
+ testAudioHeader.frameData = SDLFrameInfoStartServiceNACK;
+ testAudioHeader.encrypted = NO;
+ testAudioHeader.serviceType = SDLServiceTypeAudio;
+
+ testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil];
+ [streamingLifecycleManager handleProtocolEndServiceACKMessage:testAudioMessage];
+ });
+
+ it(@"should have set all the right properties", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ });
+ });
+
+ describe(@"after receiving a audio end ACK", ^{
+ __block SDLProtocolHeader *testAudioHeader = nil;
+ __block SDLProtocolMessage *testAudioMessage = nil;
+
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
+
+ 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 have set all the right properties", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ });
+ });
+
+ describe(@"after receiving a audio end NAK", ^{
+ __block SDLProtocolHeader *testAudioHeader = nil;
+ __block SDLProtocolMessage *testAudioMessage = nil;
+
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
+
+ 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 have set all the right properties", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/SDLStreamingMediaLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m
index 37af7ec6c..9d5bec9a5 100644
--- a/SmartDeviceLinkTests/SDLStreamingMediaLifecycleManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m
@@ -1,60 +1,51 @@
-//
-// SDLStreamingMediaLifecycleManagerSpec.m
-// SmartDeviceLink-iOS
-//
-
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
#import <OCMock/OCMock.h>
#import "SDLCarWindowViewController.h"
-#import "SDLConnectionManagerType.h"
-#import "SDLControlFramePayloadAudioStartServiceAck.h"
#import "SDLControlFramePayloadConstants.h"
#import "SDLControlFramePayloadNak.h"
+#import "SDLControlFramePayloadVideoStartService.h"
#import "SDLControlFramePayloadVideoStartServiceAck.h"
#import "SDLDisplayCapabilities.h"
-#import "SDLGenericResponse.h"
+#import "SDLFakeStreamingManagerDataSource.h"
+#import "SDLFocusableItemLocator.h"
#import "SDLGetSystemCapability.h"
#import "SDLGetSystemCapabilityResponse.h"
+#import "SDLGenericResponse.h"
#import "SDLGlobals.h"
-#import "SDLFocusableItemLocatorType.h"
-#import "SDLFocusableItemLocator.h"
#import "SDLHMILevel.h"
#import "SDLImageResolution.h"
-#import "SDLNotificationConstants.h"
#import "SDLOnHMIStatus.h"
#import "SDLProtocol.h"
-#import "SDLRPCNotificationNotification.h"
#import "SDLRegisterAppInterfaceResponse.h"
+#import "SDLRPCNotificationNotification.h"
#import "SDLRPCResponseNotification.h"
#import "SDLScreenParams.h"
#import "SDLStateMachine.h"
#import "SDLStreamingMediaConfiguration.h"
-#import "SDLStreamingMediaLifecycleManager.h"
-#import "SDLFakeStreamingManagerDataSource.h"
+#import "SDLStreamingVideoLifecycleManager.h"
#import "SDLSystemCapability.h"
#import "SDLV2ProtocolHeader.h"
#import "SDLV2ProtocolMessage.h"
#import "SDLVideoStreamingCapability.h"
-#import "SDLVideoStreamingCodec.h"
-#import "SDLVideoStreamingFormat.h"
-#import "SDLVideoStreamingProtocol.h"
+#import "SDLVideoStreamingState.h"
#import "TestConnectionManager.h"
-QuickSpecBegin(SDLStreamingMediaLifecycleManagerSpec)
+QuickSpecBegin(SDLStreamingVideoLifecycleManagerSpec)
-describe(@"the streaming media manager", ^{
- __block SDLStreamingMediaLifecycleManager *streamingLifecycleManager = nil;
+describe(@"the streaming video manager", ^{
+ __block SDLStreamingVideoLifecycleManager *streamingLifecycleManager = nil;
__block SDLStreamingMediaConfiguration *testConfiguration = [SDLStreamingMediaConfiguration insecureConfiguration];
__block SDLCarWindowViewController *testViewController = [[SDLCarWindowViewController alloc] init];
__block SDLFakeStreamingManagerDataSource *testDataSource = [[SDLFakeStreamingManagerDataSource alloc] init];
__block NSString *someBackgroundTitleString = nil;
__block TestConnectionManager *testConnectionManager = nil;
- __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel) = ^(SDLHMILevel hmiLevel) {
+ __block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel, SDLVideoStreamingState streamState) = ^(SDLHMILevel hmiLevel, SDLVideoStreamingState streamState) {
SDLOnHMIStatus *hmiStatus = [[SDLOnHMIStatus alloc] init];
hmiStatus.hmiLevel = hmiLevel;
+ hmiStatus.videoStreamingState = streamState;
SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:self rpcNotification:hmiStatus];
[[NSNotificationCenter defaultCenter] postNotification:notification];
@@ -69,25 +60,21 @@ describe(@"the streaming media manager", ^{
testConfiguration.rootViewController = testViewController;
someBackgroundTitleString = @"Open Test App";
testConnectionManager = [[TestConnectionManager alloc] init];
- streamingLifecycleManager = [[SDLStreamingMediaLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfiguration];
+ streamingLifecycleManager = [[SDLStreamingVideoLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfiguration];
});
it(@"should initialize properties", ^{
expect(streamingLifecycleManager.touchManager).toNot(beNil());
expect(streamingLifecycleManager.focusableItemManager).toNot(beNil());
- expect(streamingLifecycleManager.audioManager).toNot(beNil());
expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@NO));
expect(@(streamingLifecycleManager.isVideoConnected)).to(equal(@NO));
- expect(@(streamingLifecycleManager.isAudioConnected)).to(equal(@NO));
expect(@(streamingLifecycleManager.isVideoEncrypted)).to(equal(@NO));
- expect(@(streamingLifecycleManager.isAudioEncrypted)).to(equal(@NO));
expect(@(streamingLifecycleManager.isVideoStreamingPaused)).to(equal(@YES));
expect(@(CGSizeEqualToSize(streamingLifecycleManager.screenSize, CGSizeZero))).to(equal(@YES));
expect(@(streamingLifecycleManager.pixelBufferPool == NULL)).to(equal(@YES));
expect(@(streamingLifecycleManager.requestedEncryptionType)).to(equal(@(SDLStreamingEncryptionFlagNone)));
expect(streamingLifecycleManager.currentAppState).to(equal(SDLAppStateActive));
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateStopped));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStopped));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
expect(streamingLifecycleManager.videoFormat).to(beNil());
expect(streamingLifecycleManager.dataSource).to(equal(testDataSource));
expect(streamingLifecycleManager.supportedFormats).to(haveCount(2));
@@ -101,7 +88,7 @@ describe(@"the streaming media manager", ^{
__block BOOL readyHandlerSuccess = NO;
__block NSError *readyHandlerError = nil;
- __block id protocolMock = OCMClassMock([SDLProtocol class]);
+ __block SDLProtocol *protocolMock = OCMClassMock([SDLProtocol class]);
beforeEach(^{
readyHandlerSuccess = NO;
@@ -113,15 +100,12 @@ describe(@"the streaming media manager", ^{
it(@"should be ready to stream", ^{
expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@NO));
expect(@(streamingLifecycleManager.isVideoConnected)).to(equal(@NO));
- expect(@(streamingLifecycleManager.isAudioConnected)).to(equal(@NO));
expect(@(streamingLifecycleManager.isVideoEncrypted)).to(equal(@NO));
- expect(@(streamingLifecycleManager.isAudioEncrypted)).to(equal(@NO));
expect(@(streamingLifecycleManager.isVideoStreamingPaused)).to(equal(@YES));
expect(@(CGSizeEqualToSize(streamingLifecycleManager.screenSize, CGSizeZero))).to(equal(@YES));
expect(@(streamingLifecycleManager.pixelBufferPool == NULL)).to(equal(@YES));
expect(streamingLifecycleManager.currentAppState).to(equal(SDLAppStateActive));
- expect(streamingLifecycleManager.currentAudioStreamState).to(match(SDLAudioStreamStateStopped));
- expect(streamingLifecycleManager.currentVideoStreamState).to(match(SDLVideoStreamStateStopped));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(match(SDLVideoStreamManagerStateStopped));
});
describe(@"after receiving a register app interface notification", ^{
@@ -182,23 +166,21 @@ describe(@"the streaming media manager", ^{
});
describe(@"if the app state is active", ^{
- __block id streamStub = nil;
+ __block SDLStreamingVideoLifecycleManager *streamStub = nil;
beforeEach(^{
streamStub = OCMPartialMock(streamingLifecycleManager);
-
OCMStub([streamStub isStreamingSupported]).andReturn(YES);
[streamingLifecycleManager.appStateMachine setToState:SDLAppStateActive fromOldState:nil callEnterTransition:NO];
});
- describe(@"and both streams are open", ^{
+ context(@"and the stream is open", ^{
beforeEach(^{
- [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamStateReady fromOldState:nil callEnterTransition:NO];
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamStateReady fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateReady fromOldState:nil callEnterTransition:NO];
});
- describe(@"and the hmi state is limited", ^{
+ context(@"and the hmi state is limited", ^{
beforeEach(^{
streamingLifecycleManager.hmiLevel = SDLHMILevelLimited;
});
@@ -206,45 +188,51 @@ describe(@"the streaming media manager", ^{
describe(@"and the hmi state changes to", ^{
context(@"none", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelNone);
+ sendNotificationForHMILevel(SDLHMILevelNone, SDLVideoStreamingStateStreamable);
});
- it(@"should close both streams", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateShuttingDown));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateShuttingDown));
+ it(@"should close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
context(@"background", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelBackground);
+ sendNotificationForHMILevel(SDLHMILevelBackground, SDLVideoStreamingStateStreamable);
});
- it(@"should close both stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateShuttingDown));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateShuttingDown));
+ it(@"should close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
context(@"limited", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelLimited);
+ sendNotificationForHMILevel(SDLHMILevelLimited, SDLVideoStreamingStateStreamable);
});
- it(@"should not close either stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateReady));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateReady));
+ it(@"should not close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
});
});
context(@"full", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelFull);
+ sendNotificationForHMILevel(SDLHMILevelFull, SDLVideoStreamingStateStreamable);
+ });
+
+ it(@"should not close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
+ });
+ });
+
+ context(@"full but not streamable", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelFull, SDLVideoStreamingStateNotStreamable);
});
- it(@"should not close either stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateReady));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateReady));
+ it(@"should close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
});
@@ -256,127 +244,148 @@ describe(@"the streaming media manager", ^{
});
it(@"should suspend the video stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateShuttingDown));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateSuspended));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateSuspended));
});
});
});
});
- describe(@"and the hmi state is full", ^{
+ context(@"and the hmi state is full", ^{
beforeEach(^{
streamingLifecycleManager.hmiLevel = SDLHMILevelFull;
});
context(@"and hmi state changes to none", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelNone);
+ sendNotificationForHMILevel(SDLHMILevelNone, SDLVideoStreamingStateStreamable);
});
- it(@"should close both streams", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateShuttingDown));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateShuttingDown));
+ it(@"should close the streams", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
context(@"and hmi state changes to background", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelBackground);
+ sendNotificationForHMILevel(SDLHMILevelBackground, SDLVideoStreamingStateStreamable);
});
- it(@"should close both stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateShuttingDown));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateShuttingDown));
+ it(@"should close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
context(@"and hmi state changes to limited", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelLimited);
+ sendNotificationForHMILevel(SDLHMILevelLimited, SDLVideoStreamingStateStreamable);
});
- it(@"should not close either stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateReady));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateReady));
+ it(@"should not close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
});
});
context(@"and hmi state changes to full", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelFull);
+ sendNotificationForHMILevel(SDLHMILevelFull, SDLVideoStreamingStateStreamable);
+ });
+
+ it(@"should not close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
+ });
+ });
+
+ context(@"full but not streamable", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelFull, SDLVideoStreamingStateNotStreamable);
+ });
+
+ it(@"should close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
});
+ });
- it(@"should not close either stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateReady));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateReady));
+ context(@"and hmi state changes to background after app becomes inactive", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.appStateMachine setToState:SDLAppStateInactive fromOldState:nil callEnterTransition:YES];
+ sendNotificationForHMILevel(SDLHMILevelBackground, SDLVideoStreamingStateNotStreamable);
+ });
+
+ it(@"should close the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
context(@"and hmi state changes to background after app becomes inactive", ^{
beforeEach(^{
[streamingLifecycleManager.appStateMachine setToState:SDLAppStateInactive fromOldState:nil callEnterTransition:YES];
- sendNotificationForHMILevel(SDLHMILevelBackground);
+ sendNotificationForHMILevel(SDLHMILevelBackground, SDLVideoStreamingStateNotStreamable);
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
});
});
- describe(@"and both streams are closed", ^{
+ context(@"and both streams are closed", ^{
beforeEach(^{
- [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamStateStopped fromOldState:nil callEnterTransition:NO];
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamStateStopped fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateStopped fromOldState:nil callEnterTransition:NO];
});
- describe(@"and the hmi state is none", ^{
+ context(@"and the hmi state is none", ^{
beforeEach(^{
streamingLifecycleManager.hmiLevel = SDLHMILevelNone;
});
context(@"and hmi state changes to none", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelNone);
+ sendNotificationForHMILevel(SDLHMILevelNone, SDLVideoStreamingStateStreamable);
});
- it(@"should not start either stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateStopped));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStopped));
+ it(@"should not start the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
});
});
context(@"and hmi state changes to background", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelBackground);
+ sendNotificationForHMILevel(SDLHMILevelBackground, SDLVideoStreamingStateStreamable);
});
- it(@"should not start either stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateStopped));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStopped));
+ it(@"should not start the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
});
});
context(@"and hmi state changes to limited", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelLimited);
+ sendNotificationForHMILevel(SDLHMILevelLimited, SDLVideoStreamingStateStreamable);
});
- it(@"should start both streams", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateStarting));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStarting));
+ it(@"should start the streams", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStarting));
});
});
context(@"and hmi state changes to full", ^{
beforeEach(^{
- sendNotificationForHMILevel(SDLHMILevelFull);
+ sendNotificationForHMILevel(SDLHMILevelFull, SDLVideoStreamingStateStreamable);
});
- it(@"should start both streams", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateStarting));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStarting));
+ it(@"should start the streams", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStarting));
+ });
+ });
+
+ context(@"full but not streamable", ^{
+ beforeEach(^{
+ sendNotificationForHMILevel(SDLHMILevelFull, SDLVideoStreamingStateNotStreamable);
+ });
+
+ it(@"should not start the stream", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
});
});
});
@@ -385,7 +394,7 @@ describe(@"the streaming media manager", ^{
describe(@"sending a video capabilities request", ^{
beforeEach(^{
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamStateStarting fromOldState:nil callEnterTransition:YES];
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateStarting fromOldState:nil callEnterTransition:YES];
});
it(@"should send out a video capabilities request", ^{
@@ -414,50 +423,50 @@ describe(@"the streaming media manager", ^{
expect(streamingLifecycleManager.preferredResolutions.firstObject.resolutionWidth).to(equal(0));
expect(streamingLifecycleManager.preferredResolutions.firstObject.resolutionHeight).to(equal(0));
});
- });
- context(@"and receiving a response", ^{
- __block SDLImageResolution *resolution = nil;
- __block int32_t maxBitrate = 0;
- __block NSArray<SDLVideoStreamingFormat *> *testFormats = nil;
- __block BOOL testHapticsSupported = NO;
+ context(@"and receiving a response", ^{
+ __block SDLImageResolution *resolution = nil;
+ __block int32_t maxBitrate = 0;
+ __block NSArray<SDLVideoStreamingFormat *> *testFormats = nil;
+ __block BOOL testHapticsSupported = NO;
- beforeEach(^{
- SDLGetSystemCapabilityResponse *response = [[SDLGetSystemCapabilityResponse alloc] init];
- response.success = @YES;
- response.systemCapability = [[SDLSystemCapability alloc] init];
- response.systemCapability.systemCapabilityType = SDLSystemCapabilityTypeVideoStreaming;
-
- resolution = [[SDLImageResolution alloc] initWithWidth:42 height:69];
- maxBitrate = 12345;
- testFormats = @[[[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH265 protocol:SDLVideoStreamingProtocolRTMP], [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP]];
- testHapticsSupported = YES;
- response.systemCapability.videoStreamingCapability = [[SDLVideoStreamingCapability alloc] initWithPreferredResolution:resolution maxBitrate:maxBitrate supportedFormats:testFormats hapticDataSupported:testHapticsSupported];
- [testConnectionManager respondToLastRequestWithResponse:response];
- });
+ beforeEach(^{
+ SDLGetSystemCapabilityResponse *response = [[SDLGetSystemCapabilityResponse alloc] init];
+ response.success = @YES;
+ response.systemCapability = [[SDLSystemCapability alloc] init];
+ response.systemCapability.systemCapabilityType = SDLSystemCapabilityTypeVideoStreaming;
+
+ resolution = [[SDLImageResolution alloc] initWithWidth:42 height:69];
+ maxBitrate = 12345;
+ testFormats = @[[[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH265 protocol:SDLVideoStreamingProtocolRTMP], [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP]];
+ testHapticsSupported = YES;
+ response.systemCapability.videoStreamingCapability = [[SDLVideoStreamingCapability alloc] initWithPreferredResolution:resolution maxBitrate:maxBitrate supportedFormats:testFormats hapticDataSupported:testHapticsSupported];
+ [testConnectionManager respondToLastRequestWithResponse:response];
+ });
- it(@"should have correct data from the data source", ^{
- // Correct formats should be retrieved from the data source
- expect(streamingLifecycleManager.preferredResolutions).to(haveCount(1));
- expect(streamingLifecycleManager.preferredResolutions.firstObject.resolutionWidth).to(equal(resolution.resolutionWidth));
- expect(streamingLifecycleManager.preferredResolutions.firstObject.resolutionHeight).to(equal(resolution.resolutionHeight));
+ it(@"should have correct data from the data source", ^{
+ // Correct formats should be retrieved from the data source
+ expect(streamingLifecycleManager.preferredResolutions).to(haveCount(1));
+ expect(streamingLifecycleManager.preferredResolutions.firstObject.resolutionWidth).to(equal(resolution.resolutionWidth));
+ expect(streamingLifecycleManager.preferredResolutions.firstObject.resolutionHeight).to(equal(resolution.resolutionHeight));
- expect(streamingLifecycleManager.preferredFormats).to(haveCount(streamingLifecycleManager.supportedFormats.count + 1));
- expect(streamingLifecycleManager.preferredFormats.firstObject.codec).to(equal(testDataSource.extraFormat.codec));
- expect(streamingLifecycleManager.preferredFormats.firstObject.protocol).to(equal(testDataSource.extraFormat.protocol));
+ expect(streamingLifecycleManager.preferredFormats).to(haveCount(streamingLifecycleManager.supportedFormats.count + 1));
+ expect(streamingLifecycleManager.preferredFormats.firstObject.codec).to(equal(testDataSource.extraFormat.codec));
+ expect(streamingLifecycleManager.preferredFormats.firstObject.protocol).to(equal(testDataSource.extraFormat.protocol));
- // The haptic manager should be enabled
- expect(streamingLifecycleManager.focusableItemManager.enableHapticDataRequests).to(equal(YES));
- });
+ // The haptic manager should be enabled
+ expect(streamingLifecycleManager.focusableItemManager.enableHapticDataRequests).to(equal(YES));
+ });
- it(@"should have decided upon the correct preferred format and resolution", ^{
- SDLVideoStreamingFormat *preferredFormat = streamingLifecycleManager.preferredFormats[streamingLifecycleManager.preferredFormatIndex];
- expect(preferredFormat.codec).to(equal(SDLVideoStreamingCodecH264));
- expect(preferredFormat.protocol).to(equal(SDLVideoStreamingProtocolRTP));
+ it(@"should have decided upon the correct preferred format and resolution", ^{
+ SDLVideoStreamingFormat *preferredFormat = streamingLifecycleManager.preferredFormats[streamingLifecycleManager.preferredFormatIndex];
+ expect(preferredFormat.codec).to(equal(SDLVideoStreamingCodecH264));
+ expect(preferredFormat.protocol).to(equal(SDLVideoStreamingProtocolRTP));
- SDLImageResolution *preferredResolution = streamingLifecycleManager.preferredResolutions[streamingLifecycleManager.preferredResolutionIndex];
- expect(preferredResolution.resolutionHeight).to(equal(@69));
- expect(preferredResolution.resolutionWidth).to(equal(@42));
+ SDLImageResolution *preferredResolution = streamingLifecycleManager.preferredResolutions[streamingLifecycleManager.preferredResolutionIndex];
+ expect(preferredResolution.resolutionHeight).to(equal(@69));
+ expect(preferredResolution.resolutionWidth).to(equal(@42));
+ });
});
});
});
@@ -473,7 +482,7 @@ describe(@"the streaming media manager", ^{
__block SDLVideoStreamingProtocol testVideoProtocol = SDLVideoStreamingProtocolRTP;
beforeEach(^{
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamStateStarting fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
testVideoHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
testVideoHeader.frameType = SDLFrameTypeSingle;
@@ -494,7 +503,7 @@ describe(@"the streaming media manager", ^{
expect(CGSizeEqualToSize(streamingLifecycleManager.screenSize, CGSizeMake(testVideoWidth, testVideoHeight))).to(equal(YES));
expect(streamingLifecycleManager.videoEncrypted).to(equal(YES));
expect(streamingLifecycleManager.videoFormat).to(equal([[SDLVideoStreamingFormat alloc] initWithCodec:testVideoCodec protocol:testVideoProtocol]));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateReady));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
});
});
@@ -508,7 +517,7 @@ describe(@"the streaming media manager", ^{
it(@"should fall back correctly", ^{
expect(CGSizeEqualToSize(streamingLifecycleManager.screenSize, CGSizeMake(testVideoWidth, testVideoHeight))).to(equal(YES));
expect(streamingLifecycleManager.videoFormat).to(equal([[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRAW]));
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateReady));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
});
});
@@ -561,7 +570,7 @@ describe(@"the streaming media manager", ^{
__block SDLControlFramePayloadNak *testVideoStartNakPayload = nil;
beforeEach(^{
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamStateStarting fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
testVideoHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
testVideoHeader.frameType = SDLFrameTypeSingle;
@@ -591,7 +600,7 @@ describe(@"the streaming media manager", ^{
});
it(@"should end the service", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStopped));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
});
});
});
@@ -601,7 +610,7 @@ describe(@"the streaming media manager", ^{
__block SDLProtocolMessage *testVideoMessage = nil;
beforeEach(^{
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamStateStarting fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
testVideoHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
testVideoHeader.frameType = SDLFrameTypeSingle;
@@ -614,7 +623,7 @@ describe(@"the streaming media manager", ^{
});
it(@"should have set all the right properties", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStopped));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
});
});
@@ -623,7 +632,7 @@ describe(@"the streaming media manager", ^{
__block SDLProtocolMessage *testVideoMessage = nil;
beforeEach(^{
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamStateStarting fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
testVideoHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
testVideoHeader.frameType = SDLFrameTypeSingle;
@@ -636,100 +645,7 @@ describe(@"the streaming media manager", ^{
});
it(@"should have set all the right properties", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStopped));
- });
- });
-
- describe(@"after receiving an Audio Start ACK", ^{
- __block SDLProtocolHeader *testAudioHeader = nil;
- __block SDLProtocolMessage *testAudioMessage = nil;
- __block SDLControlFramePayloadAudioStartServiceAck *testAudioStartServicePayload = nil;
- __block int64_t testMTU = 786579;
-
- beforeEach(^{
- [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamStateStarting fromOldState:nil callEnterTransition:NO];
-
- testAudioHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
- testAudioHeader.frameType = SDLFrameTypeSingle;
- testAudioHeader.frameData = SDLFrameInfoStartServiceACK;
- testAudioHeader.encrypted = YES;
- testAudioHeader.serviceType = SDLServiceTypeAudio;
-
- testAudioStartServicePayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithMTU:testMTU];
- testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:testAudioStartServicePayload.data];
- [streamingLifecycleManager handleProtocolStartServiceACKMessage:testAudioMessage];
- });
-
- it(@"should have set all the right properties", ^{
- expect([[SDLGlobals sharedGlobals] mtuSizeForServiceType:SDLServiceTypeAudio]).to(equal(testMTU));
- expect(streamingLifecycleManager.audioEncrypted).to(equal(YES));
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateReady));
- });
- });
-
- describe(@"after receiving an Audio Start NAK", ^{
- __block SDLProtocolHeader *testAudioHeader = nil;
- __block SDLProtocolMessage *testAudioMessage = nil;
-
- beforeEach(^{
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLAudioStreamStateStarting fromOldState:nil callEnterTransition:NO];
-
- testAudioHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
- testAudioHeader.frameType = SDLFrameTypeSingle;
- testAudioHeader.frameData = SDLFrameInfoStartServiceNACK;
- testAudioHeader.encrypted = NO;
- testAudioHeader.serviceType = SDLServiceTypeAudio;
-
- testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil];
- [streamingLifecycleManager handleProtocolEndServiceACKMessage:testAudioMessage];
- });
-
- it(@"should have set all the right properties", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateStopped));
- });
- });
-
- describe(@"after receiving a audio end ACK", ^{
- __block SDLProtocolHeader *testAudioHeader = nil;
- __block SDLProtocolMessage *testAudioMessage = nil;
-
- beforeEach(^{
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLAudioStreamStateStarting fromOldState:nil callEnterTransition:NO];
-
- 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 have set all the right properties", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateStopped));
- });
- });
-
- describe(@"after receiving a audio end NAK", ^{
- __block SDLProtocolHeader *testAudioHeader = nil;
- __block SDLProtocolMessage *testAudioMessage = nil;
-
- beforeEach(^{
- [streamingLifecycleManager.videoStreamStateMachine setToState:SDLAudioStreamStateStarting fromOldState:nil callEnterTransition:NO];
-
- 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 have set all the right properties", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamStateStopped));
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
});
});
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m
index ef5b18623..645eceeab 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m
@@ -7,6 +7,7 @@
#import "SDLHMILevel.h"
#import "SDLImage.h"
#import "SDLMetadataTags.h"
+#import "SDLPutFileResponse.h"
#import "SDLShow.h"
#import "SDLTextAndGraphicManager.h"
#import "SDLTextField.h"
@@ -740,8 +741,11 @@ describe(@"text and graphic manager", ^{
});
context(@"updating images", ^{
+ __block NSString *testTextFieldText = @"mainFieldText";
+
beforeEach(^{
testManager.batchUpdates = YES;
+ testManager.textField1 = testTextFieldText;
});
context(@"when the image is already on the head unit", ^{
@@ -755,9 +759,9 @@ describe(@"text and graphic manager", ^{
});
it(@"should immediately attempt to update", ^{
- expect(testManager.inProgressUpdate.mainField1).to(equal(@""));
expect(testManager.inProgressUpdate.graphic.value).to(equal(testArtworkName));
expect(testManager.inProgressUpdate.secondaryGraphic.value).to(equal(testArtworkName));
+ expect(testManager.inProgressUpdate.mainField1).to(equal(testTextFieldText));
});
});
@@ -772,13 +776,87 @@ describe(@"text and graphic manager", ^{
});
it(@"should immediately attempt to update without the images", ^{
- expect(testManager.inProgressUpdate.mainField1).to(equal(@""));
+ expect(testManager.inProgressUpdate.mainField1).to(equal(testTextFieldText));
expect(testManager.inProgressUpdate.graphic.value).to(beNil());
expect(testManager.inProgressUpdate.secondaryGraphic.value).to(beNil());
expect(testManager.queuedImageUpdate.graphic.value).to(equal(testArtworkName));
expect(testManager.queuedImageUpdate.secondaryGraphic.value).to(equal(testArtworkName));
});
});
+
+ describe(@"When an image fails to upload to the remote", ^{
+ __block SDLArtwork *testArtwork1 = nil;
+ __block SDLArtwork *testArtwork2 = nil;
+
+ beforeEach(^{
+ testArtwork1 = [[SDLArtwork alloc] initWithData:[@"Test data 1" dataUsingEncoding:NSUTF8StringEncoding] name:@"Test data 1" fileExtension:@"png" persistent:NO];
+ testArtwork2 = [[SDLArtwork alloc] initWithData:[@"Test data 2" dataUsingEncoding:NSUTF8StringEncoding] name:@"Test data 2" fileExtension:@"png" persistent:NO];
+ });
+
+ context(@"If the images for the primary and secondary graphics fail the upload process", ^{
+ it(@"Should skip sending an update", ^{
+ testManager.primaryGraphic = testArtwork1;
+ testManager.secondaryGraphic = testArtwork2;
+ testManager.batchUpdates = NO;
+
+ OCMStub([mockFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(NO);
+ NSArray<NSString *> *testSuccessfulArtworks = @[];
+ NSError *testError = [NSError errorWithDomain:@"errorDomain"
+ code:9
+ userInfo:@{testArtwork1.name:@"error 1", testArtwork2.name:@"error 2"}
+ ];
+ OCMStub([mockFileManager uploadArtworks:[OCMArg isNotNil] completionHandler:([OCMArg invokeBlockWithArgs:testSuccessfulArtworks, testError, nil])]);
+ [testManager updateWithCompletionHandler:nil];
+
+ expect(testManager.textField1).to(equal(testTextFieldText));
+ expect(testManager.inProgressUpdate).to(beNil());
+ expect(testManager.queuedImageUpdate.graphic.value).to(equal(testArtwork1.name));
+ expect(testManager.queuedImageUpdate.secondaryGraphic.value).to(equal(testArtwork2.name));
+ });
+ });
+
+ context(@"If only one of images for the primary and secondary graphics fails to upload", ^{
+ it(@"Should show the primary graphic even if the secondary graphic upload fails", ^{
+ testManager.primaryGraphic = testArtwork1;
+ testManager.secondaryGraphic = testArtwork2;
+ testManager.batchUpdates = NO;
+
+ OCMStub([mockFileManager hasUploadedFile:testArtwork1]).andReturn(YES);
+ OCMStub([mockFileManager hasUploadedFile:testArtwork2]).andReturn(NO);
+ NSArray<NSString *> *testSuccessfulArtworks = @[testArtwork1.name];
+ NSError *testError = [NSError errorWithDomain:@"errorDomain" code:9 userInfo:@{testArtwork2.name:@"error 2"}];
+ OCMStub([mockFileManager uploadArtworks:[OCMArg isNotNil] completionHandler:([OCMArg invokeBlockWithArgs:testSuccessfulArtworks, testError, nil])]);
+ [testManager updateWithCompletionHandler:nil];
+
+ expect(testManager.textField1).to(equal(testTextFieldText));
+ expect(testManager.inProgressUpdate.graphic.value).to(equal(testArtwork1.name));
+ expect(testManager.inProgressUpdate.secondaryGraphic).to(beNil());
+ expect(testManager.inProgressUpdate.mainField1).to(beNil());
+ expect(testManager.queuedImageUpdate.graphic.value).to(equal(testArtwork1.name));
+ expect(testManager.queuedImageUpdate.secondaryGraphic.value).to(equal(testArtwork2.name));
+ });
+
+ it(@"Should show the secondary graphic even if the primary graphic upload fails", ^{
+ testManager.primaryGraphic = testArtwork1;
+ testManager.secondaryGraphic = testArtwork2;
+ testManager.batchUpdates = NO;
+
+ OCMStub([mockFileManager hasUploadedFile:testArtwork1]).andReturn(NO);
+ OCMStub([mockFileManager hasUploadedFile:testArtwork2]).andReturn(YES);
+ NSArray<NSString *> *testSuccessfulArtworks = @[testArtwork2.name];
+ NSError *testError = [NSError errorWithDomain:@"errorDomain" code:9 userInfo:@{testArtwork1.name:@"error 2"}];
+ OCMStub([mockFileManager uploadArtworks:[OCMArg isNotNil] completionHandler:([OCMArg invokeBlockWithArgs:testSuccessfulArtworks, testError, nil])]);
+ [testManager updateWithCompletionHandler:nil];
+
+ expect(testManager.textField1).to(equal(testTextFieldText));
+ expect(testManager.inProgressUpdate.graphic).to(beNil());
+ expect(testManager.inProgressUpdate.secondaryGraphic.value).to(equal(testArtwork2.name));
+ expect(testManager.inProgressUpdate.mainField1).to(beNil());
+ expect(testManager.queuedImageUpdate.graphic.value).to(equal(testArtwork1.name));
+ expect(testManager.queuedImageUpdate.secondaryGraphic.value).to(equal(testArtwork2.name));
+ });
+ });
+ });
});
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m
index 6d9474568..b2a83fca6 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m
@@ -9,7 +9,7 @@
#import "SDLPutFileResponse.h"
#import "SDLUploadFileOperation.h"
#import "TestConnectionManager.h"
-
+#import <zlib.h>
QuickSpecBegin(SDLUploadFileOperationSpec)
@@ -106,11 +106,14 @@ describe(@"Streaming upload of data", ^{
SDLPutFile *putFile = putFiles[index];
NSUInteger mtuSize = [[SDLGlobals sharedGlobals] mtuSizeForServiceType:SDLServiceTypeBulkData];
+ NSData *testBulkFileData = [testFileData subdataWithRange:NSMakeRange((index * mtuSize), MIN(putFile.length.unsignedIntegerValue, mtuSize))];
+ unsigned long testBulkFileDataCrc = crc32(0, testBulkFileData.bytes, (uInt)testBulkFileData.length);
expect(putFile.offset).to(equal(@(index * mtuSize)));
expect(putFile.persistentFile).to(equal(@NO));
expect(putFile.syncFileName).to(equal(testFileName));
- expect(putFile.bulkData).to(equal([testFileData subdataWithRange:NSMakeRange((index * mtuSize), MIN(putFile.length.unsignedIntegerValue, mtuSize))]));
+ expect(putFile.bulkData).to(equal(testBulkFileData));
+ expect(putFile.crc).to(equal([NSNumber numberWithUnsignedLong:testBulkFileDataCrc]));
// Length is used to inform the SDL Core of the total incoming packet size
if (index == 0) {
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLVoiceCommandManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLVoiceCommandManagerSpec.m
index 57ed8db1c..c5e275843 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLVoiceCommandManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLVoiceCommandManagerSpec.m
@@ -3,6 +3,7 @@
#import <OCMock/OCMock.h>
#import "SDLAddCommand.h"
+#import "SDLAddCommandResponse.h"
#import "SDLDeleteCommand.h"
#import "SDLFileManager.h"
#import "SDLHMILevel.h"
@@ -104,15 +105,17 @@ describe(@"voice command manager", ^{
context(@"when a menu already exists", ^{
beforeEach(^{
testManager.voiceCommands = @[testVoiceCommand];
- });
+ [mockConnectionManager respondToLastMultipleRequestsWithSuccess:YES]; // Add
- it(@"should send deletes first", ^{
testManager.voiceCommands = @[testVoiceCommand2];
+ [mockConnectionManager respondToLastMultipleRequestsWithSuccess:YES]; // Delete
+ });
- NSPredicate *deleteCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLDeleteCommand class]];
+ it(@"should send deletes first", ^{
+ NSPredicate *deleteCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass:%@", [SDLDeleteCommand class]];
NSArray *deletes = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:deleteCommandPredicate];
- NSPredicate *addCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass: %@", [SDLAddCommand class]];
+ NSPredicate *addCommandPredicate = [NSPredicate predicateWithFormat:@"self isMemberOfClass:%@", [SDLAddCommand class]];
NSArray *adds = [[mockConnectionManager.receivedRequests copy] filteredArrayUsingPredicate:addCommandPredicate];
expect(deletes).to(haveCount(1));
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/ControlFramePayloadSpecs/SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/ControlFramePayloadSpecs/SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m
new file mode 100644
index 000000000..e01d268f0
--- /dev/null
+++ b/SmartDeviceLinkTests/ProtocolSpecs/ControlFramePayloadSpecs/SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m
@@ -0,0 +1,77 @@
+//
+// SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Sho Amano on 2018/03/25.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLControlFramePayloadRegisterSecondaryTransportNak.h"
+
+QuickSpecBegin(SDLControlFramePayloadRegisterSecondaryTransportNakSpec)
+
+describe(@"Test encoding data", ^{
+ __block SDLControlFramePayloadRegisterSecondaryTransportNak *testPayload = nil;
+ __block NSString *testReason = nil;
+
+ context(@"with paramaters", ^{
+ beforeEach(^{
+ testReason = @"a sample reason of NAK";
+ testPayload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithReason:testReason];
+ });
+
+ it(@"should create the correct data", ^{
+ expect(testPayload.data.description).to(equal(@"<28000000 02726561 736f6e00 17000000 61207361 6d706c65 20726561 736f6e20 6f66204e 414b0000>"));
+ });
+ });
+
+ context(@"without parameters", ^{
+ beforeEach(^{
+ testReason = nil;
+ testPayload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithReason:testReason];
+ });
+
+ it(@"should create no data", ^{
+ expect(testPayload.data.length).to(equal(0));
+ });
+ });
+});
+
+describe(@"Test decoding data", ^{
+ __block SDLControlFramePayloadRegisterSecondaryTransportNak *testPayload = nil;
+ __block NSData *testData = nil;
+ __block NSString *testReason = nil;
+
+ beforeEach(^{
+ testReason = @"Here is another reason";
+
+ SDLControlFramePayloadRegisterSecondaryTransportNak *payload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithReason:testReason];
+ testData = payload.data;
+
+ testPayload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithData:testData];
+ });
+
+ it(@"should output the correct params", ^{
+ expect(testPayload.reason).to(equal(testReason));
+ });
+});
+
+describe(@"Test nil data", ^{
+ __block SDLControlFramePayloadRegisterSecondaryTransportNak *testPayload = nil;
+ __block NSData *testData = nil;
+
+ beforeEach(^{
+ testPayload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithData:testData];
+ });
+
+ it(@"should output the correct params", ^{
+ expect(testPayload.reason).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/ControlFramePayloadSpecs/SDLControlFramePayloadTransportEventUpdateSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/ControlFramePayloadSpecs/SDLControlFramePayloadTransportEventUpdateSpec.m
new file mode 100644
index 000000000..e6a79fc08
--- /dev/null
+++ b/SmartDeviceLinkTests/ProtocolSpecs/ControlFramePayloadSpecs/SDLControlFramePayloadTransportEventUpdateSpec.m
@@ -0,0 +1,85 @@
+//
+// SDLControlFramePayloadTransportEventUpdateSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Sho Amano on 2018/03/25.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLControlFramePayloadTransportEventUpdate.h"
+#import "SDLControlFramePayloadConstants.h"
+
+QuickSpecBegin(SDLControlFramePayloadTransportEventUpdateSpec)
+
+describe(@"Test encoding data", ^{
+ __block SDLControlFramePayloadTransportEventUpdate *testPayload = nil;
+ __block NSString *testTcpIpAddress = nil;
+ __block int32_t testTcpPort = SDLControlFrameInt32NotFound;
+
+ context(@"with paramaters", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"10.20.30.254";
+ testTcpPort = 12345;
+ testPayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ });
+
+ it(@"should create the correct data", ^{
+ expect(testPayload.data.description).to(equal(@"<31000000 10746370 506f7274 00393000 00027463 70497041 64647265 7373000d 00000031 302e3230 2e33302e 32353400 00>"));
+ });
+ });
+
+ context(@"without parameters", ^{
+ beforeEach(^{
+ testTcpIpAddress = nil;
+ testTcpPort = SDLControlFrameInt32NotFound;
+ testPayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ });
+
+ it(@"should create no data", ^{
+ expect(testPayload.data.length).to(equal(0));
+ });
+ });
+});
+
+describe(@"Test decoding data", ^{
+ __block SDLControlFramePayloadTransportEventUpdate *testPayload = nil;
+ __block NSData *testData = nil;
+ __block NSString *testTcpIpAddress = nil;
+ __block int32_t testTcpPort = SDLControlFrameInt32NotFound;
+
+ beforeEach(^{
+ testTcpIpAddress = @"192.168.132.24";
+ testTcpPort = 40902;
+
+ SDLControlFramePayloadTransportEventUpdate *payload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testData = payload.data;
+
+ testPayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithData:testData];
+ });
+
+ it(@"should output the correct params", ^{
+ expect(testPayload.tcpIpAddress).to(equal(testTcpIpAddress));
+ expect(testPayload.tcpPort).to(equal(testTcpPort));
+ });
+});
+
+describe(@"Test nil data", ^{
+ __block SDLControlFramePayloadTransportEventUpdate *testPayload = nil;
+ __block NSData *testData = nil;
+
+ beforeEach(^{
+ testPayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithData:testData];
+ });
+
+ it(@"should output the correct params", ^{
+ expect(testPayload.tcpIpAddress).to(beNil());
+ expect(testPayload.tcpPort).to(equal(SDLControlFrameInt32NotFound));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m
index 4131fed51..6ff840374 100644
--- a/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m
+++ b/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m
@@ -10,6 +10,8 @@
#import <OCMock/OCMock.h>
#import "SDLTransportType.h"
+#import "SDLControlFramePayloadRegisterSecondaryTransportNak.h"
+#import "SDLGlobals.h"
#import "SDLProtocolHeader.h"
#import "SDLProtocol.h"
#import "SDLProtocolMessage.h"
@@ -35,6 +37,10 @@ NSDictionary* dictionaryV2 = @{SDLNameCommandId:@55};
describe(@"Send StartService Tests", ^ {
context(@"Unsecure", ^{
it(@"Should send the correct data", ^ {
+ // Reset max protocol version before test. (This test case expects V1 header. If other test ran
+ // prior to this one, SDLGlobals would keep the max protocol version and this test case would fail.)
+ [[SDLGlobals sharedGlobals] setMaxHeadUnitVersion:@"1.0.0"];
+
SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
__block BOOL verified = NO;
@@ -56,6 +62,44 @@ describe(@"Send StartService Tests", ^ {
expect(@(verified)).toEventually(beTruthy());
});
+
+ it(@"Should reuse stored header of RPC service when starting other service", ^{
+ // reset max protocol version before test
+ [[SDLGlobals sharedGlobals] setMaxHeadUnitVersion:@"2.0.0"];
+
+ SDLServiceType serviceTypeToStart = SDLServiceTypeVideo;
+
+ // reference header (which is taken from Start Service ACK of Version Negotiation)
+ SDLV2ProtocolHeader *refHeader = [[SDLV2ProtocolHeader alloc] init];
+ refHeader.frameType = SDLFrameTypeControl;
+ refHeader.serviceType = SDLServiceTypeRPC;
+ refHeader.frameData = SDLFrameInfoStartServiceACK;
+ refHeader.sessionID = 100;
+
+ SDLV2ProtocolHeader *header = [refHeader copy];
+ header.serviceType = serviceTypeToStart;
+ header.frameData = SDLFrameInfoStartService;
+ NSData *headerData = [header data];
+
+ SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
+
+ __block BOOL verified = NO;
+ id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
+ [[[transportMock stub] andDo:^(NSInvocation* invocation) {
+ verified = YES;
+
+ __unsafe_unretained NSData* data;
+ [invocation getArgument:&data atIndex:2];
+ NSData* dataSent = [data copy];
+ expect(dataSent).to(equal(headerData));
+ }] sendData:[OCMArg any]];
+ testProtocol.transport = transportMock;
+
+ [testProtocol storeHeader:header forServiceType:SDLServiceTypeRPC];
+ [testProtocol startServiceWithType:serviceTypeToStart payload:nil];
+
+ expect(@(verified)).toEventually(beTruthy());
+ });
});
context(@"Secure", ^{
@@ -127,6 +171,41 @@ describe(@"Send EndSession Tests", ^ {
});
});
+describe(@"Send Register Secondary Transport Tests", ^ {
+ it(@"Should send the correct data", ^ {
+ SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
+
+ // receive a Start Service ACK frame of RPC to configure protocol version
+ SDLV2ProtocolHeader *refHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
+ refHeader.frameType = SDLFrameTypeControl;
+ refHeader.serviceType = SDLServiceTypeRPC;
+ refHeader.frameData = SDLFrameInfoStartServiceACK;
+ refHeader.sessionID = 0x11;
+ [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:refHeader andPayload:nil]];
+
+ // store the header to apply Session ID value to Register Secondary Transport frame
+ [testProtocol storeHeader:refHeader forServiceType:SDLServiceTypeControl];
+
+ __block BOOL verified = NO;
+ id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
+ [[[transportMock stub] andDo:^(NSInvocation* invocation) {
+ verified = YES;
+
+ __unsafe_unretained NSData* data;
+ [invocation getArgument:&data atIndex:2];
+ NSData* dataSent = [data copy];
+
+ const char testHeader[12] = {0x50 | SDLFrameTypeControl, SDLServiceTypeControl, SDLFrameInfoRegisterSecondaryTransport, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
+ expect(dataSent).to(equal([NSData dataWithBytes:testHeader length:12]));
+ }] sendData:[OCMArg any]];
+ testProtocol.transport = transportMock;
+
+ [testProtocol registerSecondaryTransport];
+
+ expect(@(verified)).toEventually(beTruthy());
+ });
+});
+
describe(@"SendRPCRequest Tests", ^ {
__block id mockRequest;
beforeEach(^ {
@@ -345,6 +424,48 @@ xdescribe(@"HandleProtocolSessionStarted Tests", ^ {
});
});
+xdescribe(@"HandleProtocolRegisterSecondaryTransport Tests", ^ {
+ it(@"Should pass information along to delegate when ACKed", ^ {
+ SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
+
+ id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
+
+ SDLV2ProtocolHeader* testHeader = [[SDLV2ProtocolHeader alloc] init];
+ testHeader.frameType = SDLFrameTypeControl;
+ testHeader.serviceType = SDLServiceTypeControl;
+ testHeader.frameData = SDLFrameInfoRegisterSecondaryTransportACK;
+ testHeader.sessionID = 0x32;
+ testHeader.messageID = 2;
+ testHeader.bytesInPayload = 0;
+
+ [testProtocol.protocolDelegateTable addObject:delegateMock];
+ [testProtocol handleProtocolRegisterSecondaryTransportACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
+
+ OCMExpect([delegateMock handleProtocolRegisterSecondaryTransportACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]]);
+ });
+
+ it(@"Should pass information along to delegate when NAKed", ^ {
+ SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
+
+ id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
+
+ SDLV2ProtocolHeader* testHeader = [[SDLV2ProtocolHeader alloc] init];
+ testHeader.frameType = SDLFrameTypeControl;
+ testHeader.serviceType = SDLServiceTypeControl;
+ testHeader.frameData = SDLFrameInfoRegisterSecondaryTransportNACK;
+ testHeader.sessionID = 0x56;
+ testHeader.messageID = 2;
+
+ SDLControlFramePayloadRegisterSecondaryTransportNak *payload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithReason:@"Sample reason"];
+ NSData *payloadData = payload.data;
+
+ [testProtocol.protocolDelegateTable addObject:delegateMock];
+ [testProtocol handleProtocolRegisterSecondaryTransportACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:payloadData]];
+
+ OCMExpect([delegateMock handleProtocolRegisterSecondaryTransportNAKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:payloadData]]);
+ });
+});
+
xdescribe(@"HandleHeartbeatForSession Tests", ^{
// TODO: Test automatically sending data to head unit (dependency injection?)
it(@"Should pass information along to delegate", ^ {
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLV2ProtocolMessageSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLV2ProtocolMessageSpec.m
index 12ce1e05a..3b73eb172 100644
--- a/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLV2ProtocolMessageSpec.m
+++ b/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLV2ProtocolMessageSpec.m
@@ -17,41 +17,7 @@
QuickSpecBegin(SDLV2ProtocolMessageSpec)
describe(@"RPCDictionary Tests", ^ {
- it(@"Should return the correct dictionary", ^ {
- SDLServiceType serviceType = SDLServiceTypeRPC;
-
- SDLV2ProtocolHeader* testHeader = [[SDLV2ProtocolHeader alloc] init];
- id headerMock = OCMPartialMock(testHeader);
- [[[headerMock stub] andReturnValue:[NSValue value:&serviceType withObjCType:@encode(SDLServiceType)]] serviceType];
-
- NSDictionary* dictionary = @{@"A": @1,
- @"B": @2,
- @"C": @3,
- @"D": @4,
- @"E": @5};
- UInt32 correlationID = 99;
- UInt32 functionID = 26;
- Byte rpcType = 0;
-
- SDLRPCPayload* testPayload = [[SDLRPCPayload alloc] init];
- id payloadMock = OCMPartialMock(testPayload);
- [[[payloadMock stub] andReturn:[NSJSONSerialization dataWithJSONObject:dictionary options:0 error:0]] jsonData];
- [[[payloadMock stub] andReturnValue:[NSValue value:&correlationID withObjCType:@encode(UInt32)]] correlationID];
- [[[payloadMock stub] andReturnValue:[NSValue value:&functionID withObjCType:@encode(UInt32)]] functionID];
- [[[payloadMock stub] andReturnValue:[NSValue value:&rpcType withObjCType:@encode(Byte)]] rpcType];
- [[[payloadMock stub] andReturn:[NSData dataWithBytes:"Database" length:strlen("Database")]] binaryData];
-
- id payloadClassMock = OCMClassMock(SDLRPCPayload.class);
- [[[payloadClassMock stub] andReturn:testPayload] rpcPayloadWithData:[OCMArg any]];
-
- SDLV2ProtocolMessage* testMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testHeader andPayload:[[NSMutableData alloc] initWithCapacity:0]];
-
- expect([testMessage rpcDictionary]).to(equal(@{SDLNameRequest:
- @{SDLNameOperationName:SDLNameSlider,
- SDLNameCorrelationId:@99,
- SDLNameParameters:dictionary},
- SDLNameBulkData:[NSData dataWithBytes:"Database" length:strlen("Database")]}));
- });
+
});
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/SDLControlFramePayloadRPCStartServiceAckSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/SDLControlFramePayloadRPCStartServiceAckSpec.m
index 7397f5713..8a198c63e 100644
--- a/SmartDeviceLinkTests/ProtocolSpecs/SDLControlFramePayloadRPCStartServiceAckSpec.m
+++ b/SmartDeviceLinkTests/ProtocolSpecs/SDLControlFramePayloadRPCStartServiceAckSpec.m
@@ -14,6 +14,9 @@ describe(@"Test encoding data", ^{
__block int32_t testHashId = 0;
__block int64_t testMTU = 0;
__block NSString *testProtocolVersion = nil;
+ __block NSArray<NSString *> *testSecondaryTransports = nil;
+ __block NSArray<NSNumber *> *testAudioServiceTransports = nil;
+ __block NSArray<NSNumber *> *testVideoServiceTransports = nil;
context(@"with paramaters", ^{
beforeEach(^{
@@ -21,7 +24,7 @@ describe(@"Test encoding data", ^{
testMTU = 5984649;
testProtocolVersion = @"1.32.32";
- testPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMTU protocolVersion:testProtocolVersion];
+ testPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMTU protocolVersion:testProtocolVersion secondaryTransports:nil audioServiceTransports:nil videoServiceTransports:nil];
});
it(@"should create the correct data", ^{
@@ -29,12 +32,29 @@ describe(@"Test encoding data", ^{
});
});
+ context(@"with secondary transport paramaters", ^{
+ beforeEach(^{
+ testHashId = 987654;
+ testMTU = 4096;
+ testProtocolVersion = @"5.10.01";
+ testSecondaryTransports = @[@"TCP_WIFI", @"IAP_USB"];
+ testAudioServiceTransports = @[@(2)];
+ testVideoServiceTransports = @[(@2), @(1)];
+
+ testPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMTU protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports];
+ });
+
+ it(@"should create the correct data", ^{
+ expect(testPayload.data.description).to(equal(@"<c3000000 04766964 656f5365 72766963 65547261 6e73706f 72747300 13000000 10300002 00000010 31000100 00000010 68617368 49640006 120f0012 6d747500 00100000 00000000 04736563 6f6e6461 72795472 616e7370 6f727473 00240000 00023000 09000000 5443505f 57494649 00023100 08000000 4941505f 55534200 00046175 64696f53 65727669 63655472 616e7370 6f727473 000c0000 00103000 02000000 00027072 6f746f63 6f6c5665 7273696f 6e000800 0000352e 31302e30 310000>"));
+ });
+ });
+
context(@"without parameters", ^{
beforeEach(^{
testHashId = SDLControlFrameInt32NotFound;
testMTU = SDLControlFrameInt64NotFound;
- testPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMTU protocolVersion:nil];
+ testPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMTU protocolVersion:nil secondaryTransports:nil audioServiceTransports:nil videoServiceTransports:nil];
});
it(@"should create no data", ^{
@@ -49,22 +69,52 @@ describe(@"Test decoding data", ^{
__block int32_t testHashId = 0;
__block int64_t testMTU = 0;
__block NSString *testProtocolVersion = nil;
+ __block NSArray<NSString *> *testSecondaryTransports = nil;
+ __block NSArray<NSNumber *> *testAudioServiceTransports = nil;
+ __block NSArray<NSNumber *> *testVideoServiceTransports = nil;
- beforeEach(^{
- testHashId = 1545784;
- testMTU = 989786483;
- testProtocolVersion = @"3.89.5";
+ context(@"with paramaters", ^{
+ beforeEach(^{
+ testHashId = 1545784;
+ testMTU = 989786483;
+ testProtocolVersion = @"3.89.5";
- SDLControlFramePayloadRPCStartServiceAck *firstPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMTU protocolVersion:testProtocolVersion];
- testData = firstPayload.data;
+ SDLControlFramePayloadRPCStartServiceAck *firstPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMTU protocolVersion:testProtocolVersion secondaryTransports:nil audioServiceTransports:nil videoServiceTransports:nil];
+ testData = firstPayload.data;
- testPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithData:testData];
+ testPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithData:testData];
+ });
+
+ it(@"should output the correct params", ^{
+ expect(testPayload.hashId).to(equal(testHashId));
+ expect(testPayload.mtu).to(equal(testMTU));
+ expect(testPayload.protocolVersion).to(equal(testProtocolVersion));
+ });
});
- it(@"should output the correct params", ^{
- expect(testPayload.hashId).to(equal(testHashId));
- expect(testPayload.mtu).to(equal(testMTU));
- expect(testPayload.protocolVersion).to(equal(testProtocolVersion));
+ context(@"with secondary transportparamaters", ^{
+ beforeEach(^{
+ testHashId = 17999024;
+ testMTU = 1798250;
+ testProtocolVersion = @"6.01.00";
+ testSecondaryTransports = @[@"TCP_WIFI"];
+ testAudioServiceTransports = @[@(2), @(1)];
+ testVideoServiceTransports = @[@(1)];
+
+ SDLControlFramePayloadRPCStartServiceAck *firstPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMTU protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports];
+ testData = firstPayload.data;
+
+ testPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithData:testData];
+ });
+
+ it(@"should output the correct params", ^{
+ expect(testPayload.hashId).to(equal(testHashId));
+ expect(testPayload.mtu).to(equal(testMTU));
+ expect(testPayload.protocolVersion).to(equal(testProtocolVersion));
+ expect(testPayload.secondaryTransports).to(equal(testSecondaryTransports));
+ expect(testPayload.audioServiceTransports).to(equal(testAudioServiceTransports));
+ expect(testPayload.videoServiceTransports).to(equal(testVideoServiceTransports));
+ });
});
});
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m
index 51145a6f6..8c87737e0 100644
--- a/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m
+++ b/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m
@@ -78,7 +78,8 @@ describe(@"GetFunctionName Tests", ^ {
expect([functionID functionNameForId:32781]).to(equal(SDLNameOnSystemRequest));
expect([functionID functionNameForId:32782]).to(equal(SDLNameOnHashChange));
expect([functionID functionNameForId:32784]).to(equal(SDLNameOnWayPointChange));
-
+ expect([functionID functionNameForId:32785]).to(equal(SDLNameOnRCStatus));
+
//Not listed in Spec
expect([functionID functionNameForId:65536]).to(equal(SDLNameEncodedSyncPData));
expect([functionID functionNameForId:65537]).to(equal(SDLNameSyncPData));
@@ -151,6 +152,7 @@ describe(@"GetFunctionID Tests", ^ {
expect([functionID functionIdForName:SDLNameOnSystemRequest]).to(equal(@32781));
expect([functionID functionIdForName:SDLNameOnHashChange]).to(equal(@32782));
expect([functionID functionIdForName:SDLNameOnWayPointChange]).to(equal(@32784));
+ expect([functionID functionIdForName:SDLNameOnRCStatus]).to(equal(@32785));
//Not listed in Spec
expect([functionID functionIdForName:SDLNameEncodedSyncPData]).to(equal(@65536));
@@ -158,6 +160,7 @@ describe(@"GetFunctionID Tests", ^ {
expect([functionID functionIdForName:SDLNameOnEncodedSyncPData]).to(equal(@98304));
expect([functionID functionIdForName:SDLNameOnSyncPData]).to(equal(@98305));
+
});
});
diff --git a/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m b/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m
new file mode 100644
index 000000000..81b4196c7
--- /dev/null
+++ b/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m
@@ -0,0 +1,1052 @@
+//
+// SDLSecondaryTransportManagerSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Sho Amano on 2018/03/25.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLControlFramePayloadRegisterSecondaryTransportNak.h"
+#import "SDLControlFramePayloadRPCStartServiceAck.h"
+#import "SDLControlFramePayloadTransportEventUpdate.h"
+#import "SDLIAPTransport.h"
+#import "SDLProtocol.h"
+#import "SDLSecondaryTransportManager.h"
+#import "SDLStateMachine.h"
+#import "SDLTCPTransport.h"
+#import "SDLV2ProtocolMessage.h"
+
+/* copied from SDLSecondaryTransportManager.m */
+typedef NSNumber SDLServiceTypeBox;
+
+typedef NS_ENUM(NSInteger, SDLTransportClass) {
+ SDLTransportClassInvalid = 0,
+ SDLTransportClassPrimary = 1,
+ SDLTransportClassSecondary = 2,
+};
+typedef NSNumber SDLTransportClassBox;
+
+typedef NS_ENUM(NSInteger, SDLSecondaryTransportType) {
+ SDLTransportSelectionDisabled, // only for Secondary Transport
+ SDLTransportSelectionIAP,
+ SDLTransportSelectionTCP
+};
+
+// should be in sync with SDLSecondaryTransportManager.m
+static const float RetryConnectionDelay = 5.0;
+static const int TCPPortUnspecified = -1;
+
+
+@interface SDLSecondaryTransportManager ()
+
+// we need to reach to private properties for the tests
+@property (assign, nonatomic) SDLSecondaryTransportType secondaryTransportType;
+@property (nullable, strong, nonatomic) id<SDLTransportType> secondaryTransport;
+@property (nullable, strong, nonatomic) SDLProtocol *secondaryProtocol;
+@property (strong, nonatomic, nonnull) NSArray<SDLTransportClassBox *> *transportsForAudioService;
+@property (strong, nonatomic, nonnull) NSArray<SDLTransportClassBox *> *transportsForVideoService;
+@property (strong, nonatomic) NSMutableDictionary<SDLServiceTypeBox *, SDLTransportClassBox *> *streamingServiceTransportMap;
+@property (strong, nonatomic, nullable) NSString *ipAddress;
+@property (assign, nonatomic) int tcpPort;
+
+@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;
+@end
+
+@implementation SDLSecondaryTransportManager (ForTest)
+- (UIApplicationState)dummyGetAppState {
+ NSLog(@"Testing: app state for secondary transport manager is always ACTIVE");
+ return UIApplicationStateActive;
+}
+
++ (void)swapGetAppStateMethod {
+ SEL selector = NSSelectorFromString(@"sdl_getAppState");
+ Method from = class_getInstanceMethod(self, selector);
+ Method to = class_getInstanceMethod(self, @selector(dummyGetAppState));
+ method_exchangeImplementations(from, to);
+}
+@end
+
+@interface SDLTCPTransport (ConnectionDisabled)
+// Disable connect and disconnect methods
++ (void)swapConnectionMethods;
+@end
+
+@implementation SDLTCPTransport (ConnectionDisabled)
+- (void)dummyConnect {
+ NSLog(@"SDLTCPTransport connect doing nothing");
+}
+- (void)dummyDisconnect {
+ NSLog(@"SDLTCPTransport disconnect doing nothing");
+}
+
++ (void)swapConnectionMethods {
+ Method from = class_getInstanceMethod(self, @selector(connect));
+ Method to = class_getInstanceMethod(self, @selector(dummyConnect));
+ method_exchangeImplementations(from, to);
+
+ from = class_getInstanceMethod(self, @selector(disconnect));
+ to = class_getInstanceMethod(self, @selector(dummyDisconnect));
+ method_exchangeImplementations(from, to);
+}
+@end
+
+@interface SDLIAPTransport (ConnectionDisabled)
+// Disable connect and disconnect methods
++ (void)swapConnectionMethods;
+@end
+
+@implementation SDLIAPTransport (ConnectionDisabled)
+- (void)dummyConnect {
+ NSLog(@"SDLIAPTransport connect doing nothing");
+}
+- (void)dummyDisconnect {
+ NSLog(@"SDLIAPTransport disconnect doing nothing");
+}
+
++ (void)swapConnectionMethods {
+ Method from = class_getInstanceMethod(self, @selector(connect));
+ Method to = class_getInstanceMethod(self, @selector(dummyConnect));
+ method_exchangeImplementations(from, to);
+
+ from = class_getInstanceMethod(self, @selector(disconnect));
+ to = class_getInstanceMethod(self, @selector(dummyDisconnect));
+ method_exchangeImplementations(from, to);
+}
+@end
+
+
+QuickSpecBegin(SDLSecondaryTransportManagerSpec)
+
+describe(@"the secondary transport manager ", ^{
+ __block SDLSecondaryTransportManager *manager = nil;
+ __block dispatch_queue_t testStateMachineQueue;
+ __block SDLProtocol *testPrimaryProtocol = nil;
+ __block id<SDLTransportType> testPrimaryTransport = nil;
+ __block id testStreamingProtocolDelegate = nil;
+
+ beforeEach(^{
+ [SDLSecondaryTransportManager swapGetAppStateMethod];
+ [SDLTCPTransport swapConnectionMethods];
+ [SDLIAPTransport swapConnectionMethods];
+
+ // "strict" mock. If one of the delegate methods is called without prior expectation, it will throw an exception
+ testStreamingProtocolDelegate = OCMStrictProtocolMock(@protocol(SDLStreamingProtocolDelegate));
+ testStateMachineQueue = dispatch_queue_create("com.sdl.testsecondarytransportmanager", DISPATCH_QUEUE_SERIAL);
+ manager = [[SDLSecondaryTransportManager alloc] initWithStreamingProtocolDelegate:testStreamingProtocolDelegate serialQueue:testStateMachineQueue];
+ });
+
+ 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]);
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stop];
+ });
+ manager = nil;
+
+ [SDLIAPTransport swapConnectionMethods];
+ [SDLTCPTransport swapConnectionMethods];
+ [SDLSecondaryTransportManager swapGetAppStateMethod];
+ });
+
+
+ it(@"should initialize its property", ^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionDisabled));
+ expect(manager.transportsForAudioService).to(equal(@[]));
+ expect(manager.transportsForVideoService).to(equal(@[]));
+ NSMutableDictionary<SDLServiceTypeBox *, SDLTransportClassBox *> *expectedAssignedTransport = [@{@(SDLServiceTypeAudio):@(SDLTransportClassInvalid),
+ @(SDLServiceTypeVideo):@(SDLTransportClassInvalid)} mutableCopy];
+ expect(manager.streamingServiceTransportMap).to(equal(expectedAssignedTransport));
+ expect(manager.ipAddress).to(beNil());
+ expect(manager.tcpPort).to(equal(TCPPortUnspecified));
+ });
+
+
+ describe(@"when started", ^{
+ beforeEach(^{
+ testPrimaryProtocol = [[SDLProtocol alloc] init];
+ });
+
+ it(@"should transition to Started state", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStarted));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+
+ describe(@"In Started state", ^{
+ 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];
+ });
+ });
+
+ describe(@"when received Start Service ACK on primary transport", ^{
+ __block SDLProtocolHeader *testStartServiceACKHeader = nil;
+ __block SDLProtocolMessage *testStartServiceACKMessage = nil;
+ __block SDLControlFramePayloadRPCStartServiceAck *testStartServiceACKPayload = nil;
+ __block int32_t testHashId = 12345;
+ __block int64_t testMtu = 12345678;
+ __block NSString *testProtocolVersion = @"5.1.0";
+ __block NSArray<NSString *> *testSecondaryTransports = nil;
+ __block NSArray<NSNumber *> *testAudioServiceTransports = nil;
+ __block NSArray<NSNumber *> *testVideoServiceTransports = nil;
+
+ beforeEach(^{
+ testStartServiceACKHeader = [SDLProtocolHeader headerForVersion:5];
+ testStartServiceACKHeader.frameType = SDLFrameTypeControl;
+ testStartServiceACKHeader.serviceType = SDLServiceTypeRPC;
+ testStartServiceACKHeader.frameData = SDLFrameInfoStartServiceACK;
+
+ testSecondaryTransports = nil;
+ testAudioServiceTransports = nil;
+ testVideoServiceTransports = nil;
+ });
+
+ context(@"with parameters for TCP secondary transport", ^{
+ beforeEach(^{
+ testSecondaryTransports = @[@"TCP_WIFI"];
+ testAudioServiceTransports = @[@(2), @(1)];
+ testVideoServiceTransports = @[@(2)];
+
+ testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu 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]);
+
+ [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+
+ expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionTCP));
+ NSArray<SDLTransportClassBox *> *expectedTransportsForAudioService = @[@(SDLTransportClassSecondary), @(SDLTransportClassPrimary)];
+ expect(manager.transportsForAudioService).to(equal(expectedTransportsForAudioService));
+ NSArray<SDLTransportClassBox *> *expectedTransportsForVideoService = @[@(SDLTransportClassSecondary)];
+ expect(manager.transportsForVideoService).to(equal(expectedTransportsForVideoService));
+
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"with only secondary transports parameter for TCP", ^{
+ beforeEach(^{
+ // Note: this is not allowed for now. It should contain only one element.
+ testSecondaryTransports = @[@"TCP_WIFI", @"IAP_USB_HOST_MODE"];
+
+ testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu 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 case, audio and video services start on primary transport (for compatibility)
+ OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
+ OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
+
+ [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+
+ expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionTCP));
+ expect(manager.transportsForAudioService).to(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.transportsForVideoService).to(equal(@[@(SDLTransportClassPrimary)]));
+
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"with parameters for iAP secondary transport", ^{
+ beforeEach(^{
+ testSecondaryTransports = @[@"IAP_USB_HOST_MODE"];
+ testAudioServiceTransports = @[@(2)];
+ testVideoServiceTransports = @[@(2)];
+
+ testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports];
+ testStartServiceACKMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testStartServiceACKHeader andPayload:testStartServiceACKPayload.data];
+ });
+
+ 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]);
+
+ [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+
+ // see the comment above
+ expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionDisabled));
+ expect(manager.transportsForAudioService).to(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.transportsForVideoService).to(equal(@[@(SDLTransportClassPrimary)]));
+
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"without secondary transport related parameter", ^{
+ beforeEach(^{
+ testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports];
+ testStartServiceACKMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testStartServiceACKHeader andPayload:testStartServiceACKPayload.data];
+ });
+
+ 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]);
+
+ [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+
+ expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionDisabled));
+ expect(manager.transportsForAudioService).to(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.transportsForVideoService).to(equal(@[@(SDLTransportClassPrimary)]));
+
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+ describe(@"when received Transport Event Update frame on primary transport prior to Start Service ACK", ^{
+ __block SDLProtocolHeader *testTransportEventUpdateHeader = nil;
+ __block SDLProtocolMessage *testTransportEventUpdateMessage = nil;
+ __block SDLControlFramePayloadTransportEventUpdate *testTransportEventUpdatePayload = nil;
+ __block NSString *testTcpIpAddress = nil;
+ __block int32_t testTcpPort = TCPPortUnspecified;
+
+ beforeEach(^{
+ testTransportEventUpdateHeader = [SDLProtocolHeader headerForVersion:5];
+ testTransportEventUpdateHeader.frameType = SDLFrameTypeControl;
+ testTransportEventUpdateHeader.serviceType = SDLServiceTypeControl;
+ testTransportEventUpdateHeader.frameData = SDLFrameInfoTransportEventUpdate;
+ testTcpIpAddress = @"192.168.1.1";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should configure its properties but stay in Started state", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStarted));
+
+ expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionDisabled));
+ expect(manager.transportsForAudioService).to(equal(@[]));
+ expect(manager.transportsForVideoService).to(equal(@[]));
+ expect(manager.ipAddress).to(equal(testTcpIpAddress));
+ expect(manager.tcpPort).to(equal(testTcpPort));
+
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ describe(@"when received Transport Event Update frame and then Start Service ACK on primary transport", ^{
+ __block SDLProtocolHeader *testTransportEventUpdateHeader = nil;
+ __block SDLProtocolMessage *testTransportEventUpdateMessage = nil;
+ __block SDLControlFramePayloadTransportEventUpdate *testTransportEventUpdatePayload = nil;
+ __block NSString *testTcpIpAddress = nil;
+ __block int32_t testTcpPort = TCPPortUnspecified;
+
+ __block SDLProtocolHeader *testStartServiceACKHeader = nil;
+ __block SDLProtocolMessage *testStartServiceACKMessage = nil;
+ __block SDLControlFramePayloadRPCStartServiceAck *testStartServiceACKPayload = nil;
+ __block int32_t testHashId = 12345;
+ __block int64_t testMtu = 1234567;
+ __block NSString *testProtocolVersion = @"5.1.0";
+ __block NSArray<NSString *> *testSecondaryTransports = @[@"TCP_WIFI"];
+ __block NSArray<NSNumber *> *testAudioServiceTransports = @[@(2)];
+ __block NSArray<NSNumber *> *testVideoServiceTransports = @[@(2)];
+
+ beforeEach(^{
+ testTransportEventUpdateHeader = [SDLProtocolHeader headerForVersion:5];
+ testTransportEventUpdateHeader.frameType = SDLFrameTypeControl;
+ testTransportEventUpdateHeader.serviceType = SDLServiceTypeControl;
+ testTransportEventUpdateHeader.frameData = SDLFrameInfoTransportEventUpdate;
+
+ testStartServiceACKHeader = [SDLProtocolHeader headerForVersion:5];
+ testStartServiceACKHeader.frameType = SDLFrameTypeControl;
+ testStartServiceACKHeader.serviceType = SDLServiceTypeRPC;
+ testStartServiceACKHeader.frameData = SDLFrameInfoStartServiceACK;
+ });
+
+ context(@"and if TCP configuration is valid", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"fd12:3456:789a::1";
+ testTcpPort = 5678;
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+
+ testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports];
+ testStartServiceACKMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testStartServiceACKHeader andPayload:testStartServiceACKPayload.data];
+ });
+
+ it(@"should configure its properties and immediately transition to Connecting state", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
+
+ expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionTCP));
+ NSArray<SDLTransportClassBox *> *expectedTransportsForAudioService = @[@(SDLTransportClassSecondary)];
+ expect(manager.transportsForAudioService).to(equal(expectedTransportsForAudioService));
+ NSArray<SDLTransportClassBox *> *expectedTransportsForVideoService = @[@(SDLTransportClassSecondary)];
+ expect(manager.transportsForVideoService).to(equal(expectedTransportsForVideoService));
+ expect(manager.ipAddress).to(equal(testTcpIpAddress));
+ expect(manager.tcpPort).to(equal(testTcpPort));
+
+ SDLTCPTransport *secondaryTransport = (SDLTCPTransport *)manager.secondaryTransport;
+ expect(secondaryTransport.hostName).to(equal(testTcpIpAddress));
+ NSString *portNumberString = [NSString stringWithFormat:@"%d", testTcpPort];
+ expect(secondaryTransport.portNumber).to(equal(portNumberString));
+
+ // audio and video services will not start until secondary transport is established
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"and if TCP configuration is invalid", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"";
+ testTcpPort = 5678;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+
+ testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu 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", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+
+ expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionTCP));
+ NSArray<SDLTransportClassBox *> *expectedTransportsForAudioService = @[@(SDLTransportClassSecondary)];
+ expect(manager.transportsForAudioService).to(equal(expectedTransportsForAudioService));
+ NSArray<SDLTransportClassBox *> *expectedTransportsForVideoService = @[@(SDLTransportClassSecondary)];
+ expect(manager.transportsForVideoService).to(equal(expectedTransportsForVideoService));
+ expect(manager.ipAddress).to(equal(testTcpIpAddress));
+ expect(manager.tcpPort).to(equal(testTcpPort));
+
+ expect(manager.secondaryTransport).to(beNil());
+
+ // audio and video services will not start until secondary transport is established
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+ describe(@"when stopped", ^{
+ it(@"should transition to Stopped state", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stop];
+ });
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+
+ describe(@"In Configured state", ^{
+ describe(@"if secondary transport is iAP", ^{
+ beforeEach(^{
+ // in this case we assume the primary transport is TCP
+ testPrimaryProtocol = [[SDLProtocol alloc] init];
+ testPrimaryTransport = [[SDLTCPTransport alloc] init];
+ testPrimaryProtocol.transport = testPrimaryTransport;
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+
+ manager.secondaryTransportType = SDLTransportSelectionIAP;
+ });
+
+ it(@"should transition to Connecting state", ^{
+ // setToState cannot be used here, as the method will set the state after calling didEnterStateConfigured
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine transitionToState:SDLSecondaryTransportStateConfigured];
+ });
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ describe(@"if secondary transport is TCP", ^{
+ beforeEach(^{
+ testPrimaryProtocol = [[SDLProtocol alloc] init];
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol.transport = testPrimaryTransport;
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+
+ manager.secondaryTransportType = SDLTransportSelectionTCP;
+ manager.ipAddress = nil;
+ manager.tcpPort = TCPPortUnspecified;
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine transitionToState:SDLSecondaryTransportStateConfigured];
+ });
+ });
+
+ describe(@"and Transport Event Update is not received", ^{
+ it(@"should stay in Configured state", ^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ describe(@"and Transport Event Update is received", ^{
+ __block SDLProtocolHeader *testTransportEventUpdateHeader = nil;
+ __block SDLProtocolMessage *testTransportEventUpdateMessage = nil;
+ __block SDLControlFramePayloadTransportEventUpdate *testTransportEventUpdatePayload = nil;
+ __block NSString *testTcpIpAddress = nil;
+ __block int32_t testTcpPort = TCPPortUnspecified;
+
+ beforeEach(^{
+ testTransportEventUpdateHeader = [SDLProtocolHeader headerForVersion:5];
+ testTransportEventUpdateHeader.frameType = SDLFrameTypeControl;
+ testTransportEventUpdateHeader.serviceType = SDLServiceTypeControl;
+ testTransportEventUpdateHeader.frameData = SDLFrameInfoTransportEventUpdate;
+ testTcpIpAddress = @"10.20.30.40";
+ testTcpPort = 22222;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should transition to Connecting state", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+ describe(@"when stopped", ^{
+ beforeEach(^{
+ testPrimaryProtocol = [[SDLProtocol alloc] init];
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol.transport = testPrimaryTransport;
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ [manager.stateMachine transitionToState:SDLSecondaryTransportStateConfigured];
+ });
+ });
+
+ it(@"should transition to Stopped state", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stop];
+ });
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+
+ describe(@"In Connecting state", ^{
+ __block SDLProtocol *secondaryProtocol = nil;
+ __block id testSecondaryProtocolMock = nil;
+
+ beforeEach(^{
+ secondaryProtocol = [[SDLProtocol alloc] init];
+ testSecondaryProtocolMock = OCMPartialMock(secondaryProtocol);
+
+ testPrimaryProtocol = [[SDLProtocol alloc] init];
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol.transport = testPrimaryTransport;
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+
+ [secondaryProtocol.protocolDelegateTable addObject:manager];
+ manager.secondaryProtocol = secondaryProtocol;
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConnecting fromOldState:nil callEnterTransition:NO];
+ });
+ });
+
+ describe(@"when transport is opened", ^{
+ it(@"should send out Register Secondary Transport frame", ^{
+ OCMExpect([testSecondaryProtocolMock registerSecondaryTransport]);
+
+ [testSecondaryProtocolMock onProtocolOpened];
+ [NSThread sleepForTimeInterval:0.1];
+
+ OCMVerifyAll(testSecondaryProtocolMock);
+ OCMVerifyAll(testStreamingProtocolDelegate);
+
+ // Note: cannot test the timeout scenario since the timer fires on main thread
+ });
+
+ describe(@"and Register Secondary Transport ACK is received", ^{
+ __block SDLProtocolHeader *testRegisterSecondaryTransportAckHeader = nil;
+ __block SDLProtocolMessage *testRegisterSecondaryTransportAckMessage = nil;
+
+ beforeEach(^{
+ // assume audio and video services are allowed only on secondary transport
+ manager.transportsForAudioService = @[@(SDLTransportClassSecondary)];
+ manager.transportsForVideoService = @[@(SDLTransportClassSecondary)];
+ manager.streamingServiceTransportMap[@(SDLServiceTypeAudio)] = @(SDLTransportClassInvalid);
+ manager.streamingServiceTransportMap[@(SDLServiceTypeVideo)] = @(SDLTransportClassInvalid);
+
+ testRegisterSecondaryTransportAckHeader = [SDLProtocolHeader headerForVersion:5];
+ testRegisterSecondaryTransportAckHeader.frameType = SDLFrameTypeControl;
+ testRegisterSecondaryTransportAckHeader.serviceType = SDLServiceTypeControl;
+ testRegisterSecondaryTransportAckHeader.frameData = SDLFrameInfoRegisterSecondaryTransportACK;
+
+ testRegisterSecondaryTransportAckMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testRegisterSecondaryTransportAckHeader andPayload:nil];
+ });
+
+ it(@"should transition to Registered state", ^{
+ OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:secondaryProtocol]);
+ OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:secondaryProtocol]);
+
+ [testSecondaryProtocolMock handleBytesFromTransport:testRegisterSecondaryTransportAckMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateRegistered));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ describe(@"and Register Secondary Transport NACK is received", ^{
+ __block SDLProtocolHeader *testRegisterSecondaryTransportNakHeader = nil;
+ __block SDLProtocolMessage *testRegisterSecondaryTransportNakMessage = nil;
+ __block SDLControlFramePayloadRegisterSecondaryTransportNak *testRegisterSecondaryTransportPayload = nil;
+ __block NSString *testRegisterFailedReason = @"Unknown";
+
+ beforeEach(^{
+ testRegisterSecondaryTransportNakHeader = [SDLProtocolHeader headerForVersion:5];
+ testRegisterSecondaryTransportNakHeader.frameType = SDLFrameTypeControl;
+ testRegisterSecondaryTransportNakHeader.serviceType = SDLServiceTypeControl;
+ testRegisterSecondaryTransportNakHeader.frameData = SDLFrameInfoRegisterSecondaryTransportNACK;
+
+ testRegisterSecondaryTransportPayload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithReason:testRegisterFailedReason];
+ testRegisterSecondaryTransportNakMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testRegisterSecondaryTransportNakHeader andPayload:testRegisterSecondaryTransportPayload.data];
+ });
+
+ it(@"should transition to Reconnecting state", ^{
+ [testSecondaryProtocolMock handleBytesFromTransport:testRegisterSecondaryTransportNakMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+ describe(@"when transport is closed", ^{
+ it(@"should transition to Reconnecting state", ^{
+ [testSecondaryProtocolMock onProtocolClosed];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ describe(@"when Transport Event Update is received", ^{
+ __block SDLProtocolHeader *testTransportEventUpdateHeader = nil;
+ __block SDLProtocolMessage *testTransportEventUpdateMessage = nil;
+ __block SDLControlFramePayloadTransportEventUpdate *testTransportEventUpdatePayload = nil;
+ __block NSString *testTcpIpAddress = nil;
+ __block int32_t testTcpPort = TCPPortUnspecified;
+
+ beforeEach(^{
+ manager.secondaryTransportType = SDLTransportSelectionTCP;
+ manager.ipAddress = @"192.168.1.1";
+ manager.tcpPort = 12345;
+
+ testTransportEventUpdateHeader = [SDLProtocolHeader headerForVersion:5];
+ testTransportEventUpdateHeader.frameType = SDLFrameTypeControl;
+ testTransportEventUpdateHeader.serviceType = SDLServiceTypeControl;
+ testTransportEventUpdateHeader.frameData = SDLFrameInfoTransportEventUpdate;
+ });
+
+ context(@"with same IP address and port number", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"192.168.1.1";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should ignore the frame and stay in Connecting state", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"with different IP address", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"172.16.12.34";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should transition to Configured state, then transition to Connecting state again", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"with invalid IP address", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should transition to Configured state", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ });
+
+ describe(@"when stopped", ^{
+ it(@"should transition to Stopped state", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stop];
+ });
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+
+ describe(@"In Registered state", ^{
+ __block SDLProtocol *secondaryProtocol = nil;
+ __block id testSecondaryProtocolMock = nil;
+
+ beforeEach(^{
+ secondaryProtocol = [[SDLProtocol alloc] init];
+ testSecondaryProtocolMock = OCMPartialMock(secondaryProtocol);
+
+ testPrimaryProtocol = [[SDLProtocol alloc] init];
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol.transport = testPrimaryTransport;
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+
+ [secondaryProtocol.protocolDelegateTable addObject:manager];
+ manager.secondaryProtocol = secondaryProtocol;
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO];
+ });
+ });
+
+ describe(@"when Transport Event Update is received", ^{
+ __block SDLProtocolHeader *testTransportEventUpdateHeader = nil;
+ __block SDLProtocolMessage *testTransportEventUpdateMessage = nil;
+ __block SDLControlFramePayloadTransportEventUpdate *testTransportEventUpdatePayload = nil;
+ __block NSString *testTcpIpAddress = nil;
+ __block int32_t testTcpPort = TCPPortUnspecified;
+
+ beforeEach(^{
+ // assume audio and video services are allowed only on secondary transport
+ manager.transportsForAudioService = @[@(SDLTransportClassSecondary)];
+ manager.transportsForVideoService = @[@(SDLTransportClassSecondary)];
+ manager.streamingServiceTransportMap[@(SDLServiceTypeAudio)] = @(SDLTransportClassSecondary);
+ manager.streamingServiceTransportMap[@(SDLServiceTypeVideo)] = @(SDLTransportClassSecondary);
+
+ manager.secondaryTransportType = SDLTransportSelectionTCP;
+ manager.ipAddress = @"192.168.1.1";
+ manager.tcpPort = 12345;
+
+ testTransportEventUpdateHeader = [SDLProtocolHeader headerForVersion:5];
+ testTransportEventUpdateHeader.frameType = SDLFrameTypeControl;
+ testTransportEventUpdateHeader.serviceType = SDLServiceTypeControl;
+ testTransportEventUpdateHeader.frameData = SDLFrameInfoTransportEventUpdate;
+ });
+
+ context(@"with same IP address and port number", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"192.168.1.1";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should ignore the frame and stay in Registered state", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateRegistered));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"with different IP address", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"172.16.12.34";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should transition to Configured state, then transition to Connecting state again", ^{
+ OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+ OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"with invalid IP address", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should transition to Configured state", ^{
+ OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+ OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+ describe(@"when transport is closed", ^{
+ beforeEach(^{
+ // assume audio and video services are allowed only on secondary transport
+ manager.transportsForAudioService = @[@(SDLTransportClassSecondary)];
+ manager.transportsForVideoService = @[@(SDLTransportClassSecondary)];
+ manager.streamingServiceTransportMap[@(SDLServiceTypeAudio)] = @(SDLTransportClassSecondary);
+ manager.streamingServiceTransportMap[@(SDLServiceTypeVideo)] = @(SDLTransportClassSecondary);
+ });
+
+ it(@"should transition to Reconnecting state", ^{
+ OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+ OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+
+ [testSecondaryProtocolMock onProtocolClosed];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ describe(@"when stopped", ^{
+ beforeEach(^{
+ // assume audio and video services are allowed only on secondary transport
+ manager.transportsForAudioService = @[@(SDLTransportClassSecondary)];
+ manager.transportsForVideoService = @[@(SDLTransportClassSecondary)];
+ manager.streamingServiceTransportMap[@(SDLServiceTypeAudio)] = @(SDLTransportClassSecondary);
+ manager.streamingServiceTransportMap[@(SDLServiceTypeVideo)] = @(SDLTransportClassSecondary);
+ });
+
+ it(@"should transition to Stopped state", ^{
+ OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+ OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stop];
+ });
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+
+ describe(@"In Reconnecting state", ^{
+ beforeEach(^{
+ testPrimaryProtocol = [[SDLProtocol alloc] init];
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol.transport = testPrimaryTransport;
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ [manager.stateMachine setToState:SDLSecondaryTransportStateReconnecting fromOldState:nil callEnterTransition:NO];
+ });
+ });
+
+ describe(@"when reconnecting timeout is fired", ^{
+ beforeEach(^{
+ manager.secondaryTransportType = SDLTransportSelectionTCP;
+ manager.ipAddress = @"";
+ manager.tcpPort = 12345;
+ });
+
+ it(@"should transition to Configured state", ^{
+ // call didEnterStateReconnecting
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateReconnecting fromOldState:nil callEnterTransition:YES];
+ });
+
+ // wait for the timer
+ float waitTime = RetryConnectionDelay + 5.0;
+ NSLog(@"Please wait for reconnection timeout ... (for %f seconds)", waitTime);
+ [NSThread sleepForTimeInterval:waitTime];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ describe(@"when Transport Event Update is received", ^{
+ __block SDLProtocolHeader *testTransportEventUpdateHeader = nil;
+ __block SDLProtocolMessage *testTransportEventUpdateMessage = nil;
+ __block SDLControlFramePayloadTransportEventUpdate *testTransportEventUpdatePayload = nil;
+ __block NSString *testTcpIpAddress = nil;
+ __block int32_t testTcpPort = TCPPortUnspecified;
+
+ beforeEach(^{
+ manager.secondaryTransportType = SDLTransportSelectionTCP;
+ manager.ipAddress = @"192.168.1.1";
+ manager.tcpPort = 12345;
+
+ testTransportEventUpdateHeader = [SDLProtocolHeader headerForVersion:5];
+ testTransportEventUpdateHeader.frameType = SDLFrameTypeControl;
+ testTransportEventUpdateHeader.serviceType = SDLServiceTypeControl;
+ testTransportEventUpdateHeader.frameData = SDLFrameInfoTransportEventUpdate;
+ });
+
+ context(@"with same IP address and port number", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"192.168.1.1";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should ignore the frame and stay in Reconnecting state", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"with different IP address", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"172.16.12.34";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should transition to Configured state before timeout, then transition to Connecting state again", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+
+ context(@"with invalid IP address", ^{
+ beforeEach(^{
+ testTcpIpAddress = @"";
+ testTcpPort = 12345;
+
+ testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
+ testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
+ });
+
+ it(@"should transition to Configured state before timeout", ^{
+ [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
+ [NSThread sleepForTimeInterval:0.1];
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+
+ describe(@"when stopped", ^{
+ it(@"should transition to Stopped state", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stop];
+ });
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ OCMVerifyAll(testStreamingProtocolDelegate);
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAudioStreamingIndicatorSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAudioStreamingIndicatorSpec.m
new file mode 100644
index 000000000..17dc3ef67
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAudioStreamingIndicatorSpec.m
@@ -0,0 +1,24 @@
+//
+// SDLAudioStreamingIndicatorSpec.m
+// SmartDeviceLink
+
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLAudioStreamingIndicator.h"
+
+QuickSpecBegin(SDLAudioStreamingIndicatorStatusSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLAudioStreamingIndicatorPlayPause).to(equal(@"PLAY_PAUSE"));
+ expect(SDLAudioStreamingIndicatorPlay).to(equal(@"PLAY"));
+ expect(SDLAudioStreamingIndicatorPause).to(equal(@"PAUSE"));
+ expect(SDLAudioStreamingIndicatorStop).to(equal(@"STOP"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLDisplayModeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLDisplayModeSpec.m
new file mode 100644
index 000000000..a4533820e
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLDisplayModeSpec.m
@@ -0,0 +1,23 @@
+//
+// SDLDisplayModeSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLDisplayMode.h"
+
+QuickSpecBegin(SDLDisplayModeSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLDisplayModeDay).to(equal(@"DAY"));
+ expect(SDLDisplayModeNight).to(equal(@"NIGHT"));
+ expect(SDLDisplayModeAuto).to(equal(@"AUTO"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLDistanceUnitSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLDistanceUnitSpec.m
new file mode 100644
index 000000000..87706d91d
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLDistanceUnitSpec.m
@@ -0,0 +1,22 @@
+//
+// SDLDistanceUnitSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLDistanceUnit.h"
+
+QuickSpecBegin(SDLDistanceUnitSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLDistanceUnitMiles).to(equal(@"MILES"));
+ expect(SDLDistanceUnitKilometers).to(equal(@"KILOMETERS"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLElectronicParkBrakeStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLElectronicParkBrakeStatusSpec.m
new file mode 100644
index 000000000..4dde85088
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLElectronicParkBrakeStatusSpec.m
@@ -0,0 +1,18 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLElectronicParkBrakeStatus.h"
+
+QuickSpecBegin(SDLElectronicParkBrakeStatusSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLElectronicParkBrakeStatusClosed).to(equal(@"CLOSED"));
+ expect(SDLElectronicParkBrakeStatusTransition).to(equal(@"TRANSITION"));
+ expect(SDLElectronicParkBrakeStatusOpen).to(equal(@"OPEN"));
+ expect(SDLElectronicParkBrakeStatusDriveActive).to(equal(@"DRIVE_ACTIVE"));
+ expect(SDLElectronicParkBrakeStatusFault).to(equal(@"FAULT"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLFuelTypeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLFuelTypeSpec.m
new file mode 100644
index 000000000..7e067ac63
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLFuelTypeSpec.m
@@ -0,0 +1,29 @@
+//
+// SDLFuelTypeSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Nicole on 6/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLFuelType.h"
+
+QuickSpecBegin(SDLFuelTypeSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLFuelTypeGasoline).to(equal(@"GASOLINE"));
+ expect(SDLFuelTypeDiesel).to(equal(@"DIESEL"));
+ expect(SDLFuelTypeCNG).to(equal(@"CNG"));
+ expect(SDLFuelTypeLPG).to(equal(@"LPG"));
+ expect(SDLFuelTypeHydrogen).to(equal(@"HYDROGEN"));
+ expect(SDLFuelTypeBattery).to(equal(@"BATTERY"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLImageFieldNameSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLImageFieldNameSpec.m
index f4aecd48b..bf3e9f82f 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLImageFieldNameSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLImageFieldNameSpec.m
@@ -23,6 +23,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLImageFieldNameCommandIcon).to(equal(@"cmdIcon"));
expect(SDLImageFieldNameAppIcon).to(equal(@"appIcon"));
expect(SDLImageFieldNameGraphic).to(equal(@"graphic"));
+ expect(SDLImageFieldNameSecondaryGraphic).to(equal(@"secondaryGraphic"));
expect(SDLImageFieldNameShowConstantTBTIcon).to(equal(@"showConstantTBTIcon"));
expect(SDLImageFieldNameShowConstantTBTNextTurnIcon).to(equal(@"showConstantTBTNextTurnIcon"));
expect(SDLImageFieldNameLocationImage).to(equal(@"locationImage"));
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightNameSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightNameSpec.m
new file mode 100644
index 000000000..d716b9b88
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightNameSpec.m
@@ -0,0 +1,62 @@
+//
+// SDLLightNameSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLLightName.h"
+
+QuickSpecBegin(SDLLightNameSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLLightNameFrontLeftHighBeam).to(equal(@"FRONT_LEFT_HIGH_BEAM"));
+ expect(SDLLightNameFrontRightHighBeam).to(equal(@"FRONT_RIGHT_HIGH_BEAM"));
+ expect(SDLLightNameFrontLeftLowBeam).to(equal(@"FRONT_LEFT_LOW_BEAM"));
+ expect(SDLLightNameFrontRightLowBeam).to(equal(@"FRONT_RIGHT_LOW_BEAM"));
+ expect(SDLLightNameFrontLeftParkingLight).to(equal(@"FRONT_LEFT_PARKING_LIGHT"));
+ expect(SDLLightNameFrontRightParkingLight).to(equal(@"FRONT_RIGHT_PARKING_LIGHT"));
+ expect(SDLLightNameFrontLeftDaytimeRunningLight).to(equal(@"FRONT_LEFT_DAYTIME_RUNNING_LIGHT"));
+ expect(SDLLightNameFrontRightDaytimeRunningLight).to(equal(@"FRONT_RIGHT_DAYTIME_RUNNING_LIGHT"));
+ expect(SDLLightNameFrontLeftTurnLight).to(equal(@"FRONT_LEFT_TURN_LIGHT"));
+ expect(SDLLightNameFrontRightTurnLight).to(equal(@"FRONT_RIGHT_TURN_LIGHT"));
+ expect(SDLLightNameRearLeftFogLight).to(equal(@"REAR_LEFT_FOG_LIGHT"));
+ expect(SDLLightNameRearRightFogLight).to(equal(@"REAR_RIGHT_FOG_LIGHT"));
+ expect(SDLLightNameRearLeftTailLight).to(equal(@"REAR_LEFT_TAIL_LIGHT"));
+ expect(SDLLightNameRearRightTailLight).to(equal(@"REAR_RIGHT_TAIL_LIGHT"));
+ expect(SDLLightNameRearLeftBrakeLight).to(equal(@"REAR_LEFT_BRAKE_LIGHT"));
+ expect(SDLLightNameRearRightBrakeLight).to(equal(@"REAR_RIGHT_BRAKE_LIGHT"));
+ expect(SDLLightNameRearLeftTurnLight).to(equal(@"REAR_LEFT_TURN_LIGHT"));
+ expect(SDLLightNameRearRightTurnLight).to(equal(@"REAR_RIGHT_TURN_LIGHT"));
+ expect(SDLLightNameRearRegistrationPlateLight).to(equal(@"REAR_REGISTRATION_PLATE_LIGHT"));
+ expect(SDLLightNameHighBeams).to(equal(@"HIGH_BEAMS"));
+ expect(SDLLightNameLowBeams).to(equal(@"LOW_BEAMS"));
+ expect(SDLLightNameFogLights).to(equal(@"FOG_LIGHTS"));
+ expect(SDLLightNameRunningLights).to(equal(@"RUNNING_LIGHTS"));
+ expect(SDLLightNameParkingLights).to(equal(@"PARKING_LIGHTS"));
+ expect(SDLLightNameBrakeLights).to(equal(@"BRAKE_LIGHTS"));
+ expect(SDLLightNameRearReversingLights).to(equal(@"REAR_REVERSING_LIGHTS"));
+ expect(SDLLightNameSideMarkerLights).to(equal(@"SIDE_MARKER_LIGHTS"));
+ expect(SDLLightNameLeftTurnLights).to(equal(@"LEFT_TURN_LIGHTS"));
+ expect(SDLLightNameRightTurnLights).to(equal(@"RIGHT_TURN_LIGHTS"));
+ expect(SDLLightNameHazardLights).to(equal(@"HAZARD_LIGHTS"));
+ expect(SDLLightNameAmbientLights).to(equal(@"AMBIENT_LIGHTS"));
+ expect(SDLLightNameOverHeadLights).to(equal(@"OVERHEAD_LIGHTS"));
+ expect(SDLLightNameReadingLights).to(equal(@"READING_LIGHTS"));
+ expect(SDLLightNameTrunkLights).to(equal(@"TRUNK_LIGHTS"));
+ expect(SDLLightNameExteriorFrontLights).to(equal(@"EXTERIOR_FRONT_LIGHTS"));
+ expect(SDLLightNameExteriorRearLights).to(equal(@"EXTERIOR_REAR_LIGHTS"));
+ expect(SDLLightNameExteriorLeftLights).to(equal(@"EXTERIOR_LEFT_LIGHTS"));
+ expect(SDLLightNameExteriorRightLights).to(equal(@"EXTERIOR_RIGHT_LIGHTS"));
+
+ });
+});
+
+QuickSpecEnd
+
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightStatusSpec.m
new file mode 100644
index 000000000..0f66a0d30
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightStatusSpec.m
@@ -0,0 +1,23 @@
+//
+// SDLLightStatusSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLLightStatus.h"
+
+QuickSpecBegin(SDLLightStatusSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLLightStatusOn).to(equal(@"ON"));
+ expect(SDLLightStatusOFF).to(equal(@"OFF"));
+
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageCushionSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageCushionSpec.m
new file mode 100644
index 000000000..da8d21526
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageCushionSpec.m
@@ -0,0 +1,25 @@
+//
+// SDLMassageCushionSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLMassageCushion.h"
+
+QuickSpecBegin(SDLMassageCushionSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLMassageCushionTopLumbar).to(equal(@"TOP_LUMBAR"));
+ expect(SDLMassageCushionMiddleLumbar).to(equal(@"MIDDLE_LUMBAR"));
+ expect(SDLMassageCushionBottomLumbar).to(equal(@"BOTTOM_LUMBAR"));
+ expect(SDLMassageCushionBackBolsters).to(equal(@"BACK_BOLSTERS"));
+ expect(SDLMassageCushionSeatBolsters).to(equal(@"SEAT_BOLSTERS"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageModeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageModeSpec.m
new file mode 100644
index 000000000..b4cc8dcc8
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageModeSpec.m
@@ -0,0 +1,23 @@
+//
+// SDLMassageModeSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLMassageMode.h"
+
+QuickSpecBegin(SDLMassageModeSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLMassageModeOff).to(equal(@"OFF"));
+ expect(SDLMassageModeLow).to(equal(@"LOW"));
+ expect(SDLMassageModeHigh).to(equal(@"HIGH"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageZoneSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageZoneSpec.m
new file mode 100644
index 000000000..71c05424b
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLMassageZoneSpec.m
@@ -0,0 +1,22 @@
+//
+// SDLMassageZoneSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLMassageZone.h"
+
+QuickSpecBegin(SDLMassageZoneSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLMassageZoneLumbar).to(equal(@"LUMBAR"));
+ expect(SDLMassageZoneSeatCushion).to(equal(@"SEAT_CUSHION"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLModuleTypeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLModuleTypeSpec.m
new file mode 100644
index 000000000..09fdd5006
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLModuleTypeSpec.m
@@ -0,0 +1,23 @@
+//
+// SDLModuleTypeSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLModuleType.h"
+
+QuickSpecBegin(SDLModuleTypeSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLModuleTypeRadio).to(equal(@"RADIO"));
+ expect(SDLModuleTypeClimate).to(equal(@"CLIMATE"));
+ expect(SDLModuleTypeSeat).to(equal(@"SEAT"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPrimaryAudioSource.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPrimaryAudioSource.m
index 712dfd8d1..ecc55a85b 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPrimaryAudioSource.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPrimaryAudioSource.m
@@ -21,6 +21,11 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLPrimaryAudioSourceLineIn).to(equal(@"LINE_IN"));
expect(SDLPrimaryAudioSourceIpod).to(equal(@"IPOD"));
expect(SDLPrimaryAudioSourceMobileApp).to(equal(@"MOBILE_APP"));
+ expect(SDLPrimaryAudioSourceCD).to(equal(@"CD"));
+ expect(SDLPrimaryAudioSourceAM).to(equal(@"AM"));
+ expect(SDLPrimaryAudioSourceFM).to(equal(@"FM"));
+ expect(SDLPrimaryAudioSourceXM).to(equal(@"XM"));
+ expect(SDLPrimaryAudioSourceDAB).to(equal(@"DAB"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLRequestTypeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLRequestTypeSpec.m
index 9b6b74279..3ee2f7a15 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLRequestTypeSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLRequestTypeSpec.m
@@ -34,6 +34,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLRequestTypeEmergency).to(equal(@"EMERGENCY"));
expect(SDLRequestTypeMedia).to(equal(@"MEDIA"));
expect(SDLRequestTypeFOTA).to(equal(@"FOTA"));
+ expect(SDLRequestTypeOEMSpecific).to(equal(@"OEM_SPECIFIC"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLResultSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLResultSpec.m
index 239140d19..c90ece5d3 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLResultSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLResultSpec.m
@@ -42,6 +42,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLResultVehicleDataNotAllowed).to(equal(@"VEHICLE_DATA_NOT_ALLOWED"));
expect(SDLResultFileNotFound).to(equal(@"FILE_NOT_FOUND"));
expect(SDLResultCancelRoute).to(equal(@"CANCEL_ROUTE"));
+ expect(SDLResultCorruptedData).to(equal(@"CORRUPTED_DATA"));
expect(SDLResultTruncatedData).to(equal(@"TRUNCATED_DATA"));
expect(SDLResultSaved).to(equal(@"SAVED"));
expect(SDLResultInvalidCertificate).to(equal(@"INVALID_CERT"));
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSpeechCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSpeechCapabilitiesSpec.m
index b21c5b578..19c0f1182 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSpeechCapabilitiesSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSpeechCapabilitiesSpec.m
@@ -19,6 +19,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLSpeechCapabilitiesLHPlusPhonemes).to(equal(@"LHPLUS_PHONEMES"));
expect(SDLSpeechCapabilitiesPrerecorded).to(equal(@"PRE_RECORDED"));
expect(SDLSpeechCapabilitiesSilence).to(equal(@"SILENCE"));
+ expect(SDLSpeechCapabilitiesFile).to(equal(@"FILE"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLStaticIconNameSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLStaticIconNameSpec.m
new file mode 100644
index 000000000..786ecc7c6
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLStaticIconNameSpec.m
@@ -0,0 +1,200 @@
+//
+// SDLStaticIconNameSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Nicole on 7/23/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLStaticIconName.h"
+
+QuickSpecBegin(SDLStaticIconNameSpec)
+
+describe(@"Individual Enum Value Tests", ^{
+ it(@"Should match internal values", ^{
+ expect(SDLStaticIconNameAcceptCall).to(equal(@"0x29"));
+ expect(SDLStaticIconNameAddWaypoint).to(equal(@"0x1B"));
+ expect(SDLStaticIconNameAlbum).to(equal(@"0x21"));
+ expect(SDLStaticIconNameAmbientLighting).to(equal(@"0x3d"));
+ expect(SDLStaticIconNameArrowNorth).to(equal(@"0x40"));
+ expect(SDLStaticIconNameAudioMute).to(equal(@"0x12"));
+ expect(SDLStaticIconNameAudiobookEpisode).to(equal(@"0x83"));
+ expect(SDLStaticIconNameAudiobookNarrator).to(equal(@"0x82"));
+ expect(SDLStaticIconNameAuxillaryAudio).to(equal(@"0x45"));
+ expect(SDLStaticIconNameBack).to(equal(@"0x86"));
+ expect(SDLStaticIconNameBatteryCapacity0Of5).to(equal(@"0xF7"));
+ expect(SDLStaticIconNameBatteryCapacity1Of5).to(equal(@"0xF8"));
+ expect(SDLStaticIconNameBatteryCapacity2Of5).to(equal(@"0xF9"));
+ expect(SDLStaticIconNameBatteryCapacity3Of5).to(equal(@"0xFA"));
+ expect(SDLStaticIconNameBatteryCapacity4Of5).to(equal(@"0xf6"));
+ expect(SDLStaticIconNameBatteryCapacity5Of5).to(equal(@"0xFB"));
+ expect(SDLStaticIconNameBluetoothAudioSource).to(equal(@"0x09"));
+ expect(SDLStaticIconNameBluetooth1).to(equal(@"0xcc"));
+ expect(SDLStaticIconNameBluetooth2).to(equal(@"0xCD"));
+ expect(SDLStaticIconNameBrowse).to(equal(@"0x77"));
+ expect(SDLStaticIconNameCellPhoneInRoamingMode).to(equal(@"0x66"));
+ expect(SDLStaticIconNameCellServiceSignalStrength0Of5Bars).to(equal(@"0x67"));
+ expect(SDLStaticIconNameCellServiceSignalStrength1Of5Bars).to(equal(@"0x68"));
+ expect(SDLStaticIconNameCellServiceSignalStrength2Of5Bars).to(equal(@"0x69"));
+ expect(SDLStaticIconNameCellServiceSignalStrength3Of5Bars).to(equal(@"0x6A"));
+ expect(SDLStaticIconNameCellServiceSignalStrength4Of5Bars).to(equal(@"0x6B"));
+ expect(SDLStaticIconNameCellServiceSignalStrength5Of5Bars).to(equal(@"0xd3"));
+ expect(SDLStaticIconNameChangeLaneLeft).to(equal(@"0xc3"));
+ expect(SDLStaticIconNameChangeLaneRight).to(equal(@"0xc1"));
+ expect(SDLStaticIconNameCheckBoxChecked).to(equal(@"0x27"));
+ expect(SDLStaticIconNameCheckBoxUnchecked).to(equal(@"0x28"));
+ expect(SDLStaticIconNameClimate).to(equal(@"0xd1"));
+ expect(SDLStaticIconNameClock).to(equal(@"0xfc"));
+ expect(SDLStaticIconNameCompose).to(equal(@"0x1A"));
+ expect(SDLStaticIconNameContact).to(equal(@"0x5C"));
+ expect(SDLStaticIconNameContinue).to(equal(@"0x42"));
+ expect(SDLStaticIconNameDash).to(equal(@"0x7F"));
+ expect(SDLStaticIconNameDate).to(equal(@"0x87"));
+ expect(SDLStaticIconNameDelete).to(equal(@"0x0F"));
+ expect(SDLStaticIconNameDestination).to(equal(@"0x94"));
+ expect(SDLStaticIconNameDestinationFerryAhead).to(equal(@"0x4D"));
+ expect(SDLStaticIconNameEbookmark).to(equal(@"0x2B"));
+ expect(SDLStaticIconNameEmpty).to(equal(@"0x01"));
+ expect(SDLStaticIconNameEndCall).to(equal(@"0x2C"));
+ expect(SDLStaticIconNameFail).to(equal(@"0xD6"));
+ expect(SDLStaticIconNameFastForward30Secs).to(equal(@"0x08"));
+ expect(SDLStaticIconNameFavoriteHeart).to(equal(@"0x0E"));
+ expect(SDLStaticIconNameFavoriteStar).to(equal(@"0x95"));
+ expect(SDLStaticIconNameFaxNumber).to(equal(@"0x80"));
+ expect(SDLStaticIconNameFilename).to(equal(@"0x50"));
+ expect(SDLStaticIconNameFilter).to(equal(@"0x79"));
+ expect(SDLStaticIconNameFolder).to(equal(@"0x1C"));
+ expect(SDLStaticIconNameFuelPrices).to(equal(@"0xe9"));
+ expect(SDLStaticIconNameFullMap).to(equal(@"0x0c"));
+ expect(SDLStaticIconNameGenericPhoneNumber).to(equal(@"0x53"));
+ expect(SDLStaticIconNameGenre).to(equal(@"0x4E"));
+ expect(SDLStaticIconNameGlobalKeyboard).to(equal(@"0xea"));
+ expect(SDLStaticIconNameHighwayExitInformation).to(equal(@"0xf4"));
+ expect(SDLStaticIconNameHomePhoneNumber).to(equal(@"0x55"));
+ expect(SDLStaticIconNameHyperlink).to(equal(@"0x78"));
+ expect(SDLStaticIconNameID3TagUnknown).to(equal(@"0x51"));
+ expect(SDLStaticIconNameIncomingCalls).to(equal(@"0x57"));
+ expect(SDLStaticIconNameInformation).to(equal(@"0x5d"));
+ expect(SDLStaticIconNameIPodMediaSource).to(equal(@"0x0D"));
+ expect(SDLStaticIconNameJoinCalls).to(equal(@"0x02"));
+ expect(SDLStaticIconNameKeepLeft).to(equal(@"0x46"));
+ expect(SDLStaticIconNameKeepRight).to(equal(@"0x48"));
+ expect(SDLStaticIconNameKey).to(equal(@"0x7D"));
+ expect(SDLStaticIconNameLeft).to(equal(@"0x9f"));
+ expect(SDLStaticIconNameLeftArrow).to(equal(@"0x4B"));
+ expect(SDLStaticIconNameLeftExit).to(equal(@"0xaf"));
+ expect(SDLStaticIconNameLineInAudioSource).to(equal(@"0x06"));
+ expect(SDLStaticIconNameLocked).to(equal(@"0x22"));
+ expect(SDLStaticIconNameMediaControlLeftArrow).to(equal(@"0x17"));
+ expect(SDLStaticIconNameMediaControlRecording).to(equal(@"0x20"));
+ expect(SDLStaticIconNameMediaControlRightArrow).to(equal(@"0x15"));
+ expect(SDLStaticIconNameMediaControlStop).to(equal(@"0x16"));
+ expect(SDLStaticIconNameMicrophone).to(equal(@"0xe8"));
+ expect(SDLStaticIconNameMissedCalls).to(equal(@"0x58"));
+ expect(SDLStaticIconNameMobilePhoneNumber).to(equal(@"0x54"));
+ expect(SDLStaticIconNameMoveDown).to(equal(@"0xE5"));
+ expect(SDLStaticIconNameMoveUp).to(equal(@"0xe4"));
+ expect(SDLStaticIconNameMP3TagArtist).to(equal(@"0x24"));
+ expect(SDLStaticIconNameNavigation).to(equal(@"0x8e"));
+ expect(SDLStaticIconNameNavigationCurrentDirection).to(equal(@"0x0a"));
+ expect(SDLStaticIconNameNegativeRatingThumbsDown).to(equal(@"0x14"));
+ expect(SDLStaticIconNameNew).to(equal(@"0x5E"));
+ expect(SDLStaticIconNameOfficePhoneNumber).to(equal(@"0x56"));
+ expect(SDLStaticIconNameOpened).to(equal(@"0x5F"));
+ expect(SDLStaticIconNameOrigin).to(equal(@"0x96"));
+ expect(SDLStaticIconNameOutgoingCalls).to(equal(@"0x59"));
+ expect(SDLStaticIconNamePause).to(equal(@"0xCF"));
+ expect(SDLStaticIconNamePhoneCall1).to(equal(@"0x1D"));
+ expect(SDLStaticIconNamePhoneCall2).to(equal(@"0x1E"));
+ expect(SDLStaticIconNamePhoneDevice).to(equal(@"0x03"));
+ expect(SDLStaticIconNamePhonebook).to(equal(@"0x81"));
+ expect(SDLStaticIconNamePhoto).to(equal(@"0x88"));
+ expect(SDLStaticIconNamePlay).to(equal(@"0xD0"));
+ expect(SDLStaticIconNamePlaylist).to(equal(@"0x4F"));
+ expect(SDLStaticIconNamePopUp).to(equal(@"0x76"));
+ expect(SDLStaticIconNamePositiveRatingThumbsUp).to(equal(@"0x13"));
+ expect(SDLStaticIconNamePower).to(equal(@"0x5b"));
+ expect(SDLStaticIconNamePrimaryPhone).to(equal(@"0x1F"));
+ expect(SDLStaticIconNameRadioButtonChecked).to(equal(@"0x25"));
+ expect(SDLStaticIconNameRadioButtonUnchecked).to(equal(@"0x26"));
+ expect(SDLStaticIconNameRecentCalls).to(equal(@"0xe7"));
+ expect(SDLStaticIconNameRecentDestinations).to(equal(@"0xf2"));
+ expect(SDLStaticIconNameRedo).to(equal(@"0x19"));
+ expect(SDLStaticIconNameRefresh).to(equal(@"0x97"));
+ expect(SDLStaticIconNameRemoteDiagnosticsCheckEngine).to(equal(@"0x7E"));
+ expect(SDLStaticIconNameRendered911Assist).to(equal(@"0xac"));
+ expect(SDLStaticIconNameRepeat).to(equal(@"0xe6"));
+ expect(SDLStaticIconNameRepeatPlay).to(equal(@"0x73"));
+ expect(SDLStaticIconNameReply).to(equal(@"0x04"));
+ expect(SDLStaticIconNameRewind30Secs).to(equal(@"0x07"));
+ expect(SDLStaticIconNameRight).to(equal(@"0xa3"));
+ expect(SDLStaticIconNameRightExit).to(equal(@"0xb1"));
+ expect(SDLStaticIconNameRingtones).to(equal(@"0x5A"));
+ expect(SDLStaticIconNameRoundaboutLeftHand1).to(equal(@"0xee"));
+ expect(SDLStaticIconNameRoundaboutLeftHand2).to(equal(@"0x8c"));
+ expect(SDLStaticIconNameRoundaboutLeftHand3).to(equal(@"0x84"));
+ expect(SDLStaticIconNameRoundaboutLeftHand4).to(equal(@"0x72"));
+ expect(SDLStaticIconNameRoundaboutLeftHand5).to(equal(@"0x6e"));
+ expect(SDLStaticIconNameRoundaboutLeftHand6).to(equal(@"0x64"));
+ expect(SDLStaticIconNameRoundaboutLeftHand7).to(equal(@"0x60"));
+ expect(SDLStaticIconNameRoundaboutRightHand1).to(equal(@"0x62"));
+ expect(SDLStaticIconNameRoundaboutRightHand2).to(equal(@"0x6c"));
+ expect(SDLStaticIconNameRoundaboutRightHand3).to(equal(@"0x70"));
+ expect(SDLStaticIconNameRoundaboutRightHand4).to(equal(@"0x7a"));
+ expect(SDLStaticIconNameRoundaboutRightHand5).to(equal(@"0x8a"));
+ expect(SDLStaticIconNameRoundaboutRightHand6).to(equal(@"0xec"));
+ expect(SDLStaticIconNameRoundaboutRightHand7).to(equal(@"0xf0"));
+ expect(SDLStaticIconNameRSS).to(equal(@"0x89"));
+ expect(SDLStaticIconNameSettings).to(equal(@"0x49"));
+ expect(SDLStaticIconNameSharpLeft).to(equal(@"0xa5"));
+ expect(SDLStaticIconNameSharpRight).to(equal(@"0xa7"));
+ expect(SDLStaticIconNameShow).to(equal(@"0xe1"));
+ expect(SDLStaticIconNameShufflePlay).to(equal(@"0x74"));
+ expect(SDLStaticIconNameSkiPlaces).to(equal(@"0xab"));
+ expect(SDLStaticIconNameSlightLeft).to(equal(@"0x9d"));
+ expect(SDLStaticIconNameSlightRight).to(equal(@"0xa1"));
+ expect(SDLStaticIconNameSmartphone).to(equal(@"0x05"));
+ expect(SDLStaticIconNameSortList).to(equal(@"0x7B"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber0).to(equal(@"0xE0"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber1).to(equal(@"0xD7"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber2).to(equal(@"0xD8"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber3).to(equal(@"0xD9"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber4).to(equal(@"0xDA"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber5).to(equal(@"0xDB"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber6).to(equal(@"0xDC"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber7).to(equal(@"0xDD"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber8).to(equal(@"0xDE"));
+ expect(SDLStaticIconNameSpeedDialNumbersNumber9).to(equal(@"0xDF"));
+ expect(SDLStaticIconNameSuccess).to(equal(@"0xD5"));
+ expect(SDLStaticIconNameTrackTitle).to(equal(@"0x4C"));
+ expect(SDLStaticIconNameTrafficReport).to(equal(@"0x2A"));
+ expect(SDLStaticIconNameTurnList).to(equal(@"0x10"));
+ expect(SDLStaticIconNameUTurnLeftTraffic).to(equal(@"0xad"));
+ expect(SDLStaticIconNameUTurnRightTraffic).to(equal(@"0xa9"));
+ expect(SDLStaticIconNameUndo).to(equal(@"0x18"));
+ expect(SDLStaticIconNameUnlocked).to(equal(@"0x23"));
+ expect(SDLStaticIconNameUSBMediaAudioSource).to(equal(@"0x0B"));
+ expect(SDLStaticIconNameVoiceControlScrollbarListItemNo1).to(equal(@"0xC7"));
+ expect(SDLStaticIconNameVoiceControlScrollbarListItemNo2).to(equal(@"0xC8"));
+ expect(SDLStaticIconNameVoiceControlScrollbarListItemNo3).to(equal(@"0xC9"));
+ expect(SDLStaticIconNameVoiceControlScrollbarListItemNo4).to(equal(@"0xCA"));
+ expect(SDLStaticIconNameVoiceRecognitionFailed).to(equal(@"0x90"));
+ expect(SDLStaticIconNameVoiceRecognitionPause).to(equal(@"0x92"));
+ expect(SDLStaticIconNameVoiceRecognitionSuccessful).to(equal(@"0x8F"));
+ expect(SDLStaticIconNameVoiceRecognitionSystemActive).to(equal(@"0x11"));
+ expect(SDLStaticIconNameVoiceRecognitionSystemListening).to(equal(@"0x91"));
+ expect(SDLStaticIconNameVoiceRecognitionTryAgain).to(equal(@"0x93"));
+ expect(SDLStaticIconNameWarning).to(equal(@"0xfe"));
+ expect(SDLStaticIconNameWeather).to(equal(@"0xeb"));
+ expect(SDLStaticIconNameWifiFull).to(equal(@"0x43"));
+ expect(SDLStaticIconNameZoomIn).to(equal(@"0x98"));
+ expect(SDLStaticIconNameZoomOut).to(equal(@"0x9a"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSupportedSeatSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSupportedSeatSpec.m
new file mode 100644
index 000000000..d01bda43f
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSupportedSeatSpec.m
@@ -0,0 +1,22 @@
+//
+// SDLSupportedSeatSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLSupportedSeat.h"
+
+QuickSpecBegin(SDLSupportedSeatSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLSupportedSeatDriver).to(equal(@"DRIVER"));
+ expect(SDLSupportedSeatFrontPassenger).to(equal(@"FRONT_PASSENGER"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLTurnSignalSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLTurnSignalSpec.m
new file mode 100644
index 000000000..6be1c9439
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLTurnSignalSpec.m
@@ -0,0 +1,27 @@
+//
+// SDLTurnSignalSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Nicole on 7/19/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLTurnSignal.h"
+
+QuickSpecBegin(SDLTurnSignalSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLTurnSignalOff).to(equal(@"OFF"));
+ expect(SDLTurnSignalLeft).to(equal(@"LEFT"));
+ expect(SDLTurnSignalRight).to(equal(@"RIGHT"));
+ expect(SDLTurnSignalBoth).to(equal(@"BOTH"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m
index 2e6df2174..2d9812475 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m
@@ -20,6 +20,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLVehicleDataTypeFuelLevel).to(equal(@"VEHICLEDATA_FUELLEVEL"));
expect(SDLVehicleDataTypeFuelLevelState).to(equal(@"VEHICLEDATA_FUELLEVEL_STATE"));
expect(SDLVehicleDataTypeFuelConsumption).to(equal(@"VEHICLEDATA_FUELCONSUMPTION"));
+ expect(SDLVehicleDataTypeFuelRange).to(equal(@"VEHICLEDATA_FUELRANGE"));
expect(SDLVehicleDataTypeExternalTemperature).to(equal(@"VEHICLEDATA_EXTERNTEMP"));
expect(SDLVehicleDataTypeVIN).to(equal(@"VEHICLEDATA_VIN"));
expect(SDLVehicleDataTypePRNDL).to(equal(@"VEHICLEDATA_PRNDL"));
@@ -37,9 +38,12 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLVehicleDataTypeWiperStatus).to(equal(@"VEHICLEDATA_WIPERSTATUS"));
expect(SDLVehicleDataTypeHeadlampStatus).to(equal(@"VEHICLEDATA_HEADLAMPSTATUS"));
expect(SDLVehicleDataTypeBatteryVoltage).to(equal(@"VEHICLEDATA_BATTVOLTAGE"));
+ expect(SDLVehicleDataTypeEngineOilLife).to(equal(@"VEHICLEDATA_ENGINEOILLIFE"));
expect(SDLVehicleDataTypeEngineTorque).to(equal(@"VEHICLEDATA_ENGINETORQUE"));
expect(SDLVehicleDataTypeAccelerationPedal).to(equal(@"VEHICLEDATA_ACCPEDAL"));
expect(SDLVehicleDataTypeSteeringWheel).to(equal(@"VEHICLEDATA_STEERINGWHEEL"));
+ expect(SDLVehicleDataTypeElectronicParkBrakeStatus).to(equal(@"VEHICLEDATA_ELECTRONICPARKBRAKESTATUS"));
+ expect(SDLVehicleDataTypeTurnSignal).to(equal(@"VEHICLEDATA_TURNSIGNAL"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVideoStreamingStateSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVideoStreamingStateSpec.m
new file mode 100644
index 000000000..9bb2b6900
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVideoStreamingStateSpec.m
@@ -0,0 +1,15 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLVideoStreamingState.h"
+
+QuickSpecBegin(SDLVideoStreamingStateSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLVideoStreamingStateStreamable).to(equal(@"STREAMABLE"));
+ expect(SDLVideoStreamingStateNotStreamable).to(equal(@"NOT_STREAMABLE"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m
index 5f442276e..649e7aa74 100644
--- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnHMIStatusSpec.m
@@ -24,24 +24,28 @@ describe(@"Getter/Setter Tests", ^ {
testNotification.hmiLevel = SDLHMILevelLimited;
testNotification.audioStreamingState = SDLAudioStreamingStateAttenuated;
testNotification.systemContext = SDLSystemContextHMIObscured;
+ testNotification.videoStreamingState = SDLVideoStreamingStateStreamable;
expect(testNotification.hmiLevel).to(equal(SDLHMILevelLimited));
expect(testNotification.audioStreamingState).to(equal(SDLAudioStreamingStateAttenuated));
expect(testNotification.systemContext).to(equal(SDLSystemContextHMIObscured));
+ expect(testNotification.videoStreamingState).to(equal(SDLVideoStreamingStateStreamable));
});
it(@"Should get correctly when initialized", ^ {
NSMutableDictionary* dict = [@{SDLNameNotification:
@{SDLNameParameters:
- @{SDLNameHMILevel:SDLHMILevelLimited,
- SDLNameAudioStreamingState:SDLAudioStreamingStateAttenuated,
- SDLNameSystemContext:SDLSystemContextHMIObscured},
+ @{SDLNameHMILevel: SDLHMILevelLimited,
+ SDLNameAudioStreamingState: SDLAudioStreamingStateAttenuated,
+ SDLNameSystemContext: SDLSystemContextHMIObscured,
+ SDLNameVideoStreamingState: SDLVideoStreamingStateStreamable},
SDLNameOperationName:SDLNameOnHMIStatus}} mutableCopy];
SDLOnHMIStatus* testNotification = [[SDLOnHMIStatus alloc] initWithDictionary:dict];
expect(testNotification.hmiLevel).to(equal(SDLHMILevelLimited));
expect(testNotification.audioStreamingState).to(equal(SDLAudioStreamingStateAttenuated));
expect(testNotification.systemContext).to(equal(SDLSystemContextHMIObscured));
+ expect(testNotification.videoStreamingState).to(equal(SDLVideoStreamingStateStreamable));
});
it(@"Should return nil if not set", ^ {
@@ -50,6 +54,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testNotification.hmiLevel).to(beNil());
expect(testNotification.audioStreamingState).to(beNil());
expect(testNotification.systemContext).to(beNil());
+ expect(testNotification.videoStreamingState).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnRCStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnRCStatusSpec.m
new file mode 100644
index 000000000..4f733d7a8
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnRCStatusSpec.m
@@ -0,0 +1,54 @@
+// SDLOnRCStatusSpec.m
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLOnRCStatus.h"
+#import "SDLModuleData.h"
+#import "SDLNames.h"
+
+QuickSpecBegin(SDLOnRCStatusSpec)
+SDLModuleData * allocatedModule = [[SDLModuleData alloc] init];
+SDLModuleData * freeModule = [[SDLModuleData alloc] init];
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLOnRCStatus* testNotification = [[SDLOnRCStatus alloc] init];
+ testNotification.allowed = @YES;
+ testNotification.allocatedModules = [@[allocatedModule] copy];
+ testNotification.freeModules = [@[freeModule] copy];
+
+ expect(testNotification.allowed).to(equal(@YES));
+ expect(testNotification.allocatedModules).to(equal([@[allocatedModule] copy]));
+ expect(testNotification.freeModules).to(equal([@[freeModule] copy]));
+
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary<NSString *, id> *dict = [@{SDLNameNotification:
+ @{SDLNameParameters:
+ @{SDLNameAllocatedModules:[@[allocatedModule] copy],
+ SDLNameFreeModules:[@[freeModule] copy],
+ SDLNameAllowed:@YES
+ },
+ SDLNameOperationName:SDLNameOnRCStatus}} mutableCopy];
+ SDLOnRCStatus* testNotification = [[SDLOnRCStatus alloc] initWithDictionary:dict];
+
+ expect(testNotification.allowed).to(equal(@YES));
+ expect(testNotification.allocatedModules).to(equal([@[allocatedModule] copy]));
+ expect(testNotification.freeModules).to(equal([@[freeModule] copy]));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLOnRCStatus* testNotification = [[SDLOnRCStatus alloc] init];
+
+ expect(testNotification.allowed).to(beNil());
+ expect(testNotification.allocatedModules).to(beNil());
+ expect(testNotification.freeModules).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m
index 6a3f51772..6f7545c68 100644
--- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m
@@ -21,6 +21,7 @@ describe(@"Getter/Setter Tests", ^ {
SDLOnSystemRequest* testNotification = [[SDLOnSystemRequest alloc] init];
testNotification.requestType = SDLRequestTypeFileResume;
+ testNotification.requestSubType = @"subtype";
testNotification.url = [@[@"www.google.com"] mutableCopy];
testNotification.timeout = @52345;
testNotification.fileType = SDLFileTypePNG;
@@ -28,6 +29,7 @@ describe(@"Getter/Setter Tests", ^ {
testNotification.length = @50000000000;
expect(testNotification.requestType).to(equal(SDLRequestTypeFileResume));
+ expect(testNotification.requestSubType).to(equal(@"subtype"));
expect(testNotification.url).to(equal([@[@"www.google.com"] mutableCopy]));
expect(testNotification.timeout).to(equal(@52345));
expect(testNotification.fileType).to(equal(SDLFileTypePNG));
@@ -39,6 +41,7 @@ describe(@"Getter/Setter Tests", ^ {
NSMutableDictionary* dict = [@{SDLNameNotification:
@{SDLNameParameters:
@{SDLNameRequestType:SDLRequestTypeFileResume,
+ SDLNameRequestSubType: @"subtype",
SDLNameURL:[@[@"www.google.com"] mutableCopy],
SDLNameTimeout:@52345,
SDLNameFileType:SDLFileTypePNG,
@@ -48,6 +51,7 @@ describe(@"Getter/Setter Tests", ^ {
SDLOnSystemRequest* testNotification = [[SDLOnSystemRequest alloc] initWithDictionary:dict];
expect(testNotification.requestType).to(equal(SDLRequestTypeFileResume));
+ expect(testNotification.requestSubType).to(equal(@"subtype"));
expect(testNotification.url).to(equal([@[@"www.google.com"] mutableCopy]));
expect(testNotification.timeout).to(equal(@52345));
expect(testNotification.fileType).to(equal(SDLFileTypePNG));
@@ -59,6 +63,7 @@ describe(@"Getter/Setter Tests", ^ {
SDLOnSystemRequest* testNotification = [[SDLOnSystemRequest alloc] init];
expect(testNotification.requestType).to(beNil());
+ expect(testNotification.requestSubType).to(beNil());
expect(testNotification.url).to(beNil());
expect(testNotification.timeout).to(beNil());
expect(testNotification.fileType).to(beNil());
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m
index 81d5a1a57..aba995df9 100644
--- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m
@@ -25,150 +25,171 @@ SDLAirbagStatus* airbag = [[SDLAirbagStatus alloc] init];
SDLEmergencyEvent* event = [[SDLEmergencyEvent alloc] init];
SDLClusterModeStatus* clusterMode = [[SDLClusterModeStatus alloc] init];
SDLMyKey* myKey = [[SDLMyKey alloc] init];
+SDLFuelRange* fuelRange = [[SDLFuelRange alloc] init];
describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
SDLOnVehicleData* testNotification = [[SDLOnVehicleData alloc] init];
-
- testNotification.gps = gps;
- testNotification.speed = @70.1;
- testNotification.rpm = @4242;
- testNotification.fuelLevel = @10.3;
- testNotification.fuelLevel_State = SDLComponentVolumeStatusAlert;
- testNotification.instantFuelConsumption = @4000.63;
- testNotification.externalTemperature = @-10;
- testNotification.vin = @"222222222722";
- testNotification.prndl = SDLPRNDLDrive;
- testNotification.tirePressure = tires;
- testNotification.odometer = @100050;
+
+ testNotification.accPedalPosition = @99.99999999;
+ testNotification.airbagStatus = airbag;
testNotification.beltStatus = belt;
testNotification.bodyInformation = body;
+ testNotification.clusterModeStatus = clusterMode;
testNotification.deviceStatus = device;
testNotification.driverBraking = SDLVehicleDataEventStatusYes;
- testNotification.wiperStatus = SDLWiperStatusStalled;
- testNotification.headLampStatus = headLamp;
- testNotification.engineTorque = @-200.124;
- testNotification.accPedalPosition = @99.99999999;
- testNotification.steeringWheelAngle = @0.000000001;
testNotification.eCallInfo = eCall;
- testNotification.airbagStatus = airbag;
+ testNotification.electronicParkBrakeStatus = SDLElectronicParkBrakeStatusDriveActive;
testNotification.emergencyEvent = event;
- testNotification.clusterModeStatus = clusterMode;
+ testNotification.engineOilLife = @34.45;
+ testNotification.engineTorque = @-200.124;
+ testNotification.externalTemperature = @-10;
+ testNotification.fuelLevel = @10.3;
+ testNotification.fuelLevel_State = SDLComponentVolumeStatusAlert;
+ testNotification.fuelRange = @[fuelRange, fuelRange];
+ testNotification.gps = gps;
+ testNotification.headLampStatus = headLamp;
+ testNotification.instantFuelConsumption = @4000.63;
testNotification.myKey = myKey;
-
- expect(testNotification.gps).to(equal(gps));
- expect(testNotification.speed).to(equal(@70.1));
- expect(testNotification.rpm).to(equal(@4242));
- expect(testNotification.fuelLevel).to(equal(@10.3));
- expect(testNotification.fuelLevel_State).to(equal(SDLComponentVolumeStatusAlert));
- expect(testNotification.instantFuelConsumption).to(equal(@4000.63));
- expect(testNotification.externalTemperature).to(equal(@-10));
- expect(testNotification.vin).to(equal(@"222222222722"));
- expect(testNotification.prndl).to(equal(SDLPRNDLDrive));
- expect(testNotification.tirePressure).to(equal(tires));
- expect(testNotification.odometer).to(equal(@100050));
+ testNotification.odometer = @100050;
+ testNotification.prndl = SDLPRNDLDrive;
+ testNotification.rpm = @4242;
+ testNotification.speed = @70.1;
+ testNotification.steeringWheelAngle = @0.000000001;
+ testNotification.tirePressure = tires;
+ testNotification.turnSignal = SDLTurnSignalRight;
+ testNotification.vin = @"222222222722";
+ testNotification.wiperStatus = SDLWiperStatusStalled;
+
+ expect(testNotification.accPedalPosition).to(equal(@99.99999999));
+ expect(testNotification.airbagStatus).to(equal(airbag));
expect(testNotification.beltStatus).to(equal(belt));
expect(testNotification.bodyInformation).to(equal(body));
+ expect(testNotification.clusterModeStatus).to(equal(clusterMode));
expect(testNotification.deviceStatus).to(equal(device));
expect(testNotification.driverBraking).to(equal(SDLVehicleDataEventStatusYes));
- expect(testNotification.wiperStatus).to(equal(SDLWiperStatusStalled));
- expect(testNotification.headLampStatus).to(equal(headLamp));
- expect(testNotification.engineTorque).to(equal(@-200.124));
- expect(testNotification.accPedalPosition).to(equal(@99.99999999));
- expect(testNotification.steeringWheelAngle).to(equal(@0.000000001));
expect(testNotification.eCallInfo).to(equal(eCall));
- expect(testNotification.airbagStatus).to(equal(airbag));
+ expect(testNotification.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
expect(testNotification.emergencyEvent).to(equal(event));
- expect(testNotification.clusterModeStatus).to(equal(clusterMode));
+ expect(testNotification.engineOilLife).to(equal(@34.45));
+ expect(testNotification.engineTorque).to(equal(@-200.124));
+ expect(testNotification.externalTemperature).to(equal(@-10));
+ expect(testNotification.fuelLevel).to(equal(@10.3));
+ expect(testNotification.fuelLevel_State).to(equal(SDLComponentVolumeStatusAlert));
+ expect(testNotification.fuelRange).to(equal(@[fuelRange, fuelRange]));
+ expect(testNotification.gps).to(equal(gps));
+ expect(testNotification.headLampStatus).to(equal(headLamp));
+ expect(testNotification.instantFuelConsumption).to(equal(@4000.63));
expect(testNotification.myKey).to(equal(myKey));
+ expect(testNotification.odometer).to(equal(@100050));
+ expect(testNotification.prndl).to(equal(SDLPRNDLDrive));
+ expect(testNotification.rpm).to(equal(@4242));
+ expect(testNotification.speed).to(equal(@70.1));
+ expect(testNotification.steeringWheelAngle).to(equal(@0.000000001));
+ expect(testNotification.tirePressure).to(equal(tires));
+ expect(testNotification.turnSignal).to(equal(SDLTurnSignalRight));
+ expect(testNotification.vin).to(equal(@"222222222722"));
+ expect(testNotification.wiperStatus).to(equal(SDLWiperStatusStalled));
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary* dict = [@{SDLNameNotification:
- @{SDLNameParameters:
- @{SDLNameGPS:gps,
- SDLNameSpeed:@70.1,
- SDLNameRPM:@4242,
- SDLNameFuelLevel:@10.3,
- SDLNameFuelLevelState:SDLComponentVolumeStatusAlert,
- SDLNameInstantFuelConsumption:@4000.63,
- SDLNameExternalTemperature:@-10,
- SDLNameVIN:@"222222222722",
- SDLNamePRNDL:SDLPRNDLDrive,
- SDLNameTirePressure:tires,
- SDLNameOdometer:@100050,
- SDLNameBeltStatus:belt,
- SDLNameBodyInformation:body,
- SDLNameDeviceStatus:device,
- SDLNameDriverBraking:SDLVehicleDataEventStatusYes,
- SDLNameWiperStatus:SDLWiperStatusStalled,
- SDLNameHeadLampStatus:headLamp,
- SDLNameEngineTorque:@-200.124,
- SDLNameAccelerationPedalPosition:@99.99999999,
- SDLNameSteeringWheelAngle:@0.000000001,
- SDLNameECallInfo:eCall,
- SDLNameAirbagStatus:airbag,
- SDLNameEmergencyEvent:event,
- SDLNameClusterModeStatus:clusterMode,
- SDLNameMyKey:myKey},
- SDLNameOperationName:SDLNameOnVehicleData}} mutableCopy];
+ NSDictionary* dict = @{SDLNameNotification:
+ @{SDLNameParameters:
+ @{SDLNameAccelerationPedalPosition:@99.99999999,
+ SDLNameAirbagStatus:airbag,
+ SDLNameBeltStatus:belt,
+ SDLNameBodyInformation:body,
+ SDLNameClusterModeStatus:clusterMode,
+ SDLNameDeviceStatus:device,
+ SDLNameDriverBraking:SDLVehicleDataEventStatusYes,
+ SDLNameECallInfo:eCall,
+ SDLNameElectronicParkBrakeStatus:SDLElectronicParkBrakeStatusDriveActive,
+ SDLNameEmergencyEvent:event,
+ SDLNameEngineOilLife:@45.1,
+ SDLNameEngineTorque:@-200.124,
+ SDLNameExternalTemperature:@-10,
+ SDLNameFuelLevel:@10.3,
+ SDLNameFuelLevelState:SDLComponentVolumeStatusAlert,
+ SDLNameFuelRange:@[fuelRange],
+ SDLNameGPS:gps,
+ SDLNameHeadLampStatus:headLamp,
+ SDLNameInstantFuelConsumption:@4000.63,
+ SDLNameMyKey:myKey,
+ SDLNameOdometer:@100050,
+ SDLNamePRNDL:SDLPRNDLDrive,
+ SDLNameRPM:@4242,
+ SDLNameSpeed:@70.1,
+ SDLNameSteeringWheelAngle:@0.000000001,
+ SDLNameTirePressure:tires,
+ SDLNameTurnSignal:SDLTurnSignalOff,
+ SDLNameVIN:@"222222222722",
+ SDLNameWiperStatus:SDLWiperStatusStalled},
+ SDLNameOperationName:SDLNameOnVehicleData}};
SDLOnVehicleData* testNotification = [[SDLOnVehicleData alloc] initWithDictionary:dict];
- expect(testNotification.gps).to(equal(gps));
- expect(testNotification.speed).to(equal(@70.1));
- expect(testNotification.rpm).to(equal(@4242));
- expect(testNotification.fuelLevel).to(equal(@10.3));
- expect(testNotification.fuelLevel_State).to(equal(SDLComponentVolumeStatusAlert));
- expect(testNotification.instantFuelConsumption).to(equal(@4000.63));
- expect(testNotification.externalTemperature).to(equal(@-10));
- expect(testNotification.vin).to(equal(@"222222222722"));
- expect(testNotification.prndl).to(equal(SDLPRNDLDrive));
- expect(testNotification.tirePressure).to(equal(tires));
- expect(testNotification.odometer).to(equal(@100050));
+ expect(testNotification.accPedalPosition).to(equal(@99.99999999));
+ expect(testNotification.airbagStatus).to(equal(airbag));
expect(testNotification.beltStatus).to(equal(belt));
expect(testNotification.bodyInformation).to(equal(body));
+ expect(testNotification.clusterModeStatus).to(equal(clusterMode));
expect(testNotification.deviceStatus).to(equal(device));
expect(testNotification.driverBraking).to(equal(SDLVehicleDataEventStatusYes));
- expect(testNotification.wiperStatus).to(equal(SDLWiperStatusStalled));
- expect(testNotification.headLampStatus).to(equal(headLamp));
- expect(testNotification.engineTorque).to(equal(@-200.124));
- expect(testNotification.accPedalPosition).to(equal(@99.99999999));
- expect(testNotification.steeringWheelAngle).to(equal(@0.000000001));
expect(testNotification.eCallInfo).to(equal(eCall));
- expect(testNotification.airbagStatus).to(equal(airbag));
+ expect(testNotification.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
expect(testNotification.emergencyEvent).to(equal(event));
- expect(testNotification.clusterModeStatus).to(equal(clusterMode));
+ expect(testNotification.engineOilLife).to(equal(@45.1));
+ expect(testNotification.engineTorque).to(equal(@-200.124));
+ expect(testNotification.externalTemperature).to(equal(@-10));
+ expect(testNotification.fuelLevel).to(equal(@10.3));
+ expect(testNotification.fuelLevel_State).to(equal(SDLComponentVolumeStatusAlert));
+ expect(testNotification.fuelRange).to(equal(@[fuelRange]));
+ expect(testNotification.gps).to(equal(gps));
+ expect(testNotification.headLampStatus).to(equal(headLamp));
+ expect(testNotification.instantFuelConsumption).to(equal(@4000.63));
expect(testNotification.myKey).to(equal(myKey));
+ expect(testNotification.odometer).to(equal(@100050));
+ expect(testNotification.prndl).to(equal(SDLPRNDLDrive));
+ expect(testNotification.rpm).to(equal(@4242));
+ expect(testNotification.speed).to(equal(@70.1));
+ expect(testNotification.steeringWheelAngle).to(equal(@0.000000001));
+ expect(testNotification.tirePressure).to(equal(tires));
+ expect(testNotification.turnSignal).to(equal(SDLTurnSignalOff));
+ expect(testNotification.vin).to(equal(@"222222222722"));
+ expect(testNotification.wiperStatus).to(equal(SDLWiperStatusStalled));
});
it(@"Should return nil if not set", ^ {
SDLOnVehicleData* testNotification = [[SDLOnVehicleData alloc] init];
- expect(testNotification.gps).to(beNil());
- expect(testNotification.speed).to(beNil());
- expect(testNotification.rpm).to(beNil());
- expect(testNotification.fuelLevel).to(beNil());
- expect(testNotification.fuelLevel_State).to(beNil());
- expect(testNotification.instantFuelConsumption).to(beNil());
- expect(testNotification.externalTemperature).to(beNil());
- expect(testNotification.vin).to(beNil());
- expect(testNotification.prndl).to(beNil());
- expect(testNotification.tirePressure).to(beNil());
- expect(testNotification.odometer).to(beNil());
+ expect(testNotification.accPedalPosition).to(beNil());
+ expect(testNotification.airbagStatus).to(beNil());
expect(testNotification.beltStatus).to(beNil());
expect(testNotification.bodyInformation).to(beNil());
+ expect(testNotification.clusterModeStatus).to(beNil());
expect(testNotification.deviceStatus).to(beNil());
expect(testNotification.driverBraking).to(beNil());
- expect(testNotification.wiperStatus).to(beNil());
- expect(testNotification.headLampStatus).to(beNil());
- expect(testNotification.engineTorque).to(beNil());
- expect(testNotification.accPedalPosition).to(beNil());
- expect(testNotification.steeringWheelAngle).to(beNil());
expect(testNotification.eCallInfo).to(beNil());
- expect(testNotification.airbagStatus).to(beNil());
+ expect(testNotification.electronicParkBrakeStatus).to(beNil());
expect(testNotification.emergencyEvent).to(beNil());
- expect(testNotification.clusterModeStatus).to(beNil());
+ expect(testNotification.engineOilLife).to(beNil());
+ expect(testNotification.engineTorque).to(beNil());
+ expect(testNotification.externalTemperature).to(beNil());
+ expect(testNotification.fuelLevel).to(beNil());
+ expect(testNotification.fuelLevel_State).to(beNil());
+ expect(testNotification.fuelRange).to(beNil());
+ expect(testNotification.gps).to(beNil());
+ expect(testNotification.headLampStatus).to(beNil());
+ expect(testNotification.instantFuelConsumption).to(beNil());
expect(testNotification.myKey).to(beNil());
+ expect(testNotification.odometer).to(beNil());
+ expect(testNotification.prndl).to(beNil());
+ expect(testNotification.rpm).to(beNil());
+ expect(testNotification.speed).to(beNil());
+ expect(testNotification.steeringWheelAngle).to(beNil());
+ expect(testNotification.tirePressure).to(beNil());
+ expect(testNotification.turnSignal).to(beNil());
+ expect(testNotification.vin).to(beNil());
+ expect(testNotification.wiperStatus).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddCommandSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddCommandSpec.m
index 919932f18..5f7bcf105 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddCommandSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddCommandSpec.m
@@ -71,7 +71,17 @@ describe(@"initializers", ^{
testCommand = nil;
});
- context(@"initWithHandler", ^{
+ context(@"init", ^{
+ testCommand = [[SDLAddCommand alloc] init];
+
+ expect(testCommand).toNot(beNil());
+ expect(testCommand.cmdID).to(beNil());
+ expect(testCommand.vrCommands).to(beNil());
+ expect(testCommand.menuParams).to(beNil());
+ expect(testCommand.cmdIcon).to(beNil());
+ });
+
+ context(@"initWithHandler:", ^{
it(@"should initialize correctly", ^{
testCommand = [[SDLAddCommand alloc] initWithHandler:handler];
@@ -112,6 +122,8 @@ describe(@"initializers", ^{
NSString *iconValue = @"Icon";
SDLImageType imageType = SDLImageTypeDynamic;
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
testCommand = [[SDLAddCommand alloc] initWithId:commandId vrCommands:vrCommands menuName:menuName parentId:parentId position:position iconValue:iconValue iconType:imageType handler:nil];
expect(testCommand.cmdID).to(equal(commandId));
@@ -120,9 +132,12 @@ describe(@"initializers", ^{
expect(testCommand.menuParams.parentID).to(equal(parentId));
expect(testCommand.menuParams.position).to(equal(position));
expect(testCommand.cmdIcon).toNot(beNil());
+ #pragma clang diagnostic pop
});
it(@"should initialize without an image", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
testCommand = [[SDLAddCommand alloc] initWithId:commandId vrCommands:vrCommands menuName:menuName parentId:parentId position:position iconValue:nil iconType:nil handler:nil];
expect(testCommand.cmdID).to(equal(commandId));
@@ -131,6 +146,76 @@ describe(@"initializers", ^{
expect(testCommand.menuParams.parentID).to(equal(parentId));
expect(testCommand.menuParams.position).to(equal(position));
expect(testCommand.cmdIcon).to(beNil());
+ #pragma clang diagnostic pop
+ });
+ });
+
+ context(@"initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:", ^{
+ __block UInt32 parentId = 12345;
+ __block UInt16 position = 0;
+
+ it(@"should initialize with an image", ^{
+ NSString *iconValue = @"Icon";
+ SDLImageType imageType = SDLImageTypeDynamic;
+ BOOL imageIsTemplate = YES;
+
+ testCommand = [[SDLAddCommand alloc] initWithId:commandId vrCommands:vrCommands menuName:menuName parentId:parentId position:position iconValue:iconValue iconType:imageType iconIsTemplate:imageIsTemplate handler:nil];
+
+ expect(testCommand.cmdID).to(equal(commandId));
+ expect(testCommand.vrCommands).to(equal(vrCommands));
+ expect(testCommand.menuParams.menuName).toNot(beNil());
+ expect(testCommand.menuParams.parentID).to(equal(parentId));
+ expect(testCommand.menuParams.position).to(equal(position));
+
+ expect(testCommand.cmdIcon).toNot(beNil());
+ expect(testCommand.cmdIcon.value).to(equal(iconValue));
+ expect(testCommand.cmdIcon.imageType).to(equal(imageType));
+ expect(testCommand.cmdIcon.isTemplate).to(equal(imageIsTemplate));
+ });
+
+ it(@"should initialize without an image", ^{
+ testCommand = [[SDLAddCommand alloc] initWithId:commandId vrCommands:vrCommands menuName:menuName parentId:parentId position:position iconValue:nil iconType:nil iconIsTemplate:NO handler:nil];
+
+ expect(testCommand.cmdID).to(equal(commandId));
+ expect(testCommand.vrCommands).to(equal(vrCommands));
+ expect(testCommand.menuParams.menuName).toNot(beNil());
+ expect(testCommand.menuParams.parentID).to(equal(parentId));
+ expect(testCommand.menuParams.position).to(equal(position));
+ expect(testCommand.cmdIcon).to(beNil());
+ });
+ });
+
+ context(@"initWithId:vrCommands:menuName:parentId:position:icon:handler:", ^{
+ __block UInt32 parentId = 365;
+ __block UInt16 position = 0;
+
+ it(@"should initialize with an image", ^{
+ SDLImage *image = [[SDLImage alloc] initWithName:@"Icon" ofType:SDLImageTypeDynamic isTemplate:YES];
+
+ testCommand = [[SDLAddCommand alloc] initWithId:commandId vrCommands:vrCommands menuName:menuName parentId:parentId position:position icon:image handler:nil];
+
+ expect(testCommand.cmdID).to(equal(commandId));
+ expect(testCommand.vrCommands).to(equal(vrCommands));
+ expect(testCommand.menuParams.menuName).toNot(beNil());
+ expect(testCommand.menuParams.parentID).to(equal(parentId));
+ expect(testCommand.menuParams.position).to(equal(position));
+
+ expect(testCommand.cmdIcon).toNot(beNil());
+ expect(testCommand.cmdIcon.value).to(equal(image.value));
+ expect(testCommand.cmdIcon.imageType).to(equal(image.imageType));
+ expect(testCommand.cmdIcon.isTemplate).to(equal(image.isTemplate));
+ });
+
+ it(@"should initialize without an image", ^{
+ testCommand = [[SDLAddCommand alloc] initWithId:commandId vrCommands:vrCommands menuName:menuName parentId:parentId position:position icon:nil handler:nil];
+
+ expect(testCommand.cmdID).to(equal(commandId));
+ expect(testCommand.vrCommands).to(equal(vrCommands));
+ expect(testCommand.menuParams.menuName).toNot(beNil());
+ expect(testCommand.menuParams.parentID).to(equal(parentId));
+ expect(testCommand.menuParams.position).to(equal(position));
+
+ expect(testCommand.cmdIcon).to(beNil());
});
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m
index 8dd5742cb..18f09da8e 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m
@@ -9,21 +9,63 @@
#import <Nimble/Nimble.h>
#import "SDLAddSubMenu.h"
+#import "SDLImage.h"
#import "SDLNames.h"
QuickSpecBegin(SDLAddSubMenuSpec)
describe(@"Getter/Setter Tests", ^ {
+ __block UInt32 menuId = 4345645;
+ __block UInt8 position = 27;
+ __block NSString *menuName = @"Welcome to the menu";
+ __block SDLImage *image = nil;
+
+ beforeEach(^{
+ image = [[SDLImage alloc] initWithName:@"Test" isTemplate:false];
+ });
+
+ it(@"should correctly initialize with initWithId:menuName:", ^{
+ SDLAddSubMenu *testRequest = [[SDLAddSubMenu alloc] initWithId:menuId menuName:menuName];
+
+ expect(testRequest.menuID).to(equal(@(menuId)));
+ expect(testRequest.position).to(beNil());
+ expect(testRequest.menuName).to(equal(menuName));
+ expect(testRequest.menuIcon).to(beNil());
+ });
+
+ it(@"should correctly initialize with initWithId:menuName:position:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLAddSubMenu *testRequest = [[SDLAddSubMenu alloc] initWithId:menuId menuName:menuName position:position];
+
+ expect(testRequest.menuID).to(equal(@(menuId)));
+ expect(testRequest.position).to(equal(@(position)));
+ expect(testRequest.menuName).to(equal(menuName));
+ expect(testRequest.menuIcon).to(beNil());
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should correctly initialize with initWithId:menuName:menuIcon:position:", ^{
+ SDLAddSubMenu *testRequest = [[SDLAddSubMenu alloc] initWithId:menuId menuName:menuName menuIcon:image position:position];
+
+ expect(testRequest.menuID).to(equal(@(menuId)));
+ expect(testRequest.position).to(equal(@(position)));
+ expect(testRequest.menuName).to(equal(menuName));
+ expect(testRequest.menuIcon).to(equal(image));
+ });
+
it(@"Should set and get correctly", ^ {
SDLAddSubMenu* testRequest = [[SDLAddSubMenu alloc] init];
testRequest.menuID = @4345645;
testRequest.position = @27;
testRequest.menuName = @"Welcome to the menu";
+ testRequest.menuIcon = image;
- expect(testRequest.menuID).to(equal(@4345645));
- expect(testRequest.position).to(equal(@27));
- expect(testRequest.menuName).to(equal(@"Welcome to the menu"));
+ expect(testRequest.menuID).to(equal(@(menuId)));
+ expect(testRequest.position).to(equal(@(position)));
+ expect(testRequest.menuName).to(equal(menuName));
+ expect(testRequest.menuIcon).to(equal(image));
});
it(@"Should get correctly when initialized", ^ {
@@ -31,13 +73,18 @@ describe(@"Getter/Setter Tests", ^ {
@{SDLNameParameters:
@{SDLNameMenuId:@4345645,
SDLNamePosition:@27,
- SDLNameMenuName:@"Welcome to the menu"},
+ SDLNameMenuName:@"Welcome to the menu",
+ SDLNameMenuIcon: @{
+ SDLNameValue: @"Test"
+ }
+ },
SDLNameOperationName:SDLNameAddSubMenu}} mutableCopy];
SDLAddSubMenu* testRequest = [[SDLAddSubMenu alloc] initWithDictionary:dict];
- expect(testRequest.menuID).to(equal(@4345645));
- expect(testRequest.position).to(equal(@27));
- expect(testRequest.menuName).to(equal(@"Welcome to the menu"));
+ expect(testRequest.menuID).to(equal(@(menuId)));
+ expect(testRequest.position).to(equal(@(position)));
+ expect(testRequest.menuName).to(equal(menuName));
+ expect(testRequest.menuIcon.value).to(equal(@"Test"));
});
it(@"Should return nil if not set", ^ {
@@ -46,6 +93,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.menuID).to(beNil());
expect(testRequest.position).to(beNil());
expect(testRequest.menuName).to(beNil());
+ expect(testRequest.menuIcon).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m
index 053f90503..360b87bae 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m
@@ -17,145 +17,231 @@ describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
SDLGetVehicleData* testRequest = [[SDLGetVehicleData alloc] init];
+ testRequest.accPedalPosition = @YES;
+ testRequest.airbagStatus = @NO;
+ testRequest.beltStatus = @NO;
+ testRequest.bodyInformation = @YES;
+ testRequest.clusterModeStatus = @NO;
+ testRequest.deviceStatus = @NO;
+ testRequest.driverBraking = @YES;
+ testRequest.eCallInfo = @YES;
+ testRequest.electronicParkBrakeStatus = @YES;
+ testRequest.emergencyEvent = @YES;
+ testRequest.engineOilLife = @YES;
+ testRequest.engineTorque = @NO;
+ testRequest.externalTemperature = @YES;
+ testRequest.fuelLevel = @NO;
+ testRequest.fuelLevel_State = @YES;
+ testRequest.fuelRange = @YES;
testRequest.gps = @NO;
- testRequest.speed = @YES;
- testRequest.rpm = @NO;
- testRequest.fuelLevel = @YES;
- testRequest.fuelLevel_State = @NO;
- testRequest.instantFuelConsumption = @YES;
- testRequest.externalTemperature = @NO;
- testRequest.vin = @YES;
- testRequest.prndl = @NO;
- testRequest.tirePressure = @YES;
- testRequest.odometer = @NO;
- testRequest.beltStatus = @YES;
- testRequest.bodyInformation = @NO;
- testRequest.deviceStatus = @YES;
- testRequest.driverBraking = @NO;
- testRequest.wiperStatus = @YES;
- testRequest.headLampStatus = @NO;
- testRequest.engineTorque = @YES;
- testRequest.accPedalPosition = @NO;
- testRequest.steeringWheelAngle = @YES;
- testRequest.eCallInfo = @NO;
- testRequest.airbagStatus = @YES;
- testRequest.emergencyEvent = @NO;
- testRequest.clusterModeStatus = @YES;
- testRequest.myKey = @NO;
-
+ testRequest.headLampStatus = @YES;
+ testRequest.instantFuelConsumption = @NO;
+ testRequest.myKey = @YES;
+ testRequest.odometer = @YES;
+ testRequest.prndl = @YES;
+ testRequest.rpm = @YES;
+ testRequest.speed = @NO;
+ testRequest.steeringWheelAngle = @NO;
+ testRequest.tirePressure = @NO;
+ testRequest.turnSignal = @YES;
+ testRequest.wiperStatus = @NO;
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@NO));
+ expect(testRequest.beltStatus).to(equal(@NO));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@NO));
+ expect(testRequest.deviceStatus).to(equal(@NO));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@NO));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@NO));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
expect(testRequest.gps).to(equal(@NO));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@NO));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@NO));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@NO));
- expect(testRequest.vin).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@NO));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@NO));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@NO));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@NO));
- expect(testRequest.wiperStatus).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@NO));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.accPedalPosition).to(equal(@NO));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@NO));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@NO));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@NO));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@NO));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@NO));
+ expect(testRequest.steeringWheelAngle).to(equal(@NO));
+ expect(testRequest.tirePressure).to(equal(@NO));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@NO));
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLNameRequest:
+ NSDictionary<NSString *, id> *dict = @{SDLNameRequest:
@{SDLNameParameters:
- @{SDLNameGPS:@NO,
- SDLNameSpeed:@YES,
- SDLNameRPM:@NO,
- SDLNameFuelLevel:@YES,
- SDLNameFuelLevelState:@NO,
- SDLNameInstantFuelConsumption:@YES,
- SDLNameExternalTemperature:@NO,
- SDLNameVIN:@YES,
- SDLNamePRNDL:@NO,
- SDLNameTirePressure:@YES,
- SDLNameOdometer:@NO,
+ @{SDLNameAccelerationPedalPosition:@YES,
+ SDLNameAirbagStatus:@YES,
SDLNameBeltStatus:@YES,
- SDLNameBodyInformation:@NO,
+ SDLNameBodyInformation:@YES,
+ SDLNameClusterModeStatus:@YES,
SDLNameDeviceStatus:@YES,
- SDLNameDriverBraking:@NO,
- SDLNameWiperStatus:@YES,
- SDLNameHeadLampStatus:@NO,
- SDLNameEngineTorque:@YES,
- SDLNameAccelerationPedalPosition:@NO,
- SDLNameSteeringWheelAngle:@YES,
- SDLNameECallInfo:@NO,
- SDLNameAirbagStatus:@YES,
+ SDLNameDriverBraking:@YES,
+ SDLNameECallInfo:@YES,
+ SDLNameElectronicParkBrakeStatus:@YES,
SDLNameEmergencyEvent:@NO,
- SDLNameClusterModeStatus:@YES,
- SDLNameMyKey:@NO},
- SDLNameOperationName:SDLNameGetVehicleData}} mutableCopy];
+ SDLNameEngineOilLife:@YES,
+ SDLNameEngineTorque:@YES,
+ SDLNameExternalTemperature:@NO,
+ SDLNameFuelLevel:@YES,
+ SDLNameFuelLevelState:@YES,
+ SDLNameFuelRange:@YES,
+ SDLNameGPS:@YES,
+ SDLNameHeadLampStatus:@YES,
+ SDLNameInstantFuelConsumption:@YES,
+ SDLNameMyKey:@YES,
+ SDLNameOdometer:@YES,
+ SDLNamePRNDL:@YES,
+ SDLNameRPM:@YES,
+ SDLNameSpeed:@YES,
+ SDLNameSteeringWheelAngle:@NO,
+ SDLNameTirePressure:@YES,
+ SDLNameTurnSignal:@NO,
+ SDLNameWiperStatus:@YES},
+ SDLNameOperationName:SDLNameGetVehicleData}};
SDLGetVehicleData* testRequest = [[SDLGetVehicleData alloc] initWithDictionary:dict];
- expect(testRequest.gps).to(equal(@NO));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@NO));
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@NO));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@NO));
expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@NO));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@NO));
- expect(testRequest.vin).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@NO));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@NO));
expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@NO));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@NO));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@NO));
+ expect(testRequest.turnSignal).to(equal(@NO));
expect(testRequest.wiperStatus).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@NO));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.accPedalPosition).to(equal(@NO));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@NO));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@NO));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@NO));
});
-
- it(@"Should return nil if not set", ^ {
+});
+
+describe(@"initializers", ^{
+ context(@"init", ^{
SDLGetVehicleData* testRequest = [[SDLGetVehicleData alloc] init];
-
- expect(testRequest.gps).to(beNil());
- expect(testRequest.speed).to(beNil());
- expect(testRequest.rpm).to(beNil());
- expect(testRequest.fuelLevel).to(beNil());
- expect(testRequest.fuelLevel_State).to(beNil());
- expect(testRequest.instantFuelConsumption).to(beNil());
- expect(testRequest.externalTemperature).to(beNil());
- expect(testRequest.vin).to(beNil());
- expect(testRequest.prndl).to(beNil());
- expect(testRequest.tirePressure).to(beNil());
- expect(testRequest.odometer).to(beNil());
+
+ expect(testRequest.accPedalPosition).to(beNil());
+ expect(testRequest.airbagStatus).to(beNil());
expect(testRequest.beltStatus).to(beNil());
expect(testRequest.bodyInformation).to(beNil());
+ expect(testRequest.clusterModeStatus).to(beNil());
expect(testRequest.deviceStatus).to(beNil());
expect(testRequest.driverBraking).to(beNil());
- expect(testRequest.wiperStatus).to(beNil());
- expect(testRequest.headLampStatus).to(beNil());
- expect(testRequest.engineTorque).to(beNil());
- expect(testRequest.accPedalPosition).to(beNil());
- expect(testRequest.steeringWheelAngle).to(beNil());
expect(testRequest.eCallInfo).to(beNil());
- expect(testRequest.airbagStatus).to(beNil());
+ expect(testRequest.electronicParkBrakeStatus).to(beNil());
expect(testRequest.emergencyEvent).to(beNil());
- expect(testRequest.clusterModeStatus).to(beNil());
+ expect(testRequest.engineOilLife).to(beNil());
+ expect(testRequest.engineTorque).to(beNil());
+ expect(testRequest.externalTemperature).to(beNil());
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.gps).to(beNil());
+ expect(testRequest.headLampStatus).to(beNil());
+ expect(testRequest.instantFuelConsumption).to(beNil());
expect(testRequest.myKey).to(beNil());
+ expect(testRequest.odometer).to(beNil());
+ expect(testRequest.prndl).to(beNil());
+ expect(testRequest.rpm).to(beNil());
+ expect(testRequest.speed).to(beNil());
+ expect(testRequest.steeringWheelAngle).to(beNil());
+ expect(testRequest.tirePressure).to(beNil());
+ expect(testRequest.turnSignal).to(beNil());
+ expect(testRequest.wiperStatus).to(beNil());
+ });
+
+ context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLGetVehicleData *testRequest = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:NO beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES emergencyEvent:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES vin:YES wiperStatus:YES];
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@NO));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@NO));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@NO));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@NO));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@NO));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ #pragma clang diagnostic pop
+ });
+
+ context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
+ SDLGetVehicleData *testRequest = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES vin:YES wiperStatus:YES];
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m
index 54ad81b28..88b7310f5 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m
@@ -12,6 +12,12 @@
#import "SDLNames.h"
#import "SDLPutFile.h"
+#import <zlib.h>
+
+
+@interface SDLPutFile()
++ (unsigned long)sdl_getCRC32ChecksumForBulkData:(NSData *)data;
+@end
QuickSpecBegin(SDLPutFileSpec)
@@ -25,6 +31,7 @@ describe(@"Getter/Setter Tests", ^ {
testRequest.systemFile = @NO;
testRequest.offset = @987654321;
testRequest.length = @123456789;
+ testRequest.crc = @0xffffffff;
expect(testRequest.syncFileName).to(equal(@"fileName"));
expect(testRequest.fileType).to(equal(SDLFileTypeJPEG));
@@ -32,18 +39,20 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.systemFile).to(equal(@NO));
expect(testRequest.offset).to(equal(@987654321));
expect(testRequest.length).to(equal(@123456789));
+ expect(testRequest.crc).to(equal(0xffffffff));
});
- it(@"Should get correctly when initialized", ^ {
+ it(@"Should get and set correctly when initialized", ^ {
NSMutableDictionary* dict = [@{SDLNameRequest:
@{SDLNameParameters:
- @{SDLNameSyncFileName:@"fileName",
- SDLNameFileType:SDLFileTypeJPEG,
- SDLNamePersistentFile:@YES,
- SDLNameSystemFile:@NO,
- SDLNameOffset:@987654321,
- SDLNameLength:@123456789},
- SDLNameOperationName:SDLNamePutFile}} mutableCopy];
+ @{ SDLNameSyncFileName:@"fileName",
+ SDLNameFileType:SDLFileTypeJPEG,
+ SDLNamePersistentFile:@YES,
+ SDLNameSystemFile:@NO,
+ SDLNameOffset:@987654321,
+ SDLNameLength:@123456789,
+ SDLNameCRC:@0xffffffff},
+ SDLNameOperationName:SDLNamePutFile}} mutableCopy];
SDLPutFile* testRequest = [[SDLPutFile alloc] initWithDictionary:dict];
expect(testRequest.syncFileName).to(equal(@"fileName"));
@@ -52,17 +61,116 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.systemFile).to(equal(@NO));
expect(testRequest.offset).to(equal(@987654321));
expect(testRequest.length).to(equal(@123456789));
+ expect(testRequest.crc).to(equal(@0xffffffff));
});
-
- it(@"Should return nil if not set", ^ {
- SDLPutFile* testRequest = [[SDLPutFile alloc] init];
-
+});
+
+describe(@"When creating a CRC32 checksum for the bulk data", ^{
+ it(@"should create a checksum for data", ^{
+ NSData *testFileData = [@"Somerandomtextdata" dataUsingEncoding:NSUTF8StringEncoding];
+ unsigned long testFileCRC32Checksum = [SDLPutFile sdl_getCRC32ChecksumForBulkData:testFileData];
+
+ expect(testFileCRC32Checksum).to(equal(testFileCRC32Checksum));
+ });
+
+ it(@"should not create a checksum if the data is nil", ^{
+ NSData *testFileData = nil;
+ unsigned long testFileCRC32Checksum = [SDLPutFile sdl_getCRC32ChecksumForBulkData:testFileData];
+
+ expect(testFileCRC32Checksum).to(equal(0));
+ });
+
+ it(@"should not create a checksum if the data is empty", ^{
+ NSData *testFileData = [NSData data];
+ unsigned long testFileCRC32Checksum = [SDLPutFile sdl_getCRC32ChecksumForBulkData:testFileData];
+
+ expect(testFileCRC32Checksum).to(equal(0));
+ });
+});
+
+describe(@"initializers", ^{
+ context(@"init", ^{
+ SDLPutFile *testRequest = [[SDLPutFile alloc] init];
+
expect(testRequest.syncFileName).to(beNil());
expect(testRequest.fileType).to(beNil());
expect(testRequest.persistentFile).to(beNil());
expect(testRequest.systemFile).to(beNil());
expect(testRequest.offset).to(beNil());
expect(testRequest.length).to(beNil());
+ expect(testRequest.crc).to(beNil());
+ expect(testRequest.bulkData).to(beNil());
+ });
+
+ context(@"initWithFileName:fileType:", ^{
+ SDLPutFile *testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypeWAV];
+
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.fileType).to(equal(SDLFileTypeWAV));
+ expect(testRequest.persistentFile).to(beNil());
+ expect(testRequest.systemFile).to(beNil());
+ expect(testRequest.offset).to(beNil());
+ expect(testRequest.length).to(beNil());
+ expect(testRequest.crc).to(beNil());
+ expect(testRequest.bulkData).to(beNil());
+ });
+
+ context(@"initWithFileName:fileType:persistentFile:", ^{
+ SDLPutFile* testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypePNG persistentFile:false];
+
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.fileType).to(equal(SDLFileTypePNG));
+ expect(testRequest.persistentFile).to(beFalse());
+ expect(testRequest.systemFile).to(beNil());
+ expect(testRequest.offset).to(beNil());
+ expect(testRequest.length).to(beNil());
+ expect(testRequest.crc).to(beNil());
+ expect(testRequest.bulkData).to(beNil());
+ });
+
+ context(@"initWithFileName:fileType:persistentFile:systemFile:offset:length:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLPutFile *testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypeMP3 persistentFile:true systemFile:true offset:45 length:34];
+
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.fileType).to(equal(SDLFileTypeMP3));
+ expect(testRequest.persistentFile).to(beTrue());
+ expect(testRequest.systemFile).to(beTrue());
+ expect(testRequest.offset).to(equal(@45));
+ expect(testRequest.length).to(equal(34));
+ expect(testRequest.crc).to(beNil());
+ expect(testRequest.bulkData).to(beNil());
+ #pragma clang diagnostic pop
+ });
+
+ context(@"initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:", ^{
+ SDLPutFile* testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypeMP3 persistentFile:true systemFile:true offset:45 length:34 crc:0xffffffff];
+
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.fileType).to(equal(SDLFileTypeMP3));
+ expect(testRequest.persistentFile).to(beTrue());
+ expect(testRequest.systemFile).to(beTrue());
+ expect(testRequest.offset).to(equal(@45));
+ expect(testRequest.length).to(equal(@34));
+ expect(testRequest.crc).to(equal(0xffffffff));
+ expect(testRequest.bulkData).to(beNil());
+ });
+
+ context(@"initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:", ^{
+ NSData *testFileData = [@"someTextData" dataUsingEncoding:NSUTF8StringEncoding];
+ unsigned long testFileCRC32Checksum = [SDLPutFile sdl_getCRC32ChecksumForBulkData:testFileData];
+
+ SDLPutFile* testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypeAAC persistentFile:true systemFile:true offset:5 length:4 bulkData:testFileData];
+
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.fileType).to(equal(SDLFileTypeAAC));
+ expect(testRequest.persistentFile).to(beTrue());
+ expect(testRequest.systemFile).to(beTrue());
+ expect(testRequest.offset).to(equal(@5));
+ expect(testRequest.length).to(equal(@4));
+ expect(testRequest.bulkData).to(equal(testFileData));
+ expect(testRequest.crc).to(equal(testFileCRC32Checksum));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m
index b3e926715..786fbf836 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m
@@ -8,106 +8,277 @@
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
+#import "NSNumber+NumberType.h"
#import "SDLAppHMIType.h"
#import "SDLAppInfo.h"
#import "SDLDeviceInfo.h"
#import "SDLLanguage.h"
+#import "SDLLifecycleConfiguration.h"
#import "SDLNames.h"
#import "SDLRegisterAppInterface.h"
#import "SDLSyncMsgVersion.h"
+#import "SDLTemplateColorScheme.h"
#import "SDLTTSChunk.h"
QuickSpecBegin(SDLRegisterAppInterfaceSpec)
-SDLSyncMsgVersion* version = [[SDLSyncMsgVersion alloc] init];
-SDLTTSChunk* chunk = [[SDLTTSChunk alloc] init];
-SDLDeviceInfo* info = [[SDLDeviceInfo alloc] init];
-SDLAppInfo* appInfo = [[SDLAppInfo alloc] init];
+describe(@"RegisterAppInterface Tests", ^{
+ __block SDLRegisterAppInterface *testRegisterAppInterface = nil;
+ __block NSString *appName = @"app56";
+ __block NSString *appId = @"123456789";
+ __block NSString *fullAppId = @"123-e4567-e89b-12d3-a456-426655440000";
+ __block NSString *expectedAppId = @"123e4567e8";
+ __block NSString *shortAppName = @"whatisanngn";
+ __block NSString *resumeHash = @"gercd35grw2";
+ __block NSString *vrSynonyms = @"app56";
+ __block NSNumber<SDLBool> *isMediaApp = @YES;
+ __block NSArray<SDLAppHMIType> *appTypes = @[SDLAppHMITypeMedia, SDLAppHMITypeNavigation, SDLAppHMITypeInformation];
+ __block SDLLanguage language = SDLLanguageElGr;
+ __block SDLLanguage hmiDisplayLanguage = SDLLanguageArSa;
+ __block SDLSyncMsgVersion *version = nil;
+ __block SDLTTSChunk *chunk = nil;
+ __block SDLDeviceInfo *info = nil;
+ __block SDLAppInfo *appInfo = nil;
+ __block SDLTemplateColorScheme *colorScheme = nil;
+
+ __block SDLSyncMsgVersion *currentSyncMsgVersion = [[SDLSyncMsgVersion alloc] initWithMajorVersion:5 minorVersion:0 patchVersion:0];
+
+ beforeEach(^{
+ testRegisterAppInterface = nil;
+ version = [[SDLSyncMsgVersion alloc] init];
+ chunk = [[SDLTTSChunk alloc] init];
+ info = [[SDLDeviceInfo alloc] init];
+ appInfo = [[SDLAppInfo alloc] init];
+ colorScheme = [[SDLTemplateColorScheme alloc] init];
+ });
-describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
- SDLRegisterAppInterface* testRequest = [[SDLRegisterAppInterface alloc] init];
-
- testRequest.syncMsgVersion = version;
- testRequest.appName = @"app56";
- testRequest.ttsName = [@[chunk] mutableCopy];
- testRequest.ngnMediaScreenAppName = @"whatisanngn";
- testRequest.vrSynonyms = [@[@"paraphrase of the original name"] mutableCopy];
- testRequest.isMediaApplication = @NO;
- testRequest.languageDesired = SDLLanguageNoNo;
- testRequest.hmiDisplayLanguageDesired = SDLLanguagePtPt;
- testRequest.appHMIType = [@[SDLAppHMITypeMessaging, SDLAppHMITypeInformation] copy];
- testRequest.hashID = @"gercd35grw2";
- testRequest.deviceInfo = info;
- testRequest.appID = @"123456789";
- testRequest.appInfo = appInfo;
-
- expect(testRequest.syncMsgVersion).to(equal(version));
- expect(testRequest.appName).to(equal(@"app56"));
- expect(testRequest.ttsName).to(equal([@[chunk] mutableCopy]));
- expect(testRequest.ngnMediaScreenAppName).to(equal(@"whatisanngn"));
- expect(testRequest.vrSynonyms).to(equal([@[@"paraphrase of the original name"] mutableCopy]));
- expect(testRequest.isMediaApplication).to(equal(@NO));
- expect(testRequest.languageDesired).to(equal(SDLLanguageNoNo));
- expect(testRequest.hmiDisplayLanguageDesired).to(equal(SDLLanguagePtPt));
- expect(testRequest.appHMIType).to(equal([@[SDLAppHMITypeMessaging, SDLAppHMITypeInformation] copy]));
- expect(testRequest.hashID).to(equal(@"gercd35grw2"));
- expect(testRequest.deviceInfo).to(equal(info));
- expect(testRequest.appID).to(equal(@"123456789"));
- expect(testRequest.appInfo).to(equal(appInfo));
+ testRegisterAppInterface = [[SDLRegisterAppInterface alloc] init];
+
+ testRegisterAppInterface.syncMsgVersion = version;
+ testRegisterAppInterface.appName = appName;
+ testRegisterAppInterface.ttsName = @[chunk];
+ testRegisterAppInterface.ngnMediaScreenAppName = shortAppName;
+ testRegisterAppInterface.vrSynonyms = @[vrSynonyms];
+ testRegisterAppInterface.isMediaApplication = isMediaApp;
+ testRegisterAppInterface.languageDesired = language;
+ testRegisterAppInterface.hmiDisplayLanguageDesired = hmiDisplayLanguage;
+ testRegisterAppInterface.appHMIType = appTypes;
+ testRegisterAppInterface.hashID = resumeHash;
+ testRegisterAppInterface.deviceInfo = info;
+ testRegisterAppInterface.fullAppID = fullAppId;
+ testRegisterAppInterface.appID = appId;
+ testRegisterAppInterface.appInfo = appInfo;
+ testRegisterAppInterface.dayColorScheme = colorScheme;
+ testRegisterAppInterface.nightColorScheme = colorScheme;
+
+ expect(testRegisterAppInterface.syncMsgVersion).to(equal(version));
+ expect(testRegisterAppInterface.appName).to(equal(appName));
+ expect(testRegisterAppInterface.ttsName).to(contain(chunk));
+ expect(testRegisterAppInterface.ngnMediaScreenAppName).to(equal(shortAppName));
+ expect(testRegisterAppInterface.vrSynonyms).to(contain(vrSynonyms));
+ expect(testRegisterAppInterface.isMediaApplication).to(equal(isMediaApp));
+ expect(testRegisterAppInterface.languageDesired).to(equal(language));
+ expect(testRegisterAppInterface.hmiDisplayLanguageDesired).to(equal(hmiDisplayLanguage));
+ expect(testRegisterAppInterface.appHMIType).to(equal(appTypes));
+ expect(testRegisterAppInterface.hashID).to(equal(resumeHash));
+ expect(testRegisterAppInterface.deviceInfo).to(equal(info));
+ expect(testRegisterAppInterface.fullAppID).to(equal(fullAppId));
+ expect(testRegisterAppInterface.appID).to(equal(appId));
+ expect(testRegisterAppInterface.appInfo).to(equal(appInfo));
+ expect(testRegisterAppInterface.dayColorScheme).to(equal(colorScheme));
+ expect(testRegisterAppInterface.nightColorScheme).to(equal(colorScheme));
});
-
- it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary* dict = [@{SDLNameRequest:
+
+ it(@"Should get correctly when initialized with a dictionary", ^ {
+ NSDictionary* dict = @{SDLNameRequest:
@{SDLNameParameters:
@{SDLNameSyncMessageVersion:version,
- SDLNameAppName:@"app56",
+ SDLNameAppName:appName,
SDLNameTTSName:[@[chunk] mutableCopy],
- SDLNameNGNMediaScreenAppName:@"whatisanngn",
- SDLNameVRSynonyms:[@[@"paraphrase of the original name"] mutableCopy],
- SDLNameIsMediaApplication:@NO,
+ SDLNameNGNMediaScreenAppName:shortAppName,
+ SDLNameVRSynonyms:@[vrSynonyms],
+ SDLNameIsMediaApplication:isMediaApp,
SDLNameLanguageDesired:SDLLanguageNoNo,
SDLNameHMIDisplayLanguageDesired:SDLLanguagePtPt,
- SDLNameAppHMIType:[@[SDLAppHMITypeMessaging, SDLAppHMITypeInformation] copy],
- SDLNameHashId:@"gercd35grw2",
+ SDLNameAppHMIType:appTypes,
+ SDLNameHashId:resumeHash,
SDLNameDeviceInfo:info,
- SDLNameAppId:@"123456789",
- SDLNameAppInfo:appInfo},
- SDLNameOperationName:SDLNameRegisterAppInterface}} mutableCopy];
- SDLRegisterAppInterface* testRequest = [[SDLRegisterAppInterface alloc] initWithDictionary:dict];
-
- expect(testRequest.syncMsgVersion).to(equal(version));
- expect(testRequest.appName).to(equal(@"app56"));
- expect(testRequest.ttsName).to(equal([@[chunk] mutableCopy]));
- expect(testRequest.ngnMediaScreenAppName).to(equal(@"whatisanngn"));
- expect(testRequest.vrSynonyms).to(equal([@[@"paraphrase of the original name"] mutableCopy]));
- expect(testRequest.isMediaApplication).to(equal(@NO));
- expect(testRequest.languageDesired).to(equal(SDLLanguageNoNo));
- expect(testRequest.hmiDisplayLanguageDesired).to(equal(SDLLanguagePtPt));
- expect(testRequest.appHMIType).to(equal([@[SDLAppHMITypeMessaging, SDLAppHMITypeInformation] copy]));
- expect(testRequest.hashID).to(equal(@"gercd35grw2"));
- expect(testRequest.deviceInfo).to(equal(info));
- expect(testRequest.appID).to(equal(@"123456789"));
- expect(testRequest.appInfo).to(equal(appInfo));
+ SDLNameFullAppID:fullAppId,
+ SDLNameAppId:appId,
+ SDLNameAppInfo:appInfo,
+ SDLNameDayColorScheme: colorScheme,
+ SDLNameNightColorScheme: colorScheme,
+ },
+ SDLNameOperationName:SDLNameRegisterAppInterface}};
+ SDLRegisterAppInterface* testRegisterAppInterface = [[SDLRegisterAppInterface alloc] initWithDictionary:dict];
+
+ expect(testRegisterAppInterface.syncMsgVersion).to(equal(version));
+ expect(testRegisterAppInterface.appName).to(match(appName));
+ expect(testRegisterAppInterface.ttsName).to(equal([@[chunk] mutableCopy]));
+ expect(testRegisterAppInterface.ngnMediaScreenAppName).to(match(shortAppName));
+ expect(testRegisterAppInterface.vrSynonyms).to(equal(@[vrSynonyms]));
+ expect(testRegisterAppInterface.isMediaApplication).to(equal(isMediaApp));
+ expect(testRegisterAppInterface.languageDesired).to(equal(SDLLanguageNoNo));
+ expect(testRegisterAppInterface.hmiDisplayLanguageDesired).to(equal(SDLLanguagePtPt));
+ expect(testRegisterAppInterface.appHMIType).to(equal(appTypes));
+ expect(testRegisterAppInterface.hashID).to(match(resumeHash));
+ expect(testRegisterAppInterface.deviceInfo).to(equal(info));
+ expect(testRegisterAppInterface.fullAppID).to(match(fullAppId));
+ expect(testRegisterAppInterface.appID).to(match(appId));
+ expect(testRegisterAppInterface.appInfo).to(equal(appInfo));
+ expect(testRegisterAppInterface.dayColorScheme).to(equal(colorScheme));
+ expect(testRegisterAppInterface.nightColorScheme).to(equal(colorScheme));
});
-
- it(@"Should return nil if not set", ^ {
- SDLRegisterAppInterface* testRequest = [[SDLRegisterAppInterface alloc] init];
-
- expect(testRequest.syncMsgVersion).to(beNil());
- expect(testRequest.appName).to(beNil());
- expect(testRequest.ttsName).to(beNil());
- expect(testRequest.ngnMediaScreenAppName).to(beNil());
- expect(testRequest.vrSynonyms).to(beNil());
- expect(testRequest.isMediaApplication).to(beNil());
- expect(testRequest.languageDesired).to(beNil());
- expect(testRequest.hmiDisplayLanguageDesired).to(beNil());
- expect(testRequest.appHMIType).to(beNil());
- expect(testRequest.hashID).to(beNil());
- expect(testRequest.deviceInfo).to(beNil());
- expect(testRequest.appID).to(beNil());
- expect(testRequest.appInfo).to(beNil());
+
+ describe(@"initializers", ^{
+ it(@"init", ^{
+ testRegisterAppInterface = [[SDLRegisterAppInterface alloc] init];
+
+ expect(testRegisterAppInterface.syncMsgVersion).to(beNil());
+ expect(testRegisterAppInterface.appName).to(beNil());
+ expect(testRegisterAppInterface.ttsName).to(beNil());
+ expect(testRegisterAppInterface.ngnMediaScreenAppName).to(beNil());
+ expect(testRegisterAppInterface.vrSynonyms).to(beNil());
+ expect(testRegisterAppInterface.isMediaApplication).to(beNil());
+ expect(testRegisterAppInterface.languageDesired).to(beNil());
+ expect(testRegisterAppInterface.hmiDisplayLanguageDesired).to(beNil());
+ expect(testRegisterAppInterface.appHMIType).to(beNil());
+ expect(testRegisterAppInterface.hashID).to(beNil());
+ expect(testRegisterAppInterface.deviceInfo).to(beNil());
+ expect(testRegisterAppInterface.appID).to(beNil());
+ expect(testRegisterAppInterface.fullAppID).to(beNil());
+ expect(testRegisterAppInterface.appInfo).to(beNil());
+ expect(testRegisterAppInterface.dayColorScheme).to(beNil());
+ expect(testRegisterAppInterface.nightColorScheme).to(beNil());
+ });
+
+ it(@"initWithLifecycleConfiguration:", ^{
+ SDLLifecycleConfiguration *testLifecyleConfiguration = [SDLLifecycleConfiguration defaultConfigurationWithAppName:appName fullAppId:fullAppId];
+ testLifecyleConfiguration.resumeHash = resumeHash;
+ testLifecyleConfiguration.appType = SDLAppHMITypeSocial;
+ testLifecyleConfiguration.additionalAppTypes = appTypes;
+ testLifecyleConfiguration.language = language;
+ testLifecyleConfiguration.shortAppName = shortAppName;
+ testLifecyleConfiguration.ttsName = @[chunk];
+ testLifecyleConfiguration.voiceRecognitionCommandNames = @[vrSynonyms];
+ testLifecyleConfiguration.dayColorScheme = colorScheme;
+ testLifecyleConfiguration.nightColorScheme = colorScheme;
+
+ SDLRegisterAppInterface *testRegisterAppInterface = [[SDLRegisterAppInterface alloc] initWithLifecycleConfiguration:testLifecyleConfiguration];
+ expect(testRegisterAppInterface.fullAppID).to(match(fullAppId));
+ expect(testRegisterAppInterface.appID).to(match(expectedAppId));
+ expect(testRegisterAppInterface.syncMsgVersion).to(equal(currentSyncMsgVersion));
+ expect(testRegisterAppInterface.appName).to(equal(appName));
+ expect(testRegisterAppInterface.ttsName).to(contain(chunk));
+ expect(testRegisterAppInterface.ngnMediaScreenAppName).to(equal(shortAppName));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeSocial));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeMedia));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeNavigation));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeInformation));
+ expect(testRegisterAppInterface.isMediaApplication).to(equal(@YES));
+ expect(testRegisterAppInterface.hashID).to(match(resumeHash));
+ expect(testRegisterAppInterface.languageDesired).to(match(language));
+ expect(testRegisterAppInterface.hmiDisplayLanguageDesired).to(match(language));
+ expect(testRegisterAppInterface.vrSynonyms).to(contain(vrSynonyms));
+ expect(testRegisterAppInterface.deviceInfo).toNot(beNil());
+ expect(testRegisterAppInterface.appInfo).toNot(beNil());
+ expect(testRegisterAppInterface.dayColorScheme).to(equal(colorScheme));
+ expect(testRegisterAppInterface.nightColorScheme).to(equal(colorScheme));
+ });
+
+ it(@"initWithAppName:appId:languageDesired:", ^{
+ SDLRegisterAppInterface *testRegisterAppInterface = [[SDLRegisterAppInterface alloc] initWithAppName:appName appId:appId languageDesired:language];
+
+ expect(testRegisterAppInterface.fullAppID).to(beNil());
+ expect(testRegisterAppInterface.appID).to(match(appId));
+ expect(testRegisterAppInterface.syncMsgVersion).to(equal(currentSyncMsgVersion));
+ expect(testRegisterAppInterface.appName).to(equal(appName));
+ expect(testRegisterAppInterface.ttsName).to(beNil());
+ expect(testRegisterAppInterface.ngnMediaScreenAppName).to(beNil());
+ expect(testRegisterAppInterface.appHMIType).to(beNil());
+ expect(testRegisterAppInterface.isMediaApplication).to(equal(@NO));
+ expect(testRegisterAppInterface.hashID).to(beNil());
+ expect(testRegisterAppInterface.languageDesired).to(equal(language));
+ expect(testRegisterAppInterface.hmiDisplayLanguageDesired).to(equal(language));
+ expect(testRegisterAppInterface.vrSynonyms).to(beNil());
+ expect(testRegisterAppInterface.deviceInfo).toNot(beNil());
+ expect(testRegisterAppInterface.appInfo).toNot(beNil());
+ expect(testRegisterAppInterface.dayColorScheme).to(beNil());
+ expect(testRegisterAppInterface.nightColorScheme).to(beNil());
+ });
+
+ it(@"initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:", ^{
+ SDLRegisterAppInterface *testRegisterAppInterface = [[SDLRegisterAppInterface alloc] initWithAppName:appName appId:appId languageDesired:language isMediaApp:isMediaApp appTypes:appTypes shortAppName:shortAppName];
+
+ expect(testRegisterAppInterface.fullAppID).to(beNil());
+ expect(testRegisterAppInterface.appID).to(match(appId));
+ expect(testRegisterAppInterface.syncMsgVersion).to(equal(currentSyncMsgVersion));
+ expect(testRegisterAppInterface.appName).to(equal(appName));
+ expect(testRegisterAppInterface.ttsName).to(beNil());
+ expect(testRegisterAppInterface.ngnMediaScreenAppName).to(equal(shortAppName));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeMedia));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeNavigation));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeInformation));
+ expect(testRegisterAppInterface.isMediaApplication).to(equal(isMediaApp));
+ expect(testRegisterAppInterface.hashID).to(beNil());
+ expect(testRegisterAppInterface.languageDesired).to(equal(language));
+ expect(testRegisterAppInterface.hmiDisplayLanguageDesired).to(equal(language));
+ expect(testRegisterAppInterface.vrSynonyms).to(beNil());
+ expect(testRegisterAppInterface.deviceInfo).toNot(beNil());
+ expect(testRegisterAppInterface.appInfo).toNot(beNil());
+ expect(testRegisterAppInterface.dayColorScheme).to(beNil());
+ expect(testRegisterAppInterface.nightColorScheme).to(beNil());
+ });
+ it(@"initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLRegisterAppInterface *testRegisterAppInterface = [[SDLRegisterAppInterface alloc] initWithAppName:appName appId:appId languageDesired:language isMediaApp:isMediaApp appTypes:appTypes shortAppName:shortAppName ttsName:@[chunk] vrSynonyms:@[vrSynonyms] hmiDisplayLanguageDesired:hmiDisplayLanguage resumeHash:resumeHash];
+
+ expect(testRegisterAppInterface.fullAppID).to(beNil());
+ expect(testRegisterAppInterface.appID).to(match(appId));
+ expect(testRegisterAppInterface.syncMsgVersion).to(equal(currentSyncMsgVersion));
+ expect(testRegisterAppInterface.appName).to(equal(appName));
+ expect(testRegisterAppInterface.ttsName).to(contain(chunk));
+ expect(testRegisterAppInterface.ngnMediaScreenAppName).to(equal(shortAppName));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeMedia));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeNavigation));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeInformation));
+ expect(testRegisterAppInterface.isMediaApplication).to(equal(isMediaApp));
+ expect(testRegisterAppInterface.hashID).to(match(resumeHash));
+ expect(testRegisterAppInterface.languageDesired).to(equal(language));
+ expect(testRegisterAppInterface.hmiDisplayLanguageDesired).to(equal(hmiDisplayLanguage));
+ expect(testRegisterAppInterface.vrSynonyms).to(contain(vrSynonyms));
+ expect(testRegisterAppInterface.deviceInfo).toNot(beNil());
+ expect(testRegisterAppInterface.appInfo).toNot(beNil());
+ expect(testRegisterAppInterface.dayColorScheme).to(beNil());
+ expect(testRegisterAppInterface.nightColorScheme).to(beNil());
+ #pragma clang diagnostic pop
+ });
+
+ it(@"initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:", ^{
+ SDLRegisterAppInterface *testRegisterAppInterface = [[SDLRegisterAppInterface alloc] initWithAppName:appName appId:appId fullAppId:fullAppId languageDesired:language isMediaApp:isMediaApp appTypes:appTypes shortAppName:shortAppName ttsName:@[chunk] vrSynonyms:@[vrSynonyms] hmiDisplayLanguageDesired:hmiDisplayLanguage resumeHash:resumeHash dayColorScheme:colorScheme nightColorScheme:colorScheme];
+
+ expect(testRegisterAppInterface.fullAppID).to(match(fullAppId));
+ expect(testRegisterAppInterface.appID).to(match(appId));
+ expect(testRegisterAppInterface.syncMsgVersion).to(equal(currentSyncMsgVersion));
+ expect(testRegisterAppInterface.appName).to(equal(appName));
+ expect(testRegisterAppInterface.ttsName).to(contain(chunk));
+ expect(testRegisterAppInterface.ngnMediaScreenAppName).to(equal(shortAppName));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeMedia));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeNavigation));
+ expect(testRegisterAppInterface.appHMIType).to(contain(SDLAppHMITypeInformation));
+ expect(testRegisterAppInterface.isMediaApplication).to(equal(isMediaApp));
+ expect(testRegisterAppInterface.hashID).to(match(resumeHash));
+ expect(testRegisterAppInterface.languageDesired).to(equal(language));
+ expect(testRegisterAppInterface.hmiDisplayLanguageDesired).to(equal(hmiDisplayLanguage));
+ expect(testRegisterAppInterface.vrSynonyms).to(contain(vrSynonyms));
+ expect(testRegisterAppInterface.deviceInfo).toNot(beNil());
+ expect(testRegisterAppInterface.appInfo).toNot(beNil());
+ expect(testRegisterAppInterface.dayColorScheme).to(equal(colorScheme));
+ expect(testRegisterAppInterface.nightColorScheme).to(equal(colorScheme));
+ });
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetDisplayLayoutSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetDisplayLayoutSpec.m
index ed712dede..60880f283 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetDisplayLayoutSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetDisplayLayoutSpec.m
@@ -2,40 +2,75 @@
// SDLSetDisplayLayoutSpec.m
// SmartDeviceLink
-
-#import <Foundation/Foundation.h>
-
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
-#import "SDLSetDisplayLayout.h"
#import "SDLNames.h"
+#import "SDLSetDisplayLayout.h"
+#import "SDLTemplateColorScheme.h"
QuickSpecBegin(SDLSetDisplayLayoutSpec)
-describe(@"Getter/Setter Tests", ^ {
- it(@"Should set and get correctly", ^ {
- SDLSetDisplayLayout* testRequest = [[SDLSetDisplayLayout alloc] init];
-
- testRequest.displayLayout = @"wat";
-
- expect(testRequest.displayLayout).to(equal(@"wat"));
- });
-
- it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLNameRequest:
- @{SDLNameParameters:
- @{SDLNameDisplayLayout:@"wat"},
- SDLNameOperationName:SDLNameSetDisplayLayout}} mutableCopy];
- SDLSetDisplayLayout* testRequest = [[SDLSetDisplayLayout alloc] initWithDictionary:dict];
-
- expect(testRequest.displayLayout).to(equal(@"wat"));
+describe(@"SetDisplayLayout Tests", ^ {
+ __block SDLPredefinedLayout predefinedLayout = SDLPredefinedLayoutMedia;
+ __block NSString *otherLayout = @"test123";
+ __block SDLTemplateColorScheme *dayScheme = [[SDLTemplateColorScheme alloc] initWithPrimaryColor:[UIColor blueColor] secondaryColor:[UIColor blackColor] backgroundColor:[UIColor whiteColor]];
+ __block SDLTemplateColorScheme *nightScheme = [[SDLTemplateColorScheme alloc] initWithPrimaryColor:[UIColor blueColor] secondaryColor:[UIColor purpleColor] backgroundColor:[UIColor blackColor]];
+
+ describe(@"initializer tests", ^{
+ it(@"should initialize with initWithPredefinedLayout:", ^{
+ SDLSetDisplayLayout *testRequest = [[SDLSetDisplayLayout alloc] initWithPredefinedLayout:predefinedLayout];
+
+ expect(testRequest.displayLayout).to(equal(predefinedLayout));
+ expect(testRequest.dayColorScheme).to(beNil());
+ expect(testRequest.nightColorScheme).to(beNil());
+ });
+
+ it(@"should initialize with initWithLayout:", ^{
+ SDLSetDisplayLayout *testRequest = [[SDLSetDisplayLayout alloc] initWithLayout:otherLayout];
+
+ expect(testRequest.displayLayout).to(equal(otherLayout));
+ expect(testRequest.dayColorScheme).to(beNil());
+ expect(testRequest.nightColorScheme).to(beNil());
+ });
+
+ it(@"should initialize with initWithPredefinedLayout:dayColorScheme:nightColorScheme:", ^{
+ SDLSetDisplayLayout *testRequest = [[SDLSetDisplayLayout alloc] initWithPredefinedLayout:predefinedLayout dayColorScheme:dayScheme nightColorScheme:nightScheme];
+
+ expect(testRequest.displayLayout).to(equal(predefinedLayout));
+ expect(testRequest.dayColorScheme).to(equal(dayScheme));
+ expect(testRequest.nightColorScheme).to(equal(nightScheme));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary<NSString *, id> *dict = [@{SDLNameRequest:
+ @{SDLNameParameters:
+ @{SDLNameDisplayLayout:@"wat"},
+ SDLNameOperationName:SDLNameSetDisplayLayout}} mutableCopy];
+ SDLSetDisplayLayout* testRequest = [[SDLSetDisplayLayout alloc] initWithDictionary:dict];
+
+ expect(testRequest.displayLayout).to(equal(@"wat"));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLSetDisplayLayout* testRequest = [[SDLSetDisplayLayout alloc] init];
+
+ expect(testRequest.displayLayout).to(beNil());
+ });
});
-
- it(@"Should return nil if not set", ^ {
- SDLSetDisplayLayout* testRequest = [[SDLSetDisplayLayout alloc] init];
-
- expect(testRequest.displayLayout).to(beNil());
+
+ describe(@"getters/setter", ^{
+ it(@"Should set and get correctly", ^ {
+ SDLSetDisplayLayout* testRequest = [[SDLSetDisplayLayout alloc] init];
+
+ testRequest.displayLayout = otherLayout;
+ testRequest.dayColorScheme = dayScheme;
+ testRequest.nightColorScheme = nightScheme;
+
+ expect(testRequest.displayLayout).to(equal(otherLayout));
+ expect(testRequest.dayColorScheme).to(equal(dayScheme));
+ expect(testRequest.nightColorScheme).to(equal(nightScheme));
+ });
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetMediaClockTimerSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetMediaClockTimerSpec.m
index bf8243ab8..351a6e558 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetMediaClockTimerSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSetMediaClockTimerSpec.m
@@ -26,10 +26,12 @@ describe(@"Getter/Setter Tests", ^ {
testRequest.startTime = time1;
testRequest.endTime = time2;
testRequest.updateMode = SDLUpdateModeCountUp;
+ testRequest.audioStreamingIndicator = SDLAudioStreamingIndicatorPlayPause;
expect(testRequest.startTime).to(equal(time1));
expect(testRequest.endTime).to(equal(time2));
expect(testRequest.updateMode).to(equal(SDLUpdateModeCountUp));
+ expect(testRequest.audioStreamingIndicator).to(equal(SDLAudioStreamingIndicatorPlayPause));
});
it(@"Should get correctly when initialized", ^ {
@@ -37,13 +39,16 @@ describe(@"Getter/Setter Tests", ^ {
@{SDLNameParameters:
@{SDLNameStartTime:time1,
SDLNameEndTime:time2,
- SDLNameUpdateMode:SDLUpdateModeCountUp},
+ SDLNameUpdateMode:SDLUpdateModeCountUp,
+ SDLNameAudioStreamingIndicator:SDLAudioStreamingIndicatorPlayPause
+ },
SDLNameOperationName:SDLNameSetMediaClockTimer}} mutableCopy];
SDLSetMediaClockTimer* testRequest = [[SDLSetMediaClockTimer alloc] initWithDictionary:dict];
expect(testRequest.startTime).to(equal(time1));
expect(testRequest.endTime).to(equal(time2));
expect(testRequest.updateMode).to(equal(SDLUpdateModeCountUp));
+ expect(testRequest.audioStreamingIndicator).to(equal(SDLAudioStreamingIndicatorPlayPause));
});
it(@"Should return nil if not set", ^ {
@@ -52,6 +57,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.startTime).to(beNil());
expect(testRequest.endTime).to(beNil());
expect(testRequest.updateMode).to(beNil());
+ expect(testRequest.audioStreamingIndicator).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m
index e41d73cc8..cab6d5867 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLShowSpec.m
@@ -97,7 +97,7 @@ describe(@"Getter/Setter Tests", ^ {
__block SDLMetadataTags *testTags = nil;
beforeEach(^{
- testGraphic = [[SDLImage alloc] initWithName:@"test name"];
+ testGraphic = [[SDLImage alloc] initWithName:@"test name" isTemplate:false];
testCustomPresets = @[testString1];
testButton = [[SDLSoftButton alloc] initWithType:SDLSoftButtonTypeText text:@"Test Button" image:nil highlighted:NO buttonId:0 systemAction:nil handler:nil];
testSoftButtons = @[testButton];
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m
index b85671aa4..78d4fc072 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m
@@ -16,141 +16,232 @@ QuickSpecBegin(SDLSubscribeVehicleDataSpec)
describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] init];
-
- testRequest.gps = @YES;
- testRequest.speed = @NO;
- testRequest.rpm = @YES;
- testRequest.fuelLevel = @NO;
- testRequest.fuelLevel_State = @YES;
- testRequest.instantFuelConsumption = @NO;
- testRequest.externalTemperature = @YES;
- testRequest.prndl = @YES;
- testRequest.tirePressure = @NO;
- testRequest.odometer = @YES;
+
+ testRequest.accPedalPosition = @YES;
+ testRequest.airbagStatus = @NO;
testRequest.beltStatus = @NO;
testRequest.bodyInformation = @YES;
+ testRequest.clusterModeStatus = @NO;
testRequest.deviceStatus = @NO;
testRequest.driverBraking = @YES;
- testRequest.wiperStatus = @NO;
- testRequest.headLampStatus = @YES;
- testRequest.engineTorque = @NO;
- testRequest.accPedalPosition = @YES;
- testRequest.steeringWheelAngle = @NO;
testRequest.eCallInfo = @YES;
- testRequest.airbagStatus = @NO;
+ testRequest.electronicParkBrakeStatus = @YES;
testRequest.emergencyEvent = @YES;
- testRequest.clusterModeStatus = @NO;
+ testRequest.engineOilLife = @YES;
+ testRequest.engineTorque = @NO;
+ testRequest.externalTemperature = @YES;
+ testRequest.fuelLevel = @NO;
+ testRequest.fuelLevel_State = @YES;
+ testRequest.fuelRange = @YES;
+ testRequest.gps = @YES;
+ testRequest.headLampStatus = @YES;
+ testRequest.instantFuelConsumption = @NO;
testRequest.myKey = @YES;
-
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.speed).to(equal(@NO));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@NO));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@NO));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@NO));
- expect(testRequest.odometer).to(equal(@YES));
+ testRequest.odometer = @YES;
+ testRequest.prndl = @YES;
+ testRequest.rpm = @YES;
+ testRequest.speed = @NO;
+ testRequest.steeringWheelAngle = @NO;
+ testRequest.tirePressure = @NO;
+ testRequest.turnSignal = @YES;
+ testRequest.wiperStatus = @NO;
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@NO));
expect(testRequest.beltStatus).to(equal(@NO));
expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@NO));
expect(testRequest.deviceStatus).to(equal(@NO));
expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@NO));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@NO));
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@NO));
expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@NO));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@NO));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@NO));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@NO));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@NO));
expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@NO));
+ expect(testRequest.steeringWheelAngle).to(equal(@NO));
+ expect(testRequest.tirePressure).to(equal(@NO));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@NO));
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLNameRequest:
- @{SDLNameParameters:
- @{SDLNameGPS:@YES,
- SDLNameSpeed:@NO,
- SDLNameRPM:@YES,
- SDLNameFuelLevel:@NO,
- SDLNameFuelLevelState:@YES,
- SDLNameInstantFuelConsumption:@NO,
- SDLNameExternalTemperature:@YES,
- SDLNamePRNDL:@YES,
- SDLNameTirePressure:@NO,
- SDLNameOdometer:@YES,
- SDLNameBeltStatus:@NO,
- SDLNameBodyInformation:@YES,
- SDLNameDeviceStatus:@NO,
- SDLNameDriverBraking:@YES,
- SDLNameWiperStatus:@NO,
- SDLNameHeadLampStatus:@YES,
- SDLNameEngineTorque:@NO,
- SDLNameAccelerationPedalPosition:@YES,
- SDLNameSteeringWheelAngle:@NO,
- SDLNameECallInfo:@YES,
- SDLNameAirbagStatus:@NO,
- SDLNameEmergencyEvent:@YES,
- SDLNameClusterModeStatus:@NO,
- SDLNameMyKey:@YES},
- SDLNameOperationName:SDLNameSubscribeVehicleData}} mutableCopy];
+ NSDictionary<NSString *, id> *dict = @{SDLNameRequest:
+ @{SDLNameParameters:
+ @{SDLNameAccelerationPedalPosition:@YES,
+ SDLNameAirbagStatus:@YES,
+ SDLNameBeltStatus:@YES,
+ SDLNameBodyInformation:@YES,
+ SDLNameClusterModeStatus:@YES,
+ SDLNameDeviceStatus:@YES,
+ SDLNameDriverBraking:@YES,
+ SDLNameECallInfo:@YES,
+ SDLNameElectronicParkBrakeStatus: @YES,
+ SDLNameEmergencyEvent:@NO,
+ SDLNameEngineOilLife:@YES,
+ SDLNameEngineTorque:@YES,
+ SDLNameExternalTemperature:@NO,
+ SDLNameFuelLevel:@YES,
+ SDLNameFuelLevelState:@YES,
+ SDLNameFuelRange:@YES,
+ SDLNameGPS:@YES,
+ SDLNameHeadLampStatus:@YES,
+ SDLNameInstantFuelConsumption:@YES,
+ SDLNameMyKey:@YES,
+ SDLNameOdometer:@YES,
+ SDLNamePRNDL:@YES,
+ SDLNameRPM:@YES,
+ SDLNameSpeed:@YES,
+ SDLNameSteeringWheelAngle:@NO,
+ SDLNameTirePressure:@YES,
+ SDLNameTurnSignal:@NO,
+ SDLNameWiperStatus:@NO},
+ SDLNameOperationName:SDLNameSubscribeVehicleData}};
SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithDictionary:dict];
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.speed).to(equal(@NO));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@NO));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@NO));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@NO));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@NO));
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@NO));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@NO));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@NO));
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@NO));
expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@NO));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@NO));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@NO));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@NO));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@NO));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@NO));
+ expect(testRequest.wiperStatus).to(equal(@NO));
});
-
- it(@"Should return nil if not set", ^ {
+});
+
+describe(@"initializers", ^{
+ context(@"init", ^{
SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] init];
-
- expect(testRequest.gps).to(beNil());
- expect(testRequest.speed).to(beNil());
- expect(testRequest.rpm).to(beNil());
- expect(testRequest.fuelLevel).to(beNil());
- expect(testRequest.fuelLevel_State).to(beNil());
- expect(testRequest.instantFuelConsumption).to(beNil());
- expect(testRequest.externalTemperature).to(beNil());
- expect(testRequest.prndl).to(beNil());
- expect(testRequest.tirePressure).to(beNil());
- expect(testRequest.odometer).to(beNil());
+
+ expect(testRequest.accPedalPosition).to(beNil());
+ expect(testRequest.airbagStatus).to(beNil());
expect(testRequest.beltStatus).to(beNil());
expect(testRequest.bodyInformation).to(beNil());
+ expect(testRequest.clusterModeStatus).to(beNil());
expect(testRequest.deviceStatus).to(beNil());
expect(testRequest.driverBraking).to(beNil());
- expect(testRequest.wiperStatus).to(beNil());
- expect(testRequest.headLampStatus).to(beNil());
- expect(testRequest.engineTorque).to(beNil());
- expect(testRequest.accPedalPosition).to(beNil());
- expect(testRequest.steeringWheelAngle).to(beNil());
expect(testRequest.eCallInfo).to(beNil());
- expect(testRequest.airbagStatus).to(beNil());
+ expect(testRequest.electronicParkBrakeStatus).to(beNil());
expect(testRequest.emergencyEvent).to(beNil());
- expect(testRequest.clusterModeStatus).to(beNil());
+ expect(testRequest.engineOilLife).to(beNil());
+ expect(testRequest.engineTorque).to(beNil());
+ expect(testRequest.externalTemperature).to(beNil());
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.gps).to(beNil());
+ expect(testRequest.headLampStatus).to(beNil());
+ expect(testRequest.instantFuelConsumption).to(beNil());
expect(testRequest.myKey).to(beNil());
+ expect(testRequest.odometer).to(beNil());
+ expect(testRequest.prndl).to(beNil());
+ expect(testRequest.rpm).to(beNil());
+ expect(testRequest.speed).to(beNil());
+ expect(testRequest.steeringWheelAngle).to(beNil());
+ expect(testRequest.tirePressure).to(beNil());
+ expect(testRequest.turnSignal).to(beNil());
+ expect(testRequest.wiperStatus).to(beNil());
+ });
+
+ context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
+ SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES wiperStatus:YES];
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
+
+ context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES emergencyEvent:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:NO gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES wiperStatus:YES];
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@NO));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@NO));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@NO));
+ expect(testRequest.fuelRange).to(equal(@NO));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@NO));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ #pragma clang diagnostic pop
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSystemRequestSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSystemRequestSpec.m
index d7ccade49..80b1543e8 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSystemRequestSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSystemRequestSpec.m
@@ -15,33 +15,58 @@
QuickSpecBegin(SDLSystemRequestSpec)
describe(@"Getter/Setter Tests", ^ {
+ __block SDLRequestType testRequestType = SDLRequestTypeAuthenticationRequest;
+ __block NSString *testSubType = @"subtype";
+ __block NSString *testFileName = @"AnotherFile";
+
+ describe(@"initializers", ^{
+ it(@"should get correctly when initialized with dictionary", ^ {
+ NSMutableDictionary* dict = [@{SDLNameRequest:
+ @{SDLNameParameters:
+ @{SDLNameRequestType:SDLRequestTypeAuthenticationRequest,
+ SDLNameRequestSubType: testSubType,
+ SDLNameFilename:testFileName},
+ SDLNameOperationName:SDLNameSystemRequest}} mutableCopy];
+ SDLSystemRequest* testRequest = [[SDLSystemRequest alloc] initWithDictionary:dict];
+
+ expect(testRequest.requestType).to(equal(testRequestType));
+ expect(testRequest.requestSubType).to(equal(testSubType));
+ expect(testRequest.fileName).to(equal(testFileName));
+ });
+
+ it(@"should be correctly initialized with initWithRequestType:fileName:", ^{
+ SDLSystemRequest *testRequest = [[SDLSystemRequest alloc] initWithType:testRequestType fileName:testFileName];
+ expect(testRequest.requestType).to(equal(testRequestType));
+ expect(testRequest.requestSubType).to(beNil());
+ expect(testRequest.fileName).to(equal(testFileName));
+ });
+
+ it(@"should be correctly initialized with initWithProprietaryType:fileName:", ^{
+ SDLSystemRequest *testRequest = [[SDLSystemRequest alloc] initWithProprietaryType:testSubType fileName:testFileName];
+ expect(testRequest.requestType).to(equal(SDLRequestTypeOEMSpecific));
+ expect(testRequest.requestSubType).to(equal(testSubType));
+ expect(testRequest.fileName).to(equal(testFileName));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLSystemRequest* testRequest = [[SDLSystemRequest alloc] init];
+
+ expect(testRequest.requestType).to(beNil());
+ expect(testRequest.requestSubType).to(beNil());
+ expect(testRequest.fileName).to(beNil());
+ });
+ });
+
it(@"Should set and get correctly", ^ {
SDLSystemRequest* testRequest = [[SDLSystemRequest alloc] init];
- testRequest.requestType = SDLRequestTypeAuthenticationRequest;
- testRequest.fileName = @"AnotherFile";
-
- expect(testRequest.requestType).to(equal(SDLRequestTypeAuthenticationRequest));
- expect(testRequest.fileName).to(equal(@"AnotherFile"));
- });
-
- it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary* dict = [@{SDLNameRequest:
- @{SDLNameParameters:
- @{SDLNameRequestType:SDLRequestTypeAuthenticationRequest,
- SDLNameFilename:@"AnotherFile"},
- SDLNameOperationName:SDLNameSystemRequest}} mutableCopy];
- SDLSystemRequest* testRequest = [[SDLSystemRequest alloc] initWithDictionary:dict];
+ testRequest.requestType = testRequestType;
+ testRequest.requestSubType = testSubType;
+ testRequest.fileName = testFileName;
expect(testRequest.requestType).to(equal(SDLRequestTypeAuthenticationRequest));
- expect(testRequest.fileName).to(equal(@"AnotherFile"));
- });
-
- it(@"Should return nil if not set", ^ {
- SDLSystemRequest* testRequest = [[SDLSystemRequest alloc] init];
-
- expect(testRequest.requestType).to(beNil());
- expect(testRequest.fileName).to(beNil());
+ expect(testRequest.requestSubType).to(equal(testSubType));
+ expect(testRequest.fileName).to(equal(testFileName));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m
index 40ec363f8..bbb96614a 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m
@@ -17,140 +17,231 @@ describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
SDLUnsubscribeVehicleData* testRequest = [[SDLUnsubscribeVehicleData alloc] init];
- testRequest.gps = @YES;
- testRequest.speed = @YES;
- testRequest.rpm = @YES;
- testRequest.fuelLevel = @YES;
- testRequest.fuelLevel_State = @YES;
- testRequest.instantFuelConsumption = @YES;
- testRequest.externalTemperature = @YES;
- testRequest.prndl = @YES;
- testRequest.tirePressure = @YES;
- testRequest.odometer = @YES;
+ testRequest.accPedalPosition = @YES;
+ testRequest.airbagStatus = @YES;
testRequest.beltStatus = @YES;
testRequest.bodyInformation = @YES;
+ testRequest.clusterModeStatus = @YES;
testRequest.deviceStatus = @YES;
testRequest.driverBraking = @YES;
- testRequest.wiperStatus = @YES;
- testRequest.headLampStatus = @YES;
- testRequest.engineTorque = @YES;
- testRequest.accPedalPosition = @YES;
- testRequest.steeringWheelAngle = @YES;
testRequest.eCallInfo = @YES;
- testRequest.airbagStatus = @YES;
+ testRequest.electronicParkBrakeStatus = @YES;
testRequest.emergencyEvent = @YES;
- testRequest.clusterModeStatus = @YES;
+ testRequest.engineOilLife = @YES;
+ testRequest.engineTorque = @YES;
+ testRequest.externalTemperature = @YES;
+ testRequest.fuelLevel = @YES;
+ testRequest.fuelLevel_State = @YES;
+ testRequest.fuelRange = @YES;
+ testRequest.gps = @YES;
+ testRequest.headLampStatus = @YES;
+ testRequest.instantFuelConsumption = @YES;
testRequest.myKey = @YES;
-
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
+ testRequest.odometer = @YES;
+ testRequest.prndl = @YES;
+ testRequest.rpm = @YES;
+ testRequest.speed = @YES;
+ testRequest.steeringWheelAngle = @YES;
+ testRequest.tirePressure = @YES;
+ testRequest.turnSignal = @NO;
+ testRequest.wiperStatus = @YES;
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
expect(testRequest.beltStatus).to(equal(@YES));
expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
expect(testRequest.deviceStatus).to(equal(@YES));
expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@NO));
+ expect(testRequest.wiperStatus).to(equal(@YES));
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLNameRequest:
- @{SDLNameParameters:
- @{SDLNameGPS:@YES,
- SDLNameSpeed:@YES,
- SDLNameRPM:@YES,
- SDLNameFuelLevel:@YES,
- SDLNameFuelLevelState:@YES,
- SDLNameInstantFuelConsumption:@YES,
- SDLNameExternalTemperature:@YES,
- SDLNamePRNDL:@YES,
- SDLNameTirePressure:@YES,
- SDLNameOdometer:@YES,
- SDLNameBeltStatus:@YES,
- SDLNameBodyInformation:@YES,
- SDLNameDeviceStatus:@YES,
- SDLNameDriverBraking:@YES,
- SDLNameWiperStatus:@YES,
- SDLNameHeadLampStatus:@YES,
- SDLNameEngineTorque:@YES,
- SDLNameAccelerationPedalPosition:@YES,
- SDLNameSteeringWheelAngle:@YES,
- SDLNameECallInfo:@YES,
- SDLNameAirbagStatus:@YES,
- SDLNameEmergencyEvent:@YES,
- SDLNameClusterModeStatus:@YES,
- SDLNameMyKey:@YES},
- SDLNameOperationName:SDLNameUnsubscribeVehicleData}} mutableCopy];
+ NSDictionary<NSString *, id> *dict = @{SDLNameRequest:
+ @{SDLNameParameters:
+ @{SDLNameAccelerationPedalPosition:@YES,
+ SDLNameAirbagStatus:@YES,
+ SDLNameBeltStatus:@YES,
+ SDLNameBodyInformation:@YES,
+ SDLNameClusterModeStatus:@YES,
+ SDLNameDeviceStatus:@YES,
+ SDLNameDriverBraking:@YES,
+ SDLNameECallInfo:@YES,
+ SDLNameElectronicParkBrakeStatus: @YES,
+ SDLNameEmergencyEvent:@YES,
+ SDLNameEngineOilLife:@YES,
+ SDLNameEngineTorque:@YES,
+ SDLNameExternalTemperature:@YES,
+ SDLNameFuelLevel:@YES,
+ SDLNameFuelLevelState:@YES,
+ SDLNameFuelRange:@YES,
+ SDLNameGPS:@YES,
+ SDLNameHeadLampStatus:@YES,
+ SDLNameInstantFuelConsumption:@YES,
+ SDLNameMyKey:@YES,
+ SDLNameOdometer:@YES,
+ SDLNamePRNDL:@YES,
+ SDLNameRPM:@YES,
+ SDLNameSpeed:@YES,
+ SDLNameSteeringWheelAngle:@YES,
+ SDLNameTirePressure:@YES,
+ SDLNameTurnSignal:@YES,
+ SDLNameWiperStatus:@YES},
+ SDLNameOperationName:SDLNameUnsubscribeVehicleData}};
SDLUnsubscribeVehicleData* testRequest = [[SDLUnsubscribeVehicleData alloc] initWithDictionary:dict];
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
expect(testRequest.beltStatus).to(equal(@YES));
expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
expect(testRequest.deviceStatus).to(equal(@YES));
expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
});
-
- it(@"Should return nil if not set", ^ {
- SDLUnsubscribeVehicleData* testRequest = [[SDLUnsubscribeVehicleData alloc] init];
-
- expect(testRequest.gps).to(beNil());
- expect(testRequest.speed).to(beNil());
- expect(testRequest.rpm).to(beNil());
- expect(testRequest.fuelLevel).to(beNil());
- expect(testRequest.fuelLevel_State).to(beNil());
- expect(testRequest.instantFuelConsumption).to(beNil());
- expect(testRequest.externalTemperature).to(beNil());
- expect(testRequest.prndl).to(beNil());
- expect(testRequest.tirePressure).to(beNil());
- expect(testRequest.odometer).to(beNil());
+});
+
+describe(@"initializers", ^{
+ context(@"init", ^{
+ SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] init];
+
+ expect(testRequest.accPedalPosition).to(beNil());
+ expect(testRequest.airbagStatus).to(beNil());
expect(testRequest.beltStatus).to(beNil());
expect(testRequest.bodyInformation).to(beNil());
+ expect(testRequest.clusterModeStatus).to(beNil());
expect(testRequest.deviceStatus).to(beNil());
expect(testRequest.driverBraking).to(beNil());
- expect(testRequest.wiperStatus).to(beNil());
- expect(testRequest.headLampStatus).to(beNil());
- expect(testRequest.engineTorque).to(beNil());
- expect(testRequest.accPedalPosition).to(beNil());
- expect(testRequest.steeringWheelAngle).to(beNil());
expect(testRequest.eCallInfo).to(beNil());
- expect(testRequest.airbagStatus).to(beNil());
+ expect(testRequest.electronicParkBrakeStatus).to(beNil());
expect(testRequest.emergencyEvent).to(beNil());
- expect(testRequest.clusterModeStatus).to(beNil());
+ expect(testRequest.engineOilLife).to(beNil());
+ expect(testRequest.engineTorque).to(beNil());
+ expect(testRequest.externalTemperature).to(beNil());
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.gps).to(beNil());
+ expect(testRequest.headLampStatus).to(beNil());
+ expect(testRequest.instantFuelConsumption).to(beNil());
expect(testRequest.myKey).to(beNil());
+ expect(testRequest.odometer).to(beNil());
+ expect(testRequest.prndl).to(beNil());
+ expect(testRequest.rpm).to(beNil());
+ expect(testRequest.speed).to(beNil());
+ expect(testRequest.steeringWheelAngle).to(beNil());
+ expect(testRequest.tirePressure).to(beNil());
+ expect(testRequest.turnSignal).to(beNil());
+ expect(testRequest.wiperStatus).to(beNil());
+ });
+
+ context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:", ^{
+ SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES wiperStatus:YES];
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
+
+ context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES emergencyEvent:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES gps:YES headLampStatus:NO instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES wiperStatus:YES];
+
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@NO));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@NO));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@NO));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@NO));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@NO));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ #pragma clang diagnostic pop
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m
index 9831ec761..9d7a69713 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m
@@ -25,150 +25,172 @@ SDLAirbagStatus* airbag = [[SDLAirbagStatus alloc] init];
SDLEmergencyEvent* event = [[SDLEmergencyEvent alloc] init];
SDLClusterModeStatus* clusterMode = [[SDLClusterModeStatus alloc] init];
SDLMyKey* myKey = [[SDLMyKey alloc] init];
+SDLFuelRange* fuelRange = [[SDLFuelRange alloc] init];
describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
SDLGetVehicleDataResponse* testResponse = [[SDLGetVehicleDataResponse alloc] init];
-
- testResponse.gps = gps;
- testResponse.speed = @100;
- testResponse.rpm = @3;
- testResponse.fuelLevel = @99.9999;
- testResponse.fuelLevel_State = SDLComponentVolumeStatusFault;
- testResponse.instantFuelConsumption = @40.7;
- testResponse.externalTemperature = @0;
- testResponse.vin = @"6574839201";
- testResponse.prndl = SDLPRNDLPark;
- testResponse.tirePressure = tires;
- testResponse.odometer = @70000;
+
+ testResponse.accPedalPosition = @0;
+ testResponse.airbagStatus = airbag;
testResponse.beltStatus = belt;
testResponse.bodyInformation = body;
+ testResponse.clusterModeStatus = clusterMode;
testResponse.deviceStatus = device;
testResponse.driverBraking = SDLVehicleDataEventStatusNoEvent;
- testResponse.wiperStatus = SDLWiperStatusAutomaticHigh;
- testResponse.headLampStatus = headLamp;
- testResponse.engineTorque = @630.4;
- testResponse.accPedalPosition = @0;
- testResponse.steeringWheelAngle = @-1500;
testResponse.eCallInfo = eCall;
- testResponse.airbagStatus = airbag;
+ testResponse.electronicParkBrakeStatus = SDLElectronicParkBrakeStatusDriveActive;
testResponse.emergencyEvent = event;
- testResponse.clusterModeStatus = clusterMode;
+ testResponse.engineOilLife = @56.3;
+ testResponse.engineTorque = @630.4;
+ testResponse.externalTemperature = @0;
+ testResponse.fuelLevel = @99.9999;
+ testResponse.fuelLevel_State = SDLComponentVolumeStatusFault;
+ testResponse.fuelRange = @[fuelRange, fuelRange];
+ testResponse.gps = gps;
+ testResponse.headLampStatus = headLamp;
+ testResponse.instantFuelConsumption = @40.7;
testResponse.myKey = myKey;
-
- expect(testResponse.gps).to(equal(gps));
- expect(testResponse.speed).to(equal(@100));
- expect(testResponse.rpm).to(equal(@3));
- expect(testResponse.fuelLevel).to(equal(@99.9999));
- expect(testResponse.fuelLevel_State).to(equal(SDLComponentVolumeStatusFault));
- expect(testResponse.instantFuelConsumption).to(equal(@40.7));
- expect(testResponse.externalTemperature).to(equal(@0));
- expect(testResponse.vin).to(equal(@"6574839201"));
- expect(testResponse.prndl).to(equal(SDLPRNDLPark));
- expect(testResponse.tirePressure).to(equal(tires));
- expect(testResponse.odometer).to(equal(@70000));
+ testResponse.odometer = @70000;
+ testResponse.prndl = SDLPRNDLPark;
+ testResponse.rpm = @3;
+ testResponse.speed = @100;
+ testResponse.steeringWheelAngle = @-1500;
+ testResponse.tirePressure = tires;
+ testResponse.turnSignal = SDLTurnSignalBoth;
+ testResponse.vin = @"6574839201";
+ testResponse.wiperStatus = SDLWiperStatusAutomaticHigh;
+
+ expect(testResponse.accPedalPosition).to(equal(@0));
+ expect(testResponse.airbagStatus).to(equal(airbag));
expect(testResponse.beltStatus).to(equal(belt));
expect(testResponse.bodyInformation).to(equal(body));
+ expect(testResponse.clusterModeStatus).to(equal(clusterMode));
expect(testResponse.deviceStatus).to(equal(device));
expect(testResponse.driverBraking).to(equal(SDLVehicleDataEventStatusNoEvent));
- expect(testResponse.wiperStatus).to(equal(SDLWiperStatusAutomaticHigh));
- expect(testResponse.headLampStatus).to(equal(headLamp));
- expect(testResponse.engineTorque).to(equal(@630.4));
- expect(testResponse.accPedalPosition).to(equal(@0));
- expect(testResponse.steeringWheelAngle).to(equal(@-1500));
expect(testResponse.eCallInfo).to(equal(eCall));
- expect(testResponse.airbagStatus).to(equal(airbag));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
expect(testResponse.emergencyEvent).to(equal(event));
- expect(testResponse.clusterModeStatus).to(equal(clusterMode));
+ expect(testResponse.engineOilLife).to(equal(@56.3));
+ expect(testResponse.engineTorque).to(equal(@630.4));
+ expect(testResponse.externalTemperature).to(equal(@0));
+ expect(testResponse.fuelLevel).to(equal(@99.9999));
+ expect(testResponse.fuelLevel_State).to(equal(SDLComponentVolumeStatusFault));
+ expect(testResponse.fuelRange).to(equal(@[fuelRange, fuelRange]));
+ expect(testResponse.gps).to(equal(gps));
+ expect(testResponse.headLampStatus).to(equal(headLamp));
+ expect(testResponse.instantFuelConsumption).to(equal(@40.7));
expect(testResponse.myKey).to(equal(myKey));
+ expect(testResponse.odometer).to(equal(@70000));
+ expect(testResponse.prndl).to(equal(SDLPRNDLPark));
+ expect(testResponse.rpm).to(equal(@3));
+ expect(testResponse.speed).to(equal(@100));
+ expect(testResponse.steeringWheelAngle).to(equal(@-1500));
+ expect(testResponse.tirePressure).to(equal(tires));
+ expect(testResponse.turnSignal).to(equal(SDLTurnSignalBoth));
+ expect(testResponse.vin).to(equal(@"6574839201"));
+ expect(testResponse.wiperStatus).to(equal(SDLWiperStatusAutomaticHigh));
});
it(@"Should get correctly when initialized", ^ {
NSMutableDictionary* dict = [@{SDLNameNotification:
@{SDLNameParameters:
- @{SDLNameGPS:gps,
- SDLNameSpeed:@100,
- SDLNameRPM:@3,
- SDLNameFuelLevel:@99.9999,
- SDLNameFuelLevelState:SDLComponentVolumeStatusFault,
- SDLNameInstantFuelConsumption:@40.7,
- SDLNameExternalTemperature:@0,
- SDLNameVIN:@"6574839201",
- SDLNamePRNDL:SDLPRNDLPark,
- SDLNameTirePressure:tires,
- SDLNameOdometer:@70000,
- SDLNameBeltStatus:belt,
- SDLNameBodyInformation:body,
- SDLNameDeviceStatus:device,
- SDLNameDriverBraking:SDLVehicleDataEventStatusNoEvent,
- SDLNameWiperStatus:SDLWiperStatusAutomaticHigh,
- SDLNameHeadLampStatus:headLamp,
- SDLNameEngineTorque:@630.4,
- SDLNameAccelerationPedalPosition:@0,
- SDLNameSteeringWheelAngle:@-1500,
- SDLNameECallInfo:eCall,
- SDLNameAirbagStatus:airbag,
- SDLNameEmergencyEvent:event,
- SDLNameClusterModeStatus:clusterMode,
- SDLNameMyKey:myKey},
+ @{
+ SDLNameAccelerationPedalPosition:@0,
+ SDLNameAirbagStatus:airbag,
+ SDLNameBeltStatus:belt,
+ SDLNameBodyInformation:body,
+ SDLNameClusterModeStatus:clusterMode,
+ SDLNameDeviceStatus:device,
+ SDLNameDriverBraking:SDLVehicleDataEventStatusNoEvent,
+ SDLNameECallInfo:eCall,
+ SDLNameElectronicParkBrakeStatus:SDLElectronicParkBrakeStatusDriveActive,
+ SDLNameEmergencyEvent:event,
+ SDLNameEngineOilLife:@23.22,
+ SDLNameEngineTorque:@630.4,
+ SDLNameExternalTemperature:@0,
+ SDLNameFuelLevel:@99.9999,
+ SDLNameFuelLevelState:SDLComponentVolumeStatusFault,
+ SDLNameFuelRange:@[fuelRange],
+ SDLNameGPS:gps,
+ SDLNameHeadLampStatus:headLamp,
+ SDLNameInstantFuelConsumption:@40.7,
+ SDLNameMyKey:myKey,
+ SDLNameOdometer:@70000,
+ SDLNamePRNDL:SDLPRNDLPark,
+ SDLNameRPM:@3,
+ SDLNameSpeed:@100,
+ SDLNameSteeringWheelAngle:@-1500,
+ SDLNameTirePressure:tires,
+ SDLNameTurnSignal:SDLTurnSignalOff,
+ SDLNameVIN:@"6574839201",
+ SDLNameWiperStatus:SDLWiperStatusAutomaticHigh},
SDLNameOperationName:SDLNameGetVehicleData}} mutableCopy];
SDLGetVehicleDataResponse* testResponse = [[SDLGetVehicleDataResponse alloc] initWithDictionary:dict];
-
- expect(testResponse.gps).to(equal(gps));
- expect(testResponse.speed).to(equal(@100));
- expect(testResponse.rpm).to(equal(@3));
- expect(testResponse.fuelLevel).to(equal(@99.9999));
- expect(testResponse.fuelLevel_State).to(equal(SDLComponentVolumeStatusFault));
- expect(testResponse.instantFuelConsumption).to(equal(@40.7));
- expect(testResponse.externalTemperature).to(equal(@0));
- expect(testResponse.vin).to(equal(@"6574839201"));
- expect(testResponse.prndl).to(equal(SDLPRNDLPark));
- expect(testResponse.tirePressure).to(equal(tires));
- expect(testResponse.odometer).to(equal(@70000));
+
+ expect(testResponse.accPedalPosition).to(equal(@0));
+ expect(testResponse.airbagStatus).to(equal(airbag));
expect(testResponse.beltStatus).to(equal(belt));
expect(testResponse.bodyInformation).to(equal(body));
+ expect(testResponse.clusterModeStatus).to(equal(clusterMode));
expect(testResponse.deviceStatus).to(equal(device));
expect(testResponse.driverBraking).to(equal(SDLVehicleDataEventStatusNoEvent));
- expect(testResponse.wiperStatus).to(equal(SDLWiperStatusAutomaticHigh));
- expect(testResponse.headLampStatus).to(equal(headLamp));
- expect(testResponse.engineTorque).to(equal(@630.4));
- expect(testResponse.accPedalPosition).to(equal(@0));
- expect(testResponse.steeringWheelAngle).to(equal(@-1500));
expect(testResponse.eCallInfo).to(equal(eCall));
- expect(testResponse.airbagStatus).to(equal(airbag));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
expect(testResponse.emergencyEvent).to(equal(event));
- expect(testResponse.clusterModeStatus).to(equal(clusterMode));
+ expect(testResponse.engineOilLife).to(equal(@23.22));
+ expect(testResponse.engineTorque).to(equal(@630.4));
+ expect(testResponse.externalTemperature).to(equal(@0));
+ expect(testResponse.fuelLevel).to(equal(@99.9999));
+ expect(testResponse.fuelLevel_State).to(equal(SDLComponentVolumeStatusFault));
+ expect(testResponse.fuelRange).to(equal(@[fuelRange]));
+ expect(testResponse.gps).to(equal(gps));
+ expect(testResponse.headLampStatus).to(equal(headLamp));
+ expect(testResponse.instantFuelConsumption).to(equal(@40.7));
expect(testResponse.myKey).to(equal(myKey));
+ expect(testResponse.odometer).to(equal(@70000));
+ expect(testResponse.prndl).to(equal(SDLPRNDLPark));
+ expect(testResponse.rpm).to(equal(@3));
+ expect(testResponse.speed).to(equal(@100));
+ expect(testResponse.steeringWheelAngle).to(equal(@-1500));
+ expect(testResponse.tirePressure).to(equal(tires));
+ expect(testResponse.turnSignal).to(equal(SDLTurnSignalOff));
+ expect(testResponse.vin).to(equal(@"6574839201"));
+ expect(testResponse.wiperStatus).to(equal(SDLWiperStatusAutomaticHigh));
});
it(@"Should return nil if not set", ^ {
SDLGetVehicleDataResponse* testResponse = [[SDLGetVehicleDataResponse alloc] init];
- expect(testResponse.gps).to(beNil());
- expect(testResponse.speed).to(beNil());
- expect(testResponse.rpm).to(beNil());
- expect(testResponse.fuelLevel).to(beNil());
- expect(testResponse.fuelLevel_State).to(beNil());
- expect(testResponse.instantFuelConsumption).to(beNil());
- expect(testResponse.externalTemperature).to(beNil());
- expect(testResponse.vin).to(beNil());
- expect(testResponse.prndl).to(beNil());
- expect(testResponse.tirePressure).to(beNil());
- expect(testResponse.odometer).to(beNil());
+ expect(testResponse.accPedalPosition).to(beNil());
+ expect(testResponse.airbagStatus).to(beNil());
expect(testResponse.beltStatus).to(beNil());
expect(testResponse.bodyInformation).to(beNil());
+ expect(testResponse.clusterModeStatus).to(beNil());
expect(testResponse.deviceStatus).to(beNil());
expect(testResponse.driverBraking).to(beNil());
- expect(testResponse.wiperStatus).to(beNil());
- expect(testResponse.headLampStatus).to(beNil());
- expect(testResponse.engineTorque).to(beNil());
- expect(testResponse.accPedalPosition).to(beNil());
- expect(testResponse.steeringWheelAngle).to(beNil());
expect(testResponse.eCallInfo).to(beNil());
- expect(testResponse.airbagStatus).to(beNil());
+ expect(testResponse.electronicParkBrakeStatus).to(beNil());
expect(testResponse.emergencyEvent).to(beNil());
- expect(testResponse.clusterModeStatus).to(beNil());
+ expect(testResponse.engineOilLife).to(beNil());
+ expect(testResponse.engineTorque).to(beNil());
+ expect(testResponse.externalTemperature).to(beNil());
+ expect(testResponse.fuelLevel).to(beNil());
+ expect(testResponse.fuelLevel_State).to(beNil());
+ expect(testResponse.fuelRange).to(beNil());
+ expect(testResponse.gps).to(beNil());
+ expect(testResponse.headLampStatus).to(beNil());
+ expect(testResponse.instantFuelConsumption).to(beNil());
expect(testResponse.myKey).to(beNil());
+ expect(testResponse.odometer).to(beNil());
+ expect(testResponse.prndl).to(beNil());
+ expect(testResponse.rpm).to(beNil());
+ expect(testResponse.speed).to(beNil());
+ expect(testResponse.steeringWheelAngle).to(beNil());
+ expect(testResponse.tirePressure).to(beNil());
+ expect(testResponse.turnSignal).to(beNil());
+ expect(testResponse.vin).to(beNil());
+ expect(testResponse.wiperStatus).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLPutFileResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLPutFileResponseSpec.m
index 09ae52453..9fb2f42ad 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLPutFileResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLPutFileResponseSpec.m
@@ -18,15 +18,16 @@ describe(@"Getter/Setter Tests", ^ {
SDLPutFileResponse* testResponse = [[SDLPutFileResponse alloc] init];
testResponse.spaceAvailable = @1248;
-
+
expect(testResponse.spaceAvailable).to(equal(@1248));
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLNameResponse:
+ NSDictionary<NSString *, id> *dict = @{SDLNameResponse:
@{SDLNameParameters:
- @{SDLNameSpaceAvailable:@1248},
- SDLNameOperationName:SDLNamePutFile}} mutableCopy];
+ @{SDLNameSpaceAvailable:@1248,
+ },
+ SDLNameOperationName:SDLNamePutFile}};
SDLPutFileResponse* testResponse = [[SDLPutFileResponse alloc] initWithDictionary:dict];
expect(testResponse.spaceAvailable).to(equal(@1248));
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLRegisterAppInterfaceResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLRegisterAppInterfaceResponseSpec.m
index 2e2123c3f..9a4854fcc 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLRegisterAppInterfaceResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLRegisterAppInterfaceResponseSpec.m
@@ -45,6 +45,7 @@ describe(@"Getter/Setter Tests", ^ {
testResponse.hmiCapabilities = hmiCapabilities;
testResponse.sdlVersion = @"sdlVersion";
testResponse.systemSoftwareVersion = @"systemSoftwareVersion";
+ testResponse.iconResumed = @YES;
expect(testResponse.syncMsgVersion).to(equal(version));
expect(testResponse.language).to(equal(SDLLanguageEsMx));
@@ -64,6 +65,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.hmiCapabilities).to(equal(hmiCapabilities));
expect(testResponse.sdlVersion).to(equal(@"sdlVersion"));
expect(testResponse.systemSoftwareVersion).to(equal(@"systemSoftwareVersion"));
+ expect(testResponse.iconResumed).to(beTrue());
});
it(@"Should get correctly when initialized", ^ {
@@ -86,7 +88,8 @@ describe(@"Getter/Setter Tests", ^ {
SDLNameSupportedDiagnosticModes:@[@67, @99, @111],
SDLNameHMICapabilities: hmiCapabilities,
SDLNameSDLVersion: @"sdlVersion",
- SDLNameSystemSoftwareVersion: @"systemSoftwareVersion"
+ SDLNameSystemSoftwareVersion: @"systemSoftwareVersion",
+ SDLNameIconResumed: @YES,
},
SDLNameOperationName:SDLNameRegisterAppInterface}};
SDLRegisterAppInterfaceResponse* testResponse = [[SDLRegisterAppInterfaceResponse alloc] initWithDictionary:dict];
@@ -109,6 +112,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.hmiCapabilities).to(equal(hmiCapabilities));
expect(testResponse.sdlVersion).to(equal(@"sdlVersion"));
expect(testResponse.systemSoftwareVersion).to(equal(@"systemSoftwareVersion"));
+ expect(testResponse.iconResumed).to(beTrue());
});
it(@"Should return nil if not set", ^ {
@@ -132,6 +136,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.hmiCapabilities).to(beNil());
expect(testResponse.sdlVersion).to(beNil());
expect(testResponse.systemSoftwareVersion).to(beNil());
+ expect(testResponse.iconResumed).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m
index a8b890a8d..aa8000b14 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m
@@ -20,141 +20,161 @@ SDLVehicleDataResult* vehicleDataResult = [[SDLVehicleDataResult alloc] init];
describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
SDLSubscribeVehicleDataResponse* testResponse = [[SDLSubscribeVehicleDataResponse alloc] init];
-
- testResponse.gps = vehicleDataResult;
- testResponse.speed = vehicleDataResult;
- testResponse.rpm = vehicleDataResult;
- testResponse.fuelLevel = vehicleDataResult;
- testResponse.fuelLevel_State = vehicleDataResult;
- testResponse.instantFuelConsumption = vehicleDataResult;
- testResponse.externalTemperature = vehicleDataResult;
- testResponse.prndl = vehicleDataResult;
- testResponse.tirePressure = vehicleDataResult;
- testResponse.odometer = vehicleDataResult;
+
+ testResponse.accPedalPosition = vehicleDataResult;
+ testResponse.airbagStatus = vehicleDataResult;
testResponse.beltStatus = vehicleDataResult;
testResponse.bodyInformation = vehicleDataResult;
+ testResponse.clusterModes = vehicleDataResult;
testResponse.deviceStatus = vehicleDataResult;
testResponse.driverBraking = vehicleDataResult;
- testResponse.wiperStatus = vehicleDataResult;
- testResponse.headLampStatus = vehicleDataResult;
- testResponse.engineTorque = vehicleDataResult;
- testResponse.accPedalPosition = vehicleDataResult;
- testResponse.steeringWheelAngle = vehicleDataResult;
testResponse.eCallInfo = vehicleDataResult;
- testResponse.airbagStatus = vehicleDataResult;
+ testResponse.electronicParkBrakeStatus = vehicleDataResult;
testResponse.emergencyEvent = vehicleDataResult;
- testResponse.clusterModes = vehicleDataResult;
+ testResponse.engineOilLife = vehicleDataResult;
+ testResponse.engineTorque = vehicleDataResult;
+ testResponse.externalTemperature = vehicleDataResult;
+ testResponse.fuelLevel = vehicleDataResult;
+ testResponse.fuelLevel_State = vehicleDataResult;
+ testResponse.fuelRange = vehicleDataResult;
+ testResponse.gps = vehicleDataResult;
+ testResponse.headLampStatus = vehicleDataResult;
+ testResponse.instantFuelConsumption = vehicleDataResult;
testResponse.myKey = vehicleDataResult;
-
- expect(testResponse.gps).to(equal(vehicleDataResult));
- expect(testResponse.speed).to(equal(vehicleDataResult));
- expect(testResponse.rpm).to(equal(vehicleDataResult));
- expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
- expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
- expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
- expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
- expect(testResponse.prndl).to(equal(vehicleDataResult));
- expect(testResponse.tirePressure).to(equal(vehicleDataResult));
- expect(testResponse.odometer).to(equal(vehicleDataResult));
+ testResponse.odometer = vehicleDataResult;
+ testResponse.prndl = vehicleDataResult;
+ testResponse.rpm = vehicleDataResult;
+ testResponse.speed = vehicleDataResult;
+ testResponse.steeringWheelAngle = vehicleDataResult;
+ testResponse.tirePressure = vehicleDataResult;
+ testResponse.turnSignal = vehicleDataResult;
+ testResponse.wiperStatus = vehicleDataResult;
+
+ expect(testResponse.accPedalPosition).to(equal(vehicleDataResult));
+ expect(testResponse.airbagStatus).to(equal(vehicleDataResult));
expect(testResponse.beltStatus).to(equal(vehicleDataResult));
expect(testResponse.bodyInformation).to(equal(vehicleDataResult));
+ expect(testResponse.clusterModes).to(equal(vehicleDataResult));
expect(testResponse.deviceStatus).to(equal(vehicleDataResult));
expect(testResponse.driverBraking).to(equal(vehicleDataResult));
- expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
- expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
- expect(testResponse.engineTorque).to(equal(vehicleDataResult));
- expect(testResponse.accPedalPosition).to(equal(vehicleDataResult));
- expect(testResponse.steeringWheelAngle).to(equal(vehicleDataResult));
expect(testResponse.eCallInfo).to(equal(vehicleDataResult));
- expect(testResponse.airbagStatus).to(equal(vehicleDataResult));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult));
expect(testResponse.emergencyEvent).to(equal(vehicleDataResult));
- expect(testResponse.clusterModes).to(equal(vehicleDataResult));
+ expect(testResponse.engineOilLife).to(equal(vehicleDataResult));
+ expect(testResponse.engineTorque).to(equal(vehicleDataResult));
+ expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
+ expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
+ expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
+ expect(testResponse.fuelRange).to(equal(vehicleDataResult));
+ expect(testResponse.gps).to(equal(vehicleDataResult));
+ expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
+ expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
expect(testResponse.myKey).to(equal(vehicleDataResult));
+ expect(testResponse.odometer).to(equal(vehicleDataResult));
+ expect(testResponse.prndl).to(equal(vehicleDataResult));
+ expect(testResponse.rpm).to(equal(vehicleDataResult));
+ expect(testResponse.speed).to(equal(vehicleDataResult));
+ expect(testResponse.steeringWheelAngle).to(equal(vehicleDataResult));
+ expect(testResponse.tirePressure).to(equal(vehicleDataResult));
+ expect(testResponse.turnSignal).to(equal(vehicleDataResult));
+ expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLNameResponse:
+ NSDictionary<NSString *, id> *dict = @{SDLNameResponse:
@{SDLNameParameters:
- @{SDLNameGPS:vehicleDataResult,
- SDLNameSpeed:vehicleDataResult,
- SDLNameRPM:vehicleDataResult,
- SDLNameFuelLevel:vehicleDataResult,
- SDLNameFuelLevelState:vehicleDataResult,
- SDLNameInstantFuelConsumption:vehicleDataResult,
- SDLNameExternalTemperature:vehicleDataResult,
- SDLNamePRNDL:vehicleDataResult,
- SDLNameTirePressure:vehicleDataResult,
- SDLNameOdometer:vehicleDataResult,
+ @{SDLNameAccelerationPedalPosition:vehicleDataResult,
+ SDLNameAirbagStatus:vehicleDataResult,
SDLNameBeltStatus:vehicleDataResult,
SDLNameBodyInformation:vehicleDataResult,
+ SDLNameClusterModes:vehicleDataResult,
SDLNameDeviceStatus:vehicleDataResult,
SDLNameDriverBraking:vehicleDataResult,
- SDLNameWiperStatus:vehicleDataResult,
- SDLNameHeadLampStatus:vehicleDataResult,
- SDLNameEngineTorque:vehicleDataResult,
- SDLNameAccelerationPedalPosition:vehicleDataResult,
- SDLNameSteeringWheelAngle:vehicleDataResult,
SDLNameECallInfo:vehicleDataResult,
- SDLNameAirbagStatus:vehicleDataResult,
+ SDLNameElectronicParkBrakeStatus:vehicleDataResult,
SDLNameEmergencyEvent:vehicleDataResult,
- SDLNameClusterModes:vehicleDataResult,
- SDLNameMyKey:vehicleDataResult},
- SDLNameOperationName:SDLNameSubscribeVehicleData}} mutableCopy];
+ SDLNameEngineOilLife:vehicleDataResult,
+ SDLNameEngineTorque:vehicleDataResult,
+ SDLNameExternalTemperature:vehicleDataResult,
+ SDLNameFuelLevel:vehicleDataResult,
+ SDLNameFuelLevelState:vehicleDataResult,
+ SDLNameFuelRange:vehicleDataResult,
+ SDLNameGPS:vehicleDataResult,
+ SDLNameHeadLampStatus:vehicleDataResult,
+ SDLNameInstantFuelConsumption:vehicleDataResult,
+ SDLNameMyKey:vehicleDataResult,
+ SDLNameOdometer:vehicleDataResult,
+ SDLNamePRNDL:vehicleDataResult,
+ SDLNameRPM:vehicleDataResult,
+ SDLNameSpeed:vehicleDataResult,
+ SDLNameSteeringWheelAngle:vehicleDataResult,
+ SDLNameTirePressure:vehicleDataResult,
+ SDLNameTurnSignal:vehicleDataResult,
+ SDLNameWiperStatus:vehicleDataResult},
+ SDLNameOperationName:SDLNameSubscribeVehicleData}};
SDLSubscribeVehicleDataResponse* testResponse = [[SDLSubscribeVehicleDataResponse alloc] initWithDictionary:dict];
- expect(testResponse.gps).to(equal(vehicleDataResult));
- expect(testResponse.speed).to(equal(vehicleDataResult));
- expect(testResponse.rpm).to(equal(vehicleDataResult));
- expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
- expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
- expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
- expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
- expect(testResponse.prndl).to(equal(vehicleDataResult));
- expect(testResponse.tirePressure).to(equal(vehicleDataResult));
- expect(testResponse.odometer).to(equal(vehicleDataResult));
+ expect(testResponse.accPedalPosition).to(equal(vehicleDataResult));
+ expect(testResponse.airbagStatus).to(equal(vehicleDataResult));
expect(testResponse.beltStatus).to(equal(vehicleDataResult));
expect(testResponse.bodyInformation).to(equal(vehicleDataResult));
+ expect(testResponse.clusterModes).to(equal(vehicleDataResult));
expect(testResponse.deviceStatus).to(equal(vehicleDataResult));
expect(testResponse.driverBraking).to(equal(vehicleDataResult));
- expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
- expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
- expect(testResponse.engineTorque).to(equal(vehicleDataResult));
- expect(testResponse.accPedalPosition).to(equal(vehicleDataResult));
- expect(testResponse.steeringWheelAngle).to(equal(vehicleDataResult));
expect(testResponse.eCallInfo).to(equal(vehicleDataResult));
- expect(testResponse.airbagStatus).to(equal(vehicleDataResult));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult));
expect(testResponse.emergencyEvent).to(equal(vehicleDataResult));
- expect(testResponse.clusterModes).to(equal(vehicleDataResult));
+ expect(testResponse.engineOilLife).to(equal(vehicleDataResult));
+ expect(testResponse.engineTorque).to(equal(vehicleDataResult));
+ expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
+ expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
+ expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
+ expect(testResponse.fuelRange).to(equal(vehicleDataResult));
+ expect(testResponse.gps).to(equal(vehicleDataResult));
+ expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
+ expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
expect(testResponse.myKey).to(equal(vehicleDataResult));
+ expect(testResponse.odometer).to(equal(vehicleDataResult));
+ expect(testResponse.prndl).to(equal(vehicleDataResult));
+ expect(testResponse.rpm).to(equal(vehicleDataResult));
+ expect(testResponse.speed).to(equal(vehicleDataResult));
+ expect(testResponse.steeringWheelAngle).to(equal(vehicleDataResult));
+ expect(testResponse.tirePressure).to(equal(vehicleDataResult));
+ expect(testResponse.turnSignal).to(equal(vehicleDataResult));
+ expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
});
it(@"Should return nil if not set", ^ {
SDLSubscribeVehicleDataResponse* testResponse = [[SDLSubscribeVehicleDataResponse alloc] init];
- expect(testResponse.gps).to(beNil());
- expect(testResponse.speed).to(beNil());
- expect(testResponse.rpm).to(beNil());
- expect(testResponse.fuelLevel).to(beNil());
- expect(testResponse.fuelLevel_State).to(beNil());
- expect(testResponse.instantFuelConsumption).to(beNil());
- expect(testResponse.externalTemperature).to(beNil());
- expect(testResponse.prndl).to(beNil());
- expect(testResponse.tirePressure).to(beNil());
- expect(testResponse.odometer).to(beNil());
+ expect(testResponse.accPedalPosition).to(beNil());
+ expect(testResponse.airbagStatus).to(beNil());
expect(testResponse.beltStatus).to(beNil());
expect(testResponse.bodyInformation).to(beNil());
+ expect(testResponse.clusterModes).to(beNil());
expect(testResponse.deviceStatus).to(beNil());
expect(testResponse.driverBraking).to(beNil());
- expect(testResponse.wiperStatus).to(beNil());
- expect(testResponse.headLampStatus).to(beNil());
- expect(testResponse.engineTorque).to(beNil());
- expect(testResponse.accPedalPosition).to(beNil());
- expect(testResponse.steeringWheelAngle).to(beNil());
expect(testResponse.eCallInfo).to(beNil());
- expect(testResponse.airbagStatus).to(beNil());
+ expect(testResponse.electronicParkBrakeStatus).to(beNil());
expect(testResponse.emergencyEvent).to(beNil());
- expect(testResponse.clusterModes).to(beNil());
+ expect(testResponse.engineOilLife).to(beNil());
+ expect(testResponse.engineTorque).to(beNil());
+ expect(testResponse.externalTemperature).to(beNil());
+ expect(testResponse.fuelLevel).to(beNil());
+ expect(testResponse.fuelLevel_State).to(beNil());
+ expect(testResponse.fuelRange).to(beNil());
+ expect(testResponse.gps).to(beNil());
+ expect(testResponse.headLampStatus).to(beNil());
+ expect(testResponse.instantFuelConsumption).to(beNil());
expect(testResponse.myKey).to(beNil());
+ expect(testResponse.odometer).to(beNil());
+ expect(testResponse.prndl).to(beNil());
+ expect(testResponse.rpm).to(beNil());
+ expect(testResponse.speed).to(beNil());
+ expect(testResponse.steeringWheelAngle).to(beNil());
+ expect(testResponse.tirePressure).to(beNil());
+ expect(testResponse.turnSignal).to(beNil());
+ expect(testResponse.wiperStatus).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m
index 129d9cbd2..8af7ef673 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m
@@ -26,6 +26,7 @@ describe(@"Getter/Setter Tests", ^ {
testResponse.rpm = vehicleDataResult;
testResponse.fuelLevel = vehicleDataResult;
testResponse.fuelLevel_State = vehicleDataResult;
+ testResponse.fuelRange = vehicleDataResult;
testResponse.instantFuelConsumption = vehicleDataResult;
testResponse.externalTemperature = vehicleDataResult;
testResponse.prndl = vehicleDataResult;
@@ -37,6 +38,7 @@ describe(@"Getter/Setter Tests", ^ {
testResponse.driverBraking = vehicleDataResult;
testResponse.wiperStatus = vehicleDataResult;
testResponse.headLampStatus = vehicleDataResult;
+ testResponse.engineOilLife = vehicleDataResult;
testResponse.engineTorque = vehicleDataResult;
testResponse.accPedalPosition = vehicleDataResult;
testResponse.steeringWheelAngle = vehicleDataResult;
@@ -45,12 +47,15 @@ describe(@"Getter/Setter Tests", ^ {
testResponse.emergencyEvent = vehicleDataResult;
testResponse.clusterModes = vehicleDataResult;
testResponse.myKey = vehicleDataResult;
+ testResponse.electronicParkBrakeStatus = vehicleDataResult;
+ testResponse.turnSignal = vehicleDataResult;
expect(testResponse.gps).to(equal(vehicleDataResult));
expect(testResponse.speed).to(equal(vehicleDataResult));
expect(testResponse.rpm).to(equal(vehicleDataResult));
expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
+ expect(testResponse.fuelRange).to(equal(vehicleDataResult));
expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
expect(testResponse.prndl).to(equal(vehicleDataResult));
@@ -62,6 +67,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.driverBraking).to(equal(vehicleDataResult));
expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
+ expect(testResponse.engineOilLife).to(equal(vehicleDataResult));
expect(testResponse.engineTorque).to(equal(vehicleDataResult));
expect(testResponse.accPedalPosition).to(equal(vehicleDataResult));
expect(testResponse.steeringWheelAngle).to(equal(vehicleDataResult));
@@ -70,6 +76,8 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.emergencyEvent).to(equal(vehicleDataResult));
expect(testResponse.clusterModes).to(equal(vehicleDataResult));
expect(testResponse.myKey).to(equal(vehicleDataResult));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult));
+ expect(testResponse.turnSignal).to(equal(vehicleDataResult));
});
it(@"Should get correctly when initialized", ^ {
@@ -80,6 +88,7 @@ describe(@"Getter/Setter Tests", ^ {
SDLNameRPM:vehicleDataResult,
SDLNameFuelLevel:vehicleDataResult,
SDLNameFuelLevelState:vehicleDataResult,
+ SDLNameFuelRange:vehicleDataResult,
SDLNameInstantFuelConsumption:vehicleDataResult,
SDLNameExternalTemperature:vehicleDataResult,
SDLNamePRNDL:vehicleDataResult,
@@ -91,6 +100,7 @@ describe(@"Getter/Setter Tests", ^ {
SDLNameDriverBraking:vehicleDataResult,
SDLNameWiperStatus:vehicleDataResult,
SDLNameHeadLampStatus:vehicleDataResult,
+ SDLNameEngineOilLife:vehicleDataResult,
SDLNameEngineTorque:vehicleDataResult,
SDLNameAccelerationPedalPosition:vehicleDataResult,
SDLNameSteeringWheelAngle:vehicleDataResult,
@@ -98,7 +108,10 @@ describe(@"Getter/Setter Tests", ^ {
SDLNameAirbagStatus:vehicleDataResult,
SDLNameEmergencyEvent:vehicleDataResult,
SDLNameClusterModes:vehicleDataResult,
- SDLNameMyKey:vehicleDataResult},
+ SDLNameMyKey:vehicleDataResult,
+ SDLNameElectronicParkBrakeStatus:vehicleDataResult,
+ SDLNameTurnSignal:vehicleDataResult,
+ },
SDLNameOperationName:SDLNameUnsubscribeVehicleData}} mutableCopy];
SDLUnsubscribeVehicleDataResponse* testResponse = [[SDLUnsubscribeVehicleDataResponse alloc] initWithDictionary:dict];
@@ -107,6 +120,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.rpm).to(equal(vehicleDataResult));
expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
+ expect(testResponse.fuelRange).to(equal(vehicleDataResult));
expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
expect(testResponse.prndl).to(equal(vehicleDataResult));
@@ -118,6 +132,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.driverBraking).to(equal(vehicleDataResult));
expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
+ expect(testResponse.engineOilLife).to(equal(vehicleDataResult));
expect(testResponse.engineTorque).to(equal(vehicleDataResult));
expect(testResponse.accPedalPosition).to(equal(vehicleDataResult));
expect(testResponse.steeringWheelAngle).to(equal(vehicleDataResult));
@@ -126,6 +141,8 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.emergencyEvent).to(equal(vehicleDataResult));
expect(testResponse.clusterModes).to(equal(vehicleDataResult));
expect(testResponse.myKey).to(equal(vehicleDataResult));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult));
+ expect(testResponse.turnSignal).to(equal(vehicleDataResult));
});
it(@"Should return nil if not set", ^ {
@@ -136,6 +153,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.rpm).to(beNil());
expect(testResponse.fuelLevel).to(beNil());
expect(testResponse.fuelLevel_State).to(beNil());
+ expect(testResponse.fuelRange).to(beNil());
expect(testResponse.instantFuelConsumption).to(beNil());
expect(testResponse.externalTemperature).to(beNil());
expect(testResponse.prndl).to(beNil());
@@ -147,6 +165,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.driverBraking).to(beNil());
expect(testResponse.wiperStatus).to(beNil());
expect(testResponse.headLampStatus).to(beNil());
+ expect(testResponse.engineOilLife).to(beNil());
expect(testResponse.engineTorque).to(beNil());
expect(testResponse.accPedalPosition).to(beNil());
expect(testResponse.steeringWheelAngle).to(beNil());
@@ -155,6 +174,8 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.emergencyEvent).to(beNil());
expect(testResponse.clusterModes).to(beNil());
expect(testResponse.myKey).to(beNil());
+ expect(testResponse.electronicParkBrakeStatus).to(beNil());
+ expect(testResponse.turnSignal).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlCapabilitiesSpec.m
new file mode 100644
index 000000000..f785e9bce
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlCapabilitiesSpec.m
@@ -0,0 +1,90 @@
+//
+// SDLAudioControlCapabilitiesSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLAudioControlCapabilities.h"
+#import "SDLNames.h"
+
+
+QuickSpecBegin( SDLAudioControlCapabilitiesSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLAudioControlCapabilities* testStruct = [[SDLAudioControlCapabilities alloc] init];
+
+ testStruct.moduleName = @"module";
+ testStruct.sourceAvailable = @(YES);
+ testStruct.keepContextAvailable = @YES;
+ testStruct.volumeAvailable = @(NO);
+ testStruct.equalizerAvailable = @(NO);
+ testStruct.equalizerMaxChannelId = @56;
+
+ expect(testStruct.moduleName).to(equal(@"module"));
+ expect(testStruct.keepContextAvailable).to(equal(@YES));
+ expect(testStruct.sourceAvailable).to(equal(@(YES)));
+ expect(testStruct.volumeAvailable).to(equal(@(NO)));
+ expect(testStruct.equalizerAvailable).to(equal(@(NO)));
+ expect(testStruct.equalizerMaxChannelId).to(equal(@56));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLAudioControlCapabilities* testStruct = [[SDLAudioControlCapabilities alloc] initWithModuleName:@"module"];
+
+ expect(testStruct.moduleName).to(equal(@"module"));
+ expect(testStruct.sourceAvailable).to(beNil());
+ expect(testStruct.keepContextAvailable).to(beNil());
+ expect(testStruct.volumeAvailable).to(beNil());
+ expect(testStruct.equalizerAvailable).to(beNil());
+ expect(testStruct.equalizerMaxChannelId).to(beNil());
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLAudioControlCapabilities* testStruct = [[SDLAudioControlCapabilities alloc] initWithModuleName:@"module" sourceAvailable:@NO keepContextAvailable:@NO volumeAvailable:@YES equalizerAvailable:@NO equalizerMaxChannelID:@34];
+
+ expect(testStruct.moduleName).to(equal(@"module"));
+ expect(testStruct.sourceAvailable).to(equal(@(NO)));
+ expect(testStruct.keepContextAvailable).to(equal(@NO));
+ expect(testStruct.volumeAvailable).to(equal(@(YES)));
+ expect(testStruct.equalizerAvailable).to(equal(@(NO)));
+ expect(testStruct.equalizerMaxChannelId).to(equal(@34));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameModuleName:@"module",
+ SDLNameSourceAvailable:@(NO),
+ SDLNameKeepContextAvailable: @YES,
+ SDLNameVolumeAvailable:@(YES),
+ SDLNameEqualizerAvailable:@(NO),
+ SDLNameEqualizerMaxChannelId:@12
+ } mutableCopy];
+ SDLAudioControlCapabilities* testStruct = [[SDLAudioControlCapabilities alloc] initWithDictionary:dict];
+
+ expect(testStruct.moduleName).to(equal(@"module"));
+ expect(testStruct.sourceAvailable).to(equal(@(NO)));
+ expect(testStruct.keepContextAvailable).to(equal(@YES));
+ expect(testStruct.volumeAvailable).to(equal(@(YES)));
+ expect(testStruct.equalizerAvailable).to(equal(@(NO)));
+ expect(testStruct.equalizerMaxChannelId).to(equal(@12));
+
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLAudioControlCapabilities* testStruct = [[SDLAudioControlCapabilities alloc] init];
+
+ expect(testStruct.moduleName).to(beNil());
+ expect(testStruct.sourceAvailable).to(beNil());
+ expect(testStruct.keepContextAvailable).to(beNil());
+ expect(testStruct.volumeAvailable).to(beNil());
+ expect(testStruct.equalizerAvailable).to(beNil());
+ expect(testStruct.equalizerMaxChannelId).to(beNil());
+
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlDataSpec.m
new file mode 100644
index 000000000..f12cbc52b
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlDataSpec.m
@@ -0,0 +1,71 @@
+//
+// SDLAudioControlDataSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLAudioControlData.h"
+#import "SDLPrimaryAudioSource.h"
+#import "SDLEqualizerSettings.h"
+#import "SDLNames.h"
+
+
+QuickSpecBegin( SDLAudioControlDataSpec)
+
+SDLEqualizerSettings *someEqualizerSettings = [[SDLEqualizerSettings alloc] init];
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLAudioControlData* testStruct = [[SDLAudioControlData alloc] init];
+
+ testStruct.source = SDLPrimaryAudioSourceCD;
+ testStruct.keepContext = @(NO);
+ testStruct.volume = @(NO);
+ testStruct.equalizerSettings = [@[someEqualizerSettings] copy];
+
+ expect(testStruct.source).to(equal(SDLPrimaryAudioSourceCD));
+ expect(testStruct.keepContext).to(equal(@(NO)));
+ expect(testStruct.volume).to(equal(@(NO)));
+ expect(testStruct.equalizerSettings).to(equal([@[someEqualizerSettings] copy]));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLAudioControlData* testStruct = [[SDLAudioControlData alloc] initWithSource:SDLPrimaryAudioSourceCD keepContext:@(NO) volume:@32 equalizerSettings:[@[someEqualizerSettings] copy]];
+
+ expect(testStruct.source).to(equal(SDLPrimaryAudioSourceCD));
+ expect(testStruct.keepContext).to(equal(@(NO)));
+ expect(testStruct.volume).to(equal(@32));
+ expect(testStruct.equalizerSettings).to(equal([@[someEqualizerSettings] copy]));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameSource:SDLPrimaryAudioSourceCD,
+ SDLNameKeepContext:@(NO),
+ SDLNameVolume:@(NO),
+ SDLNameEqualizerSettings:[@[someEqualizerSettings] copy]
+ } mutableCopy];
+ SDLAudioControlData* testStruct = [[SDLAudioControlData alloc] initWithDictionary:dict];
+
+ expect(testStruct.source).to(equal(SDLPrimaryAudioSourceCD));
+ expect(testStruct.keepContext).to(equal(@(NO)));
+ expect(testStruct.volume).to(equal(@(NO)));
+ expect(testStruct.equalizerSettings).to(equal([@[someEqualizerSettings] copy]));
+
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLAudioControlData* testStruct = [[SDLAudioControlData alloc] init];
+
+ expect(testStruct.source).to(beNil());
+ expect(testStruct.keepContext).to(beNil());
+ expect(testStruct.volume).to(beNil());
+ expect(testStruct.equalizerSettings).to(beNil());
+
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlCapabilitiesSpec.m
index d15d63185..298dd27a3 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlCapabilitiesSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlCapabilitiesSpec.m
@@ -32,6 +32,10 @@ describe(@"Getter/Setter Tests", ^ {
testStruct.defrostZone = [@[SDLDefrostZoneFront] copy];
testStruct.ventilationModeAvailable = @NO;
testStruct.ventilationMode = [@[SDLVentilationModeUpper] copy];
+ testStruct.heatedSteeringWheelAvailable = @(YES);
+ testStruct.heatedWindshieldAvailable = @(NO);
+ testStruct.heatedRearWindowAvailable = @(YES);
+ testStruct.heatedMirrorsAvailable = @(NO);
expect(testStruct.moduleName).to(equal(@"Name"));
expect(testStruct.fanSpeedAvailable).to(equal(@YES));
@@ -45,6 +49,11 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.defrostZone).to(equal([@[SDLDefrostZoneFront] copy]));
expect(testStruct.ventilationModeAvailable).to(equal(@NO));
expect(testStruct.ventilationMode).to(equal([@[SDLVentilationModeUpper] copy]));
+ expect(testStruct.heatedSteeringWheelAvailable).to(equal(@YES));
+ expect(testStruct.heatedWindshieldAvailable).to(equal(@NO));
+ expect(testStruct.heatedRearWindowAvailable).to(equal(@YES));
+ expect(testStruct.heatedMirrorsAvailable).to(equal(@NO));
+
});
it(@"Should get correctly when initialized", ^ {
@@ -59,7 +68,12 @@ describe(@"Getter/Setter Tests", ^ {
SDLNameDefrostZoneAvailable:@YES,
SDLNameDefrostZone:[@[SDLDefrostZoneFront] copy],
SDLNameVentilationModeAvailable:@NO,
- SDLNameVentilationMode:[@[SDLVentilationModeUpper] copy]} mutableCopy];
+ SDLNameVentilationMode:[@[SDLVentilationModeUpper] copy],
+ SDLNameHeatedSteeringWheelAvailable:@YES,
+ SDLNameHeatedWindshieldAvailable:@NO,
+ SDLNameHeatedRearWindowAvailable:@YES,
+ SDLNameHeatedMirrorsAvailable:@NO
+ } mutableCopy];
SDLClimateControlCapabilities* testStruct = [[SDLClimateControlCapabilities alloc] initWithDictionary:dict];
expect(testStruct.moduleName).to(equal(@"Name"));
@@ -74,9 +88,15 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.defrostZone).to(equal([@[SDLDefrostZoneFront] copy]));
expect(testStruct.ventilationModeAvailable).to(equal(@NO));
expect(testStruct.ventilationMode).to(equal([@[SDLVentilationModeUpper] copy]));
+ expect(testStruct.heatedSteeringWheelAvailable).to(equal(@YES));
+ expect(testStruct.heatedWindshieldAvailable).to(equal(@NO));
+ expect(testStruct.heatedRearWindowAvailable).to(equal(@YES));
+ expect(testStruct.heatedMirrorsAvailable).to(equal(@NO));
});
it(@"Should get correctly when initialized with module data and other climate control capabilities parameters", ^ {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLClimateControlCapabilities* testStruct = [[SDLClimateControlCapabilities alloc] initWithModuleName:@"Name" fanSpeedAvailable:YES desiredTemperatureAvailable:NO acEnableAvailable:NO acMaxEnableAvailable:YES circulateAirAvailable:NO autoModeEnableAvailable:NO dualModeEnableAvailable:NO defrostZoneAvailable:YES ventilationModeAvailable:YES];
expect(testStruct.moduleName).to(equal(@"Name"));
@@ -89,6 +109,30 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.dualModeEnableAvailable).to(equal(@NO));
expect(testStruct.defrostZoneAvailable).to(equal(@YES));
expect(testStruct.ventilationModeAvailable).to(equal(@YES));
+ expect(testStruct.heatedSteeringWheelAvailable).to(equal(@NO));
+ expect(testStruct.heatedWindshieldAvailable).to(equal(@NO));
+ expect(testStruct.heatedRearWindowAvailable).to(equal(@NO));
+ expect(testStruct.heatedMirrorsAvailable).to(equal(@NO));
+ #pragma clang diagnostic pop
+ });
+
+ it(@"Should get correctly when initialized with module data and other climate control capabilities parameters", ^ {
+ SDLClimateControlCapabilities* testStruct = [[SDLClimateControlCapabilities alloc] initWithModuleName:@"Name" fanSpeedAvailable:YES desiredTemperatureAvailable:NO acEnableAvailable:NO acMaxEnableAvailable:YES circulateAirAvailable:NO autoModeEnableAvailable:NO dualModeEnableAvailable:NO defrostZoneAvailable:YES ventilationModeAvailable:YES heatedSteeringWheelAvailable:YES heatedWindshieldAvailable:NO heatedRearWindowAvailable:YES heatedMirrorsAvailable:NO];
+
+ expect(testStruct.moduleName).to(equal(@"Name"));
+ expect(testStruct.fanSpeedAvailable).to(equal(@YES));
+ expect(testStruct.desiredTemperatureAvailable).to(equal(@NO));
+ expect(testStruct.acEnableAvailable).to(equal(@NO));
+ expect(testStruct.acMaxEnableAvailable).to(equal(@YES));
+ expect(testStruct.circulateAirEnableAvailable).to(equal(@NO));
+ expect(testStruct.autoModeEnableAvailable).to(equal(@NO));
+ expect(testStruct.dualModeEnableAvailable).to(equal(@NO));
+ expect(testStruct.defrostZoneAvailable).to(equal(@YES));
+ expect(testStruct.ventilationModeAvailable).to(equal(@YES));
+ expect(testStruct.heatedSteeringWheelAvailable).to(equal(@YES));
+ expect(testStruct.heatedWindshieldAvailable).to(equal(@NO));
+ expect(testStruct.heatedRearWindowAvailable).to(equal(@YES));
+ expect(testStruct.heatedMirrorsAvailable).to(equal(@NO));
});
it(@"Should return nil if not set", ^ {
@@ -106,6 +150,10 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.defrostZone).to(beNil());
expect(testStruct.ventilationModeAvailable).to(beNil());
expect(testStruct.ventilationMode).to(beNil());
+ expect(testStruct.heatedSteeringWheelAvailable).to(beNil());
+ expect(testStruct.heatedWindshieldAvailable).to(beNil());
+ expect(testStruct.heatedRearWindowAvailable).to(beNil());
+ expect(testStruct.heatedMirrorsAvailable).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlDataSpec.m
index 3ff841b8d..2075fb53d 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLClimateControlDataSpec.m
@@ -38,6 +38,10 @@ describe(@"Getter/Setter Tests", ^ {
testStruct.dualModeEnable = @NO;
testStruct.acMaxEnable = @YES;
testStruct.ventilationMode = SDLVentilationModeBoth;
+ testStruct.heatedSteeringWheelEnable = @NO;
+ testStruct.heatedWindshieldEnable = @YES;
+ testStruct.heatedRearWindowEnable = @NO;
+ testStruct.heatedMirrorsEnable = @YES;
expect(testStruct.fanSpeed).to(equal(@43));
expect(testStruct.currentTemperature).to(equal(currentTemp));
@@ -49,9 +53,16 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.dualModeEnable).to(equal(NO));
expect(testStruct.acMaxEnable).to(equal(YES));
expect(testStruct.ventilationMode).to(equal(SDLVentilationModeBoth));
+ expect(testStruct.heatedSteeringWheelEnable).to(equal(@NO));
+ expect(testStruct.heatedWindshieldEnable).to(equal(@YES));
+ expect(testStruct.heatedRearWindowEnable).to(equal(@NO));
+ expect(testStruct.heatedMirrorsEnable).to(equal(@YES));
+
});
it(@"Should get correctly when initialized with FanSpeed and other climate control parameters", ^ {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLClimateControlData* testStruct = [[SDLClimateControlData alloc] initWithFanSpeed:@43 desiredTemperature:desiredTemp acEnable:@YES circulateAirEnable:@YES autoModeEnable:@NO defrostZone:SDLDefrostZoneFront dualModeEnable:@NO acMaxEnable:@YES ventilationMode:SDLVentilationModeBoth];
expect(testStruct.fanSpeed).to(equal(@43));
@@ -63,6 +74,29 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.dualModeEnable).to(equal(NO));
expect(testStruct.acMaxEnable).to(equal(YES));
expect(testStruct.ventilationMode).to(equal(SDLVentilationModeBoth));
+ expect(testStruct.heatedSteeringWheelEnable).to(equal(NO));
+ expect(testStruct.heatedWindshieldEnable).to(equal(NO));
+ expect(testStruct.heatedRearWindowEnable).to(equal(NO));
+ expect(testStruct.heatedMirrorsEnable).to(equal(NO));
+ #pragma clang diagnostic pop
+ });
+
+ it(@"Should get correctly when initialized with FanSpeed and other climate control parameters", ^ {
+ SDLClimateControlData* testStruct = [[SDLClimateControlData alloc] initWithFanSpeed:@43 desiredTemperature:desiredTemp acEnable:@YES circulateAirEnable:@YES autoModeEnable:@NO defrostZone:SDLDefrostZoneFront dualModeEnable:@NO acMaxEnable:@YES ventilationMode:SDLVentilationModeBoth heatedSteeringWheelEnable:@NO heatedWindshieldEnable:@YES heatedRearWindowEnable:@NO heatedMirrorsEnable:@YES];
+
+ expect(testStruct.fanSpeed).to(equal(@43));
+ expect(testStruct.desiredTemperature).to(equal(desiredTemp));
+ expect(testStruct.acEnable).to(equal(YES));
+ expect(testStruct.circulateAirEnable).to(equal(YES));
+ expect(testStruct.autoModeEnable).to(equal(NO));
+ expect(testStruct.defrostZone).to(equal(SDLDefrostZoneFront));
+ expect(testStruct.dualModeEnable).to(equal(NO));
+ expect(testStruct.acMaxEnable).to(equal(YES));
+ expect(testStruct.ventilationMode).to(equal(SDLVentilationModeBoth));
+ expect(testStruct.heatedSteeringWheelEnable).to(equal(@NO));
+ expect(testStruct.heatedWindshieldEnable).to(equal(@YES));
+ expect(testStruct.heatedRearWindowEnable).to(equal(@NO));
+ expect(testStruct.heatedMirrorsEnable).to(equal(@YES));
});
it(@"Should get correctly when initialized with a dictionary", ^ {
@@ -75,7 +109,13 @@ describe(@"Getter/Setter Tests", ^ {
SDLNameDefrostZone : SDLDefrostZoneFront,
SDLNameDualModeEnable : @NO,
SDLNameACMaxEnable : @YES,
- SDLNameVentilationMode :SDLVentilationModeBoth} mutableCopy];
+ SDLNameVentilationMode :SDLVentilationModeBoth,
+ SDLNameHeatedSteeringWheelEnable:@NO,
+ SDLNameHeatedWindshieldEnable:@YES,
+ SDLNameHeatedRearWindowEnable:@NO,
+ SDLNameHeatedMirrorsEnable:@YES,
+ } mutableCopy];
+
SDLClimateControlData* testStruct = [[SDLClimateControlData alloc] initWithDictionary:dict];
expect(testStruct.fanSpeed).to(equal(@43));
@@ -88,6 +128,10 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.dualModeEnable).to(equal(NO));
expect(testStruct.acMaxEnable).to(equal(YES));
expect(testStruct.ventilationMode).to(equal(SDLVentilationModeBoth));
+ expect(testStruct.heatedSteeringWheelEnable).to(equal(@NO));
+ expect(testStruct.heatedWindshieldEnable).to(equal(@YES));
+ expect(testStruct.heatedRearWindowEnable).to(equal(@NO));
+ expect(testStruct.heatedMirrorsEnable).to(equal(@YES));
});
it(@"Should return nil if not set", ^ {
@@ -103,6 +147,10 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.dualModeEnable).to(beNil());
expect(testStruct.acMaxEnable).to(beNil());
expect(testStruct.ventilationMode).to(beNil());
+ expect(testStruct.heatedSteeringWheelEnable).to(beNil());
+ expect(testStruct.heatedWindshieldEnable).to(beNil());
+ expect(testStruct.heatedRearWindowEnable).to(beNil());
+ expect(testStruct.heatedMirrorsEnable).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDisplayCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDisplayCapabilitiesSpec.m
index 32bbeb29d..6c68a3e26 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDisplayCapabilitiesSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDisplayCapabilitiesSpec.m
@@ -23,11 +23,15 @@ SDLScreenParams* screenParams = [[SDLScreenParams alloc] init];
SDLTextField* textField = [[SDLTextField alloc] init];
SDLImageField* imageField = [[SDLImageField alloc] init];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+
describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
SDLDisplayCapabilities* testStruct = [[SDLDisplayCapabilities alloc] init];
testStruct.displayType = SDLDisplayTypeGen26DMA;
+ testStruct.displayName = @"test";
testStruct.textFields = [@[textField] mutableCopy];
testStruct.imageFields = [@[imageField] mutableCopy];
testStruct.mediaClockFormats = [@[SDLMediaClockFormatClockText1, SDLMediaClockFormatClock3, SDLMediaClockFormatClockText3] copy];
@@ -37,6 +41,7 @@ describe(@"Getter/Setter Tests", ^ {
testStruct.numCustomPresetsAvailable = @43;
expect(testStruct.displayType).to(equal(SDLDisplayTypeGen26DMA));
+ expect(testStruct.displayName).to(equal(@"test"));
expect(testStruct.textFields).to(equal([@[textField] mutableCopy]));
expect(testStruct.imageFields).to(equal([@[imageField] mutableCopy]));
expect(testStruct.mediaClockFormats).to(equal([@[SDLMediaClockFormatClockText1, SDLMediaClockFormatClock3, SDLMediaClockFormatClockText3] copy]));
@@ -48,6 +53,7 @@ describe(@"Getter/Setter Tests", ^ {
it(@"Should get correctly when initialized", ^ {
NSMutableDictionary* dict = [@{SDLNameDisplayType:SDLDisplayTypeGen26DMA,
+ SDLNameDisplayName: @"test",
SDLNameTextFields:[@[textField] mutableCopy],
SDLNameImageFields:[@[imageField] mutableCopy],
SDLNameMediaClockFormats:[@[SDLMediaClockFormatClockText1, SDLMediaClockFormatClock3, SDLMediaClockFormatClockText3] copy],
@@ -58,6 +64,7 @@ describe(@"Getter/Setter Tests", ^ {
SDLDisplayCapabilities* testStruct = [[SDLDisplayCapabilities alloc] initWithDictionary:dict];
expect(testStruct.displayType).to(equal(SDLDisplayTypeGen26DMA));
+ expect(testStruct.displayName).to(equal(@"test"));
expect(testStruct.textFields).to(equal([@[textField] mutableCopy]));
expect(testStruct.imageFields).to(equal([@[imageField] mutableCopy]));
expect(testStruct.mediaClockFormats).to(equal([@[SDLMediaClockFormatClockText1, SDLMediaClockFormatClock3, SDLMediaClockFormatClockText3] copy]));
@@ -71,6 +78,7 @@ describe(@"Getter/Setter Tests", ^ {
SDLDisplayCapabilities* testStruct = [[SDLDisplayCapabilities alloc] init];
expect(testStruct.displayType).to(beNil());
+ expect(testStruct.displayName).to(beNil());
expect(testStruct.textFields).to(beNil());
expect(testStruct.imageFields).to(beNil());
expect(testStruct.mediaClockFormats).to(beNil());
@@ -81,4 +89,6 @@ describe(@"Getter/Setter Tests", ^ {
});
});
+#pragma clang diagnostic pop
+
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLEqualizerSettingsSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLEqualizerSettingsSpec.m
new file mode 100644
index 000000000..cd5dfe3b1
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLEqualizerSettingsSpec.m
@@ -0,0 +1,59 @@
+//
+// SDLEqualizerSettingsSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLEqualizerSettings.h"
+#import "SDLNames.h"
+
+
+QuickSpecBegin(SDLEqualizerSettingsSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLEqualizerSettings* testStruct = [[SDLEqualizerSettings alloc] init];
+
+ testStruct.channelId = @2;
+ testStruct.channelName = @"channel";
+ testStruct.channelSetting = @45;
+
+ expect(testStruct.channelId).to(equal(@2));
+ expect(testStruct.channelName).to(equal(@"channel"));
+ expect(testStruct.channelSetting).to(equal(@45));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLEqualizerSettings* testStruct = [[SDLEqualizerSettings alloc] initWithChannelId:2 channelSetting:45];
+
+ expect(testStruct.channelId).to(equal(@2));
+ expect(testStruct.channelName).to(beNil());
+ expect(testStruct.channelSetting).to(equal(@45));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameChannelId:@2,
+ SDLNameChannelName:@"channel",
+ SDLNameChannelSetting:@45
+ } mutableCopy];
+ SDLEqualizerSettings* testStruct = [[SDLEqualizerSettings alloc] initWithDictionary:dict];
+
+ expect(testStruct.channelId).to(equal(@2));
+ expect(testStruct.channelName).to(equal(@"channel"));
+ expect(testStruct.channelSetting).to(equal(@45));
+
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLEqualizerSettings* testStruct = [[SDLEqualizerSettings alloc] init];
+
+ expect(testStruct.channelId).to(beNil());
+ expect(testStruct.channelName).to(beNil());
+ expect(testStruct.channelSetting).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m
new file mode 100644
index 000000000..f812613da
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m
@@ -0,0 +1,49 @@
+//
+// SDLFuelRangeSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Nicole on 6/20/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLFuelRange.h"
+#import "SDLNames.h"
+
+QuickSpecBegin(SDLFuelRangeSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLFuelRange *testStruct = [[SDLFuelRange alloc] init];
+
+ testStruct.type = SDLFuelTypeDiesel;
+ testStruct.range = @45;
+
+ expect(testStruct.type).to(equal(SDLFuelTypeDiesel));
+ expect(testStruct.range).to(equal(@45));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSDictionary *dict = @{SDLNameType:SDLFuelTypeLPG,
+ SDLNameRange:@23
+ };
+
+ SDLFuelRange *testStruct = [[SDLFuelRange alloc] initWithDictionary:dict];
+
+ expect(testStruct.type).to(equal(SDLFuelTypeLPG));
+ expect(testStruct.range).to(equal(@23));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLFuelRange *testStruct = [[SDLFuelRange alloc] init];
+
+ expect(testStruct.type).to(beNil());
+ expect(testStruct.range).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMISettingsControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMISettingsControlCapabilitiesSpec.m
new file mode 100644
index 000000000..f9b60810d
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMISettingsControlCapabilitiesSpec.m
@@ -0,0 +1,76 @@
+//
+// SDLHMISettingsControlCapabilitiesSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLHMISettingsControlCapabilities.h"
+#import "SDLNames.h"
+
+
+QuickSpecBegin(SDLHMISettingsControlCapabilitiesSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLHMISettingsControlCapabilities* testStruct = [[SDLHMISettingsControlCapabilities alloc] init];
+
+ testStruct.moduleName = @"displayMode";
+ testStruct.distanceUnitAvailable = @(NO);
+ testStruct.temperatureUnitAvailable = @(NO);
+ testStruct.displayModeUnitAvailable = @(YES);
+
+ expect(testStruct.moduleName).to(equal(@"displayMode"));
+ expect(testStruct.distanceUnitAvailable).to(equal(@(NO)));
+ expect(testStruct.temperatureUnitAvailable).to(equal(@(NO)));
+ expect(testStruct.displayModeUnitAvailable).to(equal(@(YES)));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLHMISettingsControlCapabilities* testStruct = [[SDLHMISettingsControlCapabilities alloc] initWithModuleName:@"displayMode"];
+
+ expect(testStruct.moduleName).to(equal(@"displayMode"));
+ expect(testStruct.distanceUnitAvailable).to(beNil());
+ expect(testStruct.temperatureUnitAvailable).to(beNil());
+ expect(testStruct.displayModeUnitAvailable).to(beNil());
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLHMISettingsControlCapabilities* testStruct = [[SDLHMISettingsControlCapabilities alloc] initWithModuleName:@"displayMode" distanceUnitAvailable:NO temperatureUnitAvailable:YES displayModeUnitAvailable:NO];
+
+ expect(testStruct.moduleName).to(equal(@"displayMode"));
+ expect(testStruct.distanceUnitAvailable).to(equal(@(NO)));
+ expect(testStruct.temperatureUnitAvailable).to(equal(@(YES)));
+ expect(testStruct.displayModeUnitAvailable).to(equal(@(NO)));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameModuleName:@"temperatureUnit",
+ SDLNameTemperatureUnitAvailable:@(YES),
+ SDLNameDistanceUnitAvailable:@(YES),
+ SDLNameDisplayModeUnitAvailable:@(NO)
+ } mutableCopy];
+ SDLHMISettingsControlCapabilities* testStruct = [[SDLHMISettingsControlCapabilities alloc] initWithDictionary:dict];
+
+ expect(testStruct.moduleName).to(equal(@"temperatureUnit"));
+ expect(testStruct.distanceUnitAvailable).to(equal(@(YES)));
+ expect(testStruct.temperatureUnitAvailable).to(equal(@(YES)));
+ expect(testStruct.displayModeUnitAvailable).to(equal(@(NO)));
+
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLHMISettingsControlCapabilities* testStruct = [[SDLHMISettingsControlCapabilities alloc] init];
+
+ expect(testStruct.moduleName).to(beNil());
+ expect(testStruct.distanceUnitAvailable).to(beNil());
+ expect(testStruct.temperatureUnitAvailable).to(beNil());
+ expect(testStruct.displayModeUnitAvailable).to(beNil());
+
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMISettingsControlDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMISettingsControlDataSpec.m
new file mode 100644
index 000000000..f2a1cd399
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMISettingsControlDataSpec.m
@@ -0,0 +1,57 @@
+// SDLHMISettingsControlDataSpec.m
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLHMISettingsControlData.h"
+#import "SDLNames.h"
+
+
+QuickSpecBegin(SDLHMISettingsControlDataSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLHMISettingsControlData* testStruct = [[SDLHMISettingsControlData alloc] init];
+
+ testStruct.displayMode = SDLDisplayModeAuto;
+ testStruct.temperatureUnit = SDLTemperatureUnitCelsius;
+ testStruct.distanceUnit = SDLDistanceUnitKilometers;
+
+ expect(testStruct.displayMode).to(equal(SDLDisplayModeAuto));
+ expect(testStruct.temperatureUnit).to(equal(SDLTemperatureUnitCelsius));
+ expect(testStruct.distanceUnit).to(equal(SDLDistanceUnitKilometers));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLHMISettingsControlData* testStruct = [[SDLHMISettingsControlData alloc] initWithDisplaymode:SDLDisplayModeAuto temperatureUnit:SDLTemperatureUnitCelsius distanceUnit:SDLDistanceUnitKilometers];
+
+ expect(testStruct.displayMode).to(equal(SDLDisplayModeAuto));
+ expect(testStruct.temperatureUnit).to(equal(SDLTemperatureUnitCelsius));
+ expect(testStruct.distanceUnit).to(equal(SDLDistanceUnitKilometers));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameDisplayMode:SDLDisplayModeAuto,
+ SDLNameTemperatureUnit:SDLTemperatureUnitCelsius,
+ SDLNameDistanceUnit:SDLDistanceUnitKilometers} mutableCopy];
+ SDLHMISettingsControlData* testStruct = [[SDLHMISettingsControlData alloc] initWithDictionary:dict];
+
+ expect(testStruct.displayMode).to(equal(SDLDisplayModeAuto));
+ expect(testStruct.temperatureUnit).to(equal(SDLTemperatureUnitCelsius));
+ expect(testStruct.distanceUnit).to(equal(SDLDistanceUnitKilometers));
+
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLHMISettingsControlData* testStruct = [[SDLHMISettingsControlData alloc] init];
+
+ expect(testStruct.displayMode).to(beNil());
+ expect(testStruct.temperatureUnit).to(beNil());
+ expect(testStruct.distanceUnit).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageSpec.m
index 6ecbdbb12..a88619d1b 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageSpec.m
@@ -20,11 +20,13 @@ describe(@"Getter/Setter Tests", ^{
__block SDLImage *testSDLImage = nil;
__block NSString *expectedValue;
__block SDLImageType expectedImageType;
+ __block NSNumber<SDLBool> *expectedIsTemplate;
beforeEach(^{
testSDLImage = nil;
expectedValue = nil;
expectedImageType = nil;
+ expectedIsTemplate = @NO;
});
it(@"Should set and get correctly", ^{
@@ -34,42 +36,32 @@ describe(@"Getter/Setter Tests", ^{
testSDLImage = [[SDLImage alloc] init];
testSDLImage.value = value;
testSDLImage.imageType = imageType;
+ testSDLImage.isTemplate = @YES;
expectedValue = value;
expectedImageType = imageType;
+ expectedIsTemplate = @YES;
});
- it(@"Should get correctly when initialized as a dictionary", ^{
+ it(@"Should set and get correctly when initialized", ^{
NSString *value = @"value";
SDLImageType imageType = SDLImageTypeStatic;
- NSMutableDictionary* dict = [@{SDLNameValue:value,
- SDLNameImageType:imageType} mutableCopy];
+ NSDictionary* dict = [@{SDLNameValue:value,
+ SDLNameImageType:imageType,
+ SDLNameImageTemplate:@YES
+ } mutableCopy];
testSDLImage = [[SDLImage alloc] initWithDictionary:dict];
expectedValue = value;
expectedImageType = imageType;
- });
-
- it(@"Should get correctly when initialized with a name only", ^{
- NSString *name = @"value";
- testSDLImage = [[SDLImage alloc] initWithName:name];
-
- expectedValue = name;
- expectedImageType = SDLImageTypeDynamic;
- });
-
- it(@"Should get correctly when initialized with static image value", ^{
- UInt16 staticImageValue = 2568;
- testSDLImage = [[SDLImage alloc] initWithStaticImageValue:staticImageValue];
-
- expectedValue = @"2568";
- expectedImageType = SDLImageTypeStatic;
+ expectedIsTemplate = @YES;
});
afterEach(^{
expect(testSDLImage.value).to(equal(expectedValue));
expect(testSDLImage.imageType).to(equal(expectedImageType));
+ expect(testSDLImage.isTemplate).to(equal(expectedIsTemplate));
});
});
@@ -77,6 +69,89 @@ describe(@"Getter/Setter Tests", ^{
SDLImage *testSDLImage = [[SDLImage alloc] init];
expect(testSDLImage.value).to(beNil());
expect(testSDLImage.imageType).to(beNil());
+ expect(testSDLImage.isTemplate).to(beNil());
+ });
+});
+
+describe(@"initializers", ^{
+ __block SDLImage *testImage = nil;
+ __block NSString *testValue = @"testImage";
+ __block SDLImageType testImageType = SDLImageTypeDynamic;
+ __block BOOL testIsTemplate = YES;
+
+ beforeEach(^{
+ testImage = nil;
+ });
+
+ context(@"init", ^{
+ testImage = [[SDLImage alloc] init];
+
+ expect(testImage).toNot(beNil());
+ expect(testImage.value).to(beNil());
+ expect(testImage.imageType).to(beNil());
+ expect(testImage.isTemplate).to(beNil());
+ });
+
+ context(@"initWithName:ofType:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testImage = [[SDLImage alloc] initWithName:testValue ofType:testImageType];
+
+ expect(testImage).toNot(beNil());
+ expect(testImage.value).to(equal(testValue));
+ expect(testImage.imageType).to(equal(testImageType));
+ expect(testImage.isTemplate).to(beFalse());
+ #pragma clang diagnostic pop
+ });
+
+ context(@"initWithName:ofType:isTemplate", ^{
+ testImage = [[SDLImage alloc] initWithName:testValue ofType:testImageType isTemplate:testIsTemplate];
+
+ expect(testImage).toNot(beNil());
+ expect(testImage.value).to(equal(testValue));
+ expect(testImage.imageType).to(equal(testImageType));
+ expect(testImage.isTemplate).to(equal(testIsTemplate));
+ });
+
+ context(@"initWithName:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testImage = [[SDLImage alloc] initWithName:testValue];
+
+ expect(testImage).toNot(beNil());
+ expect(testImage.value).to(equal(testValue));
+ expect(testImage.imageType).to(equal(SDLImageTypeDynamic));
+ expect(testImage.isTemplate).to(beFalse());
+ #pragma clang diagnostic pop
+ });
+
+ context(@"initWithName:isTemplate", ^{
+ testImage = [[SDLImage alloc] initWithName:testValue isTemplate:testIsTemplate];
+
+ expect(testImage).toNot(beNil());
+ expect(testImage.value).to(equal(testValue));
+ expect(testImage.imageType).to(equal(SDLImageTypeDynamic));
+ expect(testImage.isTemplate).to(equal(testIsTemplate));
+ });
+
+ context(@"initWithStaticImageValue:", ^{
+ UInt16 staticImageValue = 12;
+ testImage = [[SDLImage alloc] initWithStaticImageValue:staticImageValue];
+
+ expect(testImage).toNot(beNil());
+ expect(testImage.value).to(equal([NSString stringWithFormat:@"%hu", staticImageValue]));
+ expect(testImage.imageType).to(equal(SDLImageTypeStatic));
+ expect(testImage.isTemplate).to(beTrue());
+ });
+
+ context(@"initWithStaticIconName:", ^{
+ SDLStaticIconName staticIconName = SDLStaticIconNameFavoriteStar;
+ testImage = [[SDLImage alloc] initWithStaticIconName:staticIconName];
+
+ expect(testImage).toNot(beNil());
+ expect(testImage.value).to(equal(staticIconName));
+ expect(testImage.imageType).to(equal(SDLImageTypeStatic));
+ expect(testImage.isTemplate).to(beTrue());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightCapabilitiesSpec.m
new file mode 100644
index 000000000..c3dc54ffa
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightCapabilitiesSpec.m
@@ -0,0 +1,62 @@
+//
+// SDLLightCapabilitiesSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLNames.h"
+#import "SDLLightName.h"
+#import "SDLLightCapabilities.h"
+
+QuickSpecBegin( SDLLightCapabilitiesSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLLightCapabilities* testStruct = [[SDLLightCapabilities alloc] init];
+
+ testStruct.name = SDLLightNameFogLights;
+ testStruct.densityAvailable = @YES;
+ testStruct.colorAvailable = @NO;
+
+ expect(testStruct.name).to(equal(SDLLightNameFogLights));
+ expect(testStruct.densityAvailable).to(equal(@YES));
+ expect(testStruct.colorAvailable).to(equal(@NO));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLLightCapabilities* testStruct = [[SDLLightCapabilities alloc] initWithName:SDLLightNameFogLights densityAvailable:YES colorAvailable:NO statusAvailable:NO];
+
+ expect(testStruct.name).to(equal(SDLLightNameFogLights));
+ expect(testStruct.densityAvailable).to(equal(@YES));
+ expect(testStruct.colorAvailable).to(equal(@NO));
+ expect(testStruct.statusAvailable).to(equal(@NO));
+
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameName:SDLLightNameFogLights,
+ SDLNameDensityAvailable:@YES,
+ SDLNameRGBColorSpaceAvailable:@NO
+ } mutableCopy];
+
+ SDLLightCapabilities* testStruct = [[SDLLightCapabilities alloc] initWithDictionary:dict];
+
+ expect(testStruct.name).to(equal(SDLLightNameFogLights));
+ expect(testStruct.densityAvailable).to(equal(@YES));
+ expect(testStruct.colorAvailable).to(equal(@NO));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLLightCapabilities* testStruct = [[SDLLightCapabilities alloc] init];
+
+ expect(testStruct.name).to(beNil());
+ expect(testStruct.densityAvailable).to(beNil());
+ expect(testStruct.colorAvailable).to(beNil());
+
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightControlCapabilitiesSpec.m
new file mode 100644
index 000000000..1bcfad24c
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightControlCapabilitiesSpec.m
@@ -0,0 +1,58 @@
+//
+// SDLLightControlCapabilitiesSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLLightControlCapabilities.h"
+#import "SDLNames.h"
+#import "SDLLightCapabilities.h"
+
+QuickSpecBegin( SDLLightControlCapabilitiesSpec)
+
+SDLLightCapabilities* somelightCapabilities = [[SDLLightCapabilities alloc] init];
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLLightControlCapabilities* testStruct = [[SDLLightControlCapabilities alloc] init];
+
+ testStruct.moduleName = @"moduleName";
+ testStruct.supportedLights = [@[somelightCapabilities] copy];
+
+ expect(testStruct.moduleName).to(equal(@"moduleName"));
+ expect(testStruct.supportedLights).to(equal([@[somelightCapabilities] copy]));
+
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLLightControlCapabilities* testStruct = [[SDLLightControlCapabilities alloc] initWithModuleName:@"moduleName" supportedLights:[@[somelightCapabilities] copy]];
+
+ expect(testStruct.moduleName).to(equal(@"moduleName"));
+ expect(testStruct.supportedLights).to(equal([@[somelightCapabilities] copy]));
+
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameModuleName:@"moduleName",
+ SDLNameSupportedLights:[@[somelightCapabilities] copy]
+ } mutableCopy];
+
+ SDLLightControlCapabilities* testStruct = [[SDLLightControlCapabilities alloc] initWithDictionary:dict];
+
+ expect(testStruct.moduleName).to(equal(@"moduleName"));
+ expect(testStruct.supportedLights).to(equal([@[somelightCapabilities] copy]));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLLightControlCapabilities* testStruct = [[SDLLightControlCapabilities alloc] init];
+
+ expect(testStruct.moduleName).to(beNil());
+ expect(testStruct.supportedLights).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightControlDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightControlDataSpec.m
new file mode 100644
index 000000000..40f342f05
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightControlDataSpec.m
@@ -0,0 +1,48 @@
+//
+// SDLLightControlDataSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLLightControlData.h"
+#import "SDLNames.h"
+#import "SDLLightState.h"
+
+QuickSpecBegin(SDLLightControlDataSpec)
+
+SDLLightState* someLightState = [[SDLLightState alloc] init];
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLLightControlData* testStruct = [[SDLLightControlData alloc] init];
+
+ testStruct.lightState = [@[someLightState] copy];
+
+ expect(testStruct.lightState).to(equal([@[someLightState] copy]));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLLightControlData* testStruct = [[SDLLightControlData alloc] initWithLightStates:[@[someLightState] copy]];
+ expect(testStruct.lightState).to(equal([@[someLightState] copy]));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameLightState:[@[someLightState] copy]} mutableCopy];
+
+ SDLLightControlData* testStruct = [[SDLLightControlData alloc] initWithDictionary:dict];
+
+ expect(testStruct.lightState).to(equal([@[someLightState] copy]));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLLightControlData* testStruct = [[SDLLightControlData alloc] init];
+
+ expect(testStruct.lightState).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightStateSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightStateSpec.m
new file mode 100644
index 000000000..3975cb3ed
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightStateSpec.m
@@ -0,0 +1,89 @@
+//
+// SDLLightStateSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLLightState.h"
+#import "SDLLightStatus.h"
+#import "SDLRGBColor.h"
+#import "SDLLightName.h"
+#import "SDLNames.h"
+
+QuickSpecBegin(SDLLightStateSpec)
+
+SDLRGBColor* someRGBColor = [[SDLRGBColor alloc] init];
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLLightState* testStruct = [[SDLLightState alloc] init];
+
+ testStruct.id = SDLLightNameFogLights;
+ testStruct.status = SDLLightStatusOn;
+ testStruct.density = @(0.5);
+ testStruct.color = someRGBColor;
+
+ expect(testStruct.id).to(equal(SDLLightNameFogLights));
+ expect(testStruct.status).to(equal(SDLLightStatusOn));
+ expect(testStruct.density).to(equal(@(0.5)));
+ expect(testStruct.color).to(equal(someRGBColor));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLLightState* testStruct = [[SDLLightState alloc] initWithId:SDLLightNameFogLights status:SDLLightStatusOFF];
+
+ expect(testStruct.id).to(equal(SDLLightNameFogLights));
+ expect(testStruct.status).to(equal(SDLLightStatusOFF));
+ expect(testStruct.density).to(beNil());
+ expect(testStruct.color).to(beNil());
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLLightState* testStruct = [[SDLLightState alloc] initWithId:SDLLightNameFogLights status:SDLLightStatusOFF density:0.5 color:someRGBColor];
+
+ expect(testStruct.id).to(equal(SDLLightNameFogLights));
+ expect(testStruct.status).to(equal(SDLLightStatusOFF));
+ expect(testStruct.density).to(equal(@(0.5)));
+ expect(testStruct.color).to(equal(someRGBColor));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ UIColor *testColorBack = [[UIColor alloc] init];
+ SDLRGBColor *testBlack = [[SDLRGBColor alloc] initWithRed:0 green:0 blue:0];
+
+ SDLLightState* testStruct = [[SDLLightState alloc] initWithId:SDLLightNameFogLights lightStatus:SDLLightStatusOFF lightDensity:0.5 lightColor:testColorBack];
+
+ expect(testStruct.id).to(equal(SDLLightNameFogLights));
+ expect(testStruct.status).to(equal(SDLLightStatusOFF));
+ expect(testStruct.density).to(equal(@(0.5)));
+ expect(testStruct.color).to(equal(testBlack));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameId:SDLLightNameFogLights,
+ SDLNameStatus:SDLLightStatusOn,
+ SDLNameDensity:@(0.5),
+ SDLNameColor:someRGBColor} mutableCopy];
+
+ SDLLightState* testStruct = [[SDLLightState alloc] initWithDictionary:dict];
+
+ expect(testStruct.id).to(equal(SDLLightNameFogLights));
+ expect(testStruct.status).to(equal(SDLLightStatusOn));
+ expect(testStruct.density).to(equal(@(0.5)));
+ expect(testStruct.color).to(equal(someRGBColor));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLLightState* testStruct = [[SDLLightState alloc] init];
+
+ expect(testStruct.id).to(beNil());
+ expect(testStruct.status).to(beNil());
+ expect(testStruct.density).to(beNil());
+ expect(testStruct.color).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMassageCushionFirmnessSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMassageCushionFirmnessSpec.m
new file mode 100644
index 000000000..4fc8f0b43
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMassageCushionFirmnessSpec.m
@@ -0,0 +1,52 @@
+//
+// SDLMassageCushionFirmnessSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLNames.h"
+#import "SDLMassageCushionFirmness.h"
+
+QuickSpecBegin(SDLMassageCushionFirmnessSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLMassageCushionFirmness* testStruct = [[SDLMassageCushionFirmness alloc] init];
+
+ testStruct.cushion = SDLMassageCushionSeatBolsters;
+ testStruct.firmness = @2;
+
+ expect(testStruct.cushion).to(equal(SDLMassageCushionSeatBolsters));
+ expect(testStruct.firmness).to(equal(@2));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLMassageCushionFirmness* testStruct = [[SDLMassageCushionFirmness alloc] initWithMassageCushion:SDLMassageCushionBackBolsters firmness:12];
+
+ expect(testStruct.cushion).to(equal(SDLMassageCushionBackBolsters));
+ expect(testStruct.firmness).to(equal(@12));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameCushion:SDLMassageCushionSeatBolsters,
+ SDLNameFirmness:@12
+ } mutableCopy];
+ SDLMassageCushionFirmness* testStruct = [[SDLMassageCushionFirmness alloc] initWithDictionary:dict];
+
+ expect(testStruct.cushion).to(equal(SDLMassageCushionSeatBolsters));
+ expect(testStruct.firmness).to(equal(@12));
+
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLMassageCushionFirmness* testStruct = [[SDLMassageCushionFirmness alloc] init];
+
+ expect(testStruct.cushion).to(beNil());
+ expect(testStruct.firmness).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMassageModeDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMassageModeDataSpec.m
new file mode 100644
index 000000000..6b52a36b2
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMassageModeDataSpec.m
@@ -0,0 +1,53 @@
+//
+// SDLMassageModeDataSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLNames.h"
+#import "SDLMassageModeData.h"
+
+QuickSpecBegin(SDLMassageModeDataSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLMassageModeData* testStruct = [[SDLMassageModeData alloc] init];
+
+ testStruct.massageMode = SDLMassageModeHigh;
+ testStruct.massageZone = SDLMassageZoneLumbar;
+
+ expect(testStruct.massageZone).to(equal(SDLMassageZoneLumbar));
+ expect(testStruct.massageMode).to(equal(SDLMassageModeHigh));
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLMassageModeData* testStruct = [[SDLMassageModeData alloc] initWithMassageMode:SDLMassageZoneLumbar massageZone:SDLMassageModeHigh];
+
+ expect(testStruct.massageZone).to(equal(SDLMassageModeHigh));
+ expect(testStruct.massageMode).to(equal(SDLMassageZoneLumbar));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameMassageMode:SDLMassageModeLow,
+ SDLNameMassageZone:SDLMassageZoneLumbar
+ } mutableCopy];
+ SDLMassageModeData* testStruct = [[SDLMassageModeData alloc] initWithDictionary:dict];
+
+ expect(testStruct.massageZone).to(equal(SDLMassageZoneLumbar));
+ expect(testStruct.massageMode).to(equal(SDLMassageModeLow));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLMassageModeData* testStruct = [[SDLMassageModeData alloc] init];
+
+ expect(testStruct.massageZone).to(beNil());
+ expect(testStruct.massageMode).to(beNil());
+ });
+});
+
+QuickSpecEnd
+
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLModuleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLModuleDataSpec.m
index ee14ff803..8e57eef6b 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLModuleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLModuleDataSpec.m
@@ -12,6 +12,10 @@
#import "SDLModuleType.h"
#import "SDLClimateControlData.h"
#import "SDLRadioControlData.h"
+#import "SDLSeatControlData.h"
+#import "SDLAudioControlData.h"
+#import "SDLLightControlData.h"
+#import "SDLHMISettingsControlData.h"
#import "SDLNames.h"
QuickSpecBegin(SDLModuleDataSpec)
@@ -19,25 +23,43 @@ QuickSpecBegin(SDLModuleDataSpec)
describe(@"Initialization tests", ^{
__block SDLRadioControlData* someRadioData = [[SDLRadioControlData alloc] init];
__block SDLClimateControlData* someClimateData = [[SDLClimateControlData alloc] init];
+ __block SDLAudioControlData* someAudioData = [[SDLAudioControlData alloc] init];
+ __block SDLLightControlData* someLightData = [[SDLLightControlData alloc] init];
+ __block SDLHMISettingsControlData* someHMISettingsData = [[SDLHMISettingsControlData alloc] init];
+ __block SDLSeatControlData* someSeatData = [[SDLSeatControlData alloc] init];
it(@"should properly initialize init", ^{
SDLModuleData* testStruct = [[SDLModuleData alloc] init];
-
+
expect(testStruct.moduleType).to(beNil());
expect(testStruct.radioControlData).to(beNil());
expect(testStruct.climateControlData).to(beNil());
+ expect(testStruct.seatControlData).to(beNil());
+ expect(testStruct.audioControlData).to(beNil());
+ expect(testStruct.hmiSettingsControlData).to(beNil());
+ expect(testStruct.lightControlData).to(beNil());
+
});
it(@"should properly initialize initWithDictionary", ^{
NSMutableDictionary* dict = [@{SDLNameModuleType:SDLModuleTypeRadio,
SDLNameRadioControlData:someRadioData,
- SDLNameClimateControlData:someClimateData} mutableCopy];
+ SDLNameClimateControlData:someClimateData,
+ SDLNameSeatControlData:someSeatData,
+ SDLNameAudioControlData:someAudioData,
+ SDLNameLightControlData:someLightData,
+ SDLNameHmiSettingsControlData:someHMISettingsData} mutableCopy];
SDLModuleData* testStruct = [[SDLModuleData alloc] initWithDictionary:dict];
expect(testStruct.moduleType).to(equal(SDLModuleTypeRadio));
expect(testStruct.radioControlData).to(equal(someRadioData));
+ expect(testStruct.seatControlData).to(equal(someSeatData));
expect(testStruct.climateControlData).to(equal(someClimateData));
+ expect(testStruct.audioControlData).to(equal(someAudioData));
+ expect(testStruct.hmiSettingsControlData).to(equal(someHMISettingsData));
+ expect(testStruct.lightControlData).to(equal(someLightData));
+
});
it(@"Should set and get correctly", ^{
@@ -45,10 +67,18 @@ describe(@"Initialization tests", ^{
testStruct.moduleType = SDLModuleTypeRadio;
testStruct.radioControlData = someRadioData;
testStruct.climateControlData = someClimateData;
+ testStruct.seatControlData = someSeatData;
+ testStruct.audioControlData = someAudioData;
+ testStruct.lightControlData = someLightData;
+ testStruct.hmiSettingsControlData = someHMISettingsData;
expect(testStruct.moduleType).to(equal(SDLModuleTypeRadio));
+ expect(testStruct.seatControlData).to(equal(someSeatData));
expect(testStruct.radioControlData).to(equal(someRadioData));
expect(testStruct.climateControlData).to(equal(someClimateData));
+ expect(testStruct.audioControlData).to(equal(someAudioData));
+ expect(testStruct.hmiSettingsControlData).to(equal(someHMISettingsData));
+ expect(testStruct.lightControlData).to(equal(someLightData));
});
it(@"Should get correctly when initialized with RadioControlData", ^ {
@@ -57,6 +87,7 @@ describe(@"Initialization tests", ^{
expect(testStruct.moduleType).to(equal(SDLModuleTypeRadio));
expect(testStruct.radioControlData).to(equal(someRadioData));
expect(testStruct.climateControlData).to(beNil());
+ expect(testStruct.seatControlData).to(beNil());
});
it(@"Should get correctly when initialized with ClimateControlData", ^ {
@@ -65,6 +96,49 @@ describe(@"Initialization tests", ^{
expect(testStruct.moduleType).to(equal(SDLModuleTypeClimate));
expect(testStruct.climateControlData).to(equal(someClimateData));
expect(testStruct.radioControlData).to(beNil());
+ expect(testStruct.seatControlData).to(beNil());
+ });
+
+ it(@"Should get correctly when initialized with ClimateControlData", ^ {
+ SDLModuleData* testStruct = [[SDLModuleData alloc] initWithSeatControlData:someSeatData];
+
+ expect(testStruct.moduleType).to(equal(SDLModuleTypeSeat));
+ expect(testStruct.seatControlData).to(equal(someSeatData));
+ expect(testStruct.radioControlData).to(beNil());
+ expect(testStruct.climateControlData).to(beNil());
+ });
+
+ it(@"Should get correctly when initialized with ClimateControlData", ^ {
+ SDLModuleData* testStruct = [[SDLModuleData alloc] initWithHMISettingsControlData:someHMISettingsData];
+
+ expect(testStruct.moduleType).to(equal(SDLModuleTypeHMISettings));
+ expect(testStruct.climateControlData).to(beNil());
+ expect(testStruct.radioControlData).to(beNil());
+ expect(testStruct.audioControlData).to(beNil());
+ expect(testStruct.lightControlData).to(beNil());
+ expect(testStruct.hmiSettingsControlData).to(equal(someHMISettingsData));
+ });
+
+ it(@"Should get correctly when initialized with ClimateControlData", ^ {
+ SDLModuleData* testStruct = [[SDLModuleData alloc] initWithLightControlData:someLightData];
+
+ expect(testStruct.moduleType).to(equal(SDLModuleTypeLight));
+ expect(testStruct.climateControlData).to(beNil());
+ expect(testStruct.radioControlData).to(beNil());
+ expect(testStruct.audioControlData).to(beNil());
+ expect(testStruct.lightControlData).to(equal(someLightData));
+ expect(testStruct.hmiSettingsControlData).to(beNil());
+ });
+
+ it(@"Should get correctly when initialized with ClimateControlData", ^ {
+ SDLModuleData* testStruct = [[SDLModuleData alloc] initWithAudioControlData:someAudioData];
+
+ expect(testStruct.moduleType).to(equal(SDLModuleTypeAudio));
+ expect(testStruct.climateControlData).to(beNil());
+ expect(testStruct.radioControlData).to(beNil());
+ expect(testStruct.audioControlData).to(equal(someAudioData));
+ expect(testStruct.lightControlData).to(beNil());
+ expect(testStruct.hmiSettingsControlData).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRGBColorSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRGBColorSpec.m
new file mode 100644
index 000000000..49c423d41
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRGBColorSpec.m
@@ -0,0 +1,60 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLRGBColor.h"
+
+#import "SDLNames.h"
+
+QuickSpecBegin(SDLRGBColorSpec)
+
+describe(@"RGBColor Tests", ^{
+ it(@"Should set and get correctly", ^{
+ SDLRGBColor *testStruct = [[SDLRGBColor alloc] init];
+
+ testStruct.red = @255;
+ testStruct.green = @100;
+ testStruct.blue = @0;
+
+ expect(testStruct.red).to(equal(@255));
+ expect(testStruct.green).to(equal(@100));
+ expect(testStruct.blue).to(equal(@0));
+ });
+
+ it(@"Should get correctly when initialized with parameters", ^{
+ SDLRGBColor *testStruct = [[SDLRGBColor alloc] initWithRed:0 green:100 blue:255];
+
+ expect(testStruct.red).to(equal(@0));
+ expect(testStruct.green).to(equal(@100));
+ expect(testStruct.blue).to(equal(@255));
+ });
+
+ it(@"Should get correctly when initialized with a color", ^{
+ UIColor *testColor = [UIColor colorWithRed:0.0 green:0.393 blue:1.0 alpha:0.0];
+ SDLRGBColor *testStruct = [[SDLRGBColor alloc] initWithColor:testColor];
+
+ expect(testStruct.red).to(equal(@0));
+ expect(testStruct.green).to(beCloseTo(@100));
+ expect(testStruct.blue).to(equal(@255));
+ });
+
+ it(@"Should get correctly when initialized with a dict", ^{
+ NSDictionary *dict = @{SDLNameRed: @0,
+ SDLNameGreen: @100,
+ SDLNameBlue: @255};
+ SDLRGBColor *testStruct = [[SDLRGBColor alloc] initWithDictionary:dict];
+
+ expect(testStruct.red).to(equal(@0));
+ expect(testStruct.green).to(equal(@100));
+ expect(testStruct.blue).to(equal(@255));
+ });
+
+ it(@"Should return nil if not set", ^{
+ SDLRGBColor *testStruct = [[SDLRGBColor alloc] init];
+
+ expect(testStruct.red).to(beNil());
+ expect(testStruct.green).to(beNil());
+ expect(testStruct.blue).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlCapabilitiesSpec.m
index d6e07fe11..d51d7910e 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlCapabilitiesSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlCapabilitiesSpec.m
@@ -28,6 +28,10 @@ describe(@"Initialization tests", ^{
expect(testStruct.stateAvailable).to(beNil());
expect(testStruct.signalStrengthAvailable).to(beNil());
expect(testStruct.signalChangeThresholdAvailable).to(beNil());
+ expect(testStruct.hdRadioEnableAvailable).to(beNil());
+ expect(testStruct.siriusXMRadioAvailable).to(beNil());
+ expect(testStruct.sisDataAvailable).to(beNil());
+
});
it(@"should properly initialize initWithDictionary", ^{
@@ -41,7 +45,11 @@ describe(@"Initialization tests", ^{
SDLNameAvailableHDsAvailable : @NO,
SDLNameStateAvailable : @YES,
SDLNameSignalStrengthAvailable : @YES,
- SDLNameSignalChangeThresholdAvailable : @NO} mutableCopy];
+ SDLNameSignalChangeThresholdAvailable : @NO,
+ SDLNameHDRadioEnableAvailable : @YES,
+ SDLNameSiriusXMRadioAvailable : @NO,
+ SDLNameSISDataAvailable:@YES
+ } mutableCopy];
SDLRadioControlCapabilities* testStruct = [[SDLRadioControlCapabilities alloc] initWithDictionary:dict];
expect(testStruct.moduleName).to(equal(@"someName"));
@@ -54,6 +62,10 @@ describe(@"Initialization tests", ^{
expect(testStruct.stateAvailable).to(equal(@YES));
expect(testStruct.signalStrengthAvailable).to(equal(@YES));
expect(testStruct.signalChangeThresholdAvailable).to(equal(@NO));
+ expect(testStruct.hdRadioEnableAvailable).to(equal(@YES));
+ expect(testStruct.siriusXMRadioAvailable).to(equal(@NO));
+ expect(testStruct.sisDataAvailable).to(equal(@YES));
+
});
it(@"Should set and get correctly", ^{
@@ -69,6 +81,9 @@ describe(@"Initialization tests", ^{
testStruct.stateAvailable = @YES;
testStruct.signalStrengthAvailable = @YES;
testStruct.signalChangeThresholdAvailable = @NO;
+ testStruct.hdRadioEnableAvailable = @YES;
+ testStruct.siriusXMRadioAvailable = @YES;
+ testStruct.sisDataAvailable = @YES;
expect(testStruct.moduleName).to(equal(@"someName"));
expect(testStruct.radioEnableAvailable).to(equal(@YES));
@@ -80,9 +95,15 @@ describe(@"Initialization tests", ^{
expect(testStruct.stateAvailable).to(equal(@YES));
expect(testStruct.signalStrengthAvailable).to(equal(@YES));
expect(testStruct.signalChangeThresholdAvailable).to(equal(@NO));
+ expect(testStruct.hdRadioEnableAvailable).to(equal(@YES));
+ expect(testStruct.siriusXMRadioAvailable).to(equal(@YES));
+ expect(testStruct.sisDataAvailable).to(equal(@YES));
+
});
-
- it(@"Should get correctly when initialized with Module Name and other radio control capabilite's parameters", ^ {
+
+ it(@"Should get correctly when initialized with Module Name and other radio control capability parameters", ^ {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLRadioControlCapabilities* testStruct = [[SDLRadioControlCapabilities alloc] initWithModuleName:@"someName" radioEnableAvailable:YES radioBandAvailable:NO radioFrequencyAvailable:YES hdChannelAvailable:NO rdsDataAvailable:NO availableHDsAvailable:NO stateAvailable:YES signalStrengthAvailable:YES signalChangeThresholdAvailable:NO];
expect(testStruct.moduleName).to(equal(@"someName"));
@@ -95,6 +116,28 @@ describe(@"Initialization tests", ^{
expect(testStruct.stateAvailable).to(equal(@YES));
expect(testStruct.signalStrengthAvailable).to(equal(@YES));
expect(testStruct.signalChangeThresholdAvailable).to(equal(@NO));
+ expect(testStruct.hdRadioEnableAvailable).to(equal(@NO));
+ expect(testStruct.siriusXMRadioAvailable).to(equal(@NO));
+ #pragma clang diagnostic pop
+ });
+
+ it(@"Should get correctly when initialized with Module Name and other radio control capabilite's parameters", ^ {
+ SDLRadioControlCapabilities* testStruct = [[SDLRadioControlCapabilities alloc] initWithModuleName:@"someName" radioEnableAvailable:YES radioBandAvailable:NO radioFrequencyAvailable:YES hdChannelAvailable:NO rdsDataAvailable:NO availableHDsAvailable:NO stateAvailable:YES signalStrengthAvailable:YES signalChangeThresholdAvailable:NO hdRadioEnableAvailable:YES siriusXMRadioAvailable:YES sisDataAvailable:YES];
+
+ expect(testStruct.moduleName).to(equal(@"someName"));
+ expect(testStruct.radioEnableAvailable).to(equal(@YES));
+ expect(testStruct.radioBandAvailable).to(equal(@NO));
+ expect(testStruct.radioFrequencyAvailable).to(equal(@YES));
+ expect(testStruct.hdChannelAvailable).to(equal(@NO));
+ expect(testStruct.rdsDataAvailable).to(equal(@NO));
+ expect(testStruct.availableHDsAvailable).to(equal(@NO));
+ expect(testStruct.stateAvailable).to(equal(@YES));
+ expect(testStruct.signalStrengthAvailable).to(equal(@YES));
+ expect(testStruct.signalChangeThresholdAvailable).to(equal(@NO));
+ expect(testStruct.hdRadioEnableAvailable).to(equal(YES));
+ expect(testStruct.siriusXMRadioAvailable).to(equal(@YES));
+ expect(testStruct.sisDataAvailable).to(equal(@YES));
+
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m
index 4a5ebee64..d974c1b2c 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m
@@ -12,6 +12,7 @@
#import "SDLRadioBand.h"
#import "SDLRadioState.h"
#import "SDLRDSData.h"
+#import "SDLSISData.h"
#import "SDLNames.h"
QuickSpecBegin(SDLRadioControlDataSpec)
@@ -32,10 +33,10 @@ describe(@"Initialization tests", ^{
expect(testStruct.signalChangeThreshold).to(beNil());
expect(testStruct.radioEnable).to(beNil());
expect(testStruct.state).to(beNil());
+ expect(testStruct.hdRadioEnable).to(beNil());
});
it(@"should properly initialize initWithDictionary", ^{
-
NSMutableDictionary* dict = [@{SDLNameFrequencyInteger : @101,
SDLNameFrequencyFraction : @7,
SDLNameBand : SDLRadioBandAM,
@@ -45,7 +46,9 @@ describe(@"Initialization tests", ^{
SDLNameSignalStrength : @54,
SDLNameSignalChangeThreshold : @76,
SDLNameRadioEnable : @YES,
- SDLNameState : SDLRadioStateNotFound} mutableCopy];
+ SDLNameState : SDLRadioStateNotFound,
+ SDLNameHDRadioEnable : @NO
+ } mutableCopy];
SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initWithDictionary:dict];
expect(testStruct.frequencyInteger).to(equal(@101));
@@ -58,6 +61,7 @@ describe(@"Initialization tests", ^{
expect(testStruct.signalChangeThreshold).to(equal(@76));
expect(testStruct.radioEnable).to(equal(@YES));
expect(testStruct.state).to(equal(SDLRadioStateNotFound));
+ expect(testStruct.hdRadioEnable).to(equal(@NO));
});
it(@"Should set and get correctly", ^{
@@ -72,7 +76,8 @@ describe(@"Initialization tests", ^{
testStruct.signalChangeThreshold = @76;
testStruct.radioEnable = @YES;
testStruct.state = SDLRadioStateNotFound;
-
+ testStruct.hdRadioEnable = @YES;
+
expect(testStruct.frequencyInteger).to(equal(@101));
expect(testStruct.frequencyFraction).to(equal(@7));
expect(testStruct.band).to(equal(SDLRadioBandAM));
@@ -83,9 +88,12 @@ describe(@"Initialization tests", ^{
expect(testStruct.signalChangeThreshold).to(equal(@76));
expect(testStruct.radioEnable).to(equal(@YES));
expect(testStruct.state).to(equal(SDLRadioStateNotFound));
+ expect(testStruct.hdRadioEnable).to(equal(@YES));
});
- it(@"Should get correctly when initialized with Module Name and other radio control capabilite's parameters", ^ {
+ it(@"Should get correctly when initialized with Module Name and other radio control capabilities parameters", ^ {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initWithFrequencyInteger:@101 frequencyFraction:@7 band:SDLRadioBandAM hdChannel:@2 radioEnable:@YES];
expect(testStruct.frequencyInteger).to(equal(@101));
@@ -93,7 +101,47 @@ describe(@"Initialization tests", ^{
expect(testStruct.band).to(equal(SDLRadioBandAM));
expect(testStruct.hdChannel).to(equal(@2));
expect(testStruct.radioEnable).to(equal(@YES));
+ #pragma clang diagnostic pop
+ });
+
+ it(@"Should get correctly when initialized with Module Name and other radio control capabilities parameters", ^ {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initWithFrequencyInteger:@101 frequencyFraction:@7 band:SDLRadioBandAM hdChannel:@2 radioEnable:@YES];
+
+ expect(testStruct.frequencyInteger).to(equal(@101));
+ expect(testStruct.frequencyFraction).to(equal(@7));
+ expect(testStruct.band).to(equal(SDLRadioBandAM));
+ expect(testStruct.hdChannel).to(equal(@2));
+ expect(testStruct.radioEnable).to(equal(@YES));
+ #pragma clang diagnostic pop
+ });
+
+ it(@"Should get correctly when initialized with Module Name and other radio control capabilities parameters", ^ {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initWithFrequencyInteger:@101 frequencyFraction:@7 band:SDLRadioBandAM hdChannel:@2 radioEnable:@YES];
+
+ expect(testStruct.frequencyInteger).to(equal(@101));
+ expect(testStruct.frequencyFraction).to(equal(@7));
+ expect(testStruct.band).to(equal(SDLRadioBandAM));
+ expect(testStruct.hdChannel).to(equal(@2));
+ expect(testStruct.radioEnable).to(equal(@YES));
+ expect(testStruct.sisData).to(beNil());
+ #pragma clang diagnostic pop
});
+
+ it(@"Should get correctly when initialized with Module Name and other radio control capabilities parameters", ^ {
+ SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initWithFrequencyInteger:@101 frequencyFraction:@7 band:SDLRadioBandAM hdChannel:@2 radioEnable:@YES hdRadioEnable:@YES];
+
+ expect(testStruct.frequencyInteger).to(equal(@101));
+ expect(testStruct.frequencyFraction).to(equal(@7));
+ expect(testStruct.band).to(equal(SDLRadioBandAM));
+ expect(testStruct.hdChannel).to(equal(@2));
+ expect(testStruct.radioEnable).to(equal(@YES));
+ expect(testStruct.hdRadioEnable).to(equal(@YES));
+ });
+
});
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRectangleSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRectangleSpec.m
index 59749135d..87c516bfa 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRectangleSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRectangleSpec.m
@@ -8,7 +8,7 @@
QuickSpecBegin(SDLRectangleSpec)
-describe(@"Getter/Setter Tests", ^{
+describe(@"Rectangle Tests", ^{
it(@"Should set and get correctly", ^{
SDLRectangle *testStruct = [[SDLRectangle alloc] init];
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRemoteControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRemoteControlCapabilitiesSpec.m
index 0dc04323a..7067d058d 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRemoteControlCapabilitiesSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRemoteControlCapabilitiesSpec.m
@@ -8,9 +8,13 @@
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
+#import "SDLAudioControlCapabilities.h"
#import "SDLRemoteControlCapabilities.h"
#import "SDLClimateControlCapabilities.h"
+#import "SDLLightControlCapabilities.h"
+#import "SDLHMISettingsControlCapabilities.h"
#import "SDLRadioControlCapabilities.h"
+#import "SDLSeatControlCapabilities.h"
#import "SDLButtonCapabilities.h"
#import "SDLNames.h"
@@ -19,47 +23,92 @@ QuickSpecBegin(SDLRemoteControlCapabilitiesSpec)
__block SDLClimateControlCapabilities* someClimateControlCapabilities = [[SDLClimateControlCapabilities alloc] init];
__block SDLRadioControlCapabilities* someRadioControlCapabilities = [[SDLRadioControlCapabilities alloc] init];
__block SDLButtonCapabilities* someButtonControlCapabilities = [[SDLButtonCapabilities alloc] init];
+__block SDLSeatControlCapabilities* someSeatControlCapabilities = [[SDLSeatControlCapabilities alloc] init];
+
+
+__block SDLAudioControlCapabilities* someAudioControlCapabilities = [[SDLAudioControlCapabilities alloc] init];
+
+__block SDLLightControlCapabilities* someLightControlCapabilities = [[SDLLightControlCapabilities alloc] init];
+
+__block SDLHMISettingsControlCapabilities* someHMISettingsControlCapabilities = [[SDLHMISettingsControlCapabilities alloc] init];
describe(@"Initialization tests", ^{
it(@"should properly initialize init", ^{
SDLRemoteControlCapabilities* testStruct = [[SDLRemoteControlCapabilities alloc] init];
-
+
+ expect(testStruct.seatControlCapabilities).to(beNil());
expect(testStruct.climateControlCapabilities).to(beNil());
expect(testStruct.radioControlCapabilities).to(beNil());
expect(testStruct.buttonCapabilities).to(beNil());
+ expect(testStruct.audioControlCapabilities).to(beNil());
+ expect(testStruct.hmiSettingsControlCapabilities).to(beNil());
+ expect(testStruct.lightControlCapabilities).to(beNil());
+
});
it(@"should properly initialize initWithDictionary", ^{
NSMutableDictionary* dict = [@{SDLNameClimateControlCapabilities : [@[someClimateControlCapabilities] copy],
SDLNameRadioControlCapabilities :[@[someRadioControlCapabilities] copy],
- SDLNameButtonCapabilities :[@[someButtonControlCapabilities] copy] } mutableCopy];
+ SDLNameButtonCapabilities :[@[someButtonControlCapabilities] copy],
+ SDLNameSeatControlCapabilities:[@[someSeatControlCapabilities]copy],
+ SDLNameAudioControlCapabilities :[@[someAudioControlCapabilities] copy],
+ SDLNameLightControlCapabilities :[@[someLightControlCapabilities] copy],
+ SDLNameHmiSettingsControlCapabilities : [@[someHMISettingsControlCapabilities] copy]
+ } mutableCopy];
SDLRemoteControlCapabilities* testStruct = [[SDLRemoteControlCapabilities alloc] initWithDictionary:dict];
-
+
+ expect(testStruct.seatControlCapabilities).to(equal([@[someSeatControlCapabilities] copy]));
expect(testStruct.climateControlCapabilities).to(equal([@[someClimateControlCapabilities] copy]));
expect(testStruct.radioControlCapabilities).to(equal([@[someRadioControlCapabilities] copy]));
expect(testStruct.buttonCapabilities).to(equal([@[someButtonControlCapabilities] copy]));
+ expect(testStruct.audioControlCapabilities).to(equal([@[someAudioControlCapabilities] copy]));
+ expect(testStruct.hmiSettingsControlCapabilities).to(equal([@[someHMISettingsControlCapabilities] copy]));
+ expect(testStruct.lightControlCapabilities).to(equal([@[someLightControlCapabilities] copy]));
});
it(@"Should set and get correctly", ^{
SDLRemoteControlCapabilities* testStruct = [[SDLRemoteControlCapabilities alloc] init];
-
+
+ testStruct.seatControlCapabilities = ([@[someSeatControlCapabilities] copy]);
testStruct.climateControlCapabilities = ([@[someClimateControlCapabilities] copy]);
testStruct.radioControlCapabilities = [@[someRadioControlCapabilities] copy];
testStruct.buttonCapabilities = [@[someButtonControlCapabilities] copy];
+ testStruct.audioControlCapabilities = [@[someAudioControlCapabilities] copy];
+ testStruct.hmiSettingsControlCapabilities = [@[someHMISettingsControlCapabilities]copy];
+ testStruct.lightControlCapabilities = [@[someLightControlCapabilities]copy];
+ expect(testStruct.seatControlCapabilities).to(equal([@[someSeatControlCapabilities] copy]));
expect(testStruct.climateControlCapabilities).to(equal(([@[someClimateControlCapabilities] copy])));
expect(testStruct.radioControlCapabilities).to(equal([@[someRadioControlCapabilities] copy]));
expect(testStruct.buttonCapabilities).to(equal([@[someButtonControlCapabilities] copy]));
+ expect(testStruct.audioControlCapabilities).to(equal([@[someAudioControlCapabilities] copy]));
+ expect(testStruct.hmiSettingsControlCapabilities).to(equal([@[someHMISettingsControlCapabilities] copy]));
+ expect(testStruct.lightControlCapabilities).to(equal([@[someLightControlCapabilities] copy]));
});
it(@"Should get correctly when initialized with climateControlCapabilities and other RemoteControlCapabilities parameters", ^ {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLRemoteControlCapabilities* testStruct = [[SDLRemoteControlCapabilities alloc] initWithClimateControlCapabilities:[@[someClimateControlCapabilities] copy] radioControlCapabilities:[@[someRadioControlCapabilities] copy] buttonCapabilities:[@[someButtonControlCapabilities] copy]];
+ expect(testStruct.seatControlCapabilities).to(beNil());
+ expect(testStruct.climateControlCapabilities).to(equal(([@[someClimateControlCapabilities] copy])));
+ expect(testStruct.radioControlCapabilities).to(equal([@[someRadioControlCapabilities] copy]));
+ expect(testStruct.buttonCapabilities).to(equal([@[someButtonControlCapabilities] copy]));
+ #pragma clang diagnostic pop
+ });
+
+ it(@"Should get correctly when initialized with climateControlCapabilities and other RemoteControlCapabilities parameters", ^ {
+ SDLRemoteControlCapabilities* testStruct = [[SDLRemoteControlCapabilities alloc] initWithClimateControlCapabilities:[@[someClimateControlCapabilities] copy] radioControlCapabilities:[@[someRadioControlCapabilities] copy] buttonCapabilities:[@[someButtonControlCapabilities] copy] seatControlCapabilities:[@[someSeatControlCapabilities] copy] audioControlCapabilities:[@[someAudioControlCapabilities] copy] hmiSettingsControlCapabilities:[@[someHMISettingsControlCapabilities] copy] lightControlCapabilities:[@[someLightControlCapabilities] copy]];
+
expect(testStruct.climateControlCapabilities).to(equal(([@[someClimateControlCapabilities] copy])));
expect(testStruct.radioControlCapabilities).to(equal([@[someRadioControlCapabilities] copy]));
expect(testStruct.buttonCapabilities).to(equal([@[someButtonControlCapabilities] copy]));
+ expect(testStruct.audioControlCapabilities).to(equal([@[someAudioControlCapabilities] copy]));
+ expect(testStruct.hmiSettingsControlCapabilities).to(equal([@[someHMISettingsControlCapabilities] copy]));
+ expect(testStruct.lightControlCapabilities).to(equal([@[someLightControlCapabilities] copy]));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSISDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSISDataSpec.m
new file mode 100644
index 000000000..3c20090aa
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSISDataSpec.m
@@ -0,0 +1,80 @@
+//
+// SDLSISDataSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLNames.h"
+#import "SDLSISData.h"
+#import "SDLStationIDNumber.h"
+#import "SDLGPSData.h"
+
+QuickSpecBegin(SDLSISDataSpec)
+
+SDLStationIDNumber *someID = [[SDLStationIDNumber alloc] init];
+SDLGPSData *someLocation = [[SDLGPSData alloc] init];
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLSISData* testStruct = [[SDLSISData alloc] init];
+
+ testStruct.stationShortName = @"short";
+ testStruct.stationIDNumber = someID;
+ testStruct.stationLongName = @"long";
+ testStruct.stationLocation = someLocation;
+ testStruct.stationMessage = @"message";
+
+
+ expect(testStruct.stationShortName).to(equal(@"short"));
+ expect(testStruct.stationIDNumber).to(equal(someID));
+ expect(testStruct.stationLongName).to(equal(@"long"));
+ expect(testStruct.stationLocation).to(equal(someLocation));
+ expect(testStruct.stationMessage).to(equal(@"message"));
+
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLSISData* testStruct = [[SDLSISData alloc] initWithStationShortName:@"short" stationIDNumber:someID stationLongName:@"long" stationLocation:someLocation stationMessage:@"message"];
+
+ expect(testStruct.stationShortName).to(equal(@"short"));
+ expect(testStruct.stationIDNumber).to(equal(someID));
+ expect(testStruct.stationLongName).to(equal(@"long"));
+ expect(testStruct.stationLocation).to(equal(someLocation));
+ expect(testStruct.stationMessage).to(equal(@"message"));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameStationShortName:@"short",
+ SDLNameStationLongName:@"long",
+ SDLNameStationLocation:someLocation,
+ SDLNameStationIDNumber:someID,
+ SDLNameStationMessage:@"message"
+ } mutableCopy];
+
+ SDLSISData* testStruct = [[SDLSISData alloc] initWithDictionary:dict];
+
+ expect(testStruct.stationShortName).to(equal(@"short"));
+ expect(testStruct.stationIDNumber).to(equal(someID));
+ expect(testStruct.stationLongName).to(equal(@"long"));
+ expect(testStruct.stationLocation).to(equal(someLocation));
+ expect(testStruct.stationMessage).to(equal(@"message"));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLSISData* testStruct = [[SDLSISData alloc] init];
+
+ expect(testStruct.stationShortName).to(beNil());
+ expect(testStruct.stationIDNumber).to(beNil());
+ expect(testStruct.stationLongName).to(beNil());
+ expect(testStruct.stationLocation).to(beNil());
+ expect(testStruct.stationMessage).to(beNil());
+
+
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatControlCapabilitiesSpec.m
new file mode 100644
index 000000000..07f6b8c4a
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatControlCapabilitiesSpec.m
@@ -0,0 +1,162 @@
+//
+// SDLSeatControlCapabilitiesSpec.m
+// SmartDeviceLinkTests
+//
+#import <Foundation/Foundation.h>
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLNames.h"
+#import "SDLSeatControlCapabilities.h"
+
+
+QuickSpecBegin(SDLSeatControlCapabilitiesSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLSeatControlCapabilities* testStruct = [[SDLSeatControlCapabilities alloc] init];
+
+ testStruct.moduleName = @"moduleName";
+ testStruct.heatingEnabledAvailable = @YES;
+ testStruct.coolingEnabledAvailable = @NO;
+ testStruct.heatingLevelAvailable = @YES;
+ testStruct.coolingLevelAvailable = @NO;
+ testStruct.horizontalPositionAvailable = @NO;
+ testStruct.verticalPositionAvailable = @NO;
+ testStruct.frontVerticalPositionAvailable = @NO;
+ testStruct.backVerticalPositionAvailable = @NO;
+ testStruct.backTiltAngleAvailable = @YES;
+ testStruct.headSupportVerticalPositionAvailable = @NO;
+ testStruct.headSupportHorizontalPositionAvailable = @YES;
+ testStruct.massageEnabledAvailable = @NO;
+ testStruct.massageModeAvailable = @YES;
+ testStruct.massageCushionFirmnessAvailable = @NO;
+ testStruct.memoryAvailable = @NO;
+
+ expect(testStruct.moduleName).to(equal(@"moduleName"));
+ expect(testStruct.heatingEnabledAvailable).to(equal(@YES));
+ expect(testStruct.coolingEnabledAvailable).to(equal(@NO));
+ expect(testStruct.heatingLevelAvailable).to(equal(@YES));
+ expect(testStruct.coolingLevelAvailable).to(equal(@NO));
+ expect(testStruct.horizontalPositionAvailable).to(equal(@NO));
+ expect(testStruct.verticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.frontVerticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.backVerticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.backTiltAngleAvailable).to(equal(@YES));
+ expect(testStruct.headSupportVerticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.headSupportHorizontalPositionAvailable).to(equal(@YES));
+ expect(testStruct.massageEnabledAvailable).to(equal(@NO));
+ expect(testStruct.massageModeAvailable).to(equal(@YES));
+ expect(testStruct.massageCushionFirmnessAvailable).to(equal(@NO));
+ expect(testStruct.memoryAvailable).to(equal(@NO));
+
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLSeatControlCapabilities* testStruct = [[SDLSeatControlCapabilities alloc] initWithName:@"moduleName" heatingEnabledAvailable:YES coolingEnabledAvailable:NO heatingLevelAvailable:YES coolingLevelAvailable:NO horizontalPositionAvailable:NO verticalPositionAvailable:NO frontVerticalPositionAvailable:NO backVerticalPositionAvailable:NO backTiltAngleAvailable:YES headSupportHorizontalPositionAvailable:NO headSupportVerticalPositionAvailable:YES massageEnabledAvailable:NO massageModeAvailable:YES massageCushionFirmnessAvailable:NO memoryAvailable:YES];
+
+ expect(testStruct.moduleName).to(equal(@"moduleName"));
+ expect(testStruct.heatingEnabledAvailable).to(equal(@YES));
+ expect(testStruct.coolingEnabledAvailable).to(equal(@NO));
+ expect(testStruct.heatingLevelAvailable).to(equal(@YES));
+ expect(testStruct.coolingLevelAvailable).to(equal(@NO));
+ expect(testStruct.horizontalPositionAvailable).to(equal(@NO));
+ expect(testStruct.verticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.frontVerticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.backVerticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.backTiltAngleAvailable).to(equal(@YES));
+ expect(testStruct.headSupportHorizontalPositionAvailable).to(equal(@NO));
+ expect(testStruct.headSupportVerticalPositionAvailable).to(equal(@YES));
+ expect(testStruct.massageEnabledAvailable).to(equal(@NO));
+ expect(testStruct.massageModeAvailable).to(equal(@YES));
+ expect(testStruct.massageCushionFirmnessAvailable).to(equal(@NO));
+ expect(testStruct.memoryAvailable).to(equal(@YES));
+
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLSeatControlCapabilities* testStruct = [[SDLSeatControlCapabilities alloc] initWithName:@"moduleName"];
+
+ expect(testStruct.moduleName).to(equal(@"moduleName"));
+ expect(testStruct.heatingEnabledAvailable).to(beNil());
+ expect(testStruct.heatingEnabledAvailable).to(beNil());
+ expect(testStruct.heatingLevelAvailable).to(beNil());
+ expect(testStruct.coolingLevelAvailable).to(beNil());
+ expect(testStruct.horizontalPositionAvailable).to(beNil());
+ expect(testStruct.verticalPositionAvailable).to(beNil());
+ expect(testStruct.frontVerticalPositionAvailable).to(beNil());
+ expect(testStruct.backVerticalPositionAvailable).to(beNil());
+ expect(testStruct.backTiltAngleAvailable).to(beNil());
+ expect(testStruct.headSupportHorizontalPositionAvailable).to(beNil());
+ expect(testStruct.headSupportVerticalPositionAvailable).to(beNil());
+ expect(testStruct.massageEnabledAvailable).to(beNil());
+ expect(testStruct.massageModeAvailable).to(beNil());
+ expect(testStruct.massageCushionFirmnessAvailable).to(beNil());
+ expect(testStruct.memoryAvailable).to(beNil());
+
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameModuleName:@"moduleName",
+ SDLNameHeatingEnabledAvailable:(@YES),
+ SDLNameCoolingEnabledAvailable:@YES,
+ SDLNameHeatingLevelAvailable:@YES,
+ SDLNameCoolingLevelAvailable:@NO,
+ SDLNameHorizontalPositionAvailable:@NO,
+ SDLNameVerticalPositionAvailable:@NO,
+ SDLNameFrontVerticalPositionAvailable:@NO,
+ SDLNameBackVerticalPositionAvailable:@NO,
+ SDLNameBackTiltAngleAvailable:@YES,
+ SDLNameHeadSupportHorizontalPositionAvailable:@NO,
+ SDLNameHeadSupportVerticalPositionAvailable:@YES,
+ SDLNameMassageEnabledAvailable:@NO,
+ SDLNameMassageModeAvailable:@YES,
+ SDLNameMassageCushionFirmnessAvailable:@NO,
+ SDLNameMemoryAvailable:@NO
+ } mutableCopy];
+ SDLSeatControlCapabilities *testStruct = [[SDLSeatControlCapabilities alloc] initWithDictionary:dict];
+
+ expect(testStruct.moduleName).to(equal(@"moduleName"));
+ expect(testStruct.heatingEnabledAvailable).to(equal(@YES));
+ expect(testStruct.coolingEnabledAvailable).to(equal(@YES));
+ expect(testStruct.heatingLevelAvailable).to(equal(@YES));
+ expect(testStruct.coolingLevelAvailable).to(equal(@NO));
+ expect(testStruct.horizontalPositionAvailable).to(equal(@NO));
+ expect(testStruct.verticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.frontVerticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.backVerticalPositionAvailable).to(equal(@NO));
+ expect(testStruct.backTiltAngleAvailable).to(equal(@YES));
+ expect(testStruct.headSupportHorizontalPositionAvailable).to(equal(@NO));
+ expect(testStruct.headSupportVerticalPositionAvailable).to(equal(@YES));
+ expect(testStruct.massageEnabledAvailable).to(equal(@NO));
+ expect(testStruct.massageModeAvailable).to(equal(@YES));
+ expect(testStruct.massageCushionFirmnessAvailable).to(equal(@NO));
+ expect(testStruct.memoryAvailable).to(equal(@NO));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLSeatControlCapabilities* testStruct = [[SDLSeatControlCapabilities alloc] init];
+
+ expect(testStruct.moduleName).to(beNil());
+ expect(testStruct.heatingEnabledAvailable).to(beNil());
+ expect(testStruct.heatingEnabledAvailable).to(beNil());
+ expect(testStruct.heatingLevelAvailable).to(beNil());
+ expect(testStruct.coolingLevelAvailable).to(beNil());
+ expect(testStruct.horizontalPositionAvailable).to(beNil());
+ expect(testStruct.verticalPositionAvailable).to(beNil());
+ expect(testStruct.frontVerticalPositionAvailable).to(beNil());
+ expect(testStruct.backVerticalPositionAvailable).to(beNil());
+ expect(testStruct.backTiltAngleAvailable).to(beNil());
+ expect(testStruct.headSupportHorizontalPositionAvailable).to(beNil());
+ expect(testStruct.headSupportVerticalPositionAvailable).to(beNil());
+ expect(testStruct.massageEnabledAvailable).to(beNil());
+ expect(testStruct.massageModeAvailable).to(beNil());
+ expect(testStruct.massageCushionFirmnessAvailable).to(beNil());
+ expect(testStruct.memoryAvailable).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatControlDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatControlDataSpec.m
new file mode 100644
index 000000000..02dc0500f
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatControlDataSpec.m
@@ -0,0 +1,171 @@
+//
+// SDLSeatControlDataSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLNames.h"
+#import "SDLSeatControlData.h"
+#import "SDLMassageModeData.h"
+#import "SDLMassageCushionFirmness.h"
+#import "SDLSeatMemoryAction.h"
+
+
+QuickSpecBegin(SDLSeatControlDataSpec)
+
+SDLMassageCushionFirmness* massageCushionFirmness = [[SDLMassageCushionFirmness alloc] init];
+SDLMassageModeData *massageModeData = [[SDLMassageModeData alloc] init];
+SDLSeatMemoryAction *seatMemoryAction = [[SDLSeatMemoryAction alloc] init];
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLSeatControlData* testStruct = [[SDLSeatControlData alloc] init];
+
+ testStruct.id = SDLSupportedSeatDriver;
+ testStruct.heatingEnabled = @NO;
+ testStruct.coolingEnabled = @YES;
+ testStruct.heatingLevel = @25;
+ testStruct.coolingLevel = @10;
+
+ testStruct.horizontalPosition = @23;
+ testStruct.verticalPosition = @25;
+ testStruct.frontVerticalPosition = @12;
+ testStruct.backVerticalPosition = @34;
+ testStruct.backTiltAngle = @12;
+
+ testStruct.headSupportHorizontalPosition = @3;
+ testStruct.headSupportVerticalPosition = @43;
+
+ testStruct.massageEnabled = @YES;
+ testStruct.massageMode = [@[massageModeData] copy];
+ testStruct.massageCushionFirmness = [@[massageCushionFirmness] copy];
+ testStruct.memory = seatMemoryAction;
+
+ expect(testStruct.id).to(equal(SDLSupportedSeatDriver));
+ expect(testStruct.heatingEnabled).to(equal(@NO));
+ expect(testStruct.coolingEnabled).to(equal(@YES));
+ expect(testStruct.heatingLevel).to(equal(@25));
+ expect(testStruct.coolingLevel).to(equal(@10));
+ expect(testStruct.horizontalPosition).to(equal(@23));
+ expect(testStruct.verticalPosition).to(equal(@25));
+ expect(testStruct.frontVerticalPosition).to(equal(@12));
+ expect(testStruct.backVerticalPosition).to(equal(@34));
+ expect(testStruct.backTiltAngle).to(equal(@12));
+ expect(testStruct.headSupportHorizontalPosition).to(equal(@3));
+ expect(testStruct.headSupportVerticalPosition).to(equal(@43));
+ expect(testStruct.massageEnabled).to(equal(@YES));
+ expect(testStruct.massageMode).to(equal([@[massageModeData] copy]));
+ expect(testStruct.massageCushionFirmness).to(equal([@[massageCushionFirmness] copy]));
+ expect(testStruct.memory).to(equal(seatMemoryAction));
+
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLSeatControlData* testStruct = [[SDLSeatControlData alloc] initWithId:SDLSupportedSeatDriver heatingEnabled:NO coolingEnable:YES heatingLevel:25 coolingLevel:10 horizontalPostion:23 verticalPostion:25 frontVerticalPostion:12 backVerticalPostion:25 backTiltAngle:2 headSupportedHorizontalPostion:3 headSupportedVerticalPostion:43 massageEnabled:YES massageMode:[@[massageModeData] copy] massageCussionFirmness:[@[massageCushionFirmness] copy] memory:seatMemoryAction];
+
+ expect(testStruct.id).to(equal(SDLSupportedSeatDriver));
+ expect(testStruct.heatingEnabled).to(equal(@NO));
+ expect(testStruct.coolingEnabled).to(equal(@YES));
+ expect(testStruct.heatingLevel).to(equal(@25));
+ expect(testStruct.coolingLevel).to(equal(@10));
+ expect(testStruct.horizontalPosition).to(equal(@23));
+ expect(testStruct.verticalPosition).to(equal(@25));
+ expect(testStruct.frontVerticalPosition).to(equal(@12));
+ expect(testStruct.backVerticalPosition).to(equal(@25));
+ expect(testStruct.backTiltAngle).to(equal(@2));
+ expect(testStruct.headSupportHorizontalPosition).to(equal(@3));
+ expect(testStruct.headSupportVerticalPosition).to(equal(@43));
+ expect(testStruct.massageEnabled).to(equal(@YES));
+ expect(testStruct.massageMode).to(equal([@[massageModeData] copy]));
+ expect(testStruct.massageCushionFirmness).to(equal([@[massageCushionFirmness] copy]));
+ expect(testStruct.memory).to(equal(seatMemoryAction));
+
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLSeatControlData* testStruct = [[SDLSeatControlData alloc] initWithId:SDLSupportedSeatDriver];
+
+ expect(testStruct.id).to(equal(SDLSupportedSeatDriver));
+ expect(testStruct.heatingEnabled).to(beNil());
+ expect(testStruct.coolingEnabled).to(beNil());
+ expect(testStruct.heatingLevel).to(beNil());
+ expect(testStruct.coolingLevel).to(beNil());
+ expect(testStruct.horizontalPosition).to(beNil());
+ expect(testStruct.verticalPosition).to(beNil());
+ expect(testStruct.frontVerticalPosition).to(beNil());
+ expect(testStruct.backVerticalPosition).to(beNil());
+ expect(testStruct.backTiltAngle).to(beNil());
+ expect(testStruct.headSupportHorizontalPosition).to(beNil());
+ expect(testStruct.headSupportVerticalPosition).to(beNil());
+ expect(testStruct.massageEnabled).to(beNil());
+ expect(testStruct.massageMode).to(beNil());
+ expect(testStruct.massageCushionFirmness).to(beNil());
+ expect(testStruct.memory).to(beNil());
+
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameId:SDLSupportedSeatDriver,
+ SDLNameHeatingEnabled:@NO,
+ SDLNameCoolingEnabled:@YES,
+ SDLNameHeatingLevel:@25,
+ SDLNameCoolingLevel:@10,
+ SDLNameHorizontalPosition:@23,
+ SDLNameVerticalPosition:@25,
+ SDLNameFrontVerticalPosition:@12,
+ SDLNameBackVerticalPosition:@34,
+ SDLNameBackTiltAngle:@2,
+ SDLNameHeadSupportHorizontalPosition:@3,
+ SDLNameHeadSupportVerticalPosition:@43,
+ SDLNameMassageEnabled:@YES,
+ SDLNameMassageMode:[@[massageModeData] mutableCopy],
+ SDLNameMassageCushionFirmness:[@[massageCushionFirmness] mutableCopy],
+ SDLNameMemory:seatMemoryAction
+ } mutableCopy];
+ SDLSeatControlData *testStruct = [[SDLSeatControlData alloc] initWithDictionary:dict];
+
+ expect(testStruct.id).to(equal(SDLSupportedSeatDriver));
+ expect(testStruct.heatingEnabled).to(equal(@NO));
+ expect(testStruct.coolingEnabled).to(equal(@YES));
+ expect(testStruct.heatingLevel).to(equal(@25));
+ expect(testStruct.coolingLevel).to(equal(@10));
+ expect(testStruct.horizontalPosition).to(equal(@23));
+ expect(testStruct.verticalPosition).to(equal(@25));
+ expect(testStruct.frontVerticalPosition).to(equal(@12));
+ expect(testStruct.backVerticalPosition).to(equal(@34));
+ expect(testStruct.backTiltAngle).to(equal(@2));
+ expect(testStruct.headSupportHorizontalPosition).to(equal(@3));
+ expect(testStruct.headSupportVerticalPosition).to(equal(@43));
+ expect(testStruct.massageEnabled).to(equal(@YES));
+ expect(testStruct.massageMode).to(equal([@[massageModeData] mutableCopy]));
+ expect(testStruct.massageCushionFirmness).to(equal([@[massageCushionFirmness] mutableCopy]));
+ expect(testStruct.memory).to(equal(seatMemoryAction));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLSeatControlData* testStruct = [[SDLSeatControlData alloc] init];
+
+ expect(testStruct.id).to(beNil());
+ expect(testStruct.heatingEnabled).to(beNil());
+ expect(testStruct.coolingEnabled).to(beNil());
+ expect(testStruct.heatingLevel).to(beNil());
+ expect(testStruct.coolingLevel).to(beNil());
+ expect(testStruct.horizontalPosition).to(beNil());
+ expect(testStruct.verticalPosition).to(beNil());
+ expect(testStruct.frontVerticalPosition).to(beNil());
+ expect(testStruct.backVerticalPosition).to(beNil());
+ expect(testStruct.backTiltAngle).to(beNil());
+ expect(testStruct.headSupportHorizontalPosition).to(beNil());
+ expect(testStruct.headSupportVerticalPosition).to(beNil());
+ expect(testStruct.massageEnabled).to(beNil());
+ expect(testStruct.massageMode).to(beNil());
+ expect(testStruct.massageCushionFirmness).to(beNil());
+ expect(testStruct.memory).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatMemoryActionSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatMemoryActionSpec.m
new file mode 100644
index 000000000..a256e50a8
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSeatMemoryActionSpec.m
@@ -0,0 +1,60 @@
+//
+// SDLSeatMemoryActionSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLNames.h"
+#import "SDLSeatMemoryAction.h"
+
+QuickSpecBegin(SDLSeatMemoryActionSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLSeatMemoryAction* testStruct = [[SDLSeatMemoryAction alloc] init];
+
+ testStruct.id = @12;
+ testStruct.action = SDLSeatMemoryActionTypeSave;
+ testStruct.label = @"Save";
+
+ expect(testStruct.id).to(equal(@12));
+ expect(testStruct.action).to(equal(SDLSeatMemoryActionTypeSave));
+ expect(testStruct.label).to(equal(@"Save"));
+
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLSeatMemoryAction* testStruct = [[SDLSeatMemoryAction alloc] initWithId:23 label:@"restore" action:SDLSeatMemoryActionTypeRestore];
+
+ expect(testStruct.id).to(equal(@23));
+ expect(testStruct.action).to(equal(SDLSeatMemoryActionTypeRestore));
+ expect(testStruct.label).to(equal(@"restore"));
+
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameId:@54,
+ SDLNameLabel:@"none",
+ SDLNameAction: SDLSeatMemoryActionTypeNone
+ } mutableCopy];
+ SDLSeatMemoryAction *testStruct = [[SDLSeatMemoryAction alloc] initWithDictionary:dict];
+
+ expect(testStruct.id).to(equal(@54));
+ expect(testStruct.action).to(equal(SDLSeatMemoryActionTypeNone));
+ expect(testStruct.label).to(equal(@"none"));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLSeatMemoryAction* testStruct = [[SDLSeatMemoryAction alloc] init];
+
+ expect(testStruct.id).to(beNil());
+ expect(testStruct.action).to(beNil());
+ expect(testStruct.label).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSingleTireStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSingleTireStatusSpec.m
index 69c0d347d..1fc06535e 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSingleTireStatusSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSingleTireStatusSpec.m
@@ -19,21 +19,33 @@ describe(@"Getter/Setter Tests", ^ {
SDLSingleTireStatus* testStruct = [[SDLSingleTireStatus alloc] init];
testStruct.status = SDLComponentVolumeStatusNormal;
+ testStruct.monitoringSystemStatus = SDLTPMSLow;
+ testStruct.pressure = @67.78;
expect(testStruct.status).to(equal(SDLComponentVolumeStatusNormal));
+ expect(testStruct.monitoringSystemStatus).to(equal(SDLTPMSLow));
+ expect(testStruct.pressure).to(equal(@67.78));
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary* dict = [@{SDLNameStatus:SDLComponentVolumeStatusLow} mutableCopy];
+ NSDictionary* dict = @{
+ SDLNameStatus: SDLComponentVolumeStatusLow,
+ SDLNameTPMS: SDLTPMSLow,
+ SDLNamePressure: @67.78
+ };
SDLSingleTireStatus* testStruct = [[SDLSingleTireStatus alloc] initWithDictionary:dict];
expect(testStruct.status).to(equal(SDLComponentVolumeStatusLow));
+ expect(testStruct.monitoringSystemStatus).to(equal(SDLTPMSLow));
+ expect(testStruct.pressure).to(equal(@67.78));
});
it(@"Should return nil if not set", ^ {
SDLSingleTireStatus* testStruct = [[SDLSingleTireStatus alloc] init];
expect(testStruct.status).to(beNil());
+ expect(testStruct.monitoringSystemStatus).to(beNil());
+ expect(testStruct.pressure).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLStationIDNumberSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLStationIDNumberSpec.m
new file mode 100644
index 000000000..3cd543f80
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLStationIDNumberSpec.m
@@ -0,0 +1,54 @@
+//
+// SDLStationIDNumberSpec.m
+// SmartDeviceLinkTests=
+//
+
+#import <Foundation/Foundation.h>
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLNames.h"
+#import "SDLStationIDNumber.h"
+
+QuickSpecBegin(SDLStationIDNumberSpec)
+
+describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLStationIDNumber* testStruct = [[SDLStationIDNumber alloc] init];
+
+ testStruct.countryCode = @91;
+ testStruct.fccFacilityId = @23;
+
+ expect(testStruct.countryCode).to(equal(@91));
+ expect(testStruct.fccFacilityId).to(equal(@23));;
+
+ });
+
+ it(@"Should set and get correctly", ^ {
+ SDLStationIDNumber* testStruct = [[SDLStationIDNumber alloc] initWithCountryCode:@91 fccFacilityId:@23];
+
+ expect(testStruct.countryCode).to(equal(@91));
+ expect(testStruct.fccFacilityId).to(equal(@23));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSMutableDictionary* dict = [@{SDLNameCountryCode:@91,
+ SDLNameFCCFacilityId:@23
+ } mutableCopy];
+
+ SDLStationIDNumber* testStruct = [[SDLStationIDNumber alloc] initWithDictionary:dict];
+
+ expect(testStruct.countryCode).to(equal(@91));
+ expect(testStruct.fccFacilityId).to(equal(@23));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ SDLStationIDNumber* testStruct = [[SDLStationIDNumber alloc] init];
+
+ expect(testStruct.countryCode).to(beNil());
+ expect(testStruct.fccFacilityId).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTTSChunkSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTTSChunkSpec.m
index 52fef2d53..ef4d741ec 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTTSChunkSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTTSChunkSpec.m
@@ -15,32 +15,98 @@
QuickSpecBegin(SDLTTSChunkSpec)
-describe(@"Getter/Setter Tests", ^ {
- it(@"Should set and get correctly", ^ {
- SDLTTSChunk* testStruct = [[SDLTTSChunk alloc] init];
-
- testStruct.text = @"TEXT";
- testStruct.type = SDLSpeechCapabilitiesPrerecorded;
-
- expect(testStruct.text).to(equal(@"TEXT"));
- expect(testStruct.type).to(equal(SDLSpeechCapabilitiesPrerecorded));
- });
-
- it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary* dict = [@{SDLNameText:@"TEXT",
- SDLNameType:SDLSpeechCapabilitiesPrerecorded} mutableCopy];
- SDLTTSChunk* testStruct = [[SDLTTSChunk alloc] initWithDictionary:dict];
-
- expect(testStruct.text).to(equal(@"TEXT"));
- expect(testStruct.type).to(equal(SDLSpeechCapabilitiesPrerecorded));
+describe(@"TTS Chunk Tests", ^{
+ __block SDLTTSChunk *testStruct = nil;
+ __block NSArray<SDLTTSChunk *> *testChunks = nil;
+ __block NSString *testText = @"Text";
+ __block SDLSpeechCapabilities testCapabilities = SDLSpeechCapabilitiesFile;
+
+ describe(@"initializers", ^{
+ it(@"should correctly initialize with init", ^{
+ testStruct = [[SDLTTSChunk alloc] init];
+
+ expect(testStruct.text).to(beNil());
+ expect(testStruct.type).to(beNil());
+ });
+
+ it(@"should correctly initialize with initWithDictionary", ^{
+ NSDictionary* dict = @{SDLNameText: testText,
+ SDLNameType: testCapabilities};
+ testStruct = [[SDLTTSChunk alloc] initWithDictionary:dict];
+
+ expect(testStruct.text).to(equal(testText));
+ expect(testStruct.type).to(equal(testCapabilities));
+ });
+
+ it(@"should correctly initialize with initWithText:type:", ^{
+ testStruct = [[SDLTTSChunk alloc] initWithText:testText type:testCapabilities];
+
+ expect(testStruct.text).to(equal(testText));
+ expect(testStruct.type).to(equal(testCapabilities));
+ });
+
+ it(@"should correctly initialize with textChunksFromString:", ^{
+ testChunks = [SDLTTSChunk textChunksFromString:testText];
+
+ expect(testChunks).to(haveCount(1));
+ expect(testChunks[0].text).to(equal(testText));
+ expect(testChunks[0].type).to(equal(SDLSpeechCapabilitiesText));
+ });
+
+ it(@"should correctly initialize with sapiChunksFromString:", ^{
+ testChunks = [SDLTTSChunk sapiChunksFromString:testText];
+
+ expect(testChunks).to(haveCount(1));
+ expect(testChunks[0].text).to(equal(testText));
+ expect(testChunks[0].type).to(equal(SDLSpeechCapabilitiesSAPIPhonemes));
+ });
+
+ it(@"should correctly initialize with lhPlusChunksFromString:", ^{
+ testChunks = [SDLTTSChunk lhPlusChunksFromString:testText];
+
+ expect(testChunks).to(haveCount(1));
+ expect(testChunks[0].text).to(equal(testText));
+ expect(testChunks[0].type).to(equal(SDLSpeechCapabilitiesLHPlusPhonemes));
+ });
+
+ it(@"should correctly initialize with prerecordedChunksFromString:", ^{
+ testChunks = [SDLTTSChunk prerecordedChunksFromString:testText];
+
+ expect(testChunks).to(haveCount(1));
+ expect(testChunks[0].text).to(equal(testText));
+ expect(testChunks[0].type).to(equal(SDLSpeechCapabilitiesPrerecorded));
+ });
+
+ it(@"should correctly initialize with silenceChunksFromString:", ^{
+ testChunks = [SDLTTSChunk silenceChunks];
+
+ expect(testChunks).to(haveCount(1));
+ expect(testChunks[0].text).to(beEmpty());
+ expect(testChunks[0].type).to(equal(SDLSpeechCapabilitiesSilence));
+ });
+
+ it(@"should correctly initialize with fileChunksWithName:", ^{
+ testChunks = [SDLTTSChunk fileChunksWithName:testText];
+
+ expect(testChunks).to(haveCount(1));
+ expect(testChunks[0].text).to(equal(testText));
+ expect(testChunks[0].type).to(equal(SDLSpeechCapabilitiesFile));
+ });
});
-
- it(@"Should return nil if not set", ^ {
- SDLTTSChunk* testStruct = [[SDLTTSChunk alloc] init];
-
- expect(testStruct.text).to(beNil());
- expect(testStruct.type).to(beNil());
+
+ describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ SDLTTSChunk* testStruct = [[SDLTTSChunk alloc] init];
+
+ testStruct.text = testText;
+ testStruct.type = testCapabilities;
+
+ expect(testStruct.text).to(equal(testText));
+ expect(testStruct.type).to(equal(testCapabilities));
+ });
});
});
+
+
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTemplateColorSchemeSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTemplateColorSchemeSpec.m
new file mode 100644
index 000000000..48112cf6f
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTemplateColorSchemeSpec.m
@@ -0,0 +1,73 @@
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLRGBColor.h"
+#import "SDLTemplateColorScheme.h"
+
+#import "SDLNames.h"
+
+QuickSpecBegin(SDLTemplateColorSchemeSpec)
+
+describe(@"TemplateColor Tests", ^{
+ __block SDLRGBColor *testRed = nil;
+ __block SDLRGBColor *testGreen = nil;
+ __block SDLRGBColor *testBlue = nil;
+
+ beforeEach(^{
+ testRed = [[SDLRGBColor alloc] initWithRed:255 green:0 blue:0];
+ testGreen = [[SDLRGBColor alloc] initWithRed:0 green:255 blue:0];
+ testBlue = [[SDLRGBColor alloc] initWithRed:0 green:0 blue:255];
+ });
+
+ it(@"Should set and get correctly", ^{
+ SDLTemplateColorScheme *testStruct = [[SDLTemplateColorScheme alloc] init];
+
+ testStruct.primaryColor = testRed;
+ testStruct.secondaryColor = testGreen;
+ testStruct.backgroundColor = testBlue;
+
+ expect(testStruct.primaryColor).to(equal(testRed));
+ expect(testStruct.secondaryColor).to(equal(testGreen));
+ expect(testStruct.backgroundColor).to(equal(testBlue));
+ });
+
+ it(@"Should get correctly when initialized with parameters", ^{
+ SDLTemplateColorScheme *testStruct = [[SDLTemplateColorScheme alloc] initWithPrimaryRGBColor:testRed secondaryRGBColor:testGreen backgroundRGBColor:testBlue];
+
+ expect(testStruct.primaryColor).to(equal(testRed));
+ expect(testStruct.secondaryColor).to(equal(testGreen));
+ expect(testStruct.backgroundColor).to(equal(testBlue));
+ });
+
+ it(@"Should get correctly when initialized with colors", ^{
+ UIColor *testRedColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];
+ UIColor *testGreenColor = [UIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0];
+ UIColor *testBlueColor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:1.0];
+ SDLTemplateColorScheme *testStruct = [[SDLTemplateColorScheme alloc] initWithPrimaryColor:testRedColor secondaryColor:testGreenColor backgroundColor:testBlueColor];
+
+ expect(testStruct.primaryColor).to(equal(testRed));
+ expect(testStruct.secondaryColor).to(equal(testGreen));
+ expect(testStruct.backgroundColor).to(equal(testBlue));
+ });
+
+ it(@"Should get correctly when initialized with a dict", ^{
+ NSDictionary *dict = @{SDLNameRed: @0,
+ SDLNameGreen: @100,
+ SDLNameBlue: @255};
+ SDLRGBColor *testStruct = [[SDLRGBColor alloc] initWithDictionary:dict];
+
+ expect(testStruct.red).to(equal(@0));
+ expect(testStruct.green).to(equal(@100));
+ expect(testStruct.blue).to(equal(@255));
+ });
+
+ it(@"Should return nil if not set", ^{
+ SDLRGBColor *testStruct = [[SDLRGBColor alloc] init];
+
+ expect(testStruct.red).to(beNil());
+ expect(testStruct.green).to(beNil());
+ expect(testStruct.blue).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testAppAndVehicleIcons@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testAppAndVehicleIcons@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testAppAndVehicleIcons@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testAppAndVehicleIcons_iPhone11_4_0x0@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testAppAndVehicleIcons_iPhone11_4_0x0@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testAppAndVehicleIcons_iPhone11_4_0x0@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testLightBackgroundNoAppNoVehicleIcons@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testLightBackgroundNoAppNoVehicleIcons@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testLightBackgroundNoAppNoVehicleIcons@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testLightBackgroundNoAppNoVehicleIcons_iPhone11_4_0x0@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testLightBackgroundNoAppNoVehicleIcons_iPhone11_4_0x0@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testLightBackgroundNoAppNoVehicleIcons_iPhone11_4_0x0@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testNoAppNoVehicleIcons@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testNoAppNoVehicleIcons@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testNoAppNoVehicleIcons@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testNoAppNoVehicleIcons_iPhone11_4_0x0@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testNoAppNoVehicleIcons_iPhone11_4_0x0@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testNoAppNoVehicleIcons_iPhone11_4_0x0@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyAppIcon@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyAppIcon@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyAppIcon@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyAppIcon_iPhone11_4_0x0@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyAppIcon_iPhone11_4_0x0@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyAppIcon_iPhone11_4_0x0@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyVehicleIcon@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyVehicleIcon@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyVehicleIcon@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyVehicleIcon_iPhone11_4_0x0@3x.png b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyVehicleIcon_iPhone11_4_0x0@3x.png
new file mode 100644
index 000000000..3b7684a62
--- /dev/null
+++ b/SmartDeviceLinkTests/ReferenceImages_64/SDLLockScreenViewControllerSnapshotTests/testOnlyVehicleIcon_iPhone11_4_0x0@3x.png
Binary files differ
diff --git a/SmartDeviceLinkTests/SDLFileManagerConfigurationSpec.m b/SmartDeviceLinkTests/SDLFileManagerConfigurationSpec.m
new file mode 100644
index 000000000..c3d4b6abb
--- /dev/null
+++ b/SmartDeviceLinkTests/SDLFileManagerConfigurationSpec.m
@@ -0,0 +1,43 @@
+//
+// SDLFileManagerConfigurationSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Nicole on 8/1/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLFileManagerConfiguration.h"
+
+QuickSpecBegin(SDLFileManagerConfigurationSpec)
+
+describe(@"A file manager configuration", ^{
+ __block SDLFileManagerConfiguration *testConfig = nil;
+
+ it(@"should get and set correctly", ^{
+ testConfig = [SDLFileManagerConfiguration defaultConfiguration];
+ testConfig.artworkRetryCount = 5;
+ testConfig.fileRetryCount = 1;
+
+ expect(testConfig.artworkRetryCount).to(equal(5));
+ expect(testConfig.fileRetryCount).to(equal(1));
+ });
+
+ it(@"should instantiate correctly with the default configuration", ^{
+ testConfig = [SDLFileManagerConfiguration defaultConfiguration];
+
+ expect(testConfig.artworkRetryCount).to(equal(1));
+ expect(testConfig.fileRetryCount).to(equal(1));
+ });
+
+ it(@"should instantiate correctly with initWithArtworkRetryCount:fileRetryCount:", ^{
+ testConfig = [[SDLFileManagerConfiguration alloc] initWithArtworkRetryCount:2 fileRetryCount:3];
+
+ expect(testConfig.artworkRetryCount).to(equal(2));
+ expect(testConfig.fileRetryCount).to(equal(3));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/SDLLifecycleConfigurationUpdateSpec.m b/SmartDeviceLinkTests/SDLLifecycleConfigurationUpdateSpec.m
new file mode 100644
index 000000000..fed05bce5
--- /dev/null
+++ b/SmartDeviceLinkTests/SDLLifecycleConfigurationUpdateSpec.m
@@ -0,0 +1,77 @@
+//
+// SDLLifecycleConfigurationUpdateSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Nicole on 7/25/18.
+// Copyright © 2018 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLLifecycleConfigurationUpdate.h"
+#import "SDLTTSChunk.h"
+
+QuickSpecBegin(SDLLifecycleConfigurationUpdateSpec)
+
+describe(@"A lifecycle configuration update", ^{
+ __block SDLLifecycleConfigurationUpdate *update = nil;
+
+ describe(@"Created with the default init", ^{
+ beforeEach(^{
+ update = [[SDLLifecycleConfigurationUpdate alloc] init];
+ });
+
+ it(@"should return nil if not set", ^{
+ expect(update.appName).to(beNil());
+ expect(update.shortAppName).to(beNil());
+ expect(update.ttsName).to(beNil());
+ expect(update.voiceRecognitionCommandNames).to(beNil());
+ });
+
+ it(@"should set and get correctly", ^{
+ NSString *testAppName = @"Some Test String";
+ NSString *testShortAppName = @"Short";
+ NSArray<SDLTTSChunk *> *testTTSName = [SDLTTSChunk textChunksFromString:@"Some TTS String"];
+ NSArray<NSString *> *testVRCommandNames = @[@"VR Command One", @"VR Command Two"];
+
+ update.appName = testAppName;
+ update.shortAppName = testShortAppName;
+ update.ttsName = testTTSName;
+ update.voiceRecognitionCommandNames = testVRCommandNames;
+
+ expect(update.appName).to(equal(testAppName));
+ expect(update.shortAppName).to(equal(testShortAppName));
+ expect(update.ttsName).to(equal(testTTSName));
+ expect(update.voiceRecognitionCommandNames).to(equal(testVRCommandNames));
+ });
+ });
+
+ describe(@"Created with the default debug initalizer", ^{
+ it(@"should have set all properties correctly", ^{
+ NSString *testAppName = @"Test App Name";
+ NSString *testShortAppName = @"Short";
+ NSArray<SDLTTSChunk *> *testTTSName = [SDLTTSChunk textChunksFromString:@"Some TTS String"];
+ NSArray<NSString *> *testVRCommandNames = @[@"VR Command One", @"VR Command Two"];
+
+ update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:testAppName shortAppName:testShortAppName ttsName:testTTSName voiceRecognitionCommandNames:testVRCommandNames];
+
+ expect(update.appName).to(equal(testAppName));
+ expect(update.shortAppName).to(equal(testShortAppName));
+ expect(update.ttsName).to(equal(testTTSName));
+ expect(update.voiceRecognitionCommandNames).to(equal(testVRCommandNames));
+ });
+
+ it(@"should have left all properties as nil if no parameters set", ^{
+ update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:nil shortAppName:nil ttsName:nil voiceRecognitionCommandNames:nil];
+
+ expect(update.appName).to(beNil());
+ expect(update.shortAppName).to(beNil());
+ expect(update.ttsName).to(beNil());
+ expect(update.voiceRecognitionCommandNames).to(beNil());
+ });
+ });
+});
+
+QuickSpecEnd
+
diff --git a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
index ae6ba1ca9..ee395a545 100644
--- a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
+++ b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
@@ -302,12 +302,12 @@ describe(@"System capability manager", ^{
waitUntilTimeout(1.0, ^(void (^done)(void)) {
[testSystemCapabilityManager updateCapabilityType:testGetSystemCapabilityResponse.systemCapability.systemCapabilityType completionHandler:^(NSError * _Nullable error, SDLSystemCapabilityManager * _Nonnull systemCapabilityManager) {
- expect(error).to(equal(testError));
+ expect(error).to(equal(testConnectionManager.defaultError));
expect(systemCapabilityManager.phoneCapability).to(beNil());
done();
}];
- [testConnectionManager respondToLastRequestWithResponse:testGetSystemCapabilityResponse error:testError];
+ [testConnectionManager respondToLastRequestWithResponse:testGetSystemCapabilityResponse];
});
});
@@ -324,7 +324,7 @@ describe(@"System capability manager", ^{
// The handler will not be notifified
}];
- [testConnectionManager respondToLastRequestWithResponse:testGetSystemCapabilityResponse error:nil];
+ [testConnectionManager respondToLastRequestWithResponse:testGetSystemCapabilityResponse];
});
it(@"should not save the capabilities because a successful Get System Capability Response notification will be intercepted by the manager and be handled there", ^{
diff --git a/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.h b/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.h
index 2dede3f0b..e1a24418b 100644
--- a/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.h
+++ b/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.h
@@ -15,6 +15,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface TestConnectionManager : NSObject <SDLConnectionManagerType>
+@property (copy, nonatomic, readonly) NSError *defaultError;
+
/**
* All received requests. Chronological order. The 0th element will be the first request received; the nth request will be the n+1th request received.
*/
@@ -25,6 +27,8 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (copy, nonatomic, nullable) SDLResponseHandler lastRequestBlock;
+@property (copy, nonatomic, nullable) SDLMultipleRequestCompletionHandler lastMultipleCompletionBlock;
+
/**
* Call the last request's block with a specific response.
*
@@ -33,21 +37,23 @@ NS_ASSUME_NONNULL_BEGIN
- (void)respondToLastRequestWithResponse:(__kindof SDLRPCResponse *)response;
/**
- * Call the last request's block with a specific response and error.
- *
- * @param response The response to pass into the last request's block.
- * @param error The error to pass into the last request's block.
- */
-- (void)respondToLastRequestWithResponse:(__kindof SDLRPCResponse *_Nullable)response error:(NSError *_Nullable)error;
-
-/**
* Call the last request's block with a specific response, request, and error.
@param response The RPC Response to pass into the last request's block.
@param requestNumber The request to pass into the last request's block.
@param error The error to pass into the last request's block.
*/
-- (void)respondToRequestWithResponse:(__kindof SDLRPCResponse *)response requestNumber:(NSInteger)requestNumber error:(NSError *_Nullable)error;
+- (void)respondToRequestWithResponse:(__kindof SDLRPCResponse *)response requestNumber:(NSInteger)requestNumber error:(nullable NSError *)error;
+
+/**
+ Call the last request's block with a specific response.
+
+ @param response The RPC Response to pass into the last request's block.
+ @param error The error to pass into the last request's block.
+ */
+- (void)respondToLastRequestWithResponse:(__kindof SDLRPCResponse *)response error:(nullable NSError *)error;
+
+- (void)respondToLastMultipleRequestsWithSuccess:(BOOL)success;
/**
* Remove all received requests.
diff --git a/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m b/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m
index ba0c29930..4c8ea3a50 100644
--- a/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m
+++ b/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m
@@ -7,8 +7,9 @@
//
#import "TestConnectionManager.h"
-#import "SDLRPCRequest.h"
+#import "SDLRPCRequest.h"
+#import "SDLRPCResponse.h"
NS_ASSUME_NONNULL_BEGIN
@@ -44,9 +45,7 @@ NS_ASSUME_NONNULL_BEGIN
}
}];
- if (completionHandler != nil) {
- completionHandler(YES);
- }
+ _lastMultipleCompletionBlock = completionHandler;
}
- (void)sendSequentialRequests:(nonnull NSArray<SDLRPCRequest *> *)requests progressHandler:(nullable SDLMultipleSequentialRequestProgressHandler)progressHandler completionHandler:(nullable SDLMultipleRequestCompletionHandler)completionHandler {
@@ -55,38 +54,61 @@ NS_ASSUME_NONNULL_BEGIN
progressHandler(request, nil, nil, (double)idx / (double)requests.count);
}];
- if (completionHandler != nil) {
- completionHandler(YES);
- }
+ _lastMultipleCompletionBlock = completionHandler;
}
-
- (void)respondToLastRequestWithResponse:(__kindof SDLRPCResponse *)response {
[self respondToLastRequestWithResponse:response error:nil];
}
-- (void)respondToRequestWithResponse:(__kindof SDLRPCResponse *)response requestNumber:(NSInteger)requestNumber error:(NSError *_Nullable)error {
+- (void)respondToLastRequestWithResponse:(__kindof SDLRPCResponse *)response error:(nullable NSError *)error {
+ NSError *thisError = nil;
+ if (!response.success.boolValue && error == nil) {
+ thisError = self.defaultError;
+ } else if (error != nil) {
+ thisError = error;
+ }
+
if (self.lastRequestBlock != nil) {
- self.lastRequestBlock([[self receivedRequests] objectAtIndex:requestNumber], response, error);
+ self.lastRequestBlock(self.receivedRequests.lastObject, response, thisError);
} else {
@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Attempted to respond to last request, but there was no last request block" userInfo:nil];
}
}
-- (void)respondToLastRequestWithResponse:(__kindof SDLRPCResponse *_Nullable)response error:(NSError *_Nullable)error {
+- (void)respondToRequestWithResponse:(__kindof SDLRPCResponse *)response requestNumber:(NSInteger)requestNumber error:(nullable NSError *)error {
+ NSError *thisError = nil;
+ if (!response.success.boolValue && error == nil) {
+ thisError = self.defaultError;
+ } else if (error != nil) {
+ thisError = error;
+ }
+
if (self.lastRequestBlock != nil) {
- self.lastRequestBlock(self.receivedRequests.lastObject, response, error);
+ self.lastRequestBlock(self.receivedRequests[requestNumber], response, thisError);
} else {
@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Attempted to respond to last request, but there was no last request block" userInfo:nil];
}
}
+- (void)respondToLastMultipleRequestsWithSuccess:(BOOL)success {
+ if (self.lastMultipleCompletionBlock != nil) {
+ self.lastMultipleCompletionBlock(success);
+ }
+}
+
- (void)reset {
_receivedRequests = [NSMutableArray<__kindof SDLRPCRequest *> array];
_lastRequestBlock = nil;
}
+#pragma mark - Getters
+
+- (NSError *)defaultError {
+ return [NSError errorWithDomain:@"com.sdl.testConnectionManager" code:-1 userInfo:nil];
+}
+
#pragma mark Private helpers
- (NSNumber *)test_nextCorrelationID {
diff --git a/SmartDeviceLinkTests/TestUtilities/TestTCPServer.h b/SmartDeviceLinkTests/TestUtilities/TestTCPServer.h
new file mode 100644
index 000000000..9cbd0ec39
--- /dev/null
+++ b/SmartDeviceLinkTests/TestUtilities/TestTCPServer.h
@@ -0,0 +1,71 @@
+//
+// TestTCPServer.h
+// SmartDeviceLink-iOS
+//
+// Created by Sho Amano on 2018/07/27.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Delegate to receive various events from the test TCP server
+ */
+@protocol TestTCPServerDelegate
+- (void)onClientConnected;
+- (void)onClientDataReceived:(NSData *)data;
+- (void)onClientShutdown;
+- (void)onClientError;
+@end
+
+@interface TestTCPServer : NSObject
+
+/**
+ * Sets up a TCP server that listens on specified host and port
+ *
+ * Note that this server cannot accept more than one connections from client(s).
+ *
+ * @param hostName Host name that the server will listen on
+ * @param portNumber TCP port number of the server
+ * @return YES when initialization is successful, NO otherwise
+ */
+- (BOOL)setup:(NSString *)hostName port:(NSString *)port;
+
+/**
+ * Shuts down the server, forcefully closing client connection
+ *
+ * @return YES when the server is successfully stopped, NO otherwise
+ */
+- (BOOL)teardown;
+
+/**
+ * Asynchronously sends data to connected client
+ *
+ * @param data Data to send
+ */
+- (void)send:(NSData *)data;
+
+/**
+ * Gracefully shuts down the connection between client.
+ *
+ * This method triggers shutdown(SHUT_WR) which is to notify that the server does not have any more data to send.
+ *
+ * @return YES if shutdown process is succeeded, NO if it's failed or client is not connected
+ */
+- (BOOL)shutdownClient;
+
+/**
+ * The delegate to receive server events
+ */
+@property (nullable, nonatomic, weak) id<TestTCPServerDelegate> delegate;
+
+/**
+ * Configure this flag to YES to enable SO_REUSEADDR option
+ */
+@property (nonatomic, assign) BOOL enableSOReuseAddr;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLinkTests/TestUtilities/TestTCPServer.m b/SmartDeviceLinkTests/TestUtilities/TestTCPServer.m
new file mode 100644
index 000000000..c7b332949
--- /dev/null
+++ b/SmartDeviceLinkTests/TestUtilities/TestTCPServer.m
@@ -0,0 +1,370 @@
+//
+// TestTCPServer.m
+// SmartDeviceLinkTests
+//
+// Created by Sho Amano on 2018/07/27.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <Nimble/Nimble.h>
+
+#import "TestTCPServer.h"
+
+#import <sys/types.h>
+#import <sys/socket.h>
+#import <netdb.h>
+#import <sys/select.h>
+#import <sys/time.h>
+#import <fcntl.h>
+#import <string.h>
+#import <errno.h>
+
+#define MAX_SERVER_SOCKET_NUM (16)
+#define RECV_BUF_SIZE (1024)
+#define THREAD_STOP_WAIT_SEC (1.0)
+
+@interface TestTCPServer() {
+ int _serverSockets[MAX_SERVER_SOCKET_NUM];
+ int _internalSockets[2];
+ int _clientSocket; // supports only one client
+}
+
+@property (nullable, nonatomic, strong) NSThread *thread;
+@property (nonatomic, strong) dispatch_semaphore_t threadStoppedSemaphore;
+@property (nonatomic, strong) NSMutableArray<NSMutableData*> *sendData;
+@end
+
+@implementation TestTCPServer
+
+- (instancetype)init {
+ if (self = [super init]) {
+ for (unsigned int i = 0; i < MAX_SERVER_SOCKET_NUM; i++) {
+ _serverSockets[i] = -1;
+ }
+ _sendData = [[NSMutableArray alloc] init];
+ _enableSOReuseAddr = YES;
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [self teardown];
+}
+
+- (BOOL)setup:(NSString *)hostName port:(NSString *)port {
+ int ret = socketpair(PF_UNIX, SOCK_STREAM, 0, _internalSockets);
+ if (ret < 0) {
+ NSLog(@"TestTCPServer: socketpair() failed");
+ return NO;
+ }
+ if (!([self configureSocket:_internalSockets[0]] && [self configureSocket:_internalSockets[1]])) {
+ return NO;
+ }
+
+ struct addrinfo hints, *res;
+ hints.ai_family = PF_INET6;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_protocol = IPPROTO_TCP;
+ hints.ai_flags = AI_PASSIVE /* server socket */
+ | AI_NUMERICSERV /* 2nd arg is numeric port number */
+ | AI_ALL | AI_V4MAPPED; /* return both IPv4 and IPv6 addresses */
+
+ ret = getaddrinfo([hostName UTF8String], [port UTF8String], &hints, &res);
+ if (ret != 0) {
+ NSLog(@"Error: TestTCPServer getaddrinfo() failed, %s", gai_strerror(ret));
+ return NO;
+ }
+
+ int socketNum = 0;
+ for (struct addrinfo *info = res; info != NULL && socketNum < (MAX_SERVER_SOCKET_NUM - 1); info = info->ai_next) {
+ int sock = socket(info->ai_family, info->ai_socktype, info->ai_protocol);
+ if (sock < 0) {
+ NSLog(@"Error: TestTCPServer server socket creation failed");
+ continue;
+ }
+
+ if (![self configureServerSocket:sock]) {
+ close(sock);
+ continue;
+ }
+
+ ret = bind(sock, info->ai_addr, info->ai_addrlen);
+ if (ret < 0) {
+ NSLog(@"Error: TestTCPServer server socket bind() failed: %s", strerror(errno));
+ close(sock);
+ continue;
+ }
+
+ ret = listen(sock, 5);
+ if (ret < 0) {
+ NSLog(@"Error: TestTCPServer server socket listen() failed: %s", strerror(errno));
+ close(sock);
+ continue;
+ }
+
+ _serverSockets[socketNum] = sock;
+ socketNum++;
+ }
+ freeaddrinfo(res);
+
+ _clientSocket = -1;
+
+ // create a thread and run
+ self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:nil];
+ self.threadStoppedSemaphore = dispatch_semaphore_create(0);
+ NSLog(@"TestTCPServer: starting TCP server");
+ [self.thread start];
+
+ return YES;
+}
+
+- (BOOL)teardown {
+ if (self.thread == nil) {
+ return YES;
+ }
+
+ BOOL result = YES;
+
+ // wake up select() and let it stop
+ shutdown(_internalSockets[1], SHUT_WR);
+
+ long ret = dispatch_semaphore_wait(self.threadStoppedSemaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(THREAD_STOP_WAIT_SEC * NSEC_PER_SEC)));
+ if (ret != 0) {
+ NSLog(@"Error: TestTCPServer thread doesn't stop");
+ result = NO;
+ }
+ self.thread = nil;
+
+ for (unsigned int i = 0; i < MAX_SERVER_SOCKET_NUM; i++) {
+ if (_serverSockets[i] >= 0) {
+ close(_serverSockets[i]);
+ _serverSockets[i] = -1;
+ }
+ }
+ if (_internalSockets[0] >= 0) {
+ close(_internalSockets[0]);
+ _internalSockets[0] = -1;
+ }
+ if (_internalSockets[1] >= 0) {
+ close(_internalSockets[1]);
+ _internalSockets[1] = -1;
+ }
+
+ [self.sendData removeAllObjects];
+ return result;
+}
+
+- (void)send:(NSData *)data {
+ [self.sendData addObject:[data mutableCopy]];
+
+ // wake up select()
+ char buf[1] = {'a'};
+ send(_internalSockets[1], buf, sizeof(buf), 0);
+}
+
+- (BOOL)shutdownClient {
+ if (_clientSocket < 0) {
+ // client is not connected
+ return NO;
+ }
+ int ret = shutdown(_clientSocket, SHUT_WR);
+ if (ret != 0) {
+ NSLog(@"TestTCPServer: shutdown() for client socket failed: %s", strerror(errno));
+ return NO;
+ }
+ return YES;
+}
+
+- (void)run:(id)userInfo {
+ BOOL running = YES;
+ BOOL internalFailure = NO;
+ int ret;
+
+ while (running) {
+ fd_set readfds;
+ fd_set writefds;
+ int maxFd = 0;
+
+ FD_ZERO(&readfds);
+ FD_ZERO(&writefds);
+
+ for (unsigned int i = 0; _serverSockets[i] >= 0; i++) {
+ FD_SET(_serverSockets[i], &readfds);
+ if (_serverSockets[i] > maxFd) {
+ maxFd = _serverSockets[i];
+ }
+ }
+ FD_SET(_internalSockets[0], &readfds);
+ if (_internalSockets[0] > maxFd) {
+ maxFd = _internalSockets[0];
+ }
+
+ if (_clientSocket >= 0) {
+ FD_SET(_clientSocket, &readfds);
+ if ([self.sendData count] > 0) {
+ FD_SET(_clientSocket, &writefds);
+ }
+
+ if (_clientSocket > maxFd) {
+ maxFd = _clientSocket;
+ }
+ }
+
+ ret = select(maxFd + 1, &readfds, &writefds, NULL, NULL);
+ if (ret < 0) {
+ NSLog(@"Error: TestTCPServer TCP server select() failed");
+ internalFailure = YES;
+ break;
+ }
+
+ // client socket check
+ if (_clientSocket >= 0) {
+ if (FD_ISSET(_clientSocket, &readfds)) {
+ char buf[RECV_BUF_SIZE];
+ ssize_t recvLen = recv(_clientSocket, buf, sizeof(buf), 0);
+ if (recvLen < 0) {
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
+ // this is not an error
+ } else {
+ NSLog(@"TestTCPServer: recv() for client socket failed: %s", strerror(errno));
+ [self.delegate onClientError];
+ close(_clientSocket);
+ _clientSocket = -1;
+ }
+ } else if (recvLen == 0) {
+ [self.delegate onClientShutdown];
+ // keep the socket open in case we have some more data to send
+ } else {
+ NSData *data = [NSData dataWithBytes:buf length:recvLen];
+ [self.delegate onClientDataReceived:data];
+ }
+ }
+ if (FD_ISSET(_clientSocket, &writefds)) {
+ NSMutableData *data = self.sendData[0];
+ ssize_t sentLen = send(_clientSocket, data.bytes, data.length, 0);
+ if (sentLen < 0) {
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
+ // this is not an error
+ } else {
+ NSLog(@"TestTCPServer: send() for client socket failed: %s", strerror(errno));
+ [self.delegate onClientError];
+ close(_clientSocket);
+ _clientSocket = -1;
+ }
+ } else if (sentLen > 0) {
+ if (data.length == (NSUInteger)sentLen) {
+ [self.sendData removeObjectAtIndex:0];
+ } else {
+ [data replaceBytesInRange:NSMakeRange(0, sentLen) withBytes:NULL length:0];
+ }
+ }
+ }
+ }
+
+ // server socket check
+ for (unsigned int i = 0; _serverSockets[i] >= 0; i++) {
+ int sock = _serverSockets[i];
+ if (FD_ISSET(sock, &readfds)) {
+ struct sockaddr_storage addr;
+ socklen_t addrlen;
+ ret = accept(sock, (struct sockaddr *)&addr, &addrlen);
+ if (ret < 0) {
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
+ // this is not an error
+ continue;
+ } else {
+ NSLog(@"Error: TestTCPServer TCP server accept() failed: %s", strerror(errno));
+ internalFailure = YES;
+ running = NO;
+ break;
+ }
+ }
+
+ if (_clientSocket >= 0) {
+ NSLog(@"Error: TestTCPServer TCP server received more than one connections");
+ }
+
+ if (![self configureSocket:ret]) {
+ close(ret);
+ internalFailure = YES;
+ running = NO;
+ break;
+ };
+
+ _clientSocket = ret;
+ [self.delegate onClientConnected];
+ }
+ }
+
+ // internal pipe check
+ if (FD_ISSET(_internalSockets[0], &readfds)) {
+ char buf[16];
+ ssize_t recvLen = recv(_internalSockets[0], buf, sizeof(buf), 0);
+ if (recvLen < 0) {
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
+ // this is not an error
+ } else {
+ NSLog(@"Error: TestTCPServer TCP server recv() failed for internal pipe: %s", strerror(errno));
+ internalFailure = YES;
+ break;
+ }
+ } else if (recvLen == 0) {
+ NSLog(@"TestTCPServer: stopping TCP server");
+ break;
+ }
+ }
+ }
+
+ if (_clientSocket >= 0) {
+ close(_clientSocket);
+ _clientSocket = -1;
+ }
+
+ expect(internalFailure == NO);
+
+ dispatch_semaphore_signal(self.threadStoppedSemaphore);
+}
+
+- (BOOL)configureSocket:(int)sock {
+ // make the socket non-blocking
+ int flags;
+ flags = fcntl(sock, F_GETFL, 0);
+ if (flags == -1) {
+ NSLog(@"Error: TestTCPServer fcntl (F_GETFL) failed");
+ return NO;
+ }
+ int ret = fcntl(sock, F_SETFL, flags | O_NONBLOCK);
+ if (ret == -1) {
+ NSLog(@"Error: TestTCPServer fcntl (F_SETFL) failed: %s", strerror(errno));
+ return NO;
+ }
+
+ // don't generate SIGPIPE signal
+ int val = 1;
+ ret = setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, &val, sizeof(val));
+ if (ret != 0) {
+ NSLog(@"Error: TestTCPServer setsockopt() failed");
+ return NO;
+ }
+
+ return YES;
+}
+
+- (BOOL)configureServerSocket:(int)sock {
+ if (![self configureSocket:sock]) {
+ return NO;
+ }
+
+ if (self.enableSOReuseAddr) {
+ int val = 1;
+ int ret = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
+ if (ret != 0) {
+ NSLog(@"Error: TestTCPServer setsockopt() failed");
+ return NO;
+ }
+ }
+
+ return YES;
+}
+@end
diff --git a/SmartDeviceLinkTests/TransportSpecs/SDLTCPTransportSpec.m b/SmartDeviceLinkTests/TransportSpecs/SDLTCPTransportSpec.m
new file mode 100644
index 000000000..e9a25f834
--- /dev/null
+++ b/SmartDeviceLinkTests/TransportSpecs/SDLTCPTransportSpec.m
@@ -0,0 +1,291 @@
+//
+// SDLTCPTransportSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Sho Amano on 2018/04/24.
+// Copyright © 2018 Xevo Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLTCPTransport.h"
+#import "SDLError.h"
+#import "TestTCPServer.h"
+
+#import <stdio.h>
+
+@interface SDLTCPTransport ()
+// verify some internal properties
+@property (nullable, nonatomic, strong) NSThread *ioThread;
+@property (nullable, nonatomic, strong) NSInputStream *inputStream;
+@property (nullable, nonatomic, strong) NSOutputStream *outputStream;
+@end
+
+QuickSpecBegin(SDLTCPTransportSpec)
+
+describe(@"SDLTCPTransport", ^ {
+ __block SDLTCPTransport *transport = nil;
+ __block id transportDelegateMock = nil;
+ __block TestTCPServer *server = nil;
+ __block id serverDelegateMock = nil;
+
+ beforeEach(^{
+ transport = [[SDLTCPTransport alloc] init];
+ transport.hostName = @"localhost";
+ transport.portNumber = @"12345";
+ transportDelegateMock = OCMProtocolMock(@protocol(SDLTransportDelegate));
+ transport.delegate = transportDelegateMock;
+
+ server = [[TestTCPServer alloc] init];
+ serverDelegateMock = OCMProtocolMock(@protocol(TestTCPServerDelegate));
+ server.delegate = serverDelegateMock;
+ });
+
+ afterEach(^{
+ transport.delegate = nil;
+ server.delegate = nil;
+
+ [transport disconnect];
+ transport = nil;
+ transportDelegateMock = nil;
+
+ [server teardown];
+ server = nil;
+ serverDelegateMock = nil;
+ });
+
+ it(@"Should be able to connect to specified TCP server and disconnect from it", ^ {
+ BOOL ret = [server setup:@"localhost" port:@"12345"];
+ expect(ret);
+
+ OCMExpect([serverDelegateMock onClientConnected]);
+ OCMExpect([transportDelegateMock onTransportConnected]);
+
+ [transport connect];
+
+ OCMVerifyAllWithDelay(serverDelegateMock, 0.5);
+ OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
+
+ expect(transport.ioThread != nil);
+ expect(transport.inputStream != nil);
+ expect(transport.outputStream != nil);
+
+ [transport disconnect];
+
+ expect(transport.ioThread == nil);
+ expect(transport.inputStream == nil);
+ expect(transport.outputStream == nil);
+ });
+
+ it(@"Should invoke onError delegate when connection is refused", ^ {
+ // Start the server without SO_REUSEADDR then close it. Then the port will not be owned by anybody for a while.
+ server.enableSOReuseAddr = NO;
+ BOOL ret = [server setup:@"localhost" port:@"12346"];
+ expect(ret);
+ [server teardown];
+ server = nil;
+
+ OCMExpect([transportDelegateMock onError:[OCMArg checkWithBlock:^BOOL(NSError *error) {
+ if (error.domain == SDLErrorDomainTransport && error.code == SDLTransportErrorConnectionRefused) {
+ return YES;
+ } else {
+ return NO;
+ }
+ }]]);
+
+ transport.portNumber = @"12346";
+ [transport connect];
+
+ OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
+
+ [transport disconnect];
+
+ expect(transport.ioThread == nil);
+ expect(transport.inputStream == nil);
+ expect(transport.outputStream == nil);
+ });
+
+ it(@"Should invoke onError delegate when connection is timed out", ^ {
+ OCMExpect([transportDelegateMock onError:[OCMArg checkWithBlock:^BOOL(NSError *error) {
+ if (error.domain == SDLErrorDomainTransport && error.code == SDLTransportErrorConnectionTimedOut) {
+ return YES;
+ } else {
+ return NO;
+ }
+ }]]);
+
+ transport.hostName = @"127.0.0.2";
+ [transport connect];
+
+ // timeout value should be longer than 'ConnectionTimeoutSecs' in SDLTCPTransport
+ OCMVerifyAllWithDelay(transportDelegateMock, 60.0);
+
+ [transport disconnect];
+
+ expect(transport.ioThread == nil);
+ expect(transport.inputStream == nil);
+ expect(transport.outputStream == nil);
+ });
+
+ it(@"Should invoke onError delegate when input parameter is invalid", ^ {
+ OCMExpect([transportDelegateMock onError:[OCMArg checkWithBlock:^BOOL(NSError *error) {
+ if (error.domain == SDLErrorDomainTransport && error.code == SDLTransportErrorUnknown) {
+ return YES;
+ } else {
+ return NO;
+ }
+ }]]);
+
+ transport.portNumber = @"abcde";
+ [transport connect];
+
+ OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
+
+ [transport disconnect];
+
+ expect(transport.ioThread == nil);
+ expect(transport.inputStream == nil);
+ expect(transport.outputStream == nil);
+ });
+
+ it(@"Should send out data when send is called", ^ {
+ BOOL ret = [server setup:@"localhost" port:@"12345"];
+ expect(ret);
+
+ char buf[256];
+ snprintf(buf, sizeof(buf), "This is dummy message.");
+ NSData *testData = [NSData dataWithBytes:buf length:strlen(buf)];
+ NSMutableData *receivedData = [[NSMutableData alloc] init];
+
+ OCMExpect([serverDelegateMock onClientConnected]);
+ OCMStub([serverDelegateMock onClientDataReceived:OCMOCK_ANY]).andDo(^(NSInvocation *invocation) {
+ __unsafe_unretained NSData *data;
+ [invocation getArgument:&data atIndex:2]; // first argument is index 2
+ [receivedData appendData:data];
+ NSLog(@"mock server received %lu bytes", data.length);
+ });
+
+ OCMExpect([transportDelegateMock onTransportConnected]);
+
+ [transport connect];
+ [transport sendData:testData];
+
+ OCMVerifyAllWithDelay(serverDelegateMock, 0.5);
+ OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
+
+ [NSThread sleepForTimeInterval:0.5];
+ expect([receivedData isEqualToData:testData]);
+
+ [transport disconnect];
+ });
+
+ it(@"Should send out data even if send is called some time after", ^ {
+ BOOL ret = [server setup:@"localhost" port:@"12345"];
+ expect(ret);
+
+ char buf1[256], buf2[256];
+ snprintf(buf1, sizeof(buf1), "This is another dummy message.");
+ snprintf(buf2, sizeof(buf2), "followed by 12345678901234567890123456");
+ NSData *testData1 = [NSData dataWithBytes:buf1 length:strlen(buf1)];
+ NSData *testData2 = [NSData dataWithBytes:buf2 length:strlen(buf2)];
+ NSMutableData *expectedData = [NSMutableData dataWithData:testData1];
+ [expectedData appendData:testData2];
+
+ __block NSMutableData *receivedData = [[NSMutableData alloc] init];
+
+ OCMExpect([serverDelegateMock onClientConnected]);
+ OCMStub([serverDelegateMock onClientDataReceived:OCMOCK_ANY]).andDo(^(NSInvocation *invocation) {
+ __unsafe_unretained NSData *data;
+ [invocation getArgument:&data atIndex:2]; // first argument is index 2
+ [receivedData appendData:data];
+ NSLog(@"mock server received %lu bytes", data.length);
+ });
+
+ OCMExpect([transportDelegateMock onTransportConnected]);
+
+ [transport connect];
+
+ // check that transport still sends out data long after NSStreamEventHasSpaceAvailable event
+ [NSThread sleepForTimeInterval:1.0];
+ [transport sendData:testData1];
+ [transport sendData:testData2];
+
+ OCMVerifyAllWithDelay(serverDelegateMock, 0.5);
+ OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
+
+ [NSThread sleepForTimeInterval:0.5];
+ expect([receivedData isEqualToData:expectedData]);
+
+ // don't receive further delegate events
+ server.delegate = nil;
+
+ [transport disconnect];
+ });
+
+ it(@"Should invoke onDataReceived delegate when received some data", ^ {
+ BOOL ret = [server setup:@"localhost" port:@"12345"];
+ expect(ret);
+
+ char buf1[256], buf2[256];
+ snprintf(buf1, sizeof(buf1), "This is test data.");
+ snprintf(buf2, sizeof(buf2), "This is another chunk of data.");
+ NSData *testData1 = [NSData dataWithBytes:buf1 length:strlen(buf1)];
+ NSData *testData2 = [NSData dataWithBytes:buf2 length:strlen(buf2)];
+ NSMutableData *expectedData = [NSMutableData dataWithData:testData1];
+ [expectedData appendData:testData2];
+
+ OCMExpect([transportDelegateMock onTransportConnected]);
+
+ NSMutableData *receivedData = [[NSMutableData alloc] init];
+ OCMStub([transportDelegateMock onDataReceived:OCMOCK_ANY]).andDo(^(NSInvocation *invocation) {
+ __unsafe_unretained NSData *data;
+ [invocation getArgument:&data atIndex:2]; // first argument is index 2
+ [receivedData appendData:data];
+ NSLog(@"client received %lu bytes", data.length);
+ });
+
+ OCMExpect([serverDelegateMock onClientConnected]);
+
+ [transport connect];
+
+ // wait until connected
+ OCMVerifyAllWithDelay(serverDelegateMock, 0.5);
+ [server send:testData1];
+ [server send:testData2];
+
+ OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
+
+ [NSThread sleepForTimeInterval:0.5];
+ expect([receivedData isEqualToData:expectedData]);
+
+ [transport disconnect];
+ });
+
+ it(@"Should generate disconnected event after peer closed connection", ^ {
+ BOOL ret = [server setup:@"localhost" port:@"12345"];
+ expect(ret);
+
+ OCMExpect([serverDelegateMock onClientConnected]);
+ OCMExpect([transportDelegateMock onTransportConnected]);
+
+ [transport connect];
+
+ OCMVerifyAllWithDelay(serverDelegateMock, 0.5);
+ OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
+
+ OCMExpect([transportDelegateMock onTransportDisconnected]);
+
+ // Close the writing connection. This will notify the client that peer closed the connection.
+ ret = [server shutdownClient];
+ expect(ret);
+
+ OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
+
+ [transport disconnect];
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/UtilitiesSpecs/SDLGlobalsSpec.m b/SmartDeviceLinkTests/UtilitiesSpecs/SDLGlobalsSpec.m
index 7d203b75d..b09d1b4e5 100644
--- a/SmartDeviceLinkTests/UtilitiesSpecs/SDLGlobalsSpec.m
+++ b/SmartDeviceLinkTests/UtilitiesSpecs/SDLGlobalsSpec.m
@@ -13,20 +13,20 @@ describe(@"The SDLGlobals class", ^{
});
describe(@"when just initialized", ^{
- it(@"should properly set protocol version", ^{
+ it(@"should properly set parameters", ^{
expect(testGlobals.protocolVersion).to(equal(@"1.0.0"));
- });
-
- it(@"should properly set the major protocol version", ^{
expect(testGlobals.majorProtocolVersion).to(equal(1));
- });
-
- it(@"should properly set max head unit version", ^{
expect(testGlobals.maxHeadUnitVersion).to(equal(@"0.0.0"));
- });
-
- it(@"should give the v1 MTU size", ^{
expect([testGlobals mtuSizeForServiceType:SDLServiceTypeRPC]).to(equal(SDLV1MTUSize));
+ expect(testGlobals.rpcVersion).to(equal([[SDLSyncMsgVersion alloc] initWithMajorVersion:1 minorVersion:0 patchVersion:0]));
+ });
+ });
+
+ describe(@"setting the RPC version", ^{
+ it(@"should properly set", ^{
+ testGlobals.rpcVersion = [[SDLSyncMsgVersion alloc] initWithMajorVersion:4 minorVersion:2 patchVersion:3];
+
+ expect(testGlobals.rpcVersion).to(equal([[SDLSyncMsgVersion alloc] initWithMajorVersion:4 minorVersion:2 patchVersion:3]));
});
});
diff --git a/SmartDeviceLink_Example/Images.xcassets/car_icon.imageset/car.png b/SmartDeviceLink_Example/Images.xcassets/car_icon.imageset/car.png
deleted file mode 100644
index de2eb2699..000000000
--- a/SmartDeviceLink_Example/Images.xcassets/car_icon.imageset/car.png
+++ /dev/null
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/laptop_icon.imageset/screen.png b/SmartDeviceLink_Example/Images.xcassets/laptop_icon.imageset/screen.png
deleted file mode 100644
index 33b727eae..000000000
--- a/SmartDeviceLink_Example/Images.xcassets/laptop_icon.imageset/screen.png
+++ /dev/null
Binary files differ
diff --git a/SmartDeviceLink_Example/Images.xcassets/wheel_icon.imageset/Contents.json b/SmartDeviceLink_Example/Images.xcassets/wheel_icon.imageset/Contents.json
deleted file mode 100644
index e5dbc5bd1..000000000
--- a/SmartDeviceLink_Example/Images.xcassets/wheel_icon.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "wheel.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-} \ No newline at end of file
diff --git a/SmartDeviceLink_Example/Images.xcassets/wheel_icon.imageset/wheel.png b/SmartDeviceLink_Example/Images.xcassets/wheel_icon.imageset/wheel.png
deleted file mode 100644
index bd99c3f49..000000000
--- a/SmartDeviceLink_Example/Images.xcassets/wheel_icon.imageset/wheel.png
+++ /dev/null
Binary files differ
diff --git a/SmartDeviceLink_Example/PerformInteractionManager.m b/SmartDeviceLink_Example/PerformInteractionManager.m
deleted file mode 100644
index 6e6523174..000000000
--- a/SmartDeviceLink_Example/PerformInteractionManager.m
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// PerformInteractionManager.m
-// SmartDeviceLink-Example-ObjC
-//
-// Created by Nicole on 5/15/18.
-// Copyright © 2018 smartdevicelink. All rights reserved.
-//
-
-#import "PerformInteractionManager.h"
-#import "AppConstants.h"
-#import "SmartDeviceLink.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@implementation PerformInteractionManager
-
-static UInt32 ChoiceSetId = 100;
-
-+ (SDLCreateInteractionChoiceSet *)createInteractionChoiceSet {
- return [[SDLCreateInteractionChoiceSet alloc] initWithId:ChoiceSetId choiceSet:[self sdlex_createChoiceSet]];
-}
-
-+ (void)showPerformInteractionChoiceSetWithManager:(SDLManager *)manager triggerSource:(SDLTriggerSource)triggerSource {
- [manager sendRequest:[self sdlex_createPerformInteractionWithTriggerSource:triggerSource] withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
- if (response.resultCode != SDLResultSuccess) {
- SDLLogE(@"The Show Perform Interaction Choice Set request failed: %@", error.localizedDescription);
- return;
- }
-
- if ([response.resultCode isEqualToEnum:SDLResultTimedOut]) {
- SDLLogD(@"The perform interaction choice set menu timed out before the user could select an item");
- [manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSYouMissed]];
- } else if ([response.resultCode isEqualToEnum:SDLResultSuccess]) {
- SDLLogD(@"The user selected an item in the perform interaction choice set menu");
- [manager sendRequest:[[SDLSpeak alloc] initWithTTS:TTSGoodJob]];
- }
- }];
-}
-
-+ (NSArray<SDLChoice *> *)sdlex_createChoiceSet {
- SDLChoice *firstChoice = [[SDLChoice alloc] initWithId:1 menuName:PICSFirstChoice vrCommands:@[PICSFirstChoice]];
- SDLChoice *secondChoice = [[SDLChoice alloc] initWithId:2 menuName:PICSSecondChoice vrCommands:@[PICSSecondChoice]];
- SDLChoice *thirdChoice = [[SDLChoice alloc] initWithId:3 menuName:PICSThirdChoice vrCommands:@[PICSThirdChoice]];
- return @[firstChoice, secondChoice, thirdChoice];
-}
-
-+ (SDLPerformInteraction *)sdlex_createPerformInteractionWithTriggerSource:(SDLTriggerSource)triggerSource {
- SDLInteractionMode interactionMode = [triggerSource isEqualToEnum:SDLTriggerSourceVoiceRecognition] ? SDLInteractionModeVoiceRecognitionOnly : SDLInteractionModeManualOnly;
- SDLPerformInteraction *performInteraction = [[SDLPerformInteraction alloc] initWithInitialPrompt:PICSInitialPrompt initialText:PICSInitialText interactionChoiceSetIDList:@[@(ChoiceSetId)] helpPrompt:PICSHelpPrompt timeoutPrompt:PICSTimeoutPrompt interactionMode:interactionMode timeout:10000];
- performInteraction.interactionLayout = SDLLayoutModeListOnly;
- return performInteraction;
-}
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink_Example/PerformInteractionManager.swift b/SmartDeviceLink_Example/PerformInteractionManager.swift
deleted file mode 100644
index 021997923..000000000
--- a/SmartDeviceLink_Example/PerformInteractionManager.swift
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// PerformInteractionManager.swift
-// SmartDeviceLink-Example-Swift
-//
-// Created by Nicole on 5/15/18.
-// Copyright © 2018 smartdevicelink. All rights reserved.
-//
-
-import UIKit
-import SmartDeviceLink
-import SmartDeviceLinkSwift
-
-class PerformInteractionManager: NSObject {
- /// Creates a choice set to be used in a PerformInteraction. The choice set must be sent to SDL Core and a response received before it can be used in a PerformInteraction request.
- ///
- /// - Returns: A SDLCreateInteractionChoiceSet request
- class func createInteractionChoiceSet() -> SDLCreateInteractionChoiceSet {
- return SDLCreateInteractionChoiceSet(id: UInt32(ChoiceSetId), choiceSet: createChoiceSet())
- }
-
- /// Shows a PICS. The handler is called when the user selects a menu item or when the menu times out after a set amount of time. A custom text-to-speech phrase is spoken when the menu is closed.
- ///
- /// - Parameter manager: The SDL Manager
- class func showPerformInteractionChoiceSet(with manager: SDLManager, triggerSource: SDLTriggerSource) {
- manager.send(request: createPerformInteraction(triggerSource: triggerSource)) { (_, response, error) in
- guard response?.resultCode == .success else {
- SDLLog.e("The Show Perform Interaction Choice Set request failed: \(error?.localizedDescription ?? "no error")")
- return
- }
-
- if response?.resultCode == .timedOut {
- // The menu timed out before the user could select an item
- manager.send(SDLSpeak(tts: TTSYouMissed))
- } else if response?.resultCode == .success {
- // The user selected an item in the menu
- manager.send(SDLSpeak(tts: TTSGoodJob))
- }
- }
- }
-}
-
-// MARK: - PICS Menu
-
-private extension PerformInteractionManager {
- static let ChoiceSetId = 100
- /// The PICS menu items
- ///
- /// - Returns: An array of SDLChoice items
- class func createChoiceSet() -> [SDLChoice] {
- let firstChoice = SDLChoice(id: 1, menuName: PICSFirstChoice, vrCommands: [PICSFirstChoice])
- let secondChoice = SDLChoice(id: 2, menuName: PICSSecondChoice, vrCommands: [PICSSecondChoice])
- let thirdChoice = SDLChoice(id: 3, menuName: PICSThirdChoice, vrCommands: [PICSThirdChoice])
- return [firstChoice, secondChoice, thirdChoice]
- }
-
- /// Creates a PICS with three menu items and customized voice commands
- ///
- /// - Returns: A SDLPerformInteraction request
- class func createPerformInteraction(triggerSource: SDLTriggerSource) -> SDLPerformInteraction {
- let interactionMode: SDLInteractionMode = triggerSource == .voiceRecognition ? .voiceRecognitionOnly : .manualOnly
- let performInteraction = SDLPerformInteraction(initialPrompt: PICSInitialPrompt, initialText: PICSInitialText, interactionChoiceSetIDList: [ChoiceSetId as NSNumber], helpPrompt: PICSHelpPrompt, timeoutPrompt: PICSTimeoutPrompt, interactionMode: interactionMode, timeout: 10000)
- performInteraction.interactionLayout = .listOnly
- return performInteraction
- }
-}
diff --git a/SmartDeviceLink_Example/VehicleDataManager.swift b/SmartDeviceLink_Example/VehicleDataManager.swift
deleted file mode 100644
index 1d8c5a52a..000000000
--- a/SmartDeviceLink_Example/VehicleDataManager.swift
+++ /dev/null
@@ -1,184 +0,0 @@
-//
-// VehicleDataManager.swift
-// SmartDeviceLink
-//
-// Created by Nicole on 4/13/18.
-// Copyright © 2018 smartdevicelink. All rights reserved.
-//
-
-import Foundation
-import SmartDeviceLink
-import SmartDeviceLinkSwift
-
-class VehicleDataManager: NSObject {
- fileprivate let sdlManager: SDLManager!
- fileprivate var refreshUIHandler: RefreshUIHandler?
- public fileprivate(set) var vehicleOdometerData: String
-
- init(sdlManager: SDLManager, refreshUIHandler: RefreshUIHandler? = nil) {
- self.sdlManager = sdlManager
- self.refreshUIHandler = refreshUIHandler
- self.vehicleOdometerData = ""
- super.init()
-
- resetOdometer()
- NotificationCenter.default.addObserver(self, selector: #selector(vehicleDataNotification(_:)), name: .SDLDidReceiveVehicleData, object: nil)
- }
-}
-
-// MARK: - Subscribe Vehicle Data
-
-extension VehicleDataManager {
- /// Subscribes to odometer data. You must subscribe to a notification with name `SDLDidReceiveVehicleData` to get the new data when the odometer data changes.
- func subscribeToVehicleOdometer() {
- let subscribeToVehicleOdometer = SDLSubscribeVehicleData()
- subscribeToVehicleOdometer.odometer = true
- sdlManager.send(request: subscribeToVehicleOdometer) { [unowned self] (request, response, error) in
- guard let result = response?.resultCode else { return }
-
- if error != nil {
- SDLLog.e("Error sending Get Vehicle Data RPC: \(error!.localizedDescription)")
- }
-
- var message = "\(VehicleDataOdometerName): "
- switch result {
- case .success:
- SDLLog.d("Subscribed to vehicle odometer data")
- message += "Subscribed"
- case .disallowed:
- SDLLog.d("Access to vehicle data disallowed")
- message += "Disallowed"
- case .userDisallowed:
- SDLLog.d("Vehicle user disabled access to vehicle data")
- message += "Disabled"
- case .ignored:
- SDLLog.d("Already subscribed to odometer data")
- message += "Subscribed"
- case .dataNotAvailable:
- SDLLog.d("You have permission to access to vehicle data, but the vehicle you are connected to did not provide any data")
- message += "Unknown"
- default:
- SDLLog.e("Unknown reason for failure to get vehicle data: \(error != nil ? error!.localizedDescription : "no error message")")
- message += "Unsubscribed"
- return
- }
- self.vehicleOdometerData = message
-
- guard let handler = self.refreshUIHandler else { return }
- handler()
- }
- }
-
- /// Unsubscribes to vehicle odometer data.
- func unsubscribeToVehicleOdometer() {
- let unsubscribeToVehicleOdometer = SDLUnsubscribeVehicleData()
- unsubscribeToVehicleOdometer.odometer = true
- sdlManager.send(request: unsubscribeToVehicleOdometer) { (request, response, error) in
- guard let response = response, response.resultCode == .success else { return }
- self.resetOdometer()
- }
- }
-
- /// Notification containing the updated vehicle data.
- ///
- /// - Parameter notification: A SDLOnVehicleData notification
- func vehicleDataNotification(_ notification: SDLRPCNotificationNotification) {
- guard let handler = refreshUIHandler, let onVehicleData = notification.notification as? SDLOnVehicleData, let odometer = onVehicleData.odometer else {
- return
- }
-
- vehicleOdometerData = "\(VehicleDataOdometerName): \(odometer) km"
- handler()
- }
-
- /// Resets the odometer data
- fileprivate func resetOdometer() {
- vehicleOdometerData = "\(VehicleDataOdometerName): Unsubscribed"
- }
-}
-
-// MARK: - Get Vehicle Data
-
-extension VehicleDataManager {
- /// Retreives the current vehicle speed
- ///
- /// - Parameter manager: The SDL manager
- class func getVehicleSpeed(with manager: SDLManager) {
- SDLLog.d("Checking if app has permission to access vehicle data...")
- guard manager.permissionManager.isRPCAllowed("GetVehicleData") else {
- let alert = AlertManager.alertWithMessageAndCloseButton("This app does not have the required permissions to access vehicle data")
- manager.send(request: alert)
- return
- }
-
- SDLLog.d("App has permission to access vehicle data. Requesting vehicle speed data...")
- let getVehicleSpeed = SDLGetVehicleData()
- getVehicleSpeed.speed = true
- manager.send(request: getVehicleSpeed) { (request, response, error) in
- guard let response = response, error == nil else {
- let alert = AlertManager.alertWithMessageAndCloseButton("Something went wrong while getting vehicle speed")
- manager.send(request: alert)
- return
- }
-
- var alertMessage = "\(VehicleDataSpeedName): "
- switch response.resultCode {
- case .rejected:
- SDLLog.d("The request for vehicle speed was rejected")
- alertMessage += "Rejected"
- case .disallowed:
- SDLLog.d("This app does not have the required permissions to access vehicle data")
- alertMessage += "Disallowed"
- case .success:
- if let vehicleData = response as? SDLGetVehicleDataResponse, let speed = vehicleData.speed {
- SDLLog.d("Request for vehicle speed successful: \(speed)")
- alertMessage += "\(speed) kph"
- } else {
- SDLLog.e("Request for vehicle speed successful but no data returned")
- alertMessage += "Unknown"
- }
- default: break
- }
-
- let alert = AlertManager.alertWithMessageAndCloseButton(alertMessage)
- manager.send(request: alert)
- }
- }
-}
-
-// MARK: - Phone Calls
-
-extension VehicleDataManager {
- /// Checks if the head unit has the ability and/or permissions to make a phone call. If it does, the phone number is dialed.
- ///
- /// - Parameter manager: The SDL manager
- /// - phoneNumber: A phone number to dial
- class func checkPhoneCallCapability(manager: SDLManager, phoneNumber: String) {
- SDLLog.d("Checking phone call capability")
- manager.systemCapabilityManager.updateCapabilityType(.phoneCall, completionHandler: { (error, systemCapabilityManager) in
- guard let phoneCapability = systemCapabilityManager.phoneCapability else {
- manager.send(AlertManager.alertWithMessageAndCloseButton("The head unit does not support the phone call capability"))
- return
- }
- if phoneCapability.dialNumberEnabled?.boolValue ?? false {
- SDLLog.d("Dialing phone number \(phoneNumber)...")
- dialPhoneNumber(phoneNumber, manager: manager)
- } else {
- manager.send(AlertManager.alertWithMessageAndCloseButton("A phone call can not be made"))
- }
- })
- }
-
- /// Dials a phone number.
- ///
- /// - Parameters:
- /// - phoneNumber: A phone number to dial
- /// - manager: The SDL manager
- private class func dialPhoneNumber(_ phoneNumber: String, manager: SDLManager) {
- let dialNumber = SDLDialNumber(number: phoneNumber)
- manager.send(request: dialNumber) { (requst, response, error) in
- guard let success = response?.resultCode else { return }
- SDLLog.d("Sent dial number request: \(success == .success ? "successfully" : "unsuccessfully").")
- }
- }
-}
diff --git a/docs/Classes.html b/docs/Classes.html
index 863ba3a06..f552e39ae 100644
--- a/docs/Classes.html
+++ b/docs/Classes.html
@@ -14,6 +14,8 @@
<li><a href="#section-SDLAlertResponse">SDLAlertResponse</a></li>
<li><a href="#section-SDLAppInfo">SDLAppInfo</a></li>
<li><a href="#section-SDLArtwork">SDLArtwork</a></li>
+ <li><a href="#section-SDLAudioControlCapabilities">SDLAudioControlCapabilities</a></li>
+ <li><a href="#section-SDLAudioControlData">SDLAudioControlData</a></li>
<li><a href="#section-SDLAudioPassThruCapabilities">SDLAudioPassThruCapabilities</a></li>
<li><a href="#section-SDLAudioStreamManager">SDLAudioStreamManager</a></li>
<li><a href="#section-SDLBeltStatus">SDLBeltStatus</a></li>
@@ -25,6 +27,8 @@
<li><a href="#section-SDLChangeRegistration">SDLChangeRegistration</a></li>
<li><a href="#section-SDLChangeRegistrationResponse">SDLChangeRegistrationResponse</a></li>
<li><a href="#section-SDLChoice">SDLChoice</a></li>
+ <li><a href="#section-SDLChoiceCell">SDLChoiceCell</a></li>
+ <li><a href="#section-SDLChoiceSet">SDLChoiceSet</a></li>
<li><a href="#section-SDLClimateControlCapabilities">SDLClimateControlCapabilities</a></li>
<li><a href="#section-SDLClimateControlData">SDLClimateControlData</a></li>
<li><a href="#section-SDLClusterModeStatus">SDLClusterModeStatus</a></li>
@@ -54,8 +58,11 @@
<li><a href="#section-SDLEncodedSyncPDataResponse">SDLEncodedSyncPDataResponse</a></li>
<li><a href="#section-SDLEndAudioPassThru">SDLEndAudioPassThru</a></li>
<li><a href="#section-SDLEndAudioPassThruResponse">SDLEndAudioPassThruResponse</a></li>
+ <li><a href="#section-SDLEqualizerSettings">SDLEqualizerSettings</a></li>
<li><a href="#section-SDLFile">SDLFile</a></li>
<li><a href="#section-SDLFileManager">SDLFileManager</a></li>
+ <li><a href="#section-SDLFileManagerConfiguration">SDLFileManagerConfiguration</a></li>
+ <li><a href="#section-SDLFuelRange">SDLFuelRange</a></li>
<li><a href="#section-SDLGPSData">SDLGPSData</a></li>
<li><a href="#section-SDLGenericResponse">SDLGenericResponse</a></li>
<li><a href="#section-SDLGetDTCs">SDLGetDTCs</a></li>
@@ -70,6 +77,8 @@
<li><a href="#section-SDLGetWayPointsResponse">SDLGetWayPointsResponse</a></li>
<li><a href="#section-SDLHMICapabilities">SDLHMICapabilities</a></li>
<li><a href="#section-SDLHMIPermissions">SDLHMIPermissions</a></li>
+ <li><a href="#section-SDLHMISettingsControlCapabilities">SDLHMISettingsControlCapabilities</a></li>
+ <li><a href="#section-SDLHMISettingsControlData">SDLHMISettingsControlData</a></li>
<li><a href="#section-SDLHapticRect">SDLHapticRect</a></li>
<li><a href="#section-SDLHeadLampStatus">SDLHeadLampStatus</a></li>
<li><a href="#section-SDLImage">SDLImage</a></li>
@@ -78,6 +87,10 @@
<li><a href="#section-SDLKeyboardProperties">SDLKeyboardProperties</a></li>
<li><a href="#section-SDLLifecycleConfiguration">SDLLifecycleConfiguration</a></li>
<li><a href="#section-SDLLifecycleConfigurationUpdate">SDLLifecycleConfigurationUpdate</a></li>
+ <li><a href="#section-SDLLightCapabilities">SDLLightCapabilities</a></li>
+ <li><a href="#section-SDLLightControlCapabilities">SDLLightControlCapabilities</a></li>
+ <li><a href="#section-SDLLightControlData">SDLLightControlData</a></li>
+ <li><a href="#section-SDLLightState">SDLLightState</a></li>
<li><a href="#section-SDLListFiles">SDLListFiles</a></li>
<li><a href="#section-SDLListFilesResponse">SDLListFilesResponse</a></li>
<li><a href="#section-SDLLocationCoordinate">SDLLocationCoordinate</a></li>
@@ -92,6 +105,8 @@
<li><a href="#section-SDLLogTargetFile">SDLLogTargetFile</a></li>
<li><a href="#section-SDLLogTargetOSLog">SDLLogTargetOSLog</a></li>
<li><a href="#section-SDLManager">SDLManager</a></li>
+ <li><a href="#section-SDLMassageCushionFirmness">SDLMassageCushionFirmness</a></li>
+ <li><a href="#section-SDLMassageModeData">SDLMassageModeData</a></li>
<li><a href="#section-SDLMenuCell">SDLMenuCell</a></li>
<li><a href="#section-SDLMenuParams">SDLMenuParams</a></li>
<li><a href="#section-SDLMetadataTags">SDLMetadataTags</a></li>
@@ -114,6 +129,7 @@
<li><a href="#section-SDLOnLanguageChange">SDLOnLanguageChange</a></li>
<li><a href="#section-SDLOnLockScreenStatus">SDLOnLockScreenStatus</a></li>
<li><a href="#section-SDLOnPermissionsChange">SDLOnPermissionsChange</a></li>
+ <li><a href="#section-SDLOnRCStatus">SDLOnRCStatus</a></li>
<li><a href="#section-SDLOnSyncPData">SDLOnSyncPData</a></li>
<li><a href="#section-SDLOnSystemRequest">SDLOnSystemRequest</a></li>
<li><a href="#section-SDLOnTBTClientState">SDLOnTBTClientState</a></li>
@@ -133,6 +149,7 @@
<li><a href="#section-SDLPutFile">SDLPutFile</a></li>
<li><a href="#section-SDLPutFileResponse">SDLPutFileResponse</a></li>
<li><a href="#section-SDLRDSData">SDLRDSData</a></li>
+ <li><a href="#section-SDLRGBColor">SDLRGBColor</a></li>
<li><a href="#section-SDLRPCMessage">SDLRPCMessage</a></li>
<li><a href="#section-SDLRPCNotification">SDLRPCNotification</a></li>
<li><a href="#section-SDLRPCNotificationNotification">SDLRPCNotificationNotification</a></li>
@@ -150,10 +167,14 @@
<li><a href="#section-SDLRemoteControlCapabilities">SDLRemoteControlCapabilities</a></li>
<li><a href="#section-SDLResetGlobalProperties">SDLResetGlobalProperties</a></li>
<li><a href="#section-SDLResetGlobalPropertiesResponse">SDLResetGlobalPropertiesResponse</a></li>
+ <li><a href="#section-SDLSISData">SDLSISData</a></li>
<li><a href="#section-SDLScreenManager">SDLScreenManager</a></li>
<li><a href="#section-SDLScreenParams">SDLScreenParams</a></li>
<li><a href="#section-SDLScrollableMessage">SDLScrollableMessage</a></li>
<li><a href="#section-SDLScrollableMessageResponse">SDLScrollableMessageResponse</a></li>
+ <li><a href="#section-SDLSeatControlCapabilities">SDLSeatControlCapabilities</a></li>
+ <li><a href="#section-SDLSeatControlData">SDLSeatControlData</a></li>
+ <li><a href="#section-SDLSeatMemoryAction">SDLSeatMemoryAction</a></li>
<li><a href="#section-SDLSendHapticData">SDLSendHapticData</a></li>
<li><a href="#section-SDLSendHapticDataResponse">SDLSendHapticDataResponse</a></li>
<li><a href="#section-SDLSendLocation">SDLSendLocation</a></li>
@@ -182,6 +203,7 @@
<li><a href="#section-SDLSpeak">SDLSpeak</a></li>
<li><a href="#section-SDLSpeakResponse">SDLSpeakResponse</a></li>
<li><a href="#section-SDLStartTime">SDLStartTime</a></li>
+ <li><a href="#section-SDLStationIDNumber">SDLStationIDNumber</a></li>
<li><a href="#section-SDLStreamingMediaConfiguration">SDLStreamingMediaConfiguration</a></li>
<li><a href="#section-SDLStreamingMediaManager">SDLStreamingMediaManager</a></li>
<li><a href="#section-SDLSubscribeButton">SDLSubscribeButton</a></li>
@@ -197,6 +219,7 @@
<li><a href="#section-SDLSystemCapabilityManager">SDLSystemCapabilityManager</a></li>
<li><a href="#section-SDLTTSChunk">SDLTTSChunk</a></li>
<li><a href="#section-SDLTemperature">SDLTemperature</a></li>
+ <li><a href="#section-SDLTemplateColorScheme">SDLTemplateColorScheme</a></li>
<li><a href="#section-SDLTextField">SDLTextField</a></li>
<li><a href="#section-SDLTireStatus">SDLTireStatus</a></li>
<li><a href="#section-SDLTouch">SDLTouch</a></li>
@@ -233,29 +256,28 @@
SDLAddCommand
</h3>
- <p>This class will add a command to the application&rsquo;s Command Menu SDLMenuParams</p>
+ <p>This class will add a command to the application&rsquo;s Command Menu</p>
-<p>A command will be added to the end of the list of elements in
- the Command Menu under the following conditions:
- <li>When a SDLCommand is added with no SDLMenuParams value provided</li>
- <li>When a SDLMenuParams value is provided with a SDLMenuParam.position value
- greater than or equal to the number of menu items currently defined in the
- menu specified by the SDLMenuParam.parentID value</li></p>
+<p>A command will be added to the end of the list of elements in the Command Menu under the following conditions:</p>
-<p>The set of choices which the application builds using SDLAddCommand can be a
- mixture of:
- <li>Choices having only VR synonym definitions, but no SDLMenuParams definitions
- </li>
- <li>Choices having only SDLMenuParams definitions, but no VR synonym definitions
- </li>
- <li>Choices having both SDLMenuParams and VR synonym definitions</li></p>
+<ol>
+<li>When a SDLAddCommand is added with no SDLMenuParams value provided.</li>
+<li>When a SDLMenuParams value is provided with a SDLMenuParam.position value greater than or equal to the number of menu items currently defined in the menu specified by the SDLMenuParam.parentID value.</li>
+</ol>
-<p>HMILevel needs to be FULL, LIMITED or BACKGROUD</p>
+<p>The set of choices which the application builds using SDLAddCommand can be a mixture of:</p>
-<p>@since SDL 1.0</p>
+<ol>
+<li>Choices having only VR synonym definitions, but no SDLMenuParams definitions</li>
+<li>Choices having only SDLMenuParams definitions, but no VR synonym definitions</li>
+<li>Choices having both SDLMenuParams and VR synonym definitions</li>
+</ol>
+
+<p>HMILevel needs to be FULL, LIMITED or BACKGROUD
+ @since SDL 1.0</p>
<div class="aside aside-see">
<p class="aside-title">See</p>
- SDLDeleteCommand SDLAddSubMenu SDLDeleteSubMenu
+ SDLDeleteCommand, SDLAddSubMenu, SDLDeleteSubMenu
</div>
@@ -498,7 +520,14 @@
<pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLArtwork</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLFile.html">SDLFile</a></span>
<span class="cm">/**
- * Convenience Helper to create an ephemeral artwork from an image.
+ * 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 `UIImage`s 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.
+ *
+ * @discussion An image should be templated if it is intended to be used as an icon in a button or menu.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isTemplate</span><span class="p">;</span>
+
+<span class="cm">/**
+ * Convenience helper to create an ephemeral artwork from an image.
*
* This is an ephemeral file, it will not be persisted through sessions / ignition cycles. Any files that you do not *know* you will use in future sessions should be created through this method. For example, album / artist artwork should be ephemeral.
*
@@ -515,7 +544,7 @@
<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">artworkWithImage</span><span class="p">:(</span><span class="n">UIImage</span> <span class="o">*</span><span class="p">)</span><span class="nv">image</span> <span class="nf">name</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span> <span class="nf">asImageFormat</span><span class="p">:(</span><span class="n"><a href="Enums/SDLArtworkImageFormat.html">SDLArtworkImageFormat</a></span><span class="p">)</span><span class="nv">imageFormat</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use the standard initializer and set persistant to false"</span><span class="p">);</span>
<span class="cm">/**
- * 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.
+ * 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.
*
* This is an ephemeral file, it will not be persisted through sessions / ignition cycles. Any files that you do not *know* you will use in future sessions should be created through this method. For example, album / artist artwork should be ephemeral.
*
@@ -531,7 +560,7 @@
<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">artworkWithImage</span><span class="p">:(</span><span class="n">UIImage</span> <span class="o">*</span><span class="p">)</span><span class="nv">image</span> <span class="nf">asImageFormat</span><span class="p">:(</span><span class="n"><a href="Enums/SDLArtworkImageFormat.html">SDLArtworkImageFormat</a></span><span class="p">)</span><span class="nv">imageFormat</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use the standard initializer and set persistant to false"</span><span class="p">);</span>
<span class="cm">/**
- * Convenience Helper to create a persistent artwork from an image.
+ * Convenience helper to create a persistent artwork from an image.
*
* This is a persistent file, it will be persisted through sessions / ignition cycles. You will only have a limited space for all files, so be sure to only persist files that are required for all or most sessions. For example, menu artwork should be persistent.
*
@@ -548,7 +577,7 @@
<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">persistentArtworkWithImage</span><span class="p">:(</span><span class="n">UIImage</span> <span class="o">*</span><span class="p">)</span><span class="nv">image</span> <span class="nf">name</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span> <span class="nf">asImageFormat</span><span class="p">:(</span><span class="n"><a href="Enums/SDLArtworkImageFormat.html">SDLArtworkImageFormat</a></span><span class="p">)</span><span class="nv">imageFormat</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use the standard initializer and set persistant to true"</span><span class="p">);</span>
<span class="cm">/**
- * 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.
+ * 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.
*
* This is a persistent file, it will be persisted through sessions / ignition cycles. You will only have a limited space for all files, so be sure to only persist files that are required for all or most sessions. For example, menu artwork should be persistent.
*
@@ -595,6 +624,159 @@
+ <h3 id="section-SDLAudioControlCapabilities">
+ SDLAudioControlCapabilities
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLAudioControlCapabilities.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLAudioControlCapabilities</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)
+
+ @param name The short friendly name of the audio control module.
+ @return An instance of the SDLAudioControlCapabilities class.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLAudioControlCapabilities object with given parameters
+
+ @param name The short friendly name of the audio control module.
+ @param sourceAvailable Availability of the control of audio source.
+ @param volumeAvailable Availability of the volume of audio source.
+ @param equalizerAvailable Availability of the equalizer of audio source.
+ @param equalizerMaxChannelID Equalizer channel ID (between 1-100).
+ @return An instance of the SDLAudioControlCapabilities class.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span> <span class="nf">sourceAvailable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">sourceAvailable</span> <span class="nf">keepContextAvailable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">keepContextAvailable</span> <span class="nf">volumeAvailable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">volumeAvailable</span> <span class="nf">equalizerAvailable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">equalizerAvailable</span> <span class="nf">equalizerMaxChannelID</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">equalizerMaxChannelID</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract The short friendly name of the audio control module.
+ * It should not be used to identify a module by mobile application.
+ *
+ * Required, Max String length 100 chars
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleName</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Availability of the control of audio source.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sourceAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ Availability of the keepContext parameter.
+
+ Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">keepContextAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Availability of the control of audio volume.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">volumeAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Availability of the control of Equalizer Settings.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">equalizerAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Must be included if equalizerAvailable=true,
+ * and assume all IDs starting from 1 to this value are valid
+ *
+ * Optional, Integer 1 - 100
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">equalizerMaxChannelId</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLAudioControlCapabilities</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioControlData">
+ SDLAudioControlData
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLAudioControlData.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLAudioControlData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+
+<span class="cm">/**
+ Constructs a newly allocated SDLAudioControlData object with given parameters
+
+ @param source current primary audio source of the system.
+ @param keepContext Whether or not application's context is changed.
+ @param volume Reflects the volume of audio.
+ @param equalizerSettings list of supported Equalizer channels.
+ @return An instance of the SDLAudioControlData class.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithSource</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span><span class="p">)</span><span class="nv">source</span> <span class="nf">keepContext</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">keepContext</span> <span class="nf">volume</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">volume</span> <span class="nf">equalizerSettings</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLEqualizerSettings.html">SDLEqualizerSettings</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">equalizerSettings</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract In a getter response or a notification,
+ * it is the current primary audio source of the system.
+ * In a setter request, it is the target audio source that the system shall switch to.
+ * If the value is MOBILE_APP, the system shall switch to the mobile media app that issues the setter RPC.
+ *
+ * Optional, SDLPrimaryAudioSource
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">source</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract This parameter shall not be present in any getter responses or notifications.
+ * This parameter is optional in a setter request. The default value is false.
+ * If it is true, the system not only changes the audio source but also brings the default
+ * infotainment system UI associated with the audio source to foreground and set the application to background.
+ * If it is false, the system changes the audio source, but keeps the current application's context.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">keepContext</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Reflects the volume of audio, from 0%-100%.
+ *
+ * Required, Integer 1 - 100
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">volume</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Defines the list of supported channels (band) and their current/desired settings on HMI
+ *
+ * Required, Array of SDLEqualizerSettings with minSize:1 maxSize:100
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLEqualizerSettings.html">SDLEqualizerSettings</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">equalizerSettings</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLAudioControlData</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLAudioPassThruCapabilities">
SDLAudioPassThruCapabilities
</h3>
@@ -869,6 +1051,217 @@
+ <h3 id="section-SDLChoiceCell">
+ SDLChoiceCell
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLChoiceCell.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLChoiceCell</span><span class="p">:</span> <span class="nc">NSObject</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">text</span><span class="p">;</span>
+
+<span class="cm">/**
+ Maps to Choice.secondaryText. Optional secondary text of the cell, if available. Duplicates within an `SDLChoiceSet` are permitted.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">secondaryText</span><span class="p">;</span>
+
+<span class="cm">/**
+ Maps to Choice.tertiaryText. Optional tertitary text of the cell, if available. Duplicates within an `SDLChoiceSet` are permitted.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">tertiaryText</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceCommands</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">artwork</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">secondaryArtwork</span><span class="p">;</span>
+
+<span class="cm">/**
+ Initialize the cell with nothing. This is unavailable
+
+ @return A crash, probably
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="n">init</span> <span class="n">NS_UNAVAILABLE</span><span class="p">;</span>
+
+<span class="cm">/**
+ Initialize the cell with text and nothing else.
+
+ @param text The primary text of the cell.
+ @return The cell
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithText</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">text</span><span class="p">;</span>
+
+<span class="cm">/**
+ Initialize the cell with text, optional artwork, and optional voice commands
+
+ @param text The primary text of the cell
+ @param artwork The primary artwork of the cell
+ @param voiceCommands Strings that can be spoken by the user to activate this cell in a voice or both interaction mode
+ @return The cell
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithText</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">text</span> <span class="nf">artwork</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">artwork</span> <span class="nf">voiceCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">voiceCommands</span><span class="p">;</span>
+
+<span class="cm">/**
+ Initialize the cell with all optional items
+
+ @param text The primary text
+ @param secondaryText The secondary text
+ @param tertiaryText The tertiary text
+ @param voiceCommands Strings that can be spoken by the user to activate this cell in a voice or both interaction mode
+ @param artwork The primary artwork
+ @param secondaryArtwork The secondary artwork
+ @return The cell
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithText</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">text</span> <span class="nf">secondaryText</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryText</span> <span class="nf">tertiaryText</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">tertiaryText</span> <span class="nf">voiceCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">voiceCommands</span> <span class="nf">artwork</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">artwork</span> <span class="nf">secondaryArtwork</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryArtwork</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLChoiceCell</span> <span class="p">:</span> <span class="kt">NSObject</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLChoiceSet">
+ SDLChoiceSet
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLChoiceSet.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLChoiceSet</span><span class="p">:</span> <span class="nc">NSObject</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">class</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSTimeInterval</span> <span class="n">defaultTimeout</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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`.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">class</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="n">defaultLayout</span><span class="p">;</span>
+
+<span class="cm">/**
+ Maps to PerformInteraction.initialText. The title of the choice set, and/or the initial text on a keyboard prompt.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">title</span><span class="p">;</span>
+
+<span class="cm">/**
+ Maps to PerformInteraction.initialPrompt. The initial prompt spoken to the user at the start of an interaction.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">initialPrompt</span><span class="p">;</span>
+
+<span class="cm">/**
+ Maps to PerformInteraction.interactionLayout. Whether the presented choices are arranged as a set of tiles or a list.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="n">layout</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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`.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSTimeInterval</span> <span class="n">timeout</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">timeoutPrompt</span><span class="p">;</span>
+
+<span class="cm">/**
+ Maps to PerformInteraction.helpPrompt. This is the spoken string when a user speaks "help" when the interaction is occurring.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpPrompt</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+
+ @note that while SDLVRHelpItem's position will be automatically set based on position in the array, the image will need to uploaded by you before use using SDLFileManager.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpList</span><span class="p">;</span>
+
+<span class="cm">/**
+ The delegate of this choice set, called when the user interacts with it.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">weak</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span> <span class="n">delegate</span><span class="p">;</span>
+
+<span class="cm">/**
+ The choices to be displayed to the user within this choice set. These choices could match those already preloaded via `SDLScreenManager preloadChoices:withCompletionHandler:`.
+
+ This is limited to 100 items. If you attempt to set more than 100 items, the set will not have any items (this array will be empty).
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">choices</span><span class="p">;</span>
+
+<span class="cm">/**
+ Initialize with a title, delegate, and choices. It will use the default timeout and layout, all other properties (such as prompts) will be `nil`.
+
+ @param title The choice set's title
+ @param delegate The choice set delegate called after the user has interacted with your choice set
+ @param choices The choices to be displayed to the user for interaction
+ @return The choice set
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">delegate</span><span class="p">:(</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span> <span class="nf">choices</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span><span class="p">;</span>
+
+<span class="cm">/**
+ Initializer with all possible properties.
+
+ @param title The choice set's title
+ @param delegate The choice set delegate called after the user has interacted with your choice set
+ @param layout The layout of choice options (Manual/touch only)
+ @param timeout The timeout of a touch interaction (Manual/touch only)
+ @param initialPrompt A voice prompt spoken to the user when this set is displayed
+ @param timeoutPrompt A voice prompt spoken to the user when the set times out (Voice only)
+ @param helpPrompt A voice prompt spoken to the user when the user asks for "help"
+ @param helpList A table list of text and images shown to the user during a voice recognition session for this choice set (Voice only)
+ @param choices The list of choices presented to the user either as a manual/touch interaction or via the user's voice
+ @return The choice set
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">delegate</span><span class="p">:(</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span> <span class="nf">layout</span><span class="p">:(</span><span class="n"><a href="Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span><span class="p">)</span><span class="nv">layout</span> <span class="nf">timeout</span><span class="p">:(</span><span class="n">NSTimeInterval</span><span class="p">)</span><span class="nv">timeout</span> <span class="nf">initialPromptString</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">initialPrompt</span> <span class="nf">timeoutPromptString</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">timeoutPrompt</span> <span class="nf">helpPromptString</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">helpPrompt</span> <span class="nf">vrHelpList</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">helpList</span> <span class="nf">choices</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span><span class="p">;</span>
+
+<span class="cm">/**
+ Initializer with all possible properties.
+
+ @param title The choice set's title
+ @param delegate The choice set delegate called after the user has interacted with your choice set
+ @param layout The layout of choice options (Manual/touch only)
+ @param timeout The timeout of a touch interaction (Manual/touch only)
+ @param initialPrompt A voice prompt spoken to the user when this set is displayed
+ @param timeoutPrompt A voice prompt spoken to the user when the set times out (Voice only)
+ @param helpPrompt A voice prompt spoken to the user when the user asks for "help"
+ @param helpList A table list of text and images shown to the user during a voice recognition session for this choice set (Voice only)
+ @param choices The list of choices presented to the user either as a manual/touch interaction or via the user's voice
+ @return The choice set
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">delegate</span><span class="p">:(</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span> <span class="nf">layout</span><span class="p">:(</span><span class="n"><a href="Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span><span class="p">)</span><span class="nv">layout</span> <span class="nf">timeout</span><span class="p">:(</span><span class="n">NSTimeInterval</span><span class="p">)</span><span class="nv">timeout</span> <span class="nf">initialPrompt</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">initialPrompt</span> <span class="nf">timeoutPrompt</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">timeoutPrompt</span> <span class="nf">helpPrompt</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">helpPrompt</span> <span class="nf">vrHelpList</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">helpList</span> <span class="nf">choices</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLChoiceSet</span> <span class="p">:</span> <span class="kt">NSObject</span></code></pre>
+
+
+
+
<h3 id="section-SDLClimateControlCapabilities">
SDLClimateControlCapabilities
</h3>
@@ -949,56 +1342,107 @@
<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="n">lockScreenConfig</span><span class="p">;</span>
<span class="cm">/**
- The log configuration.
+ * The log configuration.
*/</span>
<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="n">loggingConfig</span><span class="p">;</span>
<span class="cm">/**
- The configuration
+ * The streaming media configuration.
*/</span>
<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="n">streamingMediaConfig</span><span class="p">;</span>
<span class="cm">/**
- Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, and logging configuration.
+ * The file manager configuration.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="n">fileManagerConfig</span><span class="p">;</span>
- @param lifecycleConfig The lifecycle configuration to be used.
- @param lockScreenConfig The lockscreen configuration to be used, or `enabledConfiguration` if nil.
- @param logConfig The logging configuration to be used, or `defaultConfiguration` if nil.
- @return The configuration
+<span class="cm">/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @return The configuration
*/</span>
-<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span><span class="p">;</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Use initWithLifecycle:lockScreen:logging:fileManager: instead"</span><span class="p">);</span>
<span class="cm">/**
- Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, and logging configuration.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span><span class="p">;</span>
- @param lifecycleConfig The lifecycle configuration to be used.
- @param lockScreenConfig The lockscreen configuration to be used, or `enabledConfiguration` if nil.
- @param logConfig The logging configuration to be used, or `defaultConfiguration` if nil.
- @return The configuration
+<span class="cm">/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @return The configuration
*/</span>
-<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">configurationWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use an initializer instead"</span><span class="p">);</span>
+<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">configurationWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Use configurationWithLifecycle:lockScreen:logging:fileManager: instead"</span><span class="p">)</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use an initializer instead"</span><span class="p">);</span>
<span class="cm">/**
- Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, logging, and streaming media configuration.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
+ */</span>
+<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">configurationWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use an initializer instead"</span><span class="p">);</span>
- @param lifecycleConfig The lifecycle configuration to be used.
- @param lockScreenConfig The lockscreen configuration to be used, or `enabledConfiguration` if nil.
- @param logConfig The logging configuration to be used, or `defaultConfiguration` if nil.
- @param streamingMediaConfig The streaming media configuration to be used, or nil because it is not needed.
- @return The configuration
+<span class="cm">/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
+ * @return The configuration
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="nf">streamingMedia</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Use initWithLifecycle:lockScreen:logging:streamingMedia:fileManager: instead"</span><span class="p">);</span>
+
+<span class="cm">/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
*/</span>
-<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="nf">streamingMedia</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span><span class="p">;</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="nf">streamingMedia</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span> <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span><span class="p">;</span>
<span class="cm">/**
- Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, logging, and streaming media configuration.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
+ * @return The configuration
+ */</span>
+<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">configurationWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="nf">streamingMedia</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Use configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager: instead"</span><span class="p">)</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use an initializer instead"</span><span class="p">);</span>
- @param lifecycleConfig The lifecycle configuration to be used.
- @param lockScreenConfig The lockscreen configuration to be used, or `enabledConfiguration` if nil.
- @param logConfig The logging configuration to be used, or `defaultConfiguration` if nil.
- @param streamingMediaConfig The streaming media configuration to be used, or nil because it is not needed.
- @return The configuration
+<span class="cm">/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
*/</span>
-<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">configurationWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="nf">streamingMedia</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use an initializer instead"</span><span class="p">);</span>
+<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">configurationWithLifecycle</span><span class="p">:(</span><span class="n"><a href="Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span> <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span> <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span> <span class="nf">streamingMedia</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span> <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span> <span class="n">NS_SWIFT_UNAVAILABLE</span><span class="p">(</span><span class="s">"Use an initializer instead"</span><span class="p">);</span>
<span class="k">@end</span></code></pre>
@@ -1569,6 +2013,25 @@ see SDLPerformAudioPassThru</p>
+ <h3 id="section-SDLEqualizerSettings">
+ SDLEqualizerSettings
+ </h3>
+
+ <p>Defines the each Equalizer channel settings.</p>
+
+ <a href="Classes/SDLEqualizerSettings.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLEqualizerSettings</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLEqualizerSettings</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLFile">
SDLFile
</h3>
@@ -1732,6 +2195,79 @@ see SDLPerformAudioPassThru</p>
+ <h3 id="section-SDLFileManagerConfiguration">
+ SDLFileManagerConfiguration
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLFileManagerConfiguration.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLFileManagerConfiguration</span> <span class="p">:</span> <span class="nc">NSObject</span> <span class="o">&lt;</span><span class="n">NSCopying</span><span class="o">&gt;</span>
+
+<span class="cm">/**
+ * Defines the number of times the file manager will attempt to reupload `SDLArtwork` files in the event of a failed upload to Core.
+ *
+ * Defaults to 1. To disable reuploads, set to 0.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt8</span> <span class="n">artworkRetryCount</span><span class="p">;</span>
+
+<span class="cm">/**
+ * Defines the number of times the file manager will attempt to reupload general `SDLFile`s in the event of a failed upload to Core.
+ *
+ * Defaults to 1. To disable reuploads, set to 0.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt8</span> <span class="n">fileRetryCount</span><span class="p">;</span>
+
+<span class="cm">/**
+ * Creates a default file manager configuration.
+ *
+ * @return A default configuration that may be customized.
+ */</span>
+<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="n">defaultConfiguration</span><span class="p">;</span>
+
+<span class="cm">/**
+ Use `defaultConfiguration` instead
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="n">init</span> <span class="n">NS_UNAVAILABLE</span><span class="p">;</span>
+
+<span class="cm">/**
+ * Creates a file manager configuration with customized upload retry counts.
+ *
+ * @return The configuration
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithArtworkRetryCount</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">artworkRetryCount</span> <span class="nf">fileRetryCount</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">fileRetryCount</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLFileManagerConfiguration</span> <span class="p">:</span> <span class="kt">NSObject</span><span class="p">,</span> <span class="kt">NSCopying</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLFuelRange">
+ SDLFuelRange
+ </h3>
+
+ <p>Describes the distance a vehicle can travel with the current level of fuel.</p>
+
+ <a href="Classes/SDLFuelRange.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLFuelRange</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLFuelRange</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLGPSData">
SDLGPSData
</h3>
@@ -1912,15 +2448,12 @@ whenever new data is available for the module.</p>
SDLGetVehicleData
</h3>
- <p>Requests surrent values of specific published vehicle data items.
- <p>
- Function Group: Location, VehicleInfo and DrivingChara
- <p>
- <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b>
- </p></p>
+ <p>Requests current values of specific published vehicle data items.</p>
-<p>Since SmartDeviceLink 2.0<br/>
- See SDLSubscribeVehicleData SDLUnsubscribeVehicleData</p>
+<p>Function Group: Location, VehicleInfo and DrivingChara
+ HMILevel needs to be FULL, LIMITED or BACKGROUND
+ Since SmartDeviceLink 2.0
+ See SDLSubscribeVehicleData, SDLUnsubscribeVehicleData</p>
<a href="Classes/SDLGetVehicleData.html" class="slightly-smaller">See more</a>
@@ -2069,6 +2602,96 @@ whenever new data is available for the module.</p>
+ <h3 id="section-SDLHMISettingsControlCapabilities">
+ SDLHMISettingsControlCapabilities
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLHMISettingsControlCapabilities.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLHMISettingsControlCapabilities</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName
+
+ @param moduleName The short friendly name of the hmi setting module
+
+ @return An instance of the SDLHMISettingsControlCapabilities class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span><span class="p">;</span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters
+
+ @param moduleName The short friendly name of the hmi setting module
+ @param distanceUnitAvailable Availability of the control of distance unit.
+ @param temperatureUnitAvailable Availability of the control of temperature unit.
+ @param displayModeUnitAvailable Availability of the control of displayMode unit.
+
+ @return An instance of the SDLHMISettingsControlCapabilities class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span> <span class="nf">distanceUnitAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">distanceUnitAvailable</span> <span class="nf">temperatureUnitAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">temperatureUnitAvailable</span> <span class="nf">displayModeUnitAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">displayModeUnitAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract The short friendly name of the hmi setting module.
+ * It should not be used to identify a module by mobile application.
+ *
+ * Required, Max String length 100 chars
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleName</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Availability of the control of distance unit.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">distanceUnitAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Availability of the control of temperature unit.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">temperatureUnitAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Availability of the control of HMI display mode.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">displayModeUnitAvailable</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLHMISettingsControlCapabilities</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLHMISettingsControlData">
+ SDLHMISettingsControlData
+ </h3>
+
+ <p>Corresponds to <q>HMI_SETTINGS</q> ModuleType</p>
+
+ <a href="Classes/SDLHMISettingsControlData.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLHMISettingsControlData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLHMISettingsControlData</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLHapticRect">
SDLHapticRect
</h3>
@@ -2224,6 +2847,240 @@ cases the language of the head unit changes or does not match the app language.<
+ <h3 id="section-SDLLightCapabilities">
+ SDLLightCapabilities
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLLightCapabilities.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLLightCapabilities</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLLightCapabilities object with the name of the light or group of lights
+
+ @param name The name of a light or a group of lights
+ @return An instance of the SDLLightCapabilities class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">name</span><span class="p">;</span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLLightCapabilities object with given parameters
+
+ @param name The name of a light or a group of lights
+ @param densityAvailable light's density can be set remotely
+ @param colorAvailable Light's color can be set remotely by using the RGB color space
+ @param statusAvailable whether status is available
+
+ @return An instance of the SDLLightCapabilities class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">name</span> <span class="nf">densityAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">densityAvailable</span> <span class="nf">colorAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">colorAvailable</span> <span class="nf">statusAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">statusAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract The name of a light or a group of lights
+ *
+ * Required, SDLLightName
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">name</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Indicates if the light's density can be set remotely (similar to a dimmer).
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">densityAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Indicates if the light's color can be set remotely by using the RGB color space.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">colorAvailable</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Indicates if the status (ON/OFF) can be set remotely.
+ * App shall not use read-only values (RAMP_UP/RAMP_DOWN/UNKNOWN/INVALID) in a setInteriorVehicleData request.
+ *
+ * Optional, Boolean
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">statusAvailable</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLLightCapabilities</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightControlCapabilities">
+ SDLLightControlCapabilities
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLLightControlCapabilities.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLLightControlCapabilities</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLLightControlCapabilities object with given parameters
+
+
+ @param moduleName friendly name of the light control module
+ @param supportedLights array of available LightCapabilities
+ @return An instance of the SDLLightControlCapabilities class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span> <span class="nf">supportedLights</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLLightCapabilities.html">SDLLightCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">supportedLights</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract The short friendly name of the light control module.
+ * It should not be used to identify a module by mobile application.
+ *
+ * Required, Max String length 100 chars
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleName</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract An array of available LightCapabilities that are controllable.
+ *
+ * Required, NSArray of type SDLLightCapabilities minsize="1" maxsize="100"
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLLightCapabilities.html">SDLLightCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">supportedLights</span><span class="p">;</span>
+
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLLightControlCapabilities</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightControlData">
+ SDLLightControlData
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLLightControlData.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLLightControlData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLLightControlData object with lightState
+
+ @param lightState An array of LightNames and their current or desired status
+ @return An instance of the SDLLightControlData class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLightStates</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLLightState.html">SDLLightState</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">lightState</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract An array of LightNames and their current or desired status.
+ * Status of the LightNames that are not listed in the array shall remain unchanged.
+ *
+ * Required, NSArray of type SDLLightState minsize="1" maxsize="100"
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLLightState.html">SDLLightState</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">lightState</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLLightControlData</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightState">
+ SDLLightState
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLLightState.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLLightState</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLLightState object with given parameters
+
+ @param id The name of a light or a group of lights
+ @param status Reflects the status of Light.
+ @return An instance of the SDLLightState class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">id</span> <span class="nf">status</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">)</span><span class="nv">status</span><span class="p">;</span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLLightState object with given parameters
+
+ @param id The name of a light or a group of lights
+ @param status Reflects the status of Light.
+ @param density Reflects the density of Light.
+ @param color Reflects the color of Light.
+ @return An instance of the SDLLightState class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">id</span> <span class="nf">status</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">)</span><span class="nv">status</span> <span class="nf">density</span><span class="p">:(</span><span class="kt">double</span><span class="p">)</span><span class="nv">density</span> <span class="nf">color</span><span class="p">:(</span><span class="n"><a href="Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">color</span><span class="p">;</span>
+
+<span class="cm">/**
+ Constructs a newly allocated SDLLightState object with given parameters
+
+ @param id The name of a light or a group of lights
+ @param lightStatus Reflects the status of Light.
+ @param lightDensity Reflects the density of Light.
+ @param lightColor Reflects the color of Light.
+ @return An instance of the SDLLightState class
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">id</span> <span class="nf">lightStatus</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">)</span><span class="nv">lightStatus</span> <span class="nf">lightDensity</span><span class="p">:(</span><span class="kt">double</span><span class="p">)</span><span class="nv">lightDensity</span> <span class="nf">lightColor</span><span class="p">:(</span><span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">lightColor</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract The name of a light or a group of lights
+ *
+ * Required, SDLLightName
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">id</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Reflects the status of Light.
+ *
+ * Required, SDLLightStatus
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">status</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Reflects the density of Light.
+ *
+ * Optional, Float type with minValue: 0 maxValue:1
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">density</span><span class="p">;</span>
+
+<span class="cm">/**
+ * @abstract Reflects the color of Light.
+ *
+ * Optional, SDLLightStatus
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nullable</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">color</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLLightState</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLListFiles">
SDLListFiles
</h3>
@@ -2318,7 +3175,13 @@ cases the language of the head unit changes or does not match the app language.<
<pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLLockScreenConfiguration</span> <span class="p">:</span> <span class="nc">NSObject</span> <span class="o">&lt;</span><span class="n">NSCopying</span><span class="o">&gt;</span>
<span class="cm">/**
- * Whether or not the lock screen should be shown in the "lock screen optional" state. Defaults to 'NO'.
+ * Whether or not the lock screen should be shown in the "lock screen optional" state. Defaults to false.
+ *
+ * @discussion In order for the "lock screen optional" state to occur, the following must be true:
+ * 1. The app should have received at least 1 driver distraction notification (i.e. a `OnDriverDistraction` notification) from SDL Core. Older versions of Core did not send a notification immediately on connection.
+ * 2. The driver is not distracted (i.e. the last `OnDriverDistraction` notification received was for a driver distraction state off).
+ * 3. The `hmiLevel` can not be `NONE`.
+ * 4. If the `hmiLevel` is currently `BACKGROUND` then the previous `hmiLevel` should have been `FULL` or `LIMITED` (i.e. the user should have interacted with app before it was backgrounded).
*/</span>
<span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">showInOptionalState</span><span class="p">;</span>
@@ -2900,6 +3763,44 @@ cases the language of the head unit changes or does not match the app language.<
+ <h3 id="section-SDLMassageCushionFirmness">
+ SDLMassageCushionFirmness
+ </h3>
+
+ <p>The intensity or firmness of a cushion.</p>
+
+ <a href="Classes/SDLMassageCushionFirmness.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLMassageCushionFirmness</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLMassageCushionFirmness</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageModeData">
+ SDLMassageModeData
+ </h3>
+
+ <p>Specify the mode of a massage zone.</p>
+
+ <a href="Classes/SDLMassageModeData.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLMassageModeData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLMassageModeData</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLMenuCell">
SDLMenuCell
</h3>
@@ -2937,8 +3838,35 @@ cases the language of the head unit changes or does not match the app language.<
*/</span>
<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">subCells</span><span class="p">;</span>
+<span class="cm">/**
+ Create a menu cell that has no subcells.
+
+ @param title The cell's primary text
+ @param icon The cell's image
+ @param voiceCommands Voice commands that will activate the menu cell
+ @param handler The code that will be run when the menu cell is selected
+ @return The menu cell
+ */</span>
<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">icon</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">icon</span> <span class="nf">voiceCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">voiceCommands</span> <span class="nf">handler</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler">SDLMenuCellSelectionHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span>
-<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">subCells</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">subCells</span><span class="p">;</span>
+
+<span class="cm">/**
+ Create a menu cell that has subcells and when selected will go into a deeper part of the menu
+
+ @param title The cell's primary text
+ @param subCells The subcells that will appear when the cell is selected
+ @return The menu cell
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">subCells</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">subCells</span> <span class="n">__deprecated_msg</span><span class="p">((</span><span class="s">"Use initWithTitle:icon:subcells: instead"</span><span class="p">));</span>
+
+<span class="cm">/**
+ Create a menu cell that has subcells and when selected will go into a deeper part of the menu
+
+ @param title The cell's primary text
+ @param icon The cell's image
+ @param subCells The subcells that will appear when the cell is selected
+ @return The menu cell
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">icon</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">icon</span> <span class="nf">subCells</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">subCells</span><span class="p">;</span>
<span class="k">@end</span></code></pre>
@@ -3518,6 +4446,28 @@ the application has subscribed.</p>
+ <h3 id="section-SDLOnRCStatus">
+ SDLOnRCStatus
+ </h3>
+
+ <p>OnRCStatus notifications to all registered mobile applications and the HMI whenever
+ (1) SDL allocates a module to an application or
+ (2) it de-allocates a module from an application, or
+ (3) an application registers with SDL</p>
+
+ <a href="Classes/SDLOnRCStatus.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLOnRCStatus</span> <span class="p">:</span> <span class="nc"><a href="Classes.html#/c:objc(cs)SDLRPCNotification">SDLRPCNotification</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLOnRCStatus</span> <span class="p">:</span> <span class="kt"><a href="Classes.html#/c:objc(cs)SDLRPCNotification">SDLRPCNotification</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLOnSyncPData">
SDLOnSyncPData
</h3>
@@ -3992,18 +4942,12 @@ the application has subscribed.</p>
SDLPutFile
</h3>
- <p>Used to push a binary data onto the SDL module from a mobile device, such as
- icons and album art</p>
+ <p>Used to push a binary data onto the SDL module from a mobile device, such as icons and album art.</p>
<p>Since SmartDeviceLink 2.0</p>
<div class="aside aside-see">
<p class="aside-title">See</p>
- SDLDeleteFile
-
-</div>
-<div class="aside aside-see">
- <p class="aside-title">See</p>
- SDLListFiles
+ SDLDeleteFile, SDLListFiles
</div>
@@ -4060,6 +5004,65 @@ the application has subscribed.</p>
+ <h3 id="section-SDLRGBColor">
+ SDLRGBColor
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLRGBColor.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLRGBColor</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+<span class="cm">/**
+ Create an SDL color object with red / green / blue values between 0-255
+
+ @param red The red value of the color
+ @param green The green value of the color
+ @param blue The blue value of the color
+ @return The color
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithRed</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">red</span> <span class="nf">green</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">green</span> <span class="nf">blue</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">blue</span><span class="p">;</span>
+
+<span class="cm">/**
+ Create an SDL color object with a UIColor object.
+
+ @warning The alpha color of the UIColor object will be ignored
+
+ @param color The UIColor object to base this color on
+ @return The color
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithColor</span><span class="p">:(</span><span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">color</span><span class="p">;</span>
+
+<span class="cm">/**
+ * The red value of the RGB color
+ * Required, Integer, 0-255
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">red</span><span class="p">;</span>
+
+<span class="cm">/**
+ * The green value of the RGB color
+ * Required, Integer, 0-255
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">green</span><span class="p">;</span>
+
+<span class="cm">/**
+ * The blue value of the RGB color
+ * Required, Integer, 0-255
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">blue</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLRGBColor</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLRPCMessage">
SDLRPCMessage
</h3>
@@ -4070,7 +5073,7 @@ the application has subscribed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLRPCMessage</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span> <span class="p">{</span>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLRPCMessage</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span> <span class="o">&lt;</span><span class="n">NSCopying</span><span class="o">&gt;</span> <span class="p">{</span>
<span class="n">NSMutableDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span><span class="n">function</span><span class="p">;</span>
<span class="n">NSMutableDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span><span class="n">parameters</span><span class="p">;</span>
<span class="n">NSString</span> <span class="o">*</span><span class="n">messageType</span><span class="p">;</span>
@@ -4141,7 +5144,7 @@ the application has subscribed.</p>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLRPCMessage</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLRPCMessage</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span><span class="p">,</span> <span class="kt">NSCopying</span></code></pre>
@@ -4425,76 +5428,18 @@ the application has subscribed.</p>
SDLRegisterAppInterface
</h3>
- <p>Registers the application&rsquo;s interface with SDL&reg;, declaring properties of
- the registration, 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&reg; can take place. The
- registration lasts until it is terminated either by the application calling
- the <i> SDLUnregisterAppInterface</i> method, or by SDL&reg;
- sending an <i> SDLOnAppInterfaceUnregistered</i> notification, or
- by loss of the underlying transport connection, or closing of the underlying
- message transmission protocol RPC session
- <p>
- Until the application receives its first <i>SDLOnHMIStatus</i>
- Notification, its HMI Status is assumed to be: <i>
- SDLHMILevel</i>=NONE, <i>
- SDLAudioStreamingState
- </i>=NOT_AUDIBLE, <i>
- SDLSystemContext</i>=MAIN
- <p>
- All SDL&reg; resources which the application creates or uses (e.g. Choice
- Sets, Command Menu, etc.) are associated with the application&rsquo;s interface
- registration. Therefore, when the interface registration ends, the SDL&reg;
- resources associated with the application are disposed of. As a result, even
- though the application itself may continue to run on its host platform (e.g.
- mobile device) after the interface registration terminates, the application
- will not be able to use the SDL&reg; HMI without first establishing a new
- interface registration and re-creating its required SDL&reg; resources. That
- is, SDL&reg; resources created by (or on behalf of) an application do not
- persist beyond the life-span of the interface registration
- <p>
- Resources and settings whose lifespan is tied to the duration of an
- application&rsquo;s interface registration:<br/>
- <ul>
- <li>Choice Sets</li>
- <li>Command Menus (built by successive calls to <i>SDLAddCommand
- </i>)</li>
- <li>Media clock timer display value</li>
- <li>Media clock timer display value</li>
- <li>Media clock timer display value</li>
- </ul>
- <p>
- The autoActivateID is used to grant an application the HMILevel and
- AudioStreamingState it had when it last disconnected
- <p>
- <b>Notes: </b>The autoActivateID parameter, and associated behavior, is
- currently ignored by SDL&reg;
- <p>
- When first calling this method (i.e. first time within life cycle of mobile
- app), an autoActivateID should not be included. After successfully
- registering an interface, an autoActivateID is returned to the mobile
- application for it to use in subsequent connections. If the connection
- between SDL&reg; and the mobile application is lost, such as the vehicle is
- turned off while the application is running, the autoActivateID can then be
- passed in another call to RegisterAppInterface to re-acquire <i>
- SDLHMILevel</i>=FULL
- <p>
- If the application intends to stream audio it is important to indicate so via
- the isMediaApp parameter. When set to true, audio will reliably stream
- without any configuration required by the user. When not set, audio may
- stream, depending on what the user might have manually configured as a media
- source on SDL&reg;
- <p>
- There is no time limit for how long the autoActivateID is <q>valid</q> (i.e. would
- confer focus and opt-in)
- <p>
- <b>HMILevel is not defined before registering</b><br/>
- </p></p>
+ <p>Registers the application&rsquo;s interface with SDL. The <code>RegisterAppInterface</code> 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 <code><a href="Classes.html#/c:objc(cs)SDLUnregisterAppInterface">SDLUnregisterAppInterface</a></code> method, or by SDL sending an <code><a href="Classes/SDLOnAppInterfaceUnregistered.html">SDLOnAppInterfaceUnregistered</a></code> notification, or by loss of the underlying transport connection, or closing of the underlying message transmission protocol RPC session.</p>
+
+<p>Until the application receives its first <code><a href="Classes/SDLOnHMIStatus.html">SDLOnHMIStatus</a></code> notification, its <code><a href="Type Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></code> is assumed to be <code>NONE</code>, the <code><a href="Type Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState">SDLAudioStreamingState</a></code> is assumed to be <code>NOT_AUDIBLE</code>, and the <code><a href="Type Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext">SDLSystemContext</a></code> is assumed to be <code>MAIN</code>.</p>
+
+<p>All SDL resources which the application creates or uses (e.g. choice sets, command menu, etc.) are associated with the application&rsquo;s interface registration. Therefore, when the interface registration ends, the SDL resources associated with the application are disposed of. As a result, even though the application itself may continue to run on its host platform (e.g. mobile device) after the interface registration terminates, the application will not be able to use the SDL HMI without first establishing a new interface registration and re-creating its required SDL resources. That is, SDL resources created by (or on behalf of) an application do not persist beyond the life-span of the interface registration. Resources and settings whose lifespan is tied to the duration of an application&rsquo;s interface registration include: choice sets, command menus, and the media clock timer display value</p>
+
+<p>If the application intends to stream audio it is important to indicate so via the <code>isMediaApp</code> parameter. When set to true, audio will reliably stream without any configuration required by the user. When not set, audio may stream, depending on what the user might have manually configured as a media source on SDL.</p>
<p>@since SDL 1.0</p>
<div class="aside aside-see">
<p class="aside-title">See</p>
- SDLUnregisterAppInterface SDLOnAppInterfaceUnregistered
+ SDLUnregisterAppInterface, SDLOnAppInterfaceUnregistered
</div>
@@ -4603,6 +5548,25 @@ the application has subscribed.</p>
+ <h3 id="section-SDLSISData">
+ SDLSISData
+ </h3>
+
+ <p>HD radio Station Information Service (SIS) data.</p>
+
+ <a href="Classes/SDLSISData.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLSISData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLSISData</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLScreenManager">
SDLScreenManager
</h3>
@@ -4615,6 +5579,8 @@ the application has subscribed.</p>
<h4>Objective-C</h4>
<pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLScreenManager</span> <span class="p">:</span> <span class="nc">NSObject</span>
+<span class="cp">#pragma mark Text and Graphics
+</span>
<span class="cm">/**
The top text field within a template layout
*/</span>
@@ -4675,11 +5641,15 @@ the application has subscribed.</p>
*/</span>
<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="Type Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField4Type</span><span class="p">;</span>
+<span class="cp">#pragma mark Soft Buttons
+</span>
<span class="cm">/**
The current list of soft buttons within a template layout. Set this array to change the displayed soft buttons.
*/</span>
<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLSoftButtonObject.html">SDLSoftButtonObject</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonObjects</span><span class="p">;</span>
+<span class="cp">#pragma mark Menu
+</span>
<span class="cm">/**
The current list of menu cells displayed in the app's menu.
*/</span>
@@ -4690,6 +5660,23 @@ the application has subscribed.</p>
*/</span>
<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLVoiceCommand.html">SDLVoiceCommand</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceCommands</span><span class="p">;</span>
+<span class="cp">#pragma mark Choice Sets
+</span>
+<span class="cm">/**
+ The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">null_resettable</span><span class="p">)</span> <span class="n"><a href="Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span> <span class="o">*</span><span class="n">keyboardConfiguration</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">preloadedChoices</span><span class="p">;</span>
+
+
+<span class="cp">#pragma mark - Methods
+</span>
+<span class="cp">#pragma mark Lifecycle
+</span>
<span class="cm">/**
Initialize a screen manager
@@ -4699,16 +5686,25 @@ the application has subscribed.</p>
@param fileManager The file manager used to upload files
@return The screen manager
*/</span>
+
<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithConnectionManager</span><span class="p">:(</span><span class="n">id</span><span class="o">&lt;</span><span class="n">SDLConnectionManagerType</span><span class="o">&gt;</span><span class="p">)</span><span class="nv">connectionManager</span> <span class="nf">fileManager</span><span class="p">:(</span><span class="n"><a href="Classes/SDLFileManager.html">SDLFileManager</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManager</span><span class="p">;</span>
<span class="cm">/**
+ Starts the manager and all sub-managers
+
+ @param handler The handler called when setup is complete
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startWithCompletionHandler</span><span class="p">:(</span><span class="kt">void</span><span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="n">NSError</span> <span class="o">*</span> <span class="n">_Nullable</span> <span class="n">error</span><span class="p">))</span><span class="nv">handler</span><span class="p">;</span>
+
+<span class="cm">/**
Stops the manager.
@warning For internal use
*/</span>
<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">stop</span><span class="p">;</span>
-<span class="cm">/**
+<span class="cp">#pragma mark Text and Graphic
+</span><span class="cm">/**
Delays all screen updates until endUpdatesWithCompletionHandler: is called.
*/</span>
<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">beginUpdates</span><span class="p">;</span>
@@ -4727,18 +5723,83 @@ the application has subscribed.</p>
Also updates the primary and secondary images with new image(s) if new one(s) been set. This method will take care of naming the files (based on a hash). This is assumed to be a non-persistant image.
If it needs to be uploaded, it will be. Once the upload is complete, the on-screen graphic will be updated.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">endUpdates</span><span class="p">;</span>
+
+<span class="cm">/**
+ Update text fields with new text set into the text field properties. Pass an empty string `\@""` to clear the text field.
+
+ If the system does not support a full 4 fields, this will automatically be concatenated and properly send the field available.
+
+ If 3 lines are available: [field1, field2, field3 - field 4]
+
+ If 2 lines are available: [field1 - field2, field3 - field4]
+
+ If 1 line is available: [field1 - field2 - field3 - field4]
+
+ Also updates the primary and secondary images with new image(s) if new one(s) been set. This method will take care of naming the files (based on a hash). This is assumed to be a non-persistant image.
+
+ If it needs to be uploaded, it will be. Once the upload is complete, the on-screen graphic will be updated.
@param handler A handler run when the fields have finished updating, with an error if the update failed. This handler may be called multiple times when the text update is sent and the image update is sent.
*/</span>
<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">endUpdatesWithCompletionHandler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Type Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler">SDLScreenManagerUpdateCompletionHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span>
+<span class="cp">#pragma mark Soft Button
+</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLSoftButtonObject.html">SDLSoftButtonObject</a></span> <span class="o">*</span><span class="p">)</span><span class="nf">softButtonObjectNamed</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span>
+
+<span class="cp">#pragma mark Choice Sets
+</span>
<span class="cm">/**
- Find a current soft button object with a specific name
+ 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.
- @param name The name of the soft button object to find
- @return The soft button object or nil if there isn't one with that name
+ @param choices The choices to be preloaded.
+ @param handler The handler to be called when complete.
*/</span>
-<span class="k">-</span> <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="Classes/SDLSoftButtonObject.html">SDLSoftButtonObject</a></span> <span class="o">*</span><span class="p">)</span><span class="nf">softButtonObjectNamed</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">preloadChoices</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span> <span class="nf">withCompletionHandler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="Type Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler">SDLPreloadChoiceCompletionHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span>
+
+<span class="cm">/**
+ Delete loaded cells from the head unit. If the cells don't exist on the head unit they will be ignored.
+
+ @param choices The choices to be deleted. These will be matched via a hash of the text, image name(s), and VR commands.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">deleteChoices</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+
+ If the cells in the set are not already preloaded, they will be preloaded before the presentation occurs; this could take a while depending on the contents of the cells.
+
+ If the cells have voice commands and images attached, this could take upwards of 10 seconds. If there are no cells on the set, this will fail, calling `choiceSet:didReceiveError:` on the choice set delegate.
+
+ @param choiceSet The set to be displayed
+ @param mode If the set should be presented for the user to interact via voice, touch, or both
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">presentChoiceSet</span><span class="p">:(</span><span class="n"><a href="Classes/SDLChoiceSet.html">SDLChoiceSet</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">choiceSet</span> <span class="nf">mode</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode">SDLInteractionMode</a></span><span class="p">)</span><span class="nv">mode</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+
+ This presents the choice set as searchable when in a touch interaction. The user, when not in a distracted state, will have a keyboard available for searching this set. The user's input in the keyboard will be available in the SDLKeyboardDelegate.
+
+ If the cells in the set are not already preloaded, they will be preloaded before the presentation occurs; this could take a while depending on the contents of the cells.
+
+ If the cells have voice commands and images attached, this could take upwards of 10 seconds. If there are no cells on the set, this will fail, calling `choiceSet:didReceiveError:` on the choice set delegate.
+
+ @param choiceSet The set to be displayed
+ @param mode If the set should be presented for the user to interact via voice, touch, or both
+ @param delegate The keyboard delegate called when the user interacts with the search field of the choice set
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">presentSearchableChoiceSet</span><span class="p">:(</span><span class="n"><a href="Classes/SDLChoiceSet.html">SDLChoiceSet</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">choiceSet</span> <span class="nf">mode</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode">SDLInteractionMode</a></span><span class="p">)</span><span class="nv">mode</span> <span class="nf">withKeyboardDelegate</span><span class="p">:(</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="Protocols/SDLKeyboardDelegate.html">SDLKeyboardDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+
+ @param initialText The initial text within the keyboard input field. It will disappear once the user selects the field in order to enter text
+ @param delegate The keyboard delegate called when the user interacts with the keyboard
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">presentKeyboardWithInitialText</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">initialText</span> <span class="nf">delegate</span><span class="p">:(</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="Protocols/SDLKeyboardDelegate.html">SDLKeyboardDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span><span class="p">;</span>
<span class="k">@end</span></code></pre>
@@ -4813,6 +5874,63 @@ Function Group: ScrollableMessage
+ <h3 id="section-SDLSeatControlCapabilities">
+ SDLSeatControlCapabilities
+ </h3>
+
+ <p>Include information about a seat control capabilities.</p>
+
+ <a href="Classes/SDLSeatControlCapabilities.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLSeatControlCapabilities</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLSeatControlCapabilities</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLSeatControlData">
+ SDLSeatControlData
+ </h3>
+
+ <p>Seat control data corresponds to <q>SEAT</q> ModuleType.</p>
+
+ <a href="Classes/SDLSeatControlData.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLSeatControlData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLSeatControlData</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLSeatMemoryAction">
+ SDLSeatMemoryAction
+ </h3>
+
+ <p>Specify the action to be performed.</p>
+
+ <a href="Classes/SDLSeatMemoryAction.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLSeatMemoryAction</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLSeatMemoryAction</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLSendHapticData">
SDLSendHapticData
</h3>
@@ -5567,6 +6685,27 @@ change the settings of a specific remote control module.</p>
+ <h3 id="section-SDLStationIDNumber">
+ SDLStationIDNumber
+ </h3>
+
+ <p>Describes the hour, minute and second values used to set the media clock.</p>
+
+<p>@since SDL 1.0</p>
+
+ <a href="Classes/SDLStationIDNumber.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLStationIDNumber</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLStationIDNumber</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLStreamingMediaConfiguration">
SDLStreamingMediaConfiguration
</h3>
@@ -5725,7 +6864,7 @@ change the settings of a specific remote control module.</p>
<span class="cm">/**
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.
*/</span>
-<span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">UIViewController</span> <span class="o">*</span><span class="n">rootViewController</span><span class="p">;</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIViewController</span> <span class="o">*</span><span class="n">rootViewController</span><span class="p">;</span>
<span class="cm">/**
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.
@@ -5811,11 +6950,31 @@ change the settings of a specific remote control module.</p>
<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startWithProtocol</span><span class="p">:(</span><span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span>
<span class="cm">/**
+ * Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startAudioWithProtocol</span><span class="p">:(</span><span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span>
+
+<span class="cm">/**
+ * Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startVideoWithProtocol</span><span class="p">:(</span><span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span>
+
+<span class="cm">/**
* Stop the manager. This method is used internally.
*/</span>
<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">stop</span><span class="p">;</span>
<span class="cm">/**
+ * Stop the audio feature of the manager. This method is used internally.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">stopAudio</span><span class="p">;</span>
+
+<span class="cm">/**
+ * Stop the video feature of the manager. This method is used internally.
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">stopVideo</span><span class="p">;</span>
+
+<span class="cm">/**
* 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.
*
* @param imageBuffer A CVImageBufferRef to be encoded by Video Toolbox
@@ -5943,19 +7102,17 @@ change the settings of a specific remote control module.</p>
SDLSubscribeVehicleData
</h3>
- <p>Subscribes for 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
- very much dependent on sensors, vehicle architecture and vehicle type. Be
- also prepared for the situation that a signal is not available on a vehicle
- <p>
- Function Group: Location, VehicleInfo and DrivingChara
- <p>
- <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b>
- </p></p>
+ <p>Subscribes to specific published vehicle data items. The data will be only sent if it has changed. The application will be notified by the <code>onVehicleData</code> notification whenever new data is available. The update rate is dependent on sensors, vehicle architecture and vehicle type.</p>
+<div class="aside aside-warning">
+ <p class="aside-title">Warning</p>
+ A vehicle may only support a subset of the vehicle data items. Be prepared for the situation where a signal is not available on a vehicle.
+
+</div>
-<p>Since SmartDeviceLink 2.0<br/>
- See SDLUnsubscribeVehicleData SDLGetVehicleData</p>
+<p>Function Group: Location, VehicleInfo and DrivingChara
+ HMILevel needs to be FULL, LIMITED or BACKGROUND
+ Since SmartDeviceLink 2.0
+ See SDLUnsubscribeVehicleData, SDLGetVehicleData</p>
<a href="Classes/SDLSubscribeVehicleData.html" class="slightly-smaller">See more</a>
@@ -6327,6 +7484,45 @@ change the settings of a specific remote control module.</p>
+ <h3 id="section-SDLTemplateColorScheme">
+ SDLTemplateColorScheme
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Classes/SDLTemplateColorScheme.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLTemplateColorScheme</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span>
+
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithPrimaryRGBColor</span><span class="p">:(</span><span class="n"><a href="Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">primaryColor</span> <span class="nf">secondaryRGBColor</span><span class="p">:(</span><span class="n"><a href="Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryColor</span> <span class="nf">backgroundRGBColor</span><span class="p">:(</span><span class="n"><a href="Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">backgroundColor</span><span class="p">;</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithPrimaryColor</span><span class="p">:(</span><span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">primaryColor</span> <span class="nf">secondaryColor</span><span class="p">:(</span><span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryColor</span> <span class="nf">backgroundColor</span><span class="p">:(</span><span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">backgroundColor</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">primaryColor</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">secondaryColor</span><span class="p">;</span>
+
+<span class="cm">/**
+ 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.
+ */</span>
+<span class="k">@property</span> <span class="p">(</span><span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">backgroundColor</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLTemplateColorScheme</span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCStruct.html">SDLRPCStruct</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLTextField">
SDLTextField
</h3>
diff --git a/docs/Classes/SDLAddCommand.html b/docs/Classes/SDLAddCommand.html
index fc09daec2..06e3483d7 100644
--- a/docs/Classes/SDLAddCommand.html
+++ b/docs/Classes/SDLAddCommand.html
@@ -7,6 +7,8 @@
<li><a href="#section--initWithId:vrCommands:handler:">-initWithId:vrCommands:handler:</a></li>
<li><a href="#section--initWithId:vrCommands:menuName:handler:">-initWithId:vrCommands:menuName:handler:</a></li>
<li><a href="#section--initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:">-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:</a></li>
+ <li><a href="#section--initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:">-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:</a></li>
+ <li><a href="#section--initWithId:vrCommands:menuName:parentId:position:icon:handler:">-initWithId:vrCommands:menuName:parentId:position:icon:handler:</a></li>
<li><a href="#section-handler">handler</a></li>
<li><a href="#section-cmdID">cmdID</a></li>
<li><a href="#section-menuParams">menuParams</a></li>
@@ -16,29 +18,28 @@
<h3>Overview</h3>
-<p>This class will add a command to the application&rsquo;s Command Menu SDLMenuParams</p>
+<p>This class will add a command to the application&rsquo;s Command Menu</p>
-<p>A command will be added to the end of the list of elements in
- the Command Menu under the following conditions:
- <li>When a SDLCommand is added with no SDLMenuParams value provided</li>
- <li>When a SDLMenuParams value is provided with a SDLMenuParam.position value
- greater than or equal to the number of menu items currently defined in the
- menu specified by the SDLMenuParam.parentID value</li></p>
+<p>A command will be added to the end of the list of elements in the Command Menu under the following conditions:</p>
-<p>The set of choices which the application builds using SDLAddCommand can be a
- mixture of:
- <li>Choices having only VR synonym definitions, but no SDLMenuParams definitions
- </li>
- <li>Choices having only SDLMenuParams definitions, but no VR synonym definitions
- </li>
- <li>Choices having both SDLMenuParams and VR synonym definitions</li></p>
+<ol>
+<li>When a SDLAddCommand is added with no SDLMenuParams value provided.</li>
+<li>When a SDLMenuParams value is provided with a SDLMenuParam.position value greater than or equal to the number of menu items currently defined in the menu specified by the SDLMenuParam.parentID value.</li>
+</ol>
-<p>HMILevel needs to be FULL, LIMITED or BACKGROUD</p>
+<p>The set of choices which the application builds using SDLAddCommand can be a mixture of:</p>
-<p>@since SDL 1.0</p>
+<ol>
+<li>Choices having only VR synonym definitions, but no SDLMenuParams definitions</li>
+<li>Choices having only SDLMenuParams definitions, but no VR synonym definitions</li>
+<li>Choices having both SDLMenuParams and VR synonym definitions</li>
+</ol>
+
+<p>HMILevel needs to be FULL, LIMITED or BACKGROUD
+ @since SDL 1.0</p>
<div class="aside aside-see">
<p class="aside-title">See</p>
- SDLDeleteCommand SDLAddSubMenu SDLDeleteSubMenu
+ SDLDeleteCommand, SDLAddSubMenu, SDLDeleteSubMenu
</div>
@@ -48,7 +49,7 @@
-initWithHandler:
</h3>
- <p>Construct a SDLAddCommand with a handler callback when an event occurs.</p>
+ <p>Constructs a SDLAddCommand with a handler callback when an event occurs.</p>
@@ -65,23 +66,28 @@
<h4>Parameters</h4>
<dl>
<dt>handler</dt>
- <dd><p>A callback that will be called when a button event occurs for the command</p></dd>
+ <dd><p>A callback that is called when a button event occurs for the command.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
- <p>An SDLAddCommand object</p>
+ <p>A SDLAddCommand object</p>
</div>
<h3 id="section--initWithId:vrCommands:handler:">
-initWithId:vrCommands:handler:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for creating a voice command menu item.</p>
+
+<p>@discussion This menu item can only be triggered by the VR system and does not show up in the HMI application menu.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">commandId</span> <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span> <span class="nf">handler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">commandId</span>
+ <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span>
+ <span class="nf">handler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler">handler</a></span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -89,17 +95,34 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>commandId</dt>
+ <dd><p>A unique id for the menu item.</p></dd>
+ <dt>vrCommands</dt>
+ <dd><p>One or more voice recognition phrases. If recognized by the VR system, the handler will be called.</p></dd>
+ <dt>handler</dt>
+ <dd><p>Called when the VR system recognizes a phrase in <code><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands">vrCommands</a></code></p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLAddCommand object</p>
+ </div>
<h3 id="section--initWithId:vrCommands:menuName:handler:">
-initWithId:vrCommands:menuName:handler:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for creating a menu item with text.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">commandId</span> <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">handler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">commandId</span>
+ <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span>
+ <span class="nf">menuName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span>
+ <span class="nf">handler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler">handler</a></span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -107,17 +130,45 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>commandId</dt>
+ <dd><p>A unique id for the menu item.</p></dd>
+ <dt>vrCommands</dt>
+ <dd><p>One or more voice recognition phrases. If recognized by the VR system, the handler will be called.</p></dd>
+ <dt>menuName</dt>
+ <dd><p>The text that will appear in the menu.</p></dd>
+ <dt>handler</dt>
+ <dd><p>Called when the menu item is selected and/or when the VR system recognizes a phrase in <code><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands">vrCommands</a></code></p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLAddCommand object</p>
+ </div>
<h3 id="section--initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:">
-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for creating a menu item with text and a custom icon.</p>
+<div class="aside aside-warning">
+ <p class="aside-title">Warning</p>
+ <p>The icon must be uploaded to Core before being displayed in the menu.</p>
+
+</div>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">commandId</span> <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">parentId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">parentId</span> <span class="nf">position</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">position</span> <span class="nf">iconValue</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">iconValue</span> <span class="nf">iconType</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="p">)</span><span class="nv">iconType</span> <span class="nf">handler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">commandId</span>
+ <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span>
+ <span class="nf">menuName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span>
+ <span class="nf">parentId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">parentId</span>
+ <span class="nf">position</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">position</span>
+ <span class="nf">iconValue</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">iconValue</span>
+ <span class="nf">iconType</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="p">)</span><span class="nv">iconType</span>
+ <span class="nf">handler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler">handler</a></span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -125,6 +176,137 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>commandId</dt>
+ <dd><p>A unique id for the menu item.</p></dd>
+ <dt>vrCommands</dt>
+ <dd><p>One or more voice recognition phrases. If recognized by the VR system, the handler will be called.</p></dd>
+ <dt>menuName</dt>
+ <dd><p>The text that will appear in the menu.</p></dd>
+ <dt>parentId</dt>
+ <dd><p>The command id of the parent menu if menu item is in a submenu. If not in a submenu, the parentId is 0.</p></dd>
+ <dt>position</dt>
+ <dd><p>The menu item&rsquo;s row number in the menu.</p></dd>
+ <dt>iconValue</dt>
+ <dd><p>The unique name used to upload the image to Core.</p></dd>
+ <dt>iconType</dt>
+ <dd><p>Whether the image is static or dynamic.</p></dd>
+ <dt>handler</dt>
+ <dd><p>Called when the menu item is selected and/or when the VR system recognizes a phrase in <code><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands">vrCommands</a></code></p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLAddCommand object</p>
+ </div>
+
+ <h3 id="section--initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:">
+ -initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:
+ </h3>
+
+ <p>Convenience init for creating a menu item with text and a custom icon.</p>
+<div class="aside aside-warning">
+ <p class="aside-title">Warning</p>
+ <p>The icon must be uploaded to Core before being displayed in the menu.</p>
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">commandId</span>
+ <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span>
+ <span class="nf">menuName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span>
+ <span class="nf">parentId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">parentId</span>
+ <span class="nf">position</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">position</span>
+ <span class="nf">iconValue</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">iconValue</span>
+ <span class="nf">iconType</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="p">)</span><span class="nv">iconType</span>
+ <span class="nf">iconIsTemplate</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">iconIsTemplate</span>
+ <span class="nf">handler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler">handler</a></span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">id</span> <span class="nv">commandId</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">vrCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?,</span> <span class="nv">menuName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">parentId</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">position</span><span class="p">:</span> <span class="kt">UInt16</span><span class="p">,</span> <span class="nv">iconValue</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">iconType</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="p">?,</span> <span class="nv">iconIsTemplate</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">handler</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">?</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>commandId</dt>
+ <dd><p>A unique id for the menu item.</p></dd>
+ <dt>vrCommands</dt>
+ <dd><p>One or more voice recognition phrases. If recognized by the VR system, the handler will be called.</p></dd>
+ <dt>menuName</dt>
+ <dd><p>The text that will appear in the menu.</p></dd>
+ <dt>parentId</dt>
+ <dd><p>The command id of the parent menu if menu item is in a submenu. If not in a submenu, the parentId is 0.</p></dd>
+ <dt>position</dt>
+ <dd><p>The menu item&rsquo;s row number in the menu.</p></dd>
+ <dt>iconValue</dt>
+ <dd><p>The unique name used to upload the image to Core.</p></dd>
+ <dt>iconType</dt>
+ <dd><p>Whether the image is static or dynamic.</p></dd>
+ <dt>iconIsTemplate</dt>
+ <dd><p>Whether or not the image is a template that can be (re)colored by the SDL HMI</p></dd>
+ <dt>handler</dt>
+ <dd><p>Called when the menu item is selected and/or when the VR system recognizes a phrase in <code><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands">vrCommands</a></code></p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLAddCommand object</p>
+ </div>
+
+ <h3 id="section--initWithId:vrCommands:menuName:parentId:position:icon:handler:">
+ -initWithId:vrCommands:menuName:parentId:position:icon:handler:
+ </h3>
+
+ <p>Convenience init for creating a menu item with text and a custom icon.</p>
+<div class="aside aside-warning">
+ <p class="aside-title">Warning</p>
+ <p>The icon must be uploaded to Core before being displayed in the menu.</p>
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">commandId</span>
+ <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span>
+ <span class="nf">menuName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span>
+ <span class="nf">parentId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">parentId</span>
+ <span class="nf">position</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">position</span>
+ <span class="nf">icon</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">icon</span>
+ <span class="nf">handler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler">handler</a></span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">id</span> <span class="nv">commandId</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">vrCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?,</span> <span class="nv">menuName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">parentId</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">position</span><span class="p">:</span> <span class="kt">UInt16</span><span class="p">,</span> <span class="nv">icon</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLImage.html">SDLImage</a></span><span class="p">?,</span> <span class="nv">handler</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span><span class="p">?</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>commandId</dt>
+ <dd><p>A unique id for the menu item.</p></dd>
+ <dt>vrCommands</dt>
+ <dd><p>One or more voice recognition phrases. If recognized by the VR system, the handler will be called.</p></dd>
+ <dt>menuName</dt>
+ <dd><p>The text that will appear in the menu.</p></dd>
+ <dt>parentId</dt>
+ <dd><p>The command id of the parent menu if menu item is in a submenu. If not in a submenu, the parentId is 0.</p></dd>
+ <dt>position</dt>
+ <dd><p>The menu item&rsquo;s row number in the menu.</p></dd>
+ <dt>icon</dt>
+ <dd><p>A image that appears next to the <code>menuName</code> text.</p></dd>
+ <dt>handler</dt>
+ <dd><p>Called when the menu item is selected and/or when the VR system recognizes a phrase in <code><a href="../Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands">vrCommands</a></code></p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLAddCommand object</p>
+ </div>
<h3 id="section-handler">
handler
@@ -133,7 +315,7 @@
<p>A handler that will let you know when the button you created is subscribed.</p>
<div class="aside aside-warning">
<p class="aside-title">Warning</p>
- This will only work if you use SDLManager.
+ This will only work if you use <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.
</div>
@@ -154,9 +336,9 @@
cmdID
</h3>
- <p>A Unique Command ID that identifies the command</p>
+ <p>A unique id that identifies the command.</p>
-<p>@discussion Is returned in an <em>SDLOnCommand</em> notification to identify the command selected by the user</p>
+<p>@discussion Is returned in an <code><a href="../Classes/SDLOnCommand.html">SDLOnCommand</a></code> notification to identify the command selected by the user</p>
<p>Required, Integer, 0 - 2,000,000,000</p>
@@ -176,12 +358,9 @@
menuParams
</h3>
- <p>a <em>SDLMenuParams</em> pointer which will defined the command and how it is added to the Command Menu</p>
-
-<p>@discussion If provided, this will define the command and how it is added to the
- Command Menu</p>
+ <p>A <code><a href="../Classes/SDLMenuParams.html">SDLMenuParams</a></code> pointer which defines the command and how it is added to the command menu.</p>
-<p>If null, commands will not be accessible through the HMI application menu</p>
+<p>@discussion If provided, this will define the command and how it is added to the command menu. If null, commands will not be accessible through the HMI application menu.</p>
<p>Optional</p>
@@ -203,9 +382,7 @@
<p>An array of strings to be used as VR synonyms for this command.</p>
-<p>@discussion If provided, defines one or more VR phrases the recognition of any of which triggers the <em>SDLOnCommand</em> notification with this cmdID</p>
-
-<p>If null, commands will not be accessible by voice commands (when the user hits push-to-talk)</p>
+<p>@discussion If provided, defines one or more VR phrases the recognition of any of which triggers the <code><a href="../Classes/SDLOnCommand.html">SDLOnCommand</a></code> notification with this cmdID. If null, commands will not be accessible by voice commands (when the user hits push-to-talk).</p>
<p>Optional, Array of Strings, Max String length 99 chars, Array size 1 - 100</p>
@@ -226,11 +403,9 @@
cmdIcon
</h3>
- <p>Image struct containing a static or dynamic icon</p>
-
-<p>@discussion If provided, defines the image to be be shown along with a command</p>
+ <p>Image struct containing a static or dynamic icon.</p>
-<p>If omitted on supported displays, no (or the default if applicable) icon will be displayed</p>
+<p>@discussion If provided, defines the image to be be shown along with a command. If omitted on supported displays, no (or the default if applicable) icon will be displayed</p>
<p>Optional</p>
diff --git a/docs/Classes/SDLAddSubMenu.html b/docs/Classes/SDLAddSubMenu.html
index a08de889b..0ad58b642 100644
--- a/docs/Classes/SDLAddSubMenu.html
+++ b/docs/Classes/SDLAddSubMenu.html
@@ -5,9 +5,11 @@
<ul>
<li><a href="#section--initWithId:menuName:">-initWithId:menuName:</a></li>
<li><a href="#section--initWithId:menuName:position:">-initWithId:menuName:position:</a></li>
+ <li><a href="#section--initWithId:menuName:menuIcon:position:">-initWithId:menuName:menuIcon:position:</a></li>
<li><a href="#section-menuID">menuID</a></li>
<li><a href="#section-position">position</a></li>
<li><a href="#section-menuName">menuName</a></li>
+ <li><a href="#section-menuIcon">menuIcon</a></li>
</ul>
<h3>Overview</h3>
@@ -53,7 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">menuId</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">position</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">position</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">menuId</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">position</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">position</span> <span class="n">__deprecated_msg</span><span class="p">((</span><span class="s">"Use initWithId:menuName:menuIcon:position: instead"</span><span class="p">));</span></code></pre>
<h4>Swift</h4>
@@ -62,6 +64,24 @@
+ <h3 id="section--initWithId:menuName:menuIcon:position:">
+ -initWithId:menuName:menuIcon:position:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">menuId</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">menuIcon</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">icon</span> <span class="nf">position</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">position</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">id</span> <span class="nv">menuId</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">menuName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuIcon">menuIcon</a></span> <span class="nv">icon</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLImage.html">SDLImage</a></span><span class="p">?,</span> <span class="nv">position</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">)</span></code></pre>
+
+
+
+
<h3 id="section-menuID">
menuID
</h3>
@@ -135,4 +155,22 @@
+ <h3 id="section-menuIcon">
+ menuIcon
+ </h3>
+
+ <p>An image that is displayed alongside this submenu item</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">menuIcon</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">menuIcon</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLImage.html">SDLImage</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLArtwork.html b/docs/Classes/SDLArtwork.html
index 8c35ea8d2..59655c425 100644
--- a/docs/Classes/SDLArtwork.html
+++ b/docs/Classes/SDLArtwork.html
@@ -3,6 +3,7 @@
<h3>Section Contents</h3>
<ul>
+ <li><a href="#section-isTemplate">isTemplate</a></li>
<li><a href="#section-+artworkWithImage:name:asImageFormat:">+artworkWithImage:name:asImageFormat:</a></li>
<li><a href="#section-+artworkWithImage:asImageFormat:">+artworkWithImage:asImageFormat:</a></li>
<li><a href="#section-+persistentArtworkWithImage:name:asImageFormat:">+persistentArtworkWithImage:name:asImageFormat:</a></li>
@@ -17,11 +18,31 @@
<section class="section task-group-section">
+ <h3 id="section-isTemplate">
+ isTemplate
+ </h3>
+
+ <p>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 <code>UIImage</code>s rendering mode to <code>UIImageRenderingModeAlwaysTemplate</code>. 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.</p>
+
+<p>@discussion An image should be templated if it is intended to be used as an icon in a button or menu.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isTemplate</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">isTemplate</span><span class="p">:</span> <span class="kt">Bool</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-+artworkWithImage:name:asImageFormat:">
+artworkWithImage:name:asImageFormat:
</h3>
- <p>Convenience Helper to create an ephemeral artwork from an image.</p>
+ <p>Convenience helper to create an ephemeral artwork from an image.</p>
<p>This is an ephemeral file, it will not be persisted through sessions / ignition cycles. Any files that you do not <em>know</em> you will use in future sessions should be created through this method. For example, album / artist artwork should be ephemeral.</p>
@@ -60,7 +81,7 @@
+artworkWithImage:asImageFormat:
</h3>
- <p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>
+ <p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>
<p>This is an ephemeral file, it will not be persisted through sessions / ignition cycles. Any files that you do not <em>know</em> you will use in future sessions should be created through this method. For example, album / artist artwork should be ephemeral.</p>
@@ -96,7 +117,7 @@
+persistentArtworkWithImage:name:asImageFormat:
</h3>
- <p>Convenience Helper to create a persistent artwork from an image.</p>
+ <p>Convenience helper to create a persistent artwork from an image.</p>
<p>This is a persistent file, it will be persisted through sessions / ignition cycles. You will only have a limited space for all files, so be sure to only persist files that are required for all or most sessions. For example, menu artwork should be persistent.</p>
@@ -136,7 +157,7 @@
+persistentArtworkWithImage:asImageFormat:
</h3>
- <p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>
+ <p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>
<p>This is a persistent file, it will be persisted through sessions / ignition cycles. You will only have a limited space for all files, so be sure to only persist files that are required for all or most sessions. For example, menu artwork should be persistent.</p>
diff --git a/docs/Classes/SDLAudioControlCapabilities.html b/docs/Classes/SDLAudioControlCapabilities.html
new file mode 100644
index 000000000..d5001c528
--- /dev/null
+++ b/docs/Classes/SDLAudioControlCapabilities.html
@@ -0,0 +1,217 @@
+<h1>SDLAudioControlCapabilities Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithModuleName:">-initWithModuleName:</a></li>
+ <li><a href="#section--initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:">-initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:</a></li>
+ <li><a href="#section-moduleName">moduleName</a></li>
+ <li><a href="#section-sourceAvailable">sourceAvailable</a></li>
+ <li><a href="#section-keepContextAvailable">keepContextAvailable</a></li>
+ <li><a href="#section-volumeAvailable">volumeAvailable</a></li>
+ <li><a href="#section-equalizerAvailable">equalizerAvailable</a></li>
+ <li><a href="#section-equalizerMaxChannelId">equalizerMaxChannelId</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithModuleName:">
+ -initWithModuleName:
+ </h3>
+
+ <p>Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n"><a href="../Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleName">moduleName</a></span> <span class="nv">name</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The short friendly name of the audio control module.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLAudioControlCapabilities class.</p>
+ </div>
+
+ <h3 id="section--initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:">
+ -initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:
+ </h3>
+
+ <p>Constructs a newly allocated SDLAudioControlCapabilities object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span>
+ <span class="nf">sourceAvailable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">sourceAvailable</span>
+ <span class="nf">keepContextAvailable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">keepContextAvailable</span>
+ <span class="nf">volumeAvailable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">volumeAvailable</span>
+ <span class="nf">equalizerAvailable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">equalizerAvailable</span>
+<span class="nf">equalizerMaxChannelID</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">equalizerMaxChannelID</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n"><a href="../Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleName">moduleName</a></span> <span class="nv">name</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">sourceAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">keepContextAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">volumeAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">equalizerAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">equalizerMaxChannelID</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The short friendly name of the audio control module.</p></dd>
+ <dt>sourceAvailable</dt>
+ <dd><p>Availability of the control of audio source.</p></dd>
+ <dt>volumeAvailable</dt>
+ <dd><p>Availability of the volume of audio source.</p></dd>
+ <dt>equalizerAvailable</dt>
+ <dd><p>Availability of the equalizer of audio source.</p></dd>
+ <dt>equalizerMaxChannelID</dt>
+ <dd><p>Equalizer channel ID (between 1-100).</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLAudioControlCapabilities class.</p>
+ </div>
+
+ <h3 id="section-moduleName">
+ moduleName
+ </h3>
+
+ <p>@abstract The short friendly name of the audio control module.
+ It should not be used to identify a module by mobile application.</p>
+
+<p>Required, Max String length 100 chars</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-sourceAvailable">
+ sourceAvailable
+ </h3>
+
+ <p>@abstract Availability of the control of audio source.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sourceAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">sourceAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-keepContextAvailable">
+ keepContextAvailable
+ </h3>
+
+ <p>Availability of the keepContext parameter.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">keepContextAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">keepContextAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-volumeAvailable">
+ volumeAvailable
+ </h3>
+
+ <p>@abstract Availability of the control of audio volume.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">volumeAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">volumeAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-equalizerAvailable">
+ equalizerAvailable
+ </h3>
+
+ <p>@abstract Availability of the control of Equalizer Settings.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">equalizerAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">equalizerAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-equalizerMaxChannelId">
+ equalizerMaxChannelId
+ </h3>
+
+ <p>@abstract Must be included if equalizerAvailable=true,
+ and assume all IDs starting from 1 to this value are valid</p>
+
+<p>Optional, Integer 1 - 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">equalizerMaxChannelId</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">equalizerMaxChannelId</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLAudioControlData.html b/docs/Classes/SDLAudioControlData.html
new file mode 100644
index 000000000..a4fc2e8c8
--- /dev/null
+++ b/docs/Classes/SDLAudioControlData.html
@@ -0,0 +1,145 @@
+<h1>SDLAudioControlData Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithSource:keepContext:volume:equalizerSettings:">-initWithSource:keepContext:volume:equalizerSettings:</a></li>
+ <li><a href="#section-source">source</a></li>
+ <li><a href="#section-keepContext">keepContext</a></li>
+ <li><a href="#section-volume">volume</a></li>
+ <li><a href="#section-equalizerSettings">equalizerSettings</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithSource:keepContext:volume:equalizerSettings:">
+ -initWithSource:keepContext:volume:equalizerSettings:
+ </h3>
+
+ <p>Constructs a newly allocated SDLAudioControlData object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithSource</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span><span class="p">)</span><span class="nv">source</span>
+ <span class="nf">keepContext</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">keepContext</span>
+ <span class="nf">volume</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">volume</span>
+<span class="nf">equalizerSettings</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLEqualizerSettings.html">SDLEqualizerSettings</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">equalizerSettings</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">source</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span><span class="p">?,</span> <span class="nv">keepContext</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">volume</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="nv">equalizerSettings</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLEqualizerSettings.html">SDLEqualizerSettings</a></span><span class="p">]?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>source</dt>
+ <dd><p>current primary audio source of the system.</p></dd>
+ <dt>keepContext</dt>
+ <dd><p>Whether or not application&rsquo;s context is changed.</p></dd>
+ <dt>volume</dt>
+ <dd><p>Reflects the volume of audio.</p></dd>
+ <dt>equalizerSettings</dt>
+ <dd><p>list of supported Equalizer channels.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLAudioControlData class.</p>
+ </div>
+
+ <h3 id="section-source">
+ source
+ </h3>
+
+ <p>@abstract In a getter response or a notification,
+ it is the current primary audio source of the system.
+ In a setter request, it is the target audio source that the system shall switch to.
+ If the value is MOBILE_APP, the system shall switch to the mobile media app that issues the setter RPC.</p>
+
+<p>Optional, SDLPrimaryAudioSource</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">source</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">source</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-keepContext">
+ keepContext
+ </h3>
+
+ <p>@abstract This parameter shall not be present in any getter responses or notifications.
+ This parameter is optional in a setter request. The default value is false.
+ If it is true, the system not only changes the audio source but also brings the default
+ infotainment system UI associated with the audio source to foreground and set the application to background.
+ If it is false, the system changes the audio source, but keeps the current application&rsquo;s context.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">keepContext</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">keepContext</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-volume">
+ volume
+ </h3>
+
+ <p>@abstract Reflects the volume of audio, from 0%-100%.</p>
+
+<p>Required, Integer 1 - 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">volume</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">volume</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-equalizerSettings">
+ equalizerSettings
+ </h3>
+
+ <p>@abstract Defines the list of supported channels (band) and their current/desired settings on HMI</p>
+
+<p>Required, Array of SDLEqualizerSettings with minSize:1 maxSize:100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLEqualizerSettings.html">SDLEqualizerSettings</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">equalizerSettings</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">equalizerSettings</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLEqualizerSettings.html">SDLEqualizerSettings</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLChoice.html b/docs/Classes/SDLChoice.html
index 921ed3cd6..b43a0adf3 100644
--- a/docs/Classes/SDLChoice.html
+++ b/docs/Classes/SDLChoice.html
@@ -31,11 +31,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">choiceId</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">choiceId</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">id</span> <span class="nv">choiceId</span><span class="p">:</span> <span class="kt">UInt16</span><span class="p">,</span> <span class="nv">menuName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">vrCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">])</span></code></pre>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">id</span> <span class="nv">choiceId</span><span class="p">:</span> <span class="kt">UInt16</span><span class="p">,</span> <span class="nv">menuName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">vrCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?)</span></code></pre>
@@ -49,11 +49,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">choiceId</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span> <span class="nf">image</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">image</span> <span class="nf">secondaryText</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryText</span> <span class="nf">secondaryImage</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryImage</span> <span class="nf">tertiaryText</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">tertiaryText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">choiceId</span> <span class="nf">menuName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">menuName</span> <span class="nf">vrCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrCommands</span> <span class="nf">image</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">image</span> <span class="nf">secondaryText</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryText</span> <span class="nf">secondaryImage</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryImage</span> <span class="nf">tertiaryText</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">tertiaryText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">id</span> <span class="nv">choiceId</span><span class="p">:</span> <span class="kt">UInt16</span><span class="p">,</span> <span class="nv">menuName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">vrCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">],</span> <span class="nv">image</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLImage.html">SDLImage</a></span><span class="p">?,</span> <span class="nv">secondaryText</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">secondaryImage</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLImage.html">SDLImage</a></span><span class="p">?,</span> <span class="nv">tertiaryText</span><span class="p">:</span> <span class="kt">String</span><span class="p">?)</span></code></pre>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">id</span> <span class="nv">choiceId</span><span class="p">:</span> <span class="kt">UInt16</span><span class="p">,</span> <span class="nv">menuName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">vrCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?,</span> <span class="nv">image</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLImage.html">SDLImage</a></span><span class="p">?,</span> <span class="nv">secondaryText</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">secondaryImage</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLImage.html">SDLImage</a></span><span class="p">?,</span> <span class="nv">tertiaryText</span><span class="p">:</span> <span class="kt">String</span><span class="p">?)</span></code></pre>
@@ -104,17 +104,19 @@
<p>VR synonyms for this choice</p>
-<p>Required, Array of Strings, Array length 1 - 100, Max String length 99 chars</p>
+<p>Optional, Array of Strings, Array length 1 - 100, Max String length 99 chars</p>
+
+<p>@discussion, VR commands are optional beginning with SDL Core v.5.0. They are required for previous versions.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">vrCommands</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrCommands</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">vrCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">vrCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLChoiceCell.html b/docs/Classes/SDLChoiceCell.html
new file mode 100644
index 000000000..8a1ed48fb
--- /dev/null
+++ b/docs/Classes/SDLChoiceCell.html
@@ -0,0 +1,256 @@
+<h1>SDLChoiceCell Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-text">text</a></li>
+ <li><a href="#section-secondaryText">secondaryText</a></li>
+ <li><a href="#section-tertiaryText">tertiaryText</a></li>
+ <li><a href="#section-voiceCommands">voiceCommands</a></li>
+ <li><a href="#section-artwork">artwork</a></li>
+ <li><a href="#section-secondaryArtwork">secondaryArtwork</a></li>
+ <li><a href="#section--init">-init</a></li>
+ <li><a href="#section--initWithText:">-initWithText:</a></li>
+ <li><a href="#section--initWithText:artwork:voiceCommands:">-initWithText:artwork:voiceCommands:</a></li>
+ <li><a href="#section--initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:">-initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-text">
+ text
+ </h3>
+
+ <p>Maps to Choice.menuName. The primary text of the cell. Duplicates within an <code><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></code> are not permitted and will result in the <code><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></code> failing to initialize.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">text</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">text</span><span class="p">:</span> <span class="kt">String</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-secondaryText">
+ secondaryText
+ </h3>
+
+ <p>Maps to Choice.secondaryText. Optional secondary text of the cell, if available. Duplicates within an <code><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></code> are permitted.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">secondaryText</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">secondaryText</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-tertiaryText">
+ tertiaryText
+ </h3>
+
+ <p>Maps to Choice.tertiaryText. Optional tertitary text of the cell, if available. Duplicates within an <code><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></code> are permitted.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">tertiaryText</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">tertiaryText</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-voiceCommands">
+ voiceCommands
+ </h3>
+
+ <p>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.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceCommands</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">voiceCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-artwork">
+ artwork
+ </h3>
+
+ <p>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.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">artwork</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">artwork</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-secondaryArtwork">
+ secondaryArtwork
+ </h3>
+
+ <p>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.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">secondaryArtwork</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">secondaryArtwork</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section--init">
+ -init
+ </h3>
+
+ <p>Initialize the cell with nothing. This is unavailable</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="n">init</span><span class="p">;</span></code></pre>
+
+
+
+
+ <div>
+ <h4>Return Value</h4>
+ <p>A crash, probably</p>
+ </div>
+
+ <h3 id="section--initWithText:">
+ -initWithText:
+ </h3>
+
+ <p>Initialize the cell with text and nothing else.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithText</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">text</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">text</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>text</dt>
+ <dd><p>The primary text of the cell.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The cell</p>
+ </div>
+
+ <h3 id="section--initWithText:artwork:voiceCommands:">
+ -initWithText:artwork:voiceCommands:
+ </h3>
+
+ <p>Initialize the cell with text, optional artwork, and optional voice commands</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithText</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">text</span>
+ <span class="nf">artwork</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">artwork</span>
+ <span class="nf">voiceCommands</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">voiceCommands</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">text</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">artwork</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span><span class="p">?,</span> <span class="nv">voiceCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>text</dt>
+ <dd><p>The primary text of the cell</p></dd>
+ <dt>artwork</dt>
+ <dd><p>The primary artwork of the cell</p></dd>
+ <dt>voiceCommands</dt>
+ <dd><p>Strings that can be spoken by the user to activate this cell in a voice or both interaction mode</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The cell</p>
+ </div>
+
+ <h3 id="section--initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:">
+ -initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:
+ </h3>
+
+ <p>Initialize the cell with all optional items</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithText</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">text</span>
+ <span class="nf">secondaryText</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryText</span>
+ <span class="nf">tertiaryText</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">tertiaryText</span>
+ <span class="nf">voiceCommands</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">voiceCommands</span>
+ <span class="nf">artwork</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">artwork</span>
+ <span class="nf">secondaryArtwork</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryArtwork</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">text</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">secondaryText</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">tertiaryText</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">voiceCommands</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?,</span> <span class="nv">artwork</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span><span class="p">?,</span> <span class="nv">secondaryArtwork</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span><span class="p">?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>text</dt>
+ <dd><p>The primary text</p></dd>
+ <dt>secondaryText</dt>
+ <dd><p>The secondary text</p></dd>
+ <dt>tertiaryText</dt>
+ <dd><p>The tertiary text</p></dd>
+ <dt>voiceCommands</dt>
+ <dd><p>Strings that can be spoken by the user to activate this cell in a voice or both interaction mode</p></dd>
+ <dt>artwork</dt>
+ <dd><p>The primary artwork</p></dd>
+ <dt>secondaryArtwork</dt>
+ <dd><p>The secondary artwork</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The cell</p>
+ </div>
+
+</section>
diff --git a/docs/Classes/SDLChoiceSet.html b/docs/Classes/SDLChoiceSet.html
new file mode 100644
index 000000000..5d8347de1
--- /dev/null
+++ b/docs/Classes/SDLChoiceSet.html
@@ -0,0 +1,364 @@
+<h1>SDLChoiceSet Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-defaultTimeout">defaultTimeout</a></li>
+ <li><a href="#section-defaultLayout">defaultLayout</a></li>
+ <li><a href="#section-title">title</a></li>
+ <li><a href="#section-initialPrompt">initialPrompt</a></li>
+ <li><a href="#section-layout">layout</a></li>
+ <li><a href="#section-timeout">timeout</a></li>
+ <li><a href="#section-timeoutPrompt">timeoutPrompt</a></li>
+ <li><a href="#section-helpPrompt">helpPrompt</a></li>
+ <li><a href="#section-helpList">helpList</a></li>
+ <li><a href="#section-delegate">delegate</a></li>
+ <li><a href="#section-choices">choices</a></li>
+ <li><a href="#section--initWithTitle:delegate:choices:">-initWithTitle:delegate:choices:</a></li>
+ <li><a href="#section--initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:">-initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:</a></li>
+ <li><a href="#section--initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:">-initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-defaultTimeout">
+ defaultTimeout
+ </h3>
+
+ <p>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 <code><a href="../Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout">timeout</a></code> for more details. If this is not set by you, it will default to 10 seconds.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">class</span><span class="p">)</span> <span class="n">NSTimeInterval</span> <span class="n">defaultTimeout</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="k">var</span> <span class="nv">defaultTimeout</span><span class="p">:</span> <span class="kt">TimeInterval</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-defaultLayout">
+ defaultLayout
+ </h3>
+
+ <p>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 <code><a href="../Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout">layout</a></code> for more details. If this is not set by you, it will default to <code>SDLChoiceSetLayoutList</code>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">class</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="n">defaultLayout</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="k">var</span> <span class="nv">defaultLayout</span><span class="p">:</span> <span class="kt"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-title">
+ title
+ </h3>
+
+ <p>Maps to PerformInteraction.initialText. The title of the choice set, and/or the initial text on a keyboard prompt.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">title</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">title</span><span class="p">:</span> <span class="kt">String</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-initialPrompt">
+ initialPrompt
+ </h3>
+
+ <p>Maps to PerformInteraction.initialPrompt. The initial prompt spoken to the user at the start of an interaction.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">initialPrompt</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">initialPrompt</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-layout">
+ layout
+ </h3>
+
+ <p>Maps to PerformInteraction.interactionLayout. Whether the presented choices are arranged as a set of tiles or a list.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="n">layout</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">layout</span><span class="p">:</span> <span class="kt"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-timeout">
+ timeout
+ </h3>
+
+ <p>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 <code><a href="../Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout">defaultTimeout</a></code>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSTimeInterval</span> <span class="n">timeout</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">timeout</span><span class="p">:</span> <span class="kt">TimeInterval</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-timeoutPrompt">
+ timeoutPrompt
+ </h3>
+
+ <p>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.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">timeoutPrompt</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">timeoutPrompt</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-helpPrompt">
+ helpPrompt
+ </h3>
+
+ <p>Maps to PerformInteraction.helpPrompt. This is the spoken string when a user speaks <q>help</q> when the interaction is occurring.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpPrompt</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">helpPrompt</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-helpList">
+ helpList
+ </h3>
+
+ <p>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.</p>
+<div class="aside aside-note">
+ <p class="aside-title">Note</p>
+ that while SDLVRHelpItem&rsquo;s position will be automatically set based on position in the array, the image will need to uploaded by you before use using SDLFileManager.
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpList</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">helpList</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-delegate">
+ delegate
+ </h3>
+
+ <p>The delegate of this choice set, called when the user interacts with it.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span> <span class="n">_Nullable</span> <span class="n">delegate</span><span class="p">;</span></code></pre>
+
+
+
+
+
+ <h3 id="section-choices">
+ choices
+ </h3>
+
+ <p>The choices to be displayed to the user within this choice set. These choices could match those already preloaded via <code>SDLScreenManager preloadChoices:withCompletionHandler:</code>.</p>
+
+<p>This is limited to 100 items. If you attempt to set more than 100 items, the set will not have any items (this array will be empty).</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">choices</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">choices</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section--initWithTitle:delegate:choices:">
+ -initWithTitle:delegate:choices:
+ </h3>
+
+ <p>Initialize with a title, delegate, and choices. It will use the default timeout and layout, all other properties (such as prompts) will be <code>nil</code>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span>
+ <span class="nf">delegate</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span>
+ <span class="nf">choices</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span><span class="p">;</span></code></pre>
+
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>title</dt>
+ <dd><p>The choice set&rsquo;s title</p></dd>
+ <dt>delegate</dt>
+ <dd><p>The choice set delegate called after the user has interacted with your choice set</p></dd>
+ <dt>choices</dt>
+ <dd><p>The choices to be displayed to the user for interaction</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The choice set</p>
+ </div>
+
+ <h3 id="section--initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:">
+ -initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:
+ </h3>
+
+ <p>Initializer with all possible properties.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span>
+ <span class="nf">delegate</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span>
+ <span class="nf">layout</span><span class="p">:(</span><span class="n"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span><span class="p">)</span><span class="nv">layout</span>
+ <span class="nf">timeout</span><span class="p">:(</span><span class="n">NSTimeInterval</span><span class="p">)</span><span class="nv">timeout</span>
+<span class="nf">initialPromptString</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">initialPrompt</span>
+<span class="nf">timeoutPromptString</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">timeoutPrompt</span>
+ <span class="nf">helpPromptString</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">helpPrompt</span>
+ <span class="nf">vrHelpList</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">helpList</span>
+ <span class="nf">choices</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span><span class="p">;</span></code></pre>
+
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>title</dt>
+ <dd><p>The choice set&rsquo;s title</p></dd>
+ <dt>delegate</dt>
+ <dd><p>The choice set delegate called after the user has interacted with your choice set</p></dd>
+ <dt>layout</dt>
+ <dd><p>The layout of choice options (Manual/touch only)</p></dd>
+ <dt>timeout</dt>
+ <dd><p>The timeout of a touch interaction (Manual/touch only)</p></dd>
+ <dt>initialPrompt</dt>
+ <dd><p>A voice prompt spoken to the user when this set is displayed</p></dd>
+ <dt>timeoutPrompt</dt>
+ <dd><p>A voice prompt spoken to the user when the set times out (Voice only)</p></dd>
+ <dt>helpPrompt</dt>
+ <dd><p>A voice prompt spoken to the user when the user asks for <q>help</q></p></dd>
+ <dt>helpList</dt>
+ <dd><p>A table list of text and images shown to the user during a voice recognition session for this choice set (Voice only)</p></dd>
+ <dt>choices</dt>
+ <dd><p>The list of choices presented to the user either as a manual/touch interaction or via the user&rsquo;s voice</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The choice set</p>
+ </div>
+
+ <h3 id="section--initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:">
+ -initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:
+ </h3>
+
+ <p>Initializer with all possible properties.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span>
+ <span class="nf">delegate</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span>
+ <span class="nf">layout</span><span class="p">:(</span><span class="n"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span><span class="p">)</span><span class="nv">layout</span>
+ <span class="nf">timeout</span><span class="p">:(</span><span class="n">NSTimeInterval</span><span class="p">)</span><span class="nv">timeout</span>
+<span class="nf">initialPrompt</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">initialPrompt</span>
+<span class="nf">timeoutPrompt</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">timeoutPrompt</span>
+ <span class="nf">helpPrompt</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">helpPrompt</span>
+ <span class="nf">vrHelpList</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">helpList</span>
+ <span class="nf">choices</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span><span class="p">;</span></code></pre>
+
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>title</dt>
+ <dd><p>The choice set&rsquo;s title</p></dd>
+ <dt>delegate</dt>
+ <dd><p>The choice set delegate called after the user has interacted with your choice set</p></dd>
+ <dt>layout</dt>
+ <dd><p>The layout of choice options (Manual/touch only)</p></dd>
+ <dt>timeout</dt>
+ <dd><p>The timeout of a touch interaction (Manual/touch only)</p></dd>
+ <dt>initialPrompt</dt>
+ <dd><p>A voice prompt spoken to the user when this set is displayed</p></dd>
+ <dt>timeoutPrompt</dt>
+ <dd><p>A voice prompt spoken to the user when the set times out (Voice only)</p></dd>
+ <dt>helpPrompt</dt>
+ <dd><p>A voice prompt spoken to the user when the user asks for <q>help</q></p></dd>
+ <dt>helpList</dt>
+ <dd><p>A table list of text and images shown to the user during a voice recognition session for this choice set (Voice only)</p></dd>
+ <dt>choices</dt>
+ <dd><p>The list of choices presented to the user either as a manual/touch interaction or via the user&rsquo;s voice</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The choice set</p>
+ </div>
+
+</section>
diff --git a/docs/Classes/SDLClimateControlCapabilities.html b/docs/Classes/SDLClimateControlCapabilities.html
index cf07b021a..9cd52f680 100644
--- a/docs/Classes/SDLClimateControlCapabilities.html
+++ b/docs/Classes/SDLClimateControlCapabilities.html
@@ -4,6 +4,7 @@
<ul>
<li><a href="#section--initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:">-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:</a></li>
+ <li><a href="#section--initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:">-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:</a></li>
<li><a href="#section-moduleName">moduleName</a></li>
<li><a href="#section-fanSpeedAvailable">fanSpeedAvailable</a></li>
<li><a href="#section-desiredTemperatureAvailable">desiredTemperatureAvailable</a></li>
@@ -16,6 +17,10 @@
<li><a href="#section-defrostZone">defrostZone</a></li>
<li><a href="#section-ventilationModeAvailable">ventilationModeAvailable</a></li>
<li><a href="#section-ventilationMode">ventilationMode</a></li>
+ <li><a href="#section-heatedSteeringWheelAvailable">heatedSteeringWheelAvailable</a></li>
+ <li><a href="#section-heatedWindshieldAvailable">heatedWindshieldAvailable</a></li>
+ <li><a href="#section-heatedRearWindowAvailable">heatedRearWindowAvailable</a></li>
+ <li><a href="#section-heatedMirrorsAvailable">heatedMirrorsAvailable</a></li>
</ul>
<h3>Overview</h3>
@@ -33,7 +38,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span> <span class="nf">fanSpeedAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fanSpeedAvailable</span> <span class="nf">desiredTemperatureAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">desiredTemperatureAvailable</span> <span class="nf">acEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">acEnableAvailable</span> <span class="nf">acMaxEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">acMaxEnableAvailable</span> <span class="nf">circulateAirAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">circulateAirEnableAvailable</span> <span class="nf">autoModeEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">autoModeEnableAvailable</span> <span class="nf">dualModeEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">dualModeEnableAvailable</span> <span class="nf">defrostZoneAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">defrostZoneAvailable</span> <span class="nf">ventilationModeAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">ventilationModeAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span> <span class="nf">fanSpeedAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fanSpeedAvailable</span> <span class="nf">desiredTemperatureAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">desiredTemperatureAvailable</span> <span class="nf">acEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">acEnableAvailable</span> <span class="nf">acMaxEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">acMaxEnableAvailable</span> <span class="nf">circulateAirAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">circulateAirEnableAvailable</span> <span class="nf">autoModeEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">autoModeEnableAvailable</span> <span class="nf">dualModeEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">dualModeEnableAvailable</span> <span class="nf">defrostZoneAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">defrostZoneAvailable</span> <span class="nf">ventilationModeAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">ventilationModeAvailable</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Use initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable: dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable: heatedSteeringWheelAvailable:heatedWindshieldAvailable: heatedRearWindowAvailable:heatedMirrorsAvailable: instead"</span><span class="p">);</span></code></pre>
<h4>Swift</h4>
@@ -42,6 +47,24 @@
+ <h3 id="section--initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:">
+ -initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span> <span class="nf">fanSpeedAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fanSpeedAvailable</span> <span class="nf">desiredTemperatureAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">desiredTemperatureAvailable</span> <span class="nf">acEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">acEnableAvailable</span> <span class="nf">acMaxEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">acMaxEnableAvailable</span> <span class="nf">circulateAirAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">circulateAirEnableAvailable</span> <span class="nf">autoModeEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">autoModeEnableAvailable</span> <span class="nf">dualModeEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">dualModeEnableAvailable</span> <span class="nf">defrostZoneAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">defrostZoneAvailable</span> <span class="nf">ventilationModeAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">ventilationModeAvailable</span> <span class="nf">heatedSteeringWheelAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">heatedSteeringWheelAvailable</span> <span class="nf">heatedWindshieldAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">heatedWindshieldAvailable</span> <span class="nf">heatedRearWindowAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">heatedRearWindowAvailable</span> <span class="nf">heatedMirrorsAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">heatedMirrorsAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">fanSpeedAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">desiredTemperatureAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">acEnableAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">acMaxEnableAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n">circulateAirAvailable</span> <span class="nv">circulateAirEnableAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">autoModeEnableAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">dualModeEnableAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">defrostZoneAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">ventilationModeAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">heatedSteeringWheelAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">heatedWindshieldAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">heatedRearWindowAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">heatedMirrorsAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+
<h3 id="section-moduleName">
moduleName
</h3>
@@ -309,4 +332,92 @@
+ <h3 id="section-heatedSteeringWheelAvailable">
+ heatedSteeringWheelAvailable
+ </h3>
+
+ <p>@abstract Availability of the control (enable/disable) of heated Steering Wheel.
+ True: Available, False: Not Available, Not present: Not Available.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedSteeringWheelAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatedSteeringWheelAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatedWindshieldAvailable">
+ heatedWindshieldAvailable
+ </h3>
+
+ <p>@abstract Availability of the control (enable/disable) of heated Windshield.
+ True: Available, False: Not Available, Not present: Not Available.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedWindshieldAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatedWindshieldAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatedRearWindowAvailable">
+ heatedRearWindowAvailable
+ </h3>
+
+ <p>@abstract Availability of the control (enable/disable) of heated Rear Window.
+ True: Available, False: Not Available, Not present: Not Available.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedRearWindowAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatedRearWindowAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatedMirrorsAvailable">
+ heatedMirrorsAvailable
+ </h3>
+
+ <p>@abstract Availability of the control (enable/disable) of heated Mirrors.
+ True: Available, False: Not Available, Not present: Not Available.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedMirrorsAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatedMirrorsAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLClimateControlData.html b/docs/Classes/SDLClimateControlData.html
index 370bcbaa9..1ca72ec91 100644
--- a/docs/Classes/SDLClimateControlData.html
+++ b/docs/Classes/SDLClimateControlData.html
@@ -4,6 +4,7 @@
<ul>
<li><a href="#section--initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:">-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:</a></li>
+ <li><a href="#section--initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:">-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:</a></li>
<li><a href="#section-fanSpeed">fanSpeed</a></li>
<li><a href="#section-currentTemperature">currentTemperature</a></li>
<li><a href="#section-desiredTemperature">desiredTemperature</a></li>
@@ -14,6 +15,10 @@
<li><a href="#section-dualModeEnable">dualModeEnable</a></li>
<li><a href="#section-acMaxEnable">acMaxEnable</a></li>
<li><a href="#section-ventilationMode">ventilationMode</a></li>
+ <li><a href="#section-heatedSteeringWheelEnable">heatedSteeringWheelEnable</a></li>
+ <li><a href="#section-heatedWindshieldEnable">heatedWindshieldEnable</a></li>
+ <li><a href="#section-heatedRearWindowEnable">heatedRearWindowEnable</a></li>
+ <li><a href="#section-heatedMirrorsEnable">heatedMirrorsEnable</a></li>
</ul>
<h3>Overview</h3>
@@ -31,7 +36,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFanSpeed</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">fanSpeed</span> <span class="nf">desiredTemperature</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">desiredTemperature</span> <span class="nf">acEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">acEnable</span> <span class="nf">circulateAirEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">circulateAirEnable</span> <span class="nf">autoModeEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">autoModeEnable</span> <span class="nf">defrostZone</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone">SDLDefrostZone</a></span><span class="p">)</span><span class="nv">defrostZone</span> <span class="nf">dualModeEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">dualModeEnable</span> <span class="nf">acMaxEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">acMaxEnable</span> <span class="nf">ventilationMode</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode">SDLVentilationMode</a></span><span class="p">)</span><span class="nv">ventilationMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFanSpeed</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">fanSpeed</span> <span class="nf">desiredTemperature</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">desiredTemperature</span> <span class="nf">acEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">acEnable</span> <span class="nf">circulateAirEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">circulateAirEnable</span> <span class="nf">autoModeEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">autoModeEnable</span> <span class="nf">defrostZone</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone">SDLDefrostZone</a></span><span class="p">)</span><span class="nv">defrostZone</span> <span class="nf">dualModeEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">dualModeEnable</span> <span class="nf">acMaxEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">acMaxEnable</span> <span class="nf">ventilationMode</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode">SDLVentilationMode</a></span><span class="p">)</span><span class="nv">ventilationMode</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Use initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone: dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable: heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable: instead"</span><span class="p">);</span></code></pre>
<h4>Swift</h4>
@@ -40,6 +45,24 @@
+ <h3 id="section--initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:">
+ -initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFanSpeed</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">fanSpeed</span> <span class="nf">desiredTemperature</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">desiredTemperature</span> <span class="nf">acEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">acEnable</span> <span class="nf">circulateAirEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">circulateAirEnable</span> <span class="nf">autoModeEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">autoModeEnable</span> <span class="nf">defrostZone</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone">SDLDefrostZone</a></span><span class="p">)</span><span class="nv">defrostZone</span> <span class="nf">dualModeEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">dualModeEnable</span> <span class="nf">acMaxEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">acMaxEnable</span> <span class="nf">ventilationMode</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode">SDLVentilationMode</a></span><span class="p">)</span><span class="nv">ventilationMode</span> <span class="nf">heatedSteeringWheelEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">heatedSteeringWheelEnable</span> <span class="nf">heatedWindshieldEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">heatedWindshieldEnable</span> <span class="nf">heatedRearWindowEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">heatedRearWindowEnable</span> <span class="nf">heatedMirrorsEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">heatedMirrorsEnable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">fanSpeed</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="nv">desiredTemperature</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span><span class="p">?,</span> <span class="nv">acEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">circulateAirEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">autoModeEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">defrostZone</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone">SDLDefrostZone</a></span><span class="p">?,</span> <span class="nv">dualModeEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">acMaxEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">ventilationMode</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode">SDLVentilationMode</a></span><span class="p">?,</span> <span class="nv">heatedSteeringWheelEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">heatedWindshieldEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">heatedRearWindowEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">heatedMirrorsEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?)</span></code></pre>
+
+
+
+
<h3 id="section-fanSpeed">
fanSpeed
</h3>
@@ -252,4 +275,88 @@
+ <h3 id="section-heatedSteeringWheelEnable">
+ heatedSteeringWheelEnable
+ </h3>
+
+ <p>@abstract value false means disabled/turn off, value true means enabled/turn on.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedSteeringWheelEnable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatedSteeringWheelEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatedWindshieldEnable">
+ heatedWindshieldEnable
+ </h3>
+
+ <p>@abstract value false means disabled, value true means enabled.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedWindshieldEnable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatedWindshieldEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatedRearWindowEnable">
+ heatedRearWindowEnable
+ </h3>
+
+ <p>@abstract value false means disabled, value true means enabled.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedRearWindowEnable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatedRearWindowEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatedMirrorsEnable">
+ heatedMirrorsEnable
+ </h3>
+
+ <p>@abstract Value false means disabled, value true means enabled.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedMirrorsEnable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatedMirrorsEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLConfiguration.html b/docs/Classes/SDLConfiguration.html
index 8cf87a88c..3a05a5818 100644
--- a/docs/Classes/SDLConfiguration.html
+++ b/docs/Classes/SDLConfiguration.html
@@ -7,10 +7,15 @@
<li><a href="#section-lockScreenConfig">lockScreenConfig</a></li>
<li><a href="#section-loggingConfig">loggingConfig</a></li>
<li><a href="#section-streamingMediaConfig">streamingMediaConfig</a></li>
+ <li><a href="#section-fileManagerConfig">fileManagerConfig</a></li>
<li><a href="#section--initWithLifecycle:lockScreen:logging:">-initWithLifecycle:lockScreen:logging:</a></li>
+ <li><a href="#section--initWithLifecycle:lockScreen:logging:fileManager:">-initWithLifecycle:lockScreen:logging:fileManager:</a></li>
<li><a href="#section-+configurationWithLifecycle:lockScreen:logging:">+configurationWithLifecycle:lockScreen:logging:</a></li>
+ <li><a href="#section-+configurationWithLifecycle:lockScreen:logging:fileManager:">+configurationWithLifecycle:lockScreen:logging:fileManager:</a></li>
<li><a href="#section--initWithLifecycle:lockScreen:logging:streamingMedia:">-initWithLifecycle:lockScreen:logging:streamingMedia:</a></li>
+ <li><a href="#section--initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:">-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:</a></li>
<li><a href="#section-+configurationWithLifecycle:lockScreen:logging:streamingMedia:">+configurationWithLifecycle:lockScreen:logging:streamingMedia:</a></li>
+ <li><a href="#section-+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:">+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:</a></li>
</ul>
<h3>Overview</h3>
@@ -80,7 +85,7 @@
streamingMediaConfig
</h3>
- <p>The configuration</p>
+ <p>The streaming media configuration.</p>
@@ -95,11 +100,30 @@
+ <h3 id="section-fileManagerConfig">
+ fileManagerConfig
+ </h3>
+
+ <p>The file manager configuration.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">fileManagerConfig</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section--initWithLifecycle:lockScreen:logging:">
-initWithLifecycle:lockScreen:logging:
</h3>
- <p>Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, and logging configuration.</p>
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>
@@ -120,9 +144,46 @@
<dt>lifecycleConfig</dt>
<dd><p>The lifecycle configuration to be used.</p></dd>
<dt>lockScreenConfig</dt>
- <dd><p>The lockscreen configuration to be used, or <code>enabledConfiguration</code> if nil.</p></dd>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
+ <dt>logConfig</dt>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The configuration</p>
+ </div>
+
+ <h3 id="section--initWithLifecycle:lockScreen:logging:fileManager:">
+ -initWithLifecycle:lockScreen:logging:fileManager:
+ </h3>
+
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
+ <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
+ <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?,</span> <span class="n">fileManager</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span><span class="p">?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>lifecycleConfig</dt>
+ <dd><p>The lifecycle configuration to be used.</p></dd>
+ <dt>lockScreenConfig</dt>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
<dt>logConfig</dt>
- <dd><p>The logging configuration to be used, or <code>defaultConfiguration</code> if nil.</p></dd>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
+ <dt>fileManagerConfig</dt>
+ <dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
@@ -133,7 +194,7 @@
+configurationWithLifecycle:lockScreen:logging:
</h3>
- <p>Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, and logging configuration.</p>
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>
@@ -152,9 +213,45 @@
<dt>lifecycleConfig</dt>
<dd><p>The lifecycle configuration to be used.</p></dd>
<dt>lockScreenConfig</dt>
- <dd><p>The lockscreen configuration to be used, or <code>enabledConfiguration</code> if nil.</p></dd>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
+ <dt>logConfig</dt>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The configuration</p>
+ </div>
+
+ <h3 id="section-+configurationWithLifecycle:lockScreen:logging:fileManager:">
+ +configurationWithLifecycle:lockScreen:logging:fileManager:
+ </h3>
+
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">configurationWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
+ <span class="nf">lockScreen</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
+ <span class="nf">fileManager</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span><span class="p">;</span></code></pre>
+
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>lifecycleConfig</dt>
+ <dd><p>The lifecycle configuration to be used.</p></dd>
+ <dt>lockScreenConfig</dt>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
<dt>logConfig</dt>
- <dd><p>The logging configuration to be used, or <code>defaultConfiguration</code> if nil.</p></dd>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
+ <dt>fileManagerConfig</dt>
+ <dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
@@ -165,7 +262,7 @@
-initWithLifecycle:lockScreen:logging:streamingMedia:
</h3>
- <p>Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, logging, and streaming media configuration.</p>
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.</p>
@@ -188,11 +285,52 @@
<dt>lifecycleConfig</dt>
<dd><p>The lifecycle configuration to be used.</p></dd>
<dt>lockScreenConfig</dt>
- <dd><p>The lockscreen configuration to be used, or <code>enabledConfiguration</code> if nil.</p></dd>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
+ <dt>logConfig</dt>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
+ <dt>streamingMediaConfig</dt>
+ <dd><p>The streaming media configuration to be used or nil if not used.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The configuration</p>
+ </div>
+
+ <h3 id="section--initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:">
+ -initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:
+ </h3>
+
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
+ <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
+ <span class="nf">streamingMedia</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span>
+ <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?,</span> <span class="n">streamingMedia</span> <span class="nv">streamingMediaConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span><span class="p">?,</span> <span class="n">fileManager</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span><span class="p">?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>lifecycleConfig</dt>
+ <dd><p>The lifecycle configuration to be used.</p></dd>
+ <dt>lockScreenConfig</dt>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
<dt>logConfig</dt>
- <dd><p>The logging configuration to be used, or <code>defaultConfiguration</code> if nil.</p></dd>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
<dt>streamingMediaConfig</dt>
- <dd><p>The streaming media configuration to be used, or nil because it is not needed.</p></dd>
+ <dd><p>The streaming media configuration to be used or nil if not used.</p></dd>
+ <dt>fileManagerConfig</dt>
+ <dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
@@ -203,7 +341,7 @@
+configurationWithLifecycle:lockScreen:logging:streamingMedia:
</h3>
- <p>Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, logging, and streaming media configuration.</p>
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.</p>
@@ -224,11 +362,51 @@
<dt>lifecycleConfig</dt>
<dd><p>The lifecycle configuration to be used.</p></dd>
<dt>lockScreenConfig</dt>
- <dd><p>The lockscreen configuration to be used, or <code>enabledConfiguration</code> if nil.</p></dd>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
+ <dt>logConfig</dt>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
+ <dt>streamingMediaConfig</dt>
+ <dd><p>The streaming media configuration to be used or nil if not used.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The configuration</p>
+ </div>
+
+ <h3 id="section-+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:">
+ +configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:
+ </h3>
+
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">configurationWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
+ <span class="nf">lockScreen</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
+ <span class="nf">streamingMedia</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span>
+ <span class="nf">fileManager</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span><span class="p">;</span></code></pre>
+
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>lifecycleConfig</dt>
+ <dd><p>The lifecycle configuration to be used.</p></dd>
+ <dt>lockScreenConfig</dt>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
<dt>logConfig</dt>
- <dd><p>The logging configuration to be used, or <code>defaultConfiguration</code> if nil.</p></dd>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
<dt>streamingMediaConfig</dt>
- <dd><p>The streaming media configuration to be used, or nil because it is not needed.</p></dd>
+ <dd><p>The streaming media configuration to be used or nil if not used.</p></dd>
+ <dt>fileManagerConfig</dt>
+ <dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
diff --git a/docs/Classes/SDLDeleteFileResponse.html b/docs/Classes/SDLDeleteFileResponse.html
index aac736747..4f3bf864f 100644
--- a/docs/Classes/SDLDeleteFileResponse.html
+++ b/docs/Classes/SDLDeleteFileResponse.html
@@ -23,12 +23,12 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">spaceAvailable</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">spaceAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLDisplayCapabilities.html b/docs/Classes/SDLDisplayCapabilities.html
index 39a5a9371..6fa609107 100644
--- a/docs/Classes/SDLDisplayCapabilities.html
+++ b/docs/Classes/SDLDisplayCapabilities.html
@@ -4,6 +4,7 @@
<ul>
<li><a href="#section-displayType">displayType</a></li>
+ <li><a href="#section-displayName">displayName</a></li>
<li><a href="#section-textFields">textFields</a></li>
<li><a href="#section-imageFields">imageFields</a></li>
<li><a href="#section-mediaClockFormats">mediaClockFormats</a></li>
@@ -41,6 +42,26 @@
+ <h3 id="section-displayName">
+ displayName
+ </h3>
+
+ <p>The name of the connected display</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">displayName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">displayName</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-textFields">
textFields
</h3>
diff --git a/docs/Classes/SDLEqualizerSettings.html b/docs/Classes/SDLEqualizerSettings.html
new file mode 100644
index 000000000..487783f1e
--- /dev/null
+++ b/docs/Classes/SDLEqualizerSettings.html
@@ -0,0 +1,98 @@
+<h1>SDLEqualizerSettings Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithChannelId:channelSetting:">-initWithChannelId:channelSetting:</a></li>
+ <li><a href="#section-channelName">channelName</a></li>
+ <li><a href="#section-channelSetting">channelSetting</a></li>
+ <li><a href="#section-channelId">channelId</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Defines the each Equalizer channel settings.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithChannelId:channelSetting:">
+ -initWithChannelId:channelSetting:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithChannelId</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">channelId</span> <span class="nf">channelSetting</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">channelSetting</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">channelId</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">channelSetting</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section-channelName">
+ channelName
+ </h3>
+
+ <p>@abstract Read-only channel / frequency name
+ (e.i. <q>Treble, Midrange, Bass</q> or <q>125 Hz</q>)</p>
+
+<p>Optional, Max String length 50 chars</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">channelName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">channelName</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-channelSetting">
+ channelSetting
+ </h3>
+
+ <p>@abstract Reflects the setting, from 0%-100%.</p>
+
+<p>Required, Integer 1 - 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">channelSetting</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">channelSetting</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-channelId">
+ channelId
+ </h3>
+
+ <p>@abstract id of the channel.</p>
+
+<p>Required, Integer 1 - 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">channelId</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">channelId</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLFileManager.html b/docs/Classes/SDLFileManager.html
index 64a6d7964..0d28f62d3 100644
--- a/docs/Classes/SDLFileManager.html
+++ b/docs/Classes/SDLFileManager.html
@@ -10,6 +10,7 @@
<li><a href="#section-suspended">suspended</a></li>
<li><a href="#section--init">-init</a></li>
<li><a href="#section--initWithConnectionManager:">-initWithConnectionManager:</a></li>
+ <li><a href="#section--initWithConnectionManager:configuration:">-initWithConnectionManager:configuration:</a></li>
<li><a href="#section--startWithCompletionHandler:">-startWithCompletionHandler:</a></li>
<li><a href="#section--stop">-stop</a></li>
<li><a href="#section--hasUploadedFile:">-hasUploadedFile:</a></li>
@@ -166,6 +167,34 @@
<p>An instance of SDLFileManager</p>
</div>
+ <h3 id="section--initWithConnectionManager:configuration:">
+ -initWithConnectionManager:configuration:
+ </h3>
+
+ <p>Creates a new file manager with a specified connection manager and configuration</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithConnectionManager</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n">SDLConnectionManagerType</span><span class="o">&gt;</span><span class="p">)</span><span class="nv">manager</span>
+ <span class="nf">configuration</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">configuration</span><span class="p">;</span></code></pre>
+
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>manager</dt>
+ <dd><p>A connection manager to use to forward on RPCs</p></dd>
+ <dt>configuration</dt>
+ <dd><p>A configuration for this file manager session</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of SDLFileManager</p>
+ </div>
+
<h3 id="section--startWithCompletionHandler:">
-startWithCompletionHandler:
</h3>
diff --git a/docs/Classes/SDLFileManagerConfiguration.html b/docs/Classes/SDLFileManagerConfiguration.html
new file mode 100644
index 000000000..2070fa8f4
--- /dev/null
+++ b/docs/Classes/SDLFileManagerConfiguration.html
@@ -0,0 +1,119 @@
+<h1>SDLFileManagerConfiguration Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-artworkRetryCount">artworkRetryCount</a></li>
+ <li><a href="#section-fileRetryCount">fileRetryCount</a></li>
+ <li><a href="#section-+defaultConfiguration">+defaultConfiguration</a></li>
+ <li><a href="#section--init">-init</a></li>
+ <li><a href="#section--initWithArtworkRetryCount:fileRetryCount:">-initWithArtworkRetryCount:fileRetryCount:</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-artworkRetryCount">
+ artworkRetryCount
+ </h3>
+
+ <p>Defines the number of times the file manager will attempt to reupload <code><a href="../Classes/SDLArtwork.html">SDLArtwork</a></code> files in the event of a failed upload to Core.</p>
+
+<p>Defaults to 1. To disable reuploads, set to 0.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt8</span> <span class="n">artworkRetryCount</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">artworkRetryCount</span><span class="p">:</span> <span class="kt">UInt8</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-fileRetryCount">
+ fileRetryCount
+ </h3>
+
+ <p>Defines the number of times the file manager will attempt to reupload general <code><a href="../Classes/SDLFile.html">SDLFile</a></code>s in the event of a failed upload to Core.</p>
+
+<p>Defaults to 1. To disable reuploads, set to 0.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt8</span> <span class="n">fileRetryCount</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fileRetryCount</span><span class="p">:</span> <span class="kt">UInt8</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-+defaultConfiguration">
+ +defaultConfiguration
+ </h3>
+
+ <p>Creates a default file manager configuration.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="n">defaultConfiguration</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kd">func</span> <span class="p">`</span><span class="nv">default</span><span class="p">`()</span> <span class="o">-&gt;</span> <span class="k">Self</span></code></pre>
+
+
+
+ <div>
+ <h4>Return Value</h4>
+ <p>A default configuration that may be customized.</p>
+ </div>
+
+ <h3 id="section--init">
+ -init
+ </h3>
+
+ <p>Use <code>defaultConfiguration</code> instead</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="n">init</span><span class="p">;</span></code></pre>
+
+
+
+
+
+ <h3 id="section--initWithArtworkRetryCount:fileRetryCount:">
+ -initWithArtworkRetryCount:fileRetryCount:
+ </h3>
+
+ <p>Creates a file manager configuration with customized upload retry counts.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithArtworkRetryCount</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">artworkRetryCount</span>
+ <span class="nf">fileRetryCount</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">fileRetryCount</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">artworkRetryCount</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">fileRetryCount</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">)</span></code></pre>
+
+
+
+ <div>
+ <h4>Return Value</h4>
+ <p>The configuration</p>
+ </div>
+
+</section>
diff --git a/docs/Classes/SDLFuelRange.html b/docs/Classes/SDLFuelRange.html
new file mode 100644
index 000000000..dbfa550c3
--- /dev/null
+++ b/docs/Classes/SDLFuelRange.html
@@ -0,0 +1,56 @@
+<h1>SDLFuelRange Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-type">type</a></li>
+ <li><a href="#section-range">range</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Describes the distance a vehicle can travel with the current level of fuel.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-type">
+ type
+ </h3>
+
+ <p>The vehicle&rsquo;s fuel type</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">type</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">type</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-range">
+ range
+ </h3>
+
+ <p>The estimate range in KM the vehicle can travel based on fuel level and consumption.</p>
+
+<p>Optional, Float, 0 - 10,000</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">range</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">range</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLGPSData.html b/docs/Classes/SDLGPSData.html
index 7bddf020c..6b466e8d8 100644
--- a/docs/Classes/SDLGPSData.html
+++ b/docs/Classes/SDLGPSData.html
@@ -79,16 +79,16 @@
<p>utc year</p>
-<p>Required, Integer, 2010 - 2100</p>
+<p>Optional, Integer, 2010 - 2100</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">utcYear</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcYear</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcYear</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcYear</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -99,16 +99,16 @@
<p>utc month</p>
-<p>Required, Integer, 1 - 12</p>
+<p>Optional, Integer, 1 - 12</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">utcMonth</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcMonth</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcMonth</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcMonth</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -119,16 +119,16 @@
<p>utc day</p>
-<p>Required, Integer, 1 - 31</p>
+<p>Optional, Integer, 1 - 31</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">utcDay</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcDay</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcDay</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcDay</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -139,16 +139,16 @@
<p>utc hours</p>
-<p>Required, Integer, 0 - 23</p>
+<p>Optional, Integer, 0 - 23</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">utcHours</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcHours</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcHours</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcHours</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -159,16 +159,16 @@
<p>utc minutes</p>
-<p>Required, Integer, 0 - 59</p>
+<p>Optional, Integer, 0 - 59</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">utcMinutes</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcMinutes</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcMinutes</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcMinutes</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -179,16 +179,16 @@
<p>utc seconds</p>
-<p>Required, Integer, 0 - 59</p>
+<p>Optional, Integer, 0 - 59</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">utcSeconds</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcSeconds</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcSeconds</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">utcSeconds</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -197,17 +197,17 @@
compassDirection
</h3>
- <p>Potential Compass Directions</p>
+ <p>Optional, Potential Compass Directions</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection">SDLCompassDirection</a></span> <span class="n">_Nonnull</span> <span class="n">compassDirection</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Type Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection">SDLCompassDirection</a></span> <span class="n">compassDirection</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">compassDirection</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection">SDLCompassDirection</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">compassDirection</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection">SDLCompassDirection</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -220,16 +220,16 @@
<p>@discussion If undefined or unavailable, then value shall be set to 0</p>
-<p>Required, Float, 0.0 - 10.0</p>
+<p>Required, Float, 0.0 - 1000.0</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">pdop</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">pdop</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">pdop</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">pdop</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -242,16 +242,16 @@
<p>@discussion If undefined or unavailable, then value shall be set to 0</p>
-<p>Required, Float, 0.0 - 10.0</p>
+<p>Required, Float, 0.0 - 1000.0</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hdop</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdop</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">hdop</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">hdop</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -264,16 +264,16 @@
<p>@discussion If undefined or unavailable, then value shall be set to 0</p>
-<p>Required, Float, 0.0 - 10.0</p>
+<p>Required, Float, 0.0 - 1000.0</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">vdop</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">vdop</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">vdop</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">vdop</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -286,16 +286,16 @@
<p>@discussion YES, if coordinates are based on satellites. NO, if based on dead reckoning.</p>
-<p>Required, Boolean</p>
+<p>Optional, Boolean</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">actual</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">actual</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">actual</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">actual</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -306,16 +306,16 @@
<p>The number of satellites in view</p>
-<p>Required, Integer, 0 - 31</p>
+<p>Optional, Integer, 0 - 31</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">satellites</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">satellites</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">satellites</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">satellites</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -326,16 +326,16 @@
<p>The supported dimensions of the GPS</p>
-<p>Required</p>
+<p>Optional</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDimension.h@T@SDLDimension">SDLDimension</a></span> <span class="n">_Nonnull</span> <span class="n">dimension</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDimension.h@T@SDLDimension">SDLDimension</a></span> <span class="n">dimension</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">dimension</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLDimension.h@T@SDLDimension">SDLDimension</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">dimension</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLDimension.h@T@SDLDimension">SDLDimension</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -346,16 +346,16 @@
<p>Altitude in meters</p>
-<p>Required, Float, -10000.0 - 10000.0</p>
+<p>Optional, Float, -10000.0 - 10000.0</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">altitude</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">altitude</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">altitude</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">altitude</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -368,16 +368,16 @@
<p>@discussion North is 0, East is 90, etc. Resolution is 0.01</p>
-<p>Required, Float, 0.0 - 359.99</p>
+<p>Optional, Float, 0.0 - 359.99</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">heading</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heading</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heading</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heading</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -388,16 +388,16 @@
<p>Speed in KPH</p>
-<p>Required, Float, 0.0 - 500.0</p>
+<p>Optional, Float, 0.0 - 500.0</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">speed</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">speed</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLGetVehicleData.html b/docs/Classes/SDLGetVehicleData.html
index db3f43127..a93e76f25 100644
--- a/docs/Classes/SDLGetVehicleData.html
+++ b/docs/Classes/SDLGetVehicleData.html
@@ -4,11 +4,13 @@
<ul>
<li><a href="#section--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:">-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:</a></li>
+ <li><a href="#section--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:">-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:</a></li>
<li><a href="#section-gps">gps</a></li>
<li><a href="#section-speed">speed</a></li>
<li><a href="#section-rpm">rpm</a></li>
<li><a href="#section-fuelLevel">fuelLevel</a></li>
<li><a href="#section-fuelLevel_State">fuelLevel_State</a></li>
+ <li><a href="#section-fuelRange">fuelRange</a></li>
<li><a href="#section-instantFuelConsumption">instantFuelConsumption</a></li>
<li><a href="#section-externalTemperature">externalTemperature</a></li>
<li><a href="#section-vin">vin</a></li>
@@ -21,6 +23,7 @@
<li><a href="#section-driverBraking">driverBraking</a></li>
<li><a href="#section-wiperStatus">wiperStatus</a></li>
<li><a href="#section-headLampStatus">headLampStatus</a></li>
+ <li><a href="#section-engineOilLife">engineOilLife</a></li>
<li><a href="#section-engineTorque">engineTorque</a></li>
<li><a href="#section-accPedalPosition">accPedalPosition</a></li>
<li><a href="#section-steeringWheelAngle">steeringWheelAngle</a></li>
@@ -29,19 +32,18 @@
<li><a href="#section-emergencyEvent">emergencyEvent</a></li>
<li><a href="#section-clusterModeStatus">clusterModeStatus</a></li>
<li><a href="#section-myKey">myKey</a></li>
+ <li><a href="#section-electronicParkBrakeStatus">electronicParkBrakeStatus</a></li>
+ <li><a href="#section-turnSignal">turnSignal</a></li>
</ul>
<h3>Overview</h3>
-<p>Requests surrent values of specific published vehicle data items.
- <p>
- Function Group: Location, VehicleInfo and DrivingChara
- <p>
- <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b>
- </p></p>
+<p>Requests current values of specific published vehicle data items.</p>
-<p>Since SmartDeviceLink 2.0<br/>
- See SDLSubscribeVehicleData SDLUnsubscribeVehicleData</p>
+<p>Function Group: Location, VehicleInfo and DrivingChara
+ HMILevel needs to be FULL, LIMITED or BACKGROUND
+ Since SmartDeviceLink 2.0
+ See SDLSubscribeVehicleData, SDLUnsubscribeVehicleData</p>
<section class="section task-group-section">
@@ -49,12 +51,37 @@
-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:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for getting data for all possible vehicle data items.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithAccelerationPedalPosition</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">accelerationPedalPosition</span> <span class="nf">airbagStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">airbagStatus</span> <span class="nf">beltStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">beltStatus</span> <span class="nf">bodyInformation</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">bodyInformation</span> <span class="nf">clusterModeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">clusterModeStatus</span> <span class="nf">deviceStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">deviceStatus</span> <span class="nf">driverBraking</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">driverBraking</span> <span class="nf">eCallInfo</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">eCallInfo</span> <span class="nf">emergencyEvent</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">emergencyEvent</span> <span class="nf">engineTorque</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineTorque</span> <span class="nf">externalTemperature</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">externalTemperature</span> <span class="nf">fuelLevel</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevel</span> <span class="nf">fuelLevelState</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevelState</span> <span class="nf">gps</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">gps</span> <span class="nf">headLampStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headLampStatus</span> <span class="nf">instantFuelConsumption</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">instantFuelConsumption</span> <span class="nf">myKey</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">myKey</span> <span class="nf">odometer</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">odometer</span> <span class="nf">prndl</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">prndl</span> <span class="nf">rpm</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rpm</span> <span class="nf">speed</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">speed</span> <span class="nf">steeringWheelAngle</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">steeringWheelAngle</span> <span class="nf">tirePressure</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">tirePressure</span> <span class="nf">vin</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">vin</span> <span class="nf">wiperStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithAccelerationPedalPosition</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">accelerationPedalPosition</span>
+ <span class="nf">airbagStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">airbagStatus</span>
+ <span class="nf">beltStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">beltStatus</span>
+ <span class="nf">bodyInformation</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">bodyInformation</span>
+ <span class="nf">clusterModeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">clusterModeStatus</span>
+ <span class="nf">deviceStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">deviceStatus</span>
+ <span class="nf">driverBraking</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">driverBraking</span>
+ <span class="nf">eCallInfo</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">eCallInfo</span>
+ <span class="nf">emergencyEvent</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">emergencyEvent</span>
+ <span class="nf">engineTorque</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineTorque</span>
+ <span class="nf">externalTemperature</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">externalTemperature</span>
+ <span class="nf">fuelLevel</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevel</span>
+ <span class="nf">fuelLevelState</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevelState</span>
+ <span class="nf">gps</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">gps</span>
+ <span class="nf">headLampStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headLampStatus</span>
+ <span class="nf">instantFuelConsumption</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">instantFuelConsumption</span>
+ <span class="nf">myKey</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">myKey</span>
+ <span class="nf">odometer</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">odometer</span>
+ <span class="nf">prndl</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">prndl</span>
+ <span class="nf">rpm</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rpm</span>
+ <span class="nf">speed</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">speed</span>
+ <span class="nf">steeringWheelAngle</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">steeringWheelAngle</span>
+ <span class="nf">tirePressure</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">tirePressure</span>
+ <span class="nf">vin</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">vin</span>
+ <span class="nf">wiperStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -62,12 +89,181 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>accelerationPedalPosition</dt>
+ <dd><p>Get accelerationPedalPosition data</p></dd>
+ <dt>airbagStatus</dt>
+ <dd><p>Get airbagStatus data</p></dd>
+ <dt>beltStatus</dt>
+ <dd><p>Get beltStatus data</p></dd>
+ <dt>bodyInformation</dt>
+ <dd><p>Get bodyInformation data</p></dd>
+ <dt>clusterModeStatus</dt>
+ <dd><p>Get clusterModeStatus data</p></dd>
+ <dt>deviceStatus</dt>
+ <dd><p>Get deviceStatus data</p></dd>
+ <dt>driverBraking</dt>
+ <dd><p>Get driverBraking data</p></dd>
+ <dt>eCallInfo</dt>
+ <dd><p>Get eCallInfo data</p></dd>
+ <dt>emergencyEvent</dt>
+ <dd><p>Get emergencyEvent data</p></dd>
+ <dt>engineTorque</dt>
+ <dd><p>Get engineTorque data</p></dd>
+ <dt>externalTemperature</dt>
+ <dd><p>Get externalTemperature data</p></dd>
+ <dt>fuelLevel</dt>
+ <dd><p>Get fuelLevel data</p></dd>
+ <dt>fuelLevelState</dt>
+ <dd><p>Get fuelLevelState data</p></dd>
+ <dt>gps</dt>
+ <dd><p>Get gps data</p></dd>
+ <dt>headLampStatus</dt>
+ <dd><p>Get headLampStatus data</p></dd>
+ <dt>instantFuelConsumption</dt>
+ <dd><p>Get instantFuelConsumption data</p></dd>
+ <dt>myKey</dt>
+ <dd><p>Get myKey data</p></dd>
+ <dt>odometer</dt>
+ <dd><p>Get odometer data</p></dd>
+ <dt>prndl</dt>
+ <dd><p>Get prndl data</p></dd>
+ <dt>rpm</dt>
+ <dd><p>Get rpm data</p></dd>
+ <dt>speed</dt>
+ <dd><p>Get speed data</p></dd>
+ <dt>steeringWheelAngle</dt>
+ <dd><p>Get steeringWheelAngle data</p></dd>
+ <dt>tirePressure</dt>
+ <dd><p>Get tirePressure data</p></dd>
+ <dt>vin</dt>
+ <dd><p>Get vin data</p></dd>
+ <dt>wiperStatus</dt>
+ <dd><p>Get wiperStatus data</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLGetVehicleData object</p>
+ </div>
+
+ <h3 id="section--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:">
+ -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:
+ </h3>
+
+ <p>Convenience init for getting data for all possible vehicle data items.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithAccelerationPedalPosition</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">accelerationPedalPosition</span>
+ <span class="nf">airbagStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">airbagStatus</span>
+ <span class="nf">beltStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">beltStatus</span>
+ <span class="nf">bodyInformation</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">bodyInformation</span>
+ <span class="nf">clusterModeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">clusterModeStatus</span>
+ <span class="nf">deviceStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">deviceStatus</span>
+ <span class="nf">driverBraking</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">driverBraking</span>
+ <span class="nf">eCallInfo</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">eCallInfo</span>
+ <span class="nf">electronicParkBrakeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">electronicParkBrakeStatus</span>
+ <span class="nf">emergencyEvent</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">emergencyEvent</span>
+ <span class="nf">engineOilLife</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineOilLife</span>
+ <span class="nf">engineTorque</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineTorque</span>
+ <span class="nf">externalTemperature</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">externalTemperature</span>
+ <span class="nf">fuelLevel</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevel</span>
+ <span class="nf">fuelLevelState</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevelState</span>
+ <span class="nf">fuelRange</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelRange</span>
+ <span class="nf">gps</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">gps</span>
+ <span class="nf">headLampStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headLampStatus</span>
+ <span class="nf">instantFuelConsumption</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">instantFuelConsumption</span>
+ <span class="nf">myKey</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">myKey</span>
+ <span class="nf">odometer</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">odometer</span>
+ <span class="nf">prndl</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">prndl</span>
+ <span class="nf">rpm</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rpm</span>
+ <span class="nf">speed</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">speed</span>
+ <span class="nf">steeringWheelAngle</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">steeringWheelAngle</span>
+ <span class="nf">tirePressure</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">tirePressure</span>
+ <span class="nf">turnSignal</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">turnSignal</span>
+ <span class="nf">vin</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">vin</span>
+ <span class="nf">wiperStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">wiperStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">accelerationPedalPosition</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">airbagStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">beltStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">bodyInformation</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">clusterModeStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">deviceStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">driverBraking</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">eCallInfo</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">emergencyEvent</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">engineTorque</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">externalTemperature</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelLevel</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelLevelState</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">gps</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">headLampStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">instantFuelConsumption</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">myKey</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">odometer</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">prndl</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">rpm</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">speed</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">steeringWheelAngle</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">tirePressure</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">vin</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">wiperStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>accelerationPedalPosition</dt>
+ <dd><p>Get accelerationPedalPosition data</p></dd>
+ <dt>airbagStatus</dt>
+ <dd><p>Get airbagStatus data</p></dd>
+ <dt>beltStatus</dt>
+ <dd><p>Get beltStatus data</p></dd>
+ <dt>bodyInformation</dt>
+ <dd><p>Get bodyInformation data</p></dd>
+ <dt>clusterModeStatus</dt>
+ <dd><p>Get clusterModeStatus data</p></dd>
+ <dt>deviceStatus</dt>
+ <dd><p>Get deviceStatus data</p></dd>
+ <dt>driverBraking</dt>
+ <dd><p>Get driverBraking data</p></dd>
+ <dt>eCallInfo</dt>
+ <dd><p>Get eCallInfo data</p></dd>
+ <dt>electronicParkBrakeStatus</dt>
+ <dd><p>Get electronicParkBrakeStatus data</p></dd>
+ <dt>emergencyEvent</dt>
+ <dd><p>Get emergencyEvent data</p></dd>
+ <dt>engineOilLife</dt>
+ <dd><p>Get engineOilLife data</p></dd>
+ <dt>engineTorque</dt>
+ <dd><p>Get engineTorque data</p></dd>
+ <dt>externalTemperature</dt>
+ <dd><p>Get externalTemperature data</p></dd>
+ <dt>fuelLevel</dt>
+ <dd><p>Get fuelLevel data</p></dd>
+ <dt>fuelLevelState</dt>
+ <dd><p>Get fuelLevelState data</p></dd>
+ <dt>fuelRange</dt>
+ <dd><p>Get fuelRange data</p></dd>
+ <dt>gps</dt>
+ <dd><p>Get gps data</p></dd>
+ <dt>headLampStatus</dt>
+ <dd><p>Get headLampStatus data</p></dd>
+ <dt>instantFuelConsumption</dt>
+ <dd><p>Get instantFuelConsumption data</p></dd>
+ <dt>myKey</dt>
+ <dd><p>Get myKey data</p></dd>
+ <dt>odometer</dt>
+ <dd><p>Get odometer data</p></dd>
+ <dt>prndl</dt>
+ <dd><p>Get prndl data</p></dd>
+ <dt>rpm</dt>
+ <dd><p>Get rpm data</p></dd>
+ <dt>speed</dt>
+ <dd><p>Get speed data</p></dd>
+ <dt>steeringWheelAngle</dt>
+ <dd><p>Get steeringWheelAngle data</p></dd>
+ <dt>tirePressure</dt>
+ <dd><p>Get tirePressure data</p></dd>
+ <dt>turnSignal</dt>
+ <dd><p>Get turnSignal data</p></dd>
+ <dt>vin</dt>
+ <dd><p>Get vin data</p></dd>
+ <dt>wiperStatus</dt>
+ <dd><p>Get wiperStatus data</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLGetVehicleData object</p>
+ </div>
<h3 id="section-gps">
gps
</h3>
- <p>A boolean value. If true, requests Gps data</p>
+ <p>A boolean value. If true, requests GPS data.</p>
@@ -85,7 +281,7 @@
speed
</h3>
- <p>A boolean value. If true, requests speed data</p>
+ <p>A boolean value. If true, requests Speed data.</p>
@@ -103,7 +299,7 @@
rpm
</h3>
- <p>A boolean value. If true, requests rpm data</p>
+ <p>A boolean value. If true, requests RPM data.</p>
@@ -121,7 +317,7 @@
fuelLevel
</h3>
- <p>A boolean value. If true, requests FuelLevel data</p>
+ <p>A boolean value. If true, requests Fuel Level data.</p>
@@ -139,7 +335,7 @@
fuelLevel_State
</h3>
- <p>A boolean value. If true, requests fuelLevel_State data</p>
+ <p>A boolean value. If true, requests Fuel Level State data.</p>
@@ -154,11 +350,29 @@
+ <h3 id="section-fuelRange">
+ fuelRange
+ </h3>
+
+ <p>A boolean value. If true, requests Fuel Range data.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-instantFuelConsumption">
instantFuelConsumption
</h3>
- <p>A boolean value. If true, requests instantFuelConsumption data</p>
+ <p>A boolean value. If true, requests Instant Fuel Consumption data.</p>
@@ -177,7 +391,7 @@
externalTemperature
</h3>
- <p>A boolean value. If true, requests externalTemperature data</p>
+ <p>A boolean value. If true, requests External Temperature data.</p>
@@ -196,7 +410,7 @@
vin
</h3>
- <p>A boolean value. If true, requests Vehicle Identification Number</p>
+ <p>A boolean value. If true, requests the Vehicle Identification Number.</p>
@@ -214,7 +428,7 @@
prndl
</h3>
- <p>A boolean value. If true, requests Currently selected gear data</p>
+ <p>A boolean value. If true, requests PRNDL data.</p>
@@ -232,7 +446,7 @@
tirePressure
</h3>
- <p>A boolean value. If true, requests tire pressure status data</p>
+ <p>A boolean value. If true, requests Tire Pressure data.</p>
@@ -251,7 +465,7 @@
odometer
</h3>
- <p>A boolean value. If true, requests odometer data</p>
+ <p>A boolean value. If true, requests Odometer data.</p>
@@ -269,7 +483,7 @@
beltStatus
</h3>
- <p>A boolean value. If true, requests belt Status data</p>
+ <p>A boolean value. If true, requests Belt Status data.</p>
@@ -287,7 +501,7 @@
bodyInformation
</h3>
- <p>A boolean value. If true, requests body Information data</p>
+ <p>A boolean value. If true, requests Body Information data.</p>
@@ -306,7 +520,7 @@
deviceStatus
</h3>
- <p>A boolean value. If true, requests device Status data</p>
+ <p>A boolean value. If true, requests Device Status data.</p>
@@ -325,7 +539,7 @@
driverBraking
</h3>
- <p>A boolean value. If true, requests driver Braking data</p>
+ <p>A boolean value. If true, requests Driver Braking data.</p>
@@ -344,7 +558,7 @@
wiperStatus
</h3>
- <p>A boolean value. If true, requests wiper Status data</p>
+ <p>A boolean value. If true, requests Wiper Status data.</p>
@@ -363,7 +577,7 @@
headLampStatus
</h3>
- <p>A boolean value. If true, requests Head Lamp Status data</p>
+ <p>A boolean value. If true, requests Head Lamp Status data.</p>
@@ -378,11 +592,30 @@
+ <h3 id="section-engineOilLife">
+ engineOilLife
+ </h3>
+
+ <p>A boolean value. If true, requests Engine Oil Life data.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-engineTorque">
engineTorque
</h3>
- <p>A boolean value. If true, requests Engine Torque data</p>
+ <p>A boolean value. If true, requests Engine Torque data.</p>
@@ -401,8 +634,7 @@
accPedalPosition
</h3>
- <p>A boolean value. If true, means the accPedalPosition data has been
-subscribed.</p>
+ <p>A boolean value. If true, requests Acc Pedal Position data.</p>
@@ -421,8 +653,7 @@ subscribed.</p>
steeringWheelAngle
</h3>
- <p>A boolean value. If true, means the steeringWheelAngle data has been
-subscribed.</p>
+ <p>A boolean value. If true, requests Steering Wheel Angle data.</p>
@@ -441,7 +672,7 @@ subscribed.</p>
eCallInfo
</h3>
- <p>If true, the Emergency Call notification and confirmation data has been subscribed</p>
+ <p>A boolean value. If true, requests Emergency Call Info data.</p>
@@ -459,7 +690,7 @@ subscribed.</p>
airbagStatus
</h3>
- <p>If true, the status of the air bags has been subscribed</p>
+ <p>A boolean value. If true, requests Air Bag Status data.</p>
@@ -478,7 +709,7 @@ subscribed.</p>
emergencyEvent
</h3>
- <p>If true, information related to an emergency event (and if it occurred) has been subscribed</p>
+ <p>A boolean value. If true, requests Emergency Event (if it occurred) data.</p>
@@ -497,7 +728,7 @@ subscribed.</p>
clusterModeStatus
</h3>
- <p>If true, the status modes of the cluster have been subscribed</p>
+ <p>A boolean value. If true, requests Cluster Mode Status data.</p>
@@ -516,7 +747,7 @@ subscribed.</p>
myKey
</h3>
- <p>If true, information related to the MyKey feature has been subscribed</p>
+ <p>A boolean value. If true, requests MyKey data.</p>
@@ -530,4 +761,41 @@ subscribed.</p>
+ <h3 id="section-electronicParkBrakeStatus">
+ electronicParkBrakeStatus
+ </h3>
+
+ <p>A boolean value. If true, requests Electronic Parking Brake status data.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-turnSignal">
+ turnSignal
+ </h3>
+
+ <p>A boolean value. If true, requests Turn Signal data.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLGetVehicleDataResponse.html b/docs/Classes/SDLGetVehicleDataResponse.html
index a4cdbe86c..4ae14f196 100644
--- a/docs/Classes/SDLGetVehicleDataResponse.html
+++ b/docs/Classes/SDLGetVehicleDataResponse.html
@@ -8,6 +8,7 @@
<li><a href="#section-rpm">rpm</a></li>
<li><a href="#section-fuelLevel">fuelLevel</a></li>
<li><a href="#section-fuelLevel_State">fuelLevel_State</a></li>
+ <li><a href="#section-fuelRange">fuelRange</a></li>
<li><a href="#section-instantFuelConsumption">instantFuelConsumption</a></li>
<li><a href="#section-externalTemperature">externalTemperature</a></li>
<li><a href="#section-vin">vin</a></li>
@@ -20,6 +21,7 @@
<li><a href="#section-driverBraking">driverBraking</a></li>
<li><a href="#section-wiperStatus">wiperStatus</a></li>
<li><a href="#section-headLampStatus">headLampStatus</a></li>
+ <li><a href="#section-engineOilLife">engineOilLife</a></li>
<li><a href="#section-engineTorque">engineTorque</a></li>
<li><a href="#section-accPedalPosition">accPedalPosition</a></li>
<li><a href="#section-steeringWheelAngle">steeringWheelAngle</a></li>
@@ -28,6 +30,8 @@
<li><a href="#section-emergencyEvent">emergencyEvent</a></li>
<li><a href="#section-clusterModeStatus">clusterModeStatus</a></li>
<li><a href="#section-myKey">myKey</a></li>
+ <li><a href="#section-electronicParkBrakeStatus">electronicParkBrakeStatus</a></li>
+ <li><a href="#section-turnSignal">turnSignal</a></li>
</ul>
<h3>Overview</h3>
@@ -129,6 +133,27 @@
+ <h3 id="section-fuelRange">
+ fuelRange
+ </h3>
+
+ <p>The estimate range in KM the vehicle can travel based on fuel level and consumption</p>
+
+<p>Optional, Array of length 0 - 100, of SDLFuelRange</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLFuelRange.html">SDLFuelRange</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLFuelRange.html">SDLFuelRange</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-instantFuelConsumption">
instantFuelConsumption
</h3>
@@ -350,6 +375,25 @@
+ <h3 id="section-engineOilLife">
+ engineOilLife
+ </h3>
+
+ <p>The estimated percentage (0% - 100%) of remaining oil life of the engine</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-engineTorque">
engineTorque
</h3>
@@ -499,4 +543,41 @@
+ <h3 id="section-electronicParkBrakeStatus">
+ electronicParkBrakeStatus
+ </h3>
+
+ <p>The status of the electronic parking brake</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-turnSignal">
+ turnSignal
+ </h3>
+
+ <p>The status of the turn signal</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="n">turnSignal</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLHMISettingsControlCapabilities.html b/docs/Classes/SDLHMISettingsControlCapabilities.html
new file mode 100644
index 000000000..73ec0422b
--- /dev/null
+++ b/docs/Classes/SDLHMISettingsControlCapabilities.html
@@ -0,0 +1,167 @@
+<h1>SDLHMISettingsControlCapabilities Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithModuleName:">-initWithModuleName:</a></li>
+ <li><a href="#section--initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:">-initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:</a></li>
+ <li><a href="#section-moduleName">moduleName</a></li>
+ <li><a href="#section-distanceUnitAvailable">distanceUnitAvailable</a></li>
+ <li><a href="#section-temperatureUnitAvailable">temperatureUnitAvailable</a></li>
+ <li><a href="#section-displayModeUnitAvailable">displayModeUnitAvailable</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithModuleName:">
+ -initWithModuleName:
+ </h3>
+
+ <p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>moduleName</dt>
+ <dd><p>The short friendly name of the hmi setting module</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLHMISettingsControlCapabilities class</p>
+ </div>
+
+ <h3 id="section--initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:">
+ -initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:
+ </h3>
+
+ <p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span>
+ <span class="nf">distanceUnitAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">distanceUnitAvailable</span>
+ <span class="nf">temperatureUnitAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">temperatureUnitAvailable</span>
+ <span class="nf">displayModeUnitAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">displayModeUnitAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">distanceUnitAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">temperatureUnitAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">displayModeUnitAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>moduleName</dt>
+ <dd><p>The short friendly name of the hmi setting module</p></dd>
+ <dt>distanceUnitAvailable</dt>
+ <dd><p>Availability of the control of distance unit.</p></dd>
+ <dt>temperatureUnitAvailable</dt>
+ <dd><p>Availability of the control of temperature unit.</p></dd>
+ <dt>displayModeUnitAvailable</dt>
+ <dd><p>Availability of the control of displayMode unit.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLHMISettingsControlCapabilities class</p>
+ </div>
+
+ <h3 id="section-moduleName">
+ moduleName
+ </h3>
+
+ <p>@abstract The short friendly name of the hmi setting module.
+ It should not be used to identify a module by mobile application.</p>
+
+<p>Required, Max String length 100 chars</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-distanceUnitAvailable">
+ distanceUnitAvailable
+ </h3>
+
+ <p>@abstract Availability of the control of distance unit.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">distanceUnitAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">distanceUnitAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-temperatureUnitAvailable">
+ temperatureUnitAvailable
+ </h3>
+
+ <p>@abstract Availability of the control of temperature unit.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">temperatureUnitAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">temperatureUnitAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-displayModeUnitAvailable">
+ displayModeUnitAvailable
+ </h3>
+
+ <p>@abstract Availability of the control of HMI display mode.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">displayModeUnitAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">displayModeUnitAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLHMISettingsControlData.html b/docs/Classes/SDLHMISettingsControlData.html
new file mode 100644
index 000000000..19c6fc933
--- /dev/null
+++ b/docs/Classes/SDLHMISettingsControlData.html
@@ -0,0 +1,113 @@
+<h1>SDLHMISettingsControlData Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithDisplaymode:temperatureUnit:distanceUnit:">-initWithDisplaymode:temperatureUnit:distanceUnit:</a></li>
+ <li><a href="#section-displayMode">displayMode</a></li>
+ <li><a href="#section-temperatureUnit">temperatureUnit</a></li>
+ <li><a href="#section-distanceUnit">distanceUnit</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Corresponds to <q>HMI_SETTINGS</q> ModuleType</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithDisplaymode:temperatureUnit:distanceUnit:">
+ -initWithDisplaymode:temperatureUnit:distanceUnit:
+ </h3>
+
+ <p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithDisplaymode</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span><span class="p">)</span><span class="nv">displayMode</span>
+ <span class="nf">temperatureUnit</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit">SDLTemperatureUnit</a></span><span class="p">)</span><span class="nv">temperatureUnit</span>
+ <span class="nf">distanceUnit</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span><span class="p">)</span><span class="nv">distanceUnit</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">displaymode</span> <span class="nv">displayMode</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span><span class="p">,</span> <span class="nv">temperatureUnit</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit">SDLTemperatureUnit</a></span><span class="p">,</span> <span class="nv">distanceUnit</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>displayMode</dt>
+ <dd><p>Display Mode used in HMI setting</p></dd>
+ <dt>temperatureUnit</dt>
+ <dd><p>temperature unit used in HMI setting</p></dd>
+ <dt>distanceUnit</dt>
+ <dd><p>distance unit used in HMI setting</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLHMISettingsControlCapabilities class</p>
+ </div>
+
+ <h3 id="section-displayMode">
+ displayMode
+ </h3>
+
+ <p>@abstract Display the Display Mode used HMI setting</p>
+
+<p>Optional, SDLDisplayMode</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span> <span class="n">displayMode</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">displayMode</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-temperatureUnit">
+ temperatureUnit
+ </h3>
+
+ <p>@abstract Display the temperature unit used HMI setting</p>
+
+<p>Optional, SDLTemperatureUnit</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Type Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit">SDLTemperatureUnit</a></span> <span class="n">temperatureUnit</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">temperatureUnit</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit">SDLTemperatureUnit</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-distanceUnit">
+ distanceUnit
+ </h3>
+
+ <p>@abstract Display the distance unit used HMI setting</p>
+
+<p>Optional, SDLDistanceUnit</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span> <span class="n">distanceUnit</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">distanceUnit</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLImage.html b/docs/Classes/SDLImage.html
index d792b4521..2b1b9ecba 100644
--- a/docs/Classes/SDLImage.html
+++ b/docs/Classes/SDLImage.html
@@ -4,10 +4,14 @@
<ul>
<li><a href="#section--initWithName:ofType:">-initWithName:ofType:</a></li>
+ <li><a href="#section--initWithName:ofType:isTemplate:">-initWithName:ofType:isTemplate:</a></li>
<li><a href="#section--initWithName:">-initWithName:</a></li>
+ <li><a href="#section--initWithName:isTemplate:">-initWithName:isTemplate:</a></li>
<li><a href="#section--initWithStaticImageValue:">-initWithStaticImageValue:</a></li>
+ <li><a href="#section--initWithStaticIconName:">-initWithStaticIconName:</a></li>
<li><a href="#section-value">value</a></li>
<li><a href="#section-imageType">imageType</a></li>
+ <li><a href="#section-isTemplate">isTemplate</a></li>
</ul>
<h3>Overview</h3>
@@ -22,12 +26,13 @@
-initWithName:ofType:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span> <span class="nf">ofType</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="p">)</span><span class="nv">imageType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span>
+ <span class="nf">ofType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="p">)</span><span class="nv">imageType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -35,17 +40,61 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The unique name used to upload the image to SDL Core</p></dd>
+ <dt>imageType</dt>
+ <dd><p>Describes whether the image is static or dynamic</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLImage object</p>
+ </div>
+
+ <h3 id="section--initWithName:ofType:isTemplate:">
+ -initWithName:ofType:isTemplate:
+ </h3>
+
+ <p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span>
+ <span class="nf">ofType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="p">)</span><span class="nv">imageType</span>
+ <span class="nf">isTemplate</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">isTemplate</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">name</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="n">ofType</span> <span class="nv">imageType</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="p">,</span> <span class="nv">isTemplate</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The unique name used to upload the image to SDL Core</p></dd>
+ <dt>imageType</dt>
+ <dd><p>Describes whether the image is static or dynamic</p></dd>
+ <dt>isTemplate</dt>
+ <dd><p>Whether or not the image is a template that can be (re)colored by the SDL HMI. Static images are templates by default.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLImage object</p>
+ </div>
<h3 id="section--initWithName:">
-initWithName:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -53,17 +102,56 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The unique name used to upload the image to SDL Core</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLImage object</p>
+ </div>
+
+ <h3 id="section--initWithName:isTemplate:">
+ -initWithName:isTemplate:
+ </h3>
+
+ <p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span>
+ <span class="nf">isTemplate</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">isTemplate</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">name</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">isTemplate</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The unique name used to upload the image to SDL Core</p></dd>
+ <dt>isTemplate</dt>
+ <dd><p>Whether or not the image is a template that can be (re)colored by the SDL HMI</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLImage object</p>
+ </div>
<h3 id="section--initWithStaticImageValue:">
-initWithStaticImageValue:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image&rsquo;s value.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithStaticImageValue</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">staticImageValue</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithStaticImageValue</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">staticImageValue</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -71,6 +159,43 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>staticImageValue</dt>
+ <dd><p>The image value assigned to the static image</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLImage object</p>
+ </div>
+
+ <h3 id="section--initWithStaticIconName:">
+ -initWithStaticIconName:
+ </h3>
+
+ <p>Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image&rsquo;s value.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithStaticIconName</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span><span class="p">)</span><span class="nv">staticIconName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">staticIconName</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>staticIconName</dt>
+ <dd><p>A SDLStaticIconName value</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLImage object</p>
+ </div>
<h3 id="section-value">
value
@@ -112,4 +237,22 @@
+ <h3 id="section-isTemplate">
+ isTemplate
+ </h3>
+
+ <p>Indicates that this image can be (re)colored by the HMI to best fit the current color scheme.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">isTemplate</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">unowned(unsafe)</span> <span class="k">var</span> <span class="nv">isTemplate</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLLifecycleConfiguration.html b/docs/Classes/SDLLifecycleConfiguration.html
index 97e4bffa5..d39b4b4a2 100644
--- a/docs/Classes/SDLLifecycleConfiguration.html
+++ b/docs/Classes/SDLLifecycleConfiguration.html
@@ -5,12 +5,15 @@
<ul>
<li><a href="#section--init">-init</a></li>
<li><a href="#section-+defaultConfigurationWithAppName:appId:">+defaultConfigurationWithAppName:appId:</a></li>
+ <li><a href="#section-+defaultConfigurationWithAppName:fullAppId:">+defaultConfigurationWithAppName:fullAppId:</a></li>
<li><a href="#section-+debugConfigurationWithAppName:appId:ipAddress:port:">+debugConfigurationWithAppName:appId:ipAddress:port:</a></li>
+ <li><a href="#section-+debugConfigurationWithAppName:fullAppId:ipAddress:port:">+debugConfigurationWithAppName:fullAppId:ipAddress:port:</a></li>
<li><a href="#section-tcpDebugMode">tcpDebugMode</a></li>
<li><a href="#section-tcpDebugIPAddress">tcpDebugIPAddress</a></li>
<li><a href="#section-tcpDebugPort">tcpDebugPort</a></li>
<li><a href="#section-appName">appName</a></li>
<li><a href="#section-appId">appId</a></li>
+ <li><a href="#section-fullAppId">fullAppId</a></li>
<li><a href="#section-resumeHash">resumeHash</a></li>
<li><a href="#section-isMedia">isMedia</a></li>
<li><a href="#section-appType">appType</a></li>
@@ -21,6 +24,8 @@
<li><a href="#section-shortAppName">shortAppName</a></li>
<li><a href="#section-ttsName">ttsName</a></li>
<li><a href="#section-voiceRecognitionCommandNames">voiceRecognitionCommandNames</a></li>
+ <li><a href="#section-dayColorScheme">dayColorScheme</a></li>
+ <li><a href="#section-nightColorScheme">nightColorScheme</a></li>
</ul>
<h3>Overview</h3>
@@ -68,7 +73,38 @@
<dt>appName</dt>
<dd><p>The name of the app.</p></dd>
<dt>appId</dt>
- <dd><p>The appId to be used. This should be registered with the radio&rsquo;s manufacturer.</p></dd>
+ <dd><p>The app id to be used. This should be registered with the head unit&rsquo;s manufacturer.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The lifecycle configuration</p>
+ </div>
+
+ <h3 id="section-+defaultConfigurationWithAppName:fullAppId:">
+ +defaultConfigurationWithAppName:fullAppId:
+ </h3>
+
+ <p>A production configuration that runs using IAP. Additional functionality should be customized on the properties.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">SDLLifecycleConfiguration</span> <span class="o">*</span><span class="p">)</span>
+<span class="nf">defaultConfigurationWithAppName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span>
+ <span class="nf">fullAppId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fullAppId</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="cm">/*not inherited*/</span> <span class="nf">init</span><span class="p">(</span><span class="nv">appName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">fullAppId</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>appName</dt>
+ <dd><p>The name of the app.</p></dd>
+ <dt>fullAppId</dt>
+ <dd><p>The full app id to be used. This should be registered with the head unit&rsquo;s manufacturer. When set, the <code><a href="../Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId">appId</a></code> parameter will be set automatically to the first 10 non-dash characters of the <code><a href="../Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)fullAppId">fullAppId</a></code>.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
@@ -101,7 +137,44 @@
<dt>appName</dt>
<dd><p>The name of the app.</p></dd>
<dt>appId</dt>
- <dd><p>The appId to be used. This should be registered with the radio&rsquo;s manufacturer.</p></dd>
+ <dd><p>The app id to be used. This should be registered with the head unit&rsquo;s manufacturer.</p></dd>
+ <dt>ipAddress</dt>
+ <dd><p>The ip address of the server to connect to</p></dd>
+ <dt>port</dt>
+ <dd><p>The port of the server to connect to</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The lifecycle configuration</p>
+ </div>
+
+ <h3 id="section-+debugConfigurationWithAppName:fullAppId:ipAddress:port:">
+ +debugConfigurationWithAppName:fullAppId:ipAddress:port:
+ </h3>
+
+ <p>A debug configuration that runs using TCP. Additional functionality should be customized on the properties.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">SDLLifecycleConfiguration</span> <span class="o">*</span><span class="p">)</span>
+<span class="nf">debugConfigurationWithAppName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span>
+ <span class="nf">fullAppId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fullAppId</span>
+ <span class="nf">ipAddress</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">ipAddress</span>
+ <span class="nf">port</span><span class="p">:(</span><span class="n">UInt16</span><span class="p">)</span><span class="nv">port</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="cm">/*not inherited*/</span> <span class="nf">init</span><span class="p">(</span><span class="nv">appName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">fullAppId</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">ipAddress</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">port</span><span class="p">:</span> <span class="kt">UInt16</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>appName</dt>
+ <dd><p>The name of the app.</p></dd>
+ <dt>fullAppId</dt>
+ <dd><p>The full app id to be used. This should be registered with the head unit&rsquo;s manufacturer. When set, the <code><a href="../Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId">appId</a></code> parameter will be set automatically to the first 10 non-dash characters of the <code><a href="../Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)fullAppId">fullAppId</a></code>.</p></dd>
<dt>ipAddress</dt>
<dd><p>The ip address of the server to connect to</p></dd>
<dt>port</dt>
@@ -189,7 +262,14 @@
appId
</h3>
- <p>The app id. This must be the same as the app id received from the SDL developer portal or OEM.</p>
+ <p>The app id. This must be the same as the app id received from the SDL developer portal.</p>
+<div class="aside aside-see">
+ <p class="aside-title">See</p>
+ <code><a href="../Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)fullAppId">fullAppId</a></code>
+
+</div>
+
+<p>Required</p>
@@ -203,6 +283,28 @@
+ <h3 id="section-fullAppId">
+ fullAppId
+ </h3>
+
+ <p>The full app id. This must be the same as the full app id received from the SDL developer portal.</p>
+
+<p>Optional</p>
+
+<p>@discussion The <code>fullAppId</code> is used to authenticate apps that connect with head units that implement SDL Core v.5.0 and newer. If connecting with older head units, the <code>fullAppId</code> can be truncated to create the required <code><a href="../Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId">appId</a></code> needed to register the app. The <code><a href="../Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId">appId</a></code> is the first 10 non-dash (<q>-</q>) characters of the <code>fullAppId</code> (e.g. if you have a <code>fullAppId</code> of 123e4567-e89b-12d3-a456-426655440000, the <code><a href="../Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId">appId</a></code> will be 123e4567e8).</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">fullAppId</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fullAppId</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-resumeHash">
resumeHash
</h3>
@@ -386,4 +488,42 @@
+ <h3 id="section-dayColorScheme">
+ dayColorScheme
+ </h3>
+
+ <p>The color scheme to use when the head unit is in a light / day situation.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">dayColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-nightColorScheme">
+ nightColorScheme
+ </h3>
+
+ <p>The color scheme to use when the head unit is in a dark / night situation.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">nightColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLLightCapabilities.html b/docs/Classes/SDLLightCapabilities.html
new file mode 100644
index 000000000..7d83b16e7
--- /dev/null
+++ b/docs/Classes/SDLLightCapabilities.html
@@ -0,0 +1,167 @@
+<h1>SDLLightCapabilities Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithName:">-initWithName:</a></li>
+ <li><a href="#section--initWithName:densityAvailable:colorAvailable:statusAvailable:">-initWithName:densityAvailable:colorAvailable:statusAvailable:</a></li>
+ <li><a href="#section-name">name</a></li>
+ <li><a href="#section-densityAvailable">densityAvailable</a></li>
+ <li><a href="#section-colorAvailable">colorAvailable</a></li>
+ <li><a href="#section-statusAvailable">statusAvailable</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithName:">
+ -initWithName:
+ </h3>
+
+ <p>Constructs a newly allocated SDLLightCapabilities object with the name of the light or group of lights</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">name</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">name</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The name of a light or a group of lights</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLLightCapabilities class</p>
+ </div>
+
+ <h3 id="section--initWithName:densityAvailable:colorAvailable:statusAvailable:">
+ -initWithName:densityAvailable:colorAvailable:statusAvailable:
+ </h3>
+
+ <p>Constructs a newly allocated SDLLightCapabilities object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">name</span>
+ <span class="nf">densityAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">densityAvailable</span>
+ <span class="nf">colorAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">colorAvailable</span>
+ <span class="nf">statusAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">statusAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">name</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">,</span> <span class="nv">densityAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">colorAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">statusAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The name of a light or a group of lights</p></dd>
+ <dt>densityAvailable</dt>
+ <dd><p>light&rsquo;s density can be set remotely</p></dd>
+ <dt>colorAvailable</dt>
+ <dd><p>Light&rsquo;s color can be set remotely by using the RGB color space</p></dd>
+ <dt>statusAvailable</dt>
+ <dd><p>whether status is available</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLLightCapabilities class</p>
+ </div>
+
+ <h3 id="section-name">
+ name
+ </h3>
+
+ <p>@abstract The name of a light or a group of lights</p>
+
+<p>Required, SDLLightName</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">name</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-densityAvailable">
+ densityAvailable
+ </h3>
+
+ <p>@abstract Indicates if the light&rsquo;s density can be set remotely (similar to a dimmer).</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">densityAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">densityAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-colorAvailable">
+ colorAvailable
+ </h3>
+
+ <p>@abstract Indicates if the light&rsquo;s color can be set remotely by using the RGB color space.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">colorAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">colorAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-statusAvailable">
+ statusAvailable
+ </h3>
+
+ <p>@abstract Indicates if the status (ON/OFF) can be set remotely.
+ App shall not use read-only values (RAMP_UP/RAMP_DOWN/UNKNOWN/INVALID) in a setInteriorVehicleData request.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">statusAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">statusAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLLightControlCapabilities.html b/docs/Classes/SDLLightControlCapabilities.html
new file mode 100644
index 000000000..202336d92
--- /dev/null
+++ b/docs/Classes/SDLLightControlCapabilities.html
@@ -0,0 +1,90 @@
+<h1>SDLLightControlCapabilities Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithModuleName:supportedLights:">-initWithModuleName:supportedLights:</a></li>
+ <li><a href="#section-moduleName">moduleName</a></li>
+ <li><a href="#section-supportedLights">supportedLights</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithModuleName:supportedLights:">
+ -initWithModuleName:supportedLights:
+ </h3>
+
+ <p>Constructs a newly allocated SDLLightControlCapabilities object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span>
+ <span class="nf">supportedLights</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightCapabilities.html">SDLLightCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">supportedLights</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">supportedLights</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLLightCapabilities.html">SDLLightCapabilities</a></span><span class="p">])</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>moduleName</dt>
+ <dd><p>friendly name of the light control module</p></dd>
+ <dt>supportedLights</dt>
+ <dd><p>array of available LightCapabilities</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLLightControlCapabilities class</p>
+ </div>
+
+ <h3 id="section-moduleName">
+ moduleName
+ </h3>
+
+ <p>@abstract The short friendly name of the light control module.
+ It should not be used to identify a module by mobile application.</p>
+
+<p>Required, Max String length 100 chars</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-supportedLights">
+ supportedLights
+ </h3>
+
+ <p>@abstract An array of available LightCapabilities that are controllable.</p>
+
+<p>Required, NSArray of type SDLLightCapabilities minsize=<q>1</q> maxsize=<q>100</q></p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightCapabilities.html">SDLLightCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">supportedLights</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">supportedLights</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLLightCapabilities.html">SDLLightCapabilities</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLLightControlData.html b/docs/Classes/SDLLightControlData.html
new file mode 100644
index 000000000..e9c78b9d8
--- /dev/null
+++ b/docs/Classes/SDLLightControlData.html
@@ -0,0 +1,66 @@
+<h1>SDLLightControlData Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithLightStates:">-initWithLightStates:</a></li>
+ <li><a href="#section-lightState">lightState</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithLightStates:">
+ -initWithLightStates:
+ </h3>
+
+ <p>Constructs a newly allocated SDLLightControlData object with lightState</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLightStates</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightState.html">SDLLightState</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">lightState</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lightStates</span> <span class="nv">lightState</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLLightState.html">SDLLightState</a></span><span class="p">])</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>lightState</dt>
+ <dd><p>An array of LightNames and their current or desired status</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLLightControlData class</p>
+ </div>
+
+ <h3 id="section-lightState">
+ lightState
+ </h3>
+
+ <p>@abstract An array of LightNames and their current or desired status.
+ Status of the LightNames that are not listed in the array shall remain unchanged.</p>
+
+<p>Required, NSArray of type SDLLightState minsize=<q>1</q> maxsize=<q>100</q></p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightState.html">SDLLightState</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lightState</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">lightState</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLLightState.html">SDLLightState</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLLightState.html b/docs/Classes/SDLLightState.html
new file mode 100644
index 000000000..54deef752
--- /dev/null
+++ b/docs/Classes/SDLLightState.html
@@ -0,0 +1,203 @@
+<h1>SDLLightState Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithId:status:">-initWithId:status:</a></li>
+ <li><a href="#section--initWithId:status:density:color:">-initWithId:status:density:color:</a></li>
+ <li><a href="#section--initWithId:lightStatus:lightDensity:lightColor:">-initWithId:lightStatus:lightDensity:lightColor:</a></li>
+ <li><a href="#section-id">id</a></li>
+ <li><a href="#section-status">status</a></li>
+ <li><a href="#section-density">density</a></li>
+ <li><a href="#section-color">color</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithId:status:">
+ -initWithId:status:
+ </h3>
+
+ <p>Constructs a newly allocated SDLLightState object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">id</span>
+ <span class="nf">status</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">)</span><span class="nv">status</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">id</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">,</span> <span class="nv">status</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>id</dt>
+ <dd><p>The name of a light or a group of lights</p></dd>
+ <dt>status</dt>
+ <dd><p>Reflects the status of Light.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLLightState class</p>
+ </div>
+
+ <h3 id="section--initWithId:status:density:color:">
+ -initWithId:status:density:color:
+ </h3>
+
+ <p>Constructs a newly allocated SDLLightState object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">id</span>
+ <span class="nf">status</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">)</span><span class="nv">status</span>
+ <span class="nf">density</span><span class="p">:(</span><span class="kt">double</span><span class="p">)</span><span class="nv">density</span>
+ <span class="nf">color</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">color</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">id</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">,</span> <span class="nv">status</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">,</span> <span class="nv">density</span><span class="p">:</span> <span class="kt">Double</span><span class="p">,</span> <span class="nv">color</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>id</dt>
+ <dd><p>The name of a light or a group of lights</p></dd>
+ <dt>status</dt>
+ <dd><p>Reflects the status of Light.</p></dd>
+ <dt>density</dt>
+ <dd><p>Reflects the density of Light.</p></dd>
+ <dt>color</dt>
+ <dd><p>Reflects the color of Light.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLLightState class</p>
+ </div>
+
+ <h3 id="section--initWithId:lightStatus:lightDensity:lightColor:">
+ -initWithId:lightStatus:lightDensity:lightColor:
+ </h3>
+
+ <p>Constructs a newly allocated SDLLightState object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">)</span><span class="nv">id</span>
+ <span class="nf">lightStatus</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">)</span><span class="nv">lightStatus</span>
+ <span class="nf">lightDensity</span><span class="p">:(</span><span class="kt">double</span><span class="p">)</span><span class="nv">lightDensity</span>
+ <span class="nf">lightColor</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">lightColor</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">id</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span><span class="p">,</span> <span class="nv">lightStatus</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span><span class="p">,</span> <span class="nv">lightDensity</span><span class="p">:</span> <span class="kt">Double</span><span class="p">,</span> <span class="nv">lightColor</span><span class="p">:</span> <span class="kt">UIColor</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>id</dt>
+ <dd><p>The name of a light or a group of lights</p></dd>
+ <dt>lightStatus</dt>
+ <dd><p>Reflects the status of Light.</p></dd>
+ <dt>lightDensity</dt>
+ <dd><p>Reflects the density of Light.</p></dd>
+ <dt>lightColor</dt>
+ <dd><p>Reflects the color of Light.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLLightState class</p>
+ </div>
+
+ <h3 id="section-id">
+ id
+ </h3>
+
+ <p>@abstract The name of a light or a group of lights</p>
+
+<p>Required, SDLLightName</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">id</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-status">
+ status
+ </h3>
+
+ <p>@abstract Reflects the status of Light.</p>
+
+<p>Required, SDLLightStatus</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">_Nonnull</span> <span class="n">status</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">status</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-density">
+ density
+ </h3>
+
+ <p>@abstract Reflects the density of Light.</p>
+
+<p>Optional, Float type with minValue: 0 maxValue:1</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">density</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">density</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-color">
+ color
+ </h3>
+
+ <p>@abstract Reflects the color of Light.</p>
+
+<p>Optional, SDLLightStatus</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">color</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">color</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLListFilesResponse.html b/docs/Classes/SDLListFilesResponse.html
index d38275533..772828c83 100644
--- a/docs/Classes/SDLListFilesResponse.html
+++ b/docs/Classes/SDLListFilesResponse.html
@@ -43,12 +43,12 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">spaceAvailable</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">spaceAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLLockScreenConfiguration.html b/docs/Classes/SDLLockScreenConfiguration.html
index c92ae2525..68238843e 100644
--- a/docs/Classes/SDLLockScreenConfiguration.html
+++ b/docs/Classes/SDLLockScreenConfiguration.html
@@ -25,7 +25,16 @@
showInOptionalState
</h3>
- <p>Whether or not the lock screen should be shown in the <q>lock screen optional</q> state. Defaults to &lsquo;NO&rsquo;.</p>
+ <p>Whether or not the lock screen should be shown in the <q>lock screen optional</q> state. Defaults to false.</p>
+
+<p>@discussion In order for the <q>lock screen optional</q> state to occur, the following must be true:</p>
+
+<ol>
+<li>The app should have received at least 1 driver distraction notification (i.e. a <code>OnDriverDistraction</code> notification) from SDL Core. Older versions of Core did not send a notification immediately on connection.</li>
+<li>The driver is not distracted (i.e. the last <code>OnDriverDistraction</code> notification received was for a driver distraction state off).</li>
+<li>The <code>hmiLevel</code> can not be <code>NONE</code>.</li>
+<li>If the <code>hmiLevel</code> is currently <code>BACKGROUND</code> then the previous <code>hmiLevel</code> should have been <code>FULL</code> or <code>LIMITED</code> (i.e. the user should have interacted with app before it was backgrounded).</li>
+</ol>
diff --git a/docs/Classes/SDLMassageCushionFirmness.html b/docs/Classes/SDLMassageCushionFirmness.html
new file mode 100644
index 000000000..1fd304e49
--- /dev/null
+++ b/docs/Classes/SDLMassageCushionFirmness.html
@@ -0,0 +1,91 @@
+<h1>SDLMassageCushionFirmness Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithMassageCushion:firmness:">-initWithMassageCushion:firmness:</a></li>
+ <li><a href="#section-cushion">cushion</a></li>
+ <li><a href="#section-firmness">firmness</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>The intensity or firmness of a cushion.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithMassageCushion:firmness:">
+ -initWithMassageCushion:firmness:
+ </h3>
+
+ <p>Constructs a newly allocated SDLMassageCushionFirmness object with cushion and firmness</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithMassageCushion</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span><span class="p">)</span><span class="nv">cushion</span>
+ <span class="nf">firmness</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">firmness</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">massageCushion</span> <span class="nv">cushion</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span><span class="p">,</span> <span class="nv">firmness</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>cushion</dt>
+ <dd><p>The cushion type for a multi-contour massage seat</p></dd>
+ <dt>firmness</dt>
+ <dd><p>The firmness value for the multi-contour massage seat, MinValue: 0 MaxValue: 100</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLMassageCushionFirmness class</p>
+ </div>
+
+ <h3 id="section-cushion">
+ cushion
+ </h3>
+
+ <p>@abstract cushion of a multi-contour massage seat.</p>
+<div class="aside aside-see">
+ <p class="aside-title">See</p>
+ SDLMassageCushion
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="n">_Nonnull</span> <span class="n">cushion</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">cushion</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-firmness">
+ firmness
+ </h3>
+
+ <p>@abstract zone of a multi-contour massage seat.</p>
+
+<p>Required, MinValue: 0 MaxValue: 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">firmness</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">firmness</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLMassageModeData.html b/docs/Classes/SDLMassageModeData.html
new file mode 100644
index 000000000..f72f79e35
--- /dev/null
+++ b/docs/Classes/SDLMassageModeData.html
@@ -0,0 +1,82 @@
+<h1>SDLMassageModeData Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithMassageMode:massageZone:">-initWithMassageMode:massageZone:</a></li>
+ <li><a href="#section-massageMode">massageMode</a></li>
+ <li><a href="#section-massageZone">massageZone</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Specify the mode of a massage zone.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithMassageMode:massageZone:">
+ -initWithMassageMode:massageZone:
+ </h3>
+
+ <p>@abstract Constructs a newly allocated SDLMassageModeData object with massageMode and massageZone</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithMassageMode</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span><span class="p">)</span><span class="nv">massageMode</span>
+ <span class="nf">massageZone</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span><span class="p">)</span><span class="nv">massageZone</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">massageMode</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span><span class="p">,</span> <span class="nv">massageZone</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section-massageMode">
+ massageMode
+ </h3>
+
+ <p>@abstract mode of a massage zone</p>
+<div class="aside aside-see">
+ <p class="aside-title">See</p>
+ SDLMassageMode
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span> <span class="n">_Nonnull</span> <span class="n">massageMode</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">massageMode</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-massageZone">
+ massageZone
+ </h3>
+
+ <p>@abstract zone of a multi-contour massage seat.</p>
+<div class="aside aside-see">
+ <p class="aside-title">See</p>
+ SDLMassageZone
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span> <span class="n">_Nonnull</span> <span class="n">massageZone</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">massageZone</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLMenuCell.html b/docs/Classes/SDLMenuCell.html
index bd379a6fb..28a65362c 100644
--- a/docs/Classes/SDLMenuCell.html
+++ b/docs/Classes/SDLMenuCell.html
@@ -10,6 +10,7 @@
<li><a href="#section-subCells">subCells</a></li>
<li><a href="#section--initWithTitle:icon:voiceCommands:handler:">-initWithTitle:icon:voiceCommands:handler:</a></li>
<li><a href="#section--initWithTitle:subCells:">-initWithTitle:subCells:</a></li>
+ <li><a href="#section--initWithTitle:icon:subCells:">-initWithTitle:icon:subCells:</a></li>
</ul>
<h3>Overview</h3>
@@ -114,12 +115,16 @@
-initWithTitle:icon:voiceCommands:handler:
</h3>
- <p>Undocumented</p>
+ <p>Create a menu cell that has no subcells.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">icon</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">icon</span> <span class="nf">voiceCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">voiceCommands</span> <span class="nf">handler</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler">SDLMenuCellSelectionHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span>
+ <span class="nf">icon</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">icon</span>
+<span class="nf">voiceCommands</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">voiceCommands</span>
+ <span class="nf">handler</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler">SDLMenuCellSelectionHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -127,17 +132,34 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>title</dt>
+ <dd><p>The cell&rsquo;s primary text</p></dd>
+ <dt>icon</dt>
+ <dd><p>The cell&rsquo;s image</p></dd>
+ <dt>voiceCommands</dt>
+ <dd><p>Voice commands that will activate the menu cell</p></dd>
+ <dt>handler</dt>
+ <dd><p>The code that will be run when the menu cell is selected</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The menu cell</p>
+ </div>
<h3 id="section--initWithTitle:subCells:">
-initWithTitle:subCells:
</h3>
- <p>Undocumented</p>
+ <p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span> <span class="nf">subCells</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">subCells</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span>
+ <span class="nf">subCells</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">subCells</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -145,5 +167,50 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>title</dt>
+ <dd><p>The cell&rsquo;s primary text</p></dd>
+ <dt>subCells</dt>
+ <dd><p>The subcells that will appear when the cell is selected</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The menu cell</p>
+ </div>
+
+ <h3 id="section--initWithTitle:icon:subCells:">
+ -initWithTitle:icon:subCells:
+ </h3>
+
+ <p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithTitle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">title</span>
+ <span class="nf">icon</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">icon</span>
+ <span class="nf">subCells</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">subCells</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">title</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">icon</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span><span class="p">?,</span> <span class="nv">subCells</span><span class="p">:</span> <span class="p">[</span><span class="kt">SDLMenuCell</span><span class="p">])</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>title</dt>
+ <dd><p>The cell&rsquo;s primary text</p></dd>
+ <dt>icon</dt>
+ <dd><p>The cell&rsquo;s image</p></dd>
+ <dt>subCells</dt>
+ <dd><p>The subcells that will appear when the cell is selected</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The menu cell</p>
+ </div>
</section>
diff --git a/docs/Classes/SDLModuleData.html b/docs/Classes/SDLModuleData.html
index 831ee4666..875abc02e 100644
--- a/docs/Classes/SDLModuleData.html
+++ b/docs/Classes/SDLModuleData.html
@@ -5,9 +5,17 @@
<ul>
<li><a href="#section--initWithRadioControlData:">-initWithRadioControlData:</a></li>
<li><a href="#section--initWithClimateControlData:">-initWithClimateControlData:</a></li>
+ <li><a href="#section--initWithAudioControlData:">-initWithAudioControlData:</a></li>
+ <li><a href="#section--initWithLightControlData:">-initWithLightControlData:</a></li>
+ <li><a href="#section--initWithHMISettingsControlData:">-initWithHMISettingsControlData:</a></li>
+ <li><a href="#section--initWithSeatControlData:">-initWithSeatControlData:</a></li>
<li><a href="#section-moduleType">moduleType</a></li>
<li><a href="#section-radioControlData">radioControlData</a></li>
<li><a href="#section-climateControlData">climateControlData</a></li>
+ <li><a href="#section-seatControlData">seatControlData</a></li>
+ <li><a href="#section-audioControlData">audioControlData</a></li>
+ <li><a href="#section-lightControlData">lightControlData</a></li>
+ <li><a href="#section-hmiSettingsControlData">hmiSettingsControlData</a></li>
</ul>
<h3>Overview</h3>
@@ -20,12 +28,13 @@
-initWithRadioControlData:
</h3>
- <p>Undocumented</p>
+ <p>Constructs a newly allocated SDLModuleData object with radio control data</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithRadioControlData</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLRadioControlData.html">SDLRadioControlData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">radioControlData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithRadioControlData</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLRadioControlData.html">SDLRadioControlData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">radioControlData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -33,17 +42,27 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>radioControlData</dt>
+ <dd><p>The radio control data</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLModuleData class</p>
+ </div>
<h3 id="section--initWithClimateControlData:">
-initWithClimateControlData:
</h3>
- <p>Undocumented</p>
+ <p>Constructs a newly allocated SDLModuleData object with climate control data</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithClimateControlData</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLClimateControlData.html">SDLClimateControlData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">climateControlData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithClimateControlData</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLClimateControlData.html">SDLClimateControlData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">climateControlData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -51,6 +70,127 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>climateControlData</dt>
+ <dd><p>The climate control data</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLModuleData class</p>
+ </div>
+
+ <h3 id="section--initWithAudioControlData:">
+ -initWithAudioControlData:
+ </h3>
+
+ <p>Constructs a newly allocated SDLModuleData object with audio control data</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithAudioControlData</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLAudioControlData.html">SDLAudioControlData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">audioControlData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">audioControlData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLAudioControlData.html">SDLAudioControlData</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>audioControlData</dt>
+ <dd><p>The audio control data</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLModuleData class</p>
+ </div>
+
+ <h3 id="section--initWithLightControlData:">
+ -initWithLightControlData:
+ </h3>
+
+ <p>Constructs a newly allocated SDLModuleData object with light control data</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLightControlData</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLightControlData.html">SDLLightControlData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lightControlData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">lightControlData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLightControlData.html">SDLLightControlData</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>lightControlData</dt>
+ <dd><p>The light control data</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLModuleData class</p>
+ </div>
+
+ <h3 id="section--initWithHMISettingsControlData:">
+ -initWithHMISettingsControlData:
+ </h3>
+
+ <p>Constructs a newly allocated SDLModuleData object with hmi settings data</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithHMISettingsControlData</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLHMISettingsControlData.html">SDLHMISettingsControlData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">hmiSettingsControlData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">hmiSettingsControlData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLHMISettingsControlData.html">SDLHMISettingsControlData</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>hmiSettingsControlData</dt>
+ <dd><p>The hmi settings data</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLModuleData class</p>
+ </div>
+
+ <h3 id="section--initWithSeatControlData:">
+ -initWithSeatControlData:
+ </h3>
+
+ <p>Constructs a newly allocated SDLModuleData object with seat control data</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithSeatControlData</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLSeatControlData.html">SDLSeatControlData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">seatControlData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">seatControlData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLSeatControlData.html">SDLSeatControlData</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>seatControlData</dt>
+ <dd><p>The seat control data</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLModuleData class</p>
+ </div>
<h3 id="section-moduleType">
moduleType
@@ -116,4 +256,88 @@
+ <h3 id="section-seatControlData">
+ seatControlData
+ </h3>
+
+ <p>The seat control data</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLSeatControlData.html">SDLSeatControlData</a></span> <span class="o">*</span><span class="n">seatControlData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">seatControlData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLSeatControlData.html">SDLSeatControlData</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-audioControlData">
+ audioControlData
+ </h3>
+
+ <p>The audio control data</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLAudioControlData.html">SDLAudioControlData</a></span> <span class="o">*</span><span class="n">audioControlData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">audioControlData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLAudioControlData.html">SDLAudioControlData</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-lightControlData">
+ lightControlData
+ </h3>
+
+ <p>The light control data</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLLightControlData.html">SDLLightControlData</a></span> <span class="o">*</span><span class="n">lightControlData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">lightControlData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLightControlData.html">SDLLightControlData</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-hmiSettingsControlData">
+ hmiSettingsControlData
+ </h3>
+
+ <p>The hmi control data</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLHMISettingsControlData.html">SDLHMISettingsControlData</a></span> <span class="o">*</span><span class="n">hmiSettingsControlData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">hmiSettingsControlData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLHMISettingsControlData.html">SDLHMISettingsControlData</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLOnHMIStatus.html b/docs/Classes/SDLOnHMIStatus.html
index ebe24a279..02095e7b2 100644
--- a/docs/Classes/SDLOnHMIStatus.html
+++ b/docs/Classes/SDLOnHMIStatus.html
@@ -5,6 +5,7 @@
<ul>
<li><a href="#section-hmiLevel">hmiLevel</a></li>
<li><a href="#section-audioStreamingState">audioStreamingState</a></li>
+ <li><a href="#section-videoStreamingState">videoStreamingState</a></li>
<li><a href="#section-systemContext">systemContext</a></li>
</ul>
@@ -62,6 +63,25 @@
+ <h3 id="section-videoStreamingState">
+ videoStreamingState
+ </h3>
+
+ <p>Current availablility of video streaming for the application. When this parameter is NOT_STREAMABLE, the application must stop video streaming to SDL.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Type Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span> <span class="n">videoStreamingState</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">videoStreamingState</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-systemContext">
systemContext
</h3>
diff --git a/docs/Classes/SDLOnRCStatus.html b/docs/Classes/SDLOnRCStatus.html
new file mode 100644
index 000000000..e1a9bcb3e
--- /dev/null
+++ b/docs/Classes/SDLOnRCStatus.html
@@ -0,0 +1,94 @@
+<h1>SDLOnRCStatus Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-allocatedModules">allocatedModules</a></li>
+ <li><a href="#section-freeModules">freeModules</a></li>
+ <li><a href="#section-allowed">allowed</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>OnRCStatus notifications to all registered mobile applications and the HMI whenever
+ (1) SDL allocates a module to an application or
+ (2) it de-allocates a module from an application, or
+ (3) an application registers with SDL</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-allocatedModules">
+ allocatedModules
+ </h3>
+
+ <p>@abstract Contains a list (zero or more) of module types that
+ are allocated to the application.</p>
+
+<p>Required, Array of SDLModuleData, Array size 0 - 100</p>
+<div class="aside aside-see">
+ <p class="aside-title">See</p>
+ SDLPermissionItem
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">allocatedModules</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">allocatedModules</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-freeModules">
+ freeModules
+ </h3>
+
+ <p>@abstract Contains a list (zero or more) of module types that are free to access for the application.</p>
+
+<p>Required, Array of SDLModuleData, Array size 0 - 100</p>
+<div class="aside aside-see">
+ <p class="aside-title">See</p>
+ SDLPermissionItem
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">freeModules</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">freeModules</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-allowed">
+ allowed
+ </h3>
+
+ <p>Issued by SDL to notify the application about remote control status change on SDL
+If <q>true</q> - RC is allowed; if <q>false</q> - RC is disallowed.</p>
+
+<p>optional, Boolean, default Value = false</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">allowed</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">allowed</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLOnSystemRequest.html b/docs/Classes/SDLOnSystemRequest.html
index 19c49de31..d8c0b29a2 100644
--- a/docs/Classes/SDLOnSystemRequest.html
+++ b/docs/Classes/SDLOnSystemRequest.html
@@ -4,6 +4,7 @@
<ul>
<li><a href="#section-requestType">requestType</a></li>
+ <li><a href="#section-requestSubType">requestSubType</a></li>
<li><a href="#section-url">url</a></li>
<li><a href="#section-timeout">timeout</a></li>
<li><a href="#section-fileType">fileType</a></li>
@@ -35,6 +36,26 @@
+ <h3 id="section-requestSubType">
+ requestSubType
+ </h3>
+
+ <p>A request subType used when the <code><a href="../Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType">requestType</a></code> is <code>OEM_SPECIFIC</code>.</p>
+
+<p>Optional, Max length 255</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">requestSubType</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">requestSubType</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-url">
url
</h3>
diff --git a/docs/Classes/SDLOnVehicleData.html b/docs/Classes/SDLOnVehicleData.html
index ea8090602..4f0dee901 100644
--- a/docs/Classes/SDLOnVehicleData.html
+++ b/docs/Classes/SDLOnVehicleData.html
@@ -8,6 +8,7 @@
<li><a href="#section-rpm">rpm</a></li>
<li><a href="#section-fuelLevel">fuelLevel</a></li>
<li><a href="#section-fuelLevel_State">fuelLevel_State</a></li>
+ <li><a href="#section-fuelRange">fuelRange</a></li>
<li><a href="#section-instantFuelConsumption">instantFuelConsumption</a></li>
<li><a href="#section-externalTemperature">externalTemperature</a></li>
<li><a href="#section-vin">vin</a></li>
@@ -20,6 +21,7 @@
<li><a href="#section-driverBraking">driverBraking</a></li>
<li><a href="#section-wiperStatus">wiperStatus</a></li>
<li><a href="#section-headLampStatus">headLampStatus</a></li>
+ <li><a href="#section-engineOilLife">engineOilLife</a></li>
<li><a href="#section-engineTorque">engineTorque</a></li>
<li><a href="#section-accPedalPosition">accPedalPosition</a></li>
<li><a href="#section-steeringWheelAngle">steeringWheelAngle</a></li>
@@ -28,6 +30,8 @@
<li><a href="#section-emergencyEvent">emergencyEvent</a></li>
<li><a href="#section-clusterModeStatus">clusterModeStatus</a></li>
<li><a href="#section-myKey">myKey</a></li>
+ <li><a href="#section-electronicParkBrakeStatus">electronicParkBrakeStatus</a></li>
+ <li><a href="#section-turnSignal">turnSignal</a></li>
</ul>
<h3>Overview</h3>
@@ -129,6 +133,27 @@
+ <h3 id="section-fuelRange">
+ fuelRange
+ </h3>
+
+ <p>The estimate range in KM the vehicle can travel based on fuel level and consumption</p>
+
+<p>Optional, Array of length 0 - 100, of SDLFuelRange</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLFuelRange.html">SDLFuelRange</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLFuelRange.html">SDLFuelRange</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-instantFuelConsumption">
instantFuelConsumption
</h3>
@@ -350,6 +375,25 @@
+ <h3 id="section-engineOilLife">
+ engineOilLife
+ </h3>
+
+ <p>The estimated percentage (0% - 100%) of remaining oil life of the engine</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-engineTorque">
engineTorque
</h3>
@@ -499,4 +543,41 @@
+ <h3 id="section-electronicParkBrakeStatus">
+ electronicParkBrakeStatus
+ </h3>
+
+ <p>The status of the electronic parking brake</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-turnSignal">
+ turnSignal
+ </h3>
+
+ <p>The status of the turn signal</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="n">turnSignal</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLPutFile.html b/docs/Classes/SDLPutFile.html
index d4d7f2229..9350591e7 100644
--- a/docs/Classes/SDLPutFile.html
+++ b/docs/Classes/SDLPutFile.html
@@ -3,46 +3,67 @@
<h3>Section Contents</h3>
<ul>
+ <li><a href="#section--init">-init</a></li>
<li><a href="#section--initWithFileName:fileType:">-initWithFileName:fileType:</a></li>
<li><a href="#section--initWithFileName:fileType:persistentFile:">-initWithFileName:fileType:persistentFile:</a></li>
<li><a href="#section--initWithFileName:fileType:persistentFile:systemFile:offset:length:">-initWithFileName:fileType:persistentFile:systemFile:offset:length:</a></li>
+ <li><a href="#section--initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:">-initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:</a></li>
+ <li><a href="#section--initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:">-initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:</a></li>
<li><a href="#section-syncFileName">syncFileName</a></li>
<li><a href="#section-fileType">fileType</a></li>
<li><a href="#section-persistentFile">persistentFile</a></li>
<li><a href="#section-systemFile">systemFile</a></li>
<li><a href="#section-offset">offset</a></li>
<li><a href="#section-length">length</a></li>
+ <li><a href="#section-crc">crc</a></li>
</ul>
<h3>Overview</h3>
-<p>Used to push a binary data onto the SDL module from a mobile device, such as
- icons and album art</p>
+<p>Used to push a binary data onto the SDL module from a mobile device, such as icons and album art.</p>
<p>Since SmartDeviceLink 2.0</p>
<div class="aside aside-see">
<p class="aside-title">See</p>
- SDLDeleteFile
-
-</div>
-<div class="aside aside-see">
- <p class="aside-title">See</p>
- SDLListFiles
+ SDLDeleteFile, SDLListFiles
</div>
<section class="section task-group-section">
+ <h3 id="section--init">
+ -init
+ </h3>
+
+ <p>Init</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="n">init</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">()</span></code></pre>
+
+
+
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLPutFile object</p>
+ </div>
+
<h3 id="section--initWithFileName:fileType:">
-initWithFileName:fileType:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for creating a putfile with a name and file format.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFileName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span> <span class="nf">fileType</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">)</span><span class="nv">fileType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFileName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span>
+ <span class="nf">fileType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">)</span><span class="nv">fileType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -50,17 +71,30 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>fileName</dt>
+ <dd><p>The file&rsquo;s name</p></dd>
+ <dt>fileType</dt>
+ <dd><p>The file&rsquo;s format</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLPutFile object</p>
+ </div>
<h3 id="section--initWithFileName:fileType:persistentFile:">
-initWithFileName:fileType:persistentFile:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for creating a putfile with a name, file format, and persistance.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFileName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span> <span class="nf">fileType</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">)</span><span class="nv">fileType</span> <span class="nf">persistentFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">persistentFile</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFileName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span>
+ <span class="nf">fileType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">)</span><span class="nv">fileType</span>
+ <span class="nf">persistentFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">persistentFile</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -68,17 +102,35 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>fileName</dt>
+ <dd><p>The file&rsquo;s name</p></dd>
+ <dt>fileType</dt>
+ <dd><p>The file&rsquo;s format</p></dd>
+ <dt>persistentFile</dt>
+ <dd><p>Whether or not the image should persist between ignition cycles</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLPutFile object</p>
+ </div>
<h3 id="section--initWithFileName:fileType:persistentFile:systemFile:offset:length:">
-initWithFileName:fileType:persistentFile:systemFile:offset:length:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for creating a putfile that is part of a multiple frame payload.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFileName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span> <span class="nf">fileType</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">)</span><span class="nv">fileType</span> <span class="nf">persistentFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">persistentFile</span> <span class="nf">systemFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">systemFile</span> <span class="nf">offset</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">offset</span> <span class="nf">length</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">length</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFileName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span>
+ <span class="nf">fileType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">)</span><span class="nv">fileType</span>
+ <span class="nf">persistentFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">persistentFile</span>
+ <span class="nf">systemFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">systemFile</span>
+ <span class="nf">offset</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">offset</span>
+ <span class="nf">length</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">length</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -86,14 +138,123 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>fileName</dt>
+ <dd><p>The file&rsquo;s name</p></dd>
+ <dt>fileType</dt>
+ <dd><p>The file&rsquo;s format</p></dd>
+ <dt>persistentFile</dt>
+ <dd><p>Whether or not the image should persist between ignition cycles</p></dd>
+ <dt>systemFile</dt>
+ <dd><p>Whether or not the file is meant to be passed through Core to elsewhere on the system</p></dd>
+ <dt>offset</dt>
+ <dd><p>Offset in bytes for resuming partial data chunks</p></dd>
+ <dt>length</dt>
+ <dd><p>Length in bytes for resuming partial data chunks</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLPutFile object</p>
+ </div>
+
+ <h3 id="section--initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:">
+ -initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:
+ </h3>
+
+ <p>Convenience init for creating a putfile that is part of a multiple frame payload.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFileName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span>
+ <span class="nf">fileType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">)</span><span class="nv">fileType</span>
+ <span class="nf">persistentFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">persistentFile</span>
+ <span class="nf">systemFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">systemFile</span>
+ <span class="nf">offset</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">offset</span>
+ <span class="nf">length</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">length</span>
+ <span class="nf">crc</span><span class="p">:(</span><span class="n">UInt64</span><span class="p">)</span><span class="nv">crc</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">fileName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">fileType</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">,</span> <span class="nv">persistentFile</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">systemFile</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">offset</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">length</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">crc</span><span class="p">:</span> <span class="kt">UInt64</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>fileName</dt>
+ <dd><p>The file&rsquo;s name</p></dd>
+ <dt>fileType</dt>
+ <dd><p>The file&rsquo;s format</p></dd>
+ <dt>persistentFile</dt>
+ <dd><p>Whether or not the image should persist between ignition cycles</p></dd>
+ <dt>systemFile</dt>
+ <dd><p>Whether or not the file is meant to be passed through Core to elsewhere on the system</p></dd>
+ <dt>offset</dt>
+ <dd><p>Offset in bytes for resuming partial data chunks</p></dd>
+ <dt>length</dt>
+ <dd><p>Length in bytes for resuming partial data chunks</p></dd>
+ <dt>crc</dt>
+ <dd><p>Checksum of the bulk data. Used by Core to check data integrity</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLPutFile object</p>
+ </div>
+
+ <h3 id="section--initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:">
+ -initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:
+ </h3>
+
+ <p>Convenience init for creating a putfile that is part of a multiple frame payload. A CRC checksum is calculated for the bulk data.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFileName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span>
+ <span class="nf">fileType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">)</span><span class="nv">fileType</span>
+ <span class="nf">persistentFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">persistentFile</span>
+ <span class="nf">systemFile</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">systemFile</span>
+ <span class="nf">offset</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">offset</span>
+ <span class="nf">length</span><span class="p">:(</span><span class="n">UInt32</span><span class="p">)</span><span class="nv">length</span>
+ <span class="nf">bulkData</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSData</span> <span class="o">*</span><span class="p">)</span><span class="nv">bulkData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">fileName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">fileType</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">,</span> <span class="nv">persistentFile</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">systemFile</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">offset</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">length</span><span class="p">:</span> <span class="kt">UInt32</span><span class="p">,</span> <span class="nv">bulkData</span><span class="p">:</span> <span class="kt">Data</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>fileName</dt>
+ <dd><p>The file&rsquo;s name</p></dd>
+ <dt>fileType</dt>
+ <dd><p>The file&rsquo;s format</p></dd>
+ <dt>persistentFile</dt>
+ <dd><p>Whether or not the image should persist between ignition cycles</p></dd>
+ <dt>systemFile</dt>
+ <dd><p>Whether or not the file is meant to be passed through Core to elsewhere on the system</p></dd>
+ <dt>offset</dt>
+ <dd><p>Offset in bytes for resuming partial data chunks</p></dd>
+ <dt>length</dt>
+ <dd><p>Length in bytes for resuming partial data chunks</p></dd>
+ <dt>bulkData</dt>
+ <dd><p>Data being sent in the putfile</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLPutFile object</p>
+ </div>
<h3 id="section-syncFileName">
syncFileName
</h3>
- <p>A file reference name</p>
+ <p>File reference name</p>
-<p>Required, maxlength 255 characters</p>
+<p>Required, max length 255 characters</p>
@@ -131,13 +292,7 @@
persistentFile
</h3>
- <p>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</p>
+ <p>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.</p>
<p>Boolean, Optional, default = NO</p>
@@ -214,4 +369,24 @@
+ <h3 id="section-crc">
+ crc
+ </h3>
+
+ <p>Additional CRC32 checksum to protect data integrity up to 512 Mbits.</p>
+
+<p>Integer, Optional, 0 - 4,294,967,295</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">crc</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">crc</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLPutFileResponse.html b/docs/Classes/SDLPutFileResponse.html
index 5ff4fc094..ae9bbf73d 100644
--- a/docs/Classes/SDLPutFileResponse.html
+++ b/docs/Classes/SDLPutFileResponse.html
@@ -23,12 +23,12 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">spaceAvailable</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">spaceAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLRGBColor.html b/docs/Classes/SDLRGBColor.html
new file mode 100644
index 000000000..a5469ba26
--- /dev/null
+++ b/docs/Classes/SDLRGBColor.html
@@ -0,0 +1,141 @@
+<h1>SDLRGBColor Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithRed:green:blue:">-initWithRed:green:blue:</a></li>
+ <li><a href="#section--initWithColor:">-initWithColor:</a></li>
+ <li><a href="#section-red">red</a></li>
+ <li><a href="#section-green">green</a></li>
+ <li><a href="#section-blue">blue</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithRed:green:blue:">
+ -initWithRed:green:blue:
+ </h3>
+
+ <p>Create an SDL color object with red / green / blue values between 0-255</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithRed</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">red</span>
+ <span class="nf">green</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">green</span>
+ <span class="nf">blue</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">blue</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">red</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">green</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">blue</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>red</dt>
+ <dd><p>The red value of the color</p></dd>
+ <dt>green</dt>
+ <dd><p>The green value of the color</p></dd>
+ <dt>blue</dt>
+ <dd><p>The blue value of the color</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The color</p>
+ </div>
+
+ <h3 id="section--initWithColor:">
+ -initWithColor:
+ </h3>
+
+ <p>Create an SDL color object with a UIColor object.</p>
+<div class="aside aside-warning">
+ <p class="aside-title">Warning</p>
+ <p>The alpha color of the UIColor object will be ignored</p>
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithColor</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">color</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">color</span><span class="p">:</span> <span class="kt">UIColor</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>color</dt>
+ <dd><p>The UIColor object to base this color on</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The color</p>
+ </div>
+
+ <h3 id="section-red">
+ red
+ </h3>
+
+ <p>The red value of the RGB color
+Required, Integer, 0-255</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">red</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">red</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-green">
+ green
+ </h3>
+
+ <p>The green value of the RGB color
+Required, Integer, 0-255</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">green</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">green</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-blue">
+ blue
+ </h3>
+
+ <p>The blue value of the RGB color
+Required, Integer, 0-255</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">blue</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">blue</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLRadioControlCapabilities.html b/docs/Classes/SDLRadioControlCapabilities.html
index 2bfe9a0ac..6ebaaef9e 100644
--- a/docs/Classes/SDLRadioControlCapabilities.html
+++ b/docs/Classes/SDLRadioControlCapabilities.html
@@ -4,6 +4,7 @@
<ul>
<li><a href="#section--initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:">-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:</a></li>
+ <li><a href="#section--initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:">-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:</a></li>
<li><a href="#section-moduleName">moduleName</a></li>
<li><a href="#section-radioEnableAvailable">radioEnableAvailable</a></li>
<li><a href="#section-radioBandAvailable">radioBandAvailable</a></li>
@@ -14,6 +15,9 @@
<li><a href="#section-stateAvailable">stateAvailable</a></li>
<li><a href="#section-signalStrengthAvailable">signalStrengthAvailable</a></li>
<li><a href="#section-signalChangeThresholdAvailable">signalChangeThresholdAvailable</a></li>
+ <li><a href="#section-hdRadioEnableAvailable">hdRadioEnableAvailable</a></li>
+ <li><a href="#section-siriusXMRadioAvailable">siriusXMRadioAvailable</a></li>
+ <li><a href="#section-sisDataAvailable">sisDataAvailable</a></li>
</ul>
<h3>Overview</h3>
@@ -26,12 +30,21 @@
-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:
</h3>
- <p>Undocumented</p>
+ <p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span> <span class="nf">radioEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioEnableAvailable</span> <span class="nf">radioBandAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioBandAvailable</span> <span class="nf">radioFrequencyAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioFrequencyAvailable</span> <span class="nf">hdChannelAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">hdChannelAvailable</span> <span class="nf">rdsDataAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rdsDataAvailable</span> <span class="nf">availableHDsAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">availableHDsAvailable</span> <span class="nf">stateAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">stateAvailable</span> <span class="nf">signalStrengthAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">signalStrengthAvailable</span> <span class="nf">signalChangeThresholdAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">signalChangeThresholdAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span>
+ <span class="nf">radioEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioEnableAvailable</span>
+ <span class="nf">radioBandAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioBandAvailable</span>
+ <span class="nf">radioFrequencyAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioFrequencyAvailable</span>
+ <span class="nf">hdChannelAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">hdChannelAvailable</span>
+ <span class="nf">rdsDataAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rdsDataAvailable</span>
+ <span class="nf">availableHDsAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">availableHDsAvailable</span>
+ <span class="nf">stateAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">stateAvailable</span>
+ <span class="nf">signalStrengthAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">signalStrengthAvailable</span>
+ <span class="nf">signalChangeThresholdAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">signalChangeThresholdAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -39,12 +52,102 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>moduleName</dt>
+ <dd><p>The short friendly name of the radio control module.</p></dd>
+ <dt>radioEnableAvailable</dt>
+ <dd><p>Availability of the control of enable/disable radio.</p></dd>
+ <dt>radioBandAvailable</dt>
+ <dd><p>Availability of the control of radio band.</p></dd>
+ <dt>radioFrequencyAvailable</dt>
+ <dd><p>Availability of the control of radio frequency.</p></dd>
+ <dt>hdChannelAvailable</dt>
+ <dd><p>Availability of the control of HD radio channel.</p></dd>
+ <dt>rdsDataAvailable</dt>
+ <dd><p>Availability of the getting Radio Data System (RDS) data.</p></dd>
+ <dt>availableHDsAvailable</dt>
+ <dd><p>Availability of the getting the number of available HD channels.</p></dd>
+ <dt>stateAvailable</dt>
+ <dd><p>Availability of the getting the Radio state.</p></dd>
+ <dt>signalStrengthAvailable</dt>
+ <dd><p>Availability of the getting the signal strength.</p></dd>
+ <dt>signalChangeThresholdAvailable</dt>
+ <dd><p>Availability of the getting the signal Change Threshold.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRadioControlCapabilities class.</p>
+ </div>
+
+ <h3 id="section--initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:">
+ -initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:
+ </h3>
+
+ <p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithModuleName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span>
+ <span class="nf">radioEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioEnableAvailable</span>
+ <span class="nf">radioBandAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioBandAvailable</span>
+ <span class="nf">radioFrequencyAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">radioFrequencyAvailable</span>
+ <span class="nf">hdChannelAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">hdChannelAvailable</span>
+ <span class="nf">rdsDataAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rdsDataAvailable</span>
+ <span class="nf">availableHDsAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">availableHDsAvailable</span>
+ <span class="nf">stateAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">stateAvailable</span>
+ <span class="nf">signalStrengthAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">signalStrengthAvailable</span>
+ <span class="nf">signalChangeThresholdAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">signalChangeThresholdAvailable</span>
+ <span class="nf">hdRadioEnableAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">hdRadioEnableAvailable</span>
+ <span class="nf">siriusXMRadioAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">siriusXMRadioAvailable</span>
+ <span class="nf">sisDataAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">sisDataAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">radioEnableAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">radioBandAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">radioFrequencyAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">hdChannelAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">rdsDataAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">availableHDsAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">stateAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">signalStrengthAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">signalChangeThresholdAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">hdRadioEnableAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">siriusXMRadioAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">sisDataAvailable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>moduleName</dt>
+ <dd><p>The short friendly name of the radio control module.</p></dd>
+ <dt>radioEnableAvailable</dt>
+ <dd><p>Availability of the control of enable/disable radio.</p></dd>
+ <dt>radioBandAvailable</dt>
+ <dd><p>Availability of the control of radio band.</p></dd>
+ <dt>radioFrequencyAvailable</dt>
+ <dd><p>Availability of the control of radio frequency.</p></dd>
+ <dt>hdChannelAvailable</dt>
+ <dd><p>Availability of the control of HD radio channel.</p></dd>
+ <dt>rdsDataAvailable</dt>
+ <dd><p>Availability of the getting Radio Data System (RDS) data.</p></dd>
+ <dt>availableHDsAvailable</dt>
+ <dd><p>Availability of the getting the number of available HD channels.</p></dd>
+ <dt>stateAvailable</dt>
+ <dd><p>Availability of the getting the Radio state.</p></dd>
+ <dt>signalStrengthAvailable</dt>
+ <dd><p>Availability of the getting the signal strength.</p></dd>
+ <dt>signalChangeThresholdAvailable</dt>
+ <dd><p>Availability of the getting the signal Change Threshold.</p></dd>
+ <dt>hdRadioEnableAvailable</dt>
+ <dd><p>Availability of the control of enable/disable HD radio.</p></dd>
+ <dt>siriusXMRadioAvailable</dt>
+ <dd><p>Availability of sirius XM radio.</p></dd>
+ <dt>sisDataAvailable</dt>
+ <dd><p>Availability of sis data.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRadioControlCapabilities class</p>
+ </div>
<h3 id="section-moduleName">
moduleName
</h3>
- <p>The short friendly name of the climate control module.</p>
+ <p>The short friendly name of the radio control module.</p>
<p>It should not be used to identify a module by mobile application.</p>
@@ -269,4 +372,70 @@
+ <h3 id="section-hdRadioEnableAvailable">
+ hdRadioEnableAvailable
+ </h3>
+
+ <p>Availability of the control of enable/disable HD radio.
+ True: Available, False: Not Available, Not present: Not Available.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdRadioEnableAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">hdRadioEnableAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-siriusXMRadioAvailable">
+ siriusXMRadioAvailable
+ </h3>
+
+ <p>Availability of sirius XM radio.
+ True: Available, False: Not Available, Not present: Not Available.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">siriusXMRadioAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">siriusXMRadioAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-sisDataAvailable">
+ sisDataAvailable
+ </h3>
+
+ <p>Availability of the getting HD radio Station Information Service (SIS) data.
+ True: Available, False: Not Available, Not present: Not Available.</p>
+
+<p>Optional, Boolean</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sisDataAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">sisDataAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLRadioControlData.html b/docs/Classes/SDLRadioControlData.html
index d337677bc..41bbdd328 100644
--- a/docs/Classes/SDLRadioControlData.html
+++ b/docs/Classes/SDLRadioControlData.html
@@ -4,6 +4,7 @@
<ul>
<li><a href="#section--initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:">-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:</a></li>
+ <li><a href="#section--initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:">-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:</a></li>
<li><a href="#section-frequencyInteger">frequencyInteger</a></li>
<li><a href="#section-frequencyFraction">frequencyFraction</a></li>
<li><a href="#section-band">band</a></li>
@@ -14,6 +15,8 @@
<li><a href="#section-signalChangeThreshold">signalChangeThreshold</a></li>
<li><a href="#section-radioEnable">radioEnable</a></li>
<li><a href="#section-state">state</a></li>
+ <li><a href="#section-hdRadioEnable">hdRadioEnable</a></li>
+ <li><a href="#section-sisData">sisData</a></li>
</ul>
<h3>Overview</h3>
@@ -26,12 +29,17 @@
-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:
</h3>
- <p>Undocumented</p>
+ <p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithFrequencyInteger</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyInteger</span> <span class="nf">frequencyFraction</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyFraction</span> <span class="nf">band</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand">SDLRadioBand</a></span><span class="p">)</span><span class="nv">band</span> <span class="nf">hdChannel</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">hdChannel</span> <span class="nf">radioEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">radioEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithFrequencyInteger</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyInteger</span>
+ <span class="nf">frequencyFraction</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyFraction</span>
+ <span class="nf">band</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand">SDLRadioBand</a></span><span class="p">)</span><span class="nv">band</span>
+ <span class="nf">hdChannel</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">hdChannel</span>
+ <span class="nf">radioEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">radioEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -39,6 +47,66 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>frequencyInteger</dt>
+ <dd><p>integer part of the frequency</p></dd>
+ <dt>frequencyFraction</dt>
+ <dd><p>fractional part of the frequency</p></dd>
+ <dt>band</dt>
+ <dd><p>Radio band value</p></dd>
+ <dt>hdChannel</dt>
+ <dd><p>Current HD sub-channel</p></dd>
+ <dt>radioEnable</dt>
+ <dd><p>whether or not radio is enabled</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRadioControlData class</p>
+ </div>
+
+ <h3 id="section--initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:">
+ -initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:
+ </h3>
+
+ <p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithFrequencyInteger</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyInteger</span>
+ <span class="nf">frequencyFraction</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyFraction</span>
+ <span class="nf">band</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand">SDLRadioBand</a></span><span class="p">)</span><span class="nv">band</span>
+ <span class="nf">hdChannel</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">hdChannel</span>
+ <span class="nf">radioEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">radioEnable</span>
+ <span class="nf">hdRadioEnable</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">hdRadioEnable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">frequencyInteger</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="nv">frequencyFraction</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="nv">band</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand">SDLRadioBand</a></span><span class="p">?,</span> <span class="nv">hdChannel</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="nv">radioEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?,</span> <span class="nv">hdRadioEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>frequencyInteger</dt>
+ <dd><p>integer part of the frequency</p></dd>
+ <dt>frequencyFraction</dt>
+ <dd><p>fractional part of the frequency</p></dd>
+ <dt>band</dt>
+ <dd><p>Radio band value</p></dd>
+ <dt>hdChannel</dt>
+ <dd><p>Current HD sub-channel</p></dd>
+ <dt>radioEnable</dt>
+ <dd><p>whether or not radio is enabled</p></dd>
+ <dt>hdRadioEnable</dt>
+ <dd><p>whether or not hdradio is enabled</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRadioControlData class</p>
+ </div>
<h3 id="section-frequencyInteger">
frequencyInteger
@@ -138,7 +206,7 @@
</div>
-<p>Integer value Min Value - 1 Max Value -3</p>
+<p>Integer value Min Value - 1 Max Value -7</p>
@@ -159,7 +227,7 @@
<p>Current HD sub-channel if available</p>
-<p>Integer value Min Value - 1 Max Value -3</p>
+<p>Integer value Min Value - 1 Max Value -7</p>
@@ -271,4 +339,47 @@
+ <h3 id="section-hdRadioEnable">
+ hdRadioEnable
+ </h3>
+
+ <p>True if the hd radio is on, false is the radio is off</p>
+
+<p>Boolean value</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdRadioEnable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">hdRadioEnable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-sisData">
+ sisData
+ </h3>
+
+ <p>Read Read-only Station Information Service (SIS) data provides basic information
+ about the station such as call sign,
+ as well as information not displayable to the consumer such as the station identification number</p>
+
+<p>Optional, SDLSISData</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSISData.html">SDLSISData</a></span> <span class="o">*</span><span class="n">sisData</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">sisData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLSISData.html">SDLSISData</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLRegisterAppInterface.html b/docs/Classes/SDLRegisterAppInterface.html
index 72068dfa2..f68730c8f 100644
--- a/docs/Classes/SDLRegisterAppInterface.html
+++ b/docs/Classes/SDLRegisterAppInterface.html
@@ -7,6 +7,7 @@
<li><a href="#section--initWithAppName:appId:languageDesired:">-initWithAppName:appId:languageDesired:</a></li>
<li><a href="#section--initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:">-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:</a></li>
<li><a href="#section--initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:">-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:</a></li>
+ <li><a href="#section--initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:">-initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:</a></li>
<li><a href="#section-syncMsgVersion">syncMsgVersion</a></li>
<li><a href="#section-appName">appName</a></li>
<li><a href="#section-ttsName">ttsName</a></li>
@@ -19,81 +20,26 @@
<li><a href="#section-hashID">hashID</a></li>
<li><a href="#section-deviceInfo">deviceInfo</a></li>
<li><a href="#section-appID">appID</a></li>
+ <li><a href="#section-fullAppID">fullAppID</a></li>
<li><a href="#section-appInfo">appInfo</a></li>
+ <li><a href="#section-dayColorScheme">dayColorScheme</a></li>
+ <li><a href="#section-nightColorScheme">nightColorScheme</a></li>
</ul>
<h3>Overview</h3>
-<p>Registers the application&rsquo;s interface with SDL&reg;, declaring properties of
- the registration, 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&reg; can take place. The
- registration lasts until it is terminated either by the application calling
- the <i> SDLUnregisterAppInterface</i> method, or by SDL&reg;
- sending an <i> SDLOnAppInterfaceUnregistered</i> notification, or
- by loss of the underlying transport connection, or closing of the underlying
- message transmission protocol RPC session
- <p>
- Until the application receives its first <i>SDLOnHMIStatus</i>
- Notification, its HMI Status is assumed to be: <i>
- SDLHMILevel</i>=NONE, <i>
- SDLAudioStreamingState
- </i>=NOT_AUDIBLE, <i>
- SDLSystemContext</i>=MAIN
- <p>
- All SDL&reg; resources which the application creates or uses (e.g. Choice
- Sets, Command Menu, etc.) are associated with the application&rsquo;s interface
- registration. Therefore, when the interface registration ends, the SDL&reg;
- resources associated with the application are disposed of. As a result, even
- though the application itself may continue to run on its host platform (e.g.
- mobile device) after the interface registration terminates, the application
- will not be able to use the SDL&reg; HMI without first establishing a new
- interface registration and re-creating its required SDL&reg; resources. That
- is, SDL&reg; resources created by (or on behalf of) an application do not
- persist beyond the life-span of the interface registration
- <p>
- Resources and settings whose lifespan is tied to the duration of an
- application&rsquo;s interface registration:<br/>
- <ul>
- <li>Choice Sets</li>
- <li>Command Menus (built by successive calls to <i>SDLAddCommand
- </i>)</li>
- <li>Media clock timer display value</li>
- <li>Media clock timer display value</li>
- <li>Media clock timer display value</li>
- </ul>
- <p>
- The autoActivateID is used to grant an application the HMILevel and
- AudioStreamingState it had when it last disconnected
- <p>
- <b>Notes: </b>The autoActivateID parameter, and associated behavior, is
- currently ignored by SDL&reg;
- <p>
- When first calling this method (i.e. first time within life cycle of mobile
- app), an autoActivateID should not be included. After successfully
- registering an interface, an autoActivateID is returned to the mobile
- application for it to use in subsequent connections. If the connection
- between SDL&reg; and the mobile application is lost, such as the vehicle is
- turned off while the application is running, the autoActivateID can then be
- passed in another call to RegisterAppInterface to re-acquire <i>
- SDLHMILevel</i>=FULL
- <p>
- If the application intends to stream audio it is important to indicate so via
- the isMediaApp parameter. When set to true, audio will reliably stream
- without any configuration required by the user. When not set, audio may
- stream, depending on what the user might have manually configured as a media
- source on SDL&reg;
- <p>
- There is no time limit for how long the autoActivateID is <q>valid</q> (i.e. would
- confer focus and opt-in)
- <p>
- <b>HMILevel is not defined before registering</b><br/>
- </p></p>
+<p>Registers the application&rsquo;s interface with SDL. The <code>RegisterAppInterface</code> 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 <code><a href="../Classes.html#/c:objc(cs)SDLUnregisterAppInterface">SDLUnregisterAppInterface</a></code> method, or by SDL sending an <code><a href="../Classes/SDLOnAppInterfaceUnregistered.html">SDLOnAppInterfaceUnregistered</a></code> notification, or by loss of the underlying transport connection, or closing of the underlying message transmission protocol RPC session.</p>
+
+<p>Until the application receives its first <code><a href="../Classes/SDLOnHMIStatus.html">SDLOnHMIStatus</a></code> notification, its <code><a href="../Type Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></code> is assumed to be <code>NONE</code>, the <code><a href="../Type Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState">SDLAudioStreamingState</a></code> is assumed to be <code>NOT_AUDIBLE</code>, and the <code><a href="../Type Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext">SDLSystemContext</a></code> is assumed to be <code>MAIN</code>.</p>
+
+<p>All SDL resources which the application creates or uses (e.g. choice sets, command menu, etc.) are associated with the application&rsquo;s interface registration. Therefore, when the interface registration ends, the SDL resources associated with the application are disposed of. As a result, even though the application itself may continue to run on its host platform (e.g. mobile device) after the interface registration terminates, the application will not be able to use the SDL HMI without first establishing a new interface registration and re-creating its required SDL resources. That is, SDL resources created by (or on behalf of) an application do not persist beyond the life-span of the interface registration. Resources and settings whose lifespan is tied to the duration of an application&rsquo;s interface registration include: choice sets, command menus, and the media clock timer display value</p>
+
+<p>If the application intends to stream audio it is important to indicate so via the <code>isMediaApp</code> parameter. When set to true, audio will reliably stream without any configuration required by the user. When not set, audio may stream, depending on what the user might have manually configured as a media source on SDL.</p>
<p>@since SDL 1.0</p>
<div class="aside aside-see">
<p class="aside-title">See</p>
- SDLUnregisterAppInterface SDLOnAppInterfaceUnregistered
+ SDLUnregisterAppInterface, SDLOnAppInterfaceUnregistered
</div>
@@ -103,12 +49,13 @@
-initWithLifecycleConfiguration:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for registering the application with a lifecycle configuration.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLifecycleConfiguration</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfiguration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithLifecycleConfiguration</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfiguration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -116,17 +63,24 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>lifecycleConfiguration</dt>
+ <dd><p>Configuration options for SDLManager</p></dd>
+ </dl>
<h3 id="section--initWithAppName:appId:languageDesired:">
-initWithAppName:appId:languageDesired:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for registering the application.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithAppName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span> <span class="nf">appId</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appId</span> <span class="nf">languageDesired</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">languageDesired</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithAppName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span>
+ <span class="nf">appId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appId</span>
+ <span class="nf">languageDesired</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">languageDesired</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -134,17 +88,36 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>appName</dt>
+ <dd><p>The mobile application&rsquo;s name</p></dd>
+ <dt>appId</dt>
+ <dd><p>An appId used to validate app with policy table entries</p></dd>
+ <dt>languageDesired</dt>
+ <dd><p>The language the application intends to use for user interaction</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLRegisterAppInterface object</p>
+ </div>
<h3 id="section--initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:">
-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for registering the application.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithAppName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span> <span class="nf">appId</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appId</span> <span class="nf">languageDesired</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">languageDesired</span> <span class="nf">isMediaApp</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">isMediaApp</span> <span class="nf">appTypes</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">appTypes</span> <span class="nf">shortAppName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">shortAppName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithAppName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span>
+ <span class="nf">appId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appId</span>
+ <span class="nf">languageDesired</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">languageDesired</span>
+ <span class="nf">isMediaApp</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">isMediaApp</span>
+ <span class="nf">appTypes</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">appTypes</span>
+ <span class="nf">shortAppName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">shortAppName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -152,17 +125,46 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>appName</dt>
+ <dd><p>The mobile application&rsquo;s name</p></dd>
+ <dt>appId</dt>
+ <dd><p>An appId used to validate app with policy table entries</p></dd>
+ <dt>languageDesired</dt>
+ <dd><p>The language the application intends to use for user interaction</p></dd>
+ <dt>isMediaApp</dt>
+ <dd><p>Indicates if the application is a media or a non-media application</p></dd>
+ <dt>appTypes</dt>
+ <dd><p>A list of all applicable app types stating which classifications to be given to the app</p></dd>
+ <dt>shortAppName</dt>
+ <dd><p>An abbreviated version of the mobile application&rsquo;s name</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLRegisterAppInterface object</p>
+ </div>
<h3 id="section--initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:">
-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for registering the application.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithAppName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span> <span class="nf">appId</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appId</span> <span class="nf">languageDesired</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">languageDesired</span> <span class="nf">isMediaApp</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">isMediaApp</span> <span class="nf">appTypes</span><span class="p">:(</span><span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">appTypes</span> <span class="nf">shortAppName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">shortAppName</span> <span class="nf">ttsName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">ttsName</span> <span class="nf">vrSynonyms</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrSynonyms</span> <span class="nf">hmiDisplayLanguageDesired</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">hmiDisplayLanguageDesired</span> <span class="nf">resumeHash</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">resumeHash</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithAppName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span>
+ <span class="nf">appId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appId</span>
+ <span class="nf">languageDesired</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">languageDesired</span>
+ <span class="nf">isMediaApp</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">isMediaApp</span>
+ <span class="nf">appTypes</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">appTypes</span>
+ <span class="nf">shortAppName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">shortAppName</span>
+ <span class="nf">ttsName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">ttsName</span>
+ <span class="nf">vrSynonyms</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrSynonyms</span>
+<span class="nf">hmiDisplayLanguageDesired</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">hmiDisplayLanguageDesired</span>
+ <span class="nf">resumeHash</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">resumeHash</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -170,6 +172,97 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>appName</dt>
+ <dd><p>The mobile application&rsquo;s name</p></dd>
+ <dt>appId</dt>
+ <dd><p>An appId used to validate app with policy table entries</p></dd>
+ <dt>languageDesired</dt>
+ <dd><p>The language the application intends to use for user interaction</p></dd>
+ <dt>isMediaApp</dt>
+ <dd><p>Indicates if the application is a media or a non-media application</p></dd>
+ <dt>appTypes</dt>
+ <dd><p>A list of all applicable app types stating which classifications to be given to the app</p></dd>
+ <dt>shortAppName</dt>
+ <dd><p>An abbreviated version of the mobile application&rsquo;s name</p></dd>
+ <dt>ttsName</dt>
+ <dd><p>TTS string for VR recognition of the mobile application name</p></dd>
+ <dt>vrSynonyms</dt>
+ <dd><p>Additional voice recognition commands</p></dd>
+ <dt>hmiDisplayLanguageDesired</dt>
+ <dd><p>Current app&rsquo;s expected VR+TTS language</p></dd>
+ <dt>resumeHash</dt>
+ <dd><p>ID used to uniquely identify current state of all app data that can persist through connection cycles</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLRegisterAppInterface object</p>
+ </div>
+
+ <h3 id="section--initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:">
+ -initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:
+ </h3>
+
+ <p>Convenience init for registering the application with all possible options.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithAppName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appName</span>
+ <span class="nf">appId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">appId</span>
+ <span class="nf">fullAppId</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fullAppId</span>
+ <span class="nf">languageDesired</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">languageDesired</span>
+ <span class="nf">isMediaApp</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">isMediaApp</span>
+ <span class="nf">appTypes</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">appTypes</span>
+ <span class="nf">shortAppName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">shortAppName</span>
+ <span class="nf">ttsName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">ttsName</span>
+ <span class="nf">vrSynonyms</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">vrSynonyms</span>
+<span class="nf">hmiDisplayLanguageDesired</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">hmiDisplayLanguageDesired</span>
+ <span class="nf">resumeHash</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">resumeHash</span>
+ <span class="nf">dayColorScheme</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">dayColorScheme</span>
+ <span class="nf">nightColorScheme</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">nightColorScheme</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">appName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">appId</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">fullAppId</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">languageDesired</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">,</span> <span class="nv">isMediaApp</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">appTypes</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="p">],</span> <span class="nv">shortAppName</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">ttsName</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span><span class="p">]?,</span> <span class="nv">vrSynonyms</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?,</span> <span class="nv">hmiDisplayLanguageDesired</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">,</span> <span class="nv">resumeHash</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">dayColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">?,</span> <span class="nv">nightColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>appName</dt>
+ <dd><p>The mobile application&rsquo;s name</p></dd>
+ <dt>appId</dt>
+ <dd><p>An appId used to validate app with policy table entries</p></dd>
+ <dt>fullAppId</dt>
+ <dd><p>A full UUID appID used to validate app with policy table entries.</p></dd>
+ <dt>languageDesired</dt>
+ <dd><p>The language the application intends to use for user interaction</p></dd>
+ <dt>isMediaApp</dt>
+ <dd><p>Indicates if the application is a media or a non-media application</p></dd>
+ <dt>appTypes</dt>
+ <dd><p>A list of all applicable app types stating which classifications to be given to the app</p></dd>
+ <dt>shortAppName</dt>
+ <dd><p>An abbreviated version of the mobile application&rsquo;s name</p></dd>
+ <dt>ttsName</dt>
+ <dd><p>TTS string for VR recognition of the mobile application name</p></dd>
+ <dt>vrSynonyms</dt>
+ <dd><p>Additional voice recognition commands</p></dd>
+ <dt>hmiDisplayLanguageDesired</dt>
+ <dd><p>Current app&rsquo;s expected VR+TTS language</p></dd>
+ <dt>resumeHash</dt>
+ <dd><p>ID used to uniquely identify current state of all app data that can persist through connection cycles</p></dd>
+ <dt>dayColorScheme</dt>
+ <dd><p>The color scheme to be used on a head unit using a <q>light</q> or <q>day</q> color scheme.</p></dd>
+ <dt>nightColorScheme</dt>
+ <dd><p>The color scheme to be used on a head unit using a <q>dark</q> or <q>night</q> color scheme</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLRegisterAppInterface object</p>
+ </div>
<h3 id="section-syncMsgVersion">
syncMsgVersion
@@ -196,14 +289,14 @@
appName
</h3>
- <p>The Mobile Application&rsquo;s Name, This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SmartDeviceLink</p>
+ <p>The mobile application&rsquo;s name. This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SmartDeviceLink.</p>
-<p>@discussion
- <li>Needs to be unique over all applications.</li>
- <li>May not be empty.</li>
- <li>May not start with a new line character.</li>
- <li>May not interfere with any name or synonym of previously registered applications and any predefined blacklist of words (global commands).</li>
- <li>Needs to be unique over all applications. Applications with the same name will be rejected.</li></p>
+<ol>
+<li>Needs to be unique over all applications. Applications with the same name will be rejected.</li>
+<li>May not be empty.</li>
+<li>May not start with a new line character.</li>
+<li>May not interfere with any name or synonym of previously registered applications and any predefined blacklist of words (global commands).</li>
+</ol>
<p>Required, Max length 100 chars</p>
@@ -225,10 +318,13 @@
<p>TTS string for VR recognition of the mobile application name.</p>
-<p>@discussion Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.
- <li>Needs to be unique over all applications.</li>
- <li>May not be empty.</li>
- <li>May not start with a new line character.</li></p>
+<p>@discussion Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.</p>
+
+<ol>
+<li>Needs to be unique over all applications.</li>
+<li>May not be empty.</li>
+<li>May not start with a new line character.</li>
+</ol>
<p>Optional, Array of SDLTTSChunk, Array size 1 - 100</p>
@@ -256,7 +352,7 @@
ngnMediaScreenAppName
</h3>
- <p>A String representing an abbreviated version of the mobile application&rsquo;s name (if necessary) that will be displayed on the media screen</p>
+ <p>A String representing an abbreviated version of the mobile application&rsquo;s name (if necessary) that will be displayed on the media screen.</p>
<p>@discussion If not provided, the appName is used instead (and will be truncated if too long)</p>
@@ -279,9 +375,9 @@
vrSynonyms
</h3>
- <p>Defines a additional voice recognition commands</p>
+ <p>Defines additional voice recognition commands</p>
-<p>@discussion May not interfere with any app name of previously registered applications and any predefined blacklist of words (global commands)</p>
+<p>@discussion May not interfere with any app name of previously registered applications and any predefined blacklist of words (global commands).</p>
<p>Optional, Array of Strings, Array length 1 - 100, Max String length 40</p>
@@ -447,6 +543,11 @@
<p>ID used to validate app with policy table entries</p>
<p>Required, max length 100</p>
+<div class="aside aside-see">
+ <p class="aside-title">See</p>
+ <code><a href="../Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)fullAppID">fullAppID</a></code>
+
+</div>
<p>@since SDL 2.0</p>
@@ -462,6 +563,28 @@
+ <h3 id="section-fullAppID">
+ fullAppID
+ </h3>
+
+ <p>A full UUID appID used to validate app with policy table entries.</p>
+
+<p>Optional</p>
+
+<p>@discussion The <code>fullAppId</code> is used to authenticate apps that connect with head units that implement SDL Core v.5.0 and newer. If connecting with older head units, the <code>fullAppId</code> can be truncated to create the required <code>appId</code> needed to register the app. The <code>appId</code> is the first 10 non-dash (<q>-</q>) characters of the <code>fullAppID</code> (e.g. if you have a <code>fullAppId</code> of 123e4567-e89b-12d3-a456-426655440000, the <code>appId</code> will be 123e4567e8).</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">fullAppID</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fullAppID</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-appInfo">
appInfo
</h3>
@@ -482,4 +605,46 @@
+ <h3 id="section-dayColorScheme">
+ dayColorScheme
+ </h3>
+
+ <p>The color scheme to be used on a head unit using a <q>light</q> or <q>day</q> color scheme. The OEM may only support this theme if their head unit only has a light color scheme.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">dayColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-nightColorScheme">
+ nightColorScheme
+ </h3>
+
+ <p>The color scheme to be used on a head unit using a <q>dark</q> or <q>night</q> color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">nightColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLRegisterAppInterfaceResponse.html b/docs/Classes/SDLRegisterAppInterfaceResponse.html
index f7d87e328..419230f9e 100644
--- a/docs/Classes/SDLRegisterAppInterfaceResponse.html
+++ b/docs/Classes/SDLRegisterAppInterfaceResponse.html
@@ -21,6 +21,7 @@
<li><a href="#section-hmiCapabilities">hmiCapabilities</a></li>
<li><a href="#section-sdlVersion">sdlVersion</a></li>
<li><a href="#section-systemSoftwareVersion">systemSoftwareVersion</a></li>
+ <li><a href="#section-iconResumed">iconResumed</a></li>
</ul>
<h3>Overview</h3>
@@ -407,4 +408,23 @@
+ <h3 id="section-iconResumed">
+ iconResumed
+ </h3>
+
+ <p>Whether or not the app&rsquo;s icon already existed on the system and was resumed. That means that the icon does not need to be sent by the app.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">iconResumed</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">iconResumed</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLRemoteControlCapabilities.html b/docs/Classes/SDLRemoteControlCapabilities.html
index db4507a94..569543c1a 100644
--- a/docs/Classes/SDLRemoteControlCapabilities.html
+++ b/docs/Classes/SDLRemoteControlCapabilities.html
@@ -4,9 +4,14 @@
<ul>
<li><a href="#section--initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:">-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:</a></li>
+ <li><a href="#section--initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:">-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:</a></li>
<li><a href="#section-climateControlCapabilities">climateControlCapabilities</a></li>
<li><a href="#section-radioControlCapabilities">radioControlCapabilities</a></li>
<li><a href="#section-buttonCapabilities">buttonCapabilities</a></li>
+ <li><a href="#section-seatControlCapabilities">seatControlCapabilities</a></li>
+ <li><a href="#section-audioControlCapabilities">audioControlCapabilities</a></li>
+ <li><a href="#section-hmiSettingsControlCapabilities">hmiSettingsControlCapabilities</a></li>
+ <li><a href="#section-lightControlCapabilities">lightControlCapabilities</a></li>
</ul>
<h3>Overview</h3>
@@ -24,7 +29,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithClimateControlCapabilities</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLClimateControlCapabilities.html">SDLClimateControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">climateControlCapabilities</span> <span class="nf">radioControlCapabilities</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLRadioControlCapabilities.html">SDLRadioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">radioControlCapabilities</span> <span class="nf">buttonCapabilities</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">buttonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithClimateControlCapabilities</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLClimateControlCapabilities.html">SDLClimateControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">climateControlCapabilities</span> <span class="nf">radioControlCapabilities</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLRadioControlCapabilities.html">SDLRadioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">radioControlCapabilities</span> <span class="nf">buttonCapabilities</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">buttonCapabilities</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Use initWithClimateControlCapabilities:climateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities: instead"</span><span class="p">);</span></code></pre>
<h4>Swift</h4>
@@ -33,6 +38,61 @@
+ <h3 id="section--initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:">
+ -initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:
+ </h3>
+
+ <p>Constructs a newly allocated SDLRemoteControlCapabilities object with given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithClimateControlCapabilities</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLClimateControlCapabilities.html">SDLClimateControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)climateControlCapabilities">climateControlCapabilities</a></span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)radioControlCapabilities">radioControlCapabilities</a></span><span class="o">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLRadioControlCapabilities.html">SDLRadioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)radioControlCapabilities">radioControlCapabilities</a></span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)buttonCapabilities">buttonCapabilities</a></span><span class="o">:</span><span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)buttonCapabilities">buttonCapabilities</a></span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)seatControlCapabilities">seatControlCapabilities</a></span><span class="o">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSeatControlCapabilities.html">SDLSeatControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)seatControlCapabilities">seatControlCapabilities</a></span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)audioControlCapabilities">audioControlCapabilities</a></span><span class="o">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioControlCapabilities.html">SDLAudioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)audioControlCapabilities">audioControlCapabilities</a></span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)hmiSettingsControlCapabilities">hmiSettingsControlCapabilities</a></span><span class="o">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLHMISettingsControlCapabilities.html">SDLHMISettingsControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)hmiSettingsControlCapabilities">hmiSettingsControlCapabilities</a></span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)lightControlCapabilities">lightControlCapabilities</a></span><span class="o">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightControlCapabilities.html">SDLLightControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)lightControlCapabilities">lightControlCapabilities</a></span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">climateControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLClimateControlCapabilities.html">SDLClimateControlCapabilities</a></span><span class="p">]?,</span> <span class="nv">radioControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLRadioControlCapabilities.html">SDLRadioControlCapabilities</a></span><span class="p">]?,</span> <span class="nv">buttonCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span><span class="p">]?,</span> <span class="nv">seatControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLSeatControlCapabilities.html">SDLSeatControlCapabilities</a></span><span class="p">]?,</span> <span class="nv">audioControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLAudioControlCapabilities.html">SDLAudioControlCapabilities</a></span><span class="p">]?,</span> <span class="nv">hmiSettingsControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLHMISettingsControlCapabilities.html">SDLHMISettingsControlCapabilities</a></span><span class="p">]?,</span> <span class="nv">lightControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLLightControlCapabilities.html">SDLLightControlCapabilities</a></span><span class="p">]?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>climateControlCapabilities</dt>
+ <dd><p>Array of SDLClimateControlCapabilities</p></dd>
+ <dt>radioControlCapabilities</dt>
+ <dd><p>Array of SDLRadioControlCapabilities</p></dd>
+ <dt>buttonCapabilities</dt>
+ <dd><p>Array of SDLButtonCapabilities</p></dd>
+ <dt>lightControlCapabilities</dt>
+ <dd><p>Array of SDLLightControlCapabilities</p></dd>
+ <dt>seatControlCapabilities</dt>
+ <dd><p>Array of SDLSeatControlCapabilities</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRemoteControlCapabilities class</p>
+ </div>
+
<h3 id="section-climateControlCapabilities">
climateControlCapabilities
</h3>
@@ -98,4 +158,89 @@
+ <h3 id="section-seatControlCapabilities">
+ seatControlCapabilities
+ </h3>
+
+ <p>If included, the platform supports seat controls.</p>
+
+<p>Optional, Array of SDLSeatControlCapabilities, Array length 1 - 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSeatControlCapabilities.html">SDLSeatControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">seatControlCapabilities</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">seatControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLSeatControlCapabilities.html">SDLSeatControlCapabilities</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-audioControlCapabilities">
+ audioControlCapabilities
+ </h3>
+
+ <p>If included, the platform supports audio controls.</p>
+
+<p>Optional, Array of SDLAudioControlCapabilities, Array length 1 - 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioControlCapabilities.html">SDLAudioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">audioControlCapabilities</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">audioControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLAudioControlCapabilities.html">SDLAudioControlCapabilities</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-hmiSettingsControlCapabilities">
+ hmiSettingsControlCapabilities
+ </h3>
+
+ <p>If included, the platform supports hmi setting controls.</p>
+
+<p>Optional, Array of SDLHMISettingsControlCapabilities, Array length 1 - 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLHMISettingsControlCapabilities.html">SDLHMISettingsControlCapabilities</a></span> <span class="o">*&gt;</span>
+ <span class="o">*</span><span class="n">hmiSettingsControlCapabilities</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">hmiSettingsControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLHMISettingsControlCapabilities.html">SDLHMISettingsControlCapabilities</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-lightControlCapabilities">
+ lightControlCapabilities
+ </h3>
+
+ <p>If included, the platform supports light controls.</p>
+
+<p>Optional, Array of SDLLightControlCapabilities, Array length 1 - 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightControlCapabilities.html">SDLLightControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">lightControlCapabilities</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">lightControlCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLLightControlCapabilities.html">SDLLightControlCapabilities</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLSISData.html b/docs/Classes/SDLSISData.html
new file mode 100644
index 000000000..fb936829d
--- /dev/null
+++ b/docs/Classes/SDLSISData.html
@@ -0,0 +1,143 @@
+<h1>SDLSISData Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:">-initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:</a></li>
+ <li><a href="#section-stationShortName">stationShortName</a></li>
+ <li><a href="#section-stationIDNumber">stationIDNumber</a></li>
+ <li><a href="#section-stationLongName">stationLongName</a></li>
+ <li><a href="#section-stationLocation">stationLocation</a></li>
+ <li><a href="#section-stationMessage">stationMessage</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>HD radio Station Information Service (SIS) data.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:">
+ -initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithStationShortName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">stationShortName</span> <span class="nf">stationIDNumber</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLStationIDNumber.html">SDLStationIDNumber</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">id</span> <span class="nf">stationLongName</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">stationLongName</span> <span class="nf">stationLocation</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">stationLocation</span> <span class="nf">stationMessage</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">stationMessage</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">stationShortName</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="n"><a href="../Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationIDNumber">stationIDNumber</a></span> <span class="nv">id</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLStationIDNumber.html">SDLStationIDNumber</a></span><span class="p">?,</span> <span class="nv">stationLongName</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">stationLocation</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span><span class="p">?,</span> <span class="nv">stationMessage</span><span class="p">:</span> <span class="kt">String</span><span class="p">?)</span></code></pre>
+
+
+
+
+ <h3 id="section-stationShortName">
+ stationShortName
+ </h3>
+
+ <p>@abstract Identifies the 4-alpha-character station call sign
+ plus an optional (-FM) extension</p>
+
+<p>Optional, String, minLength: 4characters maxlength: 7characters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationShortName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">stationShortName</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-stationIDNumber">
+ stationIDNumber
+ </h3>
+
+ <p>@abstract Used for network Application.
+ Consists of Country Code and FCC Facility ID.</p>
+
+<p>Optional, SDLStationIDNumber type</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLStationIDNumber.html">SDLStationIDNumber</a></span> <span class="o">*</span><span class="n">stationIDNumber</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">stationIDNumber</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLStationIDNumber.html">SDLStationIDNumber</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-stationLongName">
+ stationLongName
+ </h3>
+
+ <p>@abstract Identifies the station call sign or other identifying
+ information in the long format.</p>
+
+<p>Optional, String, minLength: 0characters maxlength: 56characters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationLongName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">stationLongName</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-stationLocation">
+ stationLocation
+ </h3>
+
+ <p>@abstract Provides the 3-dimensional geographic station location</p>
+
+<p>Optional, SDLGPSData type</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span> <span class="o">*</span><span class="n">stationLocation</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">stationLocation</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-stationMessage">
+ stationMessage
+ </h3>
+
+ <p>@abstract May be used to convey textual information of general interest
+ to the consumer such as weather forecasts or public service announcements.</p>
+
+<p>Optional, String, minLength: 0characters maxlength: 56characters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationMessage</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">stationMessage</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLScreenManager.html b/docs/Classes/SDLScreenManager.html
index 0a8d18d3c..627ef710b 100644
--- a/docs/Classes/SDLScreenManager.html
+++ b/docs/Classes/SDLScreenManager.html
@@ -18,11 +18,20 @@
<li><a href="#section-softButtonObjects">softButtonObjects</a></li>
<li><a href="#section-menu">menu</a></li>
<li><a href="#section-voiceCommands">voiceCommands</a></li>
+ <li><a href="#section-keyboardConfiguration">keyboardConfiguration</a></li>
+ <li><a href="#section-preloadedChoices">preloadedChoices</a></li>
<li><a href="#section--initWithConnectionManager:fileManager:">-initWithConnectionManager:fileManager:</a></li>
+ <li><a href="#section--startWithCompletionHandler:">-startWithCompletionHandler:</a></li>
<li><a href="#section--stop">-stop</a></li>
<li><a href="#section--beginUpdates">-beginUpdates</a></li>
+ <li><a href="#section--endUpdates">-endUpdates</a></li>
<li><a href="#section--endUpdatesWithCompletionHandler:">-endUpdatesWithCompletionHandler:</a></li>
<li><a href="#section--softButtonObjectNamed:">-softButtonObjectNamed:</a></li>
+ <li><a href="#section--preloadChoices:withCompletionHandler:">-preloadChoices:withCompletionHandler:</a></li>
+ <li><a href="#section--deleteChoices:">-deleteChoices:</a></li>
+ <li><a href="#section--presentChoiceSet:mode:">-presentChoiceSet:mode:</a></li>
+ <li><a href="#section--presentSearchableChoiceSet:mode:withKeyboardDelegate:">-presentSearchableChoiceSet:mode:withKeyboardDelegate:</a></li>
+ <li><a href="#section--presentKeyboardWithInitialText:delegate:">-presentKeyboardWithInitialText:delegate:</a></li>
</ul>
<h3>Overview</h3>
@@ -303,6 +312,44 @@
+ <h3 id="section-keyboardConfiguration">
+ keyboardConfiguration
+ </h3>
+
+ <p>The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">null_resettable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span> <span class="o">*</span><span class="n">keyboardConfiguration</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">keyboardConfiguration</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span><span class="o">!</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-preloadedChoices">
+ preloadedChoices
+ </h3>
+
+ <p>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.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
+ <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">preloadedChoices</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">preloadedChoices</span><span class="p">:</span> <span class="kt">Set</span><span class="o">&lt;</span><span class="kt">AnyHashable</span><span class="o">&gt;</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section--initWithConnectionManager:fileManager:">
-initWithConnectionManager:fileManager:
</h3>
@@ -337,6 +384,30 @@
<p>The screen manager</p>
</div>
+ <h3 id="section--startWithCompletionHandler:">
+ -startWithCompletionHandler:
+ </h3>
+
+ <p>Starts the manager and all sub-managers</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startWithCompletionHandler</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="n">NSError</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">))</span><span class="nv">handler</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">start</span><span class="p">(</span><span class="n">completionHandler</span> <span class="nv">handler</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">(</span><span class="kt">Error</span><span class="p">?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>handler</dt>
+ <dd><p>The handler called when setup is complete</p></dd>
+ </dl>
+
<h3 id="section--stop">
-stop
</h3>
@@ -378,6 +449,36 @@
+ <h3 id="section--endUpdates">
+ -endUpdates
+ </h3>
+
+ <p>Update text fields with new text set into the text field properties. Pass an empty string <code>\@&quot;&quot;</code> to clear the text field.</p>
+
+<p>If the system does not support a full 4 fields, this will automatically be concatenated and properly send the field available.</p>
+
+<p>If 3 lines are available: [field1, field2, field3 - field 4]</p>
+
+<p>If 2 lines are available: [field1 - field2, field3 - field4]</p>
+
+<p>If 1 line is available: [field1 - field2 - field3 - field4]</p>
+
+<p>Also updates the primary and secondary images with new image(s) if new one(s) been set. This method will take care of naming the files (based on a hash). This is assumed to be a non-persistant image.</p>
+
+<p>If it needs to be uploaded, it will be. Once the upload is complete, the on-screen graphic will be updated.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">endUpdates</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">endUpdates</span><span class="p">()</span></code></pre>
+
+
+
+
<h3 id="section--endUpdatesWithCompletionHandler:">
-endUpdatesWithCompletionHandler:
</h3>
@@ -418,13 +519,12 @@
-softButtonObjectNamed:
</h3>
- <p>Find a current soft button object with a specific name</p>
+ <p>Undocumented</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLSoftButtonObject.html">SDLSoftButtonObject</a></span> <span class="o">*</span><span class="p">)</span><span class="nf">softButtonObjectNamed</span><span class="p">:</span>
- <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLSoftButtonObject.html">SDLSoftButtonObject</a></span> <span class="o">*</span><span class="p">)</span><span class="nf">softButtonObjectNamed</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -432,14 +532,140 @@
+
+ <h3 id="section--preloadChoices:withCompletionHandler:">
+ -preloadChoices:withCompletionHandler:
+ </h3>
+
+ <p>Preload cells to the head unit. This will <em>greatly</em> reduce the time taken to present a choice set. Any already matching a choice already on the head unit will be ignored. You <em>do not</em> 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.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">preloadChoices</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span>
+ <span class="nf">withCompletionHandler</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler">SDLPreloadChoiceCompletionHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">preloadChoices</span><span class="p">(</span><span class="n">_</span> <span class="nv">choices</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span><span class="p">],</span> <span class="n">withCompletionHandler</span> <span class="nv">handler</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler">SDLPreloadChoiceCompletionHandler</a></span><span class="p">?</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">)</span></code></pre>
+
+
+
<h4>Parameters</h4>
<dl>
- <dt>name</dt>
- <dd><p>The name of the soft button object to find</p></dd>
+ <dt>choices</dt>
+ <dd><p>The choices to be preloaded.</p></dd>
+ <dt>handler</dt>
+ <dd><p>The handler to be called when complete.</p></dd>
+ </dl>
+
+ <h3 id="section--deleteChoices:">
+ -deleteChoices:
+ </h3>
+
+ <p>Delete loaded cells from the head unit. If the cells don&rsquo;t exist on the head unit they will be ignored.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">deleteChoices</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">choices</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">deleteChoices</span><span class="p">(</span><span class="n">_</span> <span class="nv">choices</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span><span class="p">])</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>choices</dt>
+ <dd><p>The choices to be deleted. These will be matched via a hash of the text, image name(s), and VR commands.</p></dd>
+ </dl>
+
+ <h3 id="section--presentChoiceSet:mode:">
+ -presentChoiceSet:mode:
+ </h3>
+
+ <p>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&rsquo;re lazy&hellip;for real though, it&rsquo;s kind of confusing to the user and isn&rsquo;t recommended.</p>
+
+<p>If the cells in the set are not already preloaded, they will be preloaded before the presentation occurs; this could take a while depending on the contents of the cells.</p>
+
+<p>If the cells have voice commands and images attached, this could take upwards of 10 seconds. If there are no cells on the set, this will fail, calling <code>choiceSet:didReceiveError:</code> on the choice set delegate.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">presentChoiceSet</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">choiceSet</span>
+ <span class="nf">mode</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode">SDLInteractionMode</a></span><span class="p">)</span><span class="nv">mode</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">present</span><span class="p">(</span><span class="n">_</span> <span class="nv">choiceSet</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></span><span class="p">,</span> <span class="nv">mode</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode">SDLInteractionMode</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>choiceSet</dt>
+ <dd><p>The set to be displayed</p></dd>
+ <dt>mode</dt>
+ <dd><p>If the set should be presented for the user to interact via voice, touch, or both</p></dd>
+ </dl>
+
+ <h3 id="section--presentSearchableChoiceSet:mode:withKeyboardDelegate:">
+ -presentSearchableChoiceSet:mode:withKeyboardDelegate:
+ </h3>
+
+ <p>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&rsquo;re lazy&hellip;for real though, it&rsquo;s kind of confusing to the user and isn&rsquo;t recommended.</p>
+
+<p>This presents the choice set as searchable when in a touch interaction. The user, when not in a distracted state, will have a keyboard available for searching this set. The user&rsquo;s input in the keyboard will be available in the SDLKeyboardDelegate.</p>
+
+<p>If the cells in the set are not already preloaded, they will be preloaded before the presentation occurs; this could take a while depending on the contents of the cells.</p>
+
+<p>If the cells have voice commands and images attached, this could take upwards of 10 seconds. If there are no cells on the set, this will fail, calling <code>choiceSet:didReceiveError:</code> on the choice set delegate.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">presentSearchableChoiceSet</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">choiceSet</span>
+ <span class="nf">mode</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode">SDLInteractionMode</a></span><span class="p">)</span><span class="nv">mode</span>
+ <span class="nf">withKeyboardDelegate</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLKeyboardDelegate.html">SDLKeyboardDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span><span class="p">;</span></code></pre>
+
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>choiceSet</dt>
+ <dd><p>The set to be displayed</p></dd>
+ <dt>mode</dt>
+ <dd><p>If the set should be presented for the user to interact via voice, touch, or both</p></dd>
+ <dt>delegate</dt>
+ <dd><p>The keyboard delegate called when the user interacts with the search field of the choice set</p></dd>
+ </dl>
+
+ <h3 id="section--presentKeyboardWithInitialText:delegate:">
+ -presentKeyboardWithInitialText:delegate:
+ </h3>
+
+ <p>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.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">presentKeyboardWithInitialText</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">initialText</span>
+ <span class="nf">delegate</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLKeyboardDelegate.html">SDLKeyboardDelegate</a></span><span class="o">&gt;</span><span class="p">)</span><span class="nv">delegate</span><span class="p">;</span></code></pre>
+
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>initialText</dt>
+ <dd><p>The initial text within the keyboard input field. It will disappear once the user selects the field in order to enter text</p></dd>
+ <dt>delegate</dt>
+ <dd><p>The keyboard delegate called when the user interacts with the keyboard</p></dd>
</dl>
- <div>
- <h4>Return Value</h4>
- <p>The soft button object or nil if there isn&rsquo;t one with that name</p>
- </div>
</section>
diff --git a/docs/Classes/SDLSeatControlCapabilities.html b/docs/Classes/SDLSeatControlCapabilities.html
new file mode 100644
index 000000000..90e811c76
--- /dev/null
+++ b/docs/Classes/SDLSeatControlCapabilities.html
@@ -0,0 +1,405 @@
+<h1>SDLSeatControlCapabilities Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithName:">-initWithName:</a></li>
+ <li><a href="#section--initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:">-initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:</a></li>
+ <li><a href="#section-moduleName">moduleName</a></li>
+ <li><a href="#section-heatingEnabledAvailable">heatingEnabledAvailable</a></li>
+ <li><a href="#section-coolingEnabledAvailable">coolingEnabledAvailable</a></li>
+ <li><a href="#section-heatingLevelAvailable">heatingLevelAvailable</a></li>
+ <li><a href="#section-coolingLevelAvailable">coolingLevelAvailable</a></li>
+ <li><a href="#section-horizontalPositionAvailable">horizontalPositionAvailable</a></li>
+ <li><a href="#section-verticalPositionAvailable">verticalPositionAvailable</a></li>
+ <li><a href="#section-frontVerticalPositionAvailable">frontVerticalPositionAvailable</a></li>
+ <li><a href="#section-backVerticalPositionAvailable">backVerticalPositionAvailable</a></li>
+ <li><a href="#section-backTiltAngleAvailable">backTiltAngleAvailable</a></li>
+ <li><a href="#section-headSupportHorizontalPositionAvailable">headSupportHorizontalPositionAvailable</a></li>
+ <li><a href="#section-headSupportVerticalPositionAvailable">headSupportVerticalPositionAvailable</a></li>
+ <li><a href="#section-massageEnabledAvailable">massageEnabledAvailable</a></li>
+ <li><a href="#section-massageModeAvailable">massageModeAvailable</a></li>
+ <li><a href="#section-massageCushionFirmnessAvailable">massageCushionFirmnessAvailable</a></li>
+ <li><a href="#section-memoryAvailable">memoryAvailable</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Include information about a seat control capabilities.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithName:">
+ -initWithName:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">name</span> <span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section--initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:">
+ -initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleName</span> <span class="nf">heatingEnabledAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">heatingEnabledAvail</span>
+ <span class="nf">coolingEnabledAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">coolingEnabledAvail</span> <span class="nf">heatingLevelAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">heatingLevelAvail</span> <span class="nf">coolingLevelAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">coolingLevelAvail</span> <span class="nf">horizontalPositionAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">horizontalPositionAvail</span> <span class="nf">verticalPositionAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">verticalPositionAvail</span> <span class="nf">frontVerticalPositionAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">frontVerticalPositionAvail</span> <span class="nf">backVerticalPositionAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">backVerticalPositionAvail</span> <span class="nf">backTiltAngleAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">backTitlAngleAvail</span> <span class="nf">headSupportHorizontalPositionAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headSupportHorizontalPositionAvail</span> <span class="nf">headSupportVerticalPositionAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headSupportVerticalPositionAvail</span> <span class="nf">massageEnabledAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">massageEnabledAvail</span> <span class="nf">massageModeAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">massageModeAvail</span> <span class="nf">massageCushionFirmnessAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">massageCushionFirmnessAvail</span> <span class="nf">memoryAvailable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">memoryAvail</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">name</span> <span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingEnabledAvailable">heatingEnabledAvailable</a></span> <span class="nv">heatingEnabledAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingEnabledAvailable">coolingEnabledAvailable</a></span> <span class="nv">coolingEnabledAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingLevelAvailable">heatingLevelAvailable</a></span> <span class="nv">heatingLevelAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingLevelAvailable">coolingLevelAvailable</a></span> <span class="nv">coolingLevelAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)horizontalPositionAvailable">horizontalPositionAvailable</a></span> <span class="nv">horizontalPositionAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)verticalPositionAvailable">verticalPositionAvailable</a></span> <span class="nv">verticalPositionAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)frontVerticalPositionAvailable">frontVerticalPositionAvailable</a></span> <span class="nv">frontVerticalPositionAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backVerticalPositionAvailable">backVerticalPositionAvailable</a></span> <span class="nv">backVerticalPositionAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backTiltAngleAvailable">backTiltAngleAvailable</a></span> <span class="nv">backTitlAngleAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportHorizontalPositionAvailable">headSupportHorizontalPositionAvailable</a></span> <span class="nv">headSupportHorizontalPositionAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportVerticalPositionAvailable">headSupportVerticalPositionAvailable</a></span> <span class="nv">headSupportVerticalPositionAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageEnabledAvailable">massageEnabledAvailable</a></span> <span class="nv">massageEnabledAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageModeAvailable">massageModeAvailable</a></span> <span class="nv">massageModeAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageCushionFirmnessAvailable">massageCushionFirmnessAvailable</a></span> <span class="nv">massageCushionFirmnessAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)memoryAvailable">memoryAvailable</a></span> <span class="nv">memoryAvail</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section-moduleName">
+ moduleName
+ </h3>
+
+ <p>@abstract The short friendly name of the light control module.
+ It should not be used to identify a module by mobile application.</p>
+
+<p>Required, Max length 100 chars</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">moduleName</span><span class="p">:</span> <span class="kt">String</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatingEnabledAvailable">
+ heatingEnabledAvailable
+ </h3>
+
+ <p>@abstract Whether or not heating is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingEnabledAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatingEnabledAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-coolingEnabledAvailable">
+ coolingEnabledAvailable
+ </h3>
+
+ <p>@abstract Whether or not cooling is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingEnabledAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">coolingEnabledAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatingLevelAvailable">
+ heatingLevelAvailable
+ </h3>
+
+ <p>@abstract Whether or not heating level is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingLevelAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatingLevelAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-coolingLevelAvailable">
+ coolingLevelAvailable
+ </h3>
+
+ <p>@abstract Whether or not cooling level is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingLevelAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">coolingLevelAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-horizontalPositionAvailable">
+ horizontalPositionAvailable
+ </h3>
+
+ <p>@abstract Whether or not horizontal Position is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">horizontalPositionAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">horizontalPositionAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-verticalPositionAvailable">
+ verticalPositionAvailable
+ </h3>
+
+ <p>@abstract Whether or not vertical Position is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">verticalPositionAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">verticalPositionAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-frontVerticalPositionAvailable">
+ frontVerticalPositionAvailable
+ </h3>
+
+ <p>@abstract Whether or not front Vertical Position is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frontVerticalPositionAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">frontVerticalPositionAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-backVerticalPositionAvailable">
+ backVerticalPositionAvailable
+ </h3>
+
+ <p>@abstract Whether or not back Vertical Position is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backVerticalPositionAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">backVerticalPositionAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-backTiltAngleAvailable">
+ backTiltAngleAvailable
+ </h3>
+
+ <p>@abstract Whether or not backTilt Angle Available is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backTiltAngleAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">backTiltAngleAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-headSupportHorizontalPositionAvailable">
+ headSupportHorizontalPositionAvailable
+ </h3>
+
+ <p>@abstract Whether or not head Supports for Horizontal Position is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportHorizontalPositionAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">headSupportHorizontalPositionAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-headSupportVerticalPositionAvailable">
+ headSupportVerticalPositionAvailable
+ </h3>
+
+ <p>@abstract Whether or not head Supports for Vertical Position is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportVerticalPositionAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">headSupportVerticalPositionAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-massageEnabledAvailable">
+ massageEnabledAvailable
+ </h3>
+
+ <p>@abstract Whether or not massage Enabled is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageEnabledAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">massageEnabledAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-massageModeAvailable">
+ massageModeAvailable
+ </h3>
+
+ <p>@abstract Whether or not massage Mode is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageModeAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">massageModeAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-massageCushionFirmnessAvailable">
+ massageCushionFirmnessAvailable
+ </h3>
+
+ <p>@abstract Whether or not massage Cushion Firmness is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageCushionFirmnessAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">massageCushionFirmnessAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-memoryAvailable">
+ memoryAvailable
+ </h3>
+
+ <p>@abstract Whether or not memory is Available.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">memoryAvailable</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">memoryAvailable</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLSeatControlData.html b/docs/Classes/SDLSeatControlData.html
new file mode 100644
index 000000000..36e76d12a
--- /dev/null
+++ b/docs/Classes/SDLSeatControlData.html
@@ -0,0 +1,467 @@
+<h1>SDLSeatControlData Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithId:">-initWithId:</a></li>
+ <li><a href="#section--initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:">-initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:</a></li>
+ <li><a href="#section-id">id</a></li>
+ <li><a href="#section-heatingEnabled">heatingEnabled</a></li>
+ <li><a href="#section-coolingEnabled">coolingEnabled</a></li>
+ <li><a href="#section-heatingLevel">heatingLevel</a></li>
+ <li><a href="#section-coolingLevel">coolingLevel</a></li>
+ <li><a href="#section-horizontalPosition">horizontalPosition</a></li>
+ <li><a href="#section-verticalPosition">verticalPosition</a></li>
+ <li><a href="#section-frontVerticalPosition">frontVerticalPosition</a></li>
+ <li><a href="#section-backVerticalPosition">backVerticalPosition</a></li>
+ <li><a href="#section-backTiltAngle">backTiltAngle</a></li>
+ <li><a href="#section-headSupportHorizontalPosition">headSupportHorizontalPosition</a></li>
+ <li><a href="#section-headSupportVerticalPosition">headSupportVerticalPosition</a></li>
+ <li><a href="#section-massageEnabled">massageEnabled</a></li>
+ <li><a href="#section-massageMode">massageMode</a></li>
+ <li><a href="#section-massageCushionFirmness">massageCushionFirmness</a></li>
+ <li><a href="#section-memory">memory</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Seat control data corresponds to <q>SEAT</q> ModuleType.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithId:">
+ -initWithId:
+ </h3>
+
+ <p>Constructs a newly allocated SDLSeatControlData object with cushion and firmness</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span><span class="p">)</span><span class="nv">supportedSeat</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n"><a href="../Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)id">id</a></span> <span class="nv">supportedSeat</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>supportedSeat</dt>
+ <dd><p>id of remote controllable seat.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLSeatControlData class</p>
+ </div>
+
+ <h3 id="section--initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:">
+ -initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:
+ </h3>
+
+ <p>Constructs a newly allocated SDLSeatControlData object with cushion and firmness</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span><span class="p">)</span><span class="nv">supportedSeat</span>
+ <span class="nf">heatingEnabled</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">heatingEnable</span>
+ <span class="nf">coolingEnable</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">coolingEnable</span>
+ <span class="nf">heatingLevel</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">heatingLevel</span>
+ <span class="nf">coolingLevel</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">coolingLevel</span>
+ <span class="nf">horizontalPostion</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">horizontal</span>
+ <span class="nf">verticalPostion</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">vertical</span>
+ <span class="nf">frontVerticalPostion</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">frontVertical</span>
+ <span class="nf">backVerticalPostion</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">backVertical</span>
+ <span class="nf">backTiltAngle</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">backAngle</span>
+ <span class="nf">headSupportedHorizontalPostion</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">headSupportedHorizontal</span>
+ <span class="nf">headSupportedVerticalPostion</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">headSupportedVertical</span>
+ <span class="nf">massageEnabled</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">massageEnable</span>
+ <span class="nf">massageMode</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMassageModeData.html">SDLMassageModeData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">massageMode</span>
+ <span class="nf">massageCussionFirmness</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMassageCushionFirmness.html">SDLMassageCushionFirmness</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">firmness</span>
+ <span class="nf">memory</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLSeatMemoryAction.html">SDLSeatMemoryAction</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">memoryAction</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n"><a href="../Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)id">id</a></span> <span class="nv">supportedSeat</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingEnabled">heatingEnabled</a></span> <span class="nv">heatingEnable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">coolingEnable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">heatingLevel</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">coolingLevel</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="n">horizontalPostion</span> <span class="nv">horizontal</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="n">verticalPostion</span> <span class="nv">vertical</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="n">frontVerticalPostion</span> <span class="nv">frontVertical</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="n">backVerticalPostion</span> <span class="nv">backVertical</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backTiltAngle">backTiltAngle</a></span> <span class="nv">backAngle</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="n">headSupportedHorizontalPostion</span> <span class="nv">headSupportedHorizontal</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="n">headSupportedVerticalPostion</span> <span class="nv">headSupportedVertical</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="n"><a href="../Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageEnabled">massageEnabled</a></span> <span class="nv">massageEnable</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">massageMode</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLMassageModeData.html">SDLMassageModeData</a></span><span class="p">],</span> <span class="n">massageCussionFirmness</span> <span class="nv">firmness</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLMassageCushionFirmness.html">SDLMassageCushionFirmness</a></span><span class="p">],</span> <span class="n"><a href="../Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)memory">memory</a></span> <span class="nv">memoryAction</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLSeatMemoryAction.html">SDLSeatMemoryAction</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>supportedSeat</dt>
+ <dd><p>id of remote controllable seat.</p></dd>
+ <dt>heatingEnable</dt>
+ <dd><p>Whether or not heating is enabled.</p></dd>
+ <dt>coolingEnable</dt>
+ <dd><p>Whether or not cooling is enabled.</p></dd>
+ <dt>heatingLevel</dt>
+ <dd><p>heating level</p></dd>
+ <dt>coolingLevel</dt>
+ <dd><p>cooling Level</p></dd>
+ <dt>horizontal</dt>
+ <dd><p>horizontal Position</p></dd>
+ <dt>vertical</dt>
+ <dd><p>vertical Position</p></dd>
+ <dt>frontVertical</dt>
+ <dd><p>frontVertical Position</p></dd>
+ <dt>backVertical</dt>
+ <dd><p>backVertical Position</p></dd>
+ <dt>backAngle</dt>
+ <dd><p>backAngle Position</p></dd>
+ <dt>headSupportedHorizontal</dt>
+ <dd><p>headSupportedHorizontal Position</p></dd>
+ <dt>headSupportedVertical</dt>
+ <dd><p>headSupportedVertical Position</p></dd>
+ <dt>massageEnable</dt>
+ <dd><p>Whether or not massage is enabled.</p></dd>
+ <dt>massageMode</dt>
+ <dd><p>Array of massage mode data.</p></dd>
+ <dt>firmness</dt>
+ <dd><p>Array of firmness data.</p></dd>
+ <dt>memoryAction</dt>
+ <dd><p>type of action to be performed.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLSeatControlData class</p>
+ </div>
+
+ <h3 id="section-id">
+ id
+ </h3>
+
+ <p>@abstract id of seat that is a remote controllable seat.</p>
+
+<p>Required</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span> <span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">id</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatingEnabled">
+ heatingEnabled
+ </h3>
+
+ <p>@abstract Whether or not heating is enabled.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingEnabled</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatingEnabled</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-coolingEnabled">
+ coolingEnabled
+ </h3>
+
+ <p>@abstract Whether or not cooling is enabled.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingEnabled</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">coolingEnabled</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-heatingLevel">
+ heatingLevel
+ </h3>
+
+ <p>@abstract heating level in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingLevel</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">heatingLevel</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-coolingLevel">
+ coolingLevel
+ </h3>
+
+ <p>@abstract cooling level in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingLevel</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">coolingLevel</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-horizontalPosition">
+ horizontalPosition
+ </h3>
+
+ <p>@abstract horizontal Position in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">horizontalPosition</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">horizontalPosition</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-verticalPosition">
+ verticalPosition
+ </h3>
+
+ <p>@abstract heating level in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">verticalPosition</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">verticalPosition</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-frontVerticalPosition">
+ frontVerticalPosition
+ </h3>
+
+ <p>@abstract heating level in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frontVerticalPosition</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">frontVerticalPosition</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-backVerticalPosition">
+ backVerticalPosition
+ </h3>
+
+ <p>@abstract heating level in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backVerticalPosition</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">backVerticalPosition</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-backTiltAngle">
+ backTiltAngle
+ </h3>
+
+ <p>@abstract heating level in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backTiltAngle</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">backTiltAngle</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-headSupportHorizontalPosition">
+ headSupportHorizontalPosition
+ </h3>
+
+ <p>@abstract head Support Horizontal Position in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportHorizontalPosition</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">headSupportHorizontalPosition</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-headSupportVerticalPosition">
+ headSupportVerticalPosition
+ </h3>
+
+ <p>@abstract head Support Vertical Position in integer</p>
+
+<p>Optional, MinValue- 0 MaxValue= 100</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportVerticalPosition</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">headSupportVerticalPosition</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-massageEnabled">
+ massageEnabled
+ </h3>
+
+ <p>@abstract Whether or not massage is enabled.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageEnabled</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">massageEnabled</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-massageMode">
+ massageMode
+ </h3>
+
+ <p>@abstract Array of massage mode data.</p>
+
+<p>Optional, Array of SDLMassageModeData objects, MinArray size-1 MaxArray size-2</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMassageModeData.html">SDLMassageModeData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">massageMode</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">massageMode</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLMassageModeData.html">SDLMassageModeData</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-massageCushionFirmness">
+ massageCushionFirmness
+ </h3>
+
+ <p>@abstract Array of firmness of a cushion.</p>
+
+<p>Optional, Array of SDLMassageCushionFirmness objects, MinArray size-1 MaxArray size-5</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMassageCushionFirmness.html">SDLMassageCushionFirmness</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">massageCushionFirmness</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">massageCushionFirmness</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLMassageCushionFirmness.html">SDLMassageCushionFirmness</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-memory">
+ memory
+ </h3>
+
+ <p>@abstract type of action to be performed</p>
+
+<p>Required, - see: SDLSeatMemoryAction</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSeatMemoryAction.html">SDLSeatMemoryAction</a></span> <span class="o">*</span><span class="n">memory</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">memory</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLSeatMemoryAction.html">SDLSeatMemoryAction</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLSeatMemoryAction.html b/docs/Classes/SDLSeatMemoryAction.html
new file mode 100644
index 000000000..472648ebb
--- /dev/null
+++ b/docs/Classes/SDLSeatMemoryAction.html
@@ -0,0 +1,142 @@
+<h1>SDLSeatMemoryAction Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithId:action:">-initWithId:action:</a></li>
+ <li><a href="#section--initWithId:label:action:">-initWithId:label:action:</a></li>
+ <li><a href="#section-id">id</a></li>
+ <li><a href="#section-label">label</a></li>
+ <li><a href="#section-action">action</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Specify the action to be performed.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithId:action:">
+ -initWithId:action:
+ </h3>
+
+ <p>@abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">id</span>
+ <span class="nf">action</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span><span class="p">)</span><span class="nv">action</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">id</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">action</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>id</dt>
+ <dd><p>of the action to be performed</p></dd>
+ <dt>action</dt>
+ <dd><p>type of action to be performed</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLSeatMemoryAction object</p>
+ </div>
+
+ <h3 id="section--initWithId:label:action:">
+ -initWithId:label:action:
+ </h3>
+
+ <p>@abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithId</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">id</span>
+ <span class="nf">label</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">label</span>
+ <span class="nf">action</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span><span class="p">)</span><span class="nv">action</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">id</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">label</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">action</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>id</dt>
+ <dd><p>of the action to be performed</p></dd>
+ <dt>label</dt>
+ <dd><p>of the action to be performed.</p></dd>
+ <dt>action</dt>
+ <dd><p>type of action to be performed</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLSeatMemoryAction object</p>
+ </div>
+
+ <h3 id="section-id">
+ id
+ </h3>
+
+ <p>@abstract id of the action to be performed.</p>
+
+<p>Required, MinValue- 0 MaxValue= 10</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">id</span><span class="p">:</span> <span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-label">
+ label
+ </h3>
+
+ <p>@abstract label of the action to be performed.</p>
+
+<p>Optional, Max length 100 chars</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">label</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">label</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-action">
+ action
+ </h3>
+
+ <p>@abstract type of action to be performed</p>
+
+<p>Required, - see: SDLSeatMemoryActionType</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span> <span class="n">_Nonnull</span> <span class="n">action</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">action</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLSetDisplayLayout.html b/docs/Classes/SDLSetDisplayLayout.html
index 6a7cb8f1c..4735477d3 100644
--- a/docs/Classes/SDLSetDisplayLayout.html
+++ b/docs/Classes/SDLSetDisplayLayout.html
@@ -5,7 +5,10 @@
<ul>
<li><a href="#section--initWithPredefinedLayout:">-initWithPredefinedLayout:</a></li>
<li><a href="#section--initWithLayout:">-initWithLayout:</a></li>
+ <li><a href="#section--initWithPredefinedLayout:dayColorScheme:nightColorScheme:">-initWithPredefinedLayout:dayColorScheme:nightColorScheme:</a></li>
<li><a href="#section-displayLayout">displayLayout</a></li>
+ <li><a href="#section-dayColorScheme">dayColorScheme</a></li>
+ <li><a href="#section-nightColorScheme">nightColorScheme</a></li>
</ul>
<h3>Overview</h3>
@@ -53,6 +56,24 @@
+ <h3 id="section--initWithPredefinedLayout:dayColorScheme:nightColorScheme:">
+ -initWithPredefinedLayout:dayColorScheme:nightColorScheme:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithPredefinedLayout</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout">SDLPredefinedLayout</a></span><span class="p">)</span><span class="nv">predefinedLayout</span> <span class="nf">dayColorScheme</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">dayColorScheme</span> <span class="nf">nightColorScheme</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">nightColorScheme</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">predefinedLayout</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout">SDLPredefinedLayout</a></span><span class="p">,</span> <span class="nv">dayColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">,</span> <span class="nv">nightColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">)</span></code></pre>
+
+
+
+
<h3 id="section-displayLayout">
displayLayout
</h3>
@@ -74,4 +95,46 @@ presets. Currently defined for GEN2</p>
+ <h3 id="section-dayColorScheme">
+ dayColorScheme
+ </h3>
+
+ <p>The color scheme to be used on a head unit using a <q>light</q> or <q>day</q> color scheme. The OEM may only support this theme if their head unit only has a light color scheme.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">dayColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-nightColorScheme">
+ nightColorScheme
+ </h3>
+
+ <p>The color scheme to be used on a head unit using a <q>dark</q> or <q>night</q> color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">nightColorScheme</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLSetMediaClockTimer.html b/docs/Classes/SDLSetMediaClockTimer.html
index f89c66683..f2f462c28 100644
--- a/docs/Classes/SDLSetMediaClockTimer.html
+++ b/docs/Classes/SDLSetMediaClockTimer.html
@@ -3,11 +3,13 @@
<h3>Section Contents</h3>
<ul>
+ <li><a href="#section--initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:">-initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:</a></li>
<li><a href="#section--initWithUpdateMode:hours:minutes:seconds:">-initWithUpdateMode:hours:minutes:seconds:</a></li>
<li><a href="#section--initWithUpdateMode:">-initWithUpdateMode:</a></li>
<li><a href="#section-startTime">startTime</a></li>
<li><a href="#section-endTime">endTime</a></li>
<li><a href="#section-updateMode">updateMode</a></li>
+ <li><a href="#section-audioStreamingIndicator">audioStreamingIndicator</a></li>
</ul>
<h3>Overview</h3>
@@ -23,6 +25,24 @@
<section class="section task-group-section">
+ <h3 id="section--initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:">
+ -initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithUpdateMode</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode">SDLUpdateMode</a></span><span class="p">)</span><span class="nv">updateMode</span> <span class="nf">hours</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">hours</span> <span class="nf">minutes</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">minutes</span> <span class="nf">seconds</span><span class="p">:(</span><span class="n">UInt8</span><span class="p">)</span><span class="nv">seconds</span> <span class="nf">audioStreamingIndicator</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span><span class="p">)</span><span class="nv">audioStreamingIndicator</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">updateMode</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode">SDLUpdateMode</a></span><span class="p">,</span> <span class="nv">hours</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">minutes</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">seconds</span><span class="p">:</span> <span class="kt">UInt8</span><span class="p">,</span> <span class="nv">audioStreamingIndicator</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span><span class="p">)</span></code></pre>
+
+
+
+
<h3 id="section--initWithUpdateMode:hours:minutes:seconds:">
-initWithUpdateMode:hours:minutes:seconds:
</h3>
@@ -134,4 +154,27 @@
+ <h3 id="section-audioStreamingIndicator">
+ audioStreamingIndicator
+ </h3>
+
+ <p>The audio streaming indicator used for a play/pause button.</p>
+
+<p>@discussion Set the indicator icon of a play/pause button depending on the
+ current audio playback. This parameter is optional. If omitted the last indicator sent
+ will not change.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span> <span class="n">audioStreamingIndicator</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">audioStreamingIndicator</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLSingleTireStatus.html b/docs/Classes/SDLSingleTireStatus.html
index d7abe37ff..78b676dae 100644
--- a/docs/Classes/SDLSingleTireStatus.html
+++ b/docs/Classes/SDLSingleTireStatus.html
@@ -4,6 +4,8 @@
<ul>
<li><a href="#section-status">status</a></li>
+ <li><a href="#section-monitoringSystemStatus">monitoringSystemStatus</a></li>
+ <li><a href="#section-pressure">pressure</a></li>
</ul>
<h3>Overview</h3>
@@ -38,4 +40,45 @@
+ <h3 id="section-monitoringSystemStatus">
+ monitoringSystemStatus
+ </h3>
+
+ <p>The status of TPMS for this particular tire</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">monitoringSystemStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">monitoringSystemStatus</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-pressure">
+ pressure
+ </h3>
+
+ <p>The pressure value of this particular tire in kPa (kilopascals)</p>
+
+<p>Optional, Float, 0-2000</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">pressure</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">pressure</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLStationIDNumber.html b/docs/Classes/SDLStationIDNumber.html
new file mode 100644
index 000000000..804efefa2
--- /dev/null
+++ b/docs/Classes/SDLStationIDNumber.html
@@ -0,0 +1,79 @@
+<h1>SDLStationIDNumber Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithCountryCode:fccFacilityId:">-initWithCountryCode:fccFacilityId:</a></li>
+ <li><a href="#section-countryCode">countryCode</a></li>
+ <li><a href="#section-fccFacilityId">fccFacilityId</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Describes the hour, minute and second values used to set the media clock.</p>
+
+<p>@since SDL 1.0</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithCountryCode:fccFacilityId:">
+ -initWithCountryCode:fccFacilityId:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithCountryCode</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">countryCode</span> <span class="nf">fccFacilityId</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">id</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">countryCode</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="n"><a href="../Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)fccFacilityId">fccFacilityId</a></span> <span class="nv">id</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?)</span></code></pre>
+
+
+
+
+ <h3 id="section-countryCode">
+ countryCode
+ </h3>
+
+ <p>@abstract Binary Representation of ITU Country Code. USA Code is 001.</p>
+
+<p>Optional, Integer, 0 - 999</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">countryCode</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">countryCode</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-fccFacilityId">
+ fccFacilityId
+ </h3>
+
+ <p>@abstract Binary representation of unique facility ID assigned by the FCC
+ FCC controlled for U.S. territory</p>
+
+<p>Optional, Integer, 0 - 999</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fccFacilityId</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fccFacilityId</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLStreamingMediaManager.html b/docs/Classes/SDLStreamingMediaManager.html
index aaadc850f..f1a5384f9 100644
--- a/docs/Classes/SDLStreamingMediaManager.html
+++ b/docs/Classes/SDLStreamingMediaManager.html
@@ -21,7 +21,11 @@
<li><a href="#section--init">-init</a></li>
<li><a href="#section--initWithConnectionManager:configuration:">-initWithConnectionManager:configuration:</a></li>
<li><a href="#section--startWithProtocol:">-startWithProtocol:</a></li>
+ <li><a href="#section--startAudioWithProtocol:">-startAudioWithProtocol:</a></li>
+ <li><a href="#section--startVideoWithProtocol:">-startVideoWithProtocol:</a></li>
<li><a href="#section--stop">-stop</a></li>
+ <li><a href="#section--stopAudio">-stopAudio</a></li>
+ <li><a href="#section--stopVideo">-stopVideo</a></li>
<li><a href="#section--sendVideoData:">-sendVideoData:</a></li>
<li><a href="#section--sendVideoData:presentationTimestamp:">-sendVideoData:presentationTimestamp:</a></li>
<li><a href="#section--sendAudioData:">-sendAudioData:</a></li>
@@ -79,12 +83,12 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">UIViewController</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rootViewController</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">UIViewController</span> <span class="o">*</span><span class="n">rootViewController</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">rootViewController</span><span class="p">:</span> <span class="kt">UIViewController</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">rootViewController</span><span class="p">:</span> <span class="kt">UIViewController</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -389,6 +393,42 @@
+ <h3 id="section--startAudioWithProtocol:">
+ -startAudioWithProtocol:
+ </h3>
+
+ <p>Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startAudioWithProtocol</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">startAudio</span><span class="p">(</span><span class="n">with</span> <span class="nv">protocol</span><span class="p">:</span> <span class="kt">SDLProtocol</span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section--startVideoWithProtocol:">
+ -startVideoWithProtocol:
+ </h3>
+
+ <p>Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startVideoWithProtocol</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">startVideo</span><span class="p">(</span><span class="n">with</span> <span class="nv">protocol</span><span class="p">:</span> <span class="kt">SDLProtocol</span><span class="p">)</span></code></pre>
+
+
+
+
<h3 id="section--stop">
-stop
</h3>
@@ -407,6 +447,42 @@
+ <h3 id="section--stopAudio">
+ -stopAudio
+ </h3>
+
+ <p>Stop the audio feature of the manager. This method is used internally.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">stopAudio</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">stopAudio</span><span class="p">()</span></code></pre>
+
+
+
+
+ <h3 id="section--stopVideo">
+ -stopVideo
+ </h3>
+
+ <p>Stop the video feature of the manager. This method is used internally.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">stopVideo</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">stopVideo</span><span class="p">()</span></code></pre>
+
+
+
+
<h3 id="section--sendVideoData:">
-sendVideoData:
</h3>
diff --git a/docs/Classes/SDLSubscribeVehicleData.html b/docs/Classes/SDLSubscribeVehicleData.html
index 05545dd3c..02ac82aa2 100644
--- a/docs/Classes/SDLSubscribeVehicleData.html
+++ b/docs/Classes/SDLSubscribeVehicleData.html
@@ -4,11 +4,13 @@
<ul>
<li><a href="#section--initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:">-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:</a></li>
+ <li><a href="#section--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:">-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:</a></li>
<li><a href="#section-gps">gps</a></li>
<li><a href="#section-speed">speed</a></li>
<li><a href="#section-rpm">rpm</a></li>
<li><a href="#section-fuelLevel">fuelLevel</a></li>
<li><a href="#section-fuelLevel_State">fuelLevel_State</a></li>
+ <li><a href="#section-fuelRange">fuelRange</a></li>
<li><a href="#section-instantFuelConsumption">instantFuelConsumption</a></li>
<li><a href="#section-externalTemperature">externalTemperature</a></li>
<li><a href="#section-prndl">prndl</a></li>
@@ -20,6 +22,7 @@
<li><a href="#section-driverBraking">driverBraking</a></li>
<li><a href="#section-wiperStatus">wiperStatus</a></li>
<li><a href="#section-headLampStatus">headLampStatus</a></li>
+ <li><a href="#section-engineOilLife">engineOilLife</a></li>
<li><a href="#section-engineTorque">engineTorque</a></li>
<li><a href="#section-accPedalPosition">accPedalPosition</a></li>
<li><a href="#section-steeringWheelAngle">steeringWheelAngle</a></li>
@@ -28,23 +31,23 @@
<li><a href="#section-emergencyEvent">emergencyEvent</a></li>
<li><a href="#section-clusterModeStatus">clusterModeStatus</a></li>
<li><a href="#section-myKey">myKey</a></li>
+ <li><a href="#section-electronicParkBrakeStatus">electronicParkBrakeStatus</a></li>
+ <li><a href="#section-turnSignal">turnSignal</a></li>
</ul>
<h3>Overview</h3>
-<p>Subscribes for 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
- very much dependent on sensors, vehicle architecture and vehicle type. Be
- also prepared for the situation that a signal is not available on a vehicle
- <p>
- Function Group: Location, VehicleInfo and DrivingChara
- <p>
- <b>HMILevel needs to be FULL, LIMITED or BACKGROUND</b>
- </p></p>
+<p>Subscribes to specific published vehicle data items. The data will be only sent if it has changed. The application will be notified by the <code>onVehicleData</code> notification whenever new data is available. The update rate is dependent on sensors, vehicle architecture and vehicle type.</p>
+<div class="aside aside-warning">
+ <p class="aside-title">Warning</p>
+ A vehicle may only support a subset of the vehicle data items. Be prepared for the situation where a signal is not available on a vehicle.
-<p>Since SmartDeviceLink 2.0<br/>
- See SDLUnsubscribeVehicleData SDLGetVehicleData</p>
+</div>
+
+<p>Function Group: Location, VehicleInfo and DrivingChara
+ HMILevel needs to be FULL, LIMITED or BACKGROUND
+ Since SmartDeviceLink 2.0
+ See SDLUnsubscribeVehicleData, SDLGetVehicleData</p>
<section class="section task-group-section">
@@ -52,7 +55,7 @@
-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:
</h3>
- <p>Initialize a subscribe RPC with various possible to describe to</p>
+ <p>Convenience init for subscribing to all possible vehicle data items.</p>
@@ -92,64 +95,173 @@
<h4>Parameters</h4>
<dl>
<dt>accelerationPedalPosition</dt>
- <dd><p>Subcribe to accelerationPedalPosition</p></dd>
+ <dd><p>Subscribe to accelerationPedalPosition</p></dd>
<dt>airbagStatus</dt>
- <dd><p>Subcribe to airbagStatus</p></dd>
+ <dd><p>Subscribe to airbagStatus</p></dd>
<dt>beltStatus</dt>
- <dd><p>Subcribe to beltStatus</p></dd>
+ <dd><p>Subscribe to beltStatus</p></dd>
<dt>bodyInformation</dt>
- <dd><p>Subcribe to bodyInformation</p></dd>
+ <dd><p>Subscribe to bodyInformation</p></dd>
<dt>clusterModeStatus</dt>
- <dd><p>Subcribe to clusterModeStatus</p></dd>
+ <dd><p>Subscribe to clusterModeStatus</p></dd>
<dt>deviceStatus</dt>
- <dd><p>Subcribe to deviceStatus</p></dd>
+ <dd><p>Subscribe to deviceStatus</p></dd>
<dt>driverBraking</dt>
- <dd><p>Subcribe to driverBraking</p></dd>
+ <dd><p>Subscribe to driverBraking</p></dd>
<dt>eCallInfo</dt>
- <dd><p>Subcribe to eCallInfo</p></dd>
+ <dd><p>Subscribe to eCallInfo</p></dd>
<dt>emergencyEvent</dt>
- <dd><p>Subcribe to v</p></dd>
+ <dd><p>Subscribe to emergencyEvent</p></dd>
<dt>engineTorque</dt>
- <dd><p>Subcribe to engineTorque</p></dd>
+ <dd><p>Subscribe to engineTorque</p></dd>
<dt>externalTemperature</dt>
- <dd><p>Subcribe to externalTemperature</p></dd>
+ <dd><p>Subscribe to externalTemperature</p></dd>
<dt>fuelLevel</dt>
- <dd><p>Subcribe to fuelLevel</p></dd>
+ <dd><p>Subscribe to fuelLevel</p></dd>
<dt>fuelLevelState</dt>
- <dd><p>Subcribe to fuelLevelState</p></dd>
+ <dd><p>Subscribe to fuelLevelState</p></dd>
<dt>gps</dt>
- <dd><p>Subcribe to gps</p></dd>
+ <dd><p>Subscribe to gps</p></dd>
<dt>headLampStatus</dt>
- <dd><p>Subcribe to headLampStatus</p></dd>
+ <dd><p>Subscribe to headLampStatus</p></dd>
<dt>instantFuelConsumption</dt>
- <dd><p>Subcribe to instantFuelConsumption</p></dd>
+ <dd><p>Subscribe to instantFuelConsumption</p></dd>
<dt>myKey</dt>
- <dd><p>Subcribe to myKey</p></dd>
+ <dd><p>Subscribe to myKey</p></dd>
<dt>odometer</dt>
- <dd><p>Subcribe to odometer</p></dd>
+ <dd><p>Subscribe to odometer</p></dd>
<dt>prndl</dt>
- <dd><p>Subcribe to prndl</p></dd>
+ <dd><p>Subscribe to prndl</p></dd>
<dt>rpm</dt>
- <dd><p>Subcribe to rpm</p></dd>
+ <dd><p>Subscribe to rpm</p></dd>
<dt>speed</dt>
- <dd><p>Subcribe to speed</p></dd>
+ <dd><p>Subscribe to speed</p></dd>
<dt>steeringWheelAngle</dt>
- <dd><p>Subcribe to steeringWheelAngle</p></dd>
+ <dd><p>Subscribe to steeringWheelAngle</p></dd>
<dt>tirePressure</dt>
- <dd><p>Subcribe to tirePressure</p></dd>
+ <dd><p>Subscribe to tirePressure</p></dd>
<dt>wiperStatus</dt>
- <dd><p>Subcribe to wiperStatus</p></dd>
+ <dd><p>Subscribe to wiperStatus</p></dd>
</dl>
<div>
<h4>Return Value</h4>
- <p>The RPC</p>
+ <p>A SDLSubscribeVehicleData object</p>
+ </div>
+
+ <h3 id="section--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:">
+ -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:
+ </h3>
+
+ <p>Convenience init for subscribing to all possible vehicle data items.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithAccelerationPedalPosition</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">accelerationPedalPosition</span>
+ <span class="nf">airbagStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">airbagStatus</span>
+ <span class="nf">beltStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">beltStatus</span>
+ <span class="nf">bodyInformation</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">bodyInformation</span>
+ <span class="nf">clusterModeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">clusterModeStatus</span>
+ <span class="nf">deviceStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">deviceStatus</span>
+ <span class="nf">driverBraking</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">driverBraking</span>
+ <span class="nf">eCallInfo</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">eCallInfo</span>
+ <span class="nf">electronicParkBrakeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">electronicParkBrakeStatus</span>
+ <span class="nf">emergencyEvent</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">emergencyEvent</span>
+ <span class="nf">engineOilLife</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineOilLife</span>
+ <span class="nf">engineTorque</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineTorque</span>
+ <span class="nf">externalTemperature</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">externalTemperature</span>
+ <span class="nf">fuelLevel</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevel</span>
+ <span class="nf">fuelLevelState</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevelState</span>
+ <span class="nf">fuelRange</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelRange</span>
+ <span class="nf">gps</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">gps</span>
+ <span class="nf">headLampStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headLampStatus</span>
+ <span class="nf">instantFuelConsumption</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">instantFuelConsumption</span>
+ <span class="nf">myKey</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">myKey</span>
+ <span class="nf">odometer</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">odometer</span>
+ <span class="nf">prndl</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">prndl</span>
+ <span class="nf">rpm</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rpm</span>
+ <span class="nf">speed</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">speed</span>
+ <span class="nf">steeringWheelAngle</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">steeringWheelAngle</span>
+ <span class="nf">tirePressure</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">tirePressure</span>
+ <span class="nf">turnSignal</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">turnSignal</span>
+ <span class="nf">wiperStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">wiperStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">accelerationPedalPosition</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">airbagStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">beltStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">bodyInformation</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">clusterModeStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">deviceStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">driverBraking</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">eCallInfo</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">emergencyEvent</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">engineTorque</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">externalTemperature</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelLevel</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelLevelState</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">gps</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">headLampStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">instantFuelConsumption</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">myKey</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">odometer</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">prndl</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">rpm</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">speed</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">steeringWheelAngle</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">tirePressure</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">wiperStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>accelerationPedalPosition</dt>
+ <dd><p>Subscribe to accelerationPedalPosition</p></dd>
+ <dt>airbagStatus</dt>
+ <dd><p>Subscribe to airbagStatus</p></dd>
+ <dt>beltStatus</dt>
+ <dd><p>Subscribe to beltStatus</p></dd>
+ <dt>bodyInformation</dt>
+ <dd><p>Subscribe to bodyInformation</p></dd>
+ <dt>clusterModeStatus</dt>
+ <dd><p>Subscribe to clusterModeStatus</p></dd>
+ <dt>deviceStatus</dt>
+ <dd><p>Subscribe to deviceStatus</p></dd>
+ <dt>driverBraking</dt>
+ <dd><p>Subscribe to driverBraking</p></dd>
+ <dt>eCallInfo</dt>
+ <dd><p>Subscribe to eCallInfo</p></dd>
+ <dt>electronicParkBrakeStatus</dt>
+ <dd><p>Subscribe to electronicParkBrakeStatus</p></dd>
+ <dt>emergencyEvent</dt>
+ <dd><p>Subscribe to emergencyEvent</p></dd>
+ <dt>engineOilLife</dt>
+ <dd><p>Subscribe to engineOilLife</p></dd>
+ <dt>engineTorque</dt>
+ <dd><p>Subscribe to engineTorque</p></dd>
+ <dt>externalTemperature</dt>
+ <dd><p>Subscribe to externalTemperature</p></dd>
+ <dt>fuelLevel</dt>
+ <dd><p>Subscribe to fuelLevel</p></dd>
+ <dt>fuelLevelState</dt>
+ <dd><p>Subscribe to fuelLevelState</p></dd>
+ <dt>fuelRange</dt>
+ <dd><p>Subscribe to fuelRange</p></dd>
+ <dt>gps</dt>
+ <dd><p>Subscribe to gps</p></dd>
+ <dt>headLampStatus</dt>
+ <dd><p>Subscribe to headLampStatus</p></dd>
+ <dt>instantFuelConsumption</dt>
+ <dd><p>Subscribe to instantFuelConsumption</p></dd>
+ <dt>myKey</dt>
+ <dd><p>Subscribe to myKey</p></dd>
+ <dt>odometer</dt>
+ <dd><p>Subscribe to odometer</p></dd>
+ <dt>prndl</dt>
+ <dd><p>Subscribe to prndl</p></dd>
+ <dt>rpm</dt>
+ <dd><p>Subscribe to rpm</p></dd>
+ <dt>speed</dt>
+ <dd><p>Subscribe to speed</p></dd>
+ <dt>steeringWheelAngle</dt>
+ <dd><p>Subscribe to steeringWheelAngle</p></dd>
+ <dt>tirePressure</dt>
+ <dd><p>Subscribe to tirePressure</p></dd>
+ <dt>turnSignal</dt>
+ <dd><p>Subscribe to turnSignal</p></dd>
+ <dt>wiperStatus</dt>
+ <dd><p>Subscribe to wiperStatus</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLSubscribeVehicleData object</p>
</div>
<h3 id="section-gps">
gps
</h3>
- <p>A boolean value. If true, subscribes Gps data</p>
+ <p>A boolean value. If true, subscribes GPS data.</p>
@@ -167,7 +279,7 @@
speed
</h3>
- <p>A boolean value. If true, subscribes speed data</p>
+ <p>A boolean value. If true, subscribes Speed data.</p>
@@ -185,7 +297,7 @@
rpm
</h3>
- <p>A boolean value. If true, subscribes rpm data</p>
+ <p>A boolean value. If true, subscribes RPM data.</p>
@@ -203,7 +315,7 @@
fuelLevel
</h3>
- <p>A boolean value. If true, subscribes FuelLevel data</p>
+ <p>A boolean value. If true, subscribes Fuel Level data.</p>
@@ -221,7 +333,7 @@
fuelLevel_State
</h3>
- <p>A boolean value. If true, subscribes fuelLevel_State data</p>
+ <p>A boolean value. If true, subscribes Fuel Level State data.</p>
@@ -236,11 +348,29 @@
+ <h3 id="section-fuelRange">
+ fuelRange
+ </h3>
+
+ <p>A boolean value. If true, subscribes Fuel Range data.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-instantFuelConsumption">
instantFuelConsumption
</h3>
- <p>A boolean value. If true, subscribes instantFuelConsumption data</p>
+ <p>A boolean value. If true, subscribes Instant Fuel Consumption data.</p>
@@ -259,7 +389,7 @@
externalTemperature
</h3>
- <p>A boolean value. If true, subscribes externalTemperature data</p>
+ <p>A boolean value. If true, subscribes External Temperature data.</p>
@@ -278,7 +408,7 @@
prndl
</h3>
- <p>A boolean value. If true, subscribes Currently selected gear data</p>
+ <p>A boolean value. If true, subscribes PRNDL data.</p>
@@ -296,7 +426,7 @@
tirePressure
</h3>
- <p>A boolean value. If true, subscribes tire pressure status data</p>
+ <p>A boolean value. If true, subscribes Tire Pressure status data.</p>
@@ -315,7 +445,7 @@
odometer
</h3>
- <p>A boolean value. If true, subscribes odometer data</p>
+ <p>A boolean value. If true, subscribes Odometer data.</p>
@@ -333,7 +463,7 @@
beltStatus
</h3>
- <p>A boolean value. If true, subscribes belt Status data</p>
+ <p>A boolean value. If true, subscribes Belt Status data.</p>
@@ -351,7 +481,7 @@
bodyInformation
</h3>
- <p>A boolean value. If true, subscribes body Information data</p>
+ <p>A boolean value. If true, subscribes Body Information data.</p>
@@ -370,7 +500,7 @@
deviceStatus
</h3>
- <p>A boolean value. If true, subscribes device Status data</p>
+ <p>A boolean value. If true, subscribes Device Status data.</p>
@@ -389,7 +519,7 @@
driverBraking
</h3>
- <p>A boolean value. If true, subscribes driver Braking data</p>
+ <p>A boolean value. If true, subscribes Driver Braking data.</p>
@@ -408,7 +538,7 @@
wiperStatus
</h3>
- <p>A boolean value. If true, subscribes wiper Status data</p>
+ <p>A boolean value. If true, subscribes Wiper Status data.</p>
@@ -427,7 +557,7 @@
headLampStatus
</h3>
- <p>A boolean value. If true, subscribes Head Lamp Status data</p>
+ <p>A boolean value. If true, subscribes Head Lamp Status data.</p>
@@ -442,11 +572,30 @@
+ <h3 id="section-engineOilLife">
+ engineOilLife
+ </h3>
+
+ <p>A boolean value. If true, subscribes to Engine Oil Life data.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-engineTorque">
engineTorque
</h3>
- <p>A boolean value. If true, subscribes Engine Torque data</p>
+ <p>A boolean value. If true, subscribes Engine Torque data.</p>
@@ -465,8 +614,7 @@
accPedalPosition
</h3>
- <p>A boolean value. If true, means the accPedalPosition data has been
-subscribed.</p>
+ <p>A boolean value. If true, subscribes Acc Pedal Position data.</p>
@@ -485,8 +633,7 @@ subscribed.</p>
steeringWheelAngle
</h3>
- <p>A boolean value. If true, means the steeringWheelAngle data has been
-subscribed.</p>
+ <p>A boolean value. If true, subscribes Steering Wheel Angle data.</p>
@@ -505,7 +652,7 @@ subscribed.</p>
eCallInfo
</h3>
- <p>Subscribe to eCallInfo</p>
+ <p>A boolean value. If true, subscribes eCall Info data.</p>
@@ -523,7 +670,7 @@ subscribed.</p>
airbagStatus
</h3>
- <p>Subscribe to airbagStatus</p>
+ <p>A boolean value. If true, subscribes Airbag Status data.</p>
@@ -542,7 +689,7 @@ subscribed.</p>
emergencyEvent
</h3>
- <p>Subscribe to emergencyEvent</p>
+ <p>A boolean value. If true, subscribes Emergency Event data.</p>
@@ -561,7 +708,7 @@ subscribed.</p>
clusterModeStatus
</h3>
- <p>Subscribe to clusterModeStatus</p>
+ <p>A boolean value. If true, subscribes Cluster Mode Status data.</p>
@@ -580,7 +727,7 @@ subscribed.</p>
myKey
</h3>
- <p>Subscribe to myKey</p>
+ <p>A boolean value. If true, subscribes myKey data.</p>
@@ -594,4 +741,41 @@ subscribed.</p>
+ <h3 id="section-electronicParkBrakeStatus">
+ electronicParkBrakeStatus
+ </h3>
+
+ <p>A boolean value. If true, subscribes to the electronic parking brake status.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-turnSignal">
+ turnSignal
+ </h3>
+
+ <p>A boolean value. If true, subscribes to the turn signal status.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLSubscribeVehicleDataResponse.html b/docs/Classes/SDLSubscribeVehicleDataResponse.html
index 2bff71bff..02eed7d86 100644
--- a/docs/Classes/SDLSubscribeVehicleDataResponse.html
+++ b/docs/Classes/SDLSubscribeVehicleDataResponse.html
@@ -8,6 +8,7 @@
<li><a href="#section-rpm">rpm</a></li>
<li><a href="#section-fuelLevel">fuelLevel</a></li>
<li><a href="#section-fuelLevel_State">fuelLevel_State</a></li>
+ <li><a href="#section-fuelRange">fuelRange</a></li>
<li><a href="#section-instantFuelConsumption">instantFuelConsumption</a></li>
<li><a href="#section-externalTemperature">externalTemperature</a></li>
<li><a href="#section-prndl">prndl</a></li>
@@ -19,6 +20,7 @@
<li><a href="#section-driverBraking">driverBraking</a></li>
<li><a href="#section-wiperStatus">wiperStatus</a></li>
<li><a href="#section-headLampStatus">headLampStatus</a></li>
+ <li><a href="#section-engineOilLife">engineOilLife</a></li>
<li><a href="#section-engineTorque">engineTorque</a></li>
<li><a href="#section-accPedalPosition">accPedalPosition</a></li>
<li><a href="#section-steeringWheelAngle">steeringWheelAngle</a></li>
@@ -27,6 +29,8 @@
<li><a href="#section-emergencyEvent">emergencyEvent</a></li>
<li><a href="#section-clusterModes">clusterModes</a></li>
<li><a href="#section-myKey">myKey</a></li>
+ <li><a href="#section-electronicParkBrakeStatus">electronicParkBrakeStatus</a></li>
+ <li><a href="#section-turnSignal">turnSignal</a></li>
</ul>
<h3>Overview</h3>
@@ -139,6 +143,27 @@
+ <h3 id="section-fuelRange">
+ fuelRange
+ </h3>
+
+ <p>The result of requesting to subscribe to the fuel range.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-instantFuelConsumption">
instantFuelConsumption
</h3>
@@ -369,6 +394,27 @@
+ <h3 id="section-engineOilLife">
+ engineOilLife
+ </h3>
+
+ <p>The result of requesting to subscribe to the estimated percentage of remaining oil life of the engine.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-engineTorque">
engineTorque
</h3>
@@ -536,4 +582,46 @@
+ <h3 id="section-electronicParkBrakeStatus">
+ electronicParkBrakeStatus
+ </h3>
+
+ <p>The result of requesting to subscribe to the electronic parking brake status</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-turnSignal">
+ turnSignal
+ </h3>
+
+ <p>The result of requesting to subscribe to the turn signal</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLTTSChunk.html b/docs/Classes/SDLTTSChunk.html
index da3657ba1..afce88e97 100644
--- a/docs/Classes/SDLTTSChunk.html
+++ b/docs/Classes/SDLTTSChunk.html
@@ -9,6 +9,7 @@
<li><a href="#section-+lhPlusChunksFromString:">+lhPlusChunksFromString:</a></li>
<li><a href="#section-+prerecordedChunksFromString:">+prerecordedChunksFromString:</a></li>
<li><a href="#section-+silenceChunks">+silenceChunks</a></li>
+ <li><a href="#section-+fileChunksWithName:">+fileChunksWithName:</a></li>
<li><a href="#section-text">text</a></li>
<li><a href="#section-type">type</a></li>
</ul>
@@ -189,11 +190,39 @@
<p>The RPC</p>
</div>
+ <h3 id="section-+fileChunksWithName:">
+ +fileChunksWithName:
+ </h3>
+
+ <p>Create <q>TTS</q> to play an audio file previously uploaded to the system.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLTTSChunk</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nf">fileChunksWithName</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">fileName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kd">func</span> <span class="nf">fileChunks</span><span class="p">(</span><span class="n">withName</span> <span class="nv">fileName</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="kt">SDLTTSChunk</span><span class="p">]</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>fileName</dt>
+ <dd><p>The name of the file used in the SDLFile or PutFile that was uploaded</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The RPC</p>
+ </div>
+
<h3 id="section-text">
text
</h3>
- <p>Text to be spoken, or a phoneme specification, or the name of a pre-recorded sound. The contents of this field are indicated by the <q>type</q> field.</p>
+ <p>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 <q>type</q> field.</p>
<p>Required, Max length 500</p>
diff --git a/docs/Classes/SDLTemplateColorScheme.html b/docs/Classes/SDLTemplateColorScheme.html
new file mode 100644
index 000000000..fa6aeea1a
--- /dev/null
+++ b/docs/Classes/SDLTemplateColorScheme.html
@@ -0,0 +1,109 @@
+<h1>SDLTemplateColorScheme Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:">-initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:</a></li>
+ <li><a href="#section--initWithPrimaryColor:secondaryColor:backgroundColor:">-initWithPrimaryColor:secondaryColor:backgroundColor:</a></li>
+ <li><a href="#section-primaryColor">primaryColor</a></li>
+ <li><a href="#section-secondaryColor">secondaryColor</a></li>
+ <li><a href="#section-backgroundColor">backgroundColor</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:">
+ -initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithPrimaryRGBColor</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">primaryColor</span> <span class="nf">secondaryRGBColor</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryColor</span> <span class="nf">backgroundRGBColor</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">backgroundColor</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">primaryRGBColor</span> <span class="nv">primaryColor</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span><span class="p">,</span> <span class="n">secondaryRGBColor</span> <span class="nv">secondaryColor</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span><span class="p">,</span> <span class="n">backgroundRGBColor</span> <span class="nv">backgroundColor</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section--initWithPrimaryColor:secondaryColor:backgroundColor:">
+ -initWithPrimaryColor:secondaryColor:backgroundColor:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithPrimaryColor</span><span class="p">:(</span><span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">primaryColor</span> <span class="nf">secondaryColor</span><span class="p">:(</span><span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">secondaryColor</span> <span class="nf">backgroundColor</span><span class="p">:(</span><span class="n">UIColor</span> <span class="o">*</span><span class="p">)</span><span class="nv">backgroundColor</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">primaryColor</span><span class="p">:</span> <span class="kt">UIColor</span><span class="p">,</span> <span class="nv">secondaryColor</span><span class="p">:</span> <span class="kt">UIColor</span><span class="p">,</span> <span class="nv">backgroundColor</span><span class="p">:</span> <span class="kt">UIColor</span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section-primaryColor">
+ primaryColor
+ </h3>
+
+ <p>The <q>primary</q> 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 <code>mediaClockTimer</code> bar and the highlight color of soft buttons.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">primaryColor</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">primaryColor</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-secondaryColor">
+ secondaryColor
+ </h3>
+
+ <p>The <q>secondary</q> 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.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">secondaryColor</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">secondaryColor</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-backgroundColor">
+ backgroundColor
+ </h3>
+
+ <p>The background color to be used on the template. If the OEM does not support this parameter, assume on <q>dayColorScheme</q> that this will be a light color, and on <q>nightColorScheme</q> a dark color. You should do the same for your custom schemes.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">backgroundColor</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">backgroundColor</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Classes/SDLUnsubscribeVehicleData.html b/docs/Classes/SDLUnsubscribeVehicleData.html
index 48917bfd4..a7ab630cc 100644
--- a/docs/Classes/SDLUnsubscribeVehicleData.html
+++ b/docs/Classes/SDLUnsubscribeVehicleData.html
@@ -4,11 +4,13 @@
<ul>
<li><a href="#section--initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:">-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:</a></li>
+ <li><a href="#section--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:">-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:</a></li>
<li><a href="#section-gps">gps</a></li>
<li><a href="#section-speed">speed</a></li>
<li><a href="#section-rpm">rpm</a></li>
<li><a href="#section-fuelLevel">fuelLevel</a></li>
<li><a href="#section-fuelLevel_State">fuelLevel_State</a></li>
+ <li><a href="#section-fuelRange">fuelRange</a></li>
<li><a href="#section-instantFuelConsumption">instantFuelConsumption</a></li>
<li><a href="#section-externalTemperature">externalTemperature</a></li>
<li><a href="#section-prndl">prndl</a></li>
@@ -20,6 +22,7 @@
<li><a href="#section-driverBraking">driverBraking</a></li>
<li><a href="#section-wiperStatus">wiperStatus</a></li>
<li><a href="#section-headLampStatus">headLampStatus</a></li>
+ <li><a href="#section-engineOilLife">engineOilLife</a></li>
<li><a href="#section-engineTorque">engineTorque</a></li>
<li><a href="#section-accPedalPosition">accPedalPosition</a></li>
<li><a href="#section-steeringWheelAngle">steeringWheelAngle</a></li>
@@ -28,6 +31,8 @@
<li><a href="#section-emergencyEvent">emergencyEvent</a></li>
<li><a href="#section-clusterModeStatus">clusterModeStatus</a></li>
<li><a href="#section-myKey">myKey</a></li>
+ <li><a href="#section-electronicParkBrakeStatus">electronicParkBrakeStatus</a></li>
+ <li><a href="#section-turnSignal">turnSignal</a></li>
</ul>
<h3>Overview</h3>
@@ -49,12 +54,36 @@
-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:
</h3>
- <p>Undocumented</p>
+ <p>Convenience init for unsubscribing to all possible vehicle data items.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithAccelerationPedalPosition</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">accelerationPedalPosition</span> <span class="nf">airbagStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">airbagStatus</span> <span class="nf">beltStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">beltStatus</span> <span class="nf">bodyInformation</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">bodyInformation</span> <span class="nf">clusterModeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">clusterModeStatus</span> <span class="nf">deviceStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">deviceStatus</span> <span class="nf">driverBraking</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">driverBraking</span> <span class="nf">eCallInfo</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">eCallInfo</span> <span class="nf">emergencyEvent</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">emergencyEvent</span> <span class="nf">engineTorque</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineTorque</span> <span class="nf">externalTemperature</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">externalTemperature</span> <span class="nf">fuelLevel</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevel</span> <span class="nf">fuelLevelState</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevelState</span> <span class="nf">gps</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">gps</span> <span class="nf">headLampStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headLampStatus</span> <span class="nf">instantFuelConsumption</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">instantFuelConsumption</span> <span class="nf">myKey</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">myKey</span> <span class="nf">odometer</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">odometer</span> <span class="nf">prndl</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">prndl</span> <span class="nf">rpm</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rpm</span> <span class="nf">speed</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">speed</span> <span class="nf">steeringWheelAngle</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">steeringWheelAngle</span> <span class="nf">tirePressure</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">tirePressure</span> <span class="nf">wiperStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithAccelerationPedalPosition</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">accelerationPedalPosition</span>
+ <span class="nf">airbagStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">airbagStatus</span>
+ <span class="nf">beltStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">beltStatus</span>
+ <span class="nf">bodyInformation</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">bodyInformation</span>
+ <span class="nf">clusterModeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">clusterModeStatus</span>
+ <span class="nf">deviceStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">deviceStatus</span>
+ <span class="nf">driverBraking</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">driverBraking</span>
+ <span class="nf">eCallInfo</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">eCallInfo</span>
+ <span class="nf">emergencyEvent</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">emergencyEvent</span>
+ <span class="nf">engineTorque</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineTorque</span>
+ <span class="nf">externalTemperature</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">externalTemperature</span>
+ <span class="nf">fuelLevel</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevel</span>
+ <span class="nf">fuelLevelState</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevelState</span>
+ <span class="nf">gps</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">gps</span>
+ <span class="nf">headLampStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headLampStatus</span>
+ <span class="nf">instantFuelConsumption</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">instantFuelConsumption</span>
+ <span class="nf">myKey</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">myKey</span>
+ <span class="nf">odometer</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">odometer</span>
+ <span class="nf">prndl</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">prndl</span>
+ <span class="nf">rpm</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rpm</span>
+ <span class="nf">speed</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">speed</span>
+ <span class="nf">steeringWheelAngle</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">steeringWheelAngle</span>
+ <span class="nf">tirePressure</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">tirePressure</span>
+ <span class="nf">wiperStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -62,12 +91,176 @@
+ <h4>Parameters</h4>
+ <dl>
+ <dt>accelerationPedalPosition</dt>
+ <dd><p>Unsubscribe to accelerationPedalPosition</p></dd>
+ <dt>airbagStatus</dt>
+ <dd><p>Unsubscribe to airbagStatus</p></dd>
+ <dt>beltStatus</dt>
+ <dd><p>Unsubscribe to beltStatus</p></dd>
+ <dt>bodyInformation</dt>
+ <dd><p>Unsubscribe to bodyInformation</p></dd>
+ <dt>clusterModeStatus</dt>
+ <dd><p>Unsubscribe to clusterModeStatus</p></dd>
+ <dt>deviceStatus</dt>
+ <dd><p>Unsubscribe to deviceStatus</p></dd>
+ <dt>driverBraking</dt>
+ <dd><p>Unsubscribe to driverBraking</p></dd>
+ <dt>eCallInfo</dt>
+ <dd><p>Unsubscribe to eCallInfo</p></dd>
+ <dt>emergencyEvent</dt>
+ <dd><p>Unsubscribe to emergencyEvent</p></dd>
+ <dt>engineTorque</dt>
+ <dd><p>Unsubscribe to engineTorque</p></dd>
+ <dt>externalTemperature</dt>
+ <dd><p>Unsubscribe to externalTemperature</p></dd>
+ <dt>fuelLevel</dt>
+ <dd><p>Unsubscribe to fuelLevel</p></dd>
+ <dt>fuelLevelState</dt>
+ <dd><p>Unsubscribe to fuelLevelState</p></dd>
+ <dt>gps</dt>
+ <dd><p>Unsubscribe to gps</p></dd>
+ <dt>headLampStatus</dt>
+ <dd><p>Unsubscribe to headLampStatus</p></dd>
+ <dt>instantFuelConsumption</dt>
+ <dd><p>Unsubscribe to instantFuelConsumption</p></dd>
+ <dt>myKey</dt>
+ <dd><p>Unsubscribe to myKey</p></dd>
+ <dt>odometer</dt>
+ <dd><p>Unsubscribe to odometer</p></dd>
+ <dt>prndl</dt>
+ <dd><p>Unsubscribe to prndl</p></dd>
+ <dt>rpm</dt>
+ <dd><p>Unsubscribe to rpm</p></dd>
+ <dt>speed</dt>
+ <dd><p>Unsubscribe to speed</p></dd>
+ <dt>steeringWheelAngle</dt>
+ <dd><p>Unsubscribe to steeringWheelAngle</p></dd>
+ <dt>tirePressure</dt>
+ <dd><p>Unsubscribe to tirePressure</p></dd>
+ <dt>wiperStatus</dt>
+ <dd><p>Unsubscribe to wiperStatus</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLUnsubscribeVehicleData object</p>
+ </div>
+
+ <h3 id="section--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:">
+ -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:
+ </h3>
+
+ <p>Convenience init for unsubscribing to all possible vehicle data items.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+<span class="nf">initWithAccelerationPedalPosition</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">accelerationPedalPosition</span>
+ <span class="nf">airbagStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">airbagStatus</span>
+ <span class="nf">beltStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">beltStatus</span>
+ <span class="nf">bodyInformation</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">bodyInformation</span>
+ <span class="nf">clusterModeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">clusterModeStatus</span>
+ <span class="nf">deviceStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">deviceStatus</span>
+ <span class="nf">driverBraking</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">driverBraking</span>
+ <span class="nf">eCallInfo</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">eCallInfo</span>
+ <span class="nf">electronicParkBrakeStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">electronicParkBrakeStatus</span>
+ <span class="nf">emergencyEvent</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">emergencyEvent</span>
+ <span class="nf">engineOilLife</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineOilLife</span>
+ <span class="nf">engineTorque</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">engineTorque</span>
+ <span class="nf">externalTemperature</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">externalTemperature</span>
+ <span class="nf">fuelLevel</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevel</span>
+ <span class="nf">fuelLevelState</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelLevelState</span>
+ <span class="nf">fuelRange</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">fuelRange</span>
+ <span class="nf">gps</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">gps</span>
+ <span class="nf">headLampStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">headLampStatus</span>
+ <span class="nf">instantFuelConsumption</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">instantFuelConsumption</span>
+ <span class="nf">myKey</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">myKey</span>
+ <span class="nf">odometer</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">odometer</span>
+ <span class="nf">prndl</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">prndl</span>
+ <span class="nf">rpm</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">rpm</span>
+ <span class="nf">speed</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">speed</span>
+ <span class="nf">steeringWheelAngle</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">steeringWheelAngle</span>
+ <span class="nf">tirePressure</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">tirePressure</span>
+ <span class="nf">turnSignal</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">turnSignal</span>
+ <span class="nf">wiperStatus</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">wiperStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">accelerationPedalPosition</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">airbagStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">beltStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">bodyInformation</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">clusterModeStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">deviceStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">driverBraking</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">eCallInfo</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">emergencyEvent</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">engineTorque</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">externalTemperature</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelLevel</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelLevelState</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">gps</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">headLampStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">instantFuelConsumption</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">myKey</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">odometer</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">prndl</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">rpm</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">speed</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">steeringWheelAngle</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">tirePressure</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">wiperStatus</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>accelerationPedalPosition</dt>
+ <dd><p>Unsubscribe to accelerationPedalPosition</p></dd>
+ <dt>airbagStatus</dt>
+ <dd><p>Unsubscribe to airbagStatus</p></dd>
+ <dt>beltStatus</dt>
+ <dd><p>Unsubscribe to beltStatus</p></dd>
+ <dt>bodyInformation</dt>
+ <dd><p>Unsubscribe to bodyInformation</p></dd>
+ <dt>clusterModeStatus</dt>
+ <dd><p>Unsubscribe to clusterModeStatus</p></dd>
+ <dt>deviceStatus</dt>
+ <dd><p>Unsubscribe to deviceStatus</p></dd>
+ <dt>driverBraking</dt>
+ <dd><p>Unsubscribe to driverBraking</p></dd>
+ <dt>eCallInfo</dt>
+ <dd><p>Unsubscribe to eCallInfo</p></dd>
+ <dt>electronicParkBrakeStatus</dt>
+ <dd><p>Unsubscribe to electronicParkBrakeStatus</p></dd>
+ <dt>emergencyEvent</dt>
+ <dd><p>Unsubscribe to emergencyEvent</p></dd>
+ <dt>engineOilLife</dt>
+ <dd><p>Unsubscribe to engineOilLife</p></dd>
+ <dt>engineTorque</dt>
+ <dd><p>Unsubscribe to engineTorque</p></dd>
+ <dt>externalTemperature</dt>
+ <dd><p>Unsubscribe to externalTemperature</p></dd>
+ <dt>fuelLevel</dt>
+ <dd><p>Unsubscribe to fuelLevel</p></dd>
+ <dt>fuelLevelState</dt>
+ <dd><p>Unsubscribe to fuelLevelState</p></dd>
+ <dt>fuelRange</dt>
+ <dd><p>Unsubscribe to fuelRange</p></dd>
+ <dt>gps</dt>
+ <dd><p>Unsubscribe to gps</p></dd>
+ <dt>headLampStatus</dt>
+ <dd><p>Unsubscribe to headLampStatus</p></dd>
+ <dt>instantFuelConsumption</dt>
+ <dd><p>Unsubscribe to instantFuelConsumption</p></dd>
+ <dt>myKey</dt>
+ <dd><p>Unsubscribe to myKey</p></dd>
+ <dt>odometer</dt>
+ <dd><p>Unsubscribe to odometer</p></dd>
+ <dt>prndl</dt>
+ <dd><p>Unsubscribe to prndl</p></dd>
+ <dt>rpm</dt>
+ <dd><p>Unsubscribe to rpm</p></dd>
+ <dt>speed</dt>
+ <dd><p>Unsubscribe to speed</p></dd>
+ <dt>steeringWheelAngle</dt>
+ <dd><p>Unsubscribe to steeringWheelAngle</p></dd>
+ <dt>tirePressure</dt>
+ <dd><p>Unsubscribe to tirePressure</p></dd>
+ <dt>turnSignal</dt>
+ <dd><p>Unsubscribe to turnSignal</p></dd>
+ <dt>wiperStatus</dt>
+ <dd><p>Unsubscribe to wiperStatus</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A SDLUnsubscribeVehicleData object</p>
+ </div>
<h3 id="section-gps">
gps
</h3>
- <p>A boolean value. If true, unsubscribes Gps data</p>
+ <p>If true, unsubscribes from GPS</p>
@@ -85,7 +278,7 @@
speed
</h3>
- <p>A boolean value. If true, unsubscribes speed data</p>
+ <p>If true, unsubscribes from Speed</p>
@@ -103,7 +296,7 @@
rpm
</h3>
- <p>A boolean value. If true, unsubscribe data</p>
+ <p>If true, unsubscribes from RPM</p>
@@ -121,7 +314,7 @@
fuelLevel
</h3>
- <p>A boolean value. If true, unsubscribes FuelLevel data</p>
+ <p>If true, unsubscribes from Fuel Level</p>
@@ -139,7 +332,7 @@
fuelLevel_State
</h3>
- <p>A boolean value. If true, unsubscribes fuelLevel_State data</p>
+ <p>If true, unsubscribes from Fuel Level State</p>
@@ -154,11 +347,29 @@
+ <h3 id="section-fuelRange">
+ fuelRange
+ </h3>
+
+ <p>If true, unsubscribes from Fuel Range</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-instantFuelConsumption">
instantFuelConsumption
</h3>
- <p>A boolean value. If true, unsubscribes instantFuelConsumption data</p>
+ <p>If true, unsubscribes from Instant Fuel Consumption</p>
@@ -177,7 +388,7 @@
externalTemperature
</h3>
- <p>A boolean value. If true, unsubscribes externalTemperature data</p>
+ <p>If true, unsubscribes from External Temperature</p>
@@ -196,7 +407,7 @@
prndl
</h3>
- <p>A boolean value. If true, unsubscribes Currently selected gear data</p>
+ <p>If true, unsubscribes from PRNDL</p>
@@ -214,7 +425,7 @@
tirePressure
</h3>
- <p>A boolean value. If true, unsubscribes tire pressure status data</p>
+ <p>If true, unsubscribes from Tire Pressure</p>
@@ -233,7 +444,7 @@
odometer
</h3>
- <p>A boolean value. If true, unsubscribes odometer data</p>
+ <p>If true, unsubscribes from Odometer</p>
@@ -251,7 +462,7 @@
beltStatus
</h3>
- <p>A boolean value. If true, unsubscribes belt Status data</p>
+ <p>If true, unsubscribes from Belt Status</p>
@@ -269,7 +480,7 @@
bodyInformation
</h3>
- <p>A boolean value. If true, unsubscribes body Information data</p>
+ <p>If true, unsubscribes from Body Information</p>
@@ -288,7 +499,7 @@
deviceStatus
</h3>
- <p>A boolean value. If true, unsubscribes device Status data</p>
+ <p>If true, unsubscribes from Device Status</p>
@@ -307,7 +518,7 @@
driverBraking
</h3>
- <p>A boolean value. If true, unsubscribes driver Braking data</p>
+ <p>If true, unsubscribes from Driver Braking</p>
@@ -326,7 +537,7 @@
wiperStatus
</h3>
- <p>A boolean value. If true, unsubscribes wiper Status data</p>
+ <p>If true, unsubscribes from Wiper Status</p>
@@ -345,7 +556,7 @@
headLampStatus
</h3>
- <p>A boolean value. If true, unsubscribes Head Lamp Status data</p>
+ <p>If true, unsubscribes from Head Lamp Status</p>
@@ -360,11 +571,30 @@
+ <h3 id="section-engineOilLife">
+ engineOilLife
+ </h3>
+
+ <p>If true, unsubscribes from Engine Oil Life</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-engineTorque">
engineTorque
</h3>
- <p>A boolean value. If true, unsubscribes Engine Torque data</p>
+ <p>If true, unsubscribes from Engine Torque</p>
@@ -383,7 +613,7 @@
accPedalPosition
</h3>
- <p>A boolean value. If true, unsubscribes accPedalPosition data</p>
+ <p>If true, unsubscribes from Acc Pedal Position</p>
@@ -402,7 +632,7 @@
steeringWheelAngle
</h3>
- <p>If true, unsubscribes from steeringWheelAngle</p>
+ <p>If true, unsubscribes from Steering Wheel Angle data</p>
@@ -439,7 +669,7 @@
airbagStatus
</h3>
- <p>If true, unsubscribes from airbagStatus</p>
+ <p>If true, unsubscribes from Airbag Status</p>
@@ -458,7 +688,7 @@
emergencyEvent
</h3>
- <p>If true, unsubscribes from emergencyEvent</p>
+ <p>If true, unsubscribes from Emergency Event</p>
@@ -477,7 +707,7 @@
clusterModeStatus
</h3>
- <p>If true, unsubscribes from clusterModeStatus</p>
+ <p>If true, unsubscribes from Cluster Mode Status</p>
@@ -496,7 +726,7 @@
myKey
</h3>
- <p>If true, unsubscribes from myKey</p>
+ <p>If true, unsubscribes from My Key</p>
@@ -510,4 +740,41 @@
+ <h3 id="section-electronicParkBrakeStatus">
+ electronicParkBrakeStatus
+ </h3>
+
+ <p>A boolean value. If true, unsubscribes to the Electronic Parking Brake Status</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-turnSignal">
+ turnSignal
+ </h3>
+
+ <p>A boolean value. If true, unsubscribes to the Turn Signal</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">)?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLUnsubscribeVehicleDataResponse.html b/docs/Classes/SDLUnsubscribeVehicleDataResponse.html
index 50015c73e..e51ad8714 100644
--- a/docs/Classes/SDLUnsubscribeVehicleDataResponse.html
+++ b/docs/Classes/SDLUnsubscribeVehicleDataResponse.html
@@ -8,6 +8,7 @@
<li><a href="#section-rpm">rpm</a></li>
<li><a href="#section-fuelLevel">fuelLevel</a></li>
<li><a href="#section-fuelLevel_State">fuelLevel_State</a></li>
+ <li><a href="#section-fuelRange">fuelRange</a></li>
<li><a href="#section-instantFuelConsumption">instantFuelConsumption</a></li>
<li><a href="#section-externalTemperature">externalTemperature</a></li>
<li><a href="#section-prndl">prndl</a></li>
@@ -19,6 +20,7 @@
<li><a href="#section-driverBraking">driverBraking</a></li>
<li><a href="#section-wiperStatus">wiperStatus</a></li>
<li><a href="#section-headLampStatus">headLampStatus</a></li>
+ <li><a href="#section-engineOilLife">engineOilLife</a></li>
<li><a href="#section-engineTorque">engineTorque</a></li>
<li><a href="#section-accPedalPosition">accPedalPosition</a></li>
<li><a href="#section-steeringWheelAngle">steeringWheelAngle</a></li>
@@ -27,6 +29,8 @@
<li><a href="#section-emergencyEvent">emergencyEvent</a></li>
<li><a href="#section-clusterModes">clusterModes</a></li>
<li><a href="#section-myKey">myKey</a></li>
+ <li><a href="#section-electronicParkBrakeStatus">electronicParkBrakeStatus</a></li>
+ <li><a href="#section-turnSignal">turnSignal</a></li>
</ul>
<h3>Overview</h3>
@@ -41,7 +45,7 @@
gps
</h3>
- <p>The result of requesting to subscribe to the GPSData.</p>
+ <p>The result of requesting to unsubscribe to the GPSData.</p>
<p>Optional</p>
@@ -61,7 +65,7 @@
speed
</h3>
- <p>The result of requesting to subscribe to the vehicle speed in kilometers per hour.</p>
+ <p>The result of requesting to unsubscribe to the vehicle speed in kilometers per hour.</p>
<p>Optional</p>
@@ -81,7 +85,7 @@
rpm
</h3>
- <p>The result of requesting to subscribe to the number of revolutions per minute of the engine.</p>
+ <p>The result of requesting to unsubscribe to the number of revolutions per minute of the engine.</p>
<p>Optional</p>
@@ -101,7 +105,7 @@
fuelLevel
</h3>
- <p>The result of requesting to subscribe to the fuel level in the tank (percentage)</p>
+ <p>The result of requesting to unsubscribe to the fuel level in the tank (percentage)</p>
<p>Optional</p>
@@ -122,7 +126,7 @@
fuelLevel_State
</h3>
- <p>The result of requesting to subscribe to the fuel level state.</p>
+ <p>The result of requesting to unsubscribe to the fuel level state.</p>
<p>Optional</p>
@@ -139,11 +143,32 @@
+ <h3 id="section-fuelRange">
+ fuelRange
+ </h3>
+
+ <p>The result of requesting to unsubscribe to the fuel range.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-instantFuelConsumption">
instantFuelConsumption
</h3>
- <p>The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.</p>
+ <p>The result of requesting to unsubscribe to the instantaneous fuel consumption in microlitres.</p>
<p>Optional</p>
@@ -164,7 +189,7 @@
externalTemperature
</h3>
- <p>The result of requesting to subscribe to the external temperature in degrees celsius.</p>
+ <p>The result of requesting to unsubscribe to the external temperature in degrees celsius.</p>
<p>Optional</p>
@@ -185,7 +210,7 @@
prndl
</h3>
- <p>The result of requesting to subscribe to the PRNDL status.</p>
+ <p>The result of requesting to unsubscribe to the PRNDL status.</p>
<p>Optional</p>
@@ -205,7 +230,7 @@
tirePressure
</h3>
- <p>The result of requesting to subscribe to the tireStatus.</p>
+ <p>The result of requesting to unsubscribe to the tireStatus.</p>
<p>Optional</p>
@@ -226,7 +251,7 @@
odometer
</h3>
- <p>The result of requesting to subscribe to the odometer in km.</p>
+ <p>The result of requesting to unsubscribe to the odometer in km.</p>
<p>Optional</p>
@@ -247,7 +272,7 @@
beltStatus
</h3>
- <p>The result of requesting to subscribe to the status of the seat belts.</p>
+ <p>The result of requesting to unsubscribe to the status of the seat belts.</p>
<p>Optional</p>
@@ -268,7 +293,7 @@
bodyInformation
</h3>
- <p>The result of requesting to subscribe to the body information including power modes.</p>
+ <p>The result of requesting to unsubscribe to the body information including power modes.</p>
<p>Optional</p>
@@ -289,7 +314,7 @@
deviceStatus
</h3>
- <p>The result of requesting to subscribe to the device status including signal and battery strength.</p>
+ <p>The result of requesting to unsubscribe to the device status including signal and battery strength.</p>
<p>Optional</p>
@@ -310,7 +335,7 @@
driverBraking
</h3>
- <p>The result of requesting to subscribe to the status of the brake pedal.</p>
+ <p>The result of requesting to unsubscribe to the status of the brake pedal.</p>
<p>Optional</p>
@@ -331,7 +356,7 @@
wiperStatus
</h3>
- <p>The result of requesting to subscribe to the status of the wipers.</p>
+ <p>The result of requesting to unsubscribe to the status of the wipers.</p>
<p>Optional</p>
@@ -352,7 +377,7 @@
headLampStatus
</h3>
- <p>The result of requesting to subscribe to the status of the head lamps.</p>
+ <p>The result of requesting to unsubscribe to the status of the head lamps.</p>
<p>Optional</p>
@@ -369,11 +394,32 @@
+ <h3 id="section-engineOilLife">
+ engineOilLife
+ </h3>
+
+ <p>The result of requesting to unsubscribe to the estimated percentage of remaining oil life of the engine.</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-engineTorque">
engineTorque
</h3>
- <p>The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.</p>
+ <p>The result of requesting to unsubscribe to the torque value for engine (in Nm) on non-diesel variants.</p>
<p>Optional</p>
@@ -394,7 +440,7 @@
accPedalPosition
</h3>
- <p>The result of requesting to subscribe to the accelerator pedal position (percentage depressed)</p>
+ <p>The result of requesting to unsubscribe to the accelerator pedal position (percentage depressed)</p>
<p>Optional</p>
@@ -415,7 +461,7 @@
steeringWheelAngle
</h3>
- <p>The result of requesting to subscribe to the current angle of the steering wheel (in deg)</p>
+ <p>The result of requesting to unsubscribe to the current angle of the steering wheel (in deg)</p>
<p>Optional</p>
@@ -436,7 +482,7 @@
eCallInfo
</h3>
- <p>The result of requesting to subscribe to the emergency call info</p>
+ <p>The result of requesting to unsubscribe to the emergency call info</p>
<p>Optional</p>
@@ -457,7 +503,7 @@
airbagStatus
</h3>
- <p>The result of requesting to subscribe to the airbag status</p>
+ <p>The result of requesting to unsubscribe to the airbag status</p>
<p>Optional</p>
@@ -478,7 +524,7 @@
emergencyEvent
</h3>
- <p>The result of requesting to subscribe to the emergency event</p>
+ <p>The result of requesting to unsubscribe to the emergency event</p>
<p>Optional</p>
@@ -499,7 +545,7 @@
clusterModes
</h3>
- <p>The result of requesting to subscribe to the cluster modes</p>
+ <p>The result of requesting to unsubscribe to the cluster modes</p>
<p>Optional</p>
@@ -520,7 +566,7 @@
myKey
</h3>
- <p>The result of requesting to subscribe to the myKey status</p>
+ <p>The result of requesting to unsubscribe to the myKey status</p>
<p>Optional</p>
@@ -536,4 +582,46 @@
+ <h3 id="section-electronicParkBrakeStatus">
+ electronicParkBrakeStatus
+ </h3>
+
+ <p>The result of requesting to unsubscribe to the electronic parking brake status</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-turnSignal">
+ turnSignal
+ </h3>
+
+ <p>The result of requesting to unsubscribe to the turn signal</p>
+
+<p>Optional</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Constants.html b/docs/Constants.html
index d39d85046..a5dfc6b5d 100644
--- a/docs/Constants.html
+++ b/docs/Constants.html
@@ -34,6 +34,10 @@
<li><a href="#section-SDLAppInterfaceUnregisteredReasonFactoryDefaults">SDLAppInterfaceUnregisteredReasonFactoryDefaults</a></li>
<li><a href="#section-SDLAppInterfaceUnregisteredReasonAppUnauthorized">SDLAppInterfaceUnregisteredReasonAppUnauthorized</a></li>
<li><a href="#section-SDLErrorDomainAudioStreamManager">SDLErrorDomainAudioStreamManager</a></li>
+ <li><a href="#section-SDLAudioStreamingIndicatorPlayPause">SDLAudioStreamingIndicatorPlayPause</a></li>
+ <li><a href="#section-SDLAudioStreamingIndicatorPlay">SDLAudioStreamingIndicatorPlay</a></li>
+ <li><a href="#section-SDLAudioStreamingIndicatorPause">SDLAudioStreamingIndicatorPause</a></li>
+ <li><a href="#section-SDLAudioStreamingIndicatorStop">SDLAudioStreamingIndicatorStop</a></li>
<li><a href="#section-SDLAudioStreamingStateAudible">SDLAudioStreamingStateAudible</a></li>
<li><a href="#section-SDLAudioStreamingStateAttenuated">SDLAudioStreamingStateAttenuated</a></li>
<li><a href="#section-SDLAudioStreamingStateNotAudible">SDLAudioStreamingStateNotAudible</a></li>
@@ -43,6 +47,7 @@
<li><a href="#section-SDLButtonEventModeButtonUp">SDLButtonEventModeButtonUp</a></li>
<li><a href="#section-SDLButtonEventModeButtonDown">SDLButtonEventModeButtonDown</a></li>
<li><a href="#section-SDLButtonNameOk">SDLButtonNameOk</a></li>
+ <li><a href="#section-SDLButtonNamePlayPause">SDLButtonNamePlayPause</a></li>
<li><a href="#section-SDLButtonNameSeekLeft">SDLButtonNameSeekLeft</a></li>
<li><a href="#section-SDLButtonNameSeekRight">SDLButtonNameSeekRight</a></li>
<li><a href="#section-SDLButtonNameTuneUp">SDLButtonNameTuneUp</a></li>
@@ -117,6 +122,9 @@
<li><a href="#section-SDLDimensionNoFix">SDLDimensionNoFix</a></li>
<li><a href="#section-SDLDimension2D">SDLDimension2D</a></li>
<li><a href="#section-SDLDimension3D">SDLDimension3D</a></li>
+ <li><a href="#section-SDLDisplayModeDay">SDLDisplayModeDay</a></li>
+ <li><a href="#section-SDLDisplayModeNight">SDLDisplayModeNight</a></li>
+ <li><a href="#section-SDLDisplayModeAuto">SDLDisplayModeAuto</a></li>
<li><a href="#section-SDLDisplayTypeCID">SDLDisplayTypeCID</a></li>
<li><a href="#section-SDLDisplayTypeType2">SDLDisplayTypeType2</a></li>
<li><a href="#section-SDLDisplayTypeType5">SDLDisplayTypeType5</a></li>
@@ -128,6 +136,8 @@
<li><a href="#section-SDLDisplayTypeMFD5">SDLDisplayTypeMFD5</a></li>
<li><a href="#section-SDLDisplayTypeGen38Inch">SDLDisplayTypeGen38Inch</a></li>
<li><a href="#section-SDLDisplayTypeGeneric">SDLDisplayTypeGeneric</a></li>
+ <li><a href="#section-SDLDistanceUnitMiles">SDLDistanceUnitMiles</a></li>
+ <li><a href="#section-SDLDistanceUnitKilometers">SDLDistanceUnitKilometers</a></li>
<li><a href="#section-SDLDriverDistractionStateOn">SDLDriverDistractionStateOn</a></li>
<li><a href="#section-SDLDriverDistractionStateOff">SDLDriverDistractionStateOff</a></li>
<li><a href="#section-SDLECallConfirmationStatusNormal">SDLECallConfirmationStatusNormal</a></li>
@@ -137,6 +147,11 @@
<li><a href="#section-SDLECallConfirmationStatusUnsuccessful">SDLECallConfirmationStatusUnsuccessful</a></li>
<li><a href="#section-SDLECallConfirmationStatusConfiguredOff">SDLECallConfirmationStatusConfiguredOff</a></li>
<li><a href="#section-SDLECallConfirmationStatusCompleteDTMFTimeout">SDLECallConfirmationStatusCompleteDTMFTimeout</a></li>
+ <li><a href="#section-SDLElectronicParkBrakeStatusClosed">SDLElectronicParkBrakeStatusClosed</a></li>
+ <li><a href="#section-SDLElectronicParkBrakeStatusTransition">SDLElectronicParkBrakeStatusTransition</a></li>
+ <li><a href="#section-SDLElectronicParkBrakeStatusOpen">SDLElectronicParkBrakeStatusOpen</a></li>
+ <li><a href="#section-SDLElectronicParkBrakeStatusDriveActive">SDLElectronicParkBrakeStatusDriveActive</a></li>
+ <li><a href="#section-SDLElectronicParkBrakeStatusFault">SDLElectronicParkBrakeStatusFault</a></li>
<li><a href="#section-SDLEmergencyEventTypeNoEvent">SDLEmergencyEventTypeNoEvent</a></li>
<li><a href="#section-SDLEmergencyEventTypeFrontal">SDLEmergencyEventTypeFrontal</a></li>
<li><a href="#section-SDLEmergencyEventTypeSide">SDLEmergencyEventTypeSide</a></li>
@@ -155,6 +170,12 @@
<li><a href="#section-SDLFuelCutoffStatusTerminateFuel">SDLFuelCutoffStatusTerminateFuel</a></li>
<li><a href="#section-SDLFuelCutoffStatusNormalOperation">SDLFuelCutoffStatusNormalOperation</a></li>
<li><a href="#section-SDLFuelCutoffStatusFault">SDLFuelCutoffStatusFault</a></li>
+ <li><a href="#section-SDLFuelTypeGasoline">SDLFuelTypeGasoline</a></li>
+ <li><a href="#section-SDLFuelTypeDiesel">SDLFuelTypeDiesel</a></li>
+ <li><a href="#section-SDLFuelTypeCNG">SDLFuelTypeCNG</a></li>
+ <li><a href="#section-SDLFuelTypeLPG">SDLFuelTypeLPG</a></li>
+ <li><a href="#section-SDLFuelTypeHydrogen">SDLFuelTypeHydrogen</a></li>
+ <li><a href="#section-SDLFuelTypeBattery">SDLFuelTypeBattery</a></li>
<li><a href="#section-SDLGlobalPropertyHelpPrompt">SDLGlobalPropertyHelpPrompt</a></li>
<li><a href="#section-SDLGlobalPropertyTimeoutPrompt">SDLGlobalPropertyTimeoutPrompt</a></li>
<li><a href="#section-SDLGlobalPropertyVoiceRecognitionHelpTitle">SDLGlobalPropertyVoiceRecognitionHelpTitle</a></li>
@@ -186,6 +207,7 @@
<li><a href="#section-SDLImageFieldNameCommandIcon">SDLImageFieldNameCommandIcon</a></li>
<li><a href="#section-SDLImageFieldNameAppIcon">SDLImageFieldNameAppIcon</a></li>
<li><a href="#section-SDLImageFieldNameGraphic">SDLImageFieldNameGraphic</a></li>
+ <li><a href="#section-SDLImageFieldNameSecondaryGraphic">SDLImageFieldNameSecondaryGraphic</a></li>
<li><a href="#section-SDLImageFieldNameShowConstantTBTIcon">SDLImageFieldNameShowConstantTBTIcon</a></li>
<li><a href="#section-SDLImageFieldNameShowConstantTBTNextTurnIcon">SDLImageFieldNameShowConstantTBTNextTurnIcon</a></li>
<li><a href="#section-SDLImageFieldNameLocationImage">SDLImageFieldNameLocationImage</a></li>
@@ -249,6 +271,60 @@
<li><a href="#section-SDLLayoutModeListOnly">SDLLayoutModeListOnly</a></li>
<li><a href="#section-SDLLayoutModeListWithSearch">SDLLayoutModeListWithSearch</a></li>
<li><a href="#section-SDLLayoutModeKeyboard">SDLLayoutModeKeyboard</a></li>
+ <li><a href="#section-SDLLightNameFrontLeftHighBeam">SDLLightNameFrontLeftHighBeam</a></li>
+ <li><a href="#section-SDLLightNameFrontRightHighBeam">SDLLightNameFrontRightHighBeam</a></li>
+ <li><a href="#section-SDLLightNameFrontLeftLowBeam">SDLLightNameFrontLeftLowBeam</a></li>
+ <li><a href="#section-SDLLightNameFrontRightLowBeam">SDLLightNameFrontRightLowBeam</a></li>
+ <li><a href="#section-SDLLightNameFrontLeftParkingLight">SDLLightNameFrontLeftParkingLight</a></li>
+ <li><a href="#section-SDLLightNameFrontRightParkingLight">SDLLightNameFrontRightParkingLight</a></li>
+ <li><a href="#section-SDLLightNameFrontLeftFogLight">SDLLightNameFrontLeftFogLight</a></li>
+ <li><a href="#section-SDLLightNameFrontRightFogLight">SDLLightNameFrontRightFogLight</a></li>
+ <li><a href="#section-SDLLightNameFrontLeftDaytimeRunningLight">SDLLightNameFrontLeftDaytimeRunningLight</a></li>
+ <li><a href="#section-SDLLightNameFrontRightDaytimeRunningLight">SDLLightNameFrontRightDaytimeRunningLight</a></li>
+ <li><a href="#section-SDLLightNameFrontLeftTurnLight">SDLLightNameFrontLeftTurnLight</a></li>
+ <li><a href="#section-SDLLightNameFrontRightTurnLight">SDLLightNameFrontRightTurnLight</a></li>
+ <li><a href="#section-SDLLightNameRearLeftFogLight">SDLLightNameRearLeftFogLight</a></li>
+ <li><a href="#section-SDLLightNameRearRightFogLight">SDLLightNameRearRightFogLight</a></li>
+ <li><a href="#section-SDLLightNameRearLeftTailLight">SDLLightNameRearLeftTailLight</a></li>
+ <li><a href="#section-SDLLightNameRearRightTailLight">SDLLightNameRearRightTailLight</a></li>
+ <li><a href="#section-SDLLightNameRearLeftBrakeLight">SDLLightNameRearLeftBrakeLight</a></li>
+ <li><a href="#section-SDLLightNameRearRightBrakeLight">SDLLightNameRearRightBrakeLight</a></li>
+ <li><a href="#section-SDLLightNameRearLeftTurnLight">SDLLightNameRearLeftTurnLight</a></li>
+ <li><a href="#section-SDLLightNameRearRightTurnLight">SDLLightNameRearRightTurnLight</a></li>
+ <li><a href="#section-SDLLightNameRearRegistrationPlateLight">SDLLightNameRearRegistrationPlateLight</a></li>
+ <li><a href="#section-SDLLightNameHighBeams">SDLLightNameHighBeams</a></li>
+ <li><a href="#section-SDLLightNameLowBeams">SDLLightNameLowBeams</a></li>
+ <li><a href="#section-SDLLightNameFogLights">SDLLightNameFogLights</a></li>
+ <li><a href="#section-SDLLightNameRunningLights">SDLLightNameRunningLights</a></li>
+ <li><a href="#section-SDLLightNameParkingLights">SDLLightNameParkingLights</a></li>
+ <li><a href="#section-SDLLightNameBrakeLights">SDLLightNameBrakeLights</a></li>
+ <li><a href="#section-SDLLightNameRearReversingLights">SDLLightNameRearReversingLights</a></li>
+ <li><a href="#section-SDLLightNameSideMarkerLights">SDLLightNameSideMarkerLights</a></li>
+ <li><a href="#section-SDLLightNameLeftTurnLights">SDLLightNameLeftTurnLights</a></li>
+ <li><a href="#section-SDLLightNameRightTurnLights">SDLLightNameRightTurnLights</a></li>
+ <li><a href="#section-SDLLightNameHazardLights">SDLLightNameHazardLights</a></li>
+ <li><a href="#section-SDLLightNameAmbientLights">SDLLightNameAmbientLights</a></li>
+ <li><a href="#section-SDLLightNameOverHeadLights">SDLLightNameOverHeadLights</a></li>
+ <li><a href="#section-SDLLightNameReadingLights">SDLLightNameReadingLights</a></li>
+ <li><a href="#section-SDLLightNameTrunkLights">SDLLightNameTrunkLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorFrontLights">SDLLightNameExteriorFrontLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorRearLights">SDLLightNameExteriorRearLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorLeftLights">SDLLightNameExteriorLeftLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorRightLights">SDLLightNameExteriorRightLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorRearCargoLights">SDLLightNameExteriorRearCargoLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorRearTruckBedLights">SDLLightNameExteriorRearTruckBedLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorRearTrailerLights">SDLLightNameExteriorRearTrailerLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorLeftSpotLights">SDLLightNameExteriorLeftSpotLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorRightSpotLights">SDLLightNameExteriorRightSpotLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorLeftPuddleLights">SDLLightNameExteriorLeftPuddleLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorRightPuddleLights">SDLLightNameExteriorRightPuddleLights</a></li>
+ <li><a href="#section-SDLLightNameExteriorAllLights">SDLLightNameExteriorAllLights</a></li>
+ <li><a href="#section-SDLLightStatusOn">SDLLightStatusOn</a></li>
+ <li><a href="#section-SDLLightStatusOFF">SDLLightStatusOFF</a></li>
+ <li><a href="#section-SDLLightStatusRampUp">SDLLightStatusRampUp</a></li>
+ <li><a href="#section-SDLLightStatusRampDown">SDLLightStatusRampDown</a></li>
+ <li><a href="#section-SDLLightStatusUnknown">SDLLightStatusUnknown</a></li>
+ <li><a href="#section-SDLLightStatusInvalid">SDLLightStatusInvalid</a></li>
<li><a href="#section-SDLLockScreenStatusOff">SDLLockScreenStatusOff</a></li>
<li><a href="#section-SDLLockScreenStatusOptional">SDLLockScreenStatusOptional</a></li>
<li><a href="#section-SDLLockScreenStatusRequired">SDLLockScreenStatusRequired</a></li>
@@ -256,6 +332,16 @@
<li><a href="#section-SDLMaintenanceModeStatusNear">SDLMaintenanceModeStatusNear</a></li>
<li><a href="#section-SDLMaintenanceModeStatusActive">SDLMaintenanceModeStatusActive</a></li>
<li><a href="#section-SDLMaintenanceModeStatusFeatureNotPresent">SDLMaintenanceModeStatusFeatureNotPresent</a></li>
+ <li><a href="#section-SDLMassageCushionTopLumbar">SDLMassageCushionTopLumbar</a></li>
+ <li><a href="#section-SDLMassageCushionMiddleLumbar">SDLMassageCushionMiddleLumbar</a></li>
+ <li><a href="#section-SDLMassageCushionBottomLumbar">SDLMassageCushionBottomLumbar</a></li>
+ <li><a href="#section-SDLMassageCushionBackBolsters">SDLMassageCushionBackBolsters</a></li>
+ <li><a href="#section-SDLMassageCushionSeatBolsters">SDLMassageCushionSeatBolsters</a></li>
+ <li><a href="#section-SDLMassageModeOff">SDLMassageModeOff</a></li>
+ <li><a href="#section-SDLMassageModeLow">SDLMassageModeLow</a></li>
+ <li><a href="#section-SDLMassageModeHigh">SDLMassageModeHigh</a></li>
+ <li><a href="#section-SDLMassageZoneLumbar">SDLMassageZoneLumbar</a></li>
+ <li><a href="#section-SDLMassageZoneSeatCushion">SDLMassageZoneSeatCushion</a></li>
<li><a href="#section-SDLMediaClockFormatClock1">SDLMediaClockFormatClock1</a></li>
<li><a href="#section-SDLMediaClockFormatClock2">SDLMediaClockFormatClock2</a></li>
<li><a href="#section-SDLMediaClockFormatClock3">SDLMediaClockFormatClock3</a></li>
@@ -277,9 +363,14 @@
<li><a href="#section-SDLMetadataTypeHumidity">SDLMetadataTypeHumidity</a></li>
<li><a href="#section-SDLModuleTypeClimate">SDLModuleTypeClimate</a></li>
<li><a href="#section-SDLModuleTypeRadio">SDLModuleTypeRadio</a></li>
+ <li><a href="#section-SDLModuleTypeSeat">SDLModuleTypeSeat</a></li>
+ <li><a href="#section-SDLModuleTypeAudio">SDLModuleTypeAudio</a></li>
+ <li><a href="#section-SDLModuleTypeLight">SDLModuleTypeLight</a></li>
+ <li><a href="#section-SDLModuleTypeHMISettings">SDLModuleTypeHMISettings</a></li>
<li><a href="#section-SDLNotificationUserInfoObject">SDLNotificationUserInfoObject</a></li>
<li><a href="#section-SDLTransportDidDisconnect">SDLTransportDidDisconnect</a></li>
<li><a href="#section-SDLTransportDidConnect">SDLTransportDidConnect</a></li>
+ <li><a href="#section-SDLTransportConnectError">SDLTransportConnectError</a></li>
<li><a href="#section-SDLDidReceiveError">SDLDidReceiveError</a></li>
<li><a href="#section-SDLDidReceiveLockScreenIcon">SDLDidReceiveLockScreenIcon</a></li>
<li><a href="#section-SDLDidBecomeReady">SDLDidBecomeReady</a></li>
@@ -348,6 +439,7 @@
<li><a href="#section-SDLDidReceiveNewHashNotification">SDLDidReceiveNewHashNotification</a></li>
<li><a href="#section-SDLDidReceiveVehicleIconNotification">SDLDidReceiveVehicleIconNotification</a></li>
<li><a href="#section-SDLDidChangePermissionsNotification">SDLDidChangePermissionsNotification</a></li>
+ <li><a href="#section-SDLDidReceiveRemoteControlStatusNotification">SDLDidReceiveRemoteControlStatusNotification</a></li>
<li><a href="#section-SDLDidReceiveSystemRequestNotification">SDLDidReceiveSystemRequestNotification</a></li>
<li><a href="#section-SDLDidChangeTurnByTurnStateNotification">SDLDidChangeTurnByTurnStateNotification</a></li>
<li><a href="#section-SDLDidReceiveTouchEventNotification">SDLDidReceiveTouchEventNotification</a></li>
@@ -418,6 +510,11 @@
<li><a href="#section-SDLPrimaryAudioSourceLineIn">SDLPrimaryAudioSourceLineIn</a></li>
<li><a href="#section-SDLPrimaryAudioSourceIpod">SDLPrimaryAudioSourceIpod</a></li>
<li><a href="#section-SDLPrimaryAudioSourceMobileApp">SDLPrimaryAudioSourceMobileApp</a></li>
+ <li><a href="#section-SDLPrimaryAudioSourceCD">SDLPrimaryAudioSourceCD</a></li>
+ <li><a href="#section-SDLPrimaryAudioSourceAM">SDLPrimaryAudioSourceAM</a></li>
+ <li><a href="#section-SDLPrimaryAudioSourceFM">SDLPrimaryAudioSourceFM</a></li>
+ <li><a href="#section-SDLPrimaryAudioSourceXM">SDLPrimaryAudioSourceXM</a></li>
+ <li><a href="#section-SDLPrimaryAudioSourceDAB">SDLPrimaryAudioSourceDAB</a></li>
<li><a href="#section-SDLRadioBandAM">SDLRadioBandAM</a></li>
<li><a href="#section-SDLRadioBandFM">SDLRadioBandFM</a></li>
<li><a href="#section-SDLRadioBandXM">SDLRadioBandXM</a></li>
@@ -445,6 +542,7 @@
<li><a href="#section-SDLRequestTypeEmergency">SDLRequestTypeEmergency</a></li>
<li><a href="#section-SDLRequestTypeMedia">SDLRequestTypeMedia</a></li>
<li><a href="#section-SDLRequestTypeFOTA">SDLRequestTypeFOTA</a></li>
+ <li><a href="#section-SDLRequestTypeOEMSpecific">SDLRequestTypeOEMSpecific</a></li>
<li><a href="#section-SDLResultSuccess">SDLResultSuccess</a></li>
<li><a href="#section-SDLResultInvalidData">SDLResultInvalidData</a></li>
<li><a href="#section-SDLResultCharacterLimitExceeded">SDLResultCharacterLimitExceeded</a></li>
@@ -471,6 +569,7 @@
<li><a href="#section-SDLResultUserDisallowed">SDLResultUserDisallowed</a></li>
<li><a href="#section-SDLResultTimedOut">SDLResultTimedOut</a></li>
<li><a href="#section-SDLResultCancelRoute">SDLResultCancelRoute</a></li>
+ <li><a href="#section-SDLResultCorruptedData">SDLResultCorruptedData</a></li>
<li><a href="#section-SDLResultTruncatedData">SDLResultTruncatedData</a></li>
<li><a href="#section-SDLResultRetry">SDLResultRetry</a></li>
<li><a href="#section-SDLResultWarnings">SDLResultWarnings</a></li>
@@ -484,6 +583,9 @@
<li><a href="#section-SDLSamplingRate16KHZ">SDLSamplingRate16KHZ</a></li>
<li><a href="#section-SDLSamplingRate22KHZ">SDLSamplingRate22KHZ</a></li>
<li><a href="#section-SDLSamplingRate44KHZ">SDLSamplingRate44KHZ</a></li>
+ <li><a href="#section-SDLSeatMemoryActionTypeSave">SDLSeatMemoryActionTypeSave</a></li>
+ <li><a href="#section-SDLSeatMemoryActionTypeRestore">SDLSeatMemoryActionTypeRestore</a></li>
+ <li><a href="#section-SDLSeatMemoryActionTypeNone">SDLSeatMemoryActionTypeNone</a></li>
<li><a href="#section-SDLSoftButtonTypeText">SDLSoftButtonTypeText</a></li>
<li><a href="#section-SDLSoftButtonTypeImage">SDLSoftButtonTypeImage</a></li>
<li><a href="#section-SDLSoftButtonTypeBoth">SDLSoftButtonTypeBoth</a></li>
@@ -492,6 +594,184 @@
<li><a href="#section-SDLSpeechCapabilitiesLHPlusPhonemes">SDLSpeechCapabilitiesLHPlusPhonemes</a></li>
<li><a href="#section-SDLSpeechCapabilitiesPrerecorded">SDLSpeechCapabilitiesPrerecorded</a></li>
<li><a href="#section-SDLSpeechCapabilitiesSilence">SDLSpeechCapabilitiesSilence</a></li>
+ <li><a href="#section-SDLSpeechCapabilitiesFile">SDLSpeechCapabilitiesFile</a></li>
+ <li><a href="#section-SDLStaticIconNameAcceptCall">SDLStaticIconNameAcceptCall</a></li>
+ <li><a href="#section-SDLStaticIconNameAddWaypoint">SDLStaticIconNameAddWaypoint</a></li>
+ <li><a href="#section-SDLStaticIconNameAlbum">SDLStaticIconNameAlbum</a></li>
+ <li><a href="#section-SDLStaticIconNameAmbientLighting">SDLStaticIconNameAmbientLighting</a></li>
+ <li><a href="#section-SDLStaticIconNameArrowNorth">SDLStaticIconNameArrowNorth</a></li>
+ <li><a href="#section-SDLStaticIconNameAudioMute">SDLStaticIconNameAudioMute</a></li>
+ <li><a href="#section-SDLStaticIconNameAudiobookEpisode">SDLStaticIconNameAudiobookEpisode</a></li>
+ <li><a href="#section-SDLStaticIconNameAudiobookNarrator">SDLStaticIconNameAudiobookNarrator</a></li>
+ <li><a href="#section-SDLStaticIconNameAuxillaryAudio">SDLStaticIconNameAuxillaryAudio</a></li>
+ <li><a href="#section-SDLStaticIconNameBack">SDLStaticIconNameBack</a></li>
+ <li><a href="#section-SDLStaticIconNameBatteryCapacity0Of5">SDLStaticIconNameBatteryCapacity0Of5</a></li>
+ <li><a href="#section-SDLStaticIconNameBatteryCapacity1Of5">SDLStaticIconNameBatteryCapacity1Of5</a></li>
+ <li><a href="#section-SDLStaticIconNameBatteryCapacity2Of5">SDLStaticIconNameBatteryCapacity2Of5</a></li>
+ <li><a href="#section-SDLStaticIconNameBatteryCapacity3Of5">SDLStaticIconNameBatteryCapacity3Of5</a></li>
+ <li><a href="#section-SDLStaticIconNameBatteryCapacity4Of5">SDLStaticIconNameBatteryCapacity4Of5</a></li>
+ <li><a href="#section-SDLStaticIconNameBatteryCapacity5Of5">SDLStaticIconNameBatteryCapacity5Of5</a></li>
+ <li><a href="#section-SDLStaticIconNameBluetoothAudioSource">SDLStaticIconNameBluetoothAudioSource</a></li>
+ <li><a href="#section-SDLStaticIconNameBluetooth1">SDLStaticIconNameBluetooth1</a></li>
+ <li><a href="#section-SDLStaticIconNameBluetooth2">SDLStaticIconNameBluetooth2</a></li>
+ <li><a href="#section-SDLStaticIconNameBrowse">SDLStaticIconNameBrowse</a></li>
+ <li><a href="#section-SDLStaticIconNameCellPhoneInRoamingMode">SDLStaticIconNameCellPhoneInRoamingMode</a></li>
+ <li><a href="#section-SDLStaticIconNameCellServiceSignalStrength0Of5Bars">SDLStaticIconNameCellServiceSignalStrength0Of5Bars</a></li>
+ <li><a href="#section-SDLStaticIconNameCellServiceSignalStrength1Of5Bars">SDLStaticIconNameCellServiceSignalStrength1Of5Bars</a></li>
+ <li><a href="#section-SDLStaticIconNameCellServiceSignalStrength2Of5Bars">SDLStaticIconNameCellServiceSignalStrength2Of5Bars</a></li>
+ <li><a href="#section-SDLStaticIconNameCellServiceSignalStrength3Of5Bars">SDLStaticIconNameCellServiceSignalStrength3Of5Bars</a></li>
+ <li><a href="#section-SDLStaticIconNameCellServiceSignalStrength4Of5Bars">SDLStaticIconNameCellServiceSignalStrength4Of5Bars</a></li>
+ <li><a href="#section-SDLStaticIconNameCellServiceSignalStrength5Of5Bars">SDLStaticIconNameCellServiceSignalStrength5Of5Bars</a></li>
+ <li><a href="#section-SDLStaticIconNameChangeLaneLeft">SDLStaticIconNameChangeLaneLeft</a></li>
+ <li><a href="#section-SDLStaticIconNameChangeLaneRight">SDLStaticIconNameChangeLaneRight</a></li>
+ <li><a href="#section-SDLStaticIconNameCheckBoxChecked">SDLStaticIconNameCheckBoxChecked</a></li>
+ <li><a href="#section-SDLStaticIconNameCheckBoxUnchecked">SDLStaticIconNameCheckBoxUnchecked</a></li>
+ <li><a href="#section-SDLStaticIconNameClimate">SDLStaticIconNameClimate</a></li>
+ <li><a href="#section-SDLStaticIconNameClock">SDLStaticIconNameClock</a></li>
+ <li><a href="#section-SDLStaticIconNameCompose">SDLStaticIconNameCompose</a></li>
+ <li><a href="#section-SDLStaticIconNameContact">SDLStaticIconNameContact</a></li>
+ <li><a href="#section-SDLStaticIconNameContinue">SDLStaticIconNameContinue</a></li>
+ <li><a href="#section-SDLStaticIconNameDash">SDLStaticIconNameDash</a></li>
+ <li><a href="#section-SDLStaticIconNameDate">SDLStaticIconNameDate</a></li>
+ <li><a href="#section-SDLStaticIconNameDelete">SDLStaticIconNameDelete</a></li>
+ <li><a href="#section-SDLStaticIconNameDestination">SDLStaticIconNameDestination</a></li>
+ <li><a href="#section-SDLStaticIconNameDestinationFerryAhead">SDLStaticIconNameDestinationFerryAhead</a></li>
+ <li><a href="#section-SDLStaticIconNameEbookmark">SDLStaticIconNameEbookmark</a></li>
+ <li><a href="#section-SDLStaticIconNameEmpty">SDLStaticIconNameEmpty</a></li>
+ <li><a href="#section-SDLStaticIconNameEndCall">SDLStaticIconNameEndCall</a></li>
+ <li><a href="#section-SDLStaticIconNameFail">SDLStaticIconNameFail</a></li>
+ <li><a href="#section-SDLStaticIconNameFastForward30Secs">SDLStaticIconNameFastForward30Secs</a></li>
+ <li><a href="#section-SDLStaticIconNameFavoriteHeart">SDLStaticIconNameFavoriteHeart</a></li>
+ <li><a href="#section-SDLStaticIconNameFavoriteStar">SDLStaticIconNameFavoriteStar</a></li>
+ <li><a href="#section-SDLStaticIconNameFaxNumber">SDLStaticIconNameFaxNumber</a></li>
+ <li><a href="#section-SDLStaticIconNameFilename">SDLStaticIconNameFilename</a></li>
+ <li><a href="#section-SDLStaticIconNameFilter">SDLStaticIconNameFilter</a></li>
+ <li><a href="#section-SDLStaticIconNameFolder">SDLStaticIconNameFolder</a></li>
+ <li><a href="#section-SDLStaticIconNameFuelPrices">SDLStaticIconNameFuelPrices</a></li>
+ <li><a href="#section-SDLStaticIconNameFullMap">SDLStaticIconNameFullMap</a></li>
+ <li><a href="#section-SDLStaticIconNameGenericPhoneNumber">SDLStaticIconNameGenericPhoneNumber</a></li>
+ <li><a href="#section-SDLStaticIconNameGenre">SDLStaticIconNameGenre</a></li>
+ <li><a href="#section-SDLStaticIconNameGlobalKeyboard">SDLStaticIconNameGlobalKeyboard</a></li>
+ <li><a href="#section-SDLStaticIconNameHighwayExitInformation">SDLStaticIconNameHighwayExitInformation</a></li>
+ <li><a href="#section-SDLStaticIconNameHomePhoneNumber">SDLStaticIconNameHomePhoneNumber</a></li>
+ <li><a href="#section-SDLStaticIconNameHyperlink">SDLStaticIconNameHyperlink</a></li>
+ <li><a href="#section-SDLStaticIconNameID3TagUnknown">SDLStaticIconNameID3TagUnknown</a></li>
+ <li><a href="#section-SDLStaticIconNameIncomingCalls">SDLStaticIconNameIncomingCalls</a></li>
+ <li><a href="#section-SDLStaticIconNameInformation">SDLStaticIconNameInformation</a></li>
+ <li><a href="#section-SDLStaticIconNameIPodMediaSource">SDLStaticIconNameIPodMediaSource</a></li>
+ <li><a href="#section-SDLStaticIconNameJoinCalls">SDLStaticIconNameJoinCalls</a></li>
+ <li><a href="#section-SDLStaticIconNameKeepLeft">SDLStaticIconNameKeepLeft</a></li>
+ <li><a href="#section-SDLStaticIconNameKeepRight">SDLStaticIconNameKeepRight</a></li>
+ <li><a href="#section-SDLStaticIconNameKey">SDLStaticIconNameKey</a></li>
+ <li><a href="#section-SDLStaticIconNameLeft">SDLStaticIconNameLeft</a></li>
+ <li><a href="#section-SDLStaticIconNameLeftArrow">SDLStaticIconNameLeftArrow</a></li>
+ <li><a href="#section-SDLStaticIconNameLeftExit">SDLStaticIconNameLeftExit</a></li>
+ <li><a href="#section-SDLStaticIconNameLineInAudioSource">SDLStaticIconNameLineInAudioSource</a></li>
+ <li><a href="#section-SDLStaticIconNameLocked">SDLStaticIconNameLocked</a></li>
+ <li><a href="#section-SDLStaticIconNameMediaControlLeftArrow">SDLStaticIconNameMediaControlLeftArrow</a></li>
+ <li><a href="#section-SDLStaticIconNameMediaControlRecording">SDLStaticIconNameMediaControlRecording</a></li>
+ <li><a href="#section-SDLStaticIconNameMediaControlRightArrow">SDLStaticIconNameMediaControlRightArrow</a></li>
+ <li><a href="#section-SDLStaticIconNameMediaControlStop">SDLStaticIconNameMediaControlStop</a></li>
+ <li><a href="#section-SDLStaticIconNameMicrophone">SDLStaticIconNameMicrophone</a></li>
+ <li><a href="#section-SDLStaticIconNameMissedCalls">SDLStaticIconNameMissedCalls</a></li>
+ <li><a href="#section-SDLStaticIconNameMobilePhoneNumber">SDLStaticIconNameMobilePhoneNumber</a></li>
+ <li><a href="#section-SDLStaticIconNameMoveDown">SDLStaticIconNameMoveDown</a></li>
+ <li><a href="#section-SDLStaticIconNameMoveUp">SDLStaticIconNameMoveUp</a></li>
+ <li><a href="#section-SDLStaticIconNameMP3TagArtist">SDLStaticIconNameMP3TagArtist</a></li>
+ <li><a href="#section-SDLStaticIconNameNavigation">SDLStaticIconNameNavigation</a></li>
+ <li><a href="#section-SDLStaticIconNameNavigationCurrentDirection">SDLStaticIconNameNavigationCurrentDirection</a></li>
+ <li><a href="#section-SDLStaticIconNameNegativeRatingThumbsDown">SDLStaticIconNameNegativeRatingThumbsDown</a></li>
+ <li><a href="#section-SDLStaticIconNameNew">SDLStaticIconNameNew</a></li>
+ <li><a href="#section-SDLStaticIconNameOfficePhoneNumber">SDLStaticIconNameOfficePhoneNumber</a></li>
+ <li><a href="#section-SDLStaticIconNameOpened">SDLStaticIconNameOpened</a></li>
+ <li><a href="#section-SDLStaticIconNameOrigin">SDLStaticIconNameOrigin</a></li>
+ <li><a href="#section-SDLStaticIconNameOutgoingCalls">SDLStaticIconNameOutgoingCalls</a></li>
+ <li><a href="#section-SDLStaticIconNamePause">SDLStaticIconNamePause</a></li>
+ <li><a href="#section-SDLStaticIconNamePhoneCall1">SDLStaticIconNamePhoneCall1</a></li>
+ <li><a href="#section-SDLStaticIconNamePhoneCall2">SDLStaticIconNamePhoneCall2</a></li>
+ <li><a href="#section-SDLStaticIconNamePhoneDevice">SDLStaticIconNamePhoneDevice</a></li>
+ <li><a href="#section-SDLStaticIconNamePhonebook">SDLStaticIconNamePhonebook</a></li>
+ <li><a href="#section-SDLStaticIconNamePhoto">SDLStaticIconNamePhoto</a></li>
+ <li><a href="#section-SDLStaticIconNamePlay">SDLStaticIconNamePlay</a></li>
+ <li><a href="#section-SDLStaticIconNamePlaylist">SDLStaticIconNamePlaylist</a></li>
+ <li><a href="#section-SDLStaticIconNamePopUp">SDLStaticIconNamePopUp</a></li>
+ <li><a href="#section-SDLStaticIconNamePositiveRatingThumbsUp">SDLStaticIconNamePositiveRatingThumbsUp</a></li>
+ <li><a href="#section-SDLStaticIconNamePower">SDLStaticIconNamePower</a></li>
+ <li><a href="#section-SDLStaticIconNamePrimaryPhone">SDLStaticIconNamePrimaryPhone</a></li>
+ <li><a href="#section-SDLStaticIconNameRadioButtonChecked">SDLStaticIconNameRadioButtonChecked</a></li>
+ <li><a href="#section-SDLStaticIconNameRadioButtonUnchecked">SDLStaticIconNameRadioButtonUnchecked</a></li>
+ <li><a href="#section-SDLStaticIconNameRecentCalls">SDLStaticIconNameRecentCalls</a></li>
+ <li><a href="#section-SDLStaticIconNameRecentDestinations">SDLStaticIconNameRecentDestinations</a></li>
+ <li><a href="#section-SDLStaticIconNameRedo">SDLStaticIconNameRedo</a></li>
+ <li><a href="#section-SDLStaticIconNameRefresh">SDLStaticIconNameRefresh</a></li>
+ <li><a href="#section-SDLStaticIconNameRemoteDiagnosticsCheckEngine">SDLStaticIconNameRemoteDiagnosticsCheckEngine</a></li>
+ <li><a href="#section-SDLStaticIconNameRendered911Assist">SDLStaticIconNameRendered911Assist</a></li>
+ <li><a href="#section-SDLStaticIconNameRepeat">SDLStaticIconNameRepeat</a></li>
+ <li><a href="#section-SDLStaticIconNameRepeatPlay">SDLStaticIconNameRepeatPlay</a></li>
+ <li><a href="#section-SDLStaticIconNameReply">SDLStaticIconNameReply</a></li>
+ <li><a href="#section-SDLStaticIconNameRewind30Secs">SDLStaticIconNameRewind30Secs</a></li>
+ <li><a href="#section-SDLStaticIconNameRight">SDLStaticIconNameRight</a></li>
+ <li><a href="#section-SDLStaticIconNameRightExit">SDLStaticIconNameRightExit</a></li>
+ <li><a href="#section-SDLStaticIconNameRingtones">SDLStaticIconNameRingtones</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutLeftHand1">SDLStaticIconNameRoundaboutLeftHand1</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutLeftHand2">SDLStaticIconNameRoundaboutLeftHand2</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutLeftHand3">SDLStaticIconNameRoundaboutLeftHand3</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutLeftHand4">SDLStaticIconNameRoundaboutLeftHand4</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutLeftHand5">SDLStaticIconNameRoundaboutLeftHand5</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutLeftHand6">SDLStaticIconNameRoundaboutLeftHand6</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutLeftHand7">SDLStaticIconNameRoundaboutLeftHand7</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutRightHand1">SDLStaticIconNameRoundaboutRightHand1</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutRightHand2">SDLStaticIconNameRoundaboutRightHand2</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutRightHand3">SDLStaticIconNameRoundaboutRightHand3</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutRightHand4">SDLStaticIconNameRoundaboutRightHand4</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutRightHand5">SDLStaticIconNameRoundaboutRightHand5</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutRightHand6">SDLStaticIconNameRoundaboutRightHand6</a></li>
+ <li><a href="#section-SDLStaticIconNameRoundaboutRightHand7">SDLStaticIconNameRoundaboutRightHand7</a></li>
+ <li><a href="#section-SDLStaticIconNameRSS">SDLStaticIconNameRSS</a></li>
+ <li><a href="#section-SDLStaticIconNameSettings">SDLStaticIconNameSettings</a></li>
+ <li><a href="#section-SDLStaticIconNameSharpLeft">SDLStaticIconNameSharpLeft</a></li>
+ <li><a href="#section-SDLStaticIconNameSharpRight">SDLStaticIconNameSharpRight</a></li>
+ <li><a href="#section-SDLStaticIconNameShow">SDLStaticIconNameShow</a></li>
+ <li><a href="#section-SDLStaticIconNameShufflePlay">SDLStaticIconNameShufflePlay</a></li>
+ <li><a href="#section-SDLStaticIconNameSkiPlaces">SDLStaticIconNameSkiPlaces</a></li>
+ <li><a href="#section-SDLStaticIconNameSlightLeft">SDLStaticIconNameSlightLeft</a></li>
+ <li><a href="#section-SDLStaticIconNameSlightRight">SDLStaticIconNameSlightRight</a></li>
+ <li><a href="#section-SDLStaticIconNameSmartphone">SDLStaticIconNameSmartphone</a></li>
+ <li><a href="#section-SDLStaticIconNameSortList">SDLStaticIconNameSortList</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber0">SDLStaticIconNameSpeedDialNumbersNumber0</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber1">SDLStaticIconNameSpeedDialNumbersNumber1</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber2">SDLStaticIconNameSpeedDialNumbersNumber2</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber3">SDLStaticIconNameSpeedDialNumbersNumber3</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber4">SDLStaticIconNameSpeedDialNumbersNumber4</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber5">SDLStaticIconNameSpeedDialNumbersNumber5</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber6">SDLStaticIconNameSpeedDialNumbersNumber6</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber7">SDLStaticIconNameSpeedDialNumbersNumber7</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber8">SDLStaticIconNameSpeedDialNumbersNumber8</a></li>
+ <li><a href="#section-SDLStaticIconNameSpeedDialNumbersNumber9">SDLStaticIconNameSpeedDialNumbersNumber9</a></li>
+ <li><a href="#section-SDLStaticIconNameSuccess">SDLStaticIconNameSuccess</a></li>
+ <li><a href="#section-SDLStaticIconNameTrackTitle">SDLStaticIconNameTrackTitle</a></li>
+ <li><a href="#section-SDLStaticIconNameTrafficReport">SDLStaticIconNameTrafficReport</a></li>
+ <li><a href="#section-SDLStaticIconNameTurnList">SDLStaticIconNameTurnList</a></li>
+ <li><a href="#section-SDLStaticIconNameUTurnLeftTraffic">SDLStaticIconNameUTurnLeftTraffic</a></li>
+ <li><a href="#section-SDLStaticIconNameUTurnRightTraffic">SDLStaticIconNameUTurnRightTraffic</a></li>
+ <li><a href="#section-SDLStaticIconNameUndo">SDLStaticIconNameUndo</a></li>
+ <li><a href="#section-SDLStaticIconNameUnlocked">SDLStaticIconNameUnlocked</a></li>
+ <li><a href="#section-SDLStaticIconNameUSBMediaAudioSource">SDLStaticIconNameUSBMediaAudioSource</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceControlScrollbarListItemNo1">SDLStaticIconNameVoiceControlScrollbarListItemNo1</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceControlScrollbarListItemNo2">SDLStaticIconNameVoiceControlScrollbarListItemNo2</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceControlScrollbarListItemNo3">SDLStaticIconNameVoiceControlScrollbarListItemNo3</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceControlScrollbarListItemNo4">SDLStaticIconNameVoiceControlScrollbarListItemNo4</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceRecognitionFailed">SDLStaticIconNameVoiceRecognitionFailed</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceRecognitionPause">SDLStaticIconNameVoiceRecognitionPause</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceRecognitionSuccessful">SDLStaticIconNameVoiceRecognitionSuccessful</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceRecognitionSystemActive">SDLStaticIconNameVoiceRecognitionSystemActive</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceRecognitionSystemListening">SDLStaticIconNameVoiceRecognitionSystemListening</a></li>
+ <li><a href="#section-SDLStaticIconNameVoiceRecognitionTryAgain">SDLStaticIconNameVoiceRecognitionTryAgain</a></li>
+ <li><a href="#section-SDLStaticIconNameWarning">SDLStaticIconNameWarning</a></li>
+ <li><a href="#section-SDLStaticIconNameWeather">SDLStaticIconNameWeather</a></li>
+ <li><a href="#section-SDLStaticIconNameWifiFull">SDLStaticIconNameWifiFull</a></li>
+ <li><a href="#section-SDLStaticIconNameZoomIn">SDLStaticIconNameZoomIn</a></li>
+ <li><a href="#section-SDLStaticIconNameZoomOut">SDLStaticIconNameZoomOut</a></li>
<li><a href="#section-SDLDefaultScreenSize">SDLDefaultScreenSize</a></li>
<li><a href="#section-SDLVideoStreamDidStartNotification">SDLVideoStreamDidStartNotification</a></li>
<li><a href="#section-SDLVideoStreamDidStopNotification">SDLVideoStreamDidStopNotification</a></li>
@@ -502,6 +782,19 @@
<li><a href="#section-SDLLockScreenManagerDidPresentLockScreenViewController">SDLLockScreenManagerDidPresentLockScreenViewController</a></li>
<li><a href="#section-SDLLockScreenManagerWillDismissLockScreenViewController">SDLLockScreenManagerWillDismissLockScreenViewController</a></li>
<li><a href="#section-SDLLockScreenManagerDidDismissLockScreenViewController">SDLLockScreenManagerDidDismissLockScreenViewController</a></li>
+ <li><a href="#section-SDLVideoStreamManagerStateStopped">SDLVideoStreamManagerStateStopped</a></li>
+ <li><a href="#section-SDLVideoStreamManagerStateStarting">SDLVideoStreamManagerStateStarting</a></li>
+ <li><a href="#section-SDLVideoStreamManagerStateReady">SDLVideoStreamManagerStateReady</a></li>
+ <li><a href="#section-SDLVideoStreamManagerStateSuspended">SDLVideoStreamManagerStateSuspended</a></li>
+ <li><a href="#section-SDLVideoStreamManagerStateShuttingDown">SDLVideoStreamManagerStateShuttingDown</a></li>
+ <li><a href="#section-SDLAudioStreamManagerStateStopped">SDLAudioStreamManagerStateStopped</a></li>
+ <li><a href="#section-SDLAudioStreamManagerStateStarting">SDLAudioStreamManagerStateStarting</a></li>
+ <li><a href="#section-SDLAudioStreamManagerStateReady">SDLAudioStreamManagerStateReady</a></li>
+ <li><a href="#section-SDLAudioStreamManagerStateShuttingDown">SDLAudioStreamManagerStateShuttingDown</a></li>
+ <li><a href="#section-SDLAppStateInactive">SDLAppStateInactive</a></li>
+ <li><a href="#section-SDLAppStateActive">SDLAppStateActive</a></li>
+ <li><a href="#section-SDLSupportedSeatDriver">SDLSupportedSeatDriver</a></li>
+ <li><a href="#section-SDLSupportedSeatFrontPassenger">SDLSupportedSeatFrontPassenger</a></li>
<li><a href="#section-SDLSystemActionDefaultAction">SDLSystemActionDefaultAction</a></li>
<li><a href="#section-SDLSystemActionStealFocus">SDLSystemActionStealFocus</a></li>
<li><a href="#section-SDLSystemActionKeepContext">SDLSystemActionKeepContext</a></li>
@@ -524,6 +817,14 @@
<li><a href="#section-SDLTBTStateRouteSummaryRequest">SDLTBTStateRouteSummaryRequest</a></li>
<li><a href="#section-SDLTBTStateTripStatusRequest">SDLTBTStateTripStatusRequest</a></li>
<li><a href="#section-SDLTBTStateRouteUpdateRequestTimeout">SDLTBTStateRouteUpdateRequestTimeout</a></li>
+ <li><a href="#section-SDLTPMSUnknown">SDLTPMSUnknown</a></li>
+ <li><a href="#section-SDLTPMSSystemFault">SDLTPMSSystemFault</a></li>
+ <li><a href="#section-SDLTPMSSensorFault">SDLTPMSSensorFault</a></li>
+ <li><a href="#section-SDLTPMSLow">SDLTPMSLow</a></li>
+ <li><a href="#section-SDLTPMSSystemActive">SDLTPMSSystemActive</a></li>
+ <li><a href="#section-SDLTPMSTrain">SDLTPMSTrain</a></li>
+ <li><a href="#section-SDLTPMSTrainingComplete">SDLTPMSTrainingComplete</a></li>
+ <li><a href="#section-SDLTPMSNotTrained">SDLTPMSNotTrained</a></li>
<li><a href="#section-SDLTemperatureUnitCelsius">SDLTemperatureUnitCelsius</a></li>
<li><a href="#section-SDLTemperatureUnitFahrenheit">SDLTemperatureUnitFahrenheit</a></li>
<li><a href="#section-SDLTextAlignmentLeft">SDLTextAlignmentLeft</a></li>
@@ -567,6 +868,10 @@
<li><a href="#section-SDLTriggerSourceMenu">SDLTriggerSourceMenu</a></li>
<li><a href="#section-SDLTriggerSourceVoiceRecognition">SDLTriggerSourceVoiceRecognition</a></li>
<li><a href="#section-SDLTriggerSourceKeyboard">SDLTriggerSourceKeyboard</a></li>
+ <li><a href="#section-SDLTurnSignalOff">SDLTurnSignalOff</a></li>
+ <li><a href="#section-SDLTurnSignalLeft">SDLTurnSignalLeft</a></li>
+ <li><a href="#section-SDLTurnSignalRight">SDLTurnSignalRight</a></li>
+ <li><a href="#section-SDLTurnSignalBoth">SDLTurnSignalBoth</a></li>
<li><a href="#section-SDLUpdateModeCountUp">SDLUpdateModeCountUp</a></li>
<li><a href="#section-SDLUpdateModeCountDown">SDLUpdateModeCountDown</a></li>
<li><a href="#section-SDLUpdateModePause">SDLUpdateModePause</a></li>
@@ -613,6 +918,7 @@
<li><a href="#section-SDLVehicleDataTypeBodyInfo">SDLVehicleDataTypeBodyInfo</a></li>
<li><a href="#section-SDLVehicleDataTypeDeviceStatus">SDLVehicleDataTypeDeviceStatus</a></li>
<li><a href="#section-SDLVehicleDataTypeECallInfo">SDLVehicleDataTypeECallInfo</a></li>
+ <li><a href="#section-SDLVehicleDataTypeFuelRange">SDLVehicleDataTypeFuelRange</a></li>
<li><a href="#section-SDLVehicleDataTypeAirbagStatus">SDLVehicleDataTypeAirbagStatus</a></li>
<li><a href="#section-SDLVehicleDataTypeEmergencyEvent">SDLVehicleDataTypeEmergencyEvent</a></li>
<li><a href="#section-SDLVehicleDataTypeClusterModeStatus">SDLVehicleDataTypeClusterModeStatus</a></li>
@@ -621,9 +927,12 @@
<li><a href="#section-SDLVehicleDataTypeWiperStatus">SDLVehicleDataTypeWiperStatus</a></li>
<li><a href="#section-SDLVehicleDataTypeHeadlampStatus">SDLVehicleDataTypeHeadlampStatus</a></li>
<li><a href="#section-SDLVehicleDataTypeBatteryVoltage">SDLVehicleDataTypeBatteryVoltage</a></li>
+ <li><a href="#section-SDLVehicleDataTypeEngineOilLife">SDLVehicleDataTypeEngineOilLife</a></li>
<li><a href="#section-SDLVehicleDataTypeEngineTorque">SDLVehicleDataTypeEngineTorque</a></li>
<li><a href="#section-SDLVehicleDataTypeAccelerationPedal">SDLVehicleDataTypeAccelerationPedal</a></li>
<li><a href="#section-SDLVehicleDataTypeSteeringWheel">SDLVehicleDataTypeSteeringWheel</a></li>
+ <li><a href="#section-SDLVehicleDataTypeElectronicParkBrakeStatus">SDLVehicleDataTypeElectronicParkBrakeStatus</a></li>
+ <li><a href="#section-SDLVehicleDataTypeTurnSignal">SDLVehicleDataTypeTurnSignal</a></li>
<li><a href="#section-SDLVentilationModeUpper">SDLVentilationModeUpper</a></li>
<li><a href="#section-SDLVentilationModeLower">SDLVentilationModeLower</a></li>
<li><a href="#section-SDLVentilationModeBoth">SDLVentilationModeBoth</a></li>
@@ -638,6 +947,8 @@
<li><a href="#section-SDLVideoStreamingProtocolRTSP">SDLVideoStreamingProtocolRTSP</a></li>
<li><a href="#section-SDLVideoStreamingProtocolRTMP">SDLVideoStreamingProtocolRTMP</a></li>
<li><a href="#section-SDLVideoStreamingProtocolWebM">SDLVideoStreamingProtocolWebM</a></li>
+ <li><a href="#section-SDLVideoStreamingStateStreamable">SDLVideoStreamingStateStreamable</a></li>
+ <li><a href="#section-SDLVideoStreamingStateNotStreamable">SDLVideoStreamingStateNotStreamable</a></li>
<li><a href="#section-SDLVRCapabilitiesText">SDLVRCapabilitiesText</a></li>
<li><a href="#section-SDLWarningLightStatusOff">SDLWarningLightStatusOff</a></li>
<li><a href="#section-SDLWarningLightStatusOn">SDLWarningLightStatusOn</a></li>
@@ -1240,6 +1551,85 @@
+ <h3 id="section-SDLAudioStreamingIndicatorPlayPause">
+ SDLAudioStreamingIndicatorPlayPause
+ </h3>
+
+ <p>Default playback indicator.
+By default the playback indicator should be PLAY_PAUSE when:</p>
+
+<ul>
+<li>the media app is newly registered on the head unit (after RegisterAppInterface)</li>
+<li>the media app was closed by the user (App enteres HMI_NONE)</li>
+<li>the app sends SetMediaClockTimer with audioStreamingIndicator not set to any value</li>
+</ul>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span> <span class="n">SDLAudioStreamingIndicatorPlayPause</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">playPause</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioStreamingIndicatorPlay">
+ SDLAudioStreamingIndicatorPlay
+ </h3>
+
+ <p>Indicates that a button press of the Play/Pause button starts the audio playback.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span> <span class="n">SDLAudioStreamingIndicatorPlay</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">play</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioStreamingIndicatorPause">
+ SDLAudioStreamingIndicatorPause
+ </h3>
+
+ <p>Indicates that a button press of the Play/Pause button pauses the current audio playback.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span> <span class="n">SDLAudioStreamingIndicatorPause</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">pause</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioStreamingIndicatorStop">
+ SDLAudioStreamingIndicatorStop
+ </h3>
+
+ <p>Indicates that a button press of the Play/Pause button stops the current audio playback.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span> <span class="n">SDLAudioStreamingIndicatorStop</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">stop</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLAudioStreamingStateAudible">
SDLAudioStreamingStateAudible
</h3>
@@ -1392,7 +1782,7 @@
SDLButtonNameOk
</h3>
- <p>Represents the button usually labeled <q>OK</q>. A typical use of this button is for the user to press it to make a selection.</p>
+ <p>Represents the button usually labeled <q>OK</q>. 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 <q>OK</q> buttons <em>AND</em> 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.</p>
@@ -1406,6 +1796,24 @@
+ <h3 id="section-SDLButtonNamePlayPause">
+ SDLButtonNamePlayPause
+ </h3>
+
+ <p>Represents the play/pause button for media apps. Replaces <q>OK</q> on sub-5.0 head units, compliments it on 5.0 head units and later.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">SDLButtonNamePlayPause</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">playPause</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLButtonNameSeekLeft">
SDLButtonNameSeekLeft
</h3>
@@ -2738,6 +3146,60 @@
+ <h3 id="section-SDLDisplayModeDay">
+ SDLDisplayModeDay
+ </h3>
+
+ <p>@abstract Display Mode : DAY</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span> <span class="n">SDLDisplayModeDay</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">day</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLDisplayModeNight">
+ SDLDisplayModeNight
+ </h3>
+
+ <p>@abstract Display Mode : NIGHT.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span> <span class="n">SDLDisplayModeNight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">night</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLDisplayModeAuto">
+ SDLDisplayModeAuto
+ </h3>
+
+ <p>@abstract Display Mode : AUTO.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span> <span class="n">SDLDisplayModeAuto</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">auto</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLDisplayTypeCID">
SDLDisplayTypeCID
</h3>
@@ -2936,6 +3398,42 @@
+ <h3 id="section-SDLDistanceUnitMiles">
+ SDLDistanceUnitMiles
+ </h3>
+
+ <p>@abstract SDLDistanceUnit: <em>MILES</em></p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span> <span class="n">SDLDistanceUnitMiles</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">miles</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLDistanceUnitKilometers">
+ SDLDistanceUnitKilometers
+ </h3>
+
+ <p>@abstract SDLDistanceUnit: <em>KILOMETERS</em></p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span> <span class="n">SDLDistanceUnitKilometers</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">kilometers</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLDriverDistractionStateOn">
SDLDriverDistractionStateOn
</h3>
@@ -3099,6 +3597,97 @@
+ <h3 id="section-SDLElectronicParkBrakeStatusClosed">
+ SDLElectronicParkBrakeStatusClosed
+ </h3>
+
+ <p>Parking brake actuators have been fully applied.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">SDLElectronicParkBrakeStatusClosed</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">closed</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLElectronicParkBrakeStatusTransition">
+ SDLElectronicParkBrakeStatusTransition
+ </h3>
+
+ <p>Parking brake actuators are transitioning to either Apply/Closed or Release/Open state.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">SDLElectronicParkBrakeStatusTransition</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">transition</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLElectronicParkBrakeStatusOpen">
+ SDLElectronicParkBrakeStatusOpen
+ </h3>
+
+ <p>Parking brake actuators are released.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">SDLElectronicParkBrakeStatusOpen</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">open</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLElectronicParkBrakeStatusDriveActive">
+ SDLElectronicParkBrakeStatusDriveActive
+ </h3>
+
+ <p>When driver pulls the Electronic Parking Brake switch while driving <q>at speed</q>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span>
+ <span class="n">SDLElectronicParkBrakeStatusDriveActive</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">driveActive</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLElectronicParkBrakeStatusFault">
+ SDLElectronicParkBrakeStatusFault
+ </h3>
+
+ <p>When system has a fault or is under maintenance.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">SDLElectronicParkBrakeStatusFault</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">fault</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLEmergencyEventTypeNoEvent">
SDLEmergencyEventTypeNoEvent
</h3>
@@ -3423,6 +4012,122 @@
+ <h3 id="section-SDLFuelTypeGasoline">
+ SDLFuelTypeGasoline
+ </h3>
+
+ <p>Fuel type: Gasoline</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">SDLFuelTypeGasoline</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">gasoline</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLFuelTypeDiesel">
+ SDLFuelTypeDiesel
+ </h3>
+
+ <p>Fuel type: Diesel</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">SDLFuelTypeDiesel</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">diesel</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLFuelTypeCNG">
+ SDLFuelTypeCNG
+ </h3>
+
+ <p>Fuel type: CNG</p>
+
+<p>@discussion For vehicles using compressed natural gas</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">SDLFuelTypeCNG</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">CNG</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLFuelTypeLPG">
+ SDLFuelTypeLPG
+ </h3>
+
+ <p>Fuel type: LPG</p>
+
+<p>@discussion For vehicles using liquefied petroleum gas</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">SDLFuelTypeLPG</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">LPG</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLFuelTypeHydrogen">
+ SDLFuelTypeHydrogen
+ </h3>
+
+ <p>Fuel type: Hydrogen</p>
+
+<p>@discussion For FCEV (fuel cell electric vehicle)</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">SDLFuelTypeHydrogen</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">hydrogen</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLFuelTypeBattery">
+ SDLFuelTypeBattery
+ </h3>
+
+ <p>Fuel type: Battery</p>
+
+<p>@discussion For BEV (Battery Electric Vehicle), PHEV (Plug-in Hybrid Electric Vehicle), solar vehicles and other vehicles which run on a battery.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">SDLFuelTypeBattery</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">battery</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLGlobalPropertyHelpPrompt">
SDLGlobalPropertyHelpPrompt
</h3>
@@ -3936,7 +4641,8 @@
SDLImageFieldNameCommandIcon
</h3>
- <p>The image filed for AddCommand.</p>
+ <p>The image field for AddCommand.
+ *</p>
@@ -3972,7 +4678,8 @@
SDLImageFieldNameGraphic
</h3>
- <p>The image filed for Show.</p>
+ <p>The primary image field for Show.
+ *</p>
@@ -3986,11 +4693,31 @@
+ <h3 id="section-SDLImageFieldNameSecondaryGraphic">
+ SDLImageFieldNameSecondaryGraphic
+ </h3>
+
+ <p>The secondary image field for Show.
+ *</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName">SDLImageFieldName</a></span> <span class="n">SDLImageFieldNameSecondaryGraphic</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">secondaryGraphic</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName">SDLImageFieldName</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLImageFieldNameShowConstantTBTIcon">
SDLImageFieldNameShowConstantTBTIcon
</h3>
- <p>The primary image field for ShowConstant TBT.</p>
+ <p>The primary image field for ShowConstant TBT.
+ *</p>
@@ -5139,6 +5866,981 @@
+ <h3 id="section-SDLLightNameFrontLeftHighBeam">
+ SDLLightNameFrontLeftHighBeam
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_LEFT_HIGH_BEAM.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontLeftHighBeam</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontLeftHighBeam</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontRightHighBeam">
+ SDLLightNameFrontRightHighBeam
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_RIGHT_HIGH_BEAM.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontRightHighBeam</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontRightHighBeam</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontLeftLowBeam">
+ SDLLightNameFrontLeftLowBeam
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_LEFT_LOW_BEAM.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontLeftLowBeam</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontLeftLowBeam</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontRightLowBeam">
+ SDLLightNameFrontRightLowBeam
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_RIGHT_LOW_BEAM.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontRightLowBeam</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontRightLowBeam</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontLeftParkingLight">
+ SDLLightNameFrontLeftParkingLight
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_LEFT_PARKING_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontLeftParkingLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontLeftParkingLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontRightParkingLight">
+ SDLLightNameFrontRightParkingLight
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_RIGHT_PARKING_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontRightParkingLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontRightParkingLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontLeftFogLight">
+ SDLLightNameFrontLeftFogLight
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_LEFT_FOG_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontLeftFogLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontLeftFogLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontRightFogLight">
+ SDLLightNameFrontRightFogLight
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_RIGHT_FOG_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontRightFogLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontRightFogLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontLeftDaytimeRunningLight">
+ SDLLightNameFrontLeftDaytimeRunningLight
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_LEFT_DAYTIME_RUNNING_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontLeftDaytimeRunningLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontLeftDaytimeRunningLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontRightDaytimeRunningLight">
+ SDLLightNameFrontRightDaytimeRunningLight
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_RIGHT_DAYTIME_RUNNING_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontRightDaytimeRunningLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontRightDaytimeRunningLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontLeftTurnLight">
+ SDLLightNameFrontLeftTurnLight
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_LEFT_TURN_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontLeftTurnLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontLeftTurnLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFrontRightTurnLight">
+ SDLLightNameFrontRightTurnLight
+ </h3>
+
+ <p>@abstract Represents the Light with name FRONT_Right_TURN_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFrontRightTurnLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontRightTurnLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearLeftFogLight">
+ SDLLightNameRearLeftFogLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_LEFT_FOG_LIGHT.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearLeftFogLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearLeftFogLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearRightFogLight">
+ SDLLightNameRearRightFogLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_RIGHT_FOG_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearRightFogLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearRightFogLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearLeftTailLight">
+ SDLLightNameRearLeftTailLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_LEFT_TAIL_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearLeftTailLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearLeftTailLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearRightTailLight">
+ SDLLightNameRearRightTailLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_RIGHT_TAIL_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearRightTailLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearRightTailLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearLeftBrakeLight">
+ SDLLightNameRearLeftBrakeLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_LEFT_BRAKE_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearLeftBrakeLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearLeftBrakeLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearRightBrakeLight">
+ SDLLightNameRearRightBrakeLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_RIGHT_BRAKE_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearRightBrakeLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearRightBrakeLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearLeftTurnLight">
+ SDLLightNameRearLeftTurnLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_LEFT_TURN_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearLeftTurnLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearLeftTurnLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearRightTurnLight">
+ SDLLightNameRearRightTurnLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_RIGHT_TURN_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearRightTurnLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearRightTurnLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearRegistrationPlateLight">
+ SDLLightNameRearRegistrationPlateLight
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_REGISTRATION_PLATE_LIGHT</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearRegistrationPlateLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearRegistrationPlateLight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameHighBeams">
+ SDLLightNameHighBeams
+ </h3>
+
+ <p>@abstract Include all high beam lights: front_left and front_right.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameHighBeams</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">highBeams</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameLowBeams">
+ SDLLightNameLowBeams
+ </h3>
+
+ <p>@abstract Include all low beam lights: front_left and front_right.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameLowBeams</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">lowBeams</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameFogLights">
+ SDLLightNameFogLights
+ </h3>
+
+ <p>@abstract Include all fog lights: front_left, front_right, rear_left and rear_right.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameFogLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">fogLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRunningLights">
+ SDLLightNameRunningLights
+ </h3>
+
+ <p>@abstract Include all daytime running lights: front_left and front_right.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRunningLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">runningLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameParkingLights">
+ SDLLightNameParkingLights
+ </h3>
+
+ <p>@abstract Include all parking lights: front_left and front_right.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameParkingLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">parkingLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameBrakeLights">
+ SDLLightNameBrakeLights
+ </h3>
+
+ <p>@abstract Include all brake lights: rear_left and rear_right.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameBrakeLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">brakeLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRearReversingLights">
+ SDLLightNameRearReversingLights
+ </h3>
+
+ <p>@abstract Represents the Light with name REAR_REVERSING_LIGHTS</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRearReversingLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rearReversingLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameSideMarkerLights">
+ SDLLightNameSideMarkerLights
+ </h3>
+
+ <p>@abstract Represents the Light with name SIDE_MARKER_LIGHTS</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameSideMarkerLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">sideMarkerLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameLeftTurnLights">
+ SDLLightNameLeftTurnLights
+ </h3>
+
+ <p>@abstract Include all left turn signal lights: front_left, rear_left, left_side and mirror_mounted.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameLeftTurnLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">leftTurnLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameRightTurnLights">
+ SDLLightNameRightTurnLights
+ </h3>
+
+ <p>@abstract Include all right turn signal lights: front_right, rear_right, right_side and mirror_mounted.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameRightTurnLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rightTurnLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameHazardLights">
+ SDLLightNameHazardLights
+ </h3>
+
+ <p>@abstract Include all hazard lights: front_left, front_right, rear_left and rear_right.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameHazardLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">hazardLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameAmbientLights">
+ SDLLightNameAmbientLights
+ </h3>
+
+ <p>@abstract Represents the Light with name AMBIENT_LIGHTS</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameAmbientLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">ambientLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameOverHeadLights">
+ SDLLightNameOverHeadLights
+ </h3>
+
+ <p>@abstract Represents the Light with name OVERHEAD_LIGHTS</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameOverHeadLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">overHeadLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameReadingLights">
+ SDLLightNameReadingLights
+ </h3>
+
+ <p>@abstract Represents the Light with name READING_LIGHTS</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameReadingLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">readingLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameTrunkLights">
+ SDLLightNameTrunkLights
+ </h3>
+
+ <p>@abstract Represents the Light with name TRUNK_LIGHTS</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameTrunkLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">trunkLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorFrontLights">
+ SDLLightNameExteriorFrontLights
+ </h3>
+
+ <p>@abstract Include exterior lights located in front of the vehicle. For example, fog lights and low beams.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorFrontLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorFrontLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorRearLights">
+ SDLLightNameExteriorRearLights
+ </h3>
+
+ <p>@abstract Include exterior lights located at the back of the vehicle.
+For example, license plate lights, reverse lights, cargo lights, bed lights an trailer assist lights.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorRearLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorRearLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorLeftLights">
+ SDLLightNameExteriorLeftLights
+ </h3>
+
+ <p>@abstract Include exterior lights located at the left side of the vehicle.
+For example, left puddle lights and spot lights.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorLeftLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorLeftLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorRightLights">
+ SDLLightNameExteriorRightLights
+ </h3>
+
+ <p>@abstract Include exterior lights located at the right side of the vehicle.
+For example, right puddle lights and spot lights.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorRightLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorRightLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorRearCargoLights">
+ SDLLightNameExteriorRearCargoLights
+ </h3>
+
+ <p>@abstract Cargo lamps illuminate the cargo area.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorRearCargoLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorRearCargoLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorRearTruckBedLights">
+ SDLLightNameExteriorRearTruckBedLights
+ </h3>
+
+ <p>@abstract Truck bed lamps light up the bed of the truck.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorRearTruckBedLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorRearTruckBedLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorRearTrailerLights">
+ SDLLightNameExteriorRearTrailerLights
+ </h3>
+
+ <p>@abstract Trailer lights are lamps mounted on a trailer hitch.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorRearTrailerLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorRearTrailerLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorLeftSpotLights">
+ SDLLightNameExteriorLeftSpotLights
+ </h3>
+
+ <p>@abstract It is the spotlights mounted on the left side of a vehicle.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorLeftSpotLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorLeftSpotLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorRightSpotLights">
+ SDLLightNameExteriorRightSpotLights
+ </h3>
+
+ <p>@abstract It is the spotlights mounted on the right side of a vehicle.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorRightSpotLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorRightSpotLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorLeftPuddleLights">
+ SDLLightNameExteriorLeftPuddleLights
+ </h3>
+
+ <p>@abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorLeftPuddleLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorLeftPuddleLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorRightPuddleLights">
+ SDLLightNameExteriorRightPuddleLights
+ </h3>
+
+ <p>@abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorRightPuddleLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorRightPuddleLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightNameExteriorAllLights">
+ SDLLightNameExteriorAllLights
+ </h3>
+
+ <p>@abstract Include all exterior lights around the vehicle.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">SDLLightNameExteriorAllLights</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">exteriorAllLights</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightStatusOn">
+ SDLLightStatusOn
+ </h3>
+
+ <p>@abstract Light status currently on.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">SDLLightStatusOn</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">on</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightStatusOFF">
+ SDLLightStatusOFF
+ </h3>
+
+ <p>@abstract Light status currently Off.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">SDLLightStatusOFF</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">OFF</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightStatusRampUp">
+ SDLLightStatusRampUp
+ </h3>
+
+ <p>@abstract Light status currently RAMP_UP.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">SDLLightStatusRampUp</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rampUp</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightStatusRampDown">
+ SDLLightStatusRampDown
+ </h3>
+
+ <p>@abstract Light status currently RAMP_DOWN.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">SDLLightStatusRampDown</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rampDown</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightStatusUnknown">
+ SDLLightStatusUnknown
+ </h3>
+
+ <p>@abstract Light status currently UNKNOWN.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">SDLLightStatusUnknown</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">unknown</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightStatusInvalid">
+ SDLLightStatusInvalid
+ </h3>
+
+ <p>@abstract Light status currently INVALID.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">SDLLightStatusInvalid</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">invalid</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLLockScreenStatusOff">
SDLLockScreenStatusOff
</h3>
@@ -5265,6 +6967,186 @@
+ <h3 id="section-SDLMassageCushionTopLumbar">
+ SDLMassageCushionTopLumbar
+ </h3>
+
+ <p>@abstract TOP LUMBAR cushions of a multi-contour massage seat</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="n">SDLMassageCushionTopLumbar</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">topLumbar</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageCushionMiddleLumbar">
+ SDLMassageCushionMiddleLumbar
+ </h3>
+
+ <p>@abstract MIDDLE LUMBAR cushion of a multi-contour massage seat</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="n">SDLMassageCushionMiddleLumbar</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">middleLumbar</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageCushionBottomLumbar">
+ SDLMassageCushionBottomLumbar
+ </h3>
+
+ <p>@abstract BOTTOM LUMBAR cushion of a multi-contour massage seat</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="n">SDLMassageCushionBottomLumbar</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">bottomLumbar</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageCushionBackBolsters">
+ SDLMassageCushionBackBolsters
+ </h3>
+
+ <p>@abstract BACK BOLSTERS cushion of a multi-contour massage seat</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="n">SDLMassageCushionBackBolsters</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">backBolsters</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageCushionSeatBolsters">
+ SDLMassageCushionSeatBolsters
+ </h3>
+
+ <p>@abstract SEAT BOLSTERS cushion of a multi-contour massage seat</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="n">SDLMassageCushionSeatBolsters</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">seatBolsters</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageModeOff">
+ SDLMassageModeOff
+ </h3>
+
+ <p>@abstract Massage Mode Status : OFF</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span> <span class="n">SDLMassageModeOff</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">off</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageModeLow">
+ SDLMassageModeLow
+ </h3>
+
+ <p>@abstract Massage Mode Status : LOW</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span> <span class="n">SDLMassageModeLow</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">low</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageModeHigh">
+ SDLMassageModeHigh
+ </h3>
+
+ <p>@abstract Massage Mode Status : HIGH</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span> <span class="n">SDLMassageModeHigh</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">high</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageZoneLumbar">
+ SDLMassageZoneLumbar
+ </h3>
+
+ <p>@abstract The back of a multi-contour massage seat. or SEAT_BACK</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span> <span class="n">SDLMassageZoneLumbar</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">lumbar</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageZoneSeatCushion">
+ SDLMassageZoneSeatCushion
+ </h3>
+
+ <p>@abstract The bottom a multi-contour massage seat. or SEAT_BOTTOM</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span> <span class="n">SDLMassageZoneSeatCushion</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">seatCushion</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLMediaClockFormatClock1">
SDLMediaClockFormatClock1
</h3>
@@ -5704,6 +7586,78 @@
+ <h3 id="section-SDLModuleTypeSeat">
+ SDLModuleTypeSeat
+ </h3>
+
+ <p>A SDLModuleType with the value of <em>SEAT</em></p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">SDLModuleTypeSeat</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">seat</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLModuleTypeAudio">
+ SDLModuleTypeAudio
+ </h3>
+
+ <p>A SDLModuleType with the value of <em>AUDIO</em></p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">SDLModuleTypeAudio</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">audio</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLModuleTypeLight">
+ SDLModuleTypeLight
+ </h3>
+
+ <p>A SDLModuleType with the value of <em>LIGHT</em></p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">SDLModuleTypeLight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">light</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLModuleTypeHMISettings">
+ SDLModuleTypeHMISettings
+ </h3>
+
+ <p>A SDLModuleType with the value of <em>HMI_SETTINGS</em></p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">SDLModuleTypeHMISettings</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">hmiSettings</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLNotificationUserInfoObject">
SDLNotificationUserInfoObject
</h3>
@@ -5758,6 +7712,24 @@
+ <h3 id="section-SDLTransportConnectError">
+ SDLTransportConnectError
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="k">const</span> <span class="n">SDLTransportConnectError</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLTransportConnectError</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
+
+
+
+
<h3 id="section-SDLDidReceiveError">
SDLDidReceiveError
</h3>
@@ -6982,6 +8954,24 @@
+ <h3 id="section-SDLDidReceiveRemoteControlStatusNotification">
+ SDLDidReceiveRemoteControlStatusNotification
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="k">const</span> <span class="n">SDLDidReceiveRemoteControlStatusNotification</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">SDLDidReceiveRemoteControlStatus</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
+
+
+
+
<h3 id="section-SDLDidReceiveSystemRequestNotification">
SDLDidReceiveSystemRequestNotification
</h3>
@@ -8247,6 +10237,96 @@
+ <h3 id="section-SDLPrimaryAudioSourceCD">
+ SDLPrimaryAudioSourceCD
+ </h3>
+
+ <p>@abstract CD is current source</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">SDLPrimaryAudioSourceCD</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">CD</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLPrimaryAudioSourceAM">
+ SDLPrimaryAudioSourceAM
+ </h3>
+
+ <p>@abstract Radio frequency AM is current source</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">SDLPrimaryAudioSourceAM</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">AM</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLPrimaryAudioSourceFM">
+ SDLPrimaryAudioSourceFM
+ </h3>
+
+ <p>@abstract Radio frequency FM is current source</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">SDLPrimaryAudioSourceFM</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">FM</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLPrimaryAudioSourceXM">
+ SDLPrimaryAudioSourceXM
+ </h3>
+
+ <p>@abstract Radio frequency XM is current source</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">SDLPrimaryAudioSourceXM</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">XM</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLPrimaryAudioSourceDAB">
+ SDLPrimaryAudioSourceDAB
+ </h3>
+
+ <p>@abstract Radio frequency DAB is current source</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">SDLPrimaryAudioSourceDAB</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">DAB</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLRadioBandAM">
SDLRadioBandAM
</h3>
@@ -8719,7 +10799,7 @@
SDLRequestTypeFOTA
</h3>
- <p>A firmeware over-the-air request</p>
+ <p>A firmware over-the-air request</p>
@@ -8733,6 +10813,24 @@
+ <h3 id="section-SDLRequestTypeOEMSpecific">
+ SDLRequestTypeOEMSpecific
+ </h3>
+
+ <p>A request that is OEM specific using the <code>RequestSubType</code> in SystemRequest</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLRequestType.h@T@SDLRequestType">SDLRequestType</a></span> <span class="n">SDLRequestTypeOEMSpecific</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">oemSpecific</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLRequestType.h@T@SDLRequestType">SDLRequestType</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLResultSuccess">
SDLResultSuccess
</h3>
@@ -9219,6 +11317,24 @@
+ <h3 id="section-SDLResultCorruptedData">
+ SDLResultCorruptedData
+ </h3>
+
+ <p>The data sent failed to pass CRC check in receiver end.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLResult.h@T@SDLResult">SDLResult</a></span> <span class="n">SDLResultCorruptedData</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">corruptedData</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLResult.h@T@SDLResult">SDLResult</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLResultTruncatedData">
SDLResultTruncatedData
</h3>
@@ -9453,6 +11569,60 @@
+ <h3 id="section-SDLSeatMemoryActionTypeSave">
+ SDLSeatMemoryActionTypeSave
+ </h3>
+
+ <p>@abstract Save current seat postions and settings to seat memory.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span> <span class="n">SDLSeatMemoryActionTypeSave</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">save</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLSeatMemoryActionTypeRestore">
+ SDLSeatMemoryActionTypeRestore
+ </h3>
+
+ <p>@abstract Restore / apply the seat memory settings to the current seat.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span> <span class="n">SDLSeatMemoryActionTypeRestore</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">restore</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLSeatMemoryActionTypeNone">
+ SDLSeatMemoryActionTypeNone
+ </h3>
+
+ <p>@abstract No action to be performed.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span> <span class="n">SDLSeatMemoryActionTypeNone</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">none</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLSoftButtonTypeText">
SDLSoftButtonTypeText
</h3>
@@ -9597,6 +11767,3210 @@
+ <h3 id="section-SDLSpeechCapabilitiesFile">
+ SDLSpeechCapabilitiesFile
+ </h3>
+
+ <p>The SDL platform can play a file</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities">SDLSpeechCapabilities</a></span> <span class="n">SDLSpeechCapabilitiesFile</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">file</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities">SDLSpeechCapabilities</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameAcceptCall">
+ SDLStaticIconNameAcceptCall
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameAcceptCall</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">acceptCall</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameAddWaypoint">
+ SDLStaticIconNameAddWaypoint
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameAddWaypoint</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">addWaypoint</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameAlbum">
+ SDLStaticIconNameAlbum
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameAlbum</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">album</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameAmbientLighting">
+ SDLStaticIconNameAmbientLighting
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameAmbientLighting</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">ambientLighting</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameArrowNorth">
+ SDLStaticIconNameArrowNorth
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameArrowNorth</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">arrowNorth</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameAudioMute">
+ SDLStaticIconNameAudioMute
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameAudioMute</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">audioMute</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameAudiobookEpisode">
+ SDLStaticIconNameAudiobookEpisode
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameAudiobookEpisode</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">audiobookEpisode</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameAudiobookNarrator">
+ SDLStaticIconNameAudiobookNarrator
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameAudiobookNarrator</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">audiobookNarrator</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameAuxillaryAudio">
+ SDLStaticIconNameAuxillaryAudio
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameAuxillaryAudio</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">auxillaryAudio</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBack">
+ SDLStaticIconNameBack
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBack</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">back</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBatteryCapacity0Of5">
+ SDLStaticIconNameBatteryCapacity0Of5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBatteryCapacity0Of5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">batteryCapacity0Of5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBatteryCapacity1Of5">
+ SDLStaticIconNameBatteryCapacity1Of5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBatteryCapacity1Of5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">batteryCapacity1Of5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBatteryCapacity2Of5">
+ SDLStaticIconNameBatteryCapacity2Of5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBatteryCapacity2Of5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">batteryCapacity2Of5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBatteryCapacity3Of5">
+ SDLStaticIconNameBatteryCapacity3Of5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBatteryCapacity3Of5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">batteryCapacity3Of5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBatteryCapacity4Of5">
+ SDLStaticIconNameBatteryCapacity4Of5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBatteryCapacity4Of5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">batteryCapacity4Of5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBatteryCapacity5Of5">
+ SDLStaticIconNameBatteryCapacity5Of5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBatteryCapacity5Of5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">batteryCapacity5Of5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBluetoothAudioSource">
+ SDLStaticIconNameBluetoothAudioSource
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBluetoothAudioSource</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">bluetoothAudioSource</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBluetooth1">
+ SDLStaticIconNameBluetooth1
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBluetooth1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">bluetooth1</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBluetooth2">
+ SDLStaticIconNameBluetooth2
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBluetooth2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">bluetooth2</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameBrowse">
+ SDLStaticIconNameBrowse
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameBrowse</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">browse</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCellPhoneInRoamingMode">
+ SDLStaticIconNameCellPhoneInRoamingMode
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCellPhoneInRoamingMode</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">cellPhoneInRoamingMode</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCellServiceSignalStrength0Of5Bars">
+ SDLStaticIconNameCellServiceSignalStrength0Of5Bars
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCellServiceSignalStrength0Of5Bars</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">cellServiceSignalStrength0Of5Bars</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCellServiceSignalStrength1Of5Bars">
+ SDLStaticIconNameCellServiceSignalStrength1Of5Bars
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCellServiceSignalStrength1Of5Bars</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">cellServiceSignalStrength1Of5Bars</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCellServiceSignalStrength2Of5Bars">
+ SDLStaticIconNameCellServiceSignalStrength2Of5Bars
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCellServiceSignalStrength2Of5Bars</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">cellServiceSignalStrength2Of5Bars</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCellServiceSignalStrength3Of5Bars">
+ SDLStaticIconNameCellServiceSignalStrength3Of5Bars
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCellServiceSignalStrength3Of5Bars</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">cellServiceSignalStrength3Of5Bars</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCellServiceSignalStrength4Of5Bars">
+ SDLStaticIconNameCellServiceSignalStrength4Of5Bars
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCellServiceSignalStrength4Of5Bars</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">cellServiceSignalStrength4Of5Bars</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCellServiceSignalStrength5Of5Bars">
+ SDLStaticIconNameCellServiceSignalStrength5Of5Bars
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCellServiceSignalStrength5Of5Bars</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">cellServiceSignalStrength5Of5Bars</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameChangeLaneLeft">
+ SDLStaticIconNameChangeLaneLeft
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameChangeLaneLeft</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">changeLaneLeft</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameChangeLaneRight">
+ SDLStaticIconNameChangeLaneRight
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameChangeLaneRight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">changeLaneRight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCheckBoxChecked">
+ SDLStaticIconNameCheckBoxChecked
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCheckBoxChecked</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">checkBoxChecked</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCheckBoxUnchecked">
+ SDLStaticIconNameCheckBoxUnchecked
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCheckBoxUnchecked</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">checkBoxUnchecked</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameClimate">
+ SDLStaticIconNameClimate
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameClimate</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">climate</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameClock">
+ SDLStaticIconNameClock
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameClock</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">clock</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameCompose">
+ SDLStaticIconNameCompose
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameCompose</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">compose</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameContact">
+ SDLStaticIconNameContact
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameContact</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">contact</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameContinue">
+ SDLStaticIconNameContinue
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameContinue</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="kd">let</span> <span class="p">`</span><span class="nv">continue</span><span class="p">`:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameDash">
+ SDLStaticIconNameDash
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameDash</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">dash</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameDate">
+ SDLStaticIconNameDate
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameDate</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">date</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameDelete">
+ SDLStaticIconNameDelete
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameDelete</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">delete</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameDestination">
+ SDLStaticIconNameDestination
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameDestination</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">destination</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameDestinationFerryAhead">
+ SDLStaticIconNameDestinationFerryAhead
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameDestinationFerryAhead</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">destinationFerryAhead</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameEbookmark">
+ SDLStaticIconNameEbookmark
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameEbookmark</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">ebookmark</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameEmpty">
+ SDLStaticIconNameEmpty
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameEmpty</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">empty</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameEndCall">
+ SDLStaticIconNameEndCall
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameEndCall</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">endCall</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFail">
+ SDLStaticIconNameFail
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFail</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">fail</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFastForward30Secs">
+ SDLStaticIconNameFastForward30Secs
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFastForward30Secs</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">fastForward30Secs</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFavoriteHeart">
+ SDLStaticIconNameFavoriteHeart
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFavoriteHeart</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">favoriteHeart</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFavoriteStar">
+ SDLStaticIconNameFavoriteStar
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFavoriteStar</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">favoriteStar</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFaxNumber">
+ SDLStaticIconNameFaxNumber
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFaxNumber</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">faxNumber</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFilename">
+ SDLStaticIconNameFilename
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFilename</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">filename</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFilter">
+ SDLStaticIconNameFilter
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFilter</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">filter</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFolder">
+ SDLStaticIconNameFolder
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFolder</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">folder</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFuelPrices">
+ SDLStaticIconNameFuelPrices
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFuelPrices</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">fuelPrices</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameFullMap">
+ SDLStaticIconNameFullMap
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameFullMap</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">fullMap</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameGenericPhoneNumber">
+ SDLStaticIconNameGenericPhoneNumber
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameGenericPhoneNumber</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">genericPhoneNumber</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameGenre">
+ SDLStaticIconNameGenre
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameGenre</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">genre</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameGlobalKeyboard">
+ SDLStaticIconNameGlobalKeyboard
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameGlobalKeyboard</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">globalKeyboard</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameHighwayExitInformation">
+ SDLStaticIconNameHighwayExitInformation
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameHighwayExitInformation</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">highwayExitInformation</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameHomePhoneNumber">
+ SDLStaticIconNameHomePhoneNumber
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameHomePhoneNumber</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">homePhoneNumber</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameHyperlink">
+ SDLStaticIconNameHyperlink
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameHyperlink</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">hyperlink</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameID3TagUnknown">
+ SDLStaticIconNameID3TagUnknown
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameID3TagUnknown</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">id3TagUnknown</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameIncomingCalls">
+ SDLStaticIconNameIncomingCalls
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameIncomingCalls</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">incomingCalls</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameInformation">
+ SDLStaticIconNameInformation
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameInformation</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">information</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameIPodMediaSource">
+ SDLStaticIconNameIPodMediaSource
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameIPodMediaSource</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">iPodMediaSource</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameJoinCalls">
+ SDLStaticIconNameJoinCalls
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameJoinCalls</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">joinCalls</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameKeepLeft">
+ SDLStaticIconNameKeepLeft
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameKeepLeft</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">keepLeft</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameKeepRight">
+ SDLStaticIconNameKeepRight
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameKeepRight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">keepRight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameKey">
+ SDLStaticIconNameKey
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameKey</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">key</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameLeft">
+ SDLStaticIconNameLeft
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameLeft</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">left</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameLeftArrow">
+ SDLStaticIconNameLeftArrow
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameLeftArrow</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">leftArrow</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameLeftExit">
+ SDLStaticIconNameLeftExit
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameLeftExit</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">leftExit</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameLineInAudioSource">
+ SDLStaticIconNameLineInAudioSource
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameLineInAudioSource</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">lineInAudioSource</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameLocked">
+ SDLStaticIconNameLocked
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameLocked</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">locked</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMediaControlLeftArrow">
+ SDLStaticIconNameMediaControlLeftArrow
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMediaControlLeftArrow</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">mediaControlLeftArrow</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMediaControlRecording">
+ SDLStaticIconNameMediaControlRecording
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMediaControlRecording</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">mediaControlRecording</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMediaControlRightArrow">
+ SDLStaticIconNameMediaControlRightArrow
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMediaControlRightArrow</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">mediaControlRightArrow</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMediaControlStop">
+ SDLStaticIconNameMediaControlStop
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMediaControlStop</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">mediaControlStop</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMicrophone">
+ SDLStaticIconNameMicrophone
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMicrophone</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">microphone</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMissedCalls">
+ SDLStaticIconNameMissedCalls
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMissedCalls</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">missedCalls</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMobilePhoneNumber">
+ SDLStaticIconNameMobilePhoneNumber
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMobilePhoneNumber</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">mobilePhoneNumber</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMoveDown">
+ SDLStaticIconNameMoveDown
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMoveDown</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">moveDown</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMoveUp">
+ SDLStaticIconNameMoveUp
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMoveUp</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">moveUp</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameMP3TagArtist">
+ SDLStaticIconNameMP3TagArtist
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameMP3TagArtist</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">mp3TagArtist</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameNavigation">
+ SDLStaticIconNameNavigation
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameNavigation</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">navigation</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameNavigationCurrentDirection">
+ SDLStaticIconNameNavigationCurrentDirection
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameNavigationCurrentDirection</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">navigationCurrentDirection</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameNegativeRatingThumbsDown">
+ SDLStaticIconNameNegativeRatingThumbsDown
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameNegativeRatingThumbsDown</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">negativeRatingThumbsDown</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameNew">
+ SDLStaticIconNameNew
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameNew</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">new</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameOfficePhoneNumber">
+ SDLStaticIconNameOfficePhoneNumber
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameOfficePhoneNumber</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">officePhoneNumber</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameOpened">
+ SDLStaticIconNameOpened
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameOpened</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">opened</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameOrigin">
+ SDLStaticIconNameOrigin
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameOrigin</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">origin</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameOutgoingCalls">
+ SDLStaticIconNameOutgoingCalls
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameOutgoingCalls</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">outgoingCalls</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePause">
+ SDLStaticIconNamePause
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePause</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">pause</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePhoneCall1">
+ SDLStaticIconNamePhoneCall1
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePhoneCall1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">phoneCall1</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePhoneCall2">
+ SDLStaticIconNamePhoneCall2
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePhoneCall2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">phoneCall2</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePhoneDevice">
+ SDLStaticIconNamePhoneDevice
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePhoneDevice</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">phoneDevice</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePhonebook">
+ SDLStaticIconNamePhonebook
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePhonebook</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">phonebook</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePhoto">
+ SDLStaticIconNamePhoto
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePhoto</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">photo</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePlay">
+ SDLStaticIconNamePlay
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePlay</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">play</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePlaylist">
+ SDLStaticIconNamePlaylist
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePlaylist</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">playlist</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePopUp">
+ SDLStaticIconNamePopUp
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePopUp</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">popUp</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePositiveRatingThumbsUp">
+ SDLStaticIconNamePositiveRatingThumbsUp
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePositiveRatingThumbsUp</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">positiveRatingThumbsUp</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePower">
+ SDLStaticIconNamePower
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePower</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">power</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNamePrimaryPhone">
+ SDLStaticIconNamePrimaryPhone
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNamePrimaryPhone</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">primaryPhone</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRadioButtonChecked">
+ SDLStaticIconNameRadioButtonChecked
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRadioButtonChecked</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">radioButtonChecked</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRadioButtonUnchecked">
+ SDLStaticIconNameRadioButtonUnchecked
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRadioButtonUnchecked</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">radioButtonUnchecked</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRecentCalls">
+ SDLStaticIconNameRecentCalls
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRecentCalls</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">recentCalls</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRecentDestinations">
+ SDLStaticIconNameRecentDestinations
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRecentDestinations</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">recentDestinations</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRedo">
+ SDLStaticIconNameRedo
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRedo</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">redo</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRefresh">
+ SDLStaticIconNameRefresh
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRefresh</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">refresh</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRemoteDiagnosticsCheckEngine">
+ SDLStaticIconNameRemoteDiagnosticsCheckEngine
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRemoteDiagnosticsCheckEngine</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">remoteDiagnosticsCheckEngine</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRendered911Assist">
+ SDLStaticIconNameRendered911Assist
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRendered911Assist</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rendered911Assist</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRepeat">
+ SDLStaticIconNameRepeat
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRepeat</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="kd">let</span> <span class="p">`</span><span class="nv">repeat</span><span class="p">`:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRepeatPlay">
+ SDLStaticIconNameRepeatPlay
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRepeatPlay</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">repeatPlay</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameReply">
+ SDLStaticIconNameReply
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameReply</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">reply</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRewind30Secs">
+ SDLStaticIconNameRewind30Secs
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRewind30Secs</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rewind30Secs</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRight">
+ SDLStaticIconNameRight
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">right</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRightExit">
+ SDLStaticIconNameRightExit
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRightExit</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">rightExit</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRingtones">
+ SDLStaticIconNameRingtones
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRingtones</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">ringtones</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutLeftHand1">
+ SDLStaticIconNameRoundaboutLeftHand1
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutLeftHand1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutLeftHand1</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutLeftHand2">
+ SDLStaticIconNameRoundaboutLeftHand2
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutLeftHand2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutLeftHand2</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutLeftHand3">
+ SDLStaticIconNameRoundaboutLeftHand3
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutLeftHand3</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutLeftHand3</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutLeftHand4">
+ SDLStaticIconNameRoundaboutLeftHand4
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutLeftHand4</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutLeftHand4</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutLeftHand5">
+ SDLStaticIconNameRoundaboutLeftHand5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutLeftHand5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutLeftHand5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutLeftHand6">
+ SDLStaticIconNameRoundaboutLeftHand6
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutLeftHand6</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutLeftHand6</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutLeftHand7">
+ SDLStaticIconNameRoundaboutLeftHand7
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutLeftHand7</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutLeftHand7</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutRightHand1">
+ SDLStaticIconNameRoundaboutRightHand1
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutRightHand1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutRightHand1</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutRightHand2">
+ SDLStaticIconNameRoundaboutRightHand2
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutRightHand2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutRightHand2</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutRightHand3">
+ SDLStaticIconNameRoundaboutRightHand3
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutRightHand3</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutRightHand3</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutRightHand4">
+ SDLStaticIconNameRoundaboutRightHand4
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutRightHand4</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutRightHand4</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutRightHand5">
+ SDLStaticIconNameRoundaboutRightHand5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutRightHand5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutRightHand5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutRightHand6">
+ SDLStaticIconNameRoundaboutRightHand6
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutRightHand6</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutRightHand6</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRoundaboutRightHand7">
+ SDLStaticIconNameRoundaboutRightHand7
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRoundaboutRightHand7</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">roundaboutRightHand7</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameRSS">
+ SDLStaticIconNameRSS
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameRSS</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">RSS</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSettings">
+ SDLStaticIconNameSettings
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSettings</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">settings</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSharpLeft">
+ SDLStaticIconNameSharpLeft
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSharpLeft</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">sharpLeft</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSharpRight">
+ SDLStaticIconNameSharpRight
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSharpRight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">sharpRight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameShow">
+ SDLStaticIconNameShow
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameShow</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">show</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameShufflePlay">
+ SDLStaticIconNameShufflePlay
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameShufflePlay</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">shufflePlay</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSkiPlaces">
+ SDLStaticIconNameSkiPlaces
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSkiPlaces</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">skiPlaces</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSlightLeft">
+ SDLStaticIconNameSlightLeft
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSlightLeft</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">slightLeft</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSlightRight">
+ SDLStaticIconNameSlightRight
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSlightRight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">slightRight</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSmartphone">
+ SDLStaticIconNameSmartphone
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSmartphone</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">smartphone</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSortList">
+ SDLStaticIconNameSortList
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSortList</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">sortList</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber0">
+ SDLStaticIconNameSpeedDialNumbersNumber0
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber0</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber0</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber1">
+ SDLStaticIconNameSpeedDialNumbersNumber1
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber1</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber2">
+ SDLStaticIconNameSpeedDialNumbersNumber2
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber2</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber3">
+ SDLStaticIconNameSpeedDialNumbersNumber3
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber3</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber3</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber4">
+ SDLStaticIconNameSpeedDialNumbersNumber4
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber4</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber4</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber5">
+ SDLStaticIconNameSpeedDialNumbersNumber5
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber5</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber5</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber6">
+ SDLStaticIconNameSpeedDialNumbersNumber6
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber6</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber6</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber7">
+ SDLStaticIconNameSpeedDialNumbersNumber7
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber7</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber7</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber8">
+ SDLStaticIconNameSpeedDialNumbersNumber8
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber8</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber8</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSpeedDialNumbersNumber9">
+ SDLStaticIconNameSpeedDialNumbersNumber9
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSpeedDialNumbersNumber9</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">speedDialNumbersNumber9</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameSuccess">
+ SDLStaticIconNameSuccess
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameSuccess</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">success</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameTrackTitle">
+ SDLStaticIconNameTrackTitle
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameTrackTitle</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">trackTitle</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameTrafficReport">
+ SDLStaticIconNameTrafficReport
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameTrafficReport</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">trafficReport</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameTurnList">
+ SDLStaticIconNameTurnList
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameTurnList</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">turnList</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameUTurnLeftTraffic">
+ SDLStaticIconNameUTurnLeftTraffic
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameUTurnLeftTraffic</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">uTurnLeftTraffic</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameUTurnRightTraffic">
+ SDLStaticIconNameUTurnRightTraffic
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameUTurnRightTraffic</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">uTurnRightTraffic</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameUndo">
+ SDLStaticIconNameUndo
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameUndo</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">undo</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameUnlocked">
+ SDLStaticIconNameUnlocked
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameUnlocked</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">unlocked</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameUSBMediaAudioSource">
+ SDLStaticIconNameUSBMediaAudioSource
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameUSBMediaAudioSource</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">usbMediaAudioSource</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceControlScrollbarListItemNo1">
+ SDLStaticIconNameVoiceControlScrollbarListItemNo1
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceControlScrollbarListItemNo1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceControlScrollbarListItemNo1</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceControlScrollbarListItemNo2">
+ SDLStaticIconNameVoiceControlScrollbarListItemNo2
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceControlScrollbarListItemNo2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceControlScrollbarListItemNo2</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceControlScrollbarListItemNo3">
+ SDLStaticIconNameVoiceControlScrollbarListItemNo3
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceControlScrollbarListItemNo3</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceControlScrollbarListItemNo3</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceControlScrollbarListItemNo4">
+ SDLStaticIconNameVoiceControlScrollbarListItemNo4
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceControlScrollbarListItemNo4</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceControlScrollbarListItemNo4</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceRecognitionFailed">
+ SDLStaticIconNameVoiceRecognitionFailed
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceRecognitionFailed</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceRecognitionFailed</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceRecognitionPause">
+ SDLStaticIconNameVoiceRecognitionPause
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceRecognitionPause</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceRecognitionPause</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceRecognitionSuccessful">
+ SDLStaticIconNameVoiceRecognitionSuccessful
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceRecognitionSuccessful</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceRecognitionSuccessful</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceRecognitionSystemActive">
+ SDLStaticIconNameVoiceRecognitionSystemActive
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceRecognitionSystemActive</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceRecognitionSystemActive</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceRecognitionSystemListening">
+ SDLStaticIconNameVoiceRecognitionSystemListening
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceRecognitionSystemListening</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceRecognitionSystemListening</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameVoiceRecognitionTryAgain">
+ SDLStaticIconNameVoiceRecognitionTryAgain
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameVoiceRecognitionTryAgain</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">voiceRecognitionTryAgain</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameWarning">
+ SDLStaticIconNameWarning
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameWarning</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">warning</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameWeather">
+ SDLStaticIconNameWeather
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameWeather</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">weather</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameWifiFull">
+ SDLStaticIconNameWifiFull
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameWifiFull</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">wifiFull</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameZoomIn">
+ SDLStaticIconNameZoomIn
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameZoomIn</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">zoomIn</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLStaticIconNameZoomOut">
+ SDLStaticIconNameZoomOut
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span> <span class="k">const</span> <span class="n">SDLStaticIconNameZoomOut</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">zoomOut</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName">SDLStaticIconName</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLDefaultScreenSize">
SDLDefaultScreenSize
</h3>
@@ -9777,6 +15151,240 @@
+ <h3 id="section-SDLVideoStreamManagerStateStopped">
+ SDLVideoStreamManagerStateStopped
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState">SDLVideoStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLVideoStreamManagerStateStopped</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLVideoStreamManagerStateStopped</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLVideoStreamManagerStateStarting">
+ SDLVideoStreamManagerStateStarting
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState">SDLVideoStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLVideoStreamManagerStateStarting</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLVideoStreamManagerStateStarting</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLVideoStreamManagerStateReady">
+ SDLVideoStreamManagerStateReady
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState">SDLVideoStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLVideoStreamManagerStateReady</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLVideoStreamManagerStateReady</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLVideoStreamManagerStateSuspended">
+ SDLVideoStreamManagerStateSuspended
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState">SDLVideoStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLVideoStreamManagerStateSuspended</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLVideoStreamManagerStateSuspended</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLVideoStreamManagerStateShuttingDown">
+ SDLVideoStreamManagerStateShuttingDown
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState">SDLVideoStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLVideoStreamManagerStateShuttingDown</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLVideoStreamManagerStateShuttingDown</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioStreamManagerStateStopped">
+ SDLAudioStreamManagerStateStopped
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState">SDLAudioStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLAudioStreamManagerStateStopped</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLAudioStreamManagerStateStopped</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioStreamManagerStateStarting">
+ SDLAudioStreamManagerStateStarting
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState">SDLAudioStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLAudioStreamManagerStateStarting</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLAudioStreamManagerStateStarting</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioStreamManagerStateReady">
+ SDLAudioStreamManagerStateReady
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState">SDLAudioStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLAudioStreamManagerStateReady</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLAudioStreamManagerStateReady</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioStreamManagerStateShuttingDown">
+ SDLAudioStreamManagerStateShuttingDown
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState">SDLAudioStreamManagerState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLAudioStreamManagerStateShuttingDown</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLAudioStreamManagerStateShuttingDown</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAppStateInactive">
+ SDLAppStateInactive
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAppState">SDLAppState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLAppStateInactive</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLAppStateInactive</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAppStateActive">
+ SDLAppStateActive
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAppState">SDLAppState</a></span> <span class="o">*</span><span class="k">const</span> <span class="n">SDLAppStateActive</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLAppStateActive</span><span class="p">:</span> <span class="kt">String</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLSupportedSeatDriver">
+ SDLSupportedSeatDriver
+ </h3>
+
+ <p>@abstract Save current seat postions and settings to seat memory.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span> <span class="n">SDLSupportedSeatDriver</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">driver</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLSupportedSeatFrontPassenger">
+ SDLSupportedSeatFrontPassenger
+ </h3>
+
+ <p>@abstract Restore / apply the seat memory settings to the current seat.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span> <span class="n">SDLSupportedSeatFrontPassenger</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">frontPassenger</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLSystemActionDefaultAction">
SDLSystemActionDefaultAction
</h3>
@@ -10177,6 +15785,150 @@
+ <h3 id="section-SDLTPMSUnknown">
+ SDLTPMSUnknown
+ </h3>
+
+ <p>If set the status of the tire is not known.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">SDLTPMSUnknown</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">unknown</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTPMSSystemFault">
+ SDLTPMSSystemFault
+ </h3>
+
+ <p>TPMS does not function.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">SDLTPMSSystemFault</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">systemFault</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTPMSSensorFault">
+ SDLTPMSSensorFault
+ </h3>
+
+ <p>The sensor of the tire does not function.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">SDLTPMSSensorFault</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">sensorFault</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTPMSLow">
+ SDLTPMSLow
+ </h3>
+
+ <p>TPMS is reporting a low tire pressure for the tire.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">SDLTPMSLow</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">low</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTPMSSystemActive">
+ SDLTPMSSystemActive
+ </h3>
+
+ <p>TPMS is active and the tire pressure is monitored.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">SDLTPMSSystemActive</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">systemActive</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTPMSTrain">
+ SDLTPMSTrain
+ </h3>
+
+ <p>TPMS is reporting that the tire must be trained.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">SDLTPMSTrain</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">train</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTPMSTrainingComplete">
+ SDLTPMSTrainingComplete
+ </h3>
+
+ <p>TPMS reports the training for the tire is completed.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">SDLTPMSTrainingComplete</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">trainingComplete</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTPMSNotTrained">
+ SDLTPMSNotTrained
+ </h3>
+
+ <p>TPMS reports the tire is not trained.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">SDLTPMSNotTrained</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">notTrained</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLTemperatureUnitCelsius">
SDLTemperatureUnitCelsius
</h3>
@@ -10996,6 +16748,78 @@
+ <h3 id="section-SDLTurnSignalOff">
+ SDLTurnSignalOff
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="k">const</span> <span class="n">SDLTurnSignalOff</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">off</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTurnSignalLeft">
+ SDLTurnSignalLeft
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="k">const</span> <span class="n">SDLTurnSignalLeft</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">left</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTurnSignalRight">
+ SDLTurnSignalRight
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="k">const</span> <span class="n">SDLTurnSignalRight</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">right</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTurnSignalBoth">
+ SDLTurnSignalBoth
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n"><a href="Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="k">const</span> <span class="n">SDLTurnSignalBoth</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">both</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLUpdateModeCountUp">
SDLUpdateModeCountUp
</h3>
@@ -11834,6 +17658,24 @@
+ <h3 id="section-SDLVehicleDataTypeFuelRange">
+ SDLVehicleDataTypeFuelRange
+ </h3>
+
+ <p>Vehicle fuel range data</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span> <span class="n">SDLVehicleDataTypeFuelRange</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">fuelRange</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLVehicleDataTypeAirbagStatus">
SDLVehicleDataTypeAirbagStatus
</h3>
@@ -11978,6 +17820,24 @@
+ <h3 id="section-SDLVehicleDataTypeEngineOilLife">
+ SDLVehicleDataTypeEngineOilLife
+ </h3>
+
+ <p>Vehicle engine oil life data</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span> <span class="n">SDLVehicleDataTypeEngineOilLife</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">engineOilLife</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLVehicleDataTypeEngineTorque">
SDLVehicleDataTypeEngineTorque
</h3>
@@ -12032,6 +17892,42 @@
+ <h3 id="section-SDLVehicleDataTypeElectronicParkBrakeStatus">
+ SDLVehicleDataTypeElectronicParkBrakeStatus
+ </h3>
+
+ <p>Vehicle electronic parking brake status data</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span> <span class="n">SDLVehicleDataTypeElectronicParkBrakeStatus</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">electronicParkBrakeStatus</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLVehicleDataTypeTurnSignal">
+ SDLVehicleDataTypeTurnSignal
+ </h3>
+
+ <p>Vehicle turn signal data</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span> <span class="n">SDLVehicleDataTypeTurnSignal</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">turnSignal</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLVentilationModeUpper">
SDLVentilationModeUpper
</h3>
@@ -12284,6 +18180,42 @@
+ <h3 id="section-SDLVideoStreamingStateStreamable">
+ SDLVideoStreamingStateStreamable
+ </h3>
+
+ <p>STREAMABLE, the current app is allowed to stream video</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span> <span class="n">SDLVideoStreamingStateStreamable</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">streamable</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLVideoStreamingStateNotStreamable">
+ SDLVideoStreamingStateNotStreamable
+ </h3>
+
+ <p>NOT_STREAMABLE, the current app is not allowed to stream video</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span> <span class="n">SDLVideoStreamingStateNotStreamable</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">notStreamable</span><span class="p">:</span> <span class="kt"><a href="Type Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLVRCapabilitiesText">
SDLVRCapabilitiesText
</h3>
diff --git a/docs/Enums.html b/docs/Enums.html
index c884bdf5e..28ae3e168 100644
--- a/docs/Enums.html
+++ b/docs/Enums.html
@@ -5,11 +5,14 @@
<ul>
<li><a href="#section-SDLArtworkImageFormat">SDLArtworkImageFormat</a></li>
<li><a href="#section-SDLAudioStreamManagerError">SDLAudioStreamManagerError</a></li>
+ <li><a href="#section-SDLChoiceSetLayout">SDLChoiceSetLayout</a></li>
<li><a href="#section-SDLManagerError">SDLManagerError</a></li>
<li><a href="#section-SDLFileManagerError">SDLFileManagerError</a></li>
<li><a href="#section-SDLTextAndGraphicManagerError">SDLTextAndGraphicManagerError</a></li>
<li><a href="#section-SDLSoftButtonManagerError">SDLSoftButtonManagerError</a></li>
<li><a href="#section-SDLMenuManagerError">SDLMenuManagerError</a></li>
+ <li><a href="#section-SDLChoiceSetManagerError">SDLChoiceSetManagerError</a></li>
+ <li><a href="#section-SDLTransportError">SDLTransportError</a></li>
<li><a href="#section-SDLLogBytesDirection">SDLLogBytesDirection</a></li>
<li><a href="#section-SDLLogFlag">SDLLogFlag</a></li>
<li><a href="#section-SDLLogLevel">SDLLogLevel</a></li>
@@ -71,6 +74,28 @@
+ <h3 id="section-SDLChoiceSetLayout">
+ SDLChoiceSetLayout
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Enums/SDLChoiceSetLayout.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">NS_ENUM</span><span class="p">(</span><span class="n">NSUInteger</span><span class="p">,</span> <span class="n">SDLChoiceSetLayout</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">SDLChoiceSetLayoutList</span><span class="p">,</span>
+ <span class="n">SDLChoiceSetLayoutTiles</span><span class="p">,</span>
+<span class="p">}</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLChoiceSetLayout</span> <span class="p">:</span> <span class="kt">UInt</span></code></pre>
+
+
+
+
<h3 id="section-SDLManagerError">
SDLManagerError
</h3>
@@ -178,6 +203,48 @@
+ <h3 id="section-SDLChoiceSetManagerError">
+ SDLChoiceSetManagerError
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Enums/SDLChoiceSetManagerError.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">NS_ENUM</span><span class="p">(</span><span class="n">NSInteger</span><span class="p">,</span> <span class="n">SDLChoiceSetManagerError</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">SDLChoiceSetManagerErrorPendingPresentationDeleted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
+ <span class="n">SDLChoiceSetManagerErrorDeletionFailed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span>
+ <span class="n">SDLChoiceSetManagerErrorUploadFailed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span><span class="p">,</span>
+<span class="p">}</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLChoiceSetManagerError</span> <span class="p">:</span> <span class="kt">Int</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTransportError">
+ SDLTransportError
+ </h3>
+
+ <p>Errors associated with transport.</p>
+
+ <a href="Enums/SDLTransportError.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">enum</span> <span class="n">SDLTransportError</span> <span class="p">{}</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLTransportError</span> <span class="p">:</span> <span class="kt">Int</span></code></pre>
+
+
+
+
<h3 id="section-SDLLogBytesDirection">
SDLLogBytesDirection
</h3>
diff --git a/docs/Enums/SDLChoiceSetLayout.html b/docs/Enums/SDLChoiceSetLayout.html
new file mode 100644
index 000000000..a2808c757
--- /dev/null
+++ b/docs/Enums/SDLChoiceSetLayout.html
@@ -0,0 +1,52 @@
+<h1>SDLChoiceSetLayout Enumeration Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-SDLChoiceSetLayoutList">SDLChoiceSetLayoutList</a></li>
+ <li><a href="#section-SDLChoiceSetLayoutTiles">SDLChoiceSetLayoutTiles</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-SDLChoiceSetLayoutList">
+ SDLChoiceSetLayoutList
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLChoiceSetLayoutList</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">list</span> <span class="o">=</span> <span class="mi">0</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLChoiceSetLayoutTiles">
+ SDLChoiceSetLayoutTiles
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLChoiceSetLayoutTiles</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">tiles</span> <span class="o">=</span> <span class="mi">1</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Enums/SDLChoiceSetManagerError.html b/docs/Enums/SDLChoiceSetManagerError.html
new file mode 100644
index 000000000..0e0bac2c1
--- /dev/null
+++ b/docs/Enums/SDLChoiceSetManagerError.html
@@ -0,0 +1,71 @@
+<h1>SDLChoiceSetManagerError Enumeration Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-SDLChoiceSetManagerErrorPendingPresentationDeleted">SDLChoiceSetManagerErrorPendingPresentationDeleted</a></li>
+ <li><a href="#section-SDLChoiceSetManagerErrorDeletionFailed">SDLChoiceSetManagerErrorDeletionFailed</a></li>
+ <li><a href="#section-SDLChoiceSetManagerErrorUploadFailed">SDLChoiceSetManagerErrorUploadFailed</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-SDLChoiceSetManagerErrorPendingPresentationDeleted">
+ SDLChoiceSetManagerErrorPendingPresentationDeleted
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLChoiceSetManagerErrorPendingPresentationDeleted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">pendingPresentationDeleted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLChoiceSetManagerErrorDeletionFailed">
+ SDLChoiceSetManagerErrorDeletionFailed
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLChoiceSetManagerErrorDeletionFailed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">deletionFailed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLChoiceSetManagerErrorUploadFailed">
+ SDLChoiceSetManagerErrorUploadFailed
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLChoiceSetManagerErrorUploadFailed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">uploadFailed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Enums/SDLTransportError.html b/docs/Enums/SDLTransportError.html
new file mode 100644
index 000000000..d69c1a7b8
--- /dev/null
+++ b/docs/Enums/SDLTransportError.html
@@ -0,0 +1,93 @@
+<h1>SDLTransportError Enumeration Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-SDLTransportErrorUnknown">SDLTransportErrorUnknown</a></li>
+ <li><a href="#section-SDLTransportErrorConnectionRefused">SDLTransportErrorConnectionRefused</a></li>
+ <li><a href="#section-SDLTransportErrorConnectionTimedOut">SDLTransportErrorConnectionTimedOut</a></li>
+ <li><a href="#section-SDLTransportErrorNetworkDown">SDLTransportErrorNetworkDown</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Errors associated with transport.</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-SDLTransportErrorUnknown">
+ SDLTransportErrorUnknown
+ </h3>
+
+ <p>Connection cannot be established due to a reason not listed here.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLTransportErrorUnknown</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">unknown</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTransportErrorConnectionRefused">
+ SDLTransportErrorConnectionRefused
+ </h3>
+
+ <p>TCP connection is refused.
+Probably specified port number is invalid, or SDL Core is not running on the head unit.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLTransportErrorConnectionRefused</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">connectionRefused</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTransportErrorConnectionTimedOut">
+ SDLTransportErrorConnectionTimedOut
+ </h3>
+
+ <p>TCP connection cannot be established within given time.
+Probably because of wrong IP address, or the connection may be blocked by a firewall.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLTransportErrorConnectionTimedOut</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">connectionTimedOut</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLTransportErrorNetworkDown">
+ SDLTransportErrorNetworkDown
+ </h3>
+
+ <p>TCP connection cannot be established since network is down.
+Probably the phone is not connected to the correct network.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLTransportErrorNetworkDown</span> <span class="o">=</span> <span class="o">-</span><span class="mi">4</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">networkDown</span> <span class="o">=</span> <span class="o">-</span><span class="mi">4</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Protocols.html b/docs/Protocols.html
index ef3308697..7039560a3 100644
--- a/docs/Protocols.html
+++ b/docs/Protocols.html
@@ -8,6 +8,8 @@
<li><a href="#section-SDLBool">SDLBool</a></li>
<li><a href="#section-SDLFloat">SDLFloat</a></li>
<li><a href="#section-SDLAudioStreamManagerDelegate">SDLAudioStreamManagerDelegate</a></li>
+ <li><a href="#section-SDLChoiceSetDelegate">SDLChoiceSetDelegate</a></li>
+ <li><a href="#section-SDLKeyboardDelegate">SDLKeyboardDelegate</a></li>
<li><a href="#section-SDLLogTarget">SDLLogTarget</a></li>
<li><a href="#section-SDLManagerDelegate">SDLManagerDelegate</a></li>
<li><a href="#section-SDLSecurityType">SDLSecurityType</a></li>
@@ -135,6 +137,106 @@
+ <h3 id="section-SDLChoiceSetDelegate">
+ SDLChoiceSetDelegate
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Protocols/SDLChoiceSetDelegate.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@protocol</span> <span class="nc">SDLChoiceSetDelegate</span> <span class="o">&lt;</span><span class="n">NSObject</span><span class="o">&gt;</span>
+
+<span class="o">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">choiceSet</span><span class="o">:</span><span class="p">(</span><span class="n"><a href="Classes/SDLChoiceSet.html">SDLChoiceSet</a></span> <span class="o">*</span><span class="p">)</span><span class="n">choiceSet</span> <span class="n">didSelectChoice</span><span class="o">:</span><span class="p">(</span><span class="n"><a href="Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*</span><span class="p">)</span><span class="n">choice</span> <span class="n">withSource</span><span class="o">:</span><span class="p">(</span><span class="n"><a href="Type Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource">SDLTriggerSource</a></span><span class="p">)</span><span class="n">source</span> <span class="n">atRowIndex</span><span class="o">:</span><span class="p">(</span><span class="n">NSUInteger</span><span class="p">)</span><span class="n">rowIndex</span><span class="p">;</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">choiceSet</span><span class="p">:(</span><span class="n"><a href="Classes/SDLChoiceSet.html">SDLChoiceSet</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">choiceSet</span> <span class="nf">didReceiveError</span><span class="p">:(</span><span class="n">NSError</span> <span class="o">*</span><span class="p">)</span><span class="nv">error</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">protocol</span> <span class="kt">SDLChoiceSetDelegate</span> <span class="p">:</span> <span class="kt">NSObjectProtocol</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLKeyboardDelegate">
+ SDLKeyboardDelegate
+ </h3>
+
+ <p>Undocumented</p>
+
+ <a href="Protocols/SDLKeyboardDelegate.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@protocol</span> <span class="nc">SDLKeyboardDelegate</span> <span class="o">&lt;</span><span class="n">NSObject</span><span class="o">&gt;</span>
+
+<span class="c1">//</span>
+
+<span class="cm">/**
+ The keyboard session completed with some input.
+
+ This will be sent upon ENTRY_SUBMITTED or ENTRY_VOICE. If the event is ENTRY_VOICE, the user requested to start a voice session in order to submit input to this keyboard. This MUST be handled by you. Start an Audio Pass Thru session if supported.
+
+ @param inputText The submitted input text on the keyboard
+ @param source ENTRY_SUBMITTED if the user pressed the submit button on the keyboard, ENTRY_VOICE if the user requested that a voice session begin
+ */</span>
+<span class="o">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">userDidSubmitInput</span><span class="o">:</span><span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="n">inputText</span> <span class="n">withEvent</span><span class="o">:</span><span class="p">(</span><span class="n"><a href="Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">)</span><span class="n">source</span><span class="p">;</span>
+
+<span class="cm">/**
+ The keyboard session aborted.
+
+ This will be sent if the keyboard event ENTRY_CANCELLED or ENTRY_ABORTED is sent
+
+ @param event ENTRY_CANCELLED if the user cancelled the keyboard input, or ENTRY_ABORTED if the system aborted the input due to a higher priority event
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">keyboardDidAbortWithReason</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">)</span><span class="nv">event</span><span class="p">;</span>
+
+<span class="k">@optional</span>
+<span class="cm">/**
+ Implement this in order to provide a custom keyboard configuration to just this keyboard. To apply default settings to all keyboards, see SDLScreenManager.keyboardConfiguration
+
+ @return The custom keyboard configuration to use.
+ */</span>
+<span class="o">-</span> <span class="p">(</span><span class="n"><a href="Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span> <span class="o">*</span><span class="p">)</span><span class="n">customKeyboardConfiguration</span><span class="p">;</span>
+
+<span class="cm">/**
+ Implement this if you wish to update the KeyboardProperties.autoCompleteText as the user updates their input. This is called upon a KEYPRESS event.
+
+ @param currentInputText The user's full current input text
+ @param completionHandler A completion handler to update the autoCompleteText
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">updateAutocompleteWithInput</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">currentInputText</span> <span class="nf">completionHandler</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler">SDLKeyboardAutocompleteCompletionHandler</a></span><span class="p">)</span><span class="nv">completionHandler</span><span class="p">;</span>
+
+<span class="cm">/**
+ Implement this if you wish to update the limitedCharacterSet as the user updates their input. This is called upon a KEYPRESS event.
+
+ @param currentInputText The user's full current input text
+ @param completionHandler A completion handler to update the limitedCharacterSet
+ */</span>
+<span class="k">-</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">updateCharacterSetWithInput</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">currentInputText</span> <span class="nf">completionHandler</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler">SDLKeyboardCharacterSetCompletionHandler</a></span><span class="p">)</span><span class="nv">completionHandler</span><span class="p">;</span>
+
+<span class="c1">// This will be sent for any event that occurs with the event and the current input text</span>
+
+<span class="cm">/**
+ Implement this to be notified of all events occurring on the keyboard
+
+ @param event The event that occurred
+ @param currentInputText The user's full current input text
+ */</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">keyboardDidSendEvent</span><span class="p">:(</span><span class="n"><a href="Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">)</span><span class="nv">event</span> <span class="nf">text</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">currentInputText</span><span class="p">;</span>
+
+<span class="k">@end</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">protocol</span> <span class="kt">SDLKeyboardDelegate</span> <span class="p">:</span> <span class="kt">NSObjectProtocol</span></code></pre>
+
+
+
+
<h3 id="section-SDLLogTarget">
SDLLogTarget
</h3>
diff --git a/docs/Protocols/SDLChoiceSetDelegate.html b/docs/Protocols/SDLChoiceSetDelegate.html
new file mode 100644
index 000000000..6a6f843d7
--- /dev/null
+++ b/docs/Protocols/SDLChoiceSetDelegate.html
@@ -0,0 +1,52 @@
+<h1>SDLChoiceSetDelegate Protocol Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--choiceSet:didSelectChoice:withSource:atRowIndex:">-choiceSet:didSelectChoice:withSource:atRowIndex:</a></li>
+ <li><a href="#section--choiceSet:didReceiveError:">-choiceSet:didReceiveError:</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--choiceSet:didSelectChoice:withSource:atRowIndex:">
+ -choiceSet:didSelectChoice:withSource:atRowIndex:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">choiceSet</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">choiceSet</span> <span class="nf">didSelectChoice</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">choice</span> <span class="nf">withSource</span><span class="p">:(</span><span class="n"><a href="../Type Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource">SDLTriggerSource</a></span><span class="p">)</span><span class="nv">source</span> <span class="nf">atRowIndex</span><span class="p">:(</span><span class="n">NSUInteger</span><span class="p">)</span><span class="nv">rowIndex</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">choiceSet</span><span class="p">(</span><span class="n">_</span> <span class="nv">choiceSet</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></span><span class="p">,</span> <span class="n">didSelectChoice</span> <span class="nv">choice</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span><span class="p">,</span> <span class="n">withSource</span> <span class="nv">source</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource">SDLTriggerSource</a></span><span class="p">,</span> <span class="n">atRowIndex</span> <span class="nv">rowIndex</span><span class="p">:</span> <span class="kt">UInt</span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section--choiceSet:didReceiveError:">
+ -choiceSet:didReceiveError:
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">choiceSet</span><span class="p">:(</span><span class="n"><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">choiceSet</span> <span class="nf">didReceiveError</span><span class="p">:(</span><span class="n">NSError</span> <span class="o">*</span><span class="p">)</span><span class="nv">error</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">choiceSet</span><span class="p">(</span><span class="n">_</span> <span class="nv">choiceSet</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLChoiceSet.html">SDLChoiceSet</a></span><span class="p">,</span> <span class="n">didReceiveError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">Error</span><span class="p">)</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Protocols/SDLKeyboardDelegate.html b/docs/Protocols/SDLKeyboardDelegate.html
new file mode 100644
index 000000000..2df9c7813
--- /dev/null
+++ b/docs/Protocols/SDLKeyboardDelegate.html
@@ -0,0 +1,177 @@
+<h1>SDLKeyboardDelegate Protocol Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section--userDidSubmitInput:withEvent:">-userDidSubmitInput:withEvent:</a></li>
+ <li><a href="#section--keyboardDidAbortWithReason:">-keyboardDidAbortWithReason:</a></li>
+ <li><a href="#section--customKeyboardConfiguration">-customKeyboardConfiguration</a></li>
+ <li><a href="#section--updateAutocompleteWithInput:completionHandler:">-updateAutocompleteWithInput:completionHandler:</a></li>
+ <li><a href="#section--updateCharacterSetWithInput:completionHandler:">-updateCharacterSetWithInput:completionHandler:</a></li>
+ <li><a href="#section--keyboardDidSendEvent:text:">-keyboardDidSendEvent:text:</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Undocumented</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section--userDidSubmitInput:withEvent:">
+ -userDidSubmitInput:withEvent:
+ </h3>
+
+ <p>The keyboard session completed with some input.</p>
+
+<p>This will be sent upon ENTRY_SUBMITTED or ENTRY_VOICE. If the event is ENTRY_VOICE, the user requested to start a voice session in order to submit input to this keyboard. This MUST be handled by you. Start an Audio Pass Thru session if supported.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">userDidSubmitInput</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">inputText</span>
+ <span class="nf">withEvent</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">)</span><span class="nv">source</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">userDidSubmitInput</span><span class="p">(</span><span class="n">_</span> <span class="nv">inputText</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="n">withEvent</span> <span class="nv">source</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>inputText</dt>
+ <dd><p>The submitted input text on the keyboard</p></dd>
+ <dt>source</dt>
+ <dd><p>ENTRY_SUBMITTED if the user pressed the submit button on the keyboard, ENTRY_VOICE if the user requested that a voice session begin</p></dd>
+ </dl>
+
+ <h3 id="section--keyboardDidAbortWithReason:">
+ -keyboardDidAbortWithReason:
+ </h3>
+
+ <p>The keyboard session aborted.</p>
+
+<p>This will be sent if the keyboard event ENTRY_CANCELLED or ENTRY_ABORTED is sent</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">keyboardDidAbortWithReason</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">)</span><span class="nv">event</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">keyboardDidAbort</span><span class="p">(</span><span class="n">withReason</span> <span class="nv">event</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>event</dt>
+ <dd><p>ENTRY_CANCELLED if the user cancelled the keyboard input, or ENTRY_ABORTED if the system aborted the input due to a higher priority event</p></dd>
+ </dl>
+
+ <h3 id="section--customKeyboardConfiguration">
+ -customKeyboardConfiguration
+ </h3>
+
+ <p>Implement this in order to provide a custom keyboard configuration to just this keyboard. To apply default settings to all keyboards, see SDLScreenManager.keyboardConfiguration</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span> <span class="o">*</span><span class="p">)</span><span class="n">customKeyboardConfiguration</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">customKeyboardConfiguration</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span></code></pre>
+
+
+
+ <div>
+ <h4>Return Value</h4>
+ <p>The custom keyboard configuration to use.</p>
+ </div>
+
+ <h3 id="section--updateAutocompleteWithInput:completionHandler:">
+ -updateAutocompleteWithInput:completionHandler:
+ </h3>
+
+ <p>Implement this if you wish to update the KeyboardProperties.autoCompleteText as the user updates their input. This is called upon a KEYPRESS event.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">updateAutocompleteWithInput</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">currentInputText</span>
+ <span class="nf">completionHandler</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler">SDLKeyboardAutocompleteCompletionHandler</a></span><span class="p">)</span>
+ <span class="n">completionHandler</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">updateAutocomplete</span><span class="p">(</span><span class="n">withInput</span> <span class="nv">currentInputText</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">completionHandler</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler">SDLKeyboardAutocompleteCompletionHandler</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>currentInputText</dt>
+ <dd><p>The user&rsquo;s full current input text</p></dd>
+ <dt>completionHandler</dt>
+ <dd><p>A completion handler to update the autoCompleteText</p></dd>
+ </dl>
+
+ <h3 id="section--updateCharacterSetWithInput:completionHandler:">
+ -updateCharacterSetWithInput:completionHandler:
+ </h3>
+
+ <p>Implement this if you wish to update the limitedCharacterSet as the user updates their input. This is called upon a KEYPRESS event.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">updateCharacterSetWithInput</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">currentInputText</span>
+ <span class="nf">completionHandler</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler">SDLKeyboardCharacterSetCompletionHandler</a></span><span class="p">)</span>
+ <span class="n">completionHandler</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">updateCharacterSet</span><span class="p">(</span><span class="n">withInput</span> <span class="nv">currentInputText</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">completionHandler</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler">SDLKeyboardCharacterSetCompletionHandler</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>currentInputText</dt>
+ <dd><p>The user&rsquo;s full current input text</p></dd>
+ <dt>completionHandler</dt>
+ <dd><p>A completion handler to update the limitedCharacterSet</p></dd>
+ </dl>
+
+ <h3 id="section--keyboardDidSendEvent:text:">
+ -keyboardDidSendEvent:text:
+ </h3>
+
+ <p>Implement this to be notified of all events occurring on the keyboard</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">keyboardDidSendEvent</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">)</span><span class="nv">event</span>
+ <span class="nf">text</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">currentInputText</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">keyboardDidSendEvent</span><span class="p">(</span><span class="n">_</span> <span class="nv">event</span><span class="p">:</span> <span class="kt"><a href="../Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span><span class="p">,</span> <span class="n">text</span> <span class="nv">currentInputText</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>event</dt>
+ <dd><p>The event that occurred</p></dd>
+ <dt>currentInputText</dt>
+ <dd><p>The user&rsquo;s full current input text</p></dd>
+ </dl>
+
+</section>
diff --git a/docs/Type Definitions.html b/docs/Type Definitions.html
index 26a4ea3de..d3b788a96 100644
--- a/docs/Type Definitions.html
+++ b/docs/Type Definitions.html
@@ -6,6 +6,7 @@
<li><a href="#section-SDLAmbientLightStatus">SDLAmbientLightStatus</a></li>
<li><a href="#section-SDLAppHMIType">SDLAppHMIType</a></li>
<li><a href="#section-SDLAppInterfaceUnregisteredReason">SDLAppInterfaceUnregisteredReason</a></li>
+ <li><a href="#section-SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></li>
<li><a href="#section-SDLAudioStreamingState">SDLAudioStreamingState</a></li>
<li><a href="#section-SDLAudioType">SDLAudioType</a></li>
<li><a href="#section-SDLBitsPerSample">SDLBitsPerSample</a></li>
@@ -20,13 +21,16 @@
<li><a href="#section-SDLDeliveryMode">SDLDeliveryMode</a></li>
<li><a href="#section-SDLDeviceLevelStatus">SDLDeviceLevelStatus</a></li>
<li><a href="#section-SDLDimension">SDLDimension</a></li>
+ <li><a href="#section-SDLDisplayMode">SDLDisplayMode</a></li>
<li><a href="#section-SDLDisplayType">SDLDisplayType</a></li>
+ <li><a href="#section-SDLDistanceUnit">SDLDistanceUnit</a></li>
<li><a href="#section-SDLDriverDistractionState">SDLDriverDistractionState</a></li>
<li><a href="#section-SDLECallConfirmationStatus">SDLECallConfirmationStatus</a></li>
+ <li><a href="#section-SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></li>
<li><a href="#section-SDLEmergencyEventType">SDLEmergencyEventType</a></li>
<li><a href="#section-SDLEnum">SDLEnum</a></li>
- <li><a href="#section-SDLFileName">SDLFileName</a></li>
<li><a href="#section-SDLFileManagerStartupCompletionHandler">SDLFileManagerStartupCompletionHandler</a></li>
+ <li><a href="#section-SDLFileName">SDLFileName</a></li>
<li><a href="#section-SDLFileManagerUploadCompletionHandler">SDLFileManagerUploadCompletionHandler</a></li>
<li><a href="#section-SDLFileManagerMultiUploadCompletionHandler">SDLFileManagerMultiUploadCompletionHandler</a></li>
<li><a href="#section-SDLFileManagerMultiUploadProgressHandler">SDLFileManagerMultiUploadProgressHandler</a></li>
@@ -38,6 +42,7 @@
<li><a href="#section-SDLFileManagerMultiUploadArtworkProgressHandler">SDLFileManagerMultiUploadArtworkProgressHandler</a></li>
<li><a href="#section-SDLFileType">SDLFileType</a></li>
<li><a href="#section-SDLFuelCutoffStatus">SDLFuelCutoffStatus</a></li>
+ <li><a href="#section-SDLFuelType">SDLFuelType</a></li>
<li><a href="#section-SDLGlobalProperty">SDLGlobalProperty</a></li>
<li><a href="#section-SDLHMILevel">SDLHMILevel</a></li>
<li><a href="#section-SDLHMIZoneCapabilities">SDLHMIZoneCapabilities</a></li>
@@ -46,15 +51,22 @@
<li><a href="#section-SDLImageFieldName">SDLImageFieldName</a></li>
<li><a href="#section-SDLImageType">SDLImageType</a></li>
<li><a href="#section-SDLInteractionMode">SDLInteractionMode</a></li>
+ <li><a href="#section-SDLKeyboardAutocompleteCompletionHandler">SDLKeyboardAutocompleteCompletionHandler</a></li>
+ <li><a href="#section-SDLKeyboardCharacterSetCompletionHandler">SDLKeyboardCharacterSetCompletionHandler</a></li>
<li><a href="#section-SDLKeyboardEvent">SDLKeyboardEvent</a></li>
<li><a href="#section-SDLKeyboardLayout">SDLKeyboardLayout</a></li>
<li><a href="#section-SDLKeypressMode">SDLKeypressMode</a></li>
<li><a href="#section-SDLLanguage">SDLLanguage</a></li>
<li><a href="#section-SDLLayoutMode">SDLLayoutMode</a></li>
+ <li><a href="#section-SDLLightName">SDLLightName</a></li>
+ <li><a href="#section-SDLLightStatus">SDLLightStatus</a></li>
<li><a href="#section-SDLLockScreenStatus">SDLLockScreenStatus</a></li>
<li><a href="#section-SDLLogFilterBlock">SDLLogFilterBlock</a></li>
<li><a href="#section-SDLMaintenanceModeStatus">SDLMaintenanceModeStatus</a></li>
<li><a href="#section-SDLManagerReadyBlock">SDLManagerReadyBlock</a></li>
+ <li><a href="#section-SDLMassageCushion">SDLMassageCushion</a></li>
+ <li><a href="#section-SDLMassageMode">SDLMassageMode</a></li>
+ <li><a href="#section-SDLMassageZone">SDLMassageZone</a></li>
<li><a href="#section-SDLMediaClockFormat">SDLMediaClockFormat</a></li>
<li><a href="#section-SDLMenuCellSelectionHandler">SDLMenuCellSelectionHandler</a></li>
<li><a href="#section-SDLMetadataType">SDLMetadataType</a></li>
@@ -84,13 +96,21 @@
<li><a href="#section-SDLResult">SDLResult</a></li>
<li><a href="#section-SDLSamplingRate">SDLSamplingRate</a></li>
<li><a href="#section-SDLScreenManagerUpdateCompletionHandler">SDLScreenManagerUpdateCompletionHandler</a></li>
+ <li><a href="#section-SDLPreloadChoiceCompletionHandler">SDLPreloadChoiceCompletionHandler</a></li>
+ <li><a href="#section-SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></li>
<li><a href="#section-SDLSoftButtonType">SDLSoftButtonType</a></li>
<li><a href="#section-SDLSpeechCapabilities">SDLSpeechCapabilities</a></li>
+ <li><a href="#section-SDLStaticIconName">SDLStaticIconName</a></li>
+ <li><a href="#section-SDLVideoStreamManagerState">SDLVideoStreamManagerState</a></li>
+ <li><a href="#section-SDLAudioStreamManagerState">SDLAudioStreamManagerState</a></li>
+ <li><a href="#section-SDLAppState">SDLAppState</a></li>
+ <li><a href="#section-SDLSupportedSeat">SDLSupportedSeat</a></li>
<li><a href="#section-SDLSystemAction">SDLSystemAction</a></li>
<li><a href="#section-SDLUpdateCapabilityHandler">SDLUpdateCapabilityHandler</a></li>
<li><a href="#section-SDLSystemCapabilityType">SDLSystemCapabilityType</a></li>
<li><a href="#section-SDLSystemContext">SDLSystemContext</a></li>
<li><a href="#section-SDLTBTState">SDLTBTState</a></li>
+ <li><a href="#section-SDLTPMS">SDLTPMS</a></li>
<li><a href="#section-SDLTemperatureUnit">SDLTemperatureUnit</a></li>
<li><a href="#section-SDLTextAlignment">SDLTextAlignment</a></li>
<li><a href="#section-SDLTextFieldName">SDLTextFieldName</a></li>
@@ -99,6 +119,7 @@
<li><a href="#section-SDLTouchEventHandler">SDLTouchEventHandler</a></li>
<li><a href="#section-SDLTouchType">SDLTouchType</a></li>
<li><a href="#section-SDLTriggerSource">SDLTriggerSource</a></li>
+ <li><a href="#section-SDLTurnSignal">SDLTurnSignal</a></li>
<li><a href="#section-SDLUpdateMode">SDLUpdateMode</a></li>
<li><a href="#section-SDLVehicleDataActiveStatus">SDLVehicleDataActiveStatus</a></li>
<li><a href="#section-SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></li>
@@ -109,6 +130,7 @@
<li><a href="#section-SDLVentilationMode">SDLVentilationMode</a></li>
<li><a href="#section-SDLVideoStreamingCodec">SDLVideoStreamingCodec</a></li>
<li><a href="#section-SDLVideoStreamingProtocol">SDLVideoStreamingProtocol</a></li>
+ <li><a href="#section-SDLVideoStreamingState">SDLVideoStreamingState</a></li>
<li><a href="#section-SDLVoiceCommandSelectionHandler">SDLVoiceCommandSelectionHandler</a></li>
<li><a href="#section-SDLVRCapabilities">SDLVRCapabilities</a></li>
<li><a href="#section-SDLWarningLightStatus">SDLWarningLightStatus</a></li>
@@ -182,6 +204,26 @@
+ <h3 id="section-SDLAudioStreamingIndicator">
+ SDLAudioStreamingIndicator
+ </h3>
+
+ <p>Enumeration listing possible indicators of audio streaming changes</p>
+
+<p>@since SDL 4.6</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLAudioStreamingIndicator</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLAudioStreamingIndicator</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLAudioStreamingState">
SDLAudioStreamingState
</h3>
@@ -465,6 +507,26 @@
+ <h3 id="section-SDLDisplayMode">
+ SDLDisplayMode
+ </h3>
+
+ <p>Identifies the various display types used by SDL.</p>
+
+<p>@since SDL 1.0</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLDisplayMode</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLDisplayMode</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLDisplayType">
SDLDisplayType
</h3>
@@ -490,6 +552,24 @@
+ <h3 id="section-SDLDistanceUnit">
+ SDLDistanceUnit
+ </h3>
+
+ <p>Wiper Status</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLDistanceUnit</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLDistanceUnit</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLDriverDistractionState">
SDLDriverDistractionState
</h3>
@@ -530,6 +610,24 @@
+ <h3 id="section-SDLElectronicParkBrakeStatus">
+ SDLElectronicParkBrakeStatus
+ </h3>
+
+ <p>Reflects the status of the Electronic Parking Brake. A Vehicle Data Type.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLElectronicParkBrakeStatus</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLElectronicParkBrakeStatus</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLEmergencyEventType">
SDLEmergencyEventType
</h3>
@@ -568,8 +666,8 @@
- <h3 id="section-SDLFileName">
- SDLFileName
+ <h3 id="section-SDLFileManagerStartupCompletionHandler">
+ SDLFileManagerStartupCompletionHandler
</h3>
<p>Undocumented</p>
@@ -577,14 +675,17 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n">NSString</span> <span class="n">SDLFileName</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="n">SDLFileManagerStartupCompletionHandler</span><span class="p">)(</span><span class="n">BOOL</span> <span class="n">success</span><span class="p">,</span> <span class="n">NSError</span> <span class="o">*</span><span class="n">__nullable</span> <span class="n">error</span><span class="p">)</span></code></pre>
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">typealias</span> <span class="kt">SDLFileManagerStartupCompletionHandler</span> <span class="o">=</span> <span class="p">(</span><span class="kt">Bool</span><span class="p">,</span> <span class="kt">Error</span><span class="p">?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span></code></pre>
+
- <h3 id="section-SDLFileManagerStartupCompletionHandler">
- SDLFileManagerStartupCompletionHandler
+ <h3 id="section-SDLFileName">
+ SDLFileName
</h3>
<p>Undocumented</p>
@@ -592,12 +693,9 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="n">SDLFileManagerStartupCompletionHandler</span><span class="p">)(</span><span class="n">BOOL</span> <span class="n">success</span><span class="p">,</span> <span class="n">NSError</span> <span class="o">*</span><span class="n">__nullable</span> <span class="n">error</span><span class="p">)</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n">NSString</span> <span class="n">SDLFileName</span></code></pre>
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">typealias</span> <span class="kt">SDLFileManagerStartupCompletionHandler</span> <span class="o">=</span> <span class="p">(</span><span class="kt">Bool</span><span class="p">,</span> <span class="kt">Error</span><span class="p">?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span></code></pre>
-
@@ -896,6 +994,24 @@
+ <h3 id="section-SDLFuelType">
+ SDLFuelType
+ </h3>
+
+ <p>Enumeration listing possible fuel types.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLFuelType</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLFuelType</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLGlobalProperty">
SDLGlobalProperty
</h3>
@@ -1056,6 +1172,53 @@
+ <h3 id="section-SDLKeyboardAutocompleteCompletionHandler">
+ SDLKeyboardAutocompleteCompletionHandler
+ </h3>
+
+ <p>This handler is called when you wish to update your autocomplete text in response to the user&rsquo;s input</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="n">SDLKeyboardAutocompleteCompletionHandler</span><span class="p">)(</span><span class="n">NSString</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">)</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">typealias</span> <span class="kt">SDLKeyboardAutocompleteCompletionHandler</span> <span class="o">=</span> <span class="p">(</span><span class="kt">String</span><span class="p">?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>updatedAutocompleteText</dt>
+ <dd><p>The new autocomplete text to use</p></dd>
+ </dl>
+
+ <h3 id="section-SDLKeyboardCharacterSetCompletionHandler">
+ SDLKeyboardCharacterSetCompletionHandler
+ </h3>
+
+ <p>This handler is called when you wish to update your keyboard&rsquo;s limitedCharacterSet in response to the user&rsquo;s input</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="n">SDLKeyboardCharacterSetCompletionHandler</span><span class="p">)(</span>
+ <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">)</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">typealias</span> <span class="kt">SDLKeyboardCharacterSetCompletionHandler</span> <span class="o">=</span> <span class="p">([</span><span class="kt">String</span><span class="p">]?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>updatedCharacterSet</dt>
+ <dd><p>The new set of characters to use</p></dd>
+ </dl>
+
<h3 id="section-SDLKeyboardEvent">
SDLKeyboardEvent
</h3>
@@ -1160,6 +1323,42 @@
+ <h3 id="section-SDLLightName">
+ SDLLightName
+ </h3>
+
+ <p>The name that identifies the Light</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLLightName</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLLightName</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLLightStatus">
+ SDLLightStatus
+ </h3>
+
+ <p>Reflects the status of Light.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLLightStatus</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLLightStatus</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLLockScreenStatus">
SDLLockScreenStatus
</h3>
@@ -1243,6 +1442,60 @@
+ <h3 id="section-SDLMassageCushion">
+ SDLMassageCushion
+ </h3>
+
+ <p>The List possible cushions of a multi-contour massage seat.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLMassageCushion</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLMassageCushion</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageMode">
+ SDLMassageMode
+ </h3>
+
+ <p>The List possible modes of a massage zone.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLMassageMode</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLMassageMode</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLMassageZone">
+ SDLMassageZone
+ </h3>
+
+ <p>List possible zones of a multi-contour massage seat.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLMassageZone</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLMassageZone</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLMediaClockFormat">
SDLMediaClockFormat
</h3>
@@ -1877,6 +2130,49 @@ c = character <br></p>
<dd><p>An error if the update failed and an error occurred</p></dd>
</dl>
+ <h3 id="section-SDLPreloadChoiceCompletionHandler">
+ SDLPreloadChoiceCompletionHandler
+ </h3>
+
+ <p>Return an error with userinfo [key: SDLChoiceCell, value: NSError] if choices failed to upload</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="n">SDLPreloadChoiceCompletionHandler</span><span class="p">)(</span><span class="n">NSError</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">)</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">typealias</span> <span class="kt">SDLPreloadChoiceCompletionHandler</span> <span class="o">=</span> <span class="p">(</span><span class="kt">Error</span><span class="p">?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>error</dt>
+ <dd><p>The error if one occurred</p></dd>
+ </dl>
+
+ <h3 id="section-SDLSeatMemoryActionType">
+ SDLSeatMemoryActionType
+ </h3>
+
+ <p>List of possible actions on Seat Meomry</p>
+
+<p>@since SDL 2.0</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLSeatMemoryActionType</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLSeatMemoryActionType</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLSoftButtonType">
SDLSoftButtonType
</h3>
@@ -1913,6 +2209,87 @@ c = character <br></p>
+ <h3 id="section-SDLStaticIconName">
+ SDLStaticIconName
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLStaticIconName</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLStaticIconName</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLVideoStreamManagerState">
+ SDLVideoStreamManagerState
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n">NSString</span> <span class="n">SDLVideoStreamManagerState</span></code></pre>
+
+
+
+
+
+ <h3 id="section-SDLAudioStreamManagerState">
+ SDLAudioStreamManagerState
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n">NSString</span> <span class="n">SDLAudioStreamManagerState</span></code></pre>
+
+
+
+
+
+ <h3 id="section-SDLAppState">
+ SDLAppState
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n">NSString</span> <span class="n">SDLAppState</span></code></pre>
+
+
+
+
+
+ <h3 id="section-SDLSupportedSeat">
+ SDLSupportedSeat
+ </h3>
+
+ <p>List possible seats that is a remote controllable seat.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLSupportedSeat</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLSupportedSeat</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLSystemAction">
SDLSystemAction
</h3>
@@ -2013,6 +2390,24 @@ c = character <br></p>
+ <h3 id="section-SDLTPMS">
+ SDLTPMS
+ </h3>
+
+ <p>An enum representing values of the tire pressure monitoring system</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLTPMS</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLTPMS</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLTemperatureUnit">
SDLTemperatureUnit
</h3>
@@ -2164,6 +2559,24 @@ c = character <br></p>
+ <h3 id="section-SDLTurnSignal">
+ SDLTurnSignal
+ </h3>
+
+ <p>Undocumented</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLTurnSignal</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLTurnSignal</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLUpdateMode">
SDLUpdateMode
</h3>
@@ -2352,6 +2765,24 @@ c = character <br></p>
+ <h3 id="section-SDLVideoStreamingState">
+ SDLVideoStreamingState
+ </h3>
+
+ <p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLVideoStreamingState</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLVideoStreamingState</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLVoiceCommandSelectionHandler">
SDLVoiceCommandSelectionHandler
</h3>
diff --git a/docs/badge.svg b/docs/badge.svg
index 09c230060..b5adf50d6 100644
--- a/docs/badge.svg
+++ b/docs/badge.svg
@@ -8,7 +8,7 @@
</clipPath>
<g clip-path="url(#a)">
<path fill="#555" d="M0 0h93v20H0z"/>
- <path fill="#97CA00" d="M93 0h35v20H93z"/>
+ <path fill="#a4a61d" d="M93 0h35v20H93z"/>
<path fill="url(#b)" d="M0 0h128v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110">
@@ -19,10 +19,10 @@
documentation
</text>
<text x="1095" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="250">
- 85%
+ 81%
</text>
<text x="1095" y="140" transform="scale(.1)" textLength="250">
- 85%
+ 81%
</text>
</g>
</svg>
diff --git a/docs/index.html b/docs/index.html
index 37fd9efbd..7f4fa6a19 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -26,6 +26,10 @@
url: Classes/SDLAppInfo.html
- name: SDLArtwork
url: Classes/SDLArtwork.html
+ - name: SDLAudioControlCapabilities
+ url: Classes/SDLAudioControlCapabilities.html
+ - name: SDLAudioControlData
+ url: Classes/SDLAudioControlData.html
- name: SDLAudioPassThruCapabilities
url: Classes/SDLAudioPassThruCapabilities.html
- name: SDLAudioStreamManager
@@ -48,6 +52,10 @@
url: Classes.html#/c:objc(cs)SDLChangeRegistrationResponse
- name: SDLChoice
url: Classes/SDLChoice.html
+ - name: SDLChoiceCell
+ url: Classes/SDLChoiceCell.html
+ - name: SDLChoiceSet
+ url: Classes/SDLChoiceSet.html
- name: SDLClimateControlCapabilities
url: Classes/SDLClimateControlCapabilities.html
- name: SDLClimateControlData
@@ -106,10 +114,16 @@
url: Classes.html#/c:objc(cs)SDLEndAudioPassThru
- name: SDLEndAudioPassThruResponse
url: Classes.html#/c:objc(cs)SDLEndAudioPassThruResponse
+ - name: SDLEqualizerSettings
+ url: Classes/SDLEqualizerSettings.html
- name: SDLFile
url: Classes/SDLFile.html
- name: SDLFileManager
url: Classes/SDLFileManager.html
+ - name: SDLFileManagerConfiguration
+ url: Classes/SDLFileManagerConfiguration.html
+ - name: SDLFuelRange
+ url: Classes/SDLFuelRange.html
- name: SDLGPSData
url: Classes/SDLGPSData.html
- name: SDLGenericResponse
@@ -138,6 +152,10 @@
url: Classes/SDLHMICapabilities.html
- name: SDLHMIPermissions
url: Classes/SDLHMIPermissions.html
+ - name: SDLHMISettingsControlCapabilities
+ url: Classes/SDLHMISettingsControlCapabilities.html
+ - name: SDLHMISettingsControlData
+ url: Classes/SDLHMISettingsControlData.html
- name: SDLHapticRect
url: Classes/SDLHapticRect.html
- name: SDLHeadLampStatus
@@ -154,6 +172,14 @@
url: Classes/SDLLifecycleConfiguration.html
- name: SDLLifecycleConfigurationUpdate
url: Classes/SDLLifecycleConfigurationUpdate.html
+ - name: SDLLightCapabilities
+ url: Classes/SDLLightCapabilities.html
+ - name: SDLLightControlCapabilities
+ url: Classes/SDLLightControlCapabilities.html
+ - name: SDLLightControlData
+ url: Classes/SDLLightControlData.html
+ - name: SDLLightState
+ url: Classes/SDLLightState.html
- name: SDLListFiles
url: Classes.html#/c:objc(cs)SDLListFiles
- name: SDLListFilesResponse
@@ -182,6 +208,10 @@
url: Classes.html#/c:objc(cs)SDLLogTargetOSLog
- name: SDLManager
url: Classes/SDLManager.html
+ - name: SDLMassageCushionFirmness
+ url: Classes/SDLMassageCushionFirmness.html
+ - name: SDLMassageModeData
+ url: Classes/SDLMassageModeData.html
- name: SDLMenuCell
url: Classes/SDLMenuCell.html
- name: SDLMenuParams
@@ -226,6 +256,8 @@
url: Classes/SDLOnLockScreenStatus.html
- name: SDLOnPermissionsChange
url: Classes/SDLOnPermissionsChange.html
+ - name: SDLOnRCStatus
+ url: Classes/SDLOnRCStatus.html
- name: SDLOnSyncPData
url: Classes/SDLOnSyncPData.html
- name: SDLOnSystemRequest
@@ -264,6 +296,8 @@
url: Classes/SDLPutFileResponse.html
- name: SDLRDSData
url: Classes/SDLRDSData.html
+ - name: SDLRGBColor
+ url: Classes/SDLRGBColor.html
- name: SDLRPCMessage
url: Classes/SDLRPCMessage.html
- name: SDLRPCNotification
@@ -298,6 +332,8 @@
url: Classes/SDLResetGlobalProperties.html
- name: SDLResetGlobalPropertiesResponse
url: Classes.html#/c:objc(cs)SDLResetGlobalPropertiesResponse
+ - name: SDLSISData
+ url: Classes/SDLSISData.html
- name: SDLScreenManager
url: Classes/SDLScreenManager.html
- name: SDLScreenParams
@@ -306,6 +342,12 @@
url: Classes/SDLScrollableMessage.html
- name: SDLScrollableMessageResponse
url: Classes.html#/c:objc(cs)SDLScrollableMessageResponse
+ - name: SDLSeatControlCapabilities
+ url: Classes/SDLSeatControlCapabilities.html
+ - name: SDLSeatControlData
+ url: Classes/SDLSeatControlData.html
+ - name: SDLSeatMemoryAction
+ url: Classes/SDLSeatMemoryAction.html
- name: SDLSendHapticData
url: Classes/SDLSendHapticData.html
- name: SDLSendHapticDataResponse
@@ -362,6 +404,8 @@
url: Classes.html#/c:objc(cs)SDLSpeakResponse
- name: SDLStartTime
url: Classes/SDLStartTime.html
+ - name: SDLStationIDNumber
+ url: Classes/SDLStationIDNumber.html
- name: SDLStreamingMediaConfiguration
url: Classes/SDLStreamingMediaConfiguration.html
- name: SDLStreamingMediaManager
@@ -392,6 +436,8 @@
url: Classes/SDLTTSChunk.html
- name: SDLTemperature
url: Classes/SDLTemperature.html
+ - name: SDLTemplateColorScheme
+ url: Classes/SDLTemplateColorScheme.html
- name: SDLTextField
url: Classes/SDLTextField.html
- name: SDLTireStatus
@@ -502,10 +548,30 @@
url: Constants.html#/c:@SDLAppInterfaceUnregisteredReasonTooManyRequests
- name: SDLAppInterfaceUnregisteredReasonUSBDisconnected
url: Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUSBDisconnected
+ - name: SDLAppStateActive
+ url: Constants.html#/c:@SDLAppStateActive
+ - name: SDLAppStateInactive
+ url: Constants.html#/c:@SDLAppStateInactive
- name: SDLAudioStreamDidStartNotification
url: Constants.html#/c:@SDLAudioStreamDidStartNotification
- name: SDLAudioStreamDidStopNotification
url: Constants.html#/c:@SDLAudioStreamDidStopNotification
+ - name: SDLAudioStreamManagerStateReady
+ url: Constants.html#/c:@SDLAudioStreamManagerStateReady
+ - name: SDLAudioStreamManagerStateShuttingDown
+ url: Constants.html#/c:@SDLAudioStreamManagerStateShuttingDown
+ - name: SDLAudioStreamManagerStateStarting
+ url: Constants.html#/c:@SDLAudioStreamManagerStateStarting
+ - name: SDLAudioStreamManagerStateStopped
+ url: Constants.html#/c:@SDLAudioStreamManagerStateStopped
+ - name: SDLAudioStreamingIndicatorPause
+ url: Constants.html#/c:@SDLAudioStreamingIndicatorPause
+ - name: SDLAudioStreamingIndicatorPlay
+ url: Constants.html#/c:@SDLAudioStreamingIndicatorPlay
+ - name: SDLAudioStreamingIndicatorPlayPause
+ url: Constants.html#/c:@SDLAudioStreamingIndicatorPlayPause
+ - name: SDLAudioStreamingIndicatorStop
+ url: Constants.html#/c:@SDLAudioStreamingIndicatorStop
- name: SDLAudioStreamingStateAttenuated
url: Constants.html#/c:@SDLAudioStreamingStateAttenuated
- name: SDLAudioStreamingStateAudible
@@ -544,6 +610,8 @@
url: Constants.html#/c:@SDLButtonNameLowerVent
- name: SDLButtonNameOk
url: Constants.html#/c:@SDLButtonNameOk
+ - name: SDLButtonNamePlayPause
+ url: Constants.html#/c:@SDLButtonNamePlayPause
- name: SDLButtonNamePreset0
url: Constants.html#/c:@SDLButtonNamePreset0
- name: SDLButtonNamePreset1
@@ -758,6 +826,8 @@
url: Constants.html#/c:@SDLDidReceiveReadDIDResponse
- name: SDLDidReceiveRegisterAppInterfaceResponse
url: Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceResponse
+ - name: SDLDidReceiveRemoteControlStatusNotification
+ url: Constants.html#/c:@SDLDidReceiveRemoteControlStatusNotification
- name: SDLDidReceiveResetGlobalPropertiesResponse
url: Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesResponse
- name: SDLDidReceiveScrollableMessageResponse
@@ -820,6 +890,12 @@
url: Constants.html#/c:@SDLDimension3D
- name: SDLDimensionNoFix
url: Constants.html#/c:@SDLDimensionNoFix
+ - name: SDLDisplayModeAuto
+ url: Constants.html#/c:@SDLDisplayModeAuto
+ - name: SDLDisplayModeDay
+ url: Constants.html#/c:@SDLDisplayModeDay
+ - name: SDLDisplayModeNight
+ url: Constants.html#/c:@SDLDisplayModeNight
- name: SDLDisplayTypeCID
url: Constants.html#/c:@SDLDisplayTypeCID
- name: SDLDisplayTypeGen26DMA
@@ -842,6 +918,10 @@
url: Constants.html#/c:@SDLDisplayTypeType2
- name: SDLDisplayTypeType5
url: Constants.html#/c:@SDLDisplayTypeType5
+ - name: SDLDistanceUnitKilometers
+ url: Constants.html#/c:@SDLDistanceUnitKilometers
+ - name: SDLDistanceUnitMiles
+ url: Constants.html#/c:@SDLDistanceUnitMiles
- name: SDLDriverDistractionStateOff
url: Constants.html#/c:@SDLDriverDistractionStateOff
- name: SDLDriverDistractionStateOn
@@ -860,6 +940,16 @@
url: Constants.html#/c:@SDLECallConfirmationStatusNormal
- name: SDLECallConfirmationStatusUnsuccessful
url: Constants.html#/c:@SDLECallConfirmationStatusUnsuccessful
+ - name: SDLElectronicParkBrakeStatusClosed
+ url: Constants.html#/c:@SDLElectronicParkBrakeStatusClosed
+ - name: SDLElectronicParkBrakeStatusDriveActive
+ url: Constants.html#/c:@SDLElectronicParkBrakeStatusDriveActive
+ - name: SDLElectronicParkBrakeStatusFault
+ url: Constants.html#/c:@SDLElectronicParkBrakeStatusFault
+ - name: SDLElectronicParkBrakeStatusOpen
+ url: Constants.html#/c:@SDLElectronicParkBrakeStatusOpen
+ - name: SDLElectronicParkBrakeStatusTransition
+ url: Constants.html#/c:@SDLElectronicParkBrakeStatusTransition
- name: SDLEmergencyEventTypeFault
url: Constants.html#/c:@SDLEmergencyEventTypeFault
- name: SDLEmergencyEventTypeFrontal
@@ -898,6 +988,18 @@
url: Constants.html#/c:@SDLFuelCutoffStatusNormalOperation
- name: SDLFuelCutoffStatusTerminateFuel
url: Constants.html#/c:@SDLFuelCutoffStatusTerminateFuel
+ - name: SDLFuelTypeBattery
+ url: Constants.html#/c:@SDLFuelTypeBattery
+ - name: SDLFuelTypeCNG
+ url: Constants.html#/c:@SDLFuelTypeCNG
+ - name: SDLFuelTypeDiesel
+ url: Constants.html#/c:@SDLFuelTypeDiesel
+ - name: SDLFuelTypeGasoline
+ url: Constants.html#/c:@SDLFuelTypeGasoline
+ - name: SDLFuelTypeHydrogen
+ url: Constants.html#/c:@SDLFuelTypeHydrogen
+ - name: SDLFuelTypeLPG
+ url: Constants.html#/c:@SDLFuelTypeLPG
- name: SDLGlobalPropertyHelpPrompt
url: Constants.html#/c:@SDLGlobalPropertyHelpPrompt
- name: SDLGlobalPropertyKeyboard
@@ -956,6 +1058,8 @@
url: Constants.html#/c:@SDLImageFieldNameLocationImage
- name: SDLImageFieldNameMenuIcon
url: Constants.html#/c:@SDLImageFieldNameMenuIcon
+ - name: SDLImageFieldNameSecondaryGraphic
+ url: Constants.html#/c:@SDLImageFieldNameSecondaryGraphic
- name: SDLImageFieldNameShowConstantTBTIcon
url: Constants.html#/c:@SDLImageFieldNameShowConstantTBTIcon
- name: SDLImageFieldNameShowConstantTBTNextTurnIcon
@@ -1086,6 +1190,114 @@
url: Constants.html#/c:@SDLLayoutModeListOnly
- name: SDLLayoutModeListWithSearch
url: Constants.html#/c:@SDLLayoutModeListWithSearch
+ - name: SDLLightNameAmbientLights
+ url: Constants.html#/c:@SDLLightNameAmbientLights
+ - name: SDLLightNameBrakeLights
+ url: Constants.html#/c:@SDLLightNameBrakeLights
+ - name: SDLLightNameExteriorAllLights
+ url: Constants.html#/c:@SDLLightNameExteriorAllLights
+ - name: SDLLightNameExteriorFrontLights
+ url: Constants.html#/c:@SDLLightNameExteriorFrontLights
+ - name: SDLLightNameExteriorLeftLights
+ url: Constants.html#/c:@SDLLightNameExteriorLeftLights
+ - name: SDLLightNameExteriorLeftPuddleLights
+ url: Constants.html#/c:@SDLLightNameExteriorLeftPuddleLights
+ - name: SDLLightNameExteriorLeftSpotLights
+ url: Constants.html#/c:@SDLLightNameExteriorLeftSpotLights
+ - name: SDLLightNameExteriorRearCargoLights
+ url: Constants.html#/c:@SDLLightNameExteriorRearCargoLights
+ - name: SDLLightNameExteriorRearLights
+ url: Constants.html#/c:@SDLLightNameExteriorRearLights
+ - name: SDLLightNameExteriorRearTrailerLights
+ url: Constants.html#/c:@SDLLightNameExteriorRearTrailerLights
+ - name: SDLLightNameExteriorRearTruckBedLights
+ url: Constants.html#/c:@SDLLightNameExteriorRearTruckBedLights
+ - name: SDLLightNameExteriorRightLights
+ url: Constants.html#/c:@SDLLightNameExteriorRightLights
+ - name: SDLLightNameExteriorRightPuddleLights
+ url: Constants.html#/c:@SDLLightNameExteriorRightPuddleLights
+ - name: SDLLightNameExteriorRightSpotLights
+ url: Constants.html#/c:@SDLLightNameExteriorRightSpotLights
+ - name: SDLLightNameFogLights
+ url: Constants.html#/c:@SDLLightNameFogLights
+ - name: SDLLightNameFrontLeftDaytimeRunningLight
+ url: Constants.html#/c:@SDLLightNameFrontLeftDaytimeRunningLight
+ - name: SDLLightNameFrontLeftFogLight
+ url: Constants.html#/c:@SDLLightNameFrontLeftFogLight
+ - name: SDLLightNameFrontLeftHighBeam
+ url: Constants.html#/c:@SDLLightNameFrontLeftHighBeam
+ - name: SDLLightNameFrontLeftLowBeam
+ url: Constants.html#/c:@SDLLightNameFrontLeftLowBeam
+ - name: SDLLightNameFrontLeftParkingLight
+ url: Constants.html#/c:@SDLLightNameFrontLeftParkingLight
+ - name: SDLLightNameFrontLeftTurnLight
+ url: Constants.html#/c:@SDLLightNameFrontLeftTurnLight
+ - name: SDLLightNameFrontRightDaytimeRunningLight
+ url: Constants.html#/c:@SDLLightNameFrontRightDaytimeRunningLight
+ - name: SDLLightNameFrontRightFogLight
+ url: Constants.html#/c:@SDLLightNameFrontRightFogLight
+ - name: SDLLightNameFrontRightHighBeam
+ url: Constants.html#/c:@SDLLightNameFrontRightHighBeam
+ - name: SDLLightNameFrontRightLowBeam
+ url: Constants.html#/c:@SDLLightNameFrontRightLowBeam
+ - name: SDLLightNameFrontRightParkingLight
+ url: Constants.html#/c:@SDLLightNameFrontRightParkingLight
+ - name: SDLLightNameFrontRightTurnLight
+ url: Constants.html#/c:@SDLLightNameFrontRightTurnLight
+ - name: SDLLightNameHazardLights
+ url: Constants.html#/c:@SDLLightNameHazardLights
+ - name: SDLLightNameHighBeams
+ url: Constants.html#/c:@SDLLightNameHighBeams
+ - name: SDLLightNameLeftTurnLights
+ url: Constants.html#/c:@SDLLightNameLeftTurnLights
+ - name: SDLLightNameLowBeams
+ url: Constants.html#/c:@SDLLightNameLowBeams
+ - name: SDLLightNameOverHeadLights
+ url: Constants.html#/c:@SDLLightNameOverHeadLights
+ - name: SDLLightNameParkingLights
+ url: Constants.html#/c:@SDLLightNameParkingLights
+ - name: SDLLightNameReadingLights
+ url: Constants.html#/c:@SDLLightNameReadingLights
+ - name: SDLLightNameRearLeftBrakeLight
+ url: Constants.html#/c:@SDLLightNameRearLeftBrakeLight
+ - name: SDLLightNameRearLeftFogLight
+ url: Constants.html#/c:@SDLLightNameRearLeftFogLight
+ - name: SDLLightNameRearLeftTailLight
+ url: Constants.html#/c:@SDLLightNameRearLeftTailLight
+ - name: SDLLightNameRearLeftTurnLight
+ url: Constants.html#/c:@SDLLightNameRearLeftTurnLight
+ - name: SDLLightNameRearRegistrationPlateLight
+ url: Constants.html#/c:@SDLLightNameRearRegistrationPlateLight
+ - name: SDLLightNameRearReversingLights
+ url: Constants.html#/c:@SDLLightNameRearReversingLights
+ - name: SDLLightNameRearRightBrakeLight
+ url: Constants.html#/c:@SDLLightNameRearRightBrakeLight
+ - name: SDLLightNameRearRightFogLight
+ url: Constants.html#/c:@SDLLightNameRearRightFogLight
+ - name: SDLLightNameRearRightTailLight
+ url: Constants.html#/c:@SDLLightNameRearRightTailLight
+ - name: SDLLightNameRearRightTurnLight
+ url: Constants.html#/c:@SDLLightNameRearRightTurnLight
+ - name: SDLLightNameRightTurnLights
+ url: Constants.html#/c:@SDLLightNameRightTurnLights
+ - name: SDLLightNameRunningLights
+ url: Constants.html#/c:@SDLLightNameRunningLights
+ - name: SDLLightNameSideMarkerLights
+ url: Constants.html#/c:@SDLLightNameSideMarkerLights
+ - name: SDLLightNameTrunkLights
+ url: Constants.html#/c:@SDLLightNameTrunkLights
+ - name: SDLLightStatusInvalid
+ url: Constants.html#/c:@SDLLightStatusInvalid
+ - name: SDLLightStatusOFF
+ url: Constants.html#/c:@SDLLightStatusOFF
+ - name: SDLLightStatusOn
+ url: Constants.html#/c:@SDLLightStatusOn
+ - name: SDLLightStatusRampDown
+ url: Constants.html#/c:@SDLLightStatusRampDown
+ - name: SDLLightStatusRampUp
+ url: Constants.html#/c:@SDLLightStatusRampUp
+ - name: SDLLightStatusUnknown
+ url: Constants.html#/c:@SDLLightStatusUnknown
- name: SDLLockScreenManagerDidDismissLockScreenViewController
url: Constants.html#/c:@SDLLockScreenManagerDidDismissLockScreenViewController
- name: SDLLockScreenManagerDidPresentLockScreenViewController
@@ -1108,6 +1320,26 @@
url: Constants.html#/c:@SDLMaintenanceModeStatusNear
- name: SDLMaintenanceModeStatusNormal
url: Constants.html#/c:@SDLMaintenanceModeStatusNormal
+ - name: SDLMassageCushionBackBolsters
+ url: Constants.html#/c:@SDLMassageCushionBackBolsters
+ - name: SDLMassageCushionBottomLumbar
+ url: Constants.html#/c:@SDLMassageCushionBottomLumbar
+ - name: SDLMassageCushionMiddleLumbar
+ url: Constants.html#/c:@SDLMassageCushionMiddleLumbar
+ - name: SDLMassageCushionSeatBolsters
+ url: Constants.html#/c:@SDLMassageCushionSeatBolsters
+ - name: SDLMassageCushionTopLumbar
+ url: Constants.html#/c:@SDLMassageCushionTopLumbar
+ - name: SDLMassageModeHigh
+ url: Constants.html#/c:@SDLMassageModeHigh
+ - name: SDLMassageModeLow
+ url: Constants.html#/c:@SDLMassageModeLow
+ - name: SDLMassageModeOff
+ url: Constants.html#/c:@SDLMassageModeOff
+ - name: SDLMassageZoneLumbar
+ url: Constants.html#/c:@SDLMassageZoneLumbar
+ - name: SDLMassageZoneSeatCushion
+ url: Constants.html#/c:@SDLMassageZoneSeatCushion
- name: SDLMediaClockFormatClock1
url: Constants.html#/c:@SDLMediaClockFormatClock1
- name: SDLMediaClockFormatClock2
@@ -1146,10 +1378,18 @@
url: Constants.html#/c:@SDLMetadataTypeRating
- name: SDLMetadataTypeWeatherTerm
url: Constants.html#/c:@SDLMetadataTypeWeatherTerm
+ - name: SDLModuleTypeAudio
+ url: Constants.html#/c:@SDLModuleTypeAudio
- name: SDLModuleTypeClimate
url: Constants.html#/c:@SDLModuleTypeClimate
+ - name: SDLModuleTypeHMISettings
+ url: Constants.html#/c:@SDLModuleTypeHMISettings
+ - name: SDLModuleTypeLight
+ url: Constants.html#/c:@SDLModuleTypeLight
- name: SDLModuleTypeRadio
url: Constants.html#/c:@SDLModuleTypeRadio
+ - name: SDLModuleTypeSeat
+ url: Constants.html#/c:@SDLModuleTypeSeat
- name: SDLNotificationUserInfoObject
url: Constants.html#/c:@SDLNotificationUserInfoObject
- name: SDLPRNDLDrive
@@ -1268,8 +1508,16 @@
url: Constants.html#/c:@SDLPrerecordedSpeechNegative
- name: SDLPrerecordedSpeechPositive
url: Constants.html#/c:@SDLPrerecordedSpeechPositive
+ - name: SDLPrimaryAudioSourceAM
+ url: Constants.html#/c:@SDLPrimaryAudioSourceAM
- name: SDLPrimaryAudioSourceBluetoothStereo
url: Constants.html#/c:@SDLPrimaryAudioSourceBluetoothStereo
+ - name: SDLPrimaryAudioSourceCD
+ url: Constants.html#/c:@SDLPrimaryAudioSourceCD
+ - name: SDLPrimaryAudioSourceDAB
+ url: Constants.html#/c:@SDLPrimaryAudioSourceDAB
+ - name: SDLPrimaryAudioSourceFM
+ url: Constants.html#/c:@SDLPrimaryAudioSourceFM
- name: SDLPrimaryAudioSourceIpod
url: Constants.html#/c:@SDLPrimaryAudioSourceIpod
- name: SDLPrimaryAudioSourceLineIn
@@ -1282,6 +1530,8 @@
url: Constants.html#/c:@SDLPrimaryAudioSourceUSB
- name: SDLPrimaryAudioSourceUSB2
url: Constants.html#/c:@SDLPrimaryAudioSourceUSB2
+ - name: SDLPrimaryAudioSourceXM
+ url: Constants.html#/c:@SDLPrimaryAudioSourceXM
- name: SDLRadioBandAM
url: Constants.html#/c:@SDLRadioBandAM
- name: SDLRadioBandFM
@@ -1322,6 +1572,8 @@
url: Constants.html#/c:@SDLRequestTypeMedia
- name: SDLRequestTypeNavigation
url: Constants.html#/c:@SDLRequestTypeNavigation
+ - name: SDLRequestTypeOEMSpecific
+ url: Constants.html#/c:@SDLRequestTypeOEMSpecific
- name: SDLRequestTypePhone
url: Constants.html#/c:@SDLRequestTypePhone
- name: SDLRequestTypeProprietary
@@ -1346,6 +1598,8 @@
url: Constants.html#/c:@SDLResultCancelRoute
- name: SDLResultCharacterLimitExceeded
url: Constants.html#/c:@SDLResultCharacterLimitExceeded
+ - name: SDLResultCorruptedData
+ url: Constants.html#/c:@SDLResultCorruptedData
- name: SDLResultDataNotAvailable
url: Constants.html#/c:@SDLResultDataNotAvailable
- name: SDLResultDisallowed
@@ -1414,12 +1668,20 @@
url: Constants.html#/c:@SDLSamplingRate44KHZ
- name: SDLSamplingRate8KHZ
url: Constants.html#/c:@SDLSamplingRate8KHZ
+ - name: SDLSeatMemoryActionTypeNone
+ url: Constants.html#/c:@SDLSeatMemoryActionTypeNone
+ - name: SDLSeatMemoryActionTypeRestore
+ url: Constants.html#/c:@SDLSeatMemoryActionTypeRestore
+ - name: SDLSeatMemoryActionTypeSave
+ url: Constants.html#/c:@SDLSeatMemoryActionTypeSave
- name: SDLSoftButtonTypeBoth
url: Constants.html#/c:@SDLSoftButtonTypeBoth
- name: SDLSoftButtonTypeImage
url: Constants.html#/c:@SDLSoftButtonTypeImage
- name: SDLSoftButtonTypeText
url: Constants.html#/c:@SDLSoftButtonTypeText
+ - name: SDLSpeechCapabilitiesFile
+ url: Constants.html#/c:@SDLSpeechCapabilitiesFile
- name: SDLSpeechCapabilitiesLHPlusPhonemes
url: Constants.html#/c:@SDLSpeechCapabilitiesLHPlusPhonemes
- name: SDLSpeechCapabilitiesPrerecorded
@@ -1430,6 +1692,364 @@
url: Constants.html#/c:@SDLSpeechCapabilitiesSilence
- name: SDLSpeechCapabilitiesText
url: Constants.html#/c:@SDLSpeechCapabilitiesText
+ - name: SDLStaticIconNameAcceptCall
+ url: Constants.html#/c:@SDLStaticIconNameAcceptCall
+ - name: SDLStaticIconNameAddWaypoint
+ url: Constants.html#/c:@SDLStaticIconNameAddWaypoint
+ - name: SDLStaticIconNameAlbum
+ url: Constants.html#/c:@SDLStaticIconNameAlbum
+ - name: SDLStaticIconNameAmbientLighting
+ url: Constants.html#/c:@SDLStaticIconNameAmbientLighting
+ - name: SDLStaticIconNameArrowNorth
+ url: Constants.html#/c:@SDLStaticIconNameArrowNorth
+ - name: SDLStaticIconNameAudioMute
+ url: Constants.html#/c:@SDLStaticIconNameAudioMute
+ - name: SDLStaticIconNameAudiobookEpisode
+ url: Constants.html#/c:@SDLStaticIconNameAudiobookEpisode
+ - name: SDLStaticIconNameAudiobookNarrator
+ url: Constants.html#/c:@SDLStaticIconNameAudiobookNarrator
+ - name: SDLStaticIconNameAuxillaryAudio
+ url: Constants.html#/c:@SDLStaticIconNameAuxillaryAudio
+ - name: SDLStaticIconNameBack
+ url: Constants.html#/c:@SDLStaticIconNameBack
+ - name: SDLStaticIconNameBatteryCapacity0Of5
+ url: Constants.html#/c:@SDLStaticIconNameBatteryCapacity0Of5
+ - name: SDLStaticIconNameBatteryCapacity1Of5
+ url: Constants.html#/c:@SDLStaticIconNameBatteryCapacity1Of5
+ - name: SDLStaticIconNameBatteryCapacity2Of5
+ url: Constants.html#/c:@SDLStaticIconNameBatteryCapacity2Of5
+ - name: SDLStaticIconNameBatteryCapacity3Of5
+ url: Constants.html#/c:@SDLStaticIconNameBatteryCapacity3Of5
+ - name: SDLStaticIconNameBatteryCapacity4Of5
+ url: Constants.html#/c:@SDLStaticIconNameBatteryCapacity4Of5
+ - name: SDLStaticIconNameBatteryCapacity5Of5
+ url: Constants.html#/c:@SDLStaticIconNameBatteryCapacity5Of5
+ - name: SDLStaticIconNameBluetooth1
+ url: Constants.html#/c:@SDLStaticIconNameBluetooth1
+ - name: SDLStaticIconNameBluetooth2
+ url: Constants.html#/c:@SDLStaticIconNameBluetooth2
+ - name: SDLStaticIconNameBluetoothAudioSource
+ url: Constants.html#/c:@SDLStaticIconNameBluetoothAudioSource
+ - name: SDLStaticIconNameBrowse
+ url: Constants.html#/c:@SDLStaticIconNameBrowse
+ - name: SDLStaticIconNameCellPhoneInRoamingMode
+ url: Constants.html#/c:@SDLStaticIconNameCellPhoneInRoamingMode
+ - name: SDLStaticIconNameCellServiceSignalStrength0Of5Bars
+ url: Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength0Of5Bars
+ - name: SDLStaticIconNameCellServiceSignalStrength1Of5Bars
+ url: Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength1Of5Bars
+ - name: SDLStaticIconNameCellServiceSignalStrength2Of5Bars
+ url: Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength2Of5Bars
+ - name: SDLStaticIconNameCellServiceSignalStrength3Of5Bars
+ url: Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength3Of5Bars
+ - name: SDLStaticIconNameCellServiceSignalStrength4Of5Bars
+ url: Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength4Of5Bars
+ - name: SDLStaticIconNameCellServiceSignalStrength5Of5Bars
+ url: Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength5Of5Bars
+ - name: SDLStaticIconNameChangeLaneLeft
+ url: Constants.html#/c:@SDLStaticIconNameChangeLaneLeft
+ - name: SDLStaticIconNameChangeLaneRight
+ url: Constants.html#/c:@SDLStaticIconNameChangeLaneRight
+ - name: SDLStaticIconNameCheckBoxChecked
+ url: Constants.html#/c:@SDLStaticIconNameCheckBoxChecked
+ - name: SDLStaticIconNameCheckBoxUnchecked
+ url: Constants.html#/c:@SDLStaticIconNameCheckBoxUnchecked
+ - name: SDLStaticIconNameClimate
+ url: Constants.html#/c:@SDLStaticIconNameClimate
+ - name: SDLStaticIconNameClock
+ url: Constants.html#/c:@SDLStaticIconNameClock
+ - name: SDLStaticIconNameCompose
+ url: Constants.html#/c:@SDLStaticIconNameCompose
+ - name: SDLStaticIconNameContact
+ url: Constants.html#/c:@SDLStaticIconNameContact
+ - name: SDLStaticIconNameContinue
+ url: Constants.html#/c:@SDLStaticIconNameContinue
+ - name: SDLStaticIconNameDash
+ url: Constants.html#/c:@SDLStaticIconNameDash
+ - name: SDLStaticIconNameDate
+ url: Constants.html#/c:@SDLStaticIconNameDate
+ - name: SDLStaticIconNameDelete
+ url: Constants.html#/c:@SDLStaticIconNameDelete
+ - name: SDLStaticIconNameDestination
+ url: Constants.html#/c:@SDLStaticIconNameDestination
+ - name: SDLStaticIconNameDestinationFerryAhead
+ url: Constants.html#/c:@SDLStaticIconNameDestinationFerryAhead
+ - name: SDLStaticIconNameEbookmark
+ url: Constants.html#/c:@SDLStaticIconNameEbookmark
+ - name: SDLStaticIconNameEmpty
+ url: Constants.html#/c:@SDLStaticIconNameEmpty
+ - name: SDLStaticIconNameEndCall
+ url: Constants.html#/c:@SDLStaticIconNameEndCall
+ - name: SDLStaticIconNameFail
+ url: Constants.html#/c:@SDLStaticIconNameFail
+ - name: SDLStaticIconNameFastForward30Secs
+ url: Constants.html#/c:@SDLStaticIconNameFastForward30Secs
+ - name: SDLStaticIconNameFavoriteHeart
+ url: Constants.html#/c:@SDLStaticIconNameFavoriteHeart
+ - name: SDLStaticIconNameFavoriteStar
+ url: Constants.html#/c:@SDLStaticIconNameFavoriteStar
+ - name: SDLStaticIconNameFaxNumber
+ url: Constants.html#/c:@SDLStaticIconNameFaxNumber
+ - name: SDLStaticIconNameFilename
+ url: Constants.html#/c:@SDLStaticIconNameFilename
+ - name: SDLStaticIconNameFilter
+ url: Constants.html#/c:@SDLStaticIconNameFilter
+ - name: SDLStaticIconNameFolder
+ url: Constants.html#/c:@SDLStaticIconNameFolder
+ - name: SDLStaticIconNameFuelPrices
+ url: Constants.html#/c:@SDLStaticIconNameFuelPrices
+ - name: SDLStaticIconNameFullMap
+ url: Constants.html#/c:@SDLStaticIconNameFullMap
+ - name: SDLStaticIconNameGenericPhoneNumber
+ url: Constants.html#/c:@SDLStaticIconNameGenericPhoneNumber
+ - name: SDLStaticIconNameGenre
+ url: Constants.html#/c:@SDLStaticIconNameGenre
+ - name: SDLStaticIconNameGlobalKeyboard
+ url: Constants.html#/c:@SDLStaticIconNameGlobalKeyboard
+ - name: SDLStaticIconNameHighwayExitInformation
+ url: Constants.html#/c:@SDLStaticIconNameHighwayExitInformation
+ - name: SDLStaticIconNameHomePhoneNumber
+ url: Constants.html#/c:@SDLStaticIconNameHomePhoneNumber
+ - name: SDLStaticIconNameHyperlink
+ url: Constants.html#/c:@SDLStaticIconNameHyperlink
+ - name: SDLStaticIconNameID3TagUnknown
+ url: Constants.html#/c:@SDLStaticIconNameID3TagUnknown
+ - name: SDLStaticIconNameIPodMediaSource
+ url: Constants.html#/c:@SDLStaticIconNameIPodMediaSource
+ - name: SDLStaticIconNameIncomingCalls
+ url: Constants.html#/c:@SDLStaticIconNameIncomingCalls
+ - name: SDLStaticIconNameInformation
+ url: Constants.html#/c:@SDLStaticIconNameInformation
+ - name: SDLStaticIconNameJoinCalls
+ url: Constants.html#/c:@SDLStaticIconNameJoinCalls
+ - name: SDLStaticIconNameKeepLeft
+ url: Constants.html#/c:@SDLStaticIconNameKeepLeft
+ - name: SDLStaticIconNameKeepRight
+ url: Constants.html#/c:@SDLStaticIconNameKeepRight
+ - name: SDLStaticIconNameKey
+ url: Constants.html#/c:@SDLStaticIconNameKey
+ - name: SDLStaticIconNameLeft
+ url: Constants.html#/c:@SDLStaticIconNameLeft
+ - name: SDLStaticIconNameLeftArrow
+ url: Constants.html#/c:@SDLStaticIconNameLeftArrow
+ - name: SDLStaticIconNameLeftExit
+ url: Constants.html#/c:@SDLStaticIconNameLeftExit
+ - name: SDLStaticIconNameLineInAudioSource
+ url: Constants.html#/c:@SDLStaticIconNameLineInAudioSource
+ - name: SDLStaticIconNameLocked
+ url: Constants.html#/c:@SDLStaticIconNameLocked
+ - name: SDLStaticIconNameMP3TagArtist
+ url: Constants.html#/c:@SDLStaticIconNameMP3TagArtist
+ - name: SDLStaticIconNameMediaControlLeftArrow
+ url: Constants.html#/c:@SDLStaticIconNameMediaControlLeftArrow
+ - name: SDLStaticIconNameMediaControlRecording
+ url: Constants.html#/c:@SDLStaticIconNameMediaControlRecording
+ - name: SDLStaticIconNameMediaControlRightArrow
+ url: Constants.html#/c:@SDLStaticIconNameMediaControlRightArrow
+ - name: SDLStaticIconNameMediaControlStop
+ url: Constants.html#/c:@SDLStaticIconNameMediaControlStop
+ - name: SDLStaticIconNameMicrophone
+ url: Constants.html#/c:@SDLStaticIconNameMicrophone
+ - name: SDLStaticIconNameMissedCalls
+ url: Constants.html#/c:@SDLStaticIconNameMissedCalls
+ - name: SDLStaticIconNameMobilePhoneNumber
+ url: Constants.html#/c:@SDLStaticIconNameMobilePhoneNumber
+ - name: SDLStaticIconNameMoveDown
+ url: Constants.html#/c:@SDLStaticIconNameMoveDown
+ - name: SDLStaticIconNameMoveUp
+ url: Constants.html#/c:@SDLStaticIconNameMoveUp
+ - name: SDLStaticIconNameNavigation
+ url: Constants.html#/c:@SDLStaticIconNameNavigation
+ - name: SDLStaticIconNameNavigationCurrentDirection
+ url: Constants.html#/c:@SDLStaticIconNameNavigationCurrentDirection
+ - name: SDLStaticIconNameNegativeRatingThumbsDown
+ url: Constants.html#/c:@SDLStaticIconNameNegativeRatingThumbsDown
+ - name: SDLStaticIconNameNew
+ url: Constants.html#/c:@SDLStaticIconNameNew
+ - name: SDLStaticIconNameOfficePhoneNumber
+ url: Constants.html#/c:@SDLStaticIconNameOfficePhoneNumber
+ - name: SDLStaticIconNameOpened
+ url: Constants.html#/c:@SDLStaticIconNameOpened
+ - name: SDLStaticIconNameOrigin
+ url: Constants.html#/c:@SDLStaticIconNameOrigin
+ - name: SDLStaticIconNameOutgoingCalls
+ url: Constants.html#/c:@SDLStaticIconNameOutgoingCalls
+ - name: SDLStaticIconNamePause
+ url: Constants.html#/c:@SDLStaticIconNamePause
+ - name: SDLStaticIconNamePhoneCall1
+ url: Constants.html#/c:@SDLStaticIconNamePhoneCall1
+ - name: SDLStaticIconNamePhoneCall2
+ url: Constants.html#/c:@SDLStaticIconNamePhoneCall2
+ - name: SDLStaticIconNamePhoneDevice
+ url: Constants.html#/c:@SDLStaticIconNamePhoneDevice
+ - name: SDLStaticIconNamePhonebook
+ url: Constants.html#/c:@SDLStaticIconNamePhonebook
+ - name: SDLStaticIconNamePhoto
+ url: Constants.html#/c:@SDLStaticIconNamePhoto
+ - name: SDLStaticIconNamePlay
+ url: Constants.html#/c:@SDLStaticIconNamePlay
+ - name: SDLStaticIconNamePlaylist
+ url: Constants.html#/c:@SDLStaticIconNamePlaylist
+ - name: SDLStaticIconNamePopUp
+ url: Constants.html#/c:@SDLStaticIconNamePopUp
+ - name: SDLStaticIconNamePositiveRatingThumbsUp
+ url: Constants.html#/c:@SDLStaticIconNamePositiveRatingThumbsUp
+ - name: SDLStaticIconNamePower
+ url: Constants.html#/c:@SDLStaticIconNamePower
+ - name: SDLStaticIconNamePrimaryPhone
+ url: Constants.html#/c:@SDLStaticIconNamePrimaryPhone
+ - name: SDLStaticIconNameRSS
+ url: Constants.html#/c:@SDLStaticIconNameRSS
+ - name: SDLStaticIconNameRadioButtonChecked
+ url: Constants.html#/c:@SDLStaticIconNameRadioButtonChecked
+ - name: SDLStaticIconNameRadioButtonUnchecked
+ url: Constants.html#/c:@SDLStaticIconNameRadioButtonUnchecked
+ - name: SDLStaticIconNameRecentCalls
+ url: Constants.html#/c:@SDLStaticIconNameRecentCalls
+ - name: SDLStaticIconNameRecentDestinations
+ url: Constants.html#/c:@SDLStaticIconNameRecentDestinations
+ - name: SDLStaticIconNameRedo
+ url: Constants.html#/c:@SDLStaticIconNameRedo
+ - name: SDLStaticIconNameRefresh
+ url: Constants.html#/c:@SDLStaticIconNameRefresh
+ - name: SDLStaticIconNameRemoteDiagnosticsCheckEngine
+ url: Constants.html#/c:@SDLStaticIconNameRemoteDiagnosticsCheckEngine
+ - name: SDLStaticIconNameRendered911Assist
+ url: Constants.html#/c:@SDLStaticIconNameRendered911Assist
+ - name: SDLStaticIconNameRepeat
+ url: Constants.html#/c:@SDLStaticIconNameRepeat
+ - name: SDLStaticIconNameRepeatPlay
+ url: Constants.html#/c:@SDLStaticIconNameRepeatPlay
+ - name: SDLStaticIconNameReply
+ url: Constants.html#/c:@SDLStaticIconNameReply
+ - name: SDLStaticIconNameRewind30Secs
+ url: Constants.html#/c:@SDLStaticIconNameRewind30Secs
+ - name: SDLStaticIconNameRight
+ url: Constants.html#/c:@SDLStaticIconNameRight
+ - name: SDLStaticIconNameRightExit
+ url: Constants.html#/c:@SDLStaticIconNameRightExit
+ - name: SDLStaticIconNameRingtones
+ url: Constants.html#/c:@SDLStaticIconNameRingtones
+ - name: SDLStaticIconNameRoundaboutLeftHand1
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand1
+ - name: SDLStaticIconNameRoundaboutLeftHand2
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand2
+ - name: SDLStaticIconNameRoundaboutLeftHand3
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand3
+ - name: SDLStaticIconNameRoundaboutLeftHand4
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand4
+ - name: SDLStaticIconNameRoundaboutLeftHand5
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand5
+ - name: SDLStaticIconNameRoundaboutLeftHand6
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand6
+ - name: SDLStaticIconNameRoundaboutLeftHand7
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand7
+ - name: SDLStaticIconNameRoundaboutRightHand1
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand1
+ - name: SDLStaticIconNameRoundaboutRightHand2
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand2
+ - name: SDLStaticIconNameRoundaboutRightHand3
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand3
+ - name: SDLStaticIconNameRoundaboutRightHand4
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand4
+ - name: SDLStaticIconNameRoundaboutRightHand5
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand5
+ - name: SDLStaticIconNameRoundaboutRightHand6
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand6
+ - name: SDLStaticIconNameRoundaboutRightHand7
+ url: Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand7
+ - name: SDLStaticIconNameSettings
+ url: Constants.html#/c:@SDLStaticIconNameSettings
+ - name: SDLStaticIconNameSharpLeft
+ url: Constants.html#/c:@SDLStaticIconNameSharpLeft
+ - name: SDLStaticIconNameSharpRight
+ url: Constants.html#/c:@SDLStaticIconNameSharpRight
+ - name: SDLStaticIconNameShow
+ url: Constants.html#/c:@SDLStaticIconNameShow
+ - name: SDLStaticIconNameShufflePlay
+ url: Constants.html#/c:@SDLStaticIconNameShufflePlay
+ - name: SDLStaticIconNameSkiPlaces
+ url: Constants.html#/c:@SDLStaticIconNameSkiPlaces
+ - name: SDLStaticIconNameSlightLeft
+ url: Constants.html#/c:@SDLStaticIconNameSlightLeft
+ - name: SDLStaticIconNameSlightRight
+ url: Constants.html#/c:@SDLStaticIconNameSlightRight
+ - name: SDLStaticIconNameSmartphone
+ url: Constants.html#/c:@SDLStaticIconNameSmartphone
+ - name: SDLStaticIconNameSortList
+ url: Constants.html#/c:@SDLStaticIconNameSortList
+ - name: SDLStaticIconNameSpeedDialNumbersNumber0
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber0
+ - name: SDLStaticIconNameSpeedDialNumbersNumber1
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber1
+ - name: SDLStaticIconNameSpeedDialNumbersNumber2
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber2
+ - name: SDLStaticIconNameSpeedDialNumbersNumber3
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber3
+ - name: SDLStaticIconNameSpeedDialNumbersNumber4
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber4
+ - name: SDLStaticIconNameSpeedDialNumbersNumber5
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber5
+ - name: SDLStaticIconNameSpeedDialNumbersNumber6
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber6
+ - name: SDLStaticIconNameSpeedDialNumbersNumber7
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber7
+ - name: SDLStaticIconNameSpeedDialNumbersNumber8
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber8
+ - name: SDLStaticIconNameSpeedDialNumbersNumber9
+ url: Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber9
+ - name: SDLStaticIconNameSuccess
+ url: Constants.html#/c:@SDLStaticIconNameSuccess
+ - name: SDLStaticIconNameTrackTitle
+ url: Constants.html#/c:@SDLStaticIconNameTrackTitle
+ - name: SDLStaticIconNameTrafficReport
+ url: Constants.html#/c:@SDLStaticIconNameTrafficReport
+ - name: SDLStaticIconNameTurnList
+ url: Constants.html#/c:@SDLStaticIconNameTurnList
+ - name: SDLStaticIconNameUSBMediaAudioSource
+ url: Constants.html#/c:@SDLStaticIconNameUSBMediaAudioSource
+ - name: SDLStaticIconNameUTurnLeftTraffic
+ url: Constants.html#/c:@SDLStaticIconNameUTurnLeftTraffic
+ - name: SDLStaticIconNameUTurnRightTraffic
+ url: Constants.html#/c:@SDLStaticIconNameUTurnRightTraffic
+ - name: SDLStaticIconNameUndo
+ url: Constants.html#/c:@SDLStaticIconNameUndo
+ - name: SDLStaticIconNameUnlocked
+ url: Constants.html#/c:@SDLStaticIconNameUnlocked
+ - name: SDLStaticIconNameVoiceControlScrollbarListItemNo1
+ url: Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo1
+ - name: SDLStaticIconNameVoiceControlScrollbarListItemNo2
+ url: Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo2
+ - name: SDLStaticIconNameVoiceControlScrollbarListItemNo3
+ url: Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo3
+ - name: SDLStaticIconNameVoiceControlScrollbarListItemNo4
+ url: Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo4
+ - name: SDLStaticIconNameVoiceRecognitionFailed
+ url: Constants.html#/c:@SDLStaticIconNameVoiceRecognitionFailed
+ - name: SDLStaticIconNameVoiceRecognitionPause
+ url: Constants.html#/c:@SDLStaticIconNameVoiceRecognitionPause
+ - name: SDLStaticIconNameVoiceRecognitionSuccessful
+ url: Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSuccessful
+ - name: SDLStaticIconNameVoiceRecognitionSystemActive
+ url: Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemActive
+ - name: SDLStaticIconNameVoiceRecognitionSystemListening
+ url: Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemListening
+ - name: SDLStaticIconNameVoiceRecognitionTryAgain
+ url: Constants.html#/c:@SDLStaticIconNameVoiceRecognitionTryAgain
+ - name: SDLStaticIconNameWarning
+ url: Constants.html#/c:@SDLStaticIconNameWarning
+ - name: SDLStaticIconNameWeather
+ url: Constants.html#/c:@SDLStaticIconNameWeather
+ - name: SDLStaticIconNameWifiFull
+ url: Constants.html#/c:@SDLStaticIconNameWifiFull
+ - name: SDLStaticIconNameZoomIn
+ url: Constants.html#/c:@SDLStaticIconNameZoomIn
+ - name: SDLStaticIconNameZoomOut
+ url: Constants.html#/c:@SDLStaticIconNameZoomOut
+ - name: SDLSupportedSeatDriver
+ url: Constants.html#/c:@SDLSupportedSeatDriver
+ - name: SDLSupportedSeatFrontPassenger
+ url: Constants.html#/c:@SDLSupportedSeatFrontPassenger
- name: SDLSystemActionDefaultAction
url: Constants.html#/c:@SDLSystemActionDefaultAction
- name: SDLSystemActionKeepContext
@@ -1474,6 +2094,22 @@
url: Constants.html#/c:@SDLTBTStateRouteUpdateRequestTimeout
- name: SDLTBTStateTripStatusRequest
url: Constants.html#/c:@SDLTBTStateTripStatusRequest
+ - name: SDLTPMSLow
+ url: Constants.html#/c:@SDLTPMSLow
+ - name: SDLTPMSNotTrained
+ url: Constants.html#/c:@SDLTPMSNotTrained
+ - name: SDLTPMSSensorFault
+ url: Constants.html#/c:@SDLTPMSSensorFault
+ - name: SDLTPMSSystemActive
+ url: Constants.html#/c:@SDLTPMSSystemActive
+ - name: SDLTPMSSystemFault
+ url: Constants.html#/c:@SDLTPMSSystemFault
+ - name: SDLTPMSTrain
+ url: Constants.html#/c:@SDLTPMSTrain
+ - name: SDLTPMSTrainingComplete
+ url: Constants.html#/c:@SDLTPMSTrainingComplete
+ - name: SDLTPMSUnknown
+ url: Constants.html#/c:@SDLTPMSUnknown
- name: SDLTemperatureUnitCelsius
url: Constants.html#/c:@SDLTemperatureUnitCelsius
- name: SDLTemperatureUnitFahrenheit
@@ -1554,6 +2190,8 @@
url: Constants.html#/c:@SDLTouchTypeEnd
- name: SDLTouchTypeMove
url: Constants.html#/c:@SDLTouchTypeMove
+ - name: SDLTransportConnectError
+ url: Constants.html#/c:@SDLTransportConnectError
- name: SDLTransportDidConnect
url: Constants.html#/c:@SDLTransportDidConnect
- name: SDLTransportDidDisconnect
@@ -1564,6 +2202,14 @@
url: Constants.html#/c:@SDLTriggerSourceMenu
- name: SDLTriggerSourceVoiceRecognition
url: Constants.html#/c:@SDLTriggerSourceVoiceRecognition
+ - name: SDLTurnSignalBoth
+ url: Constants.html#/c:@SDLTurnSignalBoth
+ - name: SDLTurnSignalLeft
+ url: Constants.html#/c:@SDLTurnSignalLeft
+ - name: SDLTurnSignalOff
+ url: Constants.html#/c:@SDLTurnSignalOff
+ - name: SDLTurnSignalRight
+ url: Constants.html#/c:@SDLTurnSignalRight
- name: SDLUpdateModeClear
url: Constants.html#/c:@SDLUpdateModeClear
- name: SDLUpdateModeCountDown
@@ -1646,8 +2292,12 @@
url: Constants.html#/c:@SDLVehicleDataTypeDeviceStatus
- name: SDLVehicleDataTypeECallInfo
url: Constants.html#/c:@SDLVehicleDataTypeECallInfo
+ - name: SDLVehicleDataTypeElectronicParkBrakeStatus
+ url: Constants.html#/c:@SDLVehicleDataTypeElectronicParkBrakeStatus
- name: SDLVehicleDataTypeEmergencyEvent
url: Constants.html#/c:@SDLVehicleDataTypeEmergencyEvent
+ - name: SDLVehicleDataTypeEngineOilLife
+ url: Constants.html#/c:@SDLVehicleDataTypeEngineOilLife
- name: SDLVehicleDataTypeEngineTorque
url: Constants.html#/c:@SDLVehicleDataTypeEngineTorque
- name: SDLVehicleDataTypeExternalTemperature
@@ -1658,6 +2308,8 @@
url: Constants.html#/c:@SDLVehicleDataTypeFuelLevel
- name: SDLVehicleDataTypeFuelLevelState
url: Constants.html#/c:@SDLVehicleDataTypeFuelLevelState
+ - name: SDLVehicleDataTypeFuelRange
+ url: Constants.html#/c:@SDLVehicleDataTypeFuelRange
- name: SDLVehicleDataTypeGPS
url: Constants.html#/c:@SDLVehicleDataTypeGPS
- name: SDLVehicleDataTypeHeadlampStatus
@@ -1676,6 +2328,8 @@
url: Constants.html#/c:@SDLVehicleDataTypeSteeringWheel
- name: SDLVehicleDataTypeTirePressure
url: Constants.html#/c:@SDLVehicleDataTypeTirePressure
+ - name: SDLVehicleDataTypeTurnSignal
+ url: Constants.html#/c:@SDLVehicleDataTypeTurnSignal
- name: SDLVehicleDataTypeVIN
url: Constants.html#/c:@SDLVehicleDataTypeVIN
- name: SDLVehicleDataTypeWiperStatus
@@ -1692,6 +2346,16 @@
url: Constants.html#/c:@SDLVideoStreamDidStartNotification
- name: SDLVideoStreamDidStopNotification
url: Constants.html#/c:@SDLVideoStreamDidStopNotification
+ - name: SDLVideoStreamManagerStateReady
+ url: Constants.html#/c:@SDLVideoStreamManagerStateReady
+ - name: SDLVideoStreamManagerStateShuttingDown
+ url: Constants.html#/c:@SDLVideoStreamManagerStateShuttingDown
+ - name: SDLVideoStreamManagerStateStarting
+ url: Constants.html#/c:@SDLVideoStreamManagerStateStarting
+ - name: SDLVideoStreamManagerStateStopped
+ url: Constants.html#/c:@SDLVideoStreamManagerStateStopped
+ - name: SDLVideoStreamManagerStateSuspended
+ url: Constants.html#/c:@SDLVideoStreamManagerStateSuspended
- name: SDLVideoStreamSuspendedNotification
url: Constants.html#/c:@SDLVideoStreamSuspendedNotification
- name: SDLVideoStreamingCodecH264
@@ -1714,6 +2378,10 @@
url: Constants.html#/c:@SDLVideoStreamingProtocolRTSP
- name: SDLVideoStreamingProtocolWebM
url: Constants.html#/c:@SDLVideoStreamingProtocolWebM
+ - name: SDLVideoStreamingStateNotStreamable
+ url: Constants.html#/c:@SDLVideoStreamingStateNotStreamable
+ - name: SDLVideoStreamingStateStreamable
+ url: Constants.html#/c:@SDLVideoStreamingStateStreamable
- name: SDLWarningLightStatusFlash
url: Constants.html#/c:@SDLWarningLightStatusFlash
- name: SDLWarningLightStatusNotUsed
@@ -1768,6 +2436,10 @@
url: Enums/SDLAudioStreamManagerError.html
- name: SDLCarWindowRenderingType
url: Enums/SDLCarWindowRenderingType.html
+ - name: SDLChoiceSetLayout
+ url: Enums/SDLChoiceSetLayout.html
+ - name: SDLChoiceSetManagerError
+ url: Enums/SDLChoiceSetManagerError.html
- name: SDLFileManagerError
url: Enums/SDLFileManagerError.html
- name: SDLLogBytesDirection
@@ -1794,16 +2466,22 @@
url: Enums/SDLStreamingEncryptionFlag.html
- name: SDLTextAndGraphicManagerError
url: Enums/SDLTextAndGraphicManagerError.html
+ - name: SDLTransportError
+ url: Enums/SDLTransportError.html
- name: Protocols
sub_nav:
- name: SDLAudioStreamManagerDelegate
url: Protocols/SDLAudioStreamManagerDelegate.html
- name: SDLBool
url: Protocols.html#/c:objc(pl)SDLBool
+ - name: SDLChoiceSetDelegate
+ url: Protocols/SDLChoiceSetDelegate.html
- name: SDLFloat
url: Protocols.html#/c:objc(pl)SDLFloat
- name: SDLInt
url: Protocols.html#/c:objc(pl)SDLInt
+ - name: SDLKeyboardDelegate
+ url: Protocols/SDLKeyboardDelegate.html
- name: SDLLogTarget
url: Protocols/SDLLogTarget.html
- name: SDLManagerDelegate
@@ -1826,8 +2504,14 @@
url: Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType
- name: SDLAppInterfaceUnregisteredReason
url: Type Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason
+ - name: SDLAppState
+ url: Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAppState
- name: SDLAudioPassThruHandler
url: Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler
+ - name: SDLAudioStreamManagerState
+ url: Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState
+ - name: SDLAudioStreamingIndicator
+ url: Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator
- name: SDLAudioStreamingState
url: Type Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState
- name: SDLAudioType
@@ -1856,12 +2540,18 @@
url: Type Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus
- name: SDLDimension
url: Type Definitions.html#/c:SDLDimension.h@T@SDLDimension
+ - name: SDLDisplayMode
+ url: Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode
- name: SDLDisplayType
url: Type Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType
+ - name: SDLDistanceUnit
+ url: Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit
- name: SDLDriverDistractionState
url: Type Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState
- name: SDLECallConfirmationStatus
url: Type Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus
+ - name: SDLElectronicParkBrakeStatus
+ url: Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus
- name: SDLEmergencyEventType
url: Type Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType
- name: SDLEnum
@@ -1892,6 +2582,8 @@
url: Type Definitions.html#/c:SDLFileType.h@T@SDLFileType
- name: SDLFuelCutoffStatus
url: Type Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus
+ - name: SDLFuelType
+ url: Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType
- name: SDLGlobalProperty
url: Type Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty
- name: SDLHMILevel
@@ -1908,6 +2600,10 @@
url: Type Definitions.html#/c:SDLImageType.h@T@SDLImageType
- name: SDLInteractionMode
url: Type Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode
+ - name: SDLKeyboardAutocompleteCompletionHandler
+ url: Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler
+ - name: SDLKeyboardCharacterSetCompletionHandler
+ url: Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler
- name: SDLKeyboardEvent
url: Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent
- name: SDLKeyboardLayout
@@ -1918,6 +2614,10 @@
url: Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage
- name: SDLLayoutMode
url: Type Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode
+ - name: SDLLightName
+ url: Type Definitions.html#/c:SDLLightName.h@T@SDLLightName
+ - name: SDLLightStatus
+ url: Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus
- name: SDLLockScreenStatus
url: Type Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus
- name: SDLLogFilterBlock
@@ -1926,6 +2626,12 @@
url: Type Definitions.html#/c:SDLMaintenanceModeStatus.h@T@SDLMaintenanceModeStatus
- name: SDLManagerReadyBlock
url: Type Definitions.html#/c:SDLManager.h@T@SDLManagerReadyBlock
+ - name: SDLMassageCushion
+ url: Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion
+ - name: SDLMassageMode
+ url: Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode
+ - name: SDLMassageZone
+ url: Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone
- name: SDLMediaClockFormat
url: Type Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat
- name: SDLMenuCellSelectionHandler
@@ -1960,6 +2666,8 @@
url: Type Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus
- name: SDLPredefinedLayout
url: Type Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout
+ - name: SDLPreloadChoiceCompletionHandler
+ url: Type Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler
- name: SDLPrerecordedSpeech
url: Type Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech
- name: SDLPrimaryAudioSource
@@ -1982,10 +2690,16 @@
url: Type Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate
- name: SDLScreenManagerUpdateCompletionHandler
url: Type Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler
+ - name: SDLSeatMemoryActionType
+ url: Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType
- name: SDLSoftButtonType
url: Type Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType
- name: SDLSpeechCapabilities
url: Type Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities
+ - name: SDLStaticIconName
+ url: Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName
+ - name: SDLSupportedSeat
+ url: Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat
- name: SDLSystemAction
url: Type Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction
- name: SDLSystemCapabilityType
@@ -1994,6 +2708,8 @@
url: Type Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext
- name: SDLTBTState
url: Type Definitions.html#/c:SDLTBTState.h@T@SDLTBTState
+ - name: SDLTPMS
+ url: Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS
- name: SDLTemperatureUnit
url: Type Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit
- name: SDLTextAlignment
@@ -2010,6 +2726,8 @@
url: Type Definitions.html#/c:SDLTouchType.h@T@SDLTouchType
- name: SDLTriggerSource
url: Type Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource
+ - name: SDLTurnSignal
+ url: Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal
- name: SDLUpdateCapabilityHandler
url: Type Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLUpdateCapabilityHandler
- name: SDLUpdateMode
@@ -2030,10 +2748,14 @@
url: Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType
- name: SDLVentilationMode
url: Type Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode
+ - name: SDLVideoStreamManagerState
+ url: Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState
- name: SDLVideoStreamingCodec
url: Type Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec
- name: SDLVideoStreamingProtocol
url: Type Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol
+ - name: SDLVideoStreamingState
+ url: Type Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState
- name: SDLVoiceCommandSelectionHandler
url: Type Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler
- name: SDLWarningLightStatus
diff --git a/docs/search.json b/docs/search.json
index 4901a3bce..a444a7576 100644
--- a/docs/search.json
+++ b/docs/search.json
@@ -1 +1 @@
-{"Type Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierFirstFinger":{"name":"SDLTouchIdentifierFirstFinger","abstract":"<p>Undocumented</p>"},"Type Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierSecondFinger":{"name":"SDLTouchIdentifierSecondFinger","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLAmbientLightStatus.h@T@SDLAmbientLightStatus":{"name":"SDLAmbientLightStatus","abstract":"<p>Reflects the status of the ambient light sensor for headlamps</p>"},"Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType":{"name":"SDLAppHMIType","abstract":"<p>Enumeration listing possible app hmi types.</p>"},"Type Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason":{"name":"SDLAppInterfaceUnregisteredReason","abstract":"<p>Indicates reason why app interface was unregistered. The application is being disconnected by SDL.</p>"},"Type Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState":{"name":"SDLAudioStreamingState","abstract":"<p>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</p>"},"Type Definitions.html#/c:SDLAudioType.h@T@SDLAudioType":{"name":"SDLAudioType","abstract":"<p>Describes different audio type options for PerformAudioPassThru</p>"},"Type Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample":{"name":"SDLBitsPerSample","abstract":"<p>Describes different bit depth options for PerformAudioPassThru</p>"},"Type Definitions.html#/c:SDLButtonEventMode.h@T@SDLButtonEventMode":{"name":"SDLButtonEventMode","abstract":"<p>Indicates whether the button was depressed or released. A BUTTONUP event will always be preceded by a BUTTONDOWN event.</p>"},"Type Definitions.html#/c:SDLButtonName.h@T@SDLButtonName":{"name":"SDLButtonName","abstract":"<p>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.</p>"},"Type Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode":{"name":"SDLButtonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press</p>"},"Type Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus":{"name":"SDLCarModeStatus","abstract":"<p>Describes the carmode the vehicle is in. Used in ClusterModeStatus</p>"},"Type Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet":{"name":"SDLCharacterSet","abstract":"<p>Character sets supported by SDL. Used to describe text field capabilities.</p>"},"Type Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection":{"name":"SDLCompassDirection","abstract":"<p>The list of potential compass directions. Used in GPS data</p>"},"Type Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus":{"name":"SDLComponentVolumeStatus","abstract":"<p>The volume status of a vehicle component. Used in SingleTireStatus and VehicleData Fuel Level</p>"},"Type Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone":{"name":"SDLDefrostZone","abstract":"<p>Enumeration listing possible defrost zones. Used in ClimateControlCapabilities and Data.</p>"},"Type Definitions.html#/c:SDLDeliveryMode.h@T@SDLDeliveryMode":{"name":"SDLDeliveryMode","abstract":"<p>Specifies the mode in which the sendLocation request is sent. Used in SendLocation.</p>"},"Type Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus":{"name":"SDLDeviceLevelStatus","abstract":"<p>Reflects the reported battery status of the connected device, if reported. Used in DeviceStatus.</p>"},"Type Definitions.html#/c:SDLDimension.h@T@SDLDimension":{"name":"SDLDimension","abstract":"<p>The supported dimensions of the GPS. Used in GPSData</p>"},"Type Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType":{"name":"SDLDisplayType","abstract":"<p>Identifies the various display types used by SDL. Used in DisplayCapabilities.</p>"},"Type Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState":{"name":"SDLDriverDistractionState","abstract":"<p>Enumeration that describes possible states of driver distraction. Used in OnDriverDistraction.</p>"},"Type Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus":{"name":"SDLECallConfirmationStatus","abstract":"<p>Reflects the status of the eCall Notification. Used in ECallInfo</p>"},"Type Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType":{"name":"SDLEmergencyEventType","abstract":"<p>Reflects the emergency event status of the vehicle. Used in EmergencyEvent</p>"},"Type Definitions.html#/c:SDLEnum.h@T@SDLEnum":{"name":"SDLEnum","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileName":{"name":"SDLFileName","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLFileManager.h@T@SDLFileManagerStartupCompletionHandler":{"name":"SDLFileManagerStartupCompletionHandler","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadCompletionHandler":{"name":"SDLFileManagerUploadCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a upload request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadCompletionHandler":{"name":"SDLFileManagerMultiUploadCompletionHandler","abstract":"<p>A completion handler called after a set of upload requests has completed.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadProgressHandler":{"name":"SDLFileManagerMultiUploadProgressHandler","abstract":"<p>In a multiple request send, a handler called after each response from Core to a upload request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerDeleteCompletionHandler":{"name":"SDLFileManagerDeleteCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a delete request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiDeleteCompletionHandler":{"name":"SDLFileManagerMultiDeleteCompletionHandler","abstract":"<p>A completion handler called after a set of delete requests has completed.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerListFilesCompletionHandler":{"name":"SDLFileManagerListFilesCompletionHandler","abstract":"<p>A completion handler called after response from Core to a list files request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadArtworkCompletionHandler":{"name":"SDLFileManagerUploadArtworkCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a artwork upload request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkCompletionHandler":{"name":"SDLFileManagerMultiUploadArtworkCompletionHandler","abstract":"<p>A completion handler called after a set of upload artwork requests has completed.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkProgressHandler":{"name":"SDLFileManagerMultiUploadArtworkProgressHandler","abstract":"<p>In a multiple request send, a handler called after each response from Core to an artwork upload request.</p>"},"Type Definitions.html#/c:SDLFileType.h@T@SDLFileType":{"name":"SDLFileType","abstract":"<p>Enumeration listing possible file types. Used in SDLFile, PutFile, ImageField, OnSystemRequest</p>"},"Type Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus":{"name":"SDLFuelCutoffStatus","abstract":"<p>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.</p>"},"Type Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty":{"name":"SDLGlobalProperty","abstract":"<p>Properties of a user-initiated VR interaction (i.e. interactions started by the user pressing the PTT button). Used in RPCs related to ResetGlobalProperties</p>"},"Type Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel":{"name":"SDLHMILevel","abstract":"<p>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 <q>focus</q> to other applications (e.g. phone, other mobile applications, etc.). Used in OnHMIStatus</p>"},"Type Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities":{"name":"SDLHMIZoneCapabilities","abstract":"<p>Specifies HMI Zones in the vehicle. Used in RegisterAppInterfaceResponse</p>"},"Type Definitions.html#/c:SDLIgnitionStableStatus.h@T@SDLIgnitionStableStatus":{"name":"SDLIgnitionStableStatus","abstract":"<p>Reflects the ignition switch stability. Used in BodyInformation</p>"},"Type Definitions.html#/c:SDLIgnitionStatus.h@T@SDLIgnitionStatus":{"name":"SDLIgnitionStatus","abstract":"<p>Reflects the status of ignition. Used in BodyInformation.</p>"},"Type Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName":{"name":"SDLImageFieldName","abstract":"<p>The name that identifies the filed. Used in DisplayCapabilities.</p>"},"Type Definitions.html#/c:SDLImageType.h@T@SDLImageType":{"name":"SDLImageType","abstract":"<p>Contains information about the type of image. Used in Image.</p>"},"Type Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode":{"name":"SDLInteractionMode","abstract":"<p>For application-initiated interactions (SDLPerformInteraction), this specifies the mode by which the user is prompted and by which the user&rsquo;s selection is indicated. Used in PerformInteraction.</p>"},"Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent":{"name":"SDLKeyboardEvent","abstract":"<p>Enumeration listing possible keyboard events. Used in OnKeyboardInput.</p>"},"Type Definitions.html#/c:SDLKeyboardLayout.h@T@SDLKeyboardLayout":{"name":"SDLKeyboardLayout","abstract":"<p>Enumeration listing possible keyboard layouts. Used in KeyboardProperties.</p>"},"Type Definitions.html#/c:SDLKeypressMode.h@T@SDLKeypressMode":{"name":"SDLKeypressMode","abstract":"<p>Enumeration listing possible keyboard events.</p>"},"Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage":{"name":"SDLLanguage","abstract":"<p>Specifies the language to be used for TTS, VR, displayed messages/menus. Used in ChangeRegistration and RegisterAppInterface.</p>"},"Type Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode":{"name":"SDLLayoutMode","abstract":"<p>For touchscreen interactions, the mode of how the choices are presented. Used in PerformInteraction.</p>"},"Type Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus":{"name":"SDLLockScreenStatus","abstract":"<p>Describes what the status of the lock screen should be</p>"},"Type Definitions.html#/c:SDLLogConstants.h@T@SDLLogFilterBlock":{"name":"SDLLogFilterBlock","abstract":"<p>A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.</p>"},"Type Definitions.html#/c:SDLMaintenanceModeStatus.h@T@SDLMaintenanceModeStatus":{"name":"SDLMaintenanceModeStatus","abstract":"<p>Describes the maintenence mode. Used in nothing.</p>"},"Type Definitions.html#/c:SDLManager.h@T@SDLManagerReadyBlock":{"name":"SDLManagerReadyBlock","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat":{"name":"SDLMediaClockFormat","abstract":"<p>Indicates the format of the time displayed on the connected SDL unit.</p>"},"Type Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler":{"name":"SDLMenuCellSelectionHandler","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType":{"name":"SDLMetadataType","abstract":"<p>Text Field metadata types. Used in Show.</p>"},"Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType":{"name":"SDLModuleType","abstract":"<p>The type of remote control data. Used in ButtonPress, GetInteriorVehicleData, and ModuleData</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName":{"name":"SDLNotificationName","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationUserInfoKey":{"name":"SDLNotificationUserInfoKey","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler":{"name":"SDLAudioPassThruHandler","abstract":"<p>A handler used on SDLPerformAudioPassThru.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLResponseHandler":{"name":"SDLResponseHandler","abstract":"<p>A handler used on all RPC requests which fires when the response is received.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleRequestCompletionHandler":{"name":"SDLMultipleRequestCompletionHandler","abstract":"<p>A completion handler called after a sequential or simultaneous set of requests have completed sending.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleSequentialRequestProgressHandler":{"name":"SDLMultipleSequentialRequestProgressHandler","abstract":"<p>A handler called after each response to a request comes in in a multiple request send.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleAsyncRequestProgressHandler":{"name":"SDLMultipleAsyncRequestProgressHandler","abstract":"<p>A handler called after each response to a request comes in in a multiple request send.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler":{"name":"SDLRPCButtonNotificationHandler","abstract":"<p>A handler that may optionally be run when an SDLSubscribeButton or SDLSoftButton has a corresponding notification occur.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler":{"name":"SDLRPCCommandNotificationHandler","abstract":"<p>A handler that may optionally be run when an SDLAddCommand has a corresponding notification occur.</p>"},"Type Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL":{"name":"SDLPRNDL","abstract":"<p>The selected gear the car is in. Used in retrieving vehicle data.</p>"},"Type Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionRPCName":{"name":"SDLPermissionRPCName","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionObserverIdentifier":{"name":"SDLPermissionObserverIdentifier","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionsChangedHandler":{"name":"SDLPermissionsChangedHandler","abstract":"<p>The PermissionObserver is a block that is passed in to some methods that will be stored and called when specified permissions change.</p>"},"Type Definitions.html#/c:SDLPermissionStatus.h@T@SDLPermissionStatus":{"name":"SDLPermissionStatus","abstract":"<p>Enumeration that describes possible permission states of a policy table entry. Used in nothing.</p>"},"Type Definitions.html#/c:SDLPowerModeQualificationStatus.h@T@SDLPowerModeQualificationStatus":{"name":"SDLPowerModeQualificationStatus","abstract":"<p>Describes the power mode qualification status. Used in ClusterModeStatus.</p>"},"Type Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus":{"name":"SDLPowerModeStatus","abstract":"<p>The status of the car&rsquo;s power. Used in ClusterModeStatus.</p>"},"Type Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout":{"name":"SDLPredefinedLayout","abstract":"<p>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.</p>"},"Type Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech":{"name":"SDLPrerecordedSpeech","abstract":"<p>Contains information about the speech capabilities on the SDL platform. Used in RegisterAppInterfaceResponse to indicate capability.</p>"},"Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource":{"name":"SDLPrimaryAudioSource","abstract":"<p>Reflects the current primary audio source of SDL (if selected). Used in DeviceStatus.</p>"},"Type Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand":{"name":"SDLRadioBand","abstract":"<p>Radio bands, such as AM and FM, used in RadioControlData</p>"},"Type Definitions.html#/c:SDLRadioState.h@T@SDLRadioState":{"name":"SDLRadioState","abstract":"<p>List possible states of a remote control radio module. Used in RadioControlData.</p>"},"Type Definitions.html#/c:SDLRequestType.h@T@SDLRequestType":{"name":"SDLRequestType","abstract":"<p>A type of system request. Used in SystemRequest.</p>"},"Type Definitions.html#/c:SDLResult.h@T@SDLResult":{"name":"SDLResult","abstract":"<p>Defines the possible result codes returned by SDL to the application in a response to a requested operation. Used in RPC responses</p>"},"Type Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate":{"name":"SDLSamplingRate","abstract":"<p>Describes different sampling rates for PerformAudioPassThru and AudioPassThruCapabilities</p>"},"Type Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler":{"name":"SDLScreenManagerUpdateCompletionHandler","abstract":"<p>The handler run when the update has completed</p>"},"Type Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType":{"name":"SDLSoftButtonType","abstract":"<p>SoftButtonType (TEXT / IMAGE / BOTH). Used by SoftButton.</p>"},"Type Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities":{"name":"SDLSpeechCapabilities","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction":{"name":"SDLSystemAction","abstract":"<p>Enumeration that describes system actions that can be triggered. Used in SoftButton.</p>"},"Type Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLUpdateCapabilityHandler":{"name":"SDLUpdateCapabilityHandler","abstract":"<p>A completion handler called after a request for the capability type is returned from the remote system.</p>"},"Type Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType":{"name":"SDLSystemCapabilityType","abstract":"<p>The type of system capability to get more information on. Used in GetSystemCapability.</p>"},"Type Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext":{"name":"SDLSystemContext","abstract":"<p>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</p>"},"Type Definitions.html#/c:SDLTBTState.h@T@SDLTBTState":{"name":"SDLTBTState","abstract":"<p>The turn-by-turn state, used in OnTBTClientState.</p>"},"Type Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit":{"name":"SDLTemperatureUnit","abstract":"<p>The unit of temperature to display. Used in Temperature.</p>"},"Type Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment":{"name":"SDLTextAlignment","abstract":"<p>The list of possible alignments of text in a field. May only work on some display types. used in Show.</p>"},"Type Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName":{"name":"SDLTextFieldName","abstract":"<p>Names of the text fields that can appear on a SDL display. Used in TextFieldName.</p>"},"Type Definitions.html#/c:SDLTimerMode.h@T@SDLTimerMode":{"name":"SDLTimerMode","abstract":"<p>The direction of a timer. Used in nothing.</p>"},"Type Definitions/SDLTouchIdentifier.html":{"name":"SDLTouchIdentifier","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler":{"name":"SDLTouchEventHandler","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLTouchType.h@T@SDLTouchType":{"name":"SDLTouchType","abstract":"<p>The type of a touch in a projection application. Used in OnTouchEvent.</p>"},"Type Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource":{"name":"SDLTriggerSource","abstract":"<p>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.</p>"},"Type Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode":{"name":"SDLUpdateMode","abstract":"<p>Specifies what function should be performed on the media clock/counter. Used in SetMediaClockTimer.</p>"},"Type Definitions.html#/c:SDLVehicleDataActiveStatus.h@T@SDLVehicleDataActiveStatus":{"name":"SDLVehicleDataActiveStatus","abstract":"<p>Vehicle Data Activity Status. Used in nothing.</p>"},"Type Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus":{"name":"SDLVehicleDataEventStatus","abstract":"<p>Reflects the status of a vehicle data event; e.g. a seat belt event status. Used in retrieving vehicle data.</p>"},"Type Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus":{"name":"SDLVehicleDataNotificationStatus","abstract":"<p>Reflects the status of a vehicle data notification. Used in ECallInfo</p>"},"Type Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode":{"name":"SDLVehicleDataResultCode","abstract":"<p>Vehicle Data Result Code. Used in DIDResult.</p>"},"Type Definitions.html#/c:SDLVehicleDataStatus.h@T@SDLVehicleDataStatus":{"name":"SDLVehicleDataStatus","abstract":"<p>Reflects the status of a binary vehicle data item. Used in MyKey.</p>"},"Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType":{"name":"SDLVehicleDataType","abstract":"<p>Defines the vehicle data types that can be published and/or subscribed to using SDLSubscribeVehicleData. Used in VehicleDataResult</p>"},"Type Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode":{"name":"SDLVentilationMode","abstract":"<p>The ventilation mode. Used in ClimateControlCapabilities</p>"},"Type Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec":{"name":"SDLVideoStreamingCodec","abstract":"<p>Enum for each type of video streaming codec. Used in VideoStreamingFormat.</p>"},"Type Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol":{"name":"SDLVideoStreamingProtocol","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler":{"name":"SDLVoiceCommandSelectionHandler","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLVrCapabilities.h@T@SDLVRCapabilities":{"name":"SDLVRCapabilities","abstract":"<p>The VR capabilities of the connected SDL platform. Used in RegisterAppInterfaceResponse.</p>"},"Type Definitions.html#/c:SDLWarningLightStatus.h@T@SDLWarningLightStatus":{"name":"SDLWarningLightStatus","abstract":"<p>Reflects the status of a cluster instrument warning light. Used in TireStatus</p>"},"Type Definitions.html#/c:SDLWayPointType.h@T@SDLWayPointType":{"name":"SDLWayPointType","abstract":"<p>The type of a navigation waypoint. Used in GetWayPoints.</p>"},"Type Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus":{"name":"SDLWiperStatus","abstract":"<p>The status of the windshield wipers. Used in retrieving vehicle data.</p>"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveSingleTapForView:atPoint:":{"name":"-touchManager:didReceiveSingleTapForView:atPoint:","abstract":"<p>A single tap was received</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveDoubleTapForView:atPoint:":{"name":"-touchManager:didReceiveDoubleTapForView:atPoint:","abstract":"<p>A double tap was received</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidStartInView:atPoint:":{"name":"-touchManager:panningDidStartInView:atPoint:","abstract":"<p>Panning started</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePanningFromPoint:toPoint:":{"name":"-touchManager:didReceivePanningFromPoint:toPoint:","abstract":"<p>Panning moved between points</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidEndInView:atPoint:":{"name":"-touchManager:panningDidEndInView:atPoint:","abstract":"<p>Panning ended</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningCanceledAtPoint:":{"name":"-touchManager:panningCanceledAtPoint:","abstract":"<p>Panning canceled</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidStartInView:atCenterPoint:":{"name":"-touchManager:pinchDidStartInView:atCenterPoint:","abstract":"<p>Pinch did start</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchAtCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchAtCenterPoint:withScale:","abstract":"<p>@abstract","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchInView:atCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchInView:atCenterPoint:withScale:","abstract":"<p>Pinch moved and changed scale</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidEndInView:atCenterPoint:":{"name":"-touchManager:pinchDidEndInView:atCenterPoint:","abstract":"<p>Pinch did end</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchCanceledAtCenterPoint:":{"name":"-touchManager:pinchCanceledAtCenterPoint:","abstract":"<p>Pinch canceled</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)preferredVideoFormatOrderFromHeadUnitPreferredOrder:":{"name":"-preferredVideoFormatOrderFromHeadUnitPreferredOrder:","abstract":"<p>Implement to return a different preferred order of attempted format usage than the head unit&rsquo;s preferred order. In nearly all cases, it&rsquo;s best to simply return the head unit&rsquo;s preferred order, or not implement this method (which does the same thing).</p>","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)resolutionFromHeadUnitPreferredResolution:":{"name":"-resolutionFromHeadUnitPreferredResolution:","abstract":"<p>Implement to return a different resolution to use for video streaming than the head unit&rsquo;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&rsquo;s best to simply return the head unit&rsquo;s preferred order, or not implement this method (which does the same thing), and adapt your UI to the head unit&rsquo;s preferred resolution instead.</p>","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(py)audioConnected":{"name":"audioConnected","abstract":"<p>Whether or not the audio byte stream is currently connected</p>","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"<p>Send audio data bytes over the audio byte stream</p>","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(py)appId":{"name":"appId","abstract":"<p>The app id of the app</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)initializeWithAppId:completionHandler:":{"name":"-initializeWithAppId:completionHandler:","abstract":"<p>Initialize the SDL security library with the app&rsquo;s id and a completion handler</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)stop":{"name":"-stop","abstract":"<p>Stop the security library</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)runHandshakeWithClientData:error:":{"name":"-runHandshakeWithClientData:error:","abstract":"<p>Run the SSL/TLS handshake</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)encryptData:withError:":{"name":"-encryptData:withError:","abstract":"<p>Encrypt data using SSL/TLS</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)decryptData:withError:":{"name":"-decryptData:withError:","abstract":"<p>Decrypt data using SSL/TLS</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(cm)availableMakes":{"name":"+availableMakes","abstract":"<p>The vehicle makes this security library covers</p>","parent_name":"SDLSecurityType"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerDidDisconnect":{"name":"-managerDidDisconnect","abstract":"<p>Called upon a disconnection from the remote system.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)hmiLevel:didChangeToLevel:":{"name":"-hmiLevel:didChangeToLevel:","abstract":"<p>Called when the HMI level state of this application changes on the remote system. This is equivalent to the application&rsquo;s state changes in iOS such as foreground, background, or closed.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)audioStreamingState:didChangeToState:":{"name":"-audioStreamingState:didChangeToState:","abstract":"<p>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.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)systemContext:didChangeToContext:":{"name":"-systemContext:didChangeToContext:","abstract":"<p>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.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerShouldUpdateLifecycleToLanguage:":{"name":"-managerShouldUpdateLifecycleToLanguage:","abstract":"<p>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.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(cm)logger":{"name":"+logger","abstract":"<p>A simple convenience initializer to create the object. This <em>should not</em> start up the logger.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)setupLogger":{"name":"-setupLogger","abstract":"<p>A call to setup the logger in whatever manner it needs to do so.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)logWithLog:formattedLog:":{"name":"-logWithLog:formattedLog:","abstract":"<p>Log a particular log using the model and the formatted log message to the target.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)teardownLogger":{"name":"-teardownLogger","abstract":"<p>The log target should be torn down. e.g. file handles should be closed</p>","parent_name":"SDLLogTarget"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:fileDidFinishPlaying:successfully:":{"name":"-audioStreamManager:fileDidFinishPlaying:successfully:","abstract":"<p>Called when a file from the SDLAudioStreamManager finishes playing</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForFile:error:":{"name":"-audioStreamManager:errorDidOccurForFile:error:","abstract":"<p>Called when a file from the SDLAudioStreamManager could not play</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols.html#/c:objc(pl)SDLInt":{"name":"SDLInt","abstract":"<p>A decleration that this NSNumber contains an NSInteger.</p>"},"Protocols.html#/c:objc(pl)SDLUInt":{"name":"SDLUInt","abstract":"<p>A declaration that this NSNumber contains an NSUInteger.</p>"},"Protocols.html#/c:objc(pl)SDLBool":{"name":"SDLBool","abstract":"<p>A declaration that this NSNumber contains a BOOL.</p>"},"Protocols.html#/c:objc(pl)SDLFloat":{"name":"SDLFloat","abstract":"<p>A declaration that this NSNumber contains a float.</p>"},"Protocols/SDLAudioStreamManagerDelegate.html":{"name":"SDLAudioStreamManagerDelegate","abstract":"<p>Undocumented</p>"},"Protocols/SDLLogTarget.html":{"name":"SDLLogTarget","abstract":"<p>A protocol describing a place logs from SDLLogManager are logged to</p>"},"Protocols/SDLManagerDelegate.html":{"name":"SDLManagerDelegate","abstract":"<p>Undocumented</p>"},"Protocols/SDLSecurityType.html":{"name":"SDLSecurityType","abstract":"<p>A protocol used by SDL Security libraries.</p>"},"Protocols/SDLStreamingAudioManagerType.html":{"name":"SDLStreamingAudioManagerType","abstract":"<p>Undocumented</p>"},"Protocols/SDLStreamingMediaManagerDataSource.html":{"name":"SDLStreamingMediaManagerDataSource","abstract":"<p>Undocumented</p>"},"Protocols/SDLTouchManagerDelegate.html":{"name":"SDLTouchManagerDelegate","abstract":"<p>Undocumented</p>"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagNone":{"name":"SDLStreamingEncryptionFlagNone","abstract":"<p>Undocumented</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateOnly":{"name":"SDLStreamingEncryptionFlagAuthenticateOnly","abstract":"<p>Undocumented</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateAndEncrypt":{"name":"SDLStreamingEncryptionFlagAuthenticateAndEncrypt","abstract":"<p>Undocumented</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeLayer":{"name":"SDLCarWindowRenderingTypeLayer","abstract":"<p>Undocumented</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewAfterScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewAfterScreenUpdates","abstract":"<p>Undocumented</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewBeforeScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewBeforeScreenUpdates","abstract":"<p>Undocumented</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeRequest":{"name":"SDLRPCMessageTypeRequest","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeResponse":{"name":"SDLRPCMessageTypeResponse","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeNotification":{"name":"SDLRPCMessageTypeNotification","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusAllowed":{"name":"SDLPermissionGroupStatusAllowed","abstract":"<p>Every RPC in the group is currently allowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusDisallowed":{"name":"SDLPermissionGroupStatusDisallowed","abstract":"<p>Every RPC in the group is currently disallowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusMixed":{"name":"SDLPermissionGroupStatusMixed","abstract":"<p>Some RPCs in the group are allowed and some disallowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusUnknown":{"name":"SDLPermissionGroupStatusUnknown","abstract":"<p>The current status of the group is unknown.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAllAllowed":{"name":"SDLPermissionGroupTypeAllAllowed","abstract":"<p>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.</p>","parent_name":"SDLPermissionGroupType"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAny":{"name":"SDLPermissionGroupTypeAny","abstract":"<p>Be notified when any change in availability occurs among the group.</p>","parent_name":"SDLPermissionGroupType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeSimple":{"name":"SDLLogFormatTypeSimple","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDefault":{"name":"SDLLogFormatTypeDefault","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDetailed":{"name":"SDLLogFormatTypeDetailed","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDefault":{"name":"SDLLogLevelDefault","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelOff":{"name":"SDLLogLevelOff","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelError":{"name":"SDLLogLevelError","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelWarning":{"name":"SDLLogLevelWarning","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDebug":{"name":"SDLLogLevelDebug","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelVerbose":{"name":"SDLLogLevelVerbose","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagError":{"name":"SDLLogFlagError","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagWarning":{"name":"SDLLogFlagWarning","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagDebug":{"name":"SDLLogFlagDebug","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagVerbose":{"name":"SDLLogFlagVerbose","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionTransmit":{"name":"SDLLogBytesDirectionTransmit","abstract":"<p>Undocumented</p>","parent_name":"SDLLogBytesDirection"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionReceive":{"name":"SDLLogBytesDirectionReceive","abstract":"<p>Undocumented</p>","parent_name":"SDLLogBytesDirection"},"Enums/SDLMenuManagerError.html#/c:@E@SDLMenuManagerError@SDLMenuManagerErrorRPCsFailed":{"name":"SDLMenuManagerErrorRPCsFailed","abstract":"<p>Undocumented</p>","parent_name":"SDLMenuManagerError"},"Enums/SDLSoftButtonManagerError.html#/c:@E@SDLSoftButtonManagerError@SDLSoftButtonManagerErrorPendingUpdateSuperseded":{"name":"SDLSoftButtonManagerErrorPendingUpdateSuperseded","abstract":"<p>Undocumented</p>","parent_name":"SDLSoftButtonManagerError"},"Enums/SDLTextAndGraphicManagerError.html#/c:@E@SDLTextAndGraphicManagerError@SDLTextAndGraphicManagerErrorPendingUpdateSuperseded":{"name":"SDLTextAndGraphicManagerErrorPendingUpdateSuperseded","abstract":"<p>Undocumented</p>","parent_name":"SDLTextAndGraphicManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorCannotOverwrite":{"name":"SDLFileManagerErrorCannotOverwrite","abstract":"<p>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.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorNoKnownFile":{"name":"SDLFileManagerErrorNoKnownFile","abstract":"<p>A file was attempted to be accessed but it does not exist.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToStart":{"name":"SDLFileManagerErrorUnableToStart","abstract":"<p>The file manager attempted to start but encountered an error.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToUpload":{"name":"SDLFileManagerErrorUnableToUpload","abstract":"<p>The file manager was unable to send this file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDoesNotExist":{"name":"SDLFileManagerErrorFileDoesNotExist","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerUploadCanceled":{"name":"SDLFileManagerUploadCanceled","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileUploadTasksFailed":{"name":"SDLFileManagerMultipleFileUploadTasksFailed","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileDeleteTasksFailed":{"name":"SDLFileManagerMultipleFileDeleteTasksFailed","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDataMissing":{"name":"SDLFileManagerErrorFileDataMissing","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRPCRequestFailed":{"name":"SDLManagerErrorRPCRequestFailed","abstract":"<p>An RPC request failed to send.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotConnected":{"name":"SDLManagerErrorNotConnected","abstract":"<p>Some action was attempted that requires a connection to the remote head unit.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotReady":{"name":"SDLManagerErrorNotReady","abstract":"<p>Some action was attempted before the ready state was reached.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorUnknownRemoteError":{"name":"SDLManagerErrorUnknownRemoteError","abstract":"<p>The remote system encountered an unknown error.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorManagersFailedToStart":{"name":"SDLManagerErrorManagersFailedToStart","abstract":"<p>One or more of the sub-managers failed to start.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationFailed":{"name":"SDLManagerErrorRegistrationFailed","abstract":"<p>Registering with the remote system failed.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationSuccessWithWarning":{"name":"SDLManagerErrorRegistrationSuccessWithWarning","abstract":"<p>Registering with the remote system was successful, but had a warning.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorCancelled":{"name":"SDLManagerErrorCancelled","abstract":"<p>Request operations were cancelled before they could be sent</p>","parent_name":"SDLManagerError"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNotConnected":{"name":"SDLAudioStreamManagerErrorNotConnected","abstract":"<p>Undocumented</p>","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNoQueuedAudio":{"name":"SDLAudioStreamManagerErrorNoQueuedAudio","abstract":"<p>Undocumented</p>","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatPNG":{"name":"SDLArtworkImageFormatPNG","abstract":"<p>Undocumented</p>","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatJPG":{"name":"SDLArtworkImageFormatJPG","abstract":"<p>Undocumented</p>","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html":{"name":"SDLArtworkImageFormat","abstract":"<p>Undocumented</p>"},"Enums/SDLAudioStreamManagerError.html":{"name":"SDLAudioStreamManagerError","abstract":"<p>Undocumented</p>"},"Enums/SDLManagerError.html":{"name":"SDLManagerError","abstract":"<p>Errors associated with the SDLManager class.</p>"},"Enums/SDLFileManagerError.html":{"name":"SDLFileManagerError","abstract":"<p>Errors associated with the SDLFileManager class.</p>"},"Enums/SDLTextAndGraphicManagerError.html":{"name":"SDLTextAndGraphicManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLSoftButtonManagerError.html":{"name":"SDLSoftButtonManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLMenuManagerError.html":{"name":"SDLMenuManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLLogBytesDirection.html":{"name":"SDLLogBytesDirection","abstract":"<p>Undocumented</p>"},"Enums/SDLLogFlag.html":{"name":"SDLLogFlag","abstract":"<p>Flags used for SDLLogLevel to provide correct enum values. This is purely for internal use.</p>"},"Enums/SDLLogLevel.html":{"name":"SDLLogLevel","abstract":"<p>An enum describing a level of logging.</p>"},"Enums/SDLLogFormatType.html":{"name":"SDLLogFormatType","abstract":"<p>The output format of logs; how they will appear when printed out into a string.</p>"},"Enums/SDLPermissionGroupType.html":{"name":"SDLPermissionGroupType","abstract":"<p>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.</p>"},"Enums/SDLPermissionGroupStatus.html":{"name":"SDLPermissionGroupStatus","abstract":"<p>The status of the group of RPCs permissions.</p>"},"Enums/SDLRPCMessageType.html":{"name":"SDLRPCMessageType","abstract":"<p>The type of RPC message</p>"},"Enums/SDLCarWindowRenderingType.html":{"name":"SDLCarWindowRenderingType","abstract":"<p>The type of rendering that CarWindow will perform. Depending on your app, you may need to try different ones for best performance</p>"},"Enums/SDLStreamingEncryptionFlag.html":{"name":"SDLStreamingEncryptionFlag","abstract":"<p>A flag determining how video and audio streaming should be encrypted</p>"},"Constants.html#/c:@SDLAmbientLightStatusNight":{"name":"SDLAmbientLightStatusNight","abstract":"<p>Represents a <q>night</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight1":{"name":"SDLAmbientLightStatusTwilight1","abstract":"<p>Represents a <q>twilight 1</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight2":{"name":"SDLAmbientLightStatusTwilight2","abstract":"<p>Represents a <q>twilight 2</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight3":{"name":"SDLAmbientLightStatusTwilight3","abstract":"<p>Represents a <q>twilight 3</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight4":{"name":"SDLAmbientLightStatusTwilight4","abstract":"<p>Represents a <q>twilight 4</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusDay":{"name":"SDLAmbientLightStatusDay","abstract":"<p>Represents a <q>day</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusUnknown":{"name":"SDLAmbientLightStatusUnknown","abstract":"<p>Represents an <q>unknown</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusInvalid":{"name":"SDLAmbientLightStatusInvalid","abstract":"<p>Represents a <q>invalid</q> ambient light status</p>"},"Constants.html#/c:@SDLAppHMITypeDefault":{"name":"SDLAppHMITypeDefault","abstract":"<p>The App will have default rights.</p>"},"Constants.html#/c:@SDLAppHMITypeCommunication":{"name":"SDLAppHMITypeCommunication","abstract":"<p>Communication type of App</p>"},"Constants.html#/c:@SDLAppHMITypeMedia":{"name":"SDLAppHMITypeMedia","abstract":"<p>App dealing with Media</p>"},"Constants.html#/c:@SDLAppHMITypeMessaging":{"name":"SDLAppHMITypeMessaging","abstract":"<p>Messaging App</p>"},"Constants.html#/c:@SDLAppHMITypeNavigation":{"name":"SDLAppHMITypeNavigation","abstract":"<p>Navigation App</p>"},"Constants.html#/c:@SDLAppHMITypeInformation":{"name":"SDLAppHMITypeInformation","abstract":"<p>Information App</p>"},"Constants.html#/c:@SDLAppHMITypeSocial":{"name":"SDLAppHMITypeSocial","abstract":"<p>App dealing with social media</p>"},"Constants.html#/c:@SDLAppHMITypeProjection":{"name":"SDLAppHMITypeProjection","abstract":"<p>App dealing with Mobile Projection applications</p>"},"Constants.html#/c:@SDLAppHMITypeBackgroundProcess":{"name":"SDLAppHMITypeBackgroundProcess","abstract":"<p>App designed for use in the background</p>"},"Constants.html#/c:@SDLAppHMITypeTesting":{"name":"SDLAppHMITypeTesting","abstract":"<p>App only for Testing purposes</p>"},"Constants.html#/c:@SDLAppHMITypeSystem":{"name":"SDLAppHMITypeSystem","abstract":"<p>System App</p>"},"Constants.html#/c:@SDLAppHMITypeRemoteControl":{"name":"SDLAppHMITypeRemoteControl","abstract":"<p>Remote control</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonIgnitionOff":{"name":"SDLAppInterfaceUnregisteredReasonIgnitionOff","abstract":"<p>Vehicle ignition turned off.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonBluetoothOff":{"name":"SDLAppInterfaceUnregisteredReasonBluetoothOff","abstract":"<p>Bluetooth was turned off, causing termination of a necessary Bluetooth connection.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUSBDisconnected":{"name":"SDLAppInterfaceUnregisteredReasonUSBDisconnected","abstract":"<p>USB was disconnected, causing termination of a necessary iAP connection.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel":{"name":"SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonTooManyRequests":{"name":"SDLAppInterfaceUnregisteredReasonTooManyRequests","abstract":"<p>Either too many &ndash; or too many per unit of time &ndash; requests were made by the application.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonDriverDistractionViolation":{"name":"SDLAppInterfaceUnregisteredReasonDriverDistractionViolation","abstract":"<p>The application has issued requests which cause driver distraction rules to be violated.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonLanguageChange":{"name":"SDLAppInterfaceUnregisteredReasonLanguageChange","abstract":"<p>The user performed a language change on the SDL platform, causing the application to need to be reregistered for the new language.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonMasterReset":{"name":"SDLAppInterfaceUnregisteredReasonMasterReset","abstract":"<p>The user performed a MASTER RESET on the SDL platform, causing removal of a necessary Bluetooth pairing.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonFactoryDefaults":{"name":"SDLAppInterfaceUnregisteredReasonFactoryDefaults","abstract":"<p>The user restored settings to FACTORY DEFAULTS on the SDL platform.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonAppUnauthorized":{"name":"SDLAppInterfaceUnregisteredReasonAppUnauthorized","abstract":"<p>The app is not being authorized to be connected to SDL.</p>"},"Constants.html#/c:@SDLErrorDomainAudioStreamManager":{"name":"SDLErrorDomainAudioStreamManager","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamingStateAudible":{"name":"SDLAudioStreamingStateAudible","abstract":"<p>Currently streaming audio, if any, is audible to user.</p>"},"Constants.html#/c:@SDLAudioStreamingStateAttenuated":{"name":"SDLAudioStreamingStateAttenuated","abstract":"<p>Some kind of audio mixing is taking place. Currently streaming audio, if any, is audible to the user at a lowered volume.</p>"},"Constants.html#/c:@SDLAudioStreamingStateNotAudible":{"name":"SDLAudioStreamingStateNotAudible","abstract":"<p>Currently streaming audio, if any, is not audible to user. made via VR session.</p>"},"Constants.html#/c:@SDLAudioTypePCM":{"name":"SDLAudioTypePCM","abstract":"<p>PCM raw audio</p>"},"Constants.html#/c:@SDLBitsPerSample8Bit":{"name":"SDLBitsPerSample8Bit","abstract":"<p>8 bits per sample</p>"},"Constants.html#/c:@SDLBitsPerSample16Bit":{"name":"SDLBitsPerSample16Bit","abstract":"<p>16 bits per sample</p>"},"Constants.html#/c:@SDLButtonEventModeButtonUp":{"name":"SDLButtonEventModeButtonUp","abstract":"<p>The button was released</p>"},"Constants.html#/c:@SDLButtonEventModeButtonDown":{"name":"SDLButtonEventModeButtonDown","abstract":"<p>The button was depressed</p>"},"Constants.html#/c:@SDLButtonNameOk":{"name":"SDLButtonNameOk","abstract":"<p>Represents the button usually labeled <q>OK</q>. A typical use of this button is for the user to press it to make a selection.</p>"},"Constants.html#/c:@SDLButtonNameSeekLeft":{"name":"SDLButtonNameSeekLeft","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLButtonNameSeekRight":{"name":"SDLButtonNameSeekRight","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLButtonNameTuneUp":{"name":"SDLButtonNameTuneUp","abstract":"<p>Represents a turn of the tuner knob in the clockwise direction one tick.</p>"},"Constants.html#/c:@SDLButtonNameTuneDown":{"name":"SDLButtonNameTuneDown","abstract":"<p>Represents a turn of the tuner knob in the counter-clockwise direction one tick.</p>"},"Constants.html#/c:@SDLButtonNamePreset0":{"name":"SDLButtonNamePreset0","abstract":"<p>Represents the preset 0 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset1":{"name":"SDLButtonNamePreset1","abstract":"<p>Represents the preset 1 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset2":{"name":"SDLButtonNamePreset2","abstract":"<p>Represents the preset 2 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset3":{"name":"SDLButtonNamePreset3","abstract":"<p>Represents the preset 3 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset4":{"name":"SDLButtonNamePreset4","abstract":"<p>Represents the preset 4 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset5":{"name":"SDLButtonNamePreset5","abstract":"<p>Represents the preset 5 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset6":{"name":"SDLButtonNamePreset6","abstract":"<p>Represents the preset 6 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset7":{"name":"SDLButtonNamePreset7","abstract":"<p>Represents the preset 7 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset8":{"name":"SDLButtonNamePreset8","abstract":"<p>Represents the preset 8 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset9":{"name":"SDLButtonNamePreset9","abstract":"<p>Represents the preset 9 button.</p>"},"Constants.html#/c:@SDLButtonNameCustomButton":{"name":"SDLButtonNameCustomButton","abstract":"<p>Represents the Custom button.</p>"},"Constants.html#/c:@SDLButtonNameSearch":{"name":"SDLButtonNameSearch","abstract":"<p>Represents the SEARCH button.</p>"},"Constants.html#/c:@SDLButtonNameACMax":{"name":"SDLButtonNameACMax","abstract":"<p>Represents AC max button *</p>"},"Constants.html#/c:@SDLButtonNameAC":{"name":"SDLButtonNameAC","abstract":"<p>Represents AC button *</p>"},"Constants.html#/c:@SDLButtonNameRecirculate":{"name":"SDLButtonNameRecirculate","abstract":"<p>Represents a Recirculate button</p>"},"Constants.html#/c:@SDLButtonNameFanUp":{"name":"SDLButtonNameFanUp","abstract":"<p>Represents a Fan up button</p>"},"Constants.html#/c:@SDLButtonNameFanDown":{"name":"SDLButtonNameFanDown","abstract":"<p>Represents a fan down button</p>"},"Constants.html#/c:@SDLButtonNameTempUp":{"name":"SDLButtonNameTempUp","abstract":"<p>Represents a temperature up button</p>"},"Constants.html#/c:@SDLButtonNameTempDown":{"name":"SDLButtonNameTempDown","abstract":"<p>Represents a temperature down button</p>"},"Constants.html#/c:@SDLButtonNameDefrostMax":{"name":"SDLButtonNameDefrostMax","abstract":"<p>Represents a Defrost max button.</p>"},"Constants.html#/c:@SDLButtonNameDefrost":{"name":"SDLButtonNameDefrost","abstract":"<p>Represents a Defrost button.</p>"},"Constants.html#/c:@SDLButtonNameDefrostRear":{"name":"SDLButtonNameDefrostRear","abstract":"<p>Represents a Defrost rear button.</p>"},"Constants.html#/c:@SDLButtonNameUpperVent":{"name":"SDLButtonNameUpperVent","abstract":"<p>Represents a Upper Vent button.</p>"},"Constants.html#/c:@SDLButtonNameLowerVent":{"name":"SDLButtonNameLowerVent","abstract":"<p>Represents a Lower vent button.</p>"},"Constants.html#/c:@SDLButtonNameVolumeUp":{"name":"SDLButtonNameVolumeUp","abstract":"<p>Represents a volume up button.</p>"},"Constants.html#/c:@SDLButtonNameVolumeDown":{"name":"SDLButtonNameVolumeDown","abstract":"<p>Represents a volume down button.</p>"},"Constants.html#/c:@SDLButtonNameEject":{"name":"SDLButtonNameEject","abstract":"<p>Represents a Eject Button.</p>"},"Constants.html#/c:@SDLButtonNameSource":{"name":"SDLButtonNameSource","abstract":"<p>Represents a Source button.</p>"},"Constants.html#/c:@SDLButtonNameShuffle":{"name":"SDLButtonNameShuffle","abstract":"<p>Represents a SHUFFLE button.</p>"},"Constants.html#/c:@SDLButtonNameRepeat":{"name":"SDLButtonNameRepeat","abstract":"<p>Represents a Repeat button.</p>"},"Constants.html#/c:@SDLButtonPressModeLong":{"name":"SDLButtonPressModeLong","abstract":"<p>A button was released, after it was pressed for a long time. Actual timing is defined by the head unit and may vary.</p>"},"Constants.html#/c:@SDLButtonPressModeShort":{"name":"SDLButtonPressModeShort","abstract":"<p>A button was released, after it was pressed for a short time. Actual timing is defined by the head unit and may vary.</p>"},"Constants.html#/c:@SDLCarModeStatusNormal":{"name":"SDLCarModeStatusNormal","abstract":"<p>Provides carmode NORMAL to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusFactory":{"name":"SDLCarModeStatusFactory","abstract":"<p>Provides carmode FACTORY to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusTransport":{"name":"SDLCarModeStatusTransport","abstract":"<p>Provides carmode TRANSPORT to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusCrash":{"name":"SDLCarModeStatusCrash","abstract":"<p>Provides carmode CRASH to each module.</p>"},"Constants.html#/c:@SDLCharacterSetType2":{"name":"SDLCharacterSetType2","abstract":"<p>Character Set Type 2</p>"},"Constants.html#/c:@SDLCharacterSetType5":{"name":"SDLCharacterSetType5","abstract":"<p>Character Set Type 5</p>"},"Constants.html#/c:@SDLCharacterSetCID1":{"name":"SDLCharacterSetCID1","abstract":"<p>Character Set CID1</p>"},"Constants.html#/c:@SDLCharacterSetCID2":{"name":"SDLCharacterSetCID2","abstract":"<p>Character Set CID2</p>"},"Constants.html#/c:@SDLCompassDirectionNorth":{"name":"SDLCompassDirectionNorth","abstract":"<p>Direction North</p>"},"Constants.html#/c:@SDLCompassDirectionNorthwest":{"name":"SDLCompassDirectionNorthwest","abstract":"<p>Direction Northwest</p>"},"Constants.html#/c:@SDLCompassDirectionWest":{"name":"SDLCompassDirectionWest","abstract":"<p>Direction West</p>"},"Constants.html#/c:@SDLCompassDirectionSouthwest":{"name":"SDLCompassDirectionSouthwest","abstract":"<p>Direction Southwest</p>"},"Constants.html#/c:@SDLCompassDirectionSouth":{"name":"SDLCompassDirectionSouth","abstract":"<p>Direction South</p>"},"Constants.html#/c:@SDLCompassDirectionSoutheast":{"name":"SDLCompassDirectionSoutheast","abstract":"<p>Direction Southeast</p>"},"Constants.html#/c:@SDLCompassDirectionEast":{"name":"SDLCompassDirectionEast","abstract":"<p>Direction East</p>"},"Constants.html#/c:@SDLCompassDirectionNortheast":{"name":"SDLCompassDirectionNortheast","abstract":"<p>Direction Northeast</p>"},"Constants.html#/c:@SDLComponentVolumeStatusUnknown":{"name":"SDLComponentVolumeStatusUnknown","abstract":"<p>Unknown SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusNormal":{"name":"SDLComponentVolumeStatusNormal","abstract":"<p>Normal SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusLow":{"name":"SDLComponentVolumeStatusLow","abstract":"<p>Low SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusFault":{"name":"SDLComponentVolumeStatusFault","abstract":"<p>Fault SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusAlert":{"name":"SDLComponentVolumeStatusAlert","abstract":"<p>Alert SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusNotSupported":{"name":"SDLComponentVolumeStatusNotSupported","abstract":"<p>Not supported SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLDefrostZoneFront":{"name":"SDLDefrostZoneFront","abstract":"<p>A SDLDefrostZone with the value of <em>FRONT</em></p>"},"Constants.html#/c:@SDLDefrostZoneRear":{"name":"SDLDefrostZoneRear","abstract":"<p>A SDLDefrostZone with the value of <em>REAR</em></p>"},"Constants.html#/c:@SDLDefrostZoneAll":{"name":"SDLDefrostZoneAll","abstract":"<p>A SDLDefrostZone with the value of <em>All</em></p>"},"Constants.html#/c:@SDLDefrostZoneNone":{"name":"SDLDefrostZoneNone","abstract":"<p>A SDLDefrostZone with the value of <em>None</em></p>"},"Constants.html#/c:@SDLDeliveryModePrompt":{"name":"SDLDeliveryModePrompt","abstract":"<p>User is prompted on HMI</p>"},"Constants.html#/c:@SDLDeliveryModeDestination":{"name":"SDLDeliveryModeDestination","abstract":"<p>Set the location as destination without prompting the user</p>"},"Constants.html#/c:@SDLDeliveryModeQueue":{"name":"SDLDeliveryModeQueue","abstract":"<p>Adds the current location to navigation queue</p>"},"Constants.html#/c:@SDLDeviceLevelStatusZeroBars":{"name":"SDLDeviceLevelStatusZeroBars","abstract":"<p>Device battery level is zero bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusOneBar":{"name":"SDLDeviceLevelStatusOneBar","abstract":"<p>Device battery level is one bar</p>"},"Constants.html#/c:@SDLDeviceLevelStatusTwoBars":{"name":"SDLDeviceLevelStatusTwoBars","abstract":"<p>Device battery level is two bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusThreeBars":{"name":"SDLDeviceLevelStatusThreeBars","abstract":"<p>Device battery level is three bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusFourBars":{"name":"SDLDeviceLevelStatusFourBars","abstract":"<p>Device battery level is four bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusNotProvided":{"name":"SDLDeviceLevelStatusNotProvided","abstract":"<p>Device battery level is unknown</p>"},"Constants.html#/c:@SDLDimensionNoFix":{"name":"SDLDimensionNoFix","abstract":"<p>No GPS at all</p>"},"Constants.html#/c:@SDLDimension2D":{"name":"SDLDimension2D","abstract":"<p>Longitude and latitude of the GPS</p>"},"Constants.html#/c:@SDLDimension3D":{"name":"SDLDimension3D","abstract":"<p>Longitude and latitude and altitude of the GPS</p>"},"Constants.html#/c:@SDLDisplayTypeCID":{"name":"SDLDisplayTypeCID","abstract":"<p>This display type provides a 2-line x 20 character <q>dot matrix</q> display.</p>"},"Constants.html#/c:@SDLDisplayTypeType2":{"name":"SDLDisplayTypeType2","abstract":"<p>Display type 2</p>"},"Constants.html#/c:@SDLDisplayTypeType5":{"name":"SDLDisplayTypeType5","abstract":"<p>Display type 5</p>"},"Constants.html#/c:@SDLDisplayTypeNGN":{"name":"SDLDisplayTypeNGN","abstract":"<p>This display type provides an 8 inch touchscreen display.</p>"},"Constants.html#/c:@SDLDisplayTypeGen28DMA":{"name":"SDLDisplayTypeGen28DMA","abstract":"<p>Display type Gen 28 DMA</p>"},"Constants.html#/c:@SDLDisplayTypeGen26DMA":{"name":"SDLDisplayTypeGen26DMA","abstract":"<p>Display type Gen 26 DMA</p>"},"Constants.html#/c:@SDLDisplayTypeMFD3":{"name":"SDLDisplayTypeMFD3","abstract":"<p>Display type MFD3</p>"},"Constants.html#/c:@SDLDisplayTypeMFD4":{"name":"SDLDisplayTypeMFD4","abstract":"<p>Display type MFD4</p>"},"Constants.html#/c:@SDLDisplayTypeMFD5":{"name":"SDLDisplayTypeMFD5","abstract":"<p>Display type MFD5</p>"},"Constants.html#/c:@SDLDisplayTypeGen38Inch":{"name":"SDLDisplayTypeGen38Inch","abstract":"<p>Display type Gen 3 8-inch</p>"},"Constants.html#/c:@SDLDisplayTypeGeneric":{"name":"SDLDisplayTypeGeneric","abstract":"<p>Display type Generic</p>"},"Constants.html#/c:@SDLDriverDistractionStateOn":{"name":"SDLDriverDistractionStateOn","abstract":"<p>Driver distraction rules are in effect.</p>"},"Constants.html#/c:@SDLDriverDistractionStateOff":{"name":"SDLDriverDistractionStateOff","abstract":"<p>Driver distraction rules are NOT in effect.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusNormal":{"name":"SDLECallConfirmationStatusNormal","abstract":"<p>No E-Call signal triggered.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusInProgress":{"name":"SDLECallConfirmationStatusInProgress","abstract":"<p>An E-Call is being in progress.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCancelled":{"name":"SDLECallConfirmationStatusCancelled","abstract":"<p>An E-Call was cancelled by the user.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCompleted":{"name":"SDLECallConfirmationStatusCompleted","abstract":"<p>The E-Call sequence is completed.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusUnsuccessful":{"name":"SDLECallConfirmationStatusUnsuccessful","abstract":"<p>An E-Call could not be connected.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusConfiguredOff":{"name":"SDLECallConfirmationStatusConfiguredOff","abstract":"<p>E-Call is not configured on this vehicle.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCompleteDTMFTimeout":{"name":"SDLECallConfirmationStatusCompleteDTMFTimeout","abstract":"<p>E-Call is considered to be complete without Emergency Operator contact.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeNoEvent":{"name":"SDLEmergencyEventTypeNoEvent","abstract":"<p>No emergency event has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeFrontal":{"name":"SDLEmergencyEventTypeFrontal","abstract":"<p>Frontal collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeSide":{"name":"SDLEmergencyEventTypeSide","abstract":"<p>Side collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeRear":{"name":"SDLEmergencyEventTypeRear","abstract":"<p>Rear collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeRollover":{"name":"SDLEmergencyEventTypeRollover","abstract":"<p>A rollover event has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeNotSupported":{"name":"SDLEmergencyEventTypeNotSupported","abstract":"<p>The signal is not supported</p>"},"Constants.html#/c:@SDLEmergencyEventTypeFault":{"name":"SDLEmergencyEventTypeFault","abstract":"<p>Emergency status cannot be determined</p>"},"Constants.html#/c:@SDLFileTypeBMP":{"name":"SDLFileTypeBMP","abstract":"<p>file type: Bitmap (BMP)</p>"},"Constants.html#/c:@SDLFileTypeJPEG":{"name":"SDLFileTypeJPEG","abstract":"<p>file type: JPEG</p>"},"Constants.html#/c:@SDLFileTypePNG":{"name":"SDLFileTypePNG","abstract":"<p>file type: PNG</p>"},"Constants.html#/c:@SDLFileTypeWAV":{"name":"SDLFileTypeWAV","abstract":"<p>file type: WAVE (WAV)</p>"},"Constants.html#/c:@SDLFileTypeMP3":{"name":"SDLFileTypeMP3","abstract":"<p>file type: MP3</p>"},"Constants.html#/c:@SDLFileTypeAAC":{"name":"SDLFileTypeAAC","abstract":"<p>file type: AAC</p>"},"Constants.html#/c:@SDLFileTypeBinary":{"name":"SDLFileTypeBinary","abstract":"<p>file type: BINARY</p>"},"Constants.html#/c:@SDLFileTypeJSON":{"name":"SDLFileTypeJSON","abstract":"<p>file type: JSON</p>"},"Constants.html#/c:@SDLFuelCutoffStatusTerminateFuel":{"name":"SDLFuelCutoffStatusTerminateFuel","abstract":"<p>Fuel is cut off</p>"},"Constants.html#/c:@SDLFuelCutoffStatusNormalOperation":{"name":"SDLFuelCutoffStatusNormalOperation","abstract":"<p>Fuel is not cut off</p>"},"Constants.html#/c:@SDLFuelCutoffStatusFault":{"name":"SDLFuelCutoffStatusFault","abstract":"<p>Status of the fuel pump cannot be determined</p>"},"Constants.html#/c:@SDLGlobalPropertyHelpPrompt":{"name":"SDLGlobalPropertyHelpPrompt","abstract":"<p>The help prompt to be spoken if the user needs assistance during a user-initiated interaction.</p>"},"Constants.html#/c:@SDLGlobalPropertyTimeoutPrompt":{"name":"SDLGlobalPropertyTimeoutPrompt","abstract":"<p>The prompt to be spoken if the user-initiated interaction times out waiting for the user&rsquo;s verbal input.</p>"},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpTitle":{"name":"SDLGlobalPropertyVoiceRecognitionHelpTitle","abstract":"<p>The title of the menu displayed when the user requests help via voice recognition.</p>"},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpItems":{"name":"SDLGlobalPropertyVoiceRecognitionHelpItems","abstract":"<p>Items of the menu displayed when the user requests help via voice recognition.</p>"},"Constants.html#/c:@SDLGlobalPropertyMenuName":{"name":"SDLGlobalPropertyMenuName","abstract":"<p>The name of the menu button displayed in templates</p>"},"Constants.html#/c:@SDLGlobalPropertyMenuIcon":{"name":"SDLGlobalPropertyMenuIcon","abstract":"<p>An icon on the menu button displayed in templates</p>"},"Constants.html#/c:@SDLGlobalPropertyKeyboard":{"name":"SDLGlobalPropertyKeyboard","abstract":"<p>Property related to the keyboard</p>"},"Constants.html#/c:@SDLHMILevelFull":{"name":"SDLHMILevelFull","abstract":"<p>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</p>"},"Constants.html#/c:@SDLHMILevelLimited":{"name":"SDLHMILevelLimited","abstract":"<p>This HMI Level is only defined for a media application using an HMI with an 8 inch touchscreen (Nav) system. The application&rsquo;s Show text is displayed and it receives button presses from media-oriented buttons (SEEKRIGHT, SEEKLEFT, TUNEUP, TUNEDOWN, PRESET_0-9)</p>"},"Constants.html#/c:@SDLHMILevelBackground":{"name":"SDLHMILevelBackground","abstract":"<p>App cannot interact with user via TTS, VR, Display or Button Presses. App can perform the following operations:</p>"},"Constants.html#/c:@SDLHMILevelNone":{"name":"SDLHMILevelNone","abstract":"<p>Application has been discovered by SDL, but it cannot send any requests or receive any notifications</p>"},"Constants.html#/c:@SDLHMIZoneCapabilitiesFront":{"name":"SDLHMIZoneCapabilitiesFront","abstract":"<p>Indicates HMI available for front seat passengers.</p>"},"Constants.html#/c:@SDLHMIZoneCapabilitiesBack":{"name":"SDLHMIZoneCapabilitiesBack","abstract":"<p>Indicates HMI available for rear seat passengers.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusNotStable":{"name":"SDLIgnitionStableStatusNotStable","abstract":"<p>The current ignition switch status is considered not to be stable.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusStable":{"name":"SDLIgnitionStableStatusStable","abstract":"<p>The current ignition switch status is considered to be stable.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusMissingFromTransmitter":{"name":"SDLIgnitionStableStatusMissingFromTransmitter","abstract":"<p>The current ignition switch status is considered to be missing from the transmitter</p>"},"Constants.html#/c:@SDLIgnitionStatusUnknown":{"name":"SDLIgnitionStatusUnknown","abstract":"<p>Ignition status currently unknown</p>"},"Constants.html#/c:@SDLIgnitionStatusOff":{"name":"SDLIgnitionStatusOff","abstract":"<p>Ignition is off</p>"},"Constants.html#/c:@SDLIgnitionStatusAccessory":{"name":"SDLIgnitionStatusAccessory","abstract":"<p>Ignition is in mode accessory</p>"},"Constants.html#/c:@SDLIgnitionStatusRun":{"name":"SDLIgnitionStatusRun","abstract":"<p>Ignition is in mode run</p>"},"Constants.html#/c:@SDLIgnitionStatusStart":{"name":"SDLIgnitionStatusStart","abstract":"<p>Ignition is in mode start</p>"},"Constants.html#/c:@SDLIgnitionStatusInvalid":{"name":"SDLIgnitionStatusInvalid","abstract":"<p>Signal is invalid</p>"},"Constants.html#/c:@SDLImageFieldNameSoftButtonImage":{"name":"SDLImageFieldNameSoftButtonImage","abstract":"<p>The image field for SoftButton</p>"},"Constants.html#/c:@SDLImageFieldNameChoiceImage":{"name":"SDLImageFieldNameChoiceImage","abstract":"<p>The first image field for Choice.</p>"},"Constants.html#/c:@SDLImageFieldNameChoiceSecondaryImage":{"name":"SDLImageFieldNameChoiceSecondaryImage","abstract":"<p>The scondary image field for Choice.</p>"},"Constants.html#/c:@SDLImageFieldNameVoiceRecognitionHelpItem":{"name":"SDLImageFieldNameVoiceRecognitionHelpItem","abstract":"<p>The image field for vrHelpItem.</p>"},"Constants.html#/c:@SDLImageFieldNameTurnIcon":{"name":"SDLImageFieldNameTurnIcon","abstract":"<p>The image field for Turn.</p>"},"Constants.html#/c:@SDLImageFieldNameMenuIcon":{"name":"SDLImageFieldNameMenuIcon","abstract":"<p>The image field for the menu icon in SetGlobalProperties.</p>"},"Constants.html#/c:@SDLImageFieldNameCommandIcon":{"name":"SDLImageFieldNameCommandIcon","abstract":"<p>The image filed for AddCommand.</p>"},"Constants.html#/c:@SDLImageFieldNameAppIcon":{"name":"SDLImageFieldNameAppIcon","abstract":"<p>The image field for the app icon (set by setAppIcon).</p>"},"Constants.html#/c:@SDLImageFieldNameGraphic":{"name":"SDLImageFieldNameGraphic","abstract":"<p>The image filed for Show.</p>"},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTIcon":{"name":"SDLImageFieldNameShowConstantTBTIcon","abstract":"<p>The primary image field for ShowConstant TBT.</p>"},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTNextTurnIcon":{"name":"SDLImageFieldNameShowConstantTBTNextTurnIcon","abstract":"<p>The secondary image field for ShowConstant TBT.</p>"},"Constants.html#/c:@SDLImageFieldNameLocationImage":{"name":"SDLImageFieldNameLocationImage","abstract":"<p>The optional image of a destination / location</p>"},"Constants.html#/c:@SDLImageTypeStatic":{"name":"SDLImageTypeStatic","abstract":"<p>Activate an icon that shipped with the IVI system by passing a hex value.</p>"},"Constants.html#/c:@SDLImageTypeDynamic":{"name":"SDLImageTypeDynamic","abstract":"<p>An icon referencing an image uploaded by the app (identifier to be sent by SDLPutFile)</p>"},"Constants.html#/c:@SDLInteractionModeManualOnly":{"name":"SDLInteractionModeManualOnly","abstract":"<p>Interaction Mode : Manual Only</p>"},"Constants.html#/c:@SDLInteractionModeVoiceRecognitionOnly":{"name":"SDLInteractionModeVoiceRecognitionOnly","abstract":"<p>Interaction Mode : VR Only</p>"},"Constants.html#/c:@SDLInteractionModeBoth":{"name":"SDLInteractionModeBoth","abstract":"<p>Interaction Mode : Manual &amp; VR</p>"},"Constants.html#/c:@SDLKeyboardEventKeypress":{"name":"SDLKeyboardEventKeypress","abstract":"<p>The use has pressed the keyboard key (applies to both SINGLE_KEYPRESS and RESEND_CURRENT_ENTRY modes).</p>"},"Constants.html#/c:@SDLKeyboardEventSubmitted":{"name":"SDLKeyboardEventSubmitted","abstract":"<p>The User has finished entering text from the keyboard and submitted the entry.</p>"},"Constants.html#/c:@SDLKeyboardEventCancelled":{"name":"SDLKeyboardEventCancelled","abstract":"<p>The User has pressed the HMI-defined <q>Cancel</q> button.</p>"},"Constants.html#/c:@SDLKeyboardEventAborted":{"name":"SDLKeyboardEventAborted","abstract":"<p>The User has not finished entering text and the keyboard is aborted with the event of higher priority.</p>"},"Constants.html#/c:@SDLKeyboardEventVoice":{"name":"SDLKeyboardEventVoice","abstract":"<p>The user used voice as input for the keyboard</p>"},"Constants.html#/c:@SDLKeyboardLayoutQWERTY":{"name":"SDLKeyboardLayoutQWERTY","abstract":"<p>QWERTY layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeyboardLayoutQWERTZ":{"name":"SDLKeyboardLayoutQWERTZ","abstract":"<p>QWERTZ layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeyboardLayoutAZERTY":{"name":"SDLKeyboardLayoutAZERTY","abstract":"<p>AZERTY layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeypressModeSingleKeypress":{"name":"SDLKeypressModeSingleKeypress","abstract":"<p>SINGLE_KEYPRESS:<br>Each and every User`s keypress must be reported (new notification for every newly entered single symbol).</p>"},"Constants.html#/c:@SDLKeypressModeQueueKeypresses":{"name":"SDLKeypressModeQueueKeypresses","abstract":"<p>QUEUE_KEYPRESSES:<br>The whole entry is reported only after the User submits it (by ‘Search’ button click displayed on touchscreen keyboard)</p>"},"Constants.html#/c:@SDLKeypressModeResendCurrentEntry":{"name":"SDLKeypressModeResendCurrentEntry","abstract":"<p>RESEND_CURRENT_ENTRY:<br>The whole entry must be reported each and every time the User makes a new keypress<br> (new notification with all previously entered symbols and a newly entered one appended).</p>"},"Constants.html#/c:@SDLLanguageEnSa":{"name":"SDLLanguageEnSa","abstract":"<p>English_SA</p>"},"Constants.html#/c:@SDLLanguageHeIl":{"name":"SDLLanguageHeIl","abstract":"<p>Hebrew_IL</p>"},"Constants.html#/c:@SDLLanguageRoRo":{"name":"SDLLanguageRoRo","abstract":"<p>Romainian_RO</p>"},"Constants.html#/c:@SDLLanguageUkUa":{"name":"SDLLanguageUkUa","abstract":"<p>Ukrainian_UA</p>"},"Constants.html#/c:@SDLLanguageIdId":{"name":"SDLLanguageIdId","abstract":"<p>Indonesian_ID</p>"},"Constants.html#/c:@SDLLanguageViVn":{"name":"SDLLanguageViVn","abstract":"<p>Vietnamese_VN</p>"},"Constants.html#/c:@SDLLanguageMsMy":{"name":"SDLLanguageMsMy","abstract":"<p>Malay_MY</p>"},"Constants.html#/c:@SDLLanguageHiIn":{"name":"SDLLanguageHiIn","abstract":"<p>Hindi_IN</p>"},"Constants.html#/c:@SDLLanguageNlBe":{"name":"SDLLanguageNlBe","abstract":"<p>Dutch(Flemish)_BE</p>"},"Constants.html#/c:@SDLLanguageElGr":{"name":"SDLLanguageElGr","abstract":"<p>Greek_GR</p>"},"Constants.html#/c:@SDLLanguageHuHu":{"name":"SDLLanguageHuHu","abstract":"<p>Hungarian_HU</p>"},"Constants.html#/c:@SDLLanguageFiFi":{"name":"SDLLanguageFiFi","abstract":"<p>Finnish_FI</p>"},"Constants.html#/c:@SDLLanguageSkSk":{"name":"SDLLanguageSkSk","abstract":"<p>Slovak_SK</p>"},"Constants.html#/c:@SDLLanguageEnUs":{"name":"SDLLanguageEnUs","abstract":"<p>English_US</p>"},"Constants.html#/c:@SDLLanguageEnIn":{"name":"SDLLanguageEnIn","abstract":"<p>English - India</p>"},"Constants.html#/c:@SDLLanguageThTh":{"name":"SDLLanguageThTh","abstract":"<p>Thai - Thailand</p>"},"Constants.html#/c:@SDLLanguageEsMx":{"name":"SDLLanguageEsMx","abstract":"<p>Spanish - Mexico</p>"},"Constants.html#/c:@SDLLanguageFrCa":{"name":"SDLLanguageFrCa","abstract":"<p>French - Canada</p>"},"Constants.html#/c:@SDLLanguageDeDe":{"name":"SDLLanguageDeDe","abstract":"<p>German - Germany</p>"},"Constants.html#/c:@SDLLanguageEsEs":{"name":"SDLLanguageEsEs","abstract":"<p>Spanish - Spain</p>"},"Constants.html#/c:@SDLLanguageEnGb":{"name":"SDLLanguageEnGb","abstract":"<p>English - Great Britain</p>"},"Constants.html#/c:@SDLLanguageRuRu":{"name":"SDLLanguageRuRu","abstract":"<p>Russian - Russia</p>"},"Constants.html#/c:@SDLLanguageTrTr":{"name":"SDLLanguageTrTr","abstract":"<p>Turkish - Turkey</p>"},"Constants.html#/c:@SDLLanguagePlPl":{"name":"SDLLanguagePlPl","abstract":"<p>Polish - Poland</p>"},"Constants.html#/c:@SDLLanguageFrFr":{"name":"SDLLanguageFrFr","abstract":"<p>French - France</p>"},"Constants.html#/c:@SDLLanguageItIt":{"name":"SDLLanguageItIt","abstract":"<p>Italian - Italy</p>"},"Constants.html#/c:@SDLLanguageSvSe":{"name":"SDLLanguageSvSe","abstract":"<p>Swedish - Sweden</p>"},"Constants.html#/c:@SDLLanguagePtPt":{"name":"SDLLanguagePtPt","abstract":"<p>Portuguese - Portugal</p>"},"Constants.html#/c:@SDLLanguageNlNl":{"name":"SDLLanguageNlNl","abstract":"<p>Dutch (Standard) - Netherlands</p>"},"Constants.html#/c:@SDLLanguageEnAu":{"name":"SDLLanguageEnAu","abstract":"<p>English - Australia</p>"},"Constants.html#/c:@SDLLanguageZhCn":{"name":"SDLLanguageZhCn","abstract":"<p>Mandarin - China</p>"},"Constants.html#/c:@SDLLanguageZhTw":{"name":"SDLLanguageZhTw","abstract":"<p>Mandarin - Taiwan</p>"},"Constants.html#/c:@SDLLanguageJaJp":{"name":"SDLLanguageJaJp","abstract":"<p>Japanese - Japan</p>"},"Constants.html#/c:@SDLLanguageArSa":{"name":"SDLLanguageArSa","abstract":"<p>Arabic - Saudi Arabia</p>"},"Constants.html#/c:@SDLLanguageKoKr":{"name":"SDLLanguageKoKr","abstract":"<p>Korean - South Korea</p>"},"Constants.html#/c:@SDLLanguagePtBr":{"name":"SDLLanguagePtBr","abstract":"<p>Portuguese - Brazil</p>"},"Constants.html#/c:@SDLLanguageCsCz":{"name":"SDLLanguageCsCz","abstract":"<p>Czech - Czech Republic</p>"},"Constants.html#/c:@SDLLanguageDaDk":{"name":"SDLLanguageDaDk","abstract":"<p>Danish - Denmark</p>"},"Constants.html#/c:@SDLLanguageNoNo":{"name":"SDLLanguageNoNo","abstract":"<p>Norwegian - Norway</p>"},"Constants.html#/c:@SDLLayoutModeIconOnly":{"name":"SDLLayoutModeIconOnly","abstract":"<p>This mode causes the interaction to display the previous set of choices as icons.</p>"},"Constants.html#/c:@SDLLayoutModeIconWithSearch":{"name":"SDLLayoutModeIconWithSearch","abstract":"<p>This mode causes the interaction to display the previous set of choices as icons along with a search field in the HMI.</p>"},"Constants.html#/c:@SDLLayoutModeListOnly":{"name":"SDLLayoutModeListOnly","abstract":"<p>This mode causes the interaction to display the previous set of choices as a list.</p>"},"Constants.html#/c:@SDLLayoutModeListWithSearch":{"name":"SDLLayoutModeListWithSearch","abstract":"<p>This mode causes the interaction to display the previous set of choices as a list along with a search field in the HMI.</p>"},"Constants.html#/c:@SDLLayoutModeKeyboard":{"name":"SDLLayoutModeKeyboard","abstract":"<p>This mode causes the interaction to immediately display a keyboard entry through the HMI.</p>"},"Constants.html#/c:@SDLLockScreenStatusOff":{"name":"SDLLockScreenStatusOff","abstract":"<p>LockScreen is Not Required</p>"},"Constants.html#/c:@SDLLockScreenStatusOptional":{"name":"SDLLockScreenStatusOptional","abstract":"<p>LockScreen is Optional</p>"},"Constants.html#/c:@SDLLockScreenStatusRequired":{"name":"SDLLockScreenStatusRequired","abstract":"<p>LockScreen is Not Required</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusNormal":{"name":"SDLMaintenanceModeStatusNormal","abstract":"<p>Maintenance Mode Status : Normal</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusNear":{"name":"SDLMaintenanceModeStatusNear","abstract":"<p>Maintenance Mode Status : Near</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusActive":{"name":"SDLMaintenanceModeStatusActive","abstract":"<p>Maintenance Mode Status : Active</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusFeatureNotPresent":{"name":"SDLMaintenanceModeStatusFeatureNotPresent","abstract":"<p>Maintenance Mode Status : Feature not present</p>"},"Constants.html#/c:@SDLMediaClockFormatClock1":{"name":"SDLMediaClockFormatClock1","abstract":"<p>Media clock format: Clock1</p>"},"Constants.html#/c:@SDLMediaClockFormatClock2":{"name":"SDLMediaClockFormatClock2","abstract":"<p>Media clock format: Clock2</p>"},"Constants.html#/c:@SDLMediaClockFormatClock3":{"name":"SDLMediaClockFormatClock3","abstract":"<p>Media clock format: Clock3</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText1":{"name":"SDLMediaClockFormatClockText1","abstract":"<p>Media clock format: ClockText1</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText2":{"name":"SDLMediaClockFormatClockText2","abstract":"<p>Media clock format: ClockText2</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText3":{"name":"SDLMediaClockFormatClockText3","abstract":"<p>Media clock format: ClockText3</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText4":{"name":"SDLMediaClockFormatClockText4","abstract":"<p>Media clock format: ClockText4</p>"},"Constants.html#/c:@SDLMetadataTypeMediaTitle":{"name":"SDLMetadataTypeMediaTitle","abstract":"<p>The song / media title name</p>"},"Constants.html#/c:@SDLMetadataTypeMediaArtist":{"name":"SDLMetadataTypeMediaArtist","abstract":"<p>The <q>artist</q> of the media</p>"},"Constants.html#/c:@SDLMetadataTypeMediaAlbum":{"name":"SDLMetadataTypeMediaAlbum","abstract":"<p>The <q>album</q> of the media&quot;</p>"},"Constants.html#/c:@SDLMetadataTypeMediaYear":{"name":"SDLMetadataTypeMediaYear","abstract":"<p>The <q>year</q> that the media was created</p>"},"Constants.html#/c:@SDLMetadataTypeMediaGenre":{"name":"SDLMetadataTypeMediaGenre","abstract":"<p>The <q>genre</q> of the media</p>"},"Constants.html#/c:@SDLMetadataTypeMediaStation":{"name":"SDLMetadataTypeMediaStation","abstract":"<p>The <q>station</q> that the media is playing on</p>"},"Constants.html#/c:@SDLMetadataTypeRating":{"name":"SDLMetadataTypeRating","abstract":"<p>The <q>rating</q> given to the media</p>"},"Constants.html#/c:@SDLMetadataTypeCurrentTemperature":{"name":"SDLMetadataTypeCurrentTemperature","abstract":"<p>The current temperature of the weather information</p>"},"Constants.html#/c:@SDLMetadataTypeMaximumTemperature":{"name":"SDLMetadataTypeMaximumTemperature","abstract":"<p>The high / maximum temperature of the weather information for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeMinimumTemperature":{"name":"SDLMetadataTypeMinimumTemperature","abstract":"<p>The low / minimum temperature of the weather information for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeWeatherTerm":{"name":"SDLMetadataTypeWeatherTerm","abstract":"<p>A description of the weather for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeHumidity":{"name":"SDLMetadataTypeHumidity","abstract":"<p>The humidity of the weather information for the current period</p>"},"Constants.html#/c:@SDLModuleTypeClimate":{"name":"SDLModuleTypeClimate","abstract":"<p>A SDLModuleType with the value of <em>CLIMATE</em></p>"},"Constants.html#/c:@SDLModuleTypeRadio":{"name":"SDLModuleTypeRadio","abstract":"<p>A SDLModuleType with the value of <em>RADIO</em></p>"},"Constants.html#/c:@SDLNotificationUserInfoObject":{"name":"SDLNotificationUserInfoObject","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLTransportDidDisconnect":{"name":"SDLTransportDidDisconnect","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLTransportDidConnect":{"name":"SDLTransportDidConnect","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveError":{"name":"SDLDidReceiveError","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveLockScreenIcon":{"name":"SDLDidReceiveLockScreenIcon","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidBecomeReady":{"name":"SDLDidBecomeReady","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidUpdateProjectionView":{"name":"SDLDidUpdateProjectionView","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAddCommandResponse":{"name":"SDLDidReceiveAddCommandResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAddSubMenuResponse":{"name":"SDLDidReceiveAddSubMenuResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAlertResponse":{"name":"SDLDidReceiveAlertResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAlertManeuverResponse":{"name":"SDLDidReceiveAlertManeuverResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressResponse":{"name":"SDLDidReceiveButtonPressResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveChangeRegistrationResponse":{"name":"SDLDidReceiveChangeRegistrationResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetResponse":{"name":"SDLDidReceiveCreateInteractionChoiceSetResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDeleteCommandResponse":{"name":"SDLDidReceiveDeleteCommandResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDeleteFileResponse":{"name":"SDLDidReceiveDeleteFileResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetResponse":{"name":"SDLDidReceiveDeleteInteractionChoiceSetResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDeleteSubmenuResponse":{"name":"SDLDidReceiveDeleteSubmenuResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageResponse":{"name":"SDLDidReceiveDiagnosticMessageResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDialNumberResponse":{"name":"SDLDidReceiveDialNumberResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataResponse":{"name":"SDLDidReceiveEncodedSyncPDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruResponse":{"name":"SDLDidReceiveEndAudioPassThruResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGenericResponse":{"name":"SDLDidReceiveGenericResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetDTCsResponse":{"name":"SDLDidReceiveGetDTCsResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilitiesResponse":{"name":"SDLDidReceiveGetSystemCapabilitiesResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetVehicleDataResponse":{"name":"SDLDidReceiveGetVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetWaypointsResponse":{"name":"SDLDidReceiveGetWaypointsResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveListFilesResponse":{"name":"SDLDidReceiveListFilesResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruResponse":{"name":"SDLDidReceivePerformAudioPassThruResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceivePerformInteractionResponse":{"name":"SDLDidReceivePerformInteractionResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceivePutFileResponse":{"name":"SDLDidReceivePutFileResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveReadDIDResponse":{"name":"SDLDidReceiveReadDIDResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceResponse":{"name":"SDLDidReceiveRegisterAppInterfaceResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesResponse":{"name":"SDLDidReceiveResetGlobalPropertiesResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveScrollableMessageResponse":{"name":"SDLDidReceiveScrollableMessageResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSendHapticDataResponse":{"name":"SDLDidReceiveSendHapticDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSendLocationResponse":{"name":"SDLDidReceiveSendLocationResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetAppIconResponse":{"name":"SDLDidReceiveSetAppIconResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutResponse":{"name":"SDLDidReceiveSetDisplayLayoutResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesResponse":{"name":"SDLDidReceiveSetGlobalPropertiesResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataResponse":{"name":"SDLDidReceiveSetInteriorVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerResponse":{"name":"SDLDidReceiveSetMediaClockTimerResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveShowConstantTBTResponse":{"name":"SDLDidReceiveShowConstantTBTResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveShowResponse":{"name":"SDLDidReceiveShowResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSliderResponse":{"name":"SDLDidReceiveSliderResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSpeakResponse":{"name":"SDLDidReceiveSpeakResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeButtonResponse":{"name":"SDLDidReceiveSubscribeButtonResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataResponse":{"name":"SDLDidReceiveSubscribeVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeWaypointsResponse":{"name":"SDLDidReceiveSubscribeWaypointsResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSyncPDataResponse":{"name":"SDLDidReceiveSyncPDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUpdateTurnListResponse":{"name":"SDLDidReceiveUpdateTurnListResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceResponse":{"name":"SDLDidReceiveUnregisterAppInterfaceResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonResponse":{"name":"SDLDidReceiveUnsubscribeButtonResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataResponse":{"name":"SDLDidReceiveUnsubscribeVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeWaypointsResponse":{"name":"SDLDidReceiveUnsubscribeWaypointsResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeDriverDistractionStateNotification":{"name":"SDLDidChangeDriverDistractionStateNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeHMIStatusNotification":{"name":"SDLDidChangeHMIStatusNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAudioPassThruNotification":{"name":"SDLDidReceiveAudioPassThruNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAppUnregisteredNotification":{"name":"SDLDidReceiveAppUnregisteredNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveButtonEventNotification":{"name":"SDLDidReceiveButtonEventNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressNotification":{"name":"SDLDidReceiveButtonPressNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveCommandNotification":{"name":"SDLDidReceiveCommandNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveEncodedDataNotification":{"name":"SDLDidReceiveEncodedDataNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveInteriorVehicleDataNotification":{"name":"SDLDidReceiveInteriorVehicleDataNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveKeyboardInputNotification":{"name":"SDLDidReceiveKeyboardInputNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeLanguageNotification":{"name":"SDLDidChangeLanguageNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeLockScreenStatusNotification":{"name":"SDLDidChangeLockScreenStatusNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveNewHashNotification":{"name":"SDLDidReceiveNewHashNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveVehicleIconNotification":{"name":"SDLDidReceiveVehicleIconNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangePermissionsNotification":{"name":"SDLDidChangePermissionsNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSystemRequestNotification":{"name":"SDLDidReceiveSystemRequestNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeTurnByTurnStateNotification":{"name":"SDLDidChangeTurnByTurnStateNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveTouchEventNotification":{"name":"SDLDidReceiveTouchEventNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveVehicleDataNotification":{"name":"SDLDidReceiveVehicleDataNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveWaypointNotification":{"name":"SDLDidReceiveWaypointNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLPRNDLPark":{"name":"SDLPRNDLPark","abstract":"<p>Park</p>"},"Constants.html#/c:@SDLPRNDLReverse":{"name":"SDLPRNDLReverse","abstract":"<p>Reverse gear</p>"},"Constants.html#/c:@SDLPRNDLNeutral":{"name":"SDLPRNDLNeutral","abstract":"<p>No gear</p>"},"Constants.html#/c:@SDLPRNDLDrive":{"name":"SDLPRNDLDrive","abstract":"<p>@abstract: Drive gear</p>"},"Constants.html#/c:@SDLPRNDLSport":{"name":"SDLPRNDLSport","abstract":"<p>Drive Sport mode</p>"},"Constants.html#/c:@SDLPRNDLLowGear":{"name":"SDLPRNDLLowGear","abstract":"<p>1st gear hold</p>"},"Constants.html#/c:@SDLPRNDLFirst":{"name":"SDLPRNDLFirst","abstract":"<p>First gear</p>"},"Constants.html#/c:@SDLPRNDLSecond":{"name":"SDLPRNDLSecond","abstract":"<p>Second gear</p>"},"Constants.html#/c:@SDLPRNDLThird":{"name":"SDLPRNDLThird","abstract":"<p>Third gear</p>"},"Constants.html#/c:@SDLPRNDLFourth":{"name":"SDLPRNDLFourth","abstract":"<p>Fourth gear</p>"},"Constants.html#/c:@SDLPRNDLFifth":{"name":"SDLPRNDLFifth","abstract":"<p>Fifth gear</p>"},"Constants.html#/c:@SDLPRNDLSixth":{"name":"SDLPRNDLSixth","abstract":"<p>Sixth gear</p>"},"Constants.html#/c:@SDLPRNDLSeventh":{"name":"SDLPRNDLSeventh","abstract":"<p>Seventh gear</p>"},"Constants.html#/c:@SDLPRNDLEighth":{"name":"SDLPRNDLEighth","abstract":"<p>Eighth gear</p>"},"Constants.html#/c:@SDLPRNDLUnknown":{"name":"SDLPRNDLUnknown","abstract":"<p>Unknown</p>"},"Constants.html#/c:@SDLPRNDLFault":{"name":"SDLPRNDLFault","abstract":"<p>Fault</p>"},"Constants.html#/c:@SDLPermissionStatusAllowed":{"name":"SDLPermissionStatusAllowed","abstract":"<p>permission: allowed</p>"},"Constants.html#/c:@SDLPermissionStatusDisallowed":{"name":"SDLPermissionStatusDisallowed","abstract":"<p>permission: disallowed</p>"},"Constants.html#/c:@SDLPermissionStatusUserDisallowed":{"name":"SDLPermissionStatusUserDisallowed","abstract":"<p>permission: user disallowed</p>"},"Constants.html#/c:@SDLPermissionStatusUserConsentPending":{"name":"SDLPermissionStatusUserConsentPending","abstract":"<p>permission: user consent pending</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusUndefined":{"name":"SDLPowerModeQualificationStatusUndefined","abstract":"<p>An undefined status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusEvaluationInProgress":{"name":"SDLPowerModeQualificationStatusEvaluationInProgress","abstract":"<p>An <q>evaluation in progress</q> status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusNotDefined":{"name":"SDLPowerModeQualificationStatusNotDefined","abstract":"<p>A <q>not defined</q> status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusOk":{"name":"SDLPowerModeQualificationStatusOk","abstract":"<p>An <q>ok</q> status</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyOut":{"name":"SDLPowerModeStatusKeyOut","abstract":"<p>The key is not in the ignition, and the power is off</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyRecentlyOut":{"name":"SDLPowerModeStatusKeyRecentlyOut","abstract":"<p>The key is not in the ignition and it was just recently removed</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyApproved":{"name":"SDLPowerModeStatusKeyApproved","abstract":"<p>The key is not in the ignition, but an approved key is available</p>"},"Constants.html#/c:@SDLPowerModeStatusPostAccessory":{"name":"SDLPowerModeStatusPostAccessory","abstract":"<p>We are in a post-accessory power situation</p>"},"Constants.html#/c:@SDLPowerModeStatusAccessory":{"name":"SDLPowerModeStatusAccessory","abstract":"<p>The car is in accessory power mode</p>"},"Constants.html#/c:@SDLPowerModeStatusPostIgnition":{"name":"SDLPowerModeStatusPostIgnition","abstract":"<p>We are in a post-ignition power situation</p>"},"Constants.html#/c:@SDLPowerModeStatusIgnitionOn":{"name":"SDLPowerModeStatusIgnitionOn","abstract":"<p>The ignition is on but the car is not yet running</p>"},"Constants.html#/c:@SDLPowerModeStatusRunning":{"name":"SDLPowerModeStatusRunning","abstract":"<p>The ignition is on and the car is running</p>"},"Constants.html#/c:@SDLPowerModeStatusCrank":{"name":"SDLPowerModeStatusCrank","abstract":"<p>We are in a crank power situation</p>"},"Constants.html#/c:@SDLPredefinedLayoutDefault":{"name":"SDLPredefinedLayoutDefault","abstract":"<p>A default layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutMedia":{"name":"SDLPredefinedLayoutMedia","abstract":"<p>The default media layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutNonMedia":{"name":"SDLPredefinedLayoutNonMedia","abstract":"<p>The default non-media layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutOnscreenPresets":{"name":"SDLPredefinedLayoutOnscreenPresets","abstract":"<p>A media layout containing preset buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationFullscreenMap":{"name":"SDLPredefinedLayoutNavigationFullscreenMap","abstract":"<p>The default navigation layout with a fullscreen map</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationList":{"name":"SDLPredefinedLayoutNavigationList","abstract":"<p>A list layout used for navigation apps</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationKeyboard":{"name":"SDLPredefinedLayoutNavigationKeyboard","abstract":"<p>A keyboard layout used for navigation apps</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithText":{"name":"SDLPredefinedLayoutGraphicWithText","abstract":"<p>A layout with a single graphic on the left and text on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextWithGraphic":{"name":"SDLPredefinedLayoutTextWithGraphic","abstract":"<p>A layout with text on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTilesOnly":{"name":"SDLPredefinedLayoutTilesOnly","abstract":"<p>A layout with only softbuttons placed in a tile layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsOnly":{"name":"SDLPredefinedLayoutTextButtonsOnly","abstract":"<p>A layout with only soft buttons that only accept text</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTiles":{"name":"SDLPredefinedLayoutGraphicWithTiles","abstract":"<p>A layout with a single graphic on the left and soft buttons in a tile layout on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTilesWithGraphic":{"name":"SDLPredefinedLayoutTilesWithGraphic","abstract":"<p>A layout with soft buttons in a tile layout on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextAndSoftButtons":{"name":"SDLPredefinedLayoutGraphicWithTextAndSoftButtons","abstract":"<p>A layout with a single graphic on the left and both text and soft buttons on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextAndSoftButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextAndSoftButtonsWithGraphic","abstract":"<p>A layout with both text and soft buttons on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextButtons":{"name":"SDLPredefinedLayoutGraphicWithTextButtons","abstract":"<p>A layout with a single graphic on the left and text-only soft buttons on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextButtonsWithGraphic","abstract":"<p>A layout with text-only soft buttons on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutLargeGraphicWithSoftButtons","abstract":"<p>A layout with a single large graphic and soft buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutDoubleGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutDoubleGraphicWithSoftButtons","abstract":"<p>A layout with two graphics and soft buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicOnly":{"name":"SDLPredefinedLayoutLargeGraphicOnly","abstract":"<p>A layout with only a single large graphic</p>"},"Constants.html#/c:@SDLPrerecordedSpeechHelp":{"name":"SDLPrerecordedSpeechHelp","abstract":"<p>A prerecorded help prompt</p>"},"Constants.html#/c:@SDLPrerecordedSpeechInitial":{"name":"SDLPrerecordedSpeechInitial","abstract":"<p>A prerecorded initial prompt</p>"},"Constants.html#/c:@SDLPrerecordedSpeechListen":{"name":"SDLPrerecordedSpeechListen","abstract":"<p>A prerecorded listen prompt is available</p>"},"Constants.html#/c:@SDLPrerecordedSpeechPositive":{"name":"SDLPrerecordedSpeechPositive","abstract":"<p>A prerecorded positive indicator noise is available</p>"},"Constants.html#/c:@SDLPrerecordedSpeechNegative":{"name":"SDLPrerecordedSpeechNegative","abstract":"<p>A prerecorded negative indicator noise is available</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceNoSourceSelected":{"name":"SDLPrimaryAudioSourceNoSourceSelected","abstract":"<p>Currently no source selected</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceUSB":{"name":"SDLPrimaryAudioSourceUSB","abstract":"<p>USB is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceUSB2":{"name":"SDLPrimaryAudioSourceUSB2","abstract":"<p>USB2 is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceBluetoothStereo":{"name":"SDLPrimaryAudioSourceBluetoothStereo","abstract":"<p>Bluetooth Stereo is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceLineIn":{"name":"SDLPrimaryAudioSourceLineIn","abstract":"<p>Line in is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceIpod":{"name":"SDLPrimaryAudioSourceIpod","abstract":"<p>iPod is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceMobileApp":{"name":"SDLPrimaryAudioSourceMobileApp","abstract":"<p>Mobile app is current source</p>"},"Constants.html#/c:@SDLRadioBandAM":{"name":"SDLRadioBandAM","abstract":"<p>Represents AM radio band</p>"},"Constants.html#/c:@SDLRadioBandFM":{"name":"SDLRadioBandFM","abstract":"<p>Represents FM radio band</p>"},"Constants.html#/c:@SDLRadioBandXM":{"name":"SDLRadioBandXM","abstract":"<p>Represents XM radio band</p>"},"Constants.html#/c:@SDLRadioStateAcquiring":{"name":"SDLRadioStateAcquiring","abstract":"<p>Represents Radio state as ACQUIRING</p>"},"Constants.html#/c:@SDLRadioStateAcquired":{"name":"SDLRadioStateAcquired","abstract":"<p>Represents Radio state as ACQUIRED</p>"},"Constants.html#/c:@SDLRadioStateMulticast":{"name":"SDLRadioStateMulticast","abstract":"<p>Represents Radio state as MULTICAST</p>"},"Constants.html#/c:@SDLRadioStateNotFound":{"name":"SDLRadioStateNotFound","abstract":"<p>Represents Radio state as NOT_FOUND</p>"},"Constants.html#/c:@SDLRequestTypeHTTP":{"name":"SDLRequestTypeHTTP","abstract":"<p>An HTTP request</p>"},"Constants.html#/c:@SDLRequestTypeFileResume":{"name":"SDLRequestTypeFileResume","abstract":"<p>A file resumption request</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationRequest":{"name":"SDLRequestTypeAuthenticationRequest","abstract":"<p>An authentication request</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationChallenge":{"name":"SDLRequestTypeAuthenticationChallenge","abstract":"<p>An authentication challenge</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationAck":{"name":"SDLRequestTypeAuthenticationAck","abstract":"<p>An authentication acknowledgment</p>"},"Constants.html#/c:@SDLRequestTypeProprietary":{"name":"SDLRequestTypeProprietary","abstract":"<p>An proprietary formatted request</p>"},"Constants.html#/c:@SDLRequestTypeQueryApps":{"name":"SDLRequestTypeQueryApps","abstract":"<p>An Query Apps request</p>"},"Constants.html#/c:@SDLRequestTypeLaunchApp":{"name":"SDLRequestTypeLaunchApp","abstract":"<p>A Launch Apps request</p>"},"Constants.html#/c:@SDLRequestTypeLockScreenIconURL":{"name":"SDLRequestTypeLockScreenIconURL","abstract":"<p>The URL for a lock screen icon</p>"},"Constants.html#/c:@SDLRequestTypeTrafficMessageChannel":{"name":"SDLRequestTypeTrafficMessageChannel","abstract":"<p>A traffic message channel request</p>"},"Constants.html#/c:@SDLRequestTypeDriverProfile":{"name":"SDLRequestTypeDriverProfile","abstract":"<p>A driver profile request</p>"},"Constants.html#/c:@SDLRequestTypeVoiceSearch":{"name":"SDLRequestTypeVoiceSearch","abstract":"<p>A voice search request</p>"},"Constants.html#/c:@SDLRequestTypeNavigation":{"name":"SDLRequestTypeNavigation","abstract":"<p>A navigation request</p>"},"Constants.html#/c:@SDLRequestTypePhone":{"name":"SDLRequestTypePhone","abstract":"<p>A phone request</p>"},"Constants.html#/c:@SDLRequestTypeClimate":{"name":"SDLRequestTypeClimate","abstract":"<p>A climate request</p>"},"Constants.html#/c:@SDLRequestTypeSettings":{"name":"SDLRequestTypeSettings","abstract":"<p>A settings request</p>"},"Constants.html#/c:@SDLRequestTypeVehicleDiagnostics":{"name":"SDLRequestTypeVehicleDiagnostics","abstract":"<p>A vehicle diagnostics request</p>"},"Constants.html#/c:@SDLRequestTypeEmergency":{"name":"SDLRequestTypeEmergency","abstract":"<p>An emergency request</p>"},"Constants.html#/c:@SDLRequestTypeMedia":{"name":"SDLRequestTypeMedia","abstract":"<p>A media request</p>"},"Constants.html#/c:@SDLRequestTypeFOTA":{"name":"SDLRequestTypeFOTA","abstract":"<p>A firmeware over-the-air request</p>"},"Constants.html#/c:@SDLResultSuccess":{"name":"SDLResultSuccess","abstract":"<p>The request succeeded</p>"},"Constants.html#/c:@SDLResultInvalidData":{"name":"SDLResultInvalidData","abstract":"<p>The request contained invalid data</p>"},"Constants.html#/c:@SDLResultCharacterLimitExceeded":{"name":"SDLResultCharacterLimitExceeded","abstract":"<p>The request had a string containing too many characters</p>"},"Constants.html#/c:@SDLResultUnsupportedRequest":{"name":"SDLResultUnsupportedRequest","abstract":"<p>The request is not supported by the IVI unit implementing SDL</p>"},"Constants.html#/c:@SDLResultOutOfMemory":{"name":"SDLResultOutOfMemory","abstract":"<p>The system could not process the request because the necessary memory couldn&rsquo;t be allocated</p>"},"Constants.html#/c:@SDLResultTooManyPendingRequests":{"name":"SDLResultTooManyPendingRequests","abstract":"<p>There are too many requests pending (means that the response has not been delivered yet).</p>"},"Constants.html#/c:@SDLResultInvalidId":{"name":"SDLResultInvalidId","abstract":"<p>One of the provided IDs is not valid.</p>"},"Constants.html#/c:@SDLResultDuplicateName":{"name":"SDLResultDuplicateName","abstract":"<p>The provided name or synonym is a duplicate of some already-defined name or synonym.</p>"},"Constants.html#/c:@SDLResultTooManyApplications":{"name":"SDLResultTooManyApplications","abstract":"<p>There are already too many registered applications.</p>"},"Constants.html#/c:@SDLResultApplicationRegisteredAlready":{"name":"SDLResultApplicationRegisteredAlready","abstract":"<p>RegisterAppInterface has been called, but this app is already registered</p>"},"Constants.html#/c:@SDLResultUnsupportedVersion":{"name":"SDLResultUnsupportedVersion","abstract":"<p>The Head Unit doesn&rsquo;t support the SDL version that is requested by the mobile application.</p>"},"Constants.html#/c:@SDLResultWrongLanguage":{"name":"SDLResultWrongLanguage","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultApplicationNotRegistered":{"name":"SDLResultApplicationNotRegistered","abstract":"<p>A command can not be executed because no application has been registered with RegisterApplication.</p>"},"Constants.html#/c:@SDLResultInUse":{"name":"SDLResultInUse","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultVehicleDataNotAllowed":{"name":"SDLResultVehicleDataNotAllowed","abstract":"<p>The user has turned off access to vehicle data, and it is globally unavailable to mobile applications.</p>"},"Constants.html#/c:@SDLResultVehicleDataNotAvailable":{"name":"SDLResultVehicleDataNotAvailable","abstract":"<p>The requested vehicle data is not available on this vehicle or is not published.</p>"},"Constants.html#/c:@SDLResultRejected":{"name":"SDLResultRejected","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultAborted":{"name":"SDLResultAborted","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultIgnored":{"name":"SDLResultIgnored","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultUnsupportedResource":{"name":"SDLResultUnsupportedResource","abstract":"<p>A button that was requested for subscription is not supported under the current system.</p>"},"Constants.html#/c:@SDLResultFileNotFound":{"name":"SDLResultFileNotFound","abstract":"<p>A specified file could not be found on the head unit.</p>"},"Constants.html#/c:@SDLResultGenericError":{"name":"SDLResultGenericError","abstract":"<p>Provided data is valid but something went wrong in the lower layers.</p>"},"Constants.html#/c:@SDLResultDisallowed":{"name":"SDLResultDisallowed","abstract":"<p>RPC is not authorized in local policy table.</p>"},"Constants.html#/c:@SDLResultUserDisallowed":{"name":"SDLResultUserDisallowed","abstract":"<p>RPC is included in a functional group explicitly blocked by the user.</p>"},"Constants.html#/c:@SDLResultTimedOut":{"name":"SDLResultTimedOut","abstract":"<p>Overlay reached the maximum timeout and closed.</p>"},"Constants.html#/c:@SDLResultCancelRoute":{"name":"SDLResultCancelRoute","abstract":"<p>User selected to Cancel Route.</p>"},"Constants.html#/c:@SDLResultTruncatedData":{"name":"SDLResultTruncatedData","abstract":"<p>The RPC (e.g. ReadDID) executed successfully but the data exceeded the platform maximum threshold and thus, only part of the data is available.</p>"},"Constants.html#/c:@SDLResultRetry":{"name":"SDLResultRetry","abstract":"<p>The user interrupted the RPC (e.g. PerformAudioPassThru) and indicated to start over. Note, the app must issue the new RPC.</p>"},"Constants.html#/c:@SDLResultWarnings":{"name":"SDLResultWarnings","abstract":"<p>The RPC (e.g. SubscribeVehicleData) executed successfully but one or more items have a warning or failure.</p>"},"Constants.html#/c:@SDLResultSaved":{"name":"SDLResultSaved","abstract":"<p>The RPC (e.g. Slider) executed successfully and the user elected to save the current position / value.</p>"},"Constants.html#/c:@SDLResultInvalidCertificate":{"name":"SDLResultInvalidCertificate","abstract":"<p>The certificate provided during authentication is invalid.</p>"},"Constants.html#/c:@SDLResultExpiredCertificate":{"name":"SDLResultExpiredCertificate","abstract":"<p>The certificate provided during authentication is expired.</p>"},"Constants.html#/c:@SDLResultResumeFailed":{"name":"SDLResultResumeFailed","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultDataNotAvailable":{"name":"SDLResultDataNotAvailable","abstract":"<p>The requested data is not available on this vehicle or is not published for the connected app.</p>"},"Constants.html#/c:@SDLResultReadOnly":{"name":"SDLResultReadOnly","abstract":"<p>The requested data is read only thus cannot be change via remote control .</p>"},"Constants.html#/c:@SDLSamplingRate8KHZ":{"name":"SDLSamplingRate8KHZ","abstract":"<p>Sampling rate of 8 kHz</p>"},"Constants.html#/c:@SDLSamplingRate16KHZ":{"name":"SDLSamplingRate16KHZ","abstract":"<p>Sampling rate of 16 kHz</p>"},"Constants.html#/c:@SDLSamplingRate22KHZ":{"name":"SDLSamplingRate22KHZ","abstract":"<p>Sampling rate of 22 kHz</p>"},"Constants.html#/c:@SDLSamplingRate44KHZ":{"name":"SDLSamplingRate44KHZ","abstract":"<p>Sampling rate of 44 kHz</p>"},"Constants.html#/c:@SDLSoftButtonTypeText":{"name":"SDLSoftButtonTypeText","abstract":"<p>Text kind Softbutton</p>"},"Constants.html#/c:@SDLSoftButtonTypeImage":{"name":"SDLSoftButtonTypeImage","abstract":"<p>Image kind Softbutton</p>"},"Constants.html#/c:@SDLSoftButtonTypeBoth":{"name":"SDLSoftButtonTypeBoth","abstract":"<p>Both (Text &amp; Image) kind Softbutton</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesText":{"name":"SDLSpeechCapabilitiesText","abstract":"<p>The SDL platform can speak text phrases.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesSAPIPhonemes":{"name":"SDLSpeechCapabilitiesSAPIPhonemes","abstract":"<p>The SDL platform can speak SAPI Phonemes.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesLHPlusPhonemes":{"name":"SDLSpeechCapabilitiesLHPlusPhonemes","abstract":"<p>The SDL platform can speak LHPlus Phonemes.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesPrerecorded":{"name":"SDLSpeechCapabilitiesPrerecorded","abstract":"<p>The SDL platform can speak Prerecorded indicators and prompts.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesSilence":{"name":"SDLSpeechCapabilitiesSilence","abstract":"<p>The SDL platform can speak Silence.</p>"},"Constants.html#/c:@SDLDefaultScreenSize":{"name":"SDLDefaultScreenSize","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamDidStartNotification":{"name":"SDLVideoStreamDidStartNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamDidStopNotification":{"name":"SDLVideoStreamDidStopNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamSuspendedNotification":{"name":"SDLVideoStreamSuspendedNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamDidStartNotification":{"name":"SDLAudioStreamDidStartNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamDidStopNotification":{"name":"SDLAudioStreamDidStopNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLLockScreenManagerWillPresentLockScreenViewController":{"name":"SDLLockScreenManagerWillPresentLockScreenViewController","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLLockScreenManagerDidPresentLockScreenViewController":{"name":"SDLLockScreenManagerDidPresentLockScreenViewController","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLLockScreenManagerWillDismissLockScreenViewController":{"name":"SDLLockScreenManagerWillDismissLockScreenViewController","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLLockScreenManagerDidDismissLockScreenViewController":{"name":"SDLLockScreenManagerDidDismissLockScreenViewController","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLSystemActionDefaultAction":{"name":"SDLSystemActionDefaultAction","abstract":"<p>A default soft button action</p>"},"Constants.html#/c:@SDLSystemActionStealFocus":{"name":"SDLSystemActionStealFocus","abstract":"<p>An action causing your app to steal HMI focus</p>"},"Constants.html#/c:@SDLSystemActionKeepContext":{"name":"SDLSystemActionKeepContext","abstract":"<p>An action causing you to keep context</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeNavigation":{"name":"SDLSystemCapabilityTypeNavigation","abstract":"<p>The navigation capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypePhoneCall":{"name":"SDLSystemCapabilityTypePhoneCall","abstract":"<p>The phone call capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeVideoStreaming":{"name":"SDLSystemCapabilityTypeVideoStreaming","abstract":"<p>The video streaming capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeRemoteControl":{"name":"SDLSystemCapabilityTypeRemoteControl","abstract":"<p>The remote control capability</p>"},"Constants.html#/c:@SDLSystemContextMain":{"name":"SDLSystemContextMain","abstract":"<p>No user interaction (user-initiated or app-initiated) is in progress.</p>"},"Constants.html#/c:@SDLSystemContextVoiceRecognitionSession":{"name":"SDLSystemContextVoiceRecognitionSession","abstract":"<p>VR-oriented, user-initiated or app-initiated interaction is in-progress.</p>"},"Constants.html#/c:@SDLSystemContextMenu":{"name":"SDLSystemContextMenu","abstract":"<p>Menu-oriented, user-initiated or app-initiated interaction is in-progress.</p>"},"Constants.html#/c:@SDLSystemContextHMIObscured":{"name":"SDLSystemContextHMIObscured","abstract":"<p>The app&rsquo;s display HMI is currently being obscured by either a system or other app&rsquo;s overlay.</p>"},"Constants.html#/c:@SDLSystemContextAlert":{"name":"SDLSystemContextAlert","abstract":"<p>Broadcast only to whichever app has an alert currently being displayed.</p>"},"Constants.html#/c:@SDLTBTStateRouteUpdateRequest":{"name":"SDLTBTStateRouteUpdateRequest","abstract":"<p>The route should be updated</p>"},"Constants.html#/c:@SDLTBTStateRouteAccepted":{"name":"SDLTBTStateRouteAccepted","abstract":"<p>The route is accepted</p>"},"Constants.html#/c:@SDLTBTStateRouteRefused":{"name":"SDLTBTStateRouteRefused","abstract":"<p>The route is refused</p>"},"Constants.html#/c:@SDLTBTStateRouteCancelled":{"name":"SDLTBTStateRouteCancelled","abstract":"<p>The route is cancelled</p>"},"Constants.html#/c:@SDLTBTStateETARequest":{"name":"SDLTBTStateETARequest","abstract":"<p>The route should update its Estimated Time of Arrival</p>"},"Constants.html#/c:@SDLTBTStateNextTurnRequest":{"name":"SDLTBTStateNextTurnRequest","abstract":"<p>The route should update its next turn</p>"},"Constants.html#/c:@SDLTBTStateRouteStatusRequest":{"name":"SDLTBTStateRouteStatusRequest","abstract":"<p>The route should update its status</p>"},"Constants.html#/c:@SDLTBTStateRouteSummaryRequest":{"name":"SDLTBTStateRouteSummaryRequest","abstract":"<p>The route update its summary</p>"},"Constants.html#/c:@SDLTBTStateTripStatusRequest":{"name":"SDLTBTStateTripStatusRequest","abstract":"<p>The route should update the trip&rsquo;s status</p>"},"Constants.html#/c:@SDLTBTStateRouteUpdateRequestTimeout":{"name":"SDLTBTStateRouteUpdateRequestTimeout","abstract":"<p>The route update timed out</p>"},"Constants.html#/c:@SDLTemperatureUnitCelsius":{"name":"SDLTemperatureUnitCelsius","abstract":"<p>Reflects the current HMI setting for temperature unit in Celsius</p>"},"Constants.html#/c:@SDLTemperatureUnitFahrenheit":{"name":"SDLTemperatureUnitFahrenheit","abstract":"<p>Reflects the current HMI setting for temperature unit in Fahrenheit</p>"},"Constants.html#/c:@SDLTextAlignmentLeft":{"name":"SDLTextAlignmentLeft","abstract":"<p>Text aligned left.</p>"},"Constants.html#/c:@SDLTextAlignmentRight":{"name":"SDLTextAlignmentRight","abstract":"<p>Text aligned right.</p>"},"Constants.html#/c:@SDLTextAlignmentCenter":{"name":"SDLTextAlignmentCenter","abstract":"<p>Text aligned centered.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField1":{"name":"SDLTextFieldNameMainField1","abstract":"<p>The first line of the first set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField2":{"name":"SDLTextFieldNameMainField2","abstract":"<p>The second line of the first set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField3":{"name":"SDLTextFieldNameMainField3","abstract":"<p>The first line of the second set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField4":{"name":"SDLTextFieldNameMainField4"},"Constants.html#/c:@SDLTextFieldNameStatusBar":{"name":"SDLTextFieldNameStatusBar","abstract":"<p>The status bar on the NGN display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMediaClock":{"name":"SDLTextFieldNameMediaClock","abstract":"<p>Text value for MediaClock field. Must be properly formatted according to MediaClockFormat. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMediaTrack":{"name":"SDLTextFieldNameMediaTrack","abstract":"<p>The track field of NGN type ACMs. This field is only available for media applications on a NGN display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText1":{"name":"SDLTextFieldNameAlertText1","abstract":"<p>The first line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText2":{"name":"SDLTextFieldNameAlertText2","abstract":"<p>The second line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText3":{"name":"SDLTextFieldNameAlertText3","abstract":"<p>The third line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameScrollableMessageBody":{"name":"SDLTextFieldNameScrollableMessageBody","abstract":"<p>Long form body of text that can include newlines and tabs. Applies to SDLScrollableMessage.</p>"},"Constants.html#/c:@SDLTextFieldNameInitialInteractionText":{"name":"SDLTextFieldNameInitialInteractionText","abstract":"<p>First line suggestion for a user response (in the case of VR enabled interaction).</p>"},"Constants.html#/c:@SDLTextFieldNameNavigationText1":{"name":"SDLTextFieldNameNavigationText1","abstract":"<p>First line of navigation text.</p>"},"Constants.html#/c:@SDLTextFieldNameNavigationText2":{"name":"SDLTextFieldNameNavigationText2","abstract":"<p>Second line of navigation text.</p>"},"Constants.html#/c:@SDLTextFieldNameETA":{"name":"SDLTextFieldNameETA","abstract":"<p>Estimated Time of Arrival time for navigation.</p>"},"Constants.html#/c:@SDLTextFieldNameTotalDistance":{"name":"SDLTextFieldNameTotalDistance","abstract":"<p>Total distance to destination for navigation.</p>"},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText1":{"name":"SDLTextFieldNameAudioPassThruDisplayText1","abstract":"<p>First line of text for audio pass thru.</p>"},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText2":{"name":"SDLTextFieldNameAudioPassThruDisplayText2","abstract":"<p>Second line of text for audio pass thru.</p>"},"Constants.html#/c:@SDLTextFieldNameSliderHeader":{"name":"SDLTextFieldNameSliderHeader","abstract":"<p>Header text for slider.</p>"},"Constants.html#/c:@SDLTextFieldNameSliderFooter":{"name":"SDLTextFieldNameSliderFooter","abstract":"<p>Footer text for slider</p>"},"Constants.html#/c:@SDLTextFieldNameMenuName":{"name":"SDLTextFieldNameMenuName","abstract":"<p>Primary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameSecondaryText":{"name":"SDLTextFieldNameSecondaryText","abstract":"<p>Secondary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameTertiaryText":{"name":"SDLTextFieldNameTertiaryText","abstract":"<p>Tertiary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameMenuTitle":{"name":"SDLTextFieldNameMenuTitle","abstract":"<p>Optional text to label an app menu button (for certain touchscreen platforms)</p>"},"Constants.html#/c:@SDLTextFieldNameLocationName":{"name":"SDLTextFieldNameLocationName","abstract":"<p>Optional name / title of intended location for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNameLocationDescription":{"name":"SDLTextFieldNameLocationDescription","abstract":"<p>Optional description of intended location / establishment (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNameAddressLines":{"name":"SDLTextFieldNameAddressLines","abstract":"<p>Optional location address (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNamePhoneNumber":{"name":"SDLTextFieldNamePhoneNumber","abstract":"<p>Optional hone number of intended location / establishment (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTimerModeUp":{"name":"SDLTimerModeUp","abstract":"<p>The timer should count up.</p>"},"Constants.html#/c:@SDLTimerModeDown":{"name":"SDLTimerModeDown","abstract":"<p>The timer should count down.</p>"},"Constants.html#/c:@SDLTimerModeNone":{"name":"SDLTimerModeNone","abstract":"<p>The timer should not count.</p>"},"Constants.html#/c:@SDLTouchTypeBegin":{"name":"SDLTouchTypeBegin","abstract":"<p>The touch is the beginning of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeMove":{"name":"SDLTouchTypeMove","abstract":"<p>The touch is the movement of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeEnd":{"name":"SDLTouchTypeEnd","abstract":"<p>The touch is the ending of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeCancel":{"name":"SDLTouchTypeCancel","abstract":"<p>The touch is the cancellation of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTriggerSourceMenu":{"name":"SDLTriggerSourceMenu","abstract":"<p>Selection made via menu</p>"},"Constants.html#/c:@SDLTriggerSourceVoiceRecognition":{"name":"SDLTriggerSourceVoiceRecognition","abstract":"<p>Selection made via Voice session</p>"},"Constants.html#/c:@SDLTriggerSourceKeyboard":{"name":"SDLTriggerSourceKeyboard","abstract":"<p>Selection made via Keyboard</p>"},"Constants.html#/c:@SDLUpdateModeCountUp":{"name":"SDLUpdateModeCountUp","abstract":"<p>Starts the media clock timer counting upward, in increments of 1 second.</p>"},"Constants.html#/c:@SDLUpdateModeCountDown":{"name":"SDLUpdateModeCountDown","abstract":"<p>Starts the media clock timer counting downward, in increments of 1 second.</p>"},"Constants.html#/c:@SDLUpdateModePause":{"name":"SDLUpdateModePause","abstract":"<p>Pauses the media clock timer.</p>"},"Constants.html#/c:@SDLUpdateModeResume":{"name":"SDLUpdateModeResume","abstract":"<p>Resumes the media clock timer. The timer resumes counting in whatever mode was in effect before pausing (i.e. COUNTUP or COUNTDOWN).</p>"},"Constants.html#/c:@SDLUpdateModeClear":{"name":"SDLUpdateModeClear","abstract":"<p>Clear the media clock timer.</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveNotConfirmed","abstract":"<p>Inactive not confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveConfirmed","abstract":"<p>Inactive confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusActiveNotConfirmed","abstract":"<p>Active not confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveConfirmed":{"name":"SDLVehicleDataActiveStatusActiveConfirmed","abstract":"<p>Active confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusFault":{"name":"SDLVehicleDataActiveStatusFault","abstract":"<p>Fault</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNoEvent":{"name":"SDLVehicleDataEventStatusNoEvent","abstract":"<p>No event</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNo":{"name":"SDLVehicleDataEventStatusNo","abstract":"<p>The event is a No status</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusYes":{"name":"SDLVehicleDataEventStatusYes","abstract":"<p>The event is a Yes status</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNotSupported":{"name":"SDLVehicleDataEventStatusNotSupported","abstract":"<p>Vehicle data event is not supported</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusFault":{"name":"SDLVehicleDataEventStatusFault","abstract":"<p>The event is a Fault status</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotSupported":{"name":"SDLVehicleDataNotificationStatusNotSupported","abstract":"<p>The vehicle data notification status is not supported</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNormal":{"name":"SDLVehicleDataNotificationStatusNormal","abstract":"<p>The vehicle data notification status is normal</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusActive":{"name":"SDLVehicleDataNotificationStatusActive","abstract":"<p>The vehicle data notification status is active</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotUsed":{"name":"SDLVehicleDataNotificationStatusNotUsed","abstract":"<p>The vehicle data notification status is not used</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeSuccess":{"name":"SDLVehicleDataResultCodeSuccess","abstract":"<p>Individual vehicle data item / DTC / DID request or subscription successful</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeTruncatedData":{"name":"SDLVehicleDataResultCodeTruncatedData","abstract":"<p>DTC / DID request successful, however, not all active DTCs or full contents of DID location available</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDisallowed":{"name":"SDLVehicleDataResultCodeDisallowed","abstract":"<p>This vehicle data item is not allowed for this app by SDL</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeUserDisallowed":{"name":"SDLVehicleDataResultCodeUserDisallowed","abstract":"<p>The user has not granted access to this type of vehicle data item at this time</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeInvalidId":{"name":"SDLVehicleDataResultCodeInvalidId","abstract":"<p>The ECU ID referenced is not a valid ID on the bus / system</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeVehicleDataNotAvailable":{"name":"SDLVehicleDataResultCodeVehicleDataNotAvailable","abstract":"<p>The requested vehicle data item / DTC / DID is not currently available or responding on the bus / system</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDataAlreadySubscribed":{"name":"SDLVehicleDataResultCodeDataAlreadySubscribed","abstract":"<p>The vehicle data item is already subscribed</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDataNotSubscribed":{"name":"SDLVehicleDataResultCodeDataNotSubscribed","abstract":"<p>The vehicle data item cannot be unsubscribed because it is not currently subscribed</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeIgnored":{"name":"SDLVehicleDataResultCodeIgnored","abstract":"<p>The request for this item is ignored because it is already in progress</p>"},"Constants.html#/c:@SDLVehicleDataStatusNoDataExists":{"name":"SDLVehicleDataStatusNoDataExists","abstract":"<p>No data avaliable</p>"},"Constants.html#/c:@SDLVehicleDataStatusOff":{"name":"SDLVehicleDataStatusOff","abstract":"<p>The status is Off</p>"},"Constants.html#/c:@SDLVehicleDataStatusOn":{"name":"SDLVehicleDataStatusOn","abstract":"<p>The status is On</p>"},"Constants.html#/c:@SDLVehicleDataTypeGPS":{"name":"SDLVehicleDataTypeGPS","abstract":"<p>GPS vehicle data</p>"},"Constants.html#/c:@SDLVehicleDataTypeSpeed":{"name":"SDLVehicleDataTypeSpeed","abstract":"<p>Vehicle speed data</p>"},"Constants.html#/c:@SDLVehicleDataTypeRPM":{"name":"SDLVehicleDataTypeRPM","abstract":"<p>Vehicle RPM data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelLevel":{"name":"SDLVehicleDataTypeFuelLevel","abstract":"<p>Vehicle fuel level data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelLevelState":{"name":"SDLVehicleDataTypeFuelLevelState","abstract":"<p>Vehicle fuel level state data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelConsumption":{"name":"SDLVehicleDataTypeFuelConsumption","abstract":"<p>Vehicle fuel consumption data</p>"},"Constants.html#/c:@SDLVehicleDataTypeExternalTemperature":{"name":"SDLVehicleDataTypeExternalTemperature","abstract":"<p>Vehicle external temperature data</p>"},"Constants.html#/c:@SDLVehicleDataTypeVIN":{"name":"SDLVehicleDataTypeVIN","abstract":"<p>Vehicle VIN data</p>"},"Constants.html#/c:@SDLVehicleDataTypePRNDL":{"name":"SDLVehicleDataTypePRNDL","abstract":"<p>Vehicle PRNDL data</p>"},"Constants.html#/c:@SDLVehicleDataTypeTirePressure":{"name":"SDLVehicleDataTypeTirePressure","abstract":"<p>Vehicle tire pressure data</p>"},"Constants.html#/c:@SDLVehicleDataTypeOdometer":{"name":"SDLVehicleDataTypeOdometer","abstract":"<p>Vehicle odometer data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBeltStatus":{"name":"SDLVehicleDataTypeBeltStatus","abstract":"<p>Vehicle belt status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBodyInfo":{"name":"SDLVehicleDataTypeBodyInfo","abstract":"<p>Vehicle body info data</p>"},"Constants.html#/c:@SDLVehicleDataTypeDeviceStatus":{"name":"SDLVehicleDataTypeDeviceStatus","abstract":"<p>Vehicle device status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeECallInfo":{"name":"SDLVehicleDataTypeECallInfo","abstract":"<p>Vehicle emergency call info data</p>"},"Constants.html#/c:@SDLVehicleDataTypeAirbagStatus":{"name":"SDLVehicleDataTypeAirbagStatus","abstract":"<p>Vehicle airbag status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEmergencyEvent":{"name":"SDLVehicleDataTypeEmergencyEvent","abstract":"<p>Vehicle emergency event info</p>"},"Constants.html#/c:@SDLVehicleDataTypeClusterModeStatus":{"name":"SDLVehicleDataTypeClusterModeStatus","abstract":"<p>Vehicle cluster mode status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeMyKey":{"name":"SDLVehicleDataTypeMyKey","abstract":"<p>Vehicle MyKey data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBraking":{"name":"SDLVehicleDataTypeBraking","abstract":"<p>Vehicle braking data</p>"},"Constants.html#/c:@SDLVehicleDataTypeWiperStatus":{"name":"SDLVehicleDataTypeWiperStatus","abstract":"<p>Vehicle wiper status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeHeadlampStatus":{"name":"SDLVehicleDataTypeHeadlampStatus","abstract":"<p>Vehicle headlamp status</p>"},"Constants.html#/c:@SDLVehicleDataTypeBatteryVoltage":{"name":"SDLVehicleDataTypeBatteryVoltage","abstract":"<p>Vehicle battery voltage data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEngineTorque":{"name":"SDLVehicleDataTypeEngineTorque","abstract":"<p>Vehicle engine torque data</p>"},"Constants.html#/c:@SDLVehicleDataTypeAccelerationPedal":{"name":"SDLVehicleDataTypeAccelerationPedal","abstract":"<p>Vehicle accleration pedal data</p>"},"Constants.html#/c:@SDLVehicleDataTypeSteeringWheel":{"name":"SDLVehicleDataTypeSteeringWheel","abstract":"<p>Vehicle steering wheel data</p>"},"Constants.html#/c:@SDLVentilationModeUpper":{"name":"SDLVentilationModeUpper","abstract":"<p>The upper ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeLower":{"name":"SDLVentilationModeLower","abstract":"<p>The lower ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeBoth":{"name":"SDLVentilationModeBoth","abstract":"<p>The both ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeNone":{"name":"SDLVentilationModeNone","abstract":"<p>No ventilation mode</p>"},"Constants.html#/c:@SDLVideoStreamingCodecH264":{"name":"SDLVideoStreamingCodecH264","abstract":"<p>H264</p>"},"Constants.html#/c:@SDLVideoStreamingCodecH265":{"name":"SDLVideoStreamingCodecH265","abstract":"<p>H265</p>"},"Constants.html#/c:@SDLVideoStreamingCodecTheora":{"name":"SDLVideoStreamingCodecTheora","abstract":"<p>Theora</p>"},"Constants.html#/c:@SDLVideoStreamingCodecVP8":{"name":"SDLVideoStreamingCodecVP8","abstract":"<p>VP8</p>"},"Constants.html#/c:@SDLVideoStreamingCodecVP9":{"name":"SDLVideoStreamingCodecVP9","abstract":"<p>VP9</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRAW":{"name":"SDLVideoStreamingProtocolRAW","abstract":"<p>RAW</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTP":{"name":"SDLVideoStreamingProtocolRTP","abstract":"<p>RTP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTSP":{"name":"SDLVideoStreamingProtocolRTSP","abstract":"<p>RTSP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTMP":{"name":"SDLVideoStreamingProtocolRTMP","abstract":"<p>RTMP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolWebM":{"name":"SDLVideoStreamingProtocolWebM","abstract":"<p>WebM</p>"},"Constants.html#/c:@SDLVRCapabilitiesText":{"name":"SDLVRCapabilitiesText","abstract":"<p>The SDL platform is capable of recognizing spoken text in the current language.</p>"},"Constants.html#/c:@SDLWarningLightStatusOff":{"name":"SDLWarningLightStatusOff","abstract":"<p>The warning light is off</p>"},"Constants.html#/c:@SDLWarningLightStatusOn":{"name":"SDLWarningLightStatusOn","abstract":"<p>The warning light is off</p>"},"Constants.html#/c:@SDLWarningLightStatusFlash":{"name":"SDLWarningLightStatusFlash","abstract":"<p>The warning light is flashing</p>"},"Constants.html#/c:@SDLWarningLightStatusNotUsed":{"name":"SDLWarningLightStatusNotUsed","abstract":"<p>The warning light is unused</p>"},"Constants.html#/c:@SDLWayPointTypeAll":{"name":"SDLWayPointTypeAll","abstract":"<p>All other waypoint types</p>"},"Constants.html#/c:@SDLWayPointTypeDestination":{"name":"SDLWayPointTypeDestination","abstract":"<p>The destination waypoint</p>"},"Constants.html#/c:@SDLWiperStatusOff":{"name":"SDLWiperStatusOff","abstract":"<p>Wiper is off</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticOff":{"name":"SDLWiperStatusAutomaticOff","abstract":"<p>Wiper is off automatically</p>"},"Constants.html#/c:@SDLWiperStatusOffMoving":{"name":"SDLWiperStatusOffMoving","abstract":"<p>Wiper is moving but off</p>"},"Constants.html#/c:@SDLWiperStatusManualIntervalOff":{"name":"SDLWiperStatusManualIntervalOff","abstract":"<p>Wiper is off due to a manual interval</p>"},"Constants.html#/c:@SDLWiperStatusManualIntervalOn":{"name":"SDLWiperStatusManualIntervalOn","abstract":"<p>Wiper is on due to a manual interval</p>"},"Constants.html#/c:@SDLWiperStatusManualLow":{"name":"SDLWiperStatusManualLow","abstract":"<p>Wiper is on low manually</p>"},"Constants.html#/c:@SDLWiperStatusManualHigh":{"name":"SDLWiperStatusManualHigh","abstract":"<p>Wiper is on high manually</p>"},"Constants.html#/c:@SDLWiperStatusManualFlick":{"name":"SDLWiperStatusManualFlick","abstract":"<p>Wiper is on for a single wipe manually</p>"},"Constants.html#/c:@SDLWiperStatusWash":{"name":"SDLWiperStatusWash","abstract":"<p>Wiper is in wash mode</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticLow":{"name":"SDLWiperStatusAutomaticLow","abstract":"<p>Wiper is on low automatically</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticHigh":{"name":"SDLWiperStatusAutomaticHigh","abstract":"<p>Wiper is on high automatically</p>"},"Constants.html#/c:@SDLWiperStatusCourtesyWipe":{"name":"SDLWiperStatusCourtesyWipe","abstract":"<p>Wiper is performing a courtesy wipe</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticAdjust":{"name":"SDLWiperStatusAutomaticAdjust","abstract":"<p>Wiper is on automatic adjust</p>"},"Constants.html#/c:@SDLWiperStatusStalled":{"name":"SDLWiperStatusStalled","abstract":"<p>Wiper is stalled</p>"},"Constants.html#/c:@SDLWiperStatusNoDataExists":{"name":"SDLWiperStatusNoDataExists","abstract":"<p>Wiper data is not available</p>"},"Constants.html#/c:@SmartDeviceLinkVersionNumber":{"name":"SmartDeviceLinkVersionNumber","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SmartDeviceLinkVersionString":{"name":"SmartDeviceLinkVersionString","abstract":"<p>Undocumented</p>"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:":{"name":"-initWithText:image:","abstract":"<p>Undocumented</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:position:":{"name":"-initWithText:image:position:","abstract":"<p>Undocumented</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)text":{"name":"text","abstract":"<p>Text to display for VR Help item</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)image":{"name":"image","abstract":"<p>Image for VR Help item</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)position":{"name":"position","abstract":"<p>Position to display item in VR Help list</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The strings the user can say to activate this voice command</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)handler":{"name":"handler","abstract":"<p>The handler that will be called when the command is activated</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(im)initWithVoiceCommands:handler:":{"name":"-initWithVoiceCommands:handler:","abstract":"<p>Undocumented</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)protocol":{"name":"protocol","abstract":"<p>Protocol type, see VideoStreamingProtocol</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)codec":{"name":"codec","abstract":"<p>Codec type, see VideoStreamingCodec</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(im)initWithCodec:protocol:":{"name":"-initWithCodec:protocol:","abstract":"<p>Undocumented</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:","abstract":"<p>Undocumented</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)preferredResolution":{"name":"preferredResolution","abstract":"<p>The preferred resolution of a video stream for decoding and rendering on HMI</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)maxBitrate":{"name":"maxBitrate","abstract":"<p>The maximum bitrate of video stream that is supported, in kbps, optional</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)supportedFormats":{"name":"supportedFormats","abstract":"<p>Detailed information on each format supported by this system, in its preferred order</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)hapticSpatialDataSupported":{"name":"hapticSpatialDataSupported","abstract":"<p>True if the system can utilize the haptic spatial data from the source being streamed.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)make":{"name":"make","abstract":"<p>The make of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)model":{"name":"model","abstract":"<p>The model of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)modelYear":{"name":"modelYear","abstract":"<p>The model year of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)trim":{"name":"trim","abstract":"<p>The trim of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)dataType":{"name":"dataType","abstract":"<p>Defined published data element type</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)resultCode":{"name":"resultCode","abstract":"<p>Published data result code</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(im)initWithTurnList:softButtons:":{"name":"-initWithTurnList:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)turnList":{"name":"turnList","abstract":"<p>Optional, SDLTurn, 1 - 100 entries</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)softButtons":{"name":"softButtons","abstract":"<p>Required, SDLSoftButton, 0 - 1 Entries</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The result of requesting to subscribe to the GPSData.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The result of requesting to subscribe to the vehicle speed in kilometers per hour.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The result of requesting to subscribe to the number of revolutions per minute of the engine.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The result of requesting to subscribe to the fuel level in the tank (percentage)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The result of requesting to subscribe to the fuel level state.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The result of requesting to subscribe to the external temperature in degrees celsius.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The result of requesting to subscribe to the PRNDL status.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The result of requesting to subscribe to the tireStatus.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>The result of requesting to subscribe to the odometer in km.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The result of requesting to subscribe to the status of the seat belts.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The result of requesting to subscribe to the body information including power modes.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The result of requesting to subscribe to the device status including signal and battery strength.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The result of requesting to subscribe to the status of the brake pedal.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The result of requesting to subscribe to the status of the wipers.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>The result of requesting to subscribe to the status of the head lamps.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>The result of requesting to subscribe to the accelerator pedal position (percentage depressed)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>The result of requesting to subscribe to the current angle of the steering wheel (in deg)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>The result of requesting to subscribe to the emergency call info</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The result of requesting to subscribe to the airbag status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>The result of requesting to subscribe to the emergency event</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"<p>The result of requesting to subscribe to the cluster modes</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>The result of requesting to subscribe to the myKey status</p>","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":"<p>Undocumented</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, unsubscribes Gps data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, unsubscribes speed data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, unsubscribe data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, unsubscribes FuelLevel data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, unsubscribes fuelLevel_State data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, unsubscribes instantFuelConsumption data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, unsubscribes externalTemperature data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, unsubscribes Currently selected gear data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, unsubscribes tire pressure status data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, unsubscribes odometer data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, unsubscribes belt Status data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, unsubscribes body Information data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, unsubscribes device Status data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, unsubscribes driver Braking data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, unsubscribes wiper Status data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, unsubscribes Head Lamp Status data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, unsubscribes Engine Torque data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, unsubscribes accPedalPosition data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>If true, unsubscribes from steeringWheelAngle</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>If true, unsubscribes from eCallInfo</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>If true, unsubscribes from airbagStatus</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>If true, unsubscribes from emergencyEvent</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>If true, unsubscribes from clusterModeStatus</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"<p>If true, unsubscribes from myKey</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(im)initWithButtonName:":{"name":"-initWithButtonName:","abstract":"<p>Undocumented</p>","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(py)buttonName":{"name":"buttonName","abstract":"<p>A name of the button to unsubscribe from","parent_name":"SDLUnsubscribeButton"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(im)initWithNavigationText:turnIcon:":{"name":"-initWithNavigationText:turnIcon:","abstract":"<p>Undocumented</p>","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)navigationText":{"name":"navigationText","abstract":"<p>Individual turn text. Must provide at least text or icon for a given turn</p>","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)turnIcon":{"name":"turnIcon","abstract":"<p>Individual turn icon. Must provide at least text or icon for a given turn</p>","parent_name":"SDLTurn"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventDelegate":{"name":"touchEventDelegate","abstract":"<p>Notified of processed touches such as pinches, pans, and taps</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventHandler":{"name":"touchEventHandler","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapDistanceThreshold":{"name":"tapDistanceThreshold","abstract":"<p>Distance between two taps on the screen, in the head unit&rsquo;s coordinate system, used for registering double-tap callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)panDistanceThreshold":{"name":"panDistanceThreshold","abstract":"<p>Minimum distance for a pan gesture in the head unit&rsquo;s coordinate system, used for registering pan callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapTimeThreshold":{"name":"tapTimeThreshold","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold":{"name":"movementTimeThreshold","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)enableSyncedPanning":{"name":"enableSyncedPanning","abstract":"<p>If set to NO, the display link syncing will be ignored and <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold\">movementTimeThreshold</a></code> will be used. Defaults to YES.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEnabled":{"name":"touchEnabled","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)cancelPendingTouches":{"name":"-cancelPendingTouches","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:":{"name":"-initWithHitTester:","abstract":"<p>Initialize a touch manager with a hit tester if available</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)syncFrame":{"name":"-syncFrame","abstract":"<p>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.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)pressAvailable":{"name":"pressAvailable","abstract":"<p>Whether or not long presses are available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)multiTouchAvailable":{"name":"multiTouchAvailable","abstract":"<p>Whether or not multi-touch (e.g. a pinch gesture) is available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)doublePressAvailable":{"name":"doublePressAvailable","abstract":"<p>Whether or not a double tap is available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)touchEventId":{"name":"touchEventId","abstract":"<p>A touch&rsquo;s unique identifier. The application can track the current touch events by id.</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)timeStamp":{"name":"timeStamp","abstract":"<p>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.</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)coord":{"name":"coord","abstract":"<p>The touch&rsquo;s coordinate</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)x":{"name":"x","abstract":"<p>The x value of the touch coordinate</p>","parent_name":"SDLTouchCoord"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)y":{"name":"y","abstract":"<p>The y value of the touch coordinate</p>","parent_name":"SDLTouchCoord"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(im)initWithTouchEvent:":{"name":"-initWithTouchEvent:","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)identifier":{"name":"identifier","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)location":{"name":"location","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)timeStamp":{"name":"timeStamp","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isFirstFinger":{"name":"isFirstFinger","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isSecondFinger":{"name":"isSecondFinger","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)pressureTelltale":{"name":"pressureTelltale","abstract":"<p>Status of the Tire Pressure Telltale. See WarningLightStatus.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftFront":{"name":"leftFront","abstract":"<p>The status of the left front tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightFront":{"name":"rightFront","abstract":"<p>The status of the right front tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftRear":{"name":"leftRear","abstract":"<p>The status of the left rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightRear":{"name":"rightRear","abstract":"<p>The status of the right rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerLeftRear":{"name":"innerLeftRear","abstract":"<p>The status of the inner left rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerRightRear":{"name":"innerRightRear","abstract":"<p>The status of the innter right rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)name":{"name":"name","abstract":"<p>The enumeration identifying the field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)characterSet":{"name":"characterSet","abstract":"<p>The character set that is supported in this field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)width":{"name":"width","abstract":"<p>The number of characters in one row of this field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)rows":{"name":"rows","abstract":"<p>The number of rows for this text field.</p>","parent_name":"SDLTextField"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithUnit:value:":{"name":"-initWithUnit:value:","abstract":"<p>Undocumented</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)unit":{"name":"unit","abstract":"<p>Temperature Unit</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)value":{"name":"value","abstract":"<p>Temperature Value in TemperatureUnit specified unit. Range depends on OEM and is not checked by SDL.</p>","parent_name":"SDLTemperature"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(im)initWithText:type:":{"name":"-initWithText:type:","abstract":"<p>Initialize with text and a type</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)textChunksFromString:":{"name":"+textChunksFromString:","abstract":"<p>Create TTS using text</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)sapiChunksFromString:":{"name":"+sapiChunksFromString:","abstract":"<p>Create TTS using SAPI</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)lhPlusChunksFromString:":{"name":"+lhPlusChunksFromString:","abstract":"<p>Create TTS using LH Plus</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)prerecordedChunksFromString:":{"name":"+prerecordedChunksFromString:","abstract":"<p>Create TTS using prerecorded chunks</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)silenceChunks":{"name":"+silenceChunks","abstract":"<p>Create TTS using silence</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)text":{"name":"text","abstract":"<p>Text to be spoken, or a phoneme specification, or the name of a pre-recorded sound. The contents of this field are indicated by the <q>type</q> field.</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)type":{"name":"type","abstract":"<p>The type of information in the <q>text</q> field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).</p>","parent_name":"SDLTTSChunk"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>If returned, the platform supports on-screen SoftButtons</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>If returned, the platform supports custom on-screen Presets</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)speechCapabilities":{"name":"speechCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)prerecordedSpeechCapabilities":{"name":"prerecordedSpeechCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)vrCapability":{"name":"vrCapability","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)pcmStreamCapability":{"name":"pcmStreamCapability","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability":{"name":"navigationCapability","abstract":"<p>If returned, the platform supports navigation</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability":{"name":"phoneCapability","abstract":"<p>If returned, the platform supports making phone calls</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"<p>If returned, the platform supports video streaming</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"<p>If returned, the platform supports remote control capabilities</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)init":{"name":"-init","abstract":"<p>Init is unavailable. Dependencies must be injected using initWithConnectionManager:</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"<p>Creates a new system capability manager with a specified connection manager</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager. This method is used internally.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)updateCapabilityType:completionHandler:":{"name":"-updateCapabilityType:completionHandler:","abstract":"<p>Retrieves a capability type from the remote system. This function must be called in order to retrieve the values of <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability\">navigationCapability</a></code>, <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability\">phoneCapability</a></code>, <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability\">videoStreamingCapability</a></code> and <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability\">remoteControlCapability</a></code>. 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.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithNavigationCapability:":{"name":"-initWithNavigationCapability:","abstract":"<p>Undocumented</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithPhoneCapability:":{"name":"-initWithPhoneCapability:","abstract":"<p>Undocumented</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithVideoStreamingCapability:":{"name":"-initWithVideoStreamingCapability:","abstract":"<p>Undocumented</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithRemoteControlCapability:":{"name":"-initWithRemoteControlCapability:","abstract":"<p>Undocumented</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"<p>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.</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)navigationCapability":{"name":"navigationCapability","abstract":"<p>Describes extended capabilities for onboard navigation system</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)phoneCapability":{"name":"phoneCapability","abstract":"<p>Describes extended capabilities of the module&rsquo;s phone feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"<p>Describes extended capabilities of the module&rsquo;s phone feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"<p>Describes extended capabilities of the module&rsquo;s phone feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"<p>Undocumented</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"<p>The major version indicates versions that is not-compatible to previous versions</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"<p>The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"<p>Allows backward-compatible fixes to the API without increasing the minor version of the interface</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The result of requesting to subscribe to the GPSData.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The result of requesting to subscribe to the vehicle speed in kilometers per hour.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The result of requesting to subscribe to the number of revolutions per minute of the engine.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The result of requesting to subscribe to the fuel level in the tank (percentage)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The result of requesting to subscribe to the fuel level state.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The result of requesting to subscribe to the external temperature in degrees celsius.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The result of requesting to subscribe to the PRNDL status.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The result of requesting to subscribe to the tireStatus.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>The result of requesting to subscribe to the odometer in km.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The result of requesting to subscribe to the status of the seat belts.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The result of requesting to subscribe to the body information including power modes.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The result of requesting to subscribe to the device status including signal and battery strength.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The result of requesting to subscribe to the status of the brake pedal.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The result of requesting to subscribe to the status of the wipers.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>The result of requesting to subscribe to the status of the head lamps.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>The result of requesting to subscribe to the accelerator pedal position (percentage depressed)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>The result of requesting to subscribe to the current angle of the steering wheel (in deg)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>The result of requesting to subscribe to the emergency call info</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The result of requesting to subscribe to the airbag status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>The result of requesting to subscribe to the emergency event</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"<p>The result of requesting to subscribe to the cluster modes</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>The result of requesting to subscribe to the myKey status</p>","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":"<p>Initialize a subscribe RPC with various possible to describe to</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, subscribes Gps data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, subscribes speed data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, subscribes rpm data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, subscribes FuelLevel data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, subscribes fuelLevel_State data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, subscribes instantFuelConsumption data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, subscribes externalTemperature data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, subscribes Currently selected gear data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, subscribes tire pressure status data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, subscribes odometer data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, subscribes belt Status data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, subscribes body Information data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, subscribes device Status data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, subscribes driver Braking data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, subscribes wiper Status data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, subscribes Head Lamp Status data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, subscribes Engine Torque data</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, means the accPedalPosition data has been","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>A boolean value. If true, means the steeringWheelAngle data has been","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Subscribe to eCallInfo</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>Subscribe to airbagStatus</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Subscribe to emergencyEvent</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>Subscribe to clusterModeStatus</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"<p>Subscribe to myKey</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Construct a SDLSubscribeButton with a handler callback when an event occurs.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithButtonName:handler:":{"name":"-initWithButtonName:handler:","abstract":"<p>Undocumented</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)handler":{"name":"handler","abstract":"<p>A handler that will let you know when the button you subscribed to is selected.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)buttonName":{"name":"buttonName","abstract":"<p>The name of the button to subscribe to","parent_name":"SDLSubscribeButton"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager":{"name":"touchManager","abstract":"<p>Touch Manager responsible for providing touch event notifications.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioManager":{"name":"audioManager","abstract":"<p>Audio Manager responsible for managing streaming audio.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)rootViewController":{"name":"rootViewController","abstract":"<p>This property is used for SDLCarWindow, the ability to stream any view controller. To start, you must set an initial view controller on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaConfiguration.html\">SDLStreamingMediaConfiguration</a></code> <code>rootViewController</code>. After streaming begins, you can replace that view controller with a new root by placing the new view controller into this property.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)focusableItemManager":{"name":"focusableItemManager","abstract":"<p>A haptic interface that can be updated to reparse views within the window you&rsquo;ve provided. Send a <code><a href=\"36f8f5912051ae747ef441d6511ca4cbConstants.html#/c:@SDLDidUpdateProjectionView\">SDLDidUpdateProjectionView</a></code> notification or call the <code>updateInterfaceLayout</code> method to reparse. The <q>output</q> of this haptic interface occurs in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager\">touchManager</a></code> property where it will call the delegate.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)streamingSupported":{"name":"streamingSupported","abstract":"<p>Whether or not video streaming is supported</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoConnected":{"name":"videoConnected","abstract":"<p>Whether or not the video session is connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoEncrypted":{"name":"videoEncrypted","abstract":"<p>Whether or not the video session is encrypted. This may be different than the requestedEncryptionType.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioConnected":{"name":"audioConnected","abstract":"<p>Whether or not the audio session is connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioEncrypted":{"name":"audioEncrypted","abstract":"<p>Whether or not the audio session is encrypted. This may be different than the requestedEncryptionType.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoStreamingPaused":{"name":"videoStreamingPaused","abstract":"<p>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.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)screenSize":{"name":"screenSize","abstract":"<p>This is the current screen size of a connected display. This will be the size the video encoder uses to encode the raw image data.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoFormat":{"name":"videoFormat","abstract":"<p>This is the agreed upon format of video encoder that is in use, or nil if not currently connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)supportedFormats":{"name":"supportedFormats","abstract":"<p>A list of all supported video formats by this manager</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)pixelBufferPool":{"name":"pixelBufferPool","abstract":"<p>The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)requestedEncryptionType":{"name":"requestedEncryptionType","abstract":"<p>The requested encryption type when a session attempts to connect. This setting applies to both video and audio sessions.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"<p>Create a new streaming media manager for navigation and VPM apps with a specified configuration</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startWithProtocol:":{"name":"-startWithProtocol:","abstract":"<p>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 <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:":{"name":"-sendVideoData:","abstract":"<p>This method receives raw image data and will run iOS8+&lsquo;s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:presentationTimestamp:":{"name":"-sendVideoData:presentationTimestamp:","abstract":"<p>This method receives raw image data and will run iOS8+&lsquo;s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"<p>This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"<p>Set security managers which could be used. This is primarily used with video streaming applications to authenticate and perhaps encrypt traffic data.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)maximumDesiredEncryption":{"name":"maximumDesiredEncryption","abstract":"<p>What encryption level video/audio streaming should be. The default is SDLStreamingEncryptionFlagAuthenticateAndEncrypt.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)customVideoEncoderSettings":{"name":"customVideoEncoderSettings","abstract":"<p>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.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)dataSource":{"name":"dataSource","abstract":"<p>Usable to change run time video stream setup behavior. Only use this and modify the results if you <em>really</em> know what you&rsquo;re doing. The head unit defaults are generally good.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController":{"name":"rootViewController","abstract":"<p>Set the initial view controller your video streaming content is within.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)carWindowRenderingType":{"name":"carWindowRenderingType","abstract":"<p>Declares if CarWindow will use layer rendering or view rendering. Defaults to layer rendering.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)enableForcedFramerateSync":{"name":"enableForcedFramerateSync","abstract":"<p>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 <em>must</em> be YES. If NO, <code>enableSyncedPanning</code> on SDLTouchManager will be set to NO. Defaults to YES.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)allowMultipleViewControllerOrientations":{"name":"allowMultipleViewControllerOrientations","abstract":"<p>When YES, the StreamingMediaManager will disable its internal checks that the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController\">rootViewController</a></code> only has one <code>supportedOrientation</code>. Having multiple orientations can cause streaming issues. If you wish to disable this check, set it to YES. Defaults to NO.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)init":{"name":"-init","abstract":"<p>Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you&rsquo;d like custom video encoder settings, you can set the property manually.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"<p>Manually set all the properties to the streaming media configuration</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:":{"name":"-initWithSecurityManagers:","abstract":"<p>Create a secure configuration for each of the security managers provided.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfigurationWithSecurityManagers:":{"name":"+secureConfigurationWithSecurityManagers:","abstract":"<p>Create a secure configuration for each of the security managers provided.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)insecureConfiguration":{"name":"+insecureConfiguration","abstract":"<p>Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you&rsquo;d like custom video encoder settings, you can set the property manually. This is equivalent to <code>init</code>.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingInsecureConfigurationWithInitialViewController:":{"name":"+autostreamingInsecureConfigurationWithInitialViewController:","abstract":"<p>Create a CarWindow insecure configuration with a view controller</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithSecurityManagers:initialViewController:":{"name":"+autostreamingSecureConfigurationWithSecurityManagers:initialViewController:","abstract":"<p>Create a CarWindow secure configuration with a view controller and security managers</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithHours:minutes:seconds:":{"name":"-initWithHours:minutes:seconds:","abstract":"<p>Undocumented</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)hours":{"name":"hours","abstract":"<p>The hour of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)minutes":{"name":"minutes","abstract":"<p>The minute of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)seconds":{"name":"seconds","abstract":"<p>The second of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTS:":{"name":"-initWithTTS:","abstract":"<p>Undocumented</p>","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTSChunks:":{"name":"-initWithTTSChunks:","abstract":"<p>Undocumented</p>","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of TTSChunk structs which, taken together, specify the phrase to be spoken</p>","parent_name":"SDLSpeak"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)name":{"name":"name","abstract":"<p>The name of this soft button state</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)artwork":{"name":"artwork","abstract":"<p>The artwork to be used with this button or nil if it is text-only</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)text":{"name":"text","abstract":"<p>The text to be used with this button or nil if it is image-only</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)highlighted":{"name":"highlighted","abstract":"<p>Whether or not the button should be highlighted on the UI</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)systemAction":{"name":"systemAction","abstract":"<p>A special system action</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)softButton":{"name":"softButton","abstract":"<p>An SDLSoftButton describing this state</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:image:":{"name":"-initWithStateName:text:image:","abstract":"<p>Create the soft button state. Either the text or artwork or both may be set.</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:artwork:":{"name":"-initWithStateName:text:artwork:","abstract":"<p>Create the soft button state. Either the text or artwork or both may be set.</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)name":{"name":"name","abstract":"<p>The name of this button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states":{"name":"states","abstract":"<p>All states available to this button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentState":{"name":"currentState","abstract":"<p>The name of the current state of this soft button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentStateSoftButton":{"name":"currentStateSoftButton","abstract":"<p>Undocumented</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)eventHandler":{"name":"eventHandler","abstract":"<p>The handler to be called when the button is in the current state and is pressed</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:states:initialStateName:handler:":{"name":"-initWithName:states:initialStateName:handler:","abstract":"<p>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.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:state:handler:":{"name":"-initWithName:state:handler:","abstract":"<p>Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToStateNamed:":{"name":"-transitionToStateNamed:","abstract":"<p>Transition the soft button to another state in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states\">states</a></code> property. The wrapper considers all transitions valid (assuming a state with that name exists).</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToNextState":{"name":"-transitionToNextState","abstract":"<p>Transition the soft button to the next state of the array set when in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states\">states</a></code> property</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)stateWithName:":{"name":"-stateWithName:","abstract":"<p>Return a state from the state array with a specific name.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"<p>The button supports a short press.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"<p>The button supports a LONG press.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"<p>The button supports <q>button down</q> and <q>button up</q>.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)imageSupported":{"name":"imageSupported","abstract":"<p>The button supports referencing a static or dynamic image.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)handler":{"name":"handler","abstract":"<p>Undocumented</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)type":{"name":"type","abstract":"<p>Describes whether this soft button displays only text, only an image, or both</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)text":{"name":"text","abstract":"<p>Optional text to display (if defined as TEXT or BOTH type)</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)image":{"name":"image","abstract":"<p>Optional image struct for SoftButton (if defined as IMAGE or BOTH type)</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)isHighlighted":{"name":"isHighlighted","abstract":"<p>Displays in an alternate mode, e.g. with a colored background or foreground. Depends on the IVI system.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)softButtonID":{"name":"softButtonID","abstract":"<p>Value which is returned via OnButtonPress / OnButtonEvent</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)systemAction":{"name":"systemAction","abstract":"<p>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.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSliderResponse.html#/c:objc(cs)SDLSliderResponse(py)sliderPosition":{"name":"sliderPosition","abstract":"<p>The selected position of the slider.</p>","parent_name":"SDLSliderResponse"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:":{"name":"-initWithNumTicks:position:","abstract":"<p>Create an SDLSlider 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.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooter:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooter:timeout:","abstract":"<p>Create an SDLSlider with all required data and a static footer (or no footer).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:","abstract":"<p>Create an SDLSlider with all required data and a dynamic footer (or no footer).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)numTicks":{"name":"numTicks","abstract":"<p>Represents a number of selectable items on a horizontal axis</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)position":{"name":"position","abstract":"<p>An Initial position of slider control</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderHeader":{"name":"sliderHeader","abstract":"<p>A text header to display</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderFooter":{"name":"sliderFooter","abstract":"<p>A text footer to display</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)timeout":{"name":"timeout","abstract":"<p>An App defined timeout in milliseconds</p>","parent_name":"SDLSlider"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)status":{"name":"status","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":"<p>Undocumented</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText1":{"name":"navigationText1","abstract":"<p>The first line of text in a multi-line overlay screen.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText2":{"name":"navigationText2","abstract":"<p>The second line of text in a multi-line overlay screen.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)eta":{"name":"eta","abstract":"<p>Estimated Time of Arrival time at final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)timeToDestination":{"name":"timeToDestination","abstract":"<p>The amount of time needed to reach the final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)totalDistance":{"name":"totalDistance","abstract":"<p>The distance to the final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)turnIcon":{"name":"turnIcon","abstract":"<p>An icon to show with the turn description</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)nextTurnIcon":{"name":"nextTurnIcon","abstract":"<p>An icon to show with the next turn description</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuver":{"name":"distanceToManeuver","abstract":"<p>Fraction of distance till next maneuver (starting from when AlertManeuver is triggered). Used to calculate progress bar.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuverScale":{"name":"distanceToManeuverScale","abstract":"<p>Distance till next maneuver (starting from) from previous maneuver. Used to calculate progress bar.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)maneuverComplete":{"name":"maneuverComplete","abstract":"<p>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.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)softButtons":{"name":"softButtons","abstract":"<p>Three dynamic SoftButtons available (first SoftButton is fixed to <q>Turns</q>). If omitted on supported displays, the currently displayed SoftButton values will not change.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:":{"name":"-initWithMainField1:mainField2:alignment:","abstract":"<p>Undocumented</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:","abstract":"<p>Undocumented</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField1":{"name":"mainField1","abstract":"<p>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":"<p>The text displayed on the second display line of a two-line display</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField3":{"name":"mainField3","abstract":"<p>The text displayed on the first display line of the second page</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField4":{"name":"mainField4","abstract":"<p>The text displayed on the second display line of the second page</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)alignment":{"name":"alignment","abstract":"<p>The alignment that Specifies how mainField1 and mainField2 text","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)statusBar":{"name":"statusBar","abstract":"<p>Text in the Status Bar</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaClock":{"name":"mediaClock","abstract":"<p>This property is deprecated use SetMediaClockTimer instead.","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaTrack":{"name":"mediaTrack","abstract":"<p>The text in the track field</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)graphic":{"name":"graphic","abstract":"<p>An image to be shown on supported displays</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"<p>An image to be shown on supported displays</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)softButtons":{"name":"softButtons","abstract":"<p>The the Soft buttons defined by the App</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)customPresets":{"name":"customPresets","abstract":"<p>The Custom Presets defined by the App</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)metadataTags":{"name":"metadataTags","abstract":"<p>Text Field Metadata</p>","parent_name":"SDLShow"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:":{"name":"-initWithUpdateMode:hours:minutes:seconds:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:":{"name":"-initWithUpdateMode:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)startTime":{"name":"startTime","abstract":"<p>A Start Time with specifying hour, minute, second values</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)endTime":{"name":"endTime","abstract":"<p>An END time of type SDLStartTime, specifying hour, minute, second values</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)updateMode":{"name":"updateMode","abstract":"<p>The media clock/timer update mode (COUNTUP/COUNTDOWN/PAUSE/RESUME)</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetInteriorVehicleDataResponse.html#/c:objc(cs)SDLSetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"<p>The new module data for the requested module</p>","parent_name":"SDLSetInteriorVehicleDataResponse"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(im)initWithModuleData:":{"name":"-initWithModuleData:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"<p>The module data to set for the requested RC module.</p>","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:":{"name":"-initWithHelpText:timeoutText:","abstract":"<p>Initialize SetGlobalProperties with help text and timeout text</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:","abstract":"<p>Initialize SetGlobalProperties with help text, timeout text, help title, and help items</p>","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":"<p>Initialize SetGlobalProperties with all possible items</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Help prompt for when the user asks for help with an interface prompt</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>Help prompt for when an interface prompt times out</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelpTitle":{"name":"vrHelpTitle","abstract":"<p>Sets a voice recognition Help Title</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelp":{"name":"vrHelp","abstract":"<p>Sets the items listed in the VR help screen used in an interaction started by Push to Talk</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuTitle":{"name":"menuTitle","abstract":"<p>Text for the menu button label</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuIcon":{"name":"menuIcon","abstract":"<p>Icon for the menu button</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)keyboardProperties":{"name":"keyboardProperties","abstract":"<p>On-screen keyboard (perform interaction) configuration</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>The display capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>The button capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>The soft button capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>The preset bank capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithLayout:":{"name":"-initWithLayout:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)displayLayout":{"name":"displayLayout","abstract":"<p>A display layout. Predefined or dynamically created screen layout.","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetAppIcon"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(py)syncFileName":{"name":"syncFileName","abstract":"<p>A file reference name","parent_name":"SDLSetAppIcon"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>The longitudinal coordinate of the location.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>The latitudinal coordinate of the location.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationName":{"name":"locationName","abstract":"<p>Name / title of intended location</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationDescription":{"name":"locationDescription","abstract":"<p>Description of the intended location / establishment</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)addressLines":{"name":"addressLines","abstract":"<p>Location address for display purposes only</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)phoneNumber":{"name":"phoneNumber","abstract":"<p>Phone number of intended location / establishment</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationImage":{"name":"locationImage","abstract":"<p>Image / icon of intended location</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)deliveryMode":{"name":"deliveryMode","abstract":"<p>Mode in which the sendLocation request is sent</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)timeStamp":{"name":"timeStamp","abstract":"<p>Arrival time of Location. If multiple SendLocations are sent, this will be used for sorting as well.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address":{"name":"address","abstract":"<p>Address to be used for setting destination</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(im)initWithHapticRectData:":{"name":"-initWithHapticRectData:","abstract":"<p>Constructs a new SDLSendHapticData object indicated by the hapticSpatialData parameter</p>","parent_name":"SDLSendHapticData"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(py)hapticRectData":{"name":"hapticRectData","abstract":"<p>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</p>","parent_name":"SDLSendHapticData"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:":{"name":"-initWithMessage:","abstract":"<p>Undocumented</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:":{"name":"-initWithMessage:timeout:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)scrollableMessageBody":{"name":"scrollableMessageBody","abstract":"<p>A Body of text that can include newlines and tabs","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)timeout":{"name":"timeout","abstract":"<p>Gets/Sets an App defined timeout. Indicates how long of a timeout in milliseconds from the","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)softButtons":{"name":"softButtons","abstract":"<p>Gets/Sets App defined SoftButtons.If omitted on supported displays, only the","parent_name":"SDLScrollableMessage"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)resolution":{"name":"resolution","abstract":"<p>The resolution of the prescribed screen area</p>","parent_name":"SDLScreenParams"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)touchEventAvailable":{"name":"touchEventAvailable","abstract":"<p>Types of screen touch events available in screen area</p>","parent_name":"SDLScreenParams"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1":{"name":"textField1","abstract":"<p>The top text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2":{"name":"textField2","abstract":"<p>The second text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3":{"name":"textField3","abstract":"<p>The third text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4":{"name":"textField4","abstract":"<p>The fourth text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)mediaTrackTextField":{"name":"mediaTrackTextField","abstract":"<p>The media text field available within the media layout. Often less emphasized than textField(1-4)</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)primaryGraphic":{"name":"primaryGraphic","abstract":"<p>The primary graphic within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"<p>A secondary graphic used in some template layouts</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textAlignment":{"name":"textAlignment","abstract":"<p>What alignment textField(1-4) should use</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1Type":{"name":"textField1Type","abstract":"<p>The type of data textField1 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2Type":{"name":"textField2Type","abstract":"<p>The type of data textField2 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3Type":{"name":"textField3Type","abstract":"<p>The type of data textField3 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4Type":{"name":"textField4Type","abstract":"<p>The type of data textField4 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)softButtonObjects":{"name":"softButtonObjects","abstract":"<p>The current list of soft buttons within a template layout. Set this array to change the displayed soft buttons.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menu":{"name":"menu","abstract":"<p>The current list of menu cells displayed in the app&rsquo;s menu.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The current list of voice commands available for the user to speak and be recognized by the IVI&rsquo;s voice recognition engine.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)initWithConnectionManager:fileManager:":{"name":"-initWithConnectionManager:fileManager:","abstract":"<p>Initialize a screen manager</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)beginUpdates":{"name":"-beginUpdates","abstract":"<p>Delays all screen updates until endUpdatesWithCompletionHandler: is called.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdatesWithCompletionHandler:":{"name":"-endUpdatesWithCompletionHandler:","abstract":"<p>Update text fields with new text set into the text field properties. Pass an empty string <code>\\@&quot;&quot;</code> to clear the text field.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)softButtonObjectNamed:":{"name":"-softButtonObjectNamed:","abstract":"<p>Find a current soft button object with a specific name</p>","parent_name":"SDLScreenManager"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"<p>Undocumented</p>","parent_name":"SDLResetGlobalProperties"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(py)properties":{"name":"properties","abstract":"<p>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":"<p>Undocumented</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)climateControlCapabilities":{"name":"climateControlCapabilities","abstract":"<p>If included, the platform supports RC climate controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)radioControlCapabilities":{"name":"radioControlCapabilities","abstract":"<p>If included, the platform supports RC radio controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>If included, the platform supports RC button controls with the included button names.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"<p>The RPC spec version supported by the connected IVI system.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)language":{"name":"language","abstract":"<p>The currently active VR+TTS language on the module. See <q>Language</q> for options.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>The currently active display language on the module. See <q>Language</q> for options.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>Contains information about the display for the SDL system to which the application is currently connected.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>Provides information about the capabilities of a SDL HMI button.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>Contains information about a SoftButton&rsquo;s capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>If returned, the platform supports custom on-screen Presets</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"<p>Specifies HMI Zones in the vehicle.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)speechCapabilities":{"name":"speechCapabilities","abstract":"<p>Contains information about TTS capabilities on the SDL platform.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)prerecordedSpeech":{"name":"prerecordedSpeech","abstract":"<p>Contains information about the speech capabilities on the SDL platform","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vrCapabilities":{"name":"vrCapabilities","abstract":"<p>The VR capabilities of the connected SDL platform.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"<p>Describes different audio type configurations for SDLPerformAudioPassThru, e.g. {8kHz,8-bit,PCM}</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)pcmStreamCapabilities":{"name":"pcmStreamCapabilities","abstract":"<p>Describes different audio type configurations for the audio PCM stream service, e.g. {8kHz,8-bit,PCM}</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vehicleType":{"name":"vehicleType","abstract":"<p>Specifies the connected vehicle&rsquo;s type</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)supportedDiagModes":{"name":"supportedDiagModes","abstract":"<p>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.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"<p>Specifies the availability of various SDL features.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlVersion":{"name":"sdlVersion","abstract":"<p>The SmartDeviceLink Core version</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)systemSoftwareVersion":{"name":"systemSoftwareVersion","abstract":"<p>The software version of the system that implements SmartDeviceLink Core</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithLifecycleConfiguration:":{"name":"-initWithLifecycleConfiguration:","abstract":"<p>Undocumented</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:":{"name":"-initWithAppName:appId:languageDesired:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"<p>The version of the SDL interface</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appName":{"name":"appName","abstract":"<p>The Mobile Application&rsquo;s Name, This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SmartDeviceLink</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ttsName":{"name":"ttsName","abstract":"<p>TTS string for VR recognition of the mobile application name.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"<p>A String representing an abbreviated version of the mobile application&rsquo;s name (if necessary) that will be displayed on the media screen</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)vrSynonyms":{"name":"vrSynonyms","abstract":"<p>Defines a additional voice recognition commands</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)isMediaApplication":{"name":"isMediaApplication","abstract":"<p>Indicates if the application is a media or a non-media application.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)languageDesired":{"name":"languageDesired","abstract":"<p>A Language enumeration indicating what language the application intends to use for user interaction (TTS and VR).</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hmiDisplayLanguageDesired":{"name":"hmiDisplayLanguageDesired","abstract":"<p>An enumeration indicating what language the application intends to use for user interaction (Display).</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appHMIType":{"name":"appHMIType","abstract":"<p>A list of all applicable app types stating which classifications to be given to the app.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hashID":{"name":"hashID","abstract":"<p>ID used to uniquely identify current state of all app data that can persist through connection cycles (e.g. ignition cycles).</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)deviceInfo":{"name":"deviceInfo","abstract":"<p>Information about the connecting device</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appID":{"name":"appID","abstract":"<p>ID used to validate app with policy table entries</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appInfo":{"name":"appInfo","abstract":"<p>Information about the application running</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithX:y:width:height:":{"name":"-initWithX:y:width:height:","abstract":"<p>Create a Rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithCGRect:":{"name":"-initWithCGRect:","abstract":"<p>Create a Rectangle from a CGRect</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)x":{"name":"x","abstract":"<p>The X-coordinate of the user control</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)y":{"name":"y","abstract":"<p>The Y-coordinate of the user control</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)width":{"name":"width","abstract":"<p>The width of the user control&rsquo;s bounding rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)height":{"name":"height","abstract":"<p>The height of the user control&rsquo;s bounding rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLReadDIDResponse.html#/c:objc(cs)SDLReadDIDResponse(py)didResult":{"name":"didResult","abstract":"<p>Array of requested DID results (with data if available).</p>","parent_name":"SDLReadDIDResponse"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(im)initWithECUName:didLocation:":{"name":"-initWithECUName:didLocation:","abstract":"<p>Undocumented</p>","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)ecuName":{"name":"ecuName","abstract":"<p>An ID of the vehicle module","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)didLocation":{"name":"didLocation","abstract":"<p>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":"<p>Undocumented</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyInteger":{"name":"frequencyInteger","abstract":"<p>The integer part of the frequency ie for 101.7 this value should be 101</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyFraction":{"name":"frequencyFraction","abstract":"<p>The fractional part of the frequency for 101.7 is 7</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)band":{"name":"band","abstract":"<p>Radio band value</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)rdsData":{"name":"rdsData","abstract":"<p>Read only parameter. See RDSData data type for details.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDs":{"name":"availableHDs","abstract":"<p>number of HD sub-channels if available</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdChannel":{"name":"hdChannel","abstract":"<p>Current HD sub-channel if available</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalStrength":{"name":"signalStrength","abstract":"<p>Signal Strength Value</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalChangeThreshold":{"name":"signalChangeThreshold","abstract":"<p>If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)radioEnable":{"name":"radioEnable","abstract":"<p>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</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)state":{"name":"state","abstract":"<p>Read only parameter. See RadioState data type for details.</p>","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":"<p>Undocumented</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>The short friendly name of the climate control module.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioEnableAvailable":{"name":"radioEnableAvailable","abstract":"<p>Availability of the control of enable/disable radio.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioBandAvailable":{"name":"radioBandAvailable","abstract":"<p>Availability of the control of radio band.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioFrequencyAvailable":{"name":"radioFrequencyAvailable","abstract":"<p>Availability of the control of radio frequency.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdChannelAvailable":{"name":"hdChannelAvailable","abstract":"<p>Availability of the control of HD radio channel.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)rdsDataAvailable":{"name":"rdsDataAvailable","abstract":"<p>Availability of the getting Radio Data System (RDS) data.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDsAvailable":{"name":"availableHDsAvailable","abstract":"<p>Availability of the getting the number of available HD channels.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)stateAvailable":{"name":"stateAvailable","abstract":"<p>Availability of the getting the Radio state.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalStrengthAvailable":{"name":"signalStrengthAvailable","abstract":"<p>Availability of the getting the signal strength.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalChangeThresholdAvailable":{"name":"signalChangeThresholdAvailable","abstract":"<p>Availability of the getting the signal Change Threshold</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct@store":{"name":"store","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)initWithDictionary:":{"name":"-initWithDictionary:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)init":{"name":"-init","abstract":"<p>Init</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)serializeAsDictionary:":{"name":"-serializeAsDictionary:","abstract":"<p>Converts struct to JSON formatted data</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(py)response":{"name":"response","abstract":"<p>The response within the userinfo dictionary</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)initWithName:object:rpcResponse:":{"name":"-initWithName:object:rpcResponse:","abstract":"<p>Create an NSNotification object caontaining an SDLRPCResponse</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseMemberOfClass:":{"name":"-isResponseMemberOfClass:","abstract":"<p>Returns whether or not the containing response is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseKindOfClass:":{"name":"-isResponseKindOfClass:","abstract":"<p>Returns whether or not the containing response is a kind of class, including subclasses.</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)correlationID":{"name":"correlationID","abstract":"<p>The correlation id of the corresponding SDLRPCRequest.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)success":{"name":"success","abstract":"<p>Whether or not the SDLRPCRequest was successful.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)resultCode":{"name":"resultCode","abstract":"<p>The result of the SDLRPCRequest. If the request failed, the result code contains the failure reason.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)info":{"name":"info","abstract":"<p>More detailed success or error message.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCRequest.html#/c:objc(cs)SDLRPCRequest(py)correlationID":{"name":"correlationID","abstract":"<p>A unique id assigned to message sent to Core. The Correlation ID is used to map a request to its response.</p>","parent_name":"SDLRPCRequest"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(py)notification":{"name":"notification","abstract":"<p>The notification within the userinfo dictionary</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)initWithName:object:rpcNotification:":{"name":"-initWithName:object:rpcNotification:","abstract":"<p>Create an NSNotification object caontaining an SDLRPCNotification</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationMemberOfClass:":{"name":"-isNotificationMemberOfClass:","abstract":"<p>Returns whether or not the containing notification is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationKindOfClass:":{"name":"-isNotificationKindOfClass:","abstract":"<p>Returns whether or not the containing notification is a kind of class, including subclasses.</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage@function":{"name":"function","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage@parameters":{"name":"parameters","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage@messageType":{"name":"messageType","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)initWithDictionary:":{"name":"-initWithDictionary:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getFunctionName":{"name":"-getFunctionName","abstract":"<p>Returns the function name.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setFunctionName:":{"name":"-setFunctionName:","abstract":"<p>Sets the function name.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getParameters:":{"name":"-getParameters:","abstract":"<p>Returns the value associated with the provided key. If the key does not exist, null is returned.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setParameters:value:":{"name":"-setParameters:value:","abstract":"<p>Sets a key-value pair using the function name as the key.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)bulkData":{"name":"bulkData","abstract":"<p>The data in the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)name":{"name":"name","abstract":"<p>The name of the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)messageType":{"name":"messageType","abstract":"<p>The type of data in the message</p>","parent_name":"SDLRPCMessage"},"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":"<p>Undocumented</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programService":{"name":"programService","abstract":"<p>Program Service Name</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)radioText":{"name":"radioText","abstract":"<p>Radio Text</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)clockText":{"name":"clockText","abstract":"<p>The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programIdentification":{"name":"programIdentification","abstract":"<p>Program Identification - the call sign for the radio station</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programType":{"name":"programType","abstract":"<p>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":"<p>Traffic Program Identification - Identifies a station that offers traffic</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficAnnouncementIdentification":{"name":"trafficAnnouncementIdentification","abstract":"<p>Traffic Announcement Identification - Indicates an ongoing traffic announcement</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)region":{"name":"region","abstract":"<p>Region</p>","parent_name":"SDLRDSData"},"Classes/SDLPutFileResponse.html#/c:objc(cs)SDLPutFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>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.</p>","parent_name":"SDLPutFileResponse"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:":{"name":"-initWithFileName:fileType:","abstract":"<p>Undocumented</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:":{"name":"-initWithFileName:fileType:persistentFile:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)syncFileName":{"name":"syncFileName","abstract":"<p>A file reference name</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)fileType":{"name":"fileType","abstract":"<p>A FileType value representing a selected file type</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)persistentFile":{"name":"persistentFile","abstract":"<p>A value to indicates if the file is meant to persist between","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)systemFile":{"name":"systemFile","abstract":"<p>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.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)offset":{"name":"offset","abstract":"<p>Offset in bytes for resuming partial data chunks.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)length":{"name":"length","abstract":"<p>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</p>","parent_name":"SDLPutFile"},"Classes/SDLPresetBankCapabilities.html#/c:objc(cs)SDLPresetBankCapabilities(py)onScreenPresetsAvailable":{"name":"onScreenPresetsAvailable","abstract":"<p>If Onscreen custom presets are available.</p>","parent_name":"SDLPresetBankCapabilities"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(im)initWithFirstTouch:secondTouch:":{"name":"-initWithFirstTouch:secondTouch:","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)firstTouch":{"name":"firstTouch","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)secondTouch":{"name":"secondTouch","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)distance":{"name":"distance","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)center":{"name":"center","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)isValid":{"name":"isValid","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(im)initWithDialNumber:":{"name":"-initWithDialNumber:","abstract":"<p>Undocumented</p>","parent_name":"SDLPhoneCapability"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(py)dialNumberEnabled":{"name":"dialNumberEnabled","abstract":"<p>Whether or not the DialNumber RPC is enabled.</p>","parent_name":"SDLPhoneCapability"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>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 <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager. This method is used internally.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)isRPCAllowed:":{"name":"-isRPCAllowed:","abstract":"<p>Determine if an individual RPC is allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)groupStatusOfRPCs:":{"name":"-groupStatusOfRPCs:","abstract":"<p>Determine if all RPCs are allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)statusOfRPCs:":{"name":"-statusOfRPCs:","abstract":"<p>Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber<BOOL> specifying if that RPC is currently allowed</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)addObserverForRPCs:groupType:withHandler:":{"name":"-addObserverForRPCs:groupType:withHandler:","abstract":"<p>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.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeAllObservers":{"name":"-removeAllObservers","abstract":"<p>Remove every current observer</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeObserverForIdentifier:":{"name":"-removeObserverForIdentifier:","abstract":"<p>Remove block observers for the specified RPC</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)rpcName":{"name":"rpcName","abstract":"<p>Name of the individual RPC in the policy table.</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)hmiPermissions":{"name":"hmiPermissions","abstract":"<p>HMI Permissions for the individual RPC; i.e. which HMI levels may it be used in</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)parameterPermissions":{"name":"parameterPermissions","abstract":"<p>RPC parameters for the individual RPC</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)choiceID":{"name":"choiceID","abstract":"<p>ID of the choice that was selected in response to PerformInteraction. Only is valid if general result is <q>success:true</q>.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)manualTextEntry":{"name":"manualTextEntry","abstract":"<p>Manually entered text selection, e.g. through keyboard. Can be returned in lieu of choiceID, depending on the trigger source.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)triggerSource":{"name":"triggerSource","abstract":"<p>A <em>SDLTriggerSource</em> object which will be shown in the HMI. Only is valid if resultCode is SUCCESS.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetId:":{"name":"-initWithInteractionChoiceSetId:","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetIdList:":{"name":"-initWithInteractionChoiceSetIdList:","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialText":{"name":"initialText","abstract":"<p>The Text that Displayed when the interaction begins. This text may","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>An array of one or more TTSChunks that, taken together, specify","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionMode":{"name":"interactionMode","abstract":"<p>The Indicates mode that indicate how user selects interaction","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionChoiceSetIDList":{"name":"interactionChoiceSetIDList","abstract":"<p>A Vector<Integer> value representing an Array of one or more Choice","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>A Vector<TTSChunk> which taken together, specify the help phrase to","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>An array of TTSChunks which, taken together, specify the phrase to","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeout":{"name":"timeout","abstract":"<p>An Integer value representing the amount of time, in milliseconds,","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)vrHelp":{"name":"vrHelp","abstract":"<p>A Voice recognition Help, which is a suggested VR Help Items to","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionLayout":{"name":"interactionLayout","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:","abstract":"<p>Undocumented</p>","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:","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>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":"<p>a line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText2":{"name":"audioPassThruDisplayText2","abstract":"<p>A line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)samplingRate":{"name":"samplingRate","abstract":"<p>A samplingRate</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)maxDuration":{"name":"maxDuration","abstract":"<p>the maximum duration of audio recording in milliseconds</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)bitsPerSample":{"name":"bitsPerSample","abstract":"<p>the quality the audio is recorded - 8 bit or 16 bit</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioType":{"name":"audioType","abstract":"<p>an audioType</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)muteAudio":{"name":"muteAudio","abstract":"<p>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":"<p>A handler that will be called whenever an <code>onAudioPassThru</code> notification is received.</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)allowed":{"name":"allowed","abstract":"<p>A set of all parameters that are permitted for this given RPC.</p>","parent_name":"SDLParameterPermissions"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"<p>A set of all parameters that are prohibited for this given RPC.</p>","parent_name":"SDLParameterPermissions"},"Classes/SDLOnWayPointChange.html#/c:objc(cs)SDLOnWayPointChange(py)waypoints":{"name":"waypoints","abstract":"<p>Location address for display purposes only</p>","parent_name":"SDLOnWayPointChange"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)gps":{"name":"gps","abstract":"<p>The car current GPS coordinates</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)speed":{"name":"speed","abstract":"<p>The vehicle speed in kilometers per hour</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)rpm":{"name":"rpm","abstract":"<p>The number of revolutions per minute of the engine.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The fuel level in the tank (percentage)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The fuel level state</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The instantaneous fuel consumption in microlitres</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The external temperature in degrees celsius.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)vin":{"name":"vin","abstract":"<p>The Vehicle Identification Number</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)prndl":{"name":"prndl","abstract":"<p>The current gear shift state of the user&rsquo;s vehicle</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>The current pressure warnings for the user&rsquo;s vehicle</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)odometer":{"name":"odometer","abstract":"<p>Odometer reading in km</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>The status of the seat belts</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The body information including power modes</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The IVI system status including signal and battery strength</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>The status of the brake pedal</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The status of the wipers</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>Status of the head lamps</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>Torque value for engine (in Nm) on non-diesel variants</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>Accelerator pedal position (percentage depressed)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>Current angle of the steering wheel (in deg)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Emergency Call notification and confirmation data</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The status of the air bags</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Information related to an emergency event (and if it occurred)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>The status modes of the cluster</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)myKey":{"name":"myKey","abstract":"<p>Information related to the MyKey feature</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)type":{"name":"type","abstract":"<p>The type of touch event.</p>","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)event":{"name":"event","abstract":"<p>List of all individual touches involved in this event.</p>","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTBTClientState.html#/c:objc(cs)SDLOnTBTClientState(py)state":{"name":"state","abstract":"<p>Current State of TBT client</p>","parent_name":"SDLOnTBTClientState"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType":{"name":"requestType","abstract":"<p>The type of system request.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)url":{"name":"url","abstract":"<p>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.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)timeout":{"name":"timeout","abstract":"<p>Optional timeout for HTTP requests Required if a URL is provided</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)fileType":{"name":"fileType","abstract":"<p>Optional file type (meant for HTTP file requests).</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)offset":{"name":"offset","abstract":"<p>Optional offset in bytes for resuming partial data chunks</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)length":{"name":"length","abstract":"<p>Optional length in bytes for resuming partial data chunks</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)URL":{"name":"URL","abstract":"<p>Undocumented</p>","parent_name":"SDLOnSyncPData"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)Timeout":{"name":"Timeout","abstract":"<p>Undocumented</p>","parent_name":"SDLOnSyncPData"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)permissionItem":{"name":"permissionItem","abstract":"<p>Describes change in permissions for a given set of RPCs</p>","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)driverDistractionStatus":{"name":"driverDistractionStatus","abstract":"<p>Get the current driver distraction status(i.e. whether driver distraction rules are in effect, or not)</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)userSelected":{"name":"userSelected","abstract":"<p>Get user selection status for the application (has the app been selected via hmi or voice command)</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)lockScreenStatus":{"name":"lockScreenStatus","abstract":"<p>Indicates if the lockscreen should be required, optional or off</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>Get HMILevel in effect for the application</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)language":{"name":"language","abstract":"<p>Current SDL voice engine (VR+TTS) language</p>","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>Current display language</p>","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)event":{"name":"event","abstract":"<p>The type of keyboard input</p>","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)data":{"name":"data","abstract":"<p>The current keyboard string input from the user</p>","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnInteriorVehicleData.html#/c:objc(cs)SDLOnInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"<p>The subscribed module data that changed</p>","parent_name":"SDLOnInteriorVehicleData"},"Classes/SDLOnHashChange.html#/c:objc(cs)SDLOnHashChange(py)hashID":{"name":"hashID","abstract":"<p>Calculated hash ID to be referenced during RegisterAppInterface request.</p>","parent_name":"SDLOnHashChange"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>SDLHMILevel in effect for the application</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)audioStreamingState":{"name":"audioStreamingState","abstract":"<p>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.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)systemContext":{"name":"systemContext","abstract":"<p>Whether a user-initiated interaction is in-progress (VRSESSION or MENU), or not (MAIN)</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)data":{"name":"data","abstract":"<p>Contains base64 encoded string of SyncP packets.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)URL":{"name":"URL","abstract":"<p>If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded to the provided URL.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)Timeout":{"name":"Timeout","abstract":"<p>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.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)state":{"name":"state","abstract":"<p>The driver distraction state (i.e. whether driver distraction rules are in effect, or not)</p>","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)cmdID":{"name":"cmdID","abstract":"<p>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.</p>","parent_name":"SDLOnCommand"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)triggerSource":{"name":"triggerSource","abstract":"<p>Indicates whether command was selected via voice or via a menu selection (using the OK button).</p>","parent_name":"SDLOnCommand"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonName":{"name":"buttonName","abstract":"<p>The button&rsquo;s name</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press event</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)customButtonID":{"name":"customButtonID","abstract":"<p>If ButtonName is <q>CUSTOM_BUTTON</q>, this references the integer ID passed by a custom button. (e.g. softButton ID)</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonName":{"name":"buttonName","abstract":"<p>The name of the button</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonEventMode":{"name":"buttonEventMode","abstract":"<p>Indicates whether this is an UP or DOWN event</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)customButtonID":{"name":"customButtonID","abstract":"<p>If ButtonName is <q>CUSTOM_BUTTON</q>, this references the integer ID passed by a custom button. (e.g. softButton ID)</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnAppInterfaceUnregistered.html#/c:objc(cs)SDLOnAppInterfaceUnregistered(py)reason":{"name":"reason","abstract":"<p>The reason application&rsquo;s interface was terminated</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryName":{"name":"countryName","abstract":"<p>Name of the country (localized)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryCode":{"name":"countryCode","abstract":"<p>countryCode of the country(ISO 3166-2)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)postalCode":{"name":"postalCode","abstract":"<p>postalCode of location (PLZ, ZIP, PIN, CAP etc.)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)administrativeArea":{"name":"administrativeArea","abstract":"<p>Portion of country (e.g. state)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subAdministrativeArea":{"name":"subAdministrativeArea","abstract":"<p>Portion of administrativeArea (e.g. county)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)locality":{"name":"locality","abstract":"<p>Hypernym for city/village</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subLocality":{"name":"subLocality","abstract":"<p>Hypernym for district</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)thoroughfare":{"name":"thoroughfare","abstract":"<p>Hypernym for street, road etc.</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subThoroughfare":{"name":"subThoroughfare","abstract":"<p>Portion of thoroughfare (e.g. house number)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allResponseNames":{"name":"+allResponseNames","abstract":"<p>All of the possible SDL RPC Response notification names</p>","parent_name":"SDLNotificationConstants"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allButtonEventNotifications":{"name":"+allButtonEventNotifications","abstract":"<p>All of the possible SDL Button event notification names</p>","parent_name":"SDLNotificationConstants"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(im)initWithSendLocation:waypoints:":{"name":"-initWithSendLocation:waypoints:","abstract":"<p>Undocumented</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)sendLocationEnabled":{"name":"sendLocationEnabled","abstract":"<p>Whether or not the SendLocation RPC is enabled.</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)getWayPointsEnabled":{"name":"getWayPointsEnabled","abstract":"<p>Whether or not Waypoint related RPCs are enabled.</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLMyKey.html#/c:objc(cs)SDLMyKey(py)e911Override":{"name":"e911Override","abstract":"<p>Indicates whether e911 override is on. References signal <q>MyKey_e911Override_St</q>. See VehicleDataStatus.</p>","parent_name":"SDLMyKey"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithRadioControlData:":{"name":"-initWithRadioControlData:","abstract":"<p>Undocumented</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithClimateControlData:":{"name":"-initWithClimateControlData:","abstract":"<p>Undocumented</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleType":{"name":"moduleType","abstract":"<p>The moduleType indicates which type of data should be changed and identifies which data object exists in this struct.</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)radioControlData":{"name":"radioControlData","abstract":"<p>The radio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)climateControlData":{"name":"climateControlData","abstract":"<p>The climate control data</p>","parent_name":"SDLModuleData"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:":{"name":"-initWithTextFieldTypes:mainField2:","abstract":"<p>Constructs a newly allocated SDLMetadataType object with NSArrays</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:mainField3:mainField4:":{"name":"-initWithTextFieldTypes:mainField2:mainField3:mainField4:","abstract":"<p>Undocumented</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField1":{"name":"mainField1","abstract":"<p>The type of data contained in the <q>mainField1</q> text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField2":{"name":"mainField2","abstract":"<p>The type of data contained in the <q>mainField2</q> text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField3":{"name":"mainField3","abstract":"<p>The type of data contained in the <q>mainField3</q> text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField4":{"name":"mainField4","abstract":"<p>The type of data contained in the <q>mainField4</q> text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:":{"name":"-initWithMenuName:","abstract":"<p>Undocumented</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:parentId:position:":{"name":"-initWithMenuName:parentId:position:","abstract":"<p>Undocumented</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)parentID":{"name":"parentID","abstract":"<p>The unique ID of an existing submenu to which a command will be added</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)position":{"name":"position","abstract":"<p>The position within the items of the parent Command Menu</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)menuName":{"name":"menuName","abstract":"<p>The menu name which appears in menu, representing this command</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)title":{"name":"title","abstract":"<p>The cell&rsquo;s text to be displayed</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)icon":{"name":"icon","abstract":"<p>The cell&rsquo;s icon to be displayed</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The strings the user can say to activate this voice command</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)handler":{"name":"handler","abstract":"<p>The handler that will be called when the command is activated</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)subCells":{"name":"subCells","abstract":"<p>If this is non-nil, this cell will be a sub-menu button, displaying the subcells in a menu when pressed.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:voiceCommands:handler:":{"name":"-initWithTitle:icon:voiceCommands:handler:","abstract":"<p>Undocumented</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:subCells:":{"name":"-initWithTitle:subCells:","abstract":"<p>Undocumented</p>","parent_name":"SDLMenuCell"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)configuration":{"name":"configuration","abstract":"<p>The configuration the manager was set up with.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>The current HMI level of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)audioStreamingState":{"name":"audioStreamingState","abstract":"<p>The current audio streaming state of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemContext":{"name":"systemContext","abstract":"<p>The current system context of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)fileManager":{"name":"fileManager","abstract":"<p>The file manager to be used by the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)permissionManager":{"name":"permissionManager","abstract":"<p>The permission manager monitoring RPC permissions.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)streamManager":{"name":"streamManager","abstract":"<p>The streaming media manager to be used for starting video sessions.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)screenManager":{"name":"screenManager","abstract":"<p>The screen manager for sending UI related RPCs.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemCapabilityManager":{"name":"systemCapabilityManager","abstract":"<p>Centralized manager for retrieving all system capabilities.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)registerResponse":{"name":"registerResponse","abstract":"<p>The response of a register call after it has been received.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)delegate":{"name":"delegate","abstract":"<p>The manager&rsquo;s delegate.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)pendingRPCTransactions":{"name":"pendingRPCTransactions","abstract":"<p>The currently pending RPC request send transactions</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)proxy":{"name":"proxy","abstract":"<p>Undocumented</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)initWithConfiguration:delegate:":{"name":"-initWithConfiguration:delegate:","abstract":"<p>Initialize the manager with a configuration. Call <code>startWithHandler</code> to begin waiting for a connection.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startWithReadyHandler:":{"name":"-startWithReadyHandler:","abstract":"<p>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.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager, it will disconnect if needed and no longer look for a connection. You probably don&rsquo;t need to call this method ever.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:":{"name":"-sendRequest:","abstract":"<p>Send an RPC request and don&rsquo;t bother with the response or error. If you need the response or error, call sendRequest:withCompletionHandler: instead.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:withResponseHandler:":{"name":"-sendRequest:withResponseHandler:","abstract":"<p>Send an RPC request and set a completion handler that will be called with the response when the response returns.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequests:progressHandler:completionHandler:":{"name":"-sendRequests:progressHandler:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendSequentialRequests:progressHandler:completionHandler:":{"name":"-sendSequentialRequests:progressHandler:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)modules":{"name":"modules","abstract":"<p>Active log modules</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)targets":{"name":"targets","abstract":"<p>Active log targets</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)filters":{"name":"filters","abstract":"<p>Active log filters</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)globalLogLevel":{"name":"globalLogLevel","abstract":"<p>Any modules that do not have an explicitly specified level will by default use this log level</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)formatType":{"name":"formatType","abstract":"<p>Active log format</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)asynchronous":{"name":"asynchronous","abstract":"<p>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.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"<p>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.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)dateFormatter":{"name":"dateFormatter","abstract":"<p>Active date formatter</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)logQueue":{"name":"logQueue","abstract":"<p>The queue asynchronously logged logs are logged on. Say that 10 times fast.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)sharedManager":{"name":"+sharedManager","abstract":"<p>The singleton object</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)setConfiguration:":{"name":"+setConfiguration:","abstract":"<p>Sets a configuration to be used by the log manager&rsquo;s sharedManager. This is generally for internal use and you should set your configuration using SDLManager&rsquo;s startWithConfiguration: method.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)setConfiguration:":{"name":"-setConfiguration:","abstract":"<p>Sets a configuration to be used by the log manager. This is generally for internal use and you should set your configuration using SDLManager&rsquo;s startWithConfiguration: method.</p>","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":"<p>Log to the sharedManager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","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":"<p>Log to this log manager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","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":"<p>Log to this sharedManager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","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":"<p>Log to this log manager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","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":"<p>Log to this sharedManager&rsquo;s active log targets. This is used internally to log.</p>","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":"<p>Log to this manager&rsquo;s active log targets. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(py)filter":{"name":"filter","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)initWithCustomFilter:":{"name":"-initWithCustomFilter:","abstract":"<p>Create a new filter with a custom filter block. The filter block will take a log model and return a BOOL of pass / fail.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingString:caseSensitive:":{"name":"+filterByDisallowingString:caseSensitive:","abstract":"<p>Returns a filter that only allows logs not containing the passed string within their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingString:caseSensitive:":{"name":"+filterByAllowingString:caseSensitive:","abstract":"<p>Returns a filter that only allows logs containing the passed string within their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingRegex:":{"name":"+filterByDisallowingRegex:","abstract":"<p>Returns a filter that only allows logs not passing the passed regex against their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingRegex:":{"name":"+filterByAllowingRegex:","abstract":"<p>Returns a filter that only allows logs passing the passed regex against their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingModules:":{"name":"+filterByDisallowingModules:","abstract":"<p>Returns a filter that only allows logs not within the specified file modules to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingModules:":{"name":"+filterByAllowingModules:","abstract":"<p>Returns a filter that only allows logs of the specified file modules to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingFileNames:":{"name":"+filterByDisallowingFileNames:","abstract":"<p>Returns a filter that only allows logs not within the specified files to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingFileNames:":{"name":"+filterByAllowingFileNames:","abstract":"<p>Returns a filter that only allows logs within the specified files to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)name":{"name":"name","abstract":"<p>The name of the this module, e.g. <q>Transport</q></p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)files":{"name":"files","abstract":"<p>All of the files contained within this module. When a log is logged, the <code>__FILE__</code> (in Obj-C) or <code>#file</code> (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&rsquo;s log level and the module&rsquo;s name will be printed in the formatted log.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)logLevel":{"name":"logLevel","abstract":"<p>The custom level of the log. This is <code>SDLLogLevelDefault</code> (whatever the current global log level is) by default.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)init":{"name":"-init","abstract":"<p>This method is unavailable and may not be used.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:level:":{"name":"-initWithName:files:level:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name, set of files, and associated log level.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:":{"name":"-initWithName:files:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name and set of files. The logging level is the same as the current global logging file by using <code>SDLLogLevelDefault</code>.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(cm)moduleWithName:files:":{"name":"+moduleWithName:files:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name and set of files. The logging level is the same as the current global logging file by using <code>SDLLogLevelDefault</code>.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)containsFile:":{"name":"-containsFile:","abstract":"<p>Returns whether or not this module contains a given file.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)modules":{"name":"modules","abstract":"<p>Any custom logging modules used by the developer&rsquo;s code. Defaults to none.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)targets":{"name":"targets","abstract":"<p>Where the logs will attempt to output. Defaults to Console.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)filters":{"name":"filters","abstract":"<p>What log filters will run over this session. Defaults to none.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)formatType":{"name":"formatType","abstract":"<p>How detailed of logs will be output. Defaults to Default.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)asynchronous":{"name":"asynchronous","abstract":"<p>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.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"<p>Whether or not error logs will be dispatched to loggers asynchronously. Defaults to NO.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)globalLogLevel":{"name":"globalLogLevel","abstract":"<p>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":"<p>A default logger for production. This sets the format type to Default, the log level to Error, and only enables the ASL logger.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)debugConfiguration":{"name":"+debugConfiguration","abstract":"<p>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.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)appIcon":{"name":"appIcon","abstract":"<p>The app&rsquo;s icon. This will be set by the lock screen configuration.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)vehicleIcon":{"name":"vehicleIcon","abstract":"<p>The vehicle&rsquo;s designated icon. This will be set by the lock screen manager when it is notified that a lock screen icon has been downloaded.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The designated background color set in the lock screen configuration, or the default SDL gray-blue.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showInOptionalState":{"name":"showInOptionalState","abstract":"<p>Whether or not the lock screen should be shown in the <q>lock screen optional</q> state. Defaults to &lsquo;NO&rsquo;.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableAutomaticLockScreen":{"name":"enableAutomaticLockScreen","abstract":"<p>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.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The background color of the lock screen. This could be a branding color, or leave at the default for a dark blue-gray.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)appIcon":{"name":"appIcon","abstract":"<p>Your app icon as it will appear on the lock screen.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)customViewController":{"name":"customViewController","abstract":"<p>A custom view controller that the lock screen will manage the presentation of.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)disabledConfiguration":{"name":"+disabledConfiguration","abstract":"<p>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.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfiguration":{"name":"+enabledConfiguration","abstract":"<p>Use this configuration for the basic default lock screen. A custom app icon will not be used.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithAppIcon:backgroundColor:":{"name":"+enabledConfigurationWithAppIcon:backgroundColor:","abstract":"<p>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.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithViewController:":{"name":"+enabledConfigurationWithViewController:","abstract":"<p>Use this configuration if you wish to provide your own view controller for the lock screen. This view controller&rsquo;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.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)coordinate":{"name":"coordinate","abstract":"<p>Latitude/Longitude of the location</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationName":{"name":"locationName","abstract":"<p>Name of location.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)addressLines":{"name":"addressLines","abstract":"<p>Location address for display purposes only.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationDescription":{"name":"locationDescription","abstract":"<p>Description intended location / establishment.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)phoneNumber":{"name":"phoneNumber","abstract":"<p>Phone number of location / establishment.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationImage":{"name":"locationImage","abstract":"<p>Image / icon of intended location.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)searchAddress":{"name":"searchAddress","abstract":"<p>Address to be used by navigation engines for search.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>Latitude of the location</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>Longitude of the location</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)filenames":{"name":"filenames","abstract":"<p>An array of all filenames resident on the module for the given registered app. If omitted, then no files currently reside on the system.</p>","parent_name":"SDLListFilesResponse"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>Provides the total local space available on the module for the registered app.</p>","parent_name":"SDLListFilesResponse"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)appName":{"name":"appName","abstract":"<p>The full name of the app to that the configuration should be updated to.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)shortAppName":{"name":"shortAppName","abstract":"<p>An abbrevited application name that will be used on the app launching screen if the full one would be truncated.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)ttsName":{"name":"ttsName","abstract":"<p>A Text to Speech String for voice recognition of the mobile application name.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"<p>Additional voice recognition commands. May not interfere with any other app name or global commands.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(im)initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:":{"name":"-initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:","abstract":"<p>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":"<p>Undocumented</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:appId:":{"name":"+defaultConfigurationWithAppName:appId:","abstract":"<p>A production configuration that runs using IAP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:appId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:appId:ipAddress:port:","abstract":"<p>A debug configuration that runs using TCP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugMode":{"name":"tcpDebugMode","abstract":"<p>Whether or not debug mode is enabled</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugIPAddress":{"name":"tcpDebugIPAddress","abstract":"<p>The ip address at which the library will look for a server</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugPort":{"name":"tcpDebugPort","abstract":"<p>The port at which the library will look for a server</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appName":{"name":"appName","abstract":"<p>The full name of the app</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId":{"name":"appId","abstract":"<p>The app id. This must be the same as the app id received from the SDL developer portal or OEM.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)resumeHash":{"name":"resumeHash","abstract":"<p>A hash id which should be passed to the remote system in the RegisterAppInterface</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)isMedia":{"name":"isMedia","abstract":"<p>This is an automatically set based on the app type</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType":{"name":"appType","abstract":"<p>The application type</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)additionalAppTypes":{"name":"additionalAppTypes","abstract":"<p>Additional application types beyond <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType\">appType</a></code></p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)language":{"name":"language","abstract":"<p>The default language to use</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)languagesSupported":{"name":"languagesSupported","abstract":"<p>An array of all the supported languages</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appIcon":{"name":"appIcon","abstract":"<p>The application icon to be used on an app launching screen</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)shortAppName":{"name":"shortAppName","abstract":"<p>An abbrevited application name that will be used on the app launching screen if the full one would be truncated</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)ttsName":{"name":"ttsName","abstract":"<p>A Text to Speech String for voice recognition of the mobile application name.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"<p>Additional voice recognition commands. May not interfere with any other app name or global commands.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:","abstract":"<p>Undocumented</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)language":{"name":"language","abstract":"<p>The keyboard language</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keyboardLayout":{"name":"keyboardLayout","abstract":"<p>Desired keyboard layout</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keypressMode":{"name":"keypressMode","abstract":"<p>Desired keypress mode.</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)limitedCharacterList":{"name":"limitedCharacterList","abstract":"<p>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.</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteText":{"name":"autoCompleteText","abstract":"<p>Allows an app to prepopulate the text field with a suggested or completed entry as the user types</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionWidth":{"name":"resolutionWidth","abstract":"<p>Resolution width</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionHeight":{"name":"resolutionHeight","abstract":"<p>Resolution height</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(im)initWithWidth:height:":{"name":"-initWithWidth:height:","abstract":"<p>Undocumented</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)name":{"name":"name","abstract":"<p>The name that identifies the field.</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"<p>The image types that are supported in this field.</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageResolution":{"name":"imageResolution","abstract":"<p>The image resolution of this field</p>","parent_name":"SDLImageField"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:":{"name":"-initWithName:ofType:","abstract":"<p>Undocumented</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Undocumented</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticImageValue:":{"name":"-initWithStaticImageValue:","abstract":"<p>Undocumented</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)value":{"name":"value","abstract":"<p>The static hex icon value or the binary image file name identifier (sent by SDLPutFile)</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)imageType":{"name":"imageType","abstract":"<p>Describes whether the image is static or dynamic</p>","parent_name":"SDLImage"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)lowBeamsOn":{"name":"lowBeamsOn","abstract":"<p>Low beams are on or off.</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)highBeamsOn":{"name":"highBeamsOn","abstract":"<p>High beams are on or off</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)ambientLightSensorStatus":{"name":"ambientLightSensorStatus","abstract":"<p>Status of the ambient light senser</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(im)initWithId:rect:":{"name":"-initWithId:rect:","abstract":"<p>Undocumented</p>","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)id":{"name":"id","abstract":"<p>A user control spatial identifier</p>","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)rect":{"name":"rect","abstract":"<p>The position of the haptic rectangle to be highlighted. The center of this rectangle will be <q>touched</q> when a press occurs.</p>","parent_name":"SDLHapticRect"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)allowed":{"name":"allowed","abstract":"<p>A set of all HMI levels that are permitted for this given RPC</p>","parent_name":"SDLHMIPermissions"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"<p>A set of all HMI levels that are prohibited for this given RPC</p>","parent_name":"SDLHMIPermissions"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)navigation":{"name":"navigation","abstract":"<p>Availability of built in Nav. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)phoneCall":{"name":"phoneCall","abstract":"<p>Availability of built in phone. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)videoStreaming":{"name":"videoStreaming","abstract":"<p>Availability of built in video streaming. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLGetWayPointsResponse.html#/c:objc(cs)SDLGetWayPointsResponse(py)waypoints":{"name":"waypoints","abstract":"<p>Provides additional human readable info regarding the result.</p>","parent_name":"SDLGetWayPointsResponse"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(im)initWithType:":{"name":"-initWithType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetWayPoints"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(py)waypointType":{"name":"waypointType","abstract":"<p>To request for either the destination","parent_name":"SDLGetWayPoints"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The car current GPS coordinates</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The vehicle speed in kilometers per hour</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The number of revolutions per minute of the engine.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The fuel level in the tank (percentage)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The fuel level state</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The instantaneous fuel consumption in microlitres</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The external temperature in degrees celsius.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)vin":{"name":"vin","abstract":"<p>The Vehicle Identification Number</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The current gear shift state of the user&rsquo;s vehicle</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The current pressure warnings for the user&rsquo;s vehicle</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>Odometer reading in km</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The status of the seat belts</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The body information including power modes</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The IVI system status including signal and battery strength</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The status of the brake pedal</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The status of the wipers</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>Status of the head lamps</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>Torque value for engine (in Nm) on non-diesel variants</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>Accelerator pedal position (percentage depressed)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>Current angle of the steering wheel (in deg)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Emergency Call notification and confirmation data</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The status of the air bags</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Information related to an emergency event (and if it occurred)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>The status modes of the cluster</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>Information related to the MyKey feature</p>","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":"<p>Undocumented</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, requests Gps data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, requests speed data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, requests rpm data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, requests FuelLevel data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, requests fuelLevel_State data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, requests instantFuelConsumption data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, requests externalTemperature data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)vin":{"name":"vin","abstract":"<p>A boolean value. If true, requests Vehicle Identification Number</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, requests Currently selected gear data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, requests tire pressure status data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, requests odometer data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, requests belt Status data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, requests body Information data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, requests device Status data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, requests driver Braking data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, requests wiper Status data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, requests Head Lamp Status data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, requests Engine Torque data</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, means the accPedalPosition data has been","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>A boolean value. If true, means the steeringWheelAngle data has been","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>If true, the Emergency Call notification and confirmation data has been subscribed</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>If true, the status of the air bags has been subscribed</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>If true, information related to an emergency event (and if it occurred) has been subscribed</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>If true, the status modes of the cluster have been subscribed</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)myKey":{"name":"myKey","abstract":"<p>If true, information related to the MyKey feature has been subscribed</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetSystemCapabilityResponse.html#/c:objc(cs)SDLGetSystemCapabilityResponse(py)systemCapability":{"name":"systemCapability","abstract":"<p>The requested system capability, of the type that was sent in the request</p>","parent_name":"SDLGetSystemCapabilityResponse"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:":{"name":"-initWithType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"<p>They type of capability you&rsquo;d like to receive in the response.</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"<p>The requested data</p>","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)isSubscribed":{"name":"isSubscribed","abstract":"<p>It is a conditional-mandatory parameter: must be returned in case <q>subscribe</q> parameter was present in the related request.</p>","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:":{"name":"-initWithModuleType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:":{"name":"-initAndSubscribeToModuleType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:":{"name":"-initAndUnsubscribeToModuleType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleType":{"name":"moduleType","abstract":"<p>The type of a RC module to retrieve module data from the vehicle.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)subscribe":{"name":"subscribe","abstract":"<p>If subscribe is true, the head unit will register onInteriorVehicleData notifications for the requested moduelType.","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)ecuHeader":{"name":"ecuHeader","abstract":"<p>2 byte ECU Header for DTC response (as defined in VHR_Layout_Specification_DTCs.pdf)</p>","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)dtc":{"name":"dtc","abstract":"<p>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).</p>","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:":{"name":"-initWithECUName:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:mask:":{"name":"-initWithECUName:mask:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)ecuName":{"name":"ecuName","abstract":"<p>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":"<p>DTC Mask Byte to be sent in diagnostic request to module. NSNumber* dtcMask Minvalue:0; Maxvalue:255</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>longitude degrees</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>latitude degrees</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcYear":{"name":"utcYear","abstract":"<p>utc year</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMonth":{"name":"utcMonth","abstract":"<p>utc month</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcDay":{"name":"utcDay","abstract":"<p>utc day</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcHours":{"name":"utcHours","abstract":"<p>utc hours</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMinutes":{"name":"utcMinutes","abstract":"<p>utc minutes</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcSeconds":{"name":"utcSeconds","abstract":"<p>utc seconds</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)compassDirection":{"name":"compassDirection","abstract":"<p>Potential Compass Directions</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)pdop":{"name":"pdop","abstract":"<p>The 3D positional dilution of precision.</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)hdop":{"name":"hdop","abstract":"<p>The horizontal dilution of precision</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)vdop":{"name":"vdop","abstract":"<p>the vertical dilution of precision</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)actual":{"name":"actual","abstract":"<p>What the coordinates are based on</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)satellites":{"name":"satellites","abstract":"<p>The number of satellites in view</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)dimension":{"name":"dimension","abstract":"<p>The supported dimensions of the GPS</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)altitude":{"name":"altitude","abstract":"<p>Altitude in meters</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)heading":{"name":"heading","abstract":"<p>Heading based on the GPS data.</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)speed":{"name":"speed","abstract":"<p>Speed in KPH</p>","parent_name":"SDLGPSData"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)remoteFileNames":{"name":"remoteFileNames","abstract":"<p>A set of all names of files known on the remote head unit. Known files can be used or deleted on the remote system.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)bytesAvailable":{"name":"bytesAvailable","abstract":"<p>The number of bytes still available for files for this app.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)currentState":{"name":"currentState","abstract":"<p>The state of the file manager.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)pendingTransactions":{"name":"pendingTransactions","abstract":"<p>The currently pending transactions (Upload, Delete, and List Files) in the file manager</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)suspended":{"name":"suspended","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)init":{"name":"-init","abstract":"<p>Initialize the class&hellip;or not, since this method is unavailable. Dependencies must be injected using initWithConnectionManager:</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"<p>Creates a new file manager with a specified connection manager</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>The manager stars up and attempts to fetch its initial list and transfer initial files.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)stop":{"name":"-stop","abstract":"<p>Cancels all file manager operations and deletes all associated data.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)hasUploadedFile:":{"name":"-hasUploadedFile:","abstract":"<p>Check if the remote system contains a file</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFileWithName:completionHandler:":{"name":"-deleteRemoteFileWithName:completionHandler:","abstract":"<p>Delete a file stored on the remote system</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFilesWithNames:completionHandler:":{"name":"-deleteRemoteFilesWithNames:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFile:completionHandler:":{"name":"-uploadFile:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:progressHandler:completionHandler:":{"name":"-uploadFiles:progressHandler:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:completionHandler:":{"name":"-uploadFiles:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtwork:completionHandler:":{"name":"-uploadArtwork:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:completionHandler:":{"name":"-uploadArtworks:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:progressHandler:completionHandler:":{"name":"-uploadArtworks:progressHandler:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(cm)temporaryFileDirectory":{"name":"+temporaryFileDirectory","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)persistent":{"name":"persistent","abstract":"<p>Whether or not the file should persist on disk between car ignition cycles.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)overwrite":{"name":"overwrite","abstract":"<p>Whether or not the file should overwrite an existing file on the remote disk with the same name.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)name":{"name":"name","abstract":"<p>The name the file should be stored under on the remote disk. This is how the file will be referenced in all later calls.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileURL":{"name":"fileURL","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)data":{"name":"data","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileSize":{"name":"fileSize","abstract":"<p>The size of the binary data of the SDLFile.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileType":{"name":"fileType","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)inputStream":{"name":"inputStream","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithFileURL:name:persistent:":{"name":"-initWithFileURL:name:persistent:","abstract":"<p>The designated initializer for an SDL File. The only major property that is not set using this is <q>overwrite</q>, which defaults to NO.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileAtFileURL:name:":{"name":"+persistentFileAtFileURL:name:","abstract":"<p>Create an SDL file using a local file URL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileAtFileURL:name:":{"name":"+fileAtFileURL:name:","abstract":"<p>Create an SDL file using a local file URL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithData:name:fileExtension:persistent:":{"name":"-initWithData:name:fileExtension:persistent:","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileWithData:name:fileExtension:":{"name":"+persistentFileWithData:name:fileExtension:","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileWithData:name:fileExtension:":{"name":"+fileWithData:name:fileExtension:","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLEncodedSyncPData.html#/c:objc(cs)SDLEncodedSyncPData(py)data":{"name":"data","abstract":"<p>Contains base64 encoded string of SyncP packets.</p>","parent_name":"SDLEncodedSyncPData"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)emergencyEventType":{"name":"emergencyEventType","abstract":"<p>References signal <q>VedsEvntType_D_Ltchd</q>. See EmergencyEventType.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)fuelCutoffStatus":{"name":"fuelCutoffStatus","abstract":"<p>References signal <q>RCM_FuelCutoff</q>. See FuelCutoffStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)rolloverEvent":{"name":"rolloverEvent","abstract":"<p>References signal <q>VedsEvntRoll_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)maximumChangeVelocity":{"name":"maximumChangeVelocity","abstract":"<p>References signal <q>VedsMaxDeltaV_D_Ltchd</q>. Change in velocity in KPH.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)multipleEvents":{"name":"multipleEvents","abstract":"<p>References signal <q>VedsMultiEvnt_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallNotificationStatus":{"name":"eCallNotificationStatus","abstract":"<p>References signal <q>eCallNotification_4A</q>. See VehicleDataNotificationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)auxECallNotificationStatus":{"name":"auxECallNotificationStatus","abstract":"<p>References signal <q>eCallNotification</q>. See VehicleDataNotificationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallConfirmationStatus":{"name":"eCallConfirmationStatus","abstract":"<p>References signal <q>eCallConfirmation</q>. See ECallConfirmationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayType":{"name":"displayType","abstract":"<p>The type of display</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)textFields":{"name":"textFields","abstract":"<p>An array of SDLTextField structures, each of which describes a field in the HMI which the application can write to using operations such as <em>SDLShow</em>, <em>SDLSetMediaClockTimer</em>, etc.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)imageFields":{"name":"imageFields","abstract":"<p>An array of SDLImageField elements</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)mediaClockFormats":{"name":"mediaClockFormats","abstract":"<p>An array of SDLMediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)graphicSupported":{"name":"graphicSupported","abstract":"<p>The display&rsquo;s persistent screen supports.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)templatesAvailable":{"name":"templatesAvailable","abstract":"<p>Number of presets the screen supports</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)screenParams":{"name":"screenParams","abstract":"<p>A set of all parameters related to a prescribed screen area (e.g. for video / touch input)</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"<p>The number of on-screen custom presets available (if any); otherwise omitted</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(im)initWithNumber:":{"name":"-initWithNumber:","abstract":"<p>Undocumented</p>","parent_name":"SDLDialNumber"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(py)number":{"name":"number","abstract":"<p>Up to 40 character string representing the phone number. All characters stripped except for &lsquo;0&rsquo;-&lsquo;9&rsquo;, &lsquo;*&rsquo;, &lsquo;#&rsquo;, &lsquo;,&rsquo;, &lsquo;;&rsquo;, and &lsquo;+&rsquo;</p>","parent_name":"SDLDialNumber"},"Classes/SDLDiagnosticMessageResponse.html#/c:objc(cs)SDLDiagnosticMessageResponse(py)messageDataResult":{"name":"messageDataResult","abstract":"<p>Array of bytes comprising CAN message result.</p>","parent_name":"SDLDiagnosticMessageResponse"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(im)initWithTargetId:length:data:":{"name":"-initWithTargetId:length:data:","abstract":"<p>Undocumented</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)targetID":{"name":"targetID","abstract":"<p>Name of target ECU</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageLength":{"name":"messageLength","abstract":"<p>Length of message (in bytes)</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageData":{"name":"messageData","abstract":"<p>Array of bytes comprising CAN message.</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)voiceRecOn":{"name":"voiceRecOn","abstract":"<p>Indicates whether the voice recognition is on or off</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)btIconOn":{"name":"btIconOn","abstract":"<p>Indicates whether the bluetooth connection established</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)callActive":{"name":"callActive","abstract":"<p>Indicates whether a call is being active</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)phoneRoaming":{"name":"phoneRoaming","abstract":"<p>Indicates whether the phone is in roaming mode</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)textMsgAvailable":{"name":"textMsgAvailable","abstract":"<p>Indicates whether a textmessage is available</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)battLevelStatus":{"name":"battLevelStatus","abstract":"<p>Battery level status</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)stereoAudioOutputMuted":{"name":"stereoAudioOutputMuted","abstract":"<p>The status of the stereo audio output channel</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)monoAudioOutputMuted":{"name":"monoAudioOutputMuted","abstract":"<p>The status of the mono audio output channel</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)signalLevelStatus":{"name":"signalLevelStatus","abstract":"<p>Signal level status</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)primaryAudioSource":{"name":"primaryAudioSource","abstract":"<p>The current primary audio source of SDL (if selected).</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)eCallEventActive":{"name":"eCallEventActive","abstract":"<p>Indicates if an emergency call is active</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(cm)currentDevice":{"name":"+currentDevice","abstract":"<p>Undocumented</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)hardware":{"name":"hardware","abstract":"<p>Device model</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)firmwareRev":{"name":"firmwareRev","abstract":"<p>Device firmware version</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)os":{"name":"os","abstract":"<p>Device OS</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)osVersion":{"name":"osVersion","abstract":"<p>Device OS version</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)carrier":{"name":"carrier","abstract":"<p>Device mobile carrier</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)maxNumberRFCOMMPorts":{"name":"maxNumberRFCOMMPorts","abstract":"<p>Number of bluetooth RFCOMM ports available.</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Undocumented</p>","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(py)menuID":{"name":"menuID","abstract":"<p>the MenuID that identifies the SDLSubMenu to be delete","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Undocumented</p>","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"<p>a unique ID that identifies the Choice Set","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteFileResponse.html#/c:objc(cs)SDLDeleteFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>The remaining available space for your application to store data on the remote system.</p>","parent_name":"SDLDeleteFileResponse"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Undocumented</p>","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(py)syncFileName":{"name":"syncFileName","abstract":"<p>a file reference name","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Undocumented</p>","parent_name":"SDLDeleteCommand"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(py)cmdID":{"name":"cmdID","abstract":"<p>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":"<p>Undocumented</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:":{"name":"-initWithHour:minute:second:millisecond:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)millisecond":{"name":"millisecond","abstract":"<p>Milliseconds part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)second":{"name":"second","abstract":"<p>Seconds part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)minute":{"name":"minute","abstract":"<p>Minutes part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)hour":{"name":"hour","abstract":"<p>Hour part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)day":{"name":"day","abstract":"<p>Day of the month</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)month":{"name":"month","abstract":"<p>Month of the year</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)year":{"name":"year","abstract":"<p>The year in YYYY format</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneMinuteOffset":{"name":"timezoneMinuteOffset","abstract":"<p>Time zone offset in Min with regard to UTC</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneHourOffset":{"name":"timezoneHourOffset","abstract":"<p>Time zone offset in Hours with regard to UTC</p>","parent_name":"SDLDateTime"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)resultCode":{"name":"resultCode","abstract":"<p>Individual DID result code.</p>","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)didLocation":{"name":"didLocation","abstract":"<p>Location of raw data from vehicle data DID</p>","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)data":{"name":"data","abstract":"<p>Raw DID-based data returned for requested element.</p>","parent_name":"SDLDIDResult"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(im)initWithId:choiceSet:":{"name":"-initWithId:choiceSet:","abstract":"<p>Undocumented</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"<p>A unique ID that identifies the Choice Set</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)choiceSet":{"name":"choiceSet","abstract":"<p>Array of choices, which the user can select by menu or voice recognition</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lifecycleConfig":{"name":"lifecycleConfig","abstract":"<p>The lifecycle configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lockScreenConfig":{"name":"lockScreenConfig","abstract":"<p>The lock screen configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)loggingConfig":{"name":"loggingConfig","abstract":"<p>The log configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)streamingMediaConfig":{"name":"streamingMediaConfig","abstract":"<p>The configuration</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:":{"name":"-initWithLifecycle:lockScreen:logging:","abstract":"<p>Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, and logging configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:":{"name":"+configurationWithLifecycle:lockScreen:logging:","abstract":"<p>Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, and logging configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"<p>Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, logging, and streaming media configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"<p>Create a new configuration to be passed into SDLManager with a custom lifecycle, lock screen, logging, and streaming media configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeActive":{"name":"powerModeActive","abstract":"<p>References signal <q>PowerMode_UB</q>.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeQualificationStatus":{"name":"powerModeQualificationStatus","abstract":"<p>References signal <q>PowerModeQF</q>. See PowerModeQualificationStatus.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)carModeStatus":{"name":"carModeStatus","abstract":"<p>References signal <q>CarMode</q>. See CarMode.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeStatus":{"name":"powerModeStatus","abstract":"<p>References signal <q>PowerMode</q>. See PowerMode.</p>","parent_name":"SDLClusterModeStatus"},"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":"<p>Undocumented</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)fanSpeed":{"name":"fanSpeed","abstract":"<p>Speed of Fan in integer</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)currentTemperature":{"name":"currentTemperature","abstract":"<p>The Current Temperature in SDLTemperature</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)desiredTemperature":{"name":"desiredTemperature","abstract":"<p>Desired Temperature in SDLTemperature</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acEnable":{"name":"acEnable","abstract":"<p>Represents if AC is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)circulateAirEnable":{"name":"circulateAirEnable","abstract":"<p>Represents if circulation of air is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)autoModeEnable":{"name":"autoModeEnable","abstract":"<p>Represents if auto mode is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)defrostZone":{"name":"defrostZone","abstract":"<p>Represents the kind of defrost zone</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)dualModeEnable":{"name":"dualModeEnable","abstract":"<p>Represents if dual mode is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acMaxEnable":{"name":"acMaxEnable","abstract":"<p>Represents if ac max is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)ventilationMode":{"name":"ventilationMode","abstract":"<p>Represents the kind of Ventilation zone</p>","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":"<p>Undocumented</p>","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":"<p>Availability of the control of fan speed.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)desiredTemperatureAvailable":{"name":"desiredTemperatureAvailable","abstract":"<p>Availability of the control of desired temperature.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acEnableAvailable":{"name":"acEnableAvailable","abstract":"<p>Availability of the control of turn on/off AC.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acMaxEnableAvailable":{"name":"acMaxEnableAvailable","abstract":"<p>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":"<p>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":"<p>Availability of the control of enable/disable auto mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)dualModeEnableAvailable":{"name":"dualModeEnableAvailable","abstract":"<p>Availability of the control of enable/disable dual mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZoneAvailable":{"name":"defrostZoneAvailable","abstract":"<p>Availability of the control of defrost zones.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZone":{"name":"defrostZone","abstract":"<p>A set of all defrost zones that are controllable.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationModeAvailable":{"name":"ventilationModeAvailable","abstract":"<p>Availability of the control of air ventilation mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationMode":{"name":"ventilationMode","abstract":"<p>A set of all ventilation modes that are controllable.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:":{"name":"-initWithId:menuName:vrCommands:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)choiceID":{"name":"choiceID","abstract":"<p>The application-scoped identifier that uniquely identifies this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)menuName":{"name":"menuName","abstract":"<p>Text which appears in menu, representing this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)vrCommands":{"name":"vrCommands","abstract":"<p>VR synonyms for this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)image":{"name":"image","abstract":"<p>The image of the choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryText":{"name":"secondaryText","abstract":"<p>Secondary text to display; e.g. address of POI in a search result entry</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)tertiaryText":{"name":"tertiaryText","abstract":"<p>Tertiary text to display; e.g. distance to POI for a search result entry</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryImage":{"name":"secondaryImage","abstract":"<p>Secondary image for choice</p>","parent_name":"SDLChoice"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:":{"name":"-initWithLanguage:hmiDisplayLanguage:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)language":{"name":"language","abstract":"<p>The language the app wants to change to</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>HMI display language</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)appName":{"name":"appName","abstract":"<p>Request a new app name registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ttsName":{"name":"ttsName","abstract":"<p>Request a new TTSName registration.</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"<p>Request a new app short name registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)vrSynonyms":{"name":"vrSynonyms","abstract":"<p>Request a new VR synonyms registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLCarWindowViewController.html#/c:objc(cs)SDLCarWindowViewController(py)supportedOrientation":{"name":"supportedOrientation","abstract":"<p>The supported interface orientation you wish to use. Defaults to MaskPortrait.</p>","parent_name":"SDLCarWindowViewController"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:":{"name":"-initWithButtonName:moduleType:","abstract":"<p>Undocumented</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleType":{"name":"moduleType","abstract":"<p>The module where the button should be pressed.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonName":{"name":"buttonName","abstract":"<p>The name of supported RC climate or radio button.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press event.</p>","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":"<p>A NSNumber value indicates whether the button supports a SHORT press</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"<p>A NSNumber value indicates whether the button supports a LONG press</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"<p>A NSNumber value indicates whether the button supports <q>button down</q> and <q>button up</q></p>","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":"<p>References signal <q>VedsDrvBelt_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBeltDeployed":{"name":"passengerBeltDeployed","abstract":"<p>References signal <q>VedsPasBelt_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBuckleBelted":{"name":"passengerBuckleBelted","abstract":"<p>References signal <q>VedsRw1PasBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBuckleBelted":{"name":"driverBuckleBelted","abstract":"<p>References signal <q>VedsRw1DrvBckl_D_Ltchd</q>. See VehicleDataEventStatus</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow2BuckleBelted":{"name":"leftRow2BuckleBelted","abstract":"<p>References signal <q>VedsRw2lBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerChildDetected":{"name":"passengerChildDetected","abstract":"<p>References signal <q>VedsRw1PasChld_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow2BuckleBelted":{"name":"rightRow2BuckleBelted","abstract":"<p>References signal <q>VedsRw2rBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow2BuckleBelted":{"name":"middleRow2BuckleBelted","abstract":"<p>References signal <q>VedsRw2mBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow3BuckleBelted":{"name":"middleRow3BuckleBelted","abstract":"<p>References signal <q>VedsRw3mBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow3BuckleBelted":{"name":"leftRow3BuckleBelted","abstract":"<p>References signal <q>VedsRw3lBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow3BuckleBelted":{"name":"rightRow3BuckleBelted","abstract":"<p>References signal <q>VedsRw3rBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRearInflatableBelted":{"name":"leftRearInflatableBelted","abstract":"<p>References signal <q>VedsRw2lRib_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRearInflatableBelted":{"name":"rightRearInflatableBelted","abstract":"<p>References signal <q>VedsRw2rRib_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BeltDeployed":{"name":"middleRow1BeltDeployed","abstract":"<p>References signal <q>VedsRw1mBelt_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BuckleBelted":{"name":"middleRow1BuckleBelted","abstract":"<p>References signal <q>VedsRw1mBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)delegate":{"name":"delegate","abstract":"<p>The delegate describing when files are done playing or any errors that occur</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)playing":{"name":"playing","abstract":"<p>Whether or not we are currently playing audio</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)queue":{"name":"queue","abstract":"<p>The queue of audio files that will be played in sequence</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)init":{"name":"-init","abstract":"<p>Init should only occur with dependencies. use <code>initWithManager:</code></p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)initWithManager:":{"name":"-initWithManager:","abstract":"<p>Create an audio stream manager with a reference to the parent stream manager.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithFileURL:":{"name":"-pushWithFileURL:","abstract":"<p>Push a new file URL onto the queue after converting it into the correct PCM format for streaming binary data. Call <code>playNextWhenReady</code> to start playing the next completed pushed file.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)playNextWhenReady":{"name":"-playNextWhenReady","abstract":"<p>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.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)stop":{"name":"-stop","abstract":"<p>Stop playing the queue after the current item completes and clear the queue. If nothing is playing, the queue will be cleared.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)samplingRate":{"name":"samplingRate","abstract":"<p>The sampling rate for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)bitsPerSample":{"name":"bitsPerSample","abstract":"<p>The sample depth in bit for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)audioType":{"name":"audioType","abstract":"<p>The audiotype for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:name:asImageFormat:":{"name":"+artworkWithImage:name:asImageFormat:","abstract":"<p>Convenience Helper to create an ephemeral artwork from an image.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:asImageFormat:":{"name":"+artworkWithImage:asImageFormat:","abstract":"<p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:name:asImageFormat:":{"name":"+persistentArtworkWithImage:name:asImageFormat:","abstract":"<p>Convenience Helper to create a persistent artwork from an image.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:asImageFormat:":{"name":"+persistentArtworkWithImage:asImageFormat:","abstract":"<p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:name:persistent:asImageFormat:":{"name":"-initWithImage:name:persistent:asImageFormat:","abstract":"<p>Create a file for transmission to the remote system from a UIImage.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:persistent:asImageFormat:":{"name":"-initWithImage:persistent:asImageFormat:","abstract":"<p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(cm)currentAppInfo":{"name":"+currentAppInfo","abstract":"<p>Undocumented</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appDisplayName":{"name":"appDisplayName","abstract":"<p>The name displayed for the mobile application on the mobile device (can differ from the app name set in the initial RAI request).</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appBundleID":{"name":"appBundleID","abstract":"<p>The AppBundleID of an iOS application or package name of the Android application. This supports App Launch strategies for each platform.</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appVersion":{"name":"appVersion","abstract":"<p>Represents the build version number of this particular mobile app.</p>","parent_name":"SDLAppInfo"},"Classes/SDLAlertResponse.html#/c:objc(cs)SDLAlertResponse(py)tryAgainTime":{"name":"tryAgainTime","abstract":"<p>Undocumented</p>","parent_name":"SDLAlertResponse"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTS:softButtons:":{"name":"-initWithTTS:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTSChunks:softButtons:":{"name":"-initWithTTSChunks:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of text chunks.</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)softButtons":{"name":"softButtons","abstract":"<p>An arry of soft buttons. If omitted on supported displays, only the system defined <q>Close</q> SoftButton shall be displayed.</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:duration:":{"name":"-initWithAlertText1:alertText2:duration:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:":{"name":"-initWithAlertText1:alertText2:alertText3:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:softButtons:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:playTone:":{"name":"-initWithTTS:playTone:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:playTone:duration:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:playTone:":{"name":"-initWithTTSChunks:playTone:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText1":{"name":"alertText1","abstract":"<p>The String to be displayed in the first field of the display during the Alert</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText2":{"name":"alertText2","abstract":"<p>The String to be displayed in the second field of the display during the Alert</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText3":{"name":"alertText3","abstract":"<p>the String to be displayed in the third field of the display during the Alert","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array which, taken together, specify what is to be spoken to the user</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)duration":{"name":"duration","abstract":"<p>The duration of the displayed portion of the alert, in milliseconds.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)playTone":{"name":"playTone","abstract":"<p>Whether the alert tone should be played before the TTS (if any) is spoken.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)progressIndicator":{"name":"progressIndicator","abstract":"<p>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.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)softButtons":{"name":"softButtons","abstract":"<p>App defined SoftButtons.</p>","parent_name":"SDLAlert"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverAirbagDeployed":{"name":"driverAirbagDeployed","abstract":"<p>References signal <q>VedsDrvBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverSideAirbagDeployed":{"name":"driverSideAirbagDeployed","abstract":"<p>References signal <q>VedsDrvSideBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverCurtainAirbagDeployed":{"name":"driverCurtainAirbagDeployed","abstract":"<p>References signal <q>VedsDrvCrtnBag_D_Ltchd</q>. See VehicleDataEventStatus</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerAirbagDeployed":{"name":"passengerAirbagDeployed","abstract":"<p>References signal <q>VedsPasBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerCurtainAirbagDeployed":{"name":"passengerCurtainAirbagDeployed","abstract":"<p>References signal <q>VedsPasCrtnBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverKneeAirbagDeployed":{"name":"driverKneeAirbagDeployed","abstract":"<p>References signal <q>VedsKneeDrvBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerSideAirbagDeployed":{"name":"passengerSideAirbagDeployed","abstract":"<p>References signal <q>VedsPasSideBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerKneeAirbagDeployed":{"name":"passengerKneeAirbagDeployed","abstract":"<p>References signal <q>VedsKneePasBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:":{"name":"-initWithId:menuName:","abstract":"<p>Undocumented</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:position:":{"name":"-initWithId:menuName:position:","abstract":"<p>Undocumented</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuID":{"name":"menuID","abstract":"<p>a Menu ID that identifies a sub menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)position":{"name":"position","abstract":"<p>a position of menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuName":{"name":"menuName","abstract":"<p>a menuName which is displayed representing this submenu item","parent_name":"SDLAddSubMenu"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Construct a SDLAddCommand with a handler callback when an event occurs.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:handler:":{"name":"-initWithId:vrCommands:handler:","abstract":"<p>Undocumented</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:handler:":{"name":"-initWithId:vrCommands:menuName:handler:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler":{"name":"handler","abstract":"<p>A handler that will let you know when the button you created is subscribed.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdID":{"name":"cmdID","abstract":"<p>A Unique Command ID that identifies the command</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)menuParams":{"name":"menuParams","abstract":"<p>a <em>SDLMenuParams</em> pointer which will defined the command and how it is added to the Command Menu</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands":{"name":"vrCommands","abstract":"<p>An array of strings to be used as VR synonyms for this command.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdIcon":{"name":"cmdIcon","abstract":"<p>Image struct containing a static or dynamic icon</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html":{"name":"SDLAddCommand","abstract":"<p>This class will add a command to the application&rsquo;s Command Menu SDLMenuParams</p>"},"Classes.html#/c:objc(cs)SDLAddCommandResponse":{"name":"SDLAddCommandResponse","abstract":"<p>Response to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLAddCommand.html\">SDLAddCommand</a></code></p>"},"Classes/SDLAddSubMenu.html":{"name":"SDLAddSubMenu","abstract":"<p>Add a SDLSubMenu to the Command Menu"},"Classes.html#/c:objc(cs)SDLAddSubMenuResponse":{"name":"SDLAddSubMenuResponse","abstract":"<p>Response to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLAddSubMenu.html\">SDLAddSubMenu</a></code></p>"},"Classes/SDLAirbagStatus.html":{"name":"SDLAirbagStatus","abstract":"<p>A vehicle data status struct for airbags</p>"},"Classes/SDLAlert.html":{"name":"SDLAlert","abstract":"<p>Shows an alert which typically consists of text-to-speech message and text on the display. At least either alertText1, alertText2 or TTSChunks need to be provided.</p>"},"Classes/SDLAlertManeuver.html":{"name":"SDLAlertManeuver","abstract":"<p>Shows a SDLShowConstantTBT message with an optional voice command. This message is shown as an overlay over the display&rsquo;s base screen.</p>"},"Classes.html#/c:objc(cs)SDLAlertManeuverResponse":{"name":"SDLAlertManeuverResponse","abstract":"<p>Response to SDLAlertManeuver</p>"},"Classes/SDLAlertResponse.html":{"name":"SDLAlertResponse","abstract":"<p>Response to SDLAlert</p>"},"Classes/SDLAppInfo.html":{"name":"SDLAppInfo","abstract":"<p>A struct used in register app interface. Contains detailed information about the registered application.</p>"},"Classes/SDLArtwork.html":{"name":"SDLArtwork","abstract":"<p>Undocumented</p>"},"Classes/SDLAudioPassThruCapabilities.html":{"name":"SDLAudioPassThruCapabilities","abstract":"<p>Describes different audio type configurations for SDLPerformAudioPassThru, e.g. {8kHz,8-bit,PCM}</p>"},"Classes/SDLAudioStreamManager.html":{"name":"SDLAudioStreamManager","abstract":"<p>Undocumented</p>"},"Classes/SDLBeltStatus.html":{"name":"SDLBeltStatus","abstract":"<p>Vehicle data struct for the seat belt status</p>"},"Classes/SDLBodyInformation.html":{"name":"SDLBodyInformation","abstract":"<p>The body information including power modes.</p>"},"Classes/SDLButtonCapabilities.html":{"name":"SDLButtonCapabilities","abstract":"<p>Provides information about the capabilities of a SDL HMI button.</p>"},"Classes/SDLButtonPress.html":{"name":"SDLButtonPress","abstract":"<p>This RPC allows a remote control type mobile application to simulate a hardware button press event.</p>"},"Classes.html#/c:objc(cs)SDLButtonPressResponse":{"name":"SDLButtonPressResponse","abstract":"<p>Response to SDLButtonPress</p>"},"Classes/SDLCarWindowViewController.html":{"name":"SDLCarWindowViewController","abstract":"<p>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.</p>"},"Classes/SDLChangeRegistration.html":{"name":"SDLChangeRegistration","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLChangeRegistrationResponse":{"name":"SDLChangeRegistrationResponse","abstract":"<p>Response to SDLChangeRegistrations</p>"},"Classes/SDLChoice.html":{"name":"SDLChoice","abstract":"<p>A choice is an option which a user can select either via the menu or via voice recognition (VR) during an application initiated interaction.</p>"},"Classes/SDLClimateControlCapabilities.html":{"name":"SDLClimateControlCapabilities","abstract":"<p>Contains information about a climate control module&rsquo;s capabilities.</p>"},"Classes/SDLClimateControlData.html":{"name":"SDLClimateControlData","abstract":"<p>The current information for the Climate Remote Control Module</p>"},"Classes/SDLClusterModeStatus.html":{"name":"SDLClusterModeStatus","abstract":"<p>A vehicle data struct for the cluster mode and power status</p>"},"Classes/SDLConfiguration.html":{"name":"SDLConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLCreateInteractionChoiceSet.html":{"name":"SDLCreateInteractionChoiceSet","abstract":"<p>Creates a Choice Set which can be used in subsequent <em>SDLPerformInteraction</em> Operations.</p>"},"Classes.html#/c:objc(cs)SDLCreateInteractionChoiceSetResponse":{"name":"SDLCreateInteractionChoiceSetResponse","abstract":"<p>Response to SDLCreateInteractionChoiceSet has been called</p>"},"Classes/SDLDIDResult.html":{"name":"SDLDIDResult","abstract":"<p>A vehicle data struct</p>"},"Classes/SDLDateTime.html":{"name":"SDLDateTime","abstract":"<p>A struct referenced in SendLocation for an absolute date</p>"},"Classes/SDLDeleteCommand.html":{"name":"SDLDeleteCommand","abstract":"<p>Removes a command from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteCommandResponse":{"name":"SDLDeleteCommandResponse","abstract":"<p>Response to SDLDeleteCommand</p>"},"Classes/SDLDeleteFile.html":{"name":"SDLDeleteFile","abstract":"<p>Used to delete a file resident on the SDL module in the app&rsquo;s local cache."},"Classes/SDLDeleteFileResponse.html":{"name":"SDLDeleteFileResponse","abstract":"<p>Response to SDLDeleteFile</p>"},"Classes/SDLDeleteInteractionChoiceSet.html":{"name":"SDLDeleteInteractionChoiceSet","abstract":"<p>Deletes an existing Choice Set identified by the parameter"},"Classes.html#/c:objc(cs)SDLDeleteInteractionChoiceSetResponse":{"name":"SDLDeleteInteractionChoiceSetResponse","abstract":"<p>SDLDeleteInteractionChoiceSetResponse is sent, when SDLDeleteInteractionChoiceSet has been called</p>"},"Classes/SDLDeleteSubMenu.html":{"name":"SDLDeleteSubMenu","abstract":"<p>Deletes a submenu from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteSubMenuResponse":{"name":"SDLDeleteSubMenuResponse","abstract":"<p>Response to SDLDeleteSubMenu</p>"},"Classes/SDLDeviceInfo.html":{"name":"SDLDeviceInfo","abstract":"<p>Various information about connecting device. Referenced in RegisterAppInterface</p>"},"Classes/SDLDeviceStatus.html":{"name":"SDLDeviceStatus","abstract":"<p>Describes the status related to a connected mobile device or SDL and if or how it is represented in the vehicle.</p>"},"Classes/SDLDiagnosticMessage.html":{"name":"SDLDiagnosticMessage","abstract":"<p>Non periodic vehicle diagnostic request</p>"},"Classes/SDLDiagnosticMessageResponse.html":{"name":"SDLDiagnosticMessageResponse","abstract":"<p>Response to SDLDiagnosticMessage</p>"},"Classes/SDLDialNumber.html":{"name":"SDLDialNumber","abstract":"<p>This RPC is used to tell the head unit to use bluetooth to dial a phone number using the phone.</p>"},"Classes.html#/c:objc(cs)SDLDialNumberResponse":{"name":"SDLDialNumberResponse","abstract":"<p>The response to SDLDialNumber</p>"},"Classes/SDLDisplayCapabilities.html":{"name":"SDLDisplayCapabilities","abstract":"<p>Contains information about the display for the SDL system to which the application is currently connected.</p>"},"Classes/SDLECallInfo.html":{"name":"SDLECallInfo","abstract":"<p>A vehicle data struct for emergency call information</p>"},"Classes/SDLEmergencyEvent.html":{"name":"SDLEmergencyEvent","abstract":"<p>A vehicle data struct for an emergency event</p>"},"Classes/SDLEncodedSyncPData.html":{"name":"SDLEncodedSyncPData","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLEncodedSyncPDataResponse":{"name":"SDLEncodedSyncPDataResponse","abstract":"<p>The response to SDLEncodedSyncPData</p>"},"Classes.html#/c:objc(cs)SDLEndAudioPassThru":{"name":"SDLEndAudioPassThru","abstract":"<p>When this request is invoked, the audio capture stops</p>"},"Classes.html#/c:objc(cs)SDLEndAudioPassThruResponse":{"name":"SDLEndAudioPassThruResponse","abstract":"<p>Response to SDLEndAudioPassThru</p>"},"Classes/SDLFile.html":{"name":"SDLFile","abstract":"<p>Undocumented</p>"},"Classes/SDLFileManager.html":{"name":"SDLFileManager","abstract":"<p>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.</p>"},"Classes/SDLGPSData.html":{"name":"SDLGPSData","abstract":"<p>Describes the GPS data. Not all data will be available on all carlines.</p>"},"Classes.html#/c:objc(cs)SDLGenericResponse":{"name":"SDLGenericResponse","abstract":"<p>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.</p>"},"Classes/SDLGetDTCs.html":{"name":"SDLGetDTCs","abstract":"<p>This RPC allows to request diagnostic module trouble codes from a certain"},"Classes/SDLGetDTCsResponse.html":{"name":"SDLGetDTCsResponse","abstract":"<p>Response to SDLGetDTCs</p>"},"Classes/SDLGetInteriorVehicleData.html":{"name":"SDLGetInteriorVehicleData","abstract":"<p>Reads the current status value of specified remote control module (type)."},"Classes/SDLGetInteriorVehicleDataResponse.html":{"name":"SDLGetInteriorVehicleDataResponse","abstract":"<p>A response to SDLGetInteriorVehicleData</p>"},"Classes/SDLGetSystemCapability.html":{"name":"SDLGetSystemCapability","abstract":"<p>Undocumented</p>"},"Classes/SDLGetSystemCapabilityResponse.html":{"name":"SDLGetSystemCapabilityResponse","abstract":"<p>Response to SDLGetSystemCapability</p>"},"Classes/SDLGetVehicleData.html":{"name":"SDLGetVehicleData","abstract":"<p>Requests surrent values of specific published vehicle data items."},"Classes/SDLGetVehicleDataResponse.html":{"name":"SDLGetVehicleDataResponse","abstract":"<p>Response to SDLGetVehicleData</p>"},"Classes/SDLGetWayPoints.html":{"name":"SDLGetWayPoints","abstract":"<p>Undocumented</p>"},"Classes/SDLGetWayPointsResponse.html":{"name":"SDLGetWayPointsResponse","abstract":"<p>Response to SDLGetWayPoints</p>"},"Classes/SDLHMICapabilities.html":{"name":"SDLHMICapabilities","abstract":"<p>Undocumented</p>"},"Classes/SDLHMIPermissions.html":{"name":"SDLHMIPermissions","abstract":"<p>Defining sets of HMI levels, which are permitted or prohibited for a given RPC.</p>"},"Classes/SDLHapticRect.html":{"name":"SDLHapticRect","abstract":"<p>Defines spatial for each user control object for video streaming application</p>"},"Classes/SDLHeadLampStatus.html":{"name":"SDLHeadLampStatus","abstract":"<p>Vehicle data struct for status of head lamps</p>"},"Classes/SDLImage.html":{"name":"SDLImage","abstract":"<p>Specifies which image shall be used e.g. in SDLAlerts or on SDLSoftbuttons provided the display supports it.</p>"},"Classes/SDLImageField.html":{"name":"SDLImageField","abstract":"<p>A struct used in DisplayCapabilities describing the capability of an image field</p>"},"Classes/SDLImageResolution.html":{"name":"SDLImageResolution","abstract":"<p>The resolution of an image</p>"},"Classes/SDLKeyboardProperties.html":{"name":"SDLKeyboardProperties","abstract":"<p>Configuration of on-screen keyboard (if available)</p>"},"Classes/SDLLifecycleConfiguration.html":{"name":"SDLLifecycleConfiguration","abstract":"<p>Configuration options for SDLManager</p>"},"Classes/SDLLifecycleConfigurationUpdate.html":{"name":"SDLLifecycleConfigurationUpdate","abstract":"<p>Configuration update options for SDLManager. This class can be used to update the lifecycle configuration in"},"Classes.html#/c:objc(cs)SDLListFiles":{"name":"SDLListFiles","abstract":"<p>Requests the current list of resident filenames for the registered app. Not"},"Classes/SDLListFilesResponse.html":{"name":"SDLListFilesResponse","abstract":"<p>Response to SDLListFiles</p>"},"Classes/SDLLocationCoordinate.html":{"name":"SDLLocationCoordinate","abstract":"<p>Describes a coordinate on earth</p>"},"Classes/SDLLocationDetails.html":{"name":"SDLLocationDetails","abstract":"<p>Describes a location, including its coordinate, name, etc. Used in WayPoints.</p>"},"Classes/SDLLockScreenConfiguration.html":{"name":"SDLLockScreenConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLLockScreenViewController.html":{"name":"SDLLockScreenViewController","abstract":"<p>Undocumented</p>"},"Classes/SDLLogConfiguration.html":{"name":"SDLLogConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLLogFileModule.html":{"name":"SDLLogFileModule","abstract":"<p>Undocumented</p>"},"Classes/SDLLogFilter.html":{"name":"SDLLogFilter","abstract":"<p>Undocumented</p>"},"Classes/SDLLogManager.html":{"name":"SDLLogManager","abstract":"<p>This is the central manager of logging. A developer should not have to interact with this class, it is exclusively used internally.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetAppleSystemLog":{"name":"SDLLogTargetAppleSystemLog","abstract":"<p>The Apple System Log target is an iOS 2.0+ compatible log target that logs to both the Console and to the System Log.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetFile":{"name":"SDLLogTargetFile","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetOSLog":{"name":"SDLLogTargetOSLog","abstract":"<p>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). </p>"},"Classes/SDLManager.html":{"name":"SDLManager","abstract":"<p>Undocumented</p>"},"Classes/SDLMenuCell.html":{"name":"SDLMenuCell","abstract":"<p>Undocumented</p>"},"Classes/SDLMenuParams.html":{"name":"SDLMenuParams","abstract":"<p>Used when adding a sub menu to an application menu or existing sub menu.</p>"},"Classes/SDLMetadataTags.html":{"name":"SDLMetadataTags","abstract":"<p>Undocumented</p>"},"Classes/SDLModuleData.html":{"name":"SDLModuleData","abstract":"<p>Describes a remote control module&rsquo;s data</p>"},"Classes/SDLMyKey.html":{"name":"SDLMyKey","abstract":"<p>Vehicle Data struct</p>"},"Classes/SDLNavigationCapability.html":{"name":"SDLNavigationCapability","abstract":"<p>Extended capabilities for an onboard navigation system</p>"},"Classes/SDLNotificationConstants.html":{"name":"SDLNotificationConstants","abstract":"<p>Undocumented</p>"},"Classes/SDLOasisAddress.html":{"name":"SDLOasisAddress","abstract":"<p>Struct used in SendLocation describing an address</p>"},"Classes/SDLOnAppInterfaceUnregistered.html":{"name":"SDLOnAppInterfaceUnregistered","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLOnAudioPassThru":{"name":"SDLOnAudioPassThru","abstract":"<p>Binary data is in binary part of hybrid msg.</p>"},"Classes/SDLOnButtonEvent.html":{"name":"SDLOnButtonEvent","abstract":"<p>Notifies application that user has depressed or released a button to which"},"Classes/SDLOnButtonPress.html":{"name":"SDLOnButtonPress","abstract":"<p>Notifies application of button press events for buttons to which the application is subscribed. SDL supports two button press events defined as follows:</p>"},"Classes/SDLOnCommand.html":{"name":"SDLOnCommand","abstract":"<p>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.</p>"},"Classes/SDLOnDriverDistraction.html":{"name":"SDLOnDriverDistraction","abstract":"<p>Notifies the application of the current driver distraction state (whether driver distraction rules are in effect, or not).</p>"},"Classes/SDLOnEncodedSyncPData.html":{"name":"SDLOnEncodedSyncPData","abstract":"<p>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 ***</p>"},"Classes/SDLOnHMIStatus.html":{"name":"SDLOnHMIStatus"},"Classes/SDLOnHashChange.html":{"name":"SDLOnHashChange","abstract":"<p>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.</p>"},"Classes/SDLOnInteriorVehicleData.html":{"name":"SDLOnInteriorVehicleData","abstract":"<p>Notifications when subscribed vehicle data changes.</p>"},"Classes/SDLOnKeyboardInput.html":{"name":"SDLOnKeyboardInput","abstract":"<p>Sent when a keyboard presented by a PerformInteraction has a keyboard input.</p>"},"Classes/SDLOnLanguageChange.html":{"name":"SDLOnLanguageChange","abstract":"<p>Provides information to what language the SDL HMI language was changed</p>"},"Classes/SDLOnLockScreenStatus.html":{"name":"SDLOnLockScreenStatus","abstract":"<p>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.</p>"},"Classes/SDLOnPermissionsChange.html":{"name":"SDLOnPermissionsChange","abstract":"<p>Provides update to app of which sets of functions are available</p>"},"Classes/SDLOnSyncPData.html":{"name":"SDLOnSyncPData","abstract":"<p>DEPRECATED</p>"},"Classes/SDLOnSystemRequest.html":{"name":"SDLOnSystemRequest","abstract":"<p>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)</p>"},"Classes/SDLOnTBTClientState.html":{"name":"SDLOnTBTClientState","abstract":"<p>Provides applications with notifications specific to the current TBT client status on the module</p>"},"Classes/SDLOnTouchEvent.html":{"name":"SDLOnTouchEvent","abstract":"<p>Notifies about touch events on the screen&rsquo;s prescribed area during video streaming</p>"},"Classes/SDLOnVehicleData.html":{"name":"SDLOnVehicleData","abstract":"<p>Callback for the periodic and non periodic vehicle data read function.</p>"},"Classes/SDLOnWayPointChange.html":{"name":"SDLOnWayPointChange","abstract":"<p>Notification which provides the entire LocationDetails when there is a change to any waypoints or destination.</p>"},"Classes/SDLParameterPermissions.html":{"name":"SDLParameterPermissions","abstract":"<p>Defining sets of parameters, which are permitted or prohibited for a given RPC.</p>"},"Classes/SDLPerformAudioPassThru.html":{"name":"SDLPerformAudioPassThru","abstract":"<p>This will open an audio pass thru session. By doing so the app can receive"},"Classes.html#/c:objc(cs)SDLPerformAudioPassThruResponse":{"name":"SDLPerformAudioPassThruResponse","abstract":"<p>Response to SDLPerformAudioPassThru</p>"},"Classes/SDLPerformInteraction.html":{"name":"SDLPerformInteraction","abstract":"<p>Performs an application-initiated interaction in which the user can select a"},"Classes/SDLPerformInteractionResponse.html":{"name":"SDLPerformInteractionResponse","abstract":"<p>PerformInteraction Response is sent, when SDLPerformInteraction has been called</p>"},"Classes/SDLPermissionItem.html":{"name":"SDLPermissionItem","abstract":"<p>Undocumented</p>"},"Classes/SDLPermissionManager.html":{"name":"SDLPermissionManager","abstract":"<p>Undocumented</p>"},"Classes/SDLPhoneCapability.html":{"name":"SDLPhoneCapability","abstract":"<p>Extended capabilities of the module&rsquo;s phone feature</p>"},"Classes/SDLPinchGesture.html":{"name":"SDLPinchGesture","abstract":"<p>Undocumented</p>"},"Classes/SDLPresetBankCapabilities.html":{"name":"SDLPresetBankCapabilities","abstract":"<p>Contains information about on-screen preset capabilities.</p>"},"Classes/SDLPutFile.html":{"name":"SDLPutFile","abstract":"<p>Used to push a binary data onto the SDL module from a mobile device, such as"},"Classes/SDLPutFileResponse.html":{"name":"SDLPutFileResponse","abstract":"<p>Response to SDLPutFile</p>"},"Classes/SDLRDSData.html":{"name":"SDLRDSData","abstract":"<p>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.</p>"},"Classes/SDLRPCMessage.html":{"name":"SDLRPCMessage","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLRPCNotification":{"name":"SDLRPCNotification","abstract":"<p>An RPC sent from the head unit to the app about some data change, such as a button was pressed</p>"},"Classes/SDLRPCNotificationNotification.html":{"name":"SDLRPCNotificationNotification","abstract":"<p>An NSNotification object that makes retrieving internal SDLRPCNotification data easier</p>"},"Classes/SDLRPCRequest.html":{"name":"SDLRPCRequest","abstract":"<p>Undocumented</p>"},"Classes/SDLRPCResponse.html":{"name":"SDLRPCResponse","abstract":"<p>Undocumented</p>"},"Classes/SDLRPCResponseNotification.html":{"name":"SDLRPCResponseNotification","abstract":"<p>An NSNotification object that makes retrieving internal SDLRPCResponse data easier</p>"},"Classes/SDLRPCStruct.html":{"name":"SDLRPCStruct","abstract":"<p>Undocumented</p>"},"Classes/SDLRadioControlCapabilities.html":{"name":"SDLRadioControlCapabilities","abstract":"<p>Contains information about a radio control module&rsquo;s capabilities.</p>"},"Classes/SDLRadioControlData.html":{"name":"SDLRadioControlData","abstract":"<p>Include information (both read-only and changeable data) about a remote control radio module.</p>"},"Classes/SDLReadDID.html":{"name":"SDLReadDID","abstract":"<p>Non periodic vehicle data read request. This is an RPC to get diagnostics"},"Classes/SDLReadDIDResponse.html":{"name":"SDLReadDIDResponse","abstract":"<p>A response to ReadDID</p>"},"Classes/SDLRectangle.html":{"name":"SDLRectangle","abstract":"<p>A struct describing a rectangle</p>"},"Classes/SDLRegisterAppInterface.html":{"name":"SDLRegisterAppInterface","abstract":"<p>Registers the application&rsquo;s interface with SDL&reg;, declaring properties of"},"Classes/SDLRegisterAppInterfaceResponse.html":{"name":"SDLRegisterAppInterfaceResponse","abstract":"<p>Response to SDLRegisterAppInterface</p>"},"Classes/SDLRemoteControlCapabilities.html":{"name":"SDLRemoteControlCapabilities","abstract":"<p>Capabilities of the remote control feature</p>"},"Classes/SDLResetGlobalProperties.html":{"name":"SDLResetGlobalProperties","abstract":"<p>Resets the passed global properties to their default values as defined by"},"Classes.html#/c:objc(cs)SDLResetGlobalPropertiesResponse":{"name":"SDLResetGlobalPropertiesResponse","abstract":"<p>Response to ResetGlobalProperties</p>"},"Classes/SDLScreenManager.html":{"name":"SDLScreenManager","abstract":"<p>Undocumented</p>"},"Classes/SDLScreenParams.html":{"name":"SDLScreenParams","abstract":"<p>A struct in DisplayCapabilities describing parameters related to a video / touch input area</p>"},"Classes/SDLScrollableMessage.html":{"name":"SDLScrollableMessage","abstract":"<p>Creates a full screen overlay containing a large block of formatted text that"},"Classes.html#/c:objc(cs)SDLScrollableMessageResponse":{"name":"SDLScrollableMessageResponse","abstract":"<p>Response to SDLScrollableMessage</p>"},"Classes/SDLSendHapticData.html":{"name":"SDLSendHapticData","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLSendHapticDataResponse":{"name":"SDLSendHapticDataResponse","abstract":"<p>Response to SDLSendHapticData</p>"},"Classes/SDLSendLocation.html":{"name":"SDLSendLocation","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLSendLocationResponse":{"name":"SDLSendLocationResponse","abstract":"<p>Response to SDLSendLocation</p>"},"Classes/SDLSetAppIcon.html":{"name":"SDLSetAppIcon","abstract":"<p>Used to set existing local file on SDL as the app&rsquo;s icon. Not supported on"},"Classes.html#/c:objc(cs)SDLSetAppIconResponse":{"name":"SDLSetAppIconResponse","abstract":"<p>Response to SDLSetAppIcon</p>"},"Classes/SDLSetDisplayLayout.html":{"name":"SDLSetDisplayLayout","abstract":"<p>Used to set an alternate display layout. If not sent, default screen for"},"Classes/SDLSetDisplayLayoutResponse.html":{"name":"SDLSetDisplayLayoutResponse","abstract":"<p>Response to SDLSetDisplayLayout</p>"},"Classes/SDLSetGlobalProperties.html":{"name":"SDLSetGlobalProperties","abstract":"<p>Sets global property values</p>"},"Classes.html#/c:objc(cs)SDLSetGlobalPropertiesResponse":{"name":"SDLSetGlobalPropertiesResponse","abstract":"<p>Response to SDLSetGlobalProperties</p>"},"Classes/SDLSetInteriorVehicleData.html":{"name":"SDLSetInteriorVehicleData","abstract":"<p>This RPC allows a remote control type mobile application to"},"Classes/SDLSetInteriorVehicleDataResponse.html":{"name":"SDLSetInteriorVehicleDataResponse","abstract":"<p>Response to SDLSetInteriorVehicleData</p>"},"Classes/SDLSetMediaClockTimer.html":{"name":"SDLSetMediaClockTimer","abstract":"<p>Sets the media clock/timer value and the update method (e.g.count-up,"},"Classes.html#/c:objc(cs)SDLSetMediaClockTimerResponse":{"name":"SDLSetMediaClockTimerResponse","abstract":"<p>Response to SDLSetMediaClockTimer</p>"},"Classes/SDLShow.html":{"name":"SDLShow","abstract":"<p>Updates the application&rsquo;s display text area, regardless of whether or not"},"Classes/SDLShowConstantTBT.html":{"name":"SDLShowConstantTBT","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLShowConstantTBTResponse":{"name":"SDLShowConstantTBTResponse","abstract":"<p>Response to SDLShowConstantTBT</p>"},"Classes.html#/c:objc(cs)SDLShowResponse":{"name":"SDLShowResponse","abstract":"<p>Response to SDLShow</p>"},"Classes/SDLSingleTireStatus.html":{"name":"SDLSingleTireStatus","abstract":"<p>Tire pressure status of a single tire.</p>"},"Classes/SDLSlider.html":{"name":"SDLSlider","abstract":"<p>Creates a full screen or pop-up overlay (depending on platform) with a single user controlled slider</p>"},"Classes/SDLSliderResponse.html":{"name":"SDLSliderResponse","abstract":"<p>Response to SDLSlider</p>"},"Classes/SDLSoftButton.html":{"name":"SDLSoftButton","abstract":"<p>Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts</p>"},"Classes/SDLSoftButtonCapabilities.html":{"name":"SDLSoftButtonCapabilities","abstract":"<p>Contains information about a SoftButton&rsquo;s capabilities.</p>"},"Classes/SDLSoftButtonObject.html":{"name":"SDLSoftButtonObject","abstract":"<p>A soft button wrapper object that is capable of storing and switching between states</p>"},"Classes/SDLSoftButtonState.html":{"name":"SDLSoftButtonState","abstract":"<p>Undocumented</p>"},"Classes/SDLSpeak.html":{"name":"SDLSpeak","abstract":"<p>Speaks a phrase over the vehicle audio system using SDL&rsquo;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&rsquo;s TTS engine to speak a <q>speech-sculpted</q> phrase.</p>"},"Classes.html#/c:objc(cs)SDLSpeakResponse":{"name":"SDLSpeakResponse","abstract":"<p>Response to SDLSpeak</p>"},"Classes/SDLStartTime.html":{"name":"SDLStartTime","abstract":"<p>Describes the hour, minute and second values used to set the media clock.</p>"},"Classes/SDLStreamingMediaConfiguration.html":{"name":"SDLStreamingMediaConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLStreamingMediaManager.html":{"name":"SDLStreamingMediaManager","abstract":"<p>Undocumented</p>"},"Classes/SDLSubscribeButton.html":{"name":"SDLSubscribeButton","abstract":"<p>Establishes a subscription to button notifications for HMI buttons. Buttons"},"Classes.html#/c:objc(cs)SDLSubscribeButtonResponse":{"name":"SDLSubscribeButtonResponse","abstract":"<p>Response to SDLSubscribeButton</p>"},"Classes/SDLSubscribeVehicleData.html":{"name":"SDLSubscribeVehicleData","abstract":"<p>Subscribes for specific published vehicle data items. The data will be only"},"Classes/SDLSubscribeVehicleDataResponse.html":{"name":"SDLSubscribeVehicleDataResponse","abstract":"<p>Response to SDLSubscribeVehicleData</p>"},"Classes.html#/c:objc(cs)SDLSubscribeWayPoints":{"name":"SDLSubscribeWayPoints","abstract":"<p>A SDLSubscribeWaypoints can be sent to subscribe"},"Classes.html#/c:objc(cs)SDLSubscribeWayPointsResponse":{"name":"SDLSubscribeWayPointsResponse","abstract":"<p>Response to SubscribeWayPoints</p>"},"Classes/SDLSyncMsgVersion.html":{"name":"SDLSyncMsgVersion","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLSyncPData":{"name":"SDLSyncPData","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLSyncPDataResponse":{"name":"SDLSyncPDataResponse","abstract":"<p>Response to SyncPData</p>"},"Classes/SDLSystemCapability.html":{"name":"SDLSystemCapability","abstract":"<p>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 <q>navigationCapability</q> should exist.</p>"},"Classes/SDLSystemCapabilityManager.html":{"name":"SDLSystemCapabilityManager","abstract":"<p>Undocumented</p>"},"Classes/SDLTTSChunk.html":{"name":"SDLTTSChunk","abstract":"<p>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).</p>"},"Classes/SDLTemperature.html":{"name":"SDLTemperature","abstract":"<p>Struct using in Remote Control representing a temperature.</p>"},"Classes/SDLTextField.html":{"name":"SDLTextField","abstract":"<p>Struct defining the characteristics of a displayed field on the HMI.</p>"},"Classes/SDLTireStatus.html":{"name":"SDLTireStatus","abstract":"<p>Struct used in Vehicle Data; the status and pressure of the tires.</p>"},"Classes/SDLTouch.html":{"name":"SDLTouch","abstract":"<p>Undocumented</p>"},"Classes/SDLTouchCoord.html":{"name":"SDLTouchCoord","abstract":"<p>The coordinate of a touch, used in a touch event</p>"},"Classes/SDLTouchEvent.html":{"name":"SDLTouchEvent","abstract":"<p>A touch which occurred on the IVI system during projection</p>"},"Classes/SDLTouchEventCapabilities.html":{"name":"SDLTouchEventCapabilities","abstract":"<p>The capabilities of touches during projection applications</p>"},"Classes/SDLTouchManager.html":{"name":"SDLTouchManager","abstract":"<p>Undocumented</p>"},"Classes/SDLTurn.html":{"name":"SDLTurn","abstract":"<p>A struct used in UpdateTurnList for Turn-by-Turn navigation applications</p>"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterface":{"name":"SDLUnregisterAppInterface","abstract":"<p>Terminates an application&rsquo;s interface registration. This causes SDL&reg; to"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterfaceResponse":{"name":"SDLUnregisterAppInterfaceResponse","abstract":"<p>Response to UnregisterAppInterface</p>"},"Classes/SDLUnsubscribeButton.html":{"name":"SDLUnsubscribeButton","abstract":"<p>Deletes a subscription to button notifications for the specified button. For"},"Classes.html#/c:objc(cs)SDLUnsubscribeButtonResponse":{"name":"SDLUnsubscribeButtonResponse","abstract":"<p>Response to UnsubscribeButton</p>"},"Classes/SDLUnsubscribeVehicleData.html":{"name":"SDLUnsubscribeVehicleData","abstract":"<p>This function is used to unsubscribe the notifications from the"},"Classes/SDLUnsubscribeVehicleDataResponse.html":{"name":"SDLUnsubscribeVehicleDataResponse","abstract":"<p>Response to UnsubscribeVehicleData</p>"},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPoints":{"name":"SDLUnsubscribeWayPoints","abstract":"<p>Request to unsubscribe from navigation WayPoints and Destination</p>"},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPointsResponse":{"name":"SDLUnsubscribeWayPointsResponse","abstract":"<p>Response to UnsubscribeWayPoints</p>"},"Classes/SDLUpdateTurnList.html":{"name":"SDLUpdateTurnList","abstract":"<p>Updates the list of next maneuvers, which can be requested by the user pressing the softbutton<br></p>"},"Classes.html#/c:objc(cs)SDLUpdateTurnListResponse":{"name":"SDLUpdateTurnListResponse","abstract":"<p>Response to UpdateTurnList</p>"},"Classes/SDLVehicleDataResult.html":{"name":"SDLVehicleDataResult","abstract":"<p>Individual published data request result</p>"},"Classes/SDLVehicleType.html":{"name":"SDLVehicleType","abstract":"<p>Describes the type of vehicle the mobile phone is connected with.</p>"},"Classes/SDLVideoStreamingCapability.html":{"name":"SDLVideoStreamingCapability","abstract":"<p>Contains information about this system&rsquo;s video streaming capabilities</p>"},"Classes/SDLVideoStreamingFormat.html":{"name":"SDLVideoStreamingFormat","abstract":"<p>An available format for video streaming in projection applications</p>"},"Classes/SDLVoiceCommand.html":{"name":"SDLVoiceCommand","abstract":"<p>Undocumented</p>"},"Classes/SDLVRHelpItem.html":{"name":"SDLVRHelpItem","abstract":"<p>A help item for voice commands, used locally in interaction lists and globally</p>"},"Categories/NSString(SDLEnum).html#/c:objc(cs)NSString(im)isEqualToEnum:":{"name":"-isEqualToEnum:","abstract":"<p>Returns whether or not two enums are equal.</p>","parent_name":"NSString(SDLEnum)"},"Categories/NSString(SDLEnum).html":{"name":"NSString(SDLEnum)","abstract":"<p>Undocumented</p>"},"Categories.html":{"name":"Categories","abstract":"<p>The following categories are available globally.</p>"},"Classes.html":{"name":"Classes","abstract":"<p>The following classes are available globally.</p>"},"Constants.html":{"name":"Constants","abstract":"<p>The following constants are available globally.</p>"},"Enums.html":{"name":"Enumerations","abstract":"<p>The following enumerations are available globally.</p>"},"Protocols.html":{"name":"Protocols","abstract":"<p>The following protocols are available globally.</p>"},"Type Definitions.html":{"name":"Type Definitions","abstract":"<p>The following type definitions are available globally.</p>"}} \ No newline at end of file
+{"Type Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierFirstFinger":{"name":"SDLTouchIdentifierFirstFinger","abstract":"<p>Undocumented</p>"},"Type Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierSecondFinger":{"name":"SDLTouchIdentifierSecondFinger","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLAmbientLightStatus.h@T@SDLAmbientLightStatus":{"name":"SDLAmbientLightStatus","abstract":"<p>Reflects the status of the ambient light sensor for headlamps</p>"},"Type Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType":{"name":"SDLAppHMIType","abstract":"<p>Enumeration listing possible app hmi types.</p>"},"Type Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason":{"name":"SDLAppInterfaceUnregisteredReason","abstract":"<p>Indicates reason why app interface was unregistered. The application is being disconnected by SDL.</p>"},"Type Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator":{"name":"SDLAudioStreamingIndicator","abstract":"<p>Enumeration listing possible indicators of audio streaming changes</p>"},"Type Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState":{"name":"SDLAudioStreamingState","abstract":"<p>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</p>"},"Type Definitions.html#/c:SDLAudioType.h@T@SDLAudioType":{"name":"SDLAudioType","abstract":"<p>Describes different audio type options for PerformAudioPassThru</p>"},"Type Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample":{"name":"SDLBitsPerSample","abstract":"<p>Describes different bit depth options for PerformAudioPassThru</p>"},"Type Definitions.html#/c:SDLButtonEventMode.h@T@SDLButtonEventMode":{"name":"SDLButtonEventMode","abstract":"<p>Indicates whether the button was depressed or released. A BUTTONUP event will always be preceded by a BUTTONDOWN event.</p>"},"Type Definitions.html#/c:SDLButtonName.h@T@SDLButtonName":{"name":"SDLButtonName","abstract":"<p>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.</p>"},"Type Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode":{"name":"SDLButtonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press</p>"},"Type Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus":{"name":"SDLCarModeStatus","abstract":"<p>Describes the carmode the vehicle is in. Used in ClusterModeStatus</p>"},"Type Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet":{"name":"SDLCharacterSet","abstract":"<p>Character sets supported by SDL. Used to describe text field capabilities.</p>"},"Type Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection":{"name":"SDLCompassDirection","abstract":"<p>The list of potential compass directions. Used in GPS data</p>"},"Type Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus":{"name":"SDLComponentVolumeStatus","abstract":"<p>The volume status of a vehicle component. Used in SingleTireStatus and VehicleData Fuel Level</p>"},"Type Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone":{"name":"SDLDefrostZone","abstract":"<p>Enumeration listing possible defrost zones. Used in ClimateControlCapabilities and Data.</p>"},"Type Definitions.html#/c:SDLDeliveryMode.h@T@SDLDeliveryMode":{"name":"SDLDeliveryMode","abstract":"<p>Specifies the mode in which the sendLocation request is sent. Used in SendLocation.</p>"},"Type Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus":{"name":"SDLDeviceLevelStatus","abstract":"<p>Reflects the reported battery status of the connected device, if reported. Used in DeviceStatus.</p>"},"Type Definitions.html#/c:SDLDimension.h@T@SDLDimension":{"name":"SDLDimension","abstract":"<p>The supported dimensions of the GPS. Used in GPSData</p>"},"Type Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode":{"name":"SDLDisplayMode","abstract":"<p>Identifies the various display types used by SDL.</p>"},"Type Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType":{"name":"SDLDisplayType","abstract":"<p>Identifies the various display types used by SDL. Used in DisplayCapabilities.</p>"},"Type Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit":{"name":"SDLDistanceUnit","abstract":"<p>Wiper Status</p>"},"Type Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState":{"name":"SDLDriverDistractionState","abstract":"<p>Enumeration that describes possible states of driver distraction. Used in OnDriverDistraction.</p>"},"Type Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus":{"name":"SDLECallConfirmationStatus","abstract":"<p>Reflects the status of the eCall Notification. Used in ECallInfo</p>"},"Type Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus":{"name":"SDLElectronicParkBrakeStatus","abstract":"<p>Reflects the status of the Electronic Parking Brake. A Vehicle Data Type.</p>"},"Type Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType":{"name":"SDLEmergencyEventType","abstract":"<p>Reflects the emergency event status of the vehicle. Used in EmergencyEvent</p>"},"Type Definitions.html#/c:SDLEnum.h@T@SDLEnum":{"name":"SDLEnum","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLFileManager.h@T@SDLFileManagerStartupCompletionHandler":{"name":"SDLFileManagerStartupCompletionHandler","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileName":{"name":"SDLFileName","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadCompletionHandler":{"name":"SDLFileManagerUploadCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a upload request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadCompletionHandler":{"name":"SDLFileManagerMultiUploadCompletionHandler","abstract":"<p>A completion handler called after a set of upload requests has completed.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadProgressHandler":{"name":"SDLFileManagerMultiUploadProgressHandler","abstract":"<p>In a multiple request send, a handler called after each response from Core to a upload request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerDeleteCompletionHandler":{"name":"SDLFileManagerDeleteCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a delete request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiDeleteCompletionHandler":{"name":"SDLFileManagerMultiDeleteCompletionHandler","abstract":"<p>A completion handler called after a set of delete requests has completed.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerListFilesCompletionHandler":{"name":"SDLFileManagerListFilesCompletionHandler","abstract":"<p>A completion handler called after response from Core to a list files request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadArtworkCompletionHandler":{"name":"SDLFileManagerUploadArtworkCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a artwork upload request.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkCompletionHandler":{"name":"SDLFileManagerMultiUploadArtworkCompletionHandler","abstract":"<p>A completion handler called after a set of upload artwork requests has completed.</p>"},"Type Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkProgressHandler":{"name":"SDLFileManagerMultiUploadArtworkProgressHandler","abstract":"<p>In a multiple request send, a handler called after each response from Core to an artwork upload request.</p>"},"Type Definitions.html#/c:SDLFileType.h@T@SDLFileType":{"name":"SDLFileType","abstract":"<p>Enumeration listing possible file types. Used in SDLFile, PutFile, ImageField, OnSystemRequest</p>"},"Type Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus":{"name":"SDLFuelCutoffStatus","abstract":"<p>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.</p>"},"Type Definitions.html#/c:SDLFuelType.h@T@SDLFuelType":{"name":"SDLFuelType","abstract":"<p>Enumeration listing possible fuel types.</p>"},"Type Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty":{"name":"SDLGlobalProperty","abstract":"<p>Properties of a user-initiated VR interaction (i.e. interactions started by the user pressing the PTT button). Used in RPCs related to ResetGlobalProperties</p>"},"Type Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel":{"name":"SDLHMILevel","abstract":"<p>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 <q>focus</q> to other applications (e.g. phone, other mobile applications, etc.). Used in OnHMIStatus</p>"},"Type Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities":{"name":"SDLHMIZoneCapabilities","abstract":"<p>Specifies HMI Zones in the vehicle. Used in RegisterAppInterfaceResponse</p>"},"Type Definitions.html#/c:SDLIgnitionStableStatus.h@T@SDLIgnitionStableStatus":{"name":"SDLIgnitionStableStatus","abstract":"<p>Reflects the ignition switch stability. Used in BodyInformation</p>"},"Type Definitions.html#/c:SDLIgnitionStatus.h@T@SDLIgnitionStatus":{"name":"SDLIgnitionStatus","abstract":"<p>Reflects the status of ignition. Used in BodyInformation.</p>"},"Type Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName":{"name":"SDLImageFieldName","abstract":"<p>The name that identifies the filed. Used in DisplayCapabilities.</p>"},"Type Definitions.html#/c:SDLImageType.h@T@SDLImageType":{"name":"SDLImageType","abstract":"<p>Contains information about the type of image. Used in Image.</p>"},"Type Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode":{"name":"SDLInteractionMode","abstract":"<p>For application-initiated interactions (SDLPerformInteraction), this specifies the mode by which the user is prompted and by which the user&rsquo;s selection is indicated. Used in PerformInteraction.</p>"},"Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler":{"name":"SDLKeyboardAutocompleteCompletionHandler","abstract":"<p>This handler is called when you wish to update your autocomplete text in response to the user&rsquo;s input</p>"},"Type Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler":{"name":"SDLKeyboardCharacterSetCompletionHandler","abstract":"<p>This handler is called when you wish to update your keyboard&rsquo;s limitedCharacterSet in response to the user&rsquo;s input</p>"},"Type Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent":{"name":"SDLKeyboardEvent","abstract":"<p>Enumeration listing possible keyboard events. Used in OnKeyboardInput.</p>"},"Type Definitions.html#/c:SDLKeyboardLayout.h@T@SDLKeyboardLayout":{"name":"SDLKeyboardLayout","abstract":"<p>Enumeration listing possible keyboard layouts. Used in KeyboardProperties.</p>"},"Type Definitions.html#/c:SDLKeypressMode.h@T@SDLKeypressMode":{"name":"SDLKeypressMode","abstract":"<p>Enumeration listing possible keyboard events.</p>"},"Type Definitions.html#/c:SDLLanguage.h@T@SDLLanguage":{"name":"SDLLanguage","abstract":"<p>Specifies the language to be used for TTS, VR, displayed messages/menus. Used in ChangeRegistration and RegisterAppInterface.</p>"},"Type Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode":{"name":"SDLLayoutMode","abstract":"<p>For touchscreen interactions, the mode of how the choices are presented. Used in PerformInteraction.</p>"},"Type Definitions.html#/c:SDLLightName.h@T@SDLLightName":{"name":"SDLLightName","abstract":"<p>The name that identifies the Light</p>"},"Type Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus":{"name":"SDLLightStatus","abstract":"<p>Reflects the status of Light.</p>"},"Type Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus":{"name":"SDLLockScreenStatus","abstract":"<p>Describes what the status of the lock screen should be</p>"},"Type Definitions.html#/c:SDLLogConstants.h@T@SDLLogFilterBlock":{"name":"SDLLogFilterBlock","abstract":"<p>A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.</p>"},"Type Definitions.html#/c:SDLMaintenanceModeStatus.h@T@SDLMaintenanceModeStatus":{"name":"SDLMaintenanceModeStatus","abstract":"<p>Describes the maintenence mode. Used in nothing.</p>"},"Type Definitions.html#/c:SDLManager.h@T@SDLManagerReadyBlock":{"name":"SDLManagerReadyBlock","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion":{"name":"SDLMassageCushion","abstract":"<p>The List possible cushions of a multi-contour massage seat.</p>"},"Type Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode":{"name":"SDLMassageMode","abstract":"<p>The List possible modes of a massage zone.</p>"},"Type Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone":{"name":"SDLMassageZone","abstract":"<p>List possible zones of a multi-contour massage seat.</p>"},"Type Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat":{"name":"SDLMediaClockFormat","abstract":"<p>Indicates the format of the time displayed on the connected SDL unit.</p>"},"Type Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler":{"name":"SDLMenuCellSelectionHandler","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType":{"name":"SDLMetadataType","abstract":"<p>Text Field metadata types. Used in Show.</p>"},"Type Definitions.html#/c:SDLModuleType.h@T@SDLModuleType":{"name":"SDLModuleType","abstract":"<p>The type of remote control data. Used in ButtonPress, GetInteriorVehicleData, and ModuleData</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName":{"name":"SDLNotificationName","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationUserInfoKey":{"name":"SDLNotificationUserInfoKey","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler":{"name":"SDLAudioPassThruHandler","abstract":"<p>A handler used on SDLPerformAudioPassThru.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLResponseHandler":{"name":"SDLResponseHandler","abstract":"<p>A handler used on all RPC requests which fires when the response is received.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleRequestCompletionHandler":{"name":"SDLMultipleRequestCompletionHandler","abstract":"<p>A completion handler called after a sequential or simultaneous set of requests have completed sending.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleSequentialRequestProgressHandler":{"name":"SDLMultipleSequentialRequestProgressHandler","abstract":"<p>A handler called after each response to a request comes in in a multiple request send.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleAsyncRequestProgressHandler":{"name":"SDLMultipleAsyncRequestProgressHandler","abstract":"<p>A handler called after each response to a request comes in in a multiple request send.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler":{"name":"SDLRPCButtonNotificationHandler","abstract":"<p>A handler that may optionally be run when an SDLSubscribeButton or SDLSoftButton has a corresponding notification occur.</p>"},"Type Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler":{"name":"SDLRPCCommandNotificationHandler","abstract":"<p>A handler that may optionally be run when an SDLAddCommand has a corresponding notification occur.</p>"},"Type Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL":{"name":"SDLPRNDL","abstract":"<p>The selected gear the car is in. Used in retrieving vehicle data.</p>"},"Type Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionRPCName":{"name":"SDLPermissionRPCName","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionObserverIdentifier":{"name":"SDLPermissionObserverIdentifier","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionsChangedHandler":{"name":"SDLPermissionsChangedHandler","abstract":"<p>The PermissionObserver is a block that is passed in to some methods that will be stored and called when specified permissions change.</p>"},"Type Definitions.html#/c:SDLPermissionStatus.h@T@SDLPermissionStatus":{"name":"SDLPermissionStatus","abstract":"<p>Enumeration that describes possible permission states of a policy table entry. Used in nothing.</p>"},"Type Definitions.html#/c:SDLPowerModeQualificationStatus.h@T@SDLPowerModeQualificationStatus":{"name":"SDLPowerModeQualificationStatus","abstract":"<p>Describes the power mode qualification status. Used in ClusterModeStatus.</p>"},"Type Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus":{"name":"SDLPowerModeStatus","abstract":"<p>The status of the car&rsquo;s power. Used in ClusterModeStatus.</p>"},"Type Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout":{"name":"SDLPredefinedLayout","abstract":"<p>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.</p>"},"Type Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech":{"name":"SDLPrerecordedSpeech","abstract":"<p>Contains information about the speech capabilities on the SDL platform. Used in RegisterAppInterfaceResponse to indicate capability.</p>"},"Type Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource":{"name":"SDLPrimaryAudioSource","abstract":"<p>Reflects the current primary audio source of SDL (if selected). Used in DeviceStatus.</p>"},"Type Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand":{"name":"SDLRadioBand","abstract":"<p>Radio bands, such as AM and FM, used in RadioControlData</p>"},"Type Definitions.html#/c:SDLRadioState.h@T@SDLRadioState":{"name":"SDLRadioState","abstract":"<p>List possible states of a remote control radio module. Used in RadioControlData.</p>"},"Type Definitions.html#/c:SDLRequestType.h@T@SDLRequestType":{"name":"SDLRequestType","abstract":"<p>A type of system request. Used in SystemRequest.</p>"},"Type Definitions.html#/c:SDLResult.h@T@SDLResult":{"name":"SDLResult","abstract":"<p>Defines the possible result codes returned by SDL to the application in a response to a requested operation. Used in RPC responses</p>"},"Type Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate":{"name":"SDLSamplingRate","abstract":"<p>Describes different sampling rates for PerformAudioPassThru and AudioPassThruCapabilities</p>"},"Type Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler":{"name":"SDLScreenManagerUpdateCompletionHandler","abstract":"<p>The handler run when the update has completed</p>"},"Type Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler":{"name":"SDLPreloadChoiceCompletionHandler","abstract":"<p>Return an error with userinfo [key: SDLChoiceCell, value: NSError] if choices failed to upload</p>"},"Type Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType":{"name":"SDLSeatMemoryActionType","abstract":"<p>List of possible actions on Seat Meomry</p>"},"Type Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType":{"name":"SDLSoftButtonType","abstract":"<p>SoftButtonType (TEXT / IMAGE / BOTH). Used by SoftButton.</p>"},"Type Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities":{"name":"SDLSpeechCapabilities","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName":{"name":"SDLStaticIconName","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState":{"name":"SDLVideoStreamManagerState","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState":{"name":"SDLAudioStreamManagerState","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAppState":{"name":"SDLAppState","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat":{"name":"SDLSupportedSeat","abstract":"<p>List possible seats that is a remote controllable seat.</p>"},"Type Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction":{"name":"SDLSystemAction","abstract":"<p>Enumeration that describes system actions that can be triggered. Used in SoftButton.</p>"},"Type Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLUpdateCapabilityHandler":{"name":"SDLUpdateCapabilityHandler","abstract":"<p>A completion handler called after a request for the capability type is returned from the remote system.</p>"},"Type Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType":{"name":"SDLSystemCapabilityType","abstract":"<p>The type of system capability to get more information on. Used in GetSystemCapability.</p>"},"Type Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext":{"name":"SDLSystemContext","abstract":"<p>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</p>"},"Type Definitions.html#/c:SDLTBTState.h@T@SDLTBTState":{"name":"SDLTBTState","abstract":"<p>The turn-by-turn state, used in OnTBTClientState.</p>"},"Type Definitions.html#/c:SDLTPMS.h@T@SDLTPMS":{"name":"SDLTPMS","abstract":"<p>An enum representing values of the tire pressure monitoring system</p>"},"Type Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit":{"name":"SDLTemperatureUnit","abstract":"<p>The unit of temperature to display. Used in Temperature.</p>"},"Type Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment":{"name":"SDLTextAlignment","abstract":"<p>The list of possible alignments of text in a field. May only work on some display types. used in Show.</p>"},"Type Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName":{"name":"SDLTextFieldName","abstract":"<p>Names of the text fields that can appear on a SDL display. Used in TextFieldName.</p>"},"Type Definitions.html#/c:SDLTimerMode.h@T@SDLTimerMode":{"name":"SDLTimerMode","abstract":"<p>The direction of a timer. Used in nothing.</p>"},"Type Definitions/SDLTouchIdentifier.html":{"name":"SDLTouchIdentifier","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler":{"name":"SDLTouchEventHandler","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLTouchType.h@T@SDLTouchType":{"name":"SDLTouchType","abstract":"<p>The type of a touch in a projection application. Used in OnTouchEvent.</p>"},"Type Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource":{"name":"SDLTriggerSource","abstract":"<p>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.</p>"},"Type Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal":{"name":"SDLTurnSignal","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode":{"name":"SDLUpdateMode","abstract":"<p>Specifies what function should be performed on the media clock/counter. Used in SetMediaClockTimer.</p>"},"Type Definitions.html#/c:SDLVehicleDataActiveStatus.h@T@SDLVehicleDataActiveStatus":{"name":"SDLVehicleDataActiveStatus","abstract":"<p>Vehicle Data Activity Status. Used in nothing.</p>"},"Type Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus":{"name":"SDLVehicleDataEventStatus","abstract":"<p>Reflects the status of a vehicle data event; e.g. a seat belt event status. Used in retrieving vehicle data.</p>"},"Type Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus":{"name":"SDLVehicleDataNotificationStatus","abstract":"<p>Reflects the status of a vehicle data notification. Used in ECallInfo</p>"},"Type Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode":{"name":"SDLVehicleDataResultCode","abstract":"<p>Vehicle Data Result Code. Used in DIDResult.</p>"},"Type Definitions.html#/c:SDLVehicleDataStatus.h@T@SDLVehicleDataStatus":{"name":"SDLVehicleDataStatus","abstract":"<p>Reflects the status of a binary vehicle data item. Used in MyKey.</p>"},"Type Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType":{"name":"SDLVehicleDataType","abstract":"<p>Defines the vehicle data types that can be published and/or subscribed to using SDLSubscribeVehicleData. Used in VehicleDataResult</p>"},"Type Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode":{"name":"SDLVentilationMode","abstract":"<p>The ventilation mode. Used in ClimateControlCapabilities</p>"},"Type Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec":{"name":"SDLVideoStreamingCodec","abstract":"<p>Enum for each type of video streaming codec. Used in VideoStreamingFormat.</p>"},"Type Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol":{"name":"SDLVideoStreamingProtocol","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState":{"name":"SDLVideoStreamingState","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler":{"name":"SDLVoiceCommandSelectionHandler","abstract":"<p>Undocumented</p>"},"Type Definitions.html#/c:SDLVrCapabilities.h@T@SDLVRCapabilities":{"name":"SDLVRCapabilities","abstract":"<p>The VR capabilities of the connected SDL platform. Used in RegisterAppInterfaceResponse.</p>"},"Type Definitions.html#/c:SDLWarningLightStatus.h@T@SDLWarningLightStatus":{"name":"SDLWarningLightStatus","abstract":"<p>Reflects the status of a cluster instrument warning light. Used in TireStatus</p>"},"Type Definitions.html#/c:SDLWayPointType.h@T@SDLWayPointType":{"name":"SDLWayPointType","abstract":"<p>The type of a navigation waypoint. Used in GetWayPoints.</p>"},"Type Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus":{"name":"SDLWiperStatus","abstract":"<p>The status of the windshield wipers. Used in retrieving vehicle data.</p>"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveSingleTapForView:atPoint:":{"name":"-touchManager:didReceiveSingleTapForView:atPoint:","abstract":"<p>A single tap was received</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveDoubleTapForView:atPoint:":{"name":"-touchManager:didReceiveDoubleTapForView:atPoint:","abstract":"<p>A double tap was received</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidStartInView:atPoint:":{"name":"-touchManager:panningDidStartInView:atPoint:","abstract":"<p>Panning started</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePanningFromPoint:toPoint:":{"name":"-touchManager:didReceivePanningFromPoint:toPoint:","abstract":"<p>Panning moved between points</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidEndInView:atPoint:":{"name":"-touchManager:panningDidEndInView:atPoint:","abstract":"<p>Panning ended</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningCanceledAtPoint:":{"name":"-touchManager:panningCanceledAtPoint:","abstract":"<p>Panning canceled</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidStartInView:atCenterPoint:":{"name":"-touchManager:pinchDidStartInView:atCenterPoint:","abstract":"<p>Pinch did start</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchAtCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchAtCenterPoint:withScale:","abstract":"<p>@abstract","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchInView:atCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchInView:atCenterPoint:withScale:","abstract":"<p>Pinch moved and changed scale</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidEndInView:atCenterPoint:":{"name":"-touchManager:pinchDidEndInView:atCenterPoint:","abstract":"<p>Pinch did end</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchCanceledAtCenterPoint:":{"name":"-touchManager:pinchCanceledAtCenterPoint:","abstract":"<p>Pinch canceled</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)preferredVideoFormatOrderFromHeadUnitPreferredOrder:":{"name":"-preferredVideoFormatOrderFromHeadUnitPreferredOrder:","abstract":"<p>Implement to return a different preferred order of attempted format usage than the head unit&rsquo;s preferred order. In nearly all cases, it&rsquo;s best to simply return the head unit&rsquo;s preferred order, or not implement this method (which does the same thing).</p>","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)resolutionFromHeadUnitPreferredResolution:":{"name":"-resolutionFromHeadUnitPreferredResolution:","abstract":"<p>Implement to return a different resolution to use for video streaming than the head unit&rsquo;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&rsquo;s best to simply return the head unit&rsquo;s preferred order, or not implement this method (which does the same thing), and adapt your UI to the head unit&rsquo;s preferred resolution instead.</p>","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(py)audioConnected":{"name":"audioConnected","abstract":"<p>Whether or not the audio byte stream is currently connected</p>","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"<p>Send audio data bytes over the audio byte stream</p>","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(py)appId":{"name":"appId","abstract":"<p>The app id of the app</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)initializeWithAppId:completionHandler:":{"name":"-initializeWithAppId:completionHandler:","abstract":"<p>Initialize the SDL security library with the app&rsquo;s id and a completion handler</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)stop":{"name":"-stop","abstract":"<p>Stop the security library</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)runHandshakeWithClientData:error:":{"name":"-runHandshakeWithClientData:error:","abstract":"<p>Run the SSL/TLS handshake</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)encryptData:withError:":{"name":"-encryptData:withError:","abstract":"<p>Encrypt data using SSL/TLS</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)decryptData:withError:":{"name":"-decryptData:withError:","abstract":"<p>Decrypt data using SSL/TLS</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(cm)availableMakes":{"name":"+availableMakes","abstract":"<p>The vehicle makes this security library covers</p>","parent_name":"SDLSecurityType"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerDidDisconnect":{"name":"-managerDidDisconnect","abstract":"<p>Called upon a disconnection from the remote system.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)hmiLevel:didChangeToLevel:":{"name":"-hmiLevel:didChangeToLevel:","abstract":"<p>Called when the HMI level state of this application changes on the remote system. This is equivalent to the application&rsquo;s state changes in iOS such as foreground, background, or closed.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)audioStreamingState:didChangeToState:":{"name":"-audioStreamingState:didChangeToState:","abstract":"<p>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.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)systemContext:didChangeToContext:":{"name":"-systemContext:didChangeToContext:","abstract":"<p>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.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerShouldUpdateLifecycleToLanguage:":{"name":"-managerShouldUpdateLifecycleToLanguage:","abstract":"<p>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.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(cm)logger":{"name":"+logger","abstract":"<p>A simple convenience initializer to create the object. This <em>should not</em> start up the logger.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)setupLogger":{"name":"-setupLogger","abstract":"<p>A call to setup the logger in whatever manner it needs to do so.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)logWithLog:formattedLog:":{"name":"-logWithLog:formattedLog:","abstract":"<p>Log a particular log using the model and the formatted log message to the target.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)teardownLogger":{"name":"-teardownLogger","abstract":"<p>The log target should be torn down. e.g. file handles should be closed</p>","parent_name":"SDLLogTarget"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)userDidSubmitInput:withEvent:":{"name":"-userDidSubmitInput:withEvent:","abstract":"<p>The keyboard session completed with some input.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidAbortWithReason:":{"name":"-keyboardDidAbortWithReason:","abstract":"<p>The keyboard session aborted.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)customKeyboardConfiguration":{"name":"-customKeyboardConfiguration","abstract":"<p>Implement this in order to provide a custom keyboard configuration to just this keyboard. To apply default settings to all keyboards, see SDLScreenManager.keyboardConfiguration</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:completionHandler:":{"name":"-updateAutocompleteWithInput:completionHandler:","abstract":"<p>Implement this if you wish to update the KeyboardProperties.autoCompleteText as the user updates their input. This is called upon a KEYPRESS event.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateCharacterSetWithInput:completionHandler:":{"name":"-updateCharacterSetWithInput:completionHandler:","abstract":"<p>Implement this if you wish to update the limitedCharacterSet as the user updates their input. This is called upon a KEYPRESS event.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidSendEvent:text:":{"name":"-keyboardDidSendEvent:text:","abstract":"<p>Implement this to be notified of all events occurring on the keyboard</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didSelectChoice:withSource:atRowIndex:":{"name":"-choiceSet:didSelectChoice:withSource:atRowIndex:","abstract":"<p>Undocumented</p>","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didReceiveError:":{"name":"-choiceSet:didReceiveError:","abstract":"<p>Undocumented</p>","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:fileDidFinishPlaying:successfully:":{"name":"-audioStreamManager:fileDidFinishPlaying:successfully:","abstract":"<p>Called when a file from the SDLAudioStreamManager finishes playing</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForFile:error:":{"name":"-audioStreamManager:errorDidOccurForFile:error:","abstract":"<p>Called when a file from the SDLAudioStreamManager could not play</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols.html#/c:objc(pl)SDLInt":{"name":"SDLInt","abstract":"<p>A decleration that this NSNumber contains an NSInteger.</p>"},"Protocols.html#/c:objc(pl)SDLUInt":{"name":"SDLUInt","abstract":"<p>A declaration that this NSNumber contains an NSUInteger.</p>"},"Protocols.html#/c:objc(pl)SDLBool":{"name":"SDLBool","abstract":"<p>A declaration that this NSNumber contains a BOOL.</p>"},"Protocols.html#/c:objc(pl)SDLFloat":{"name":"SDLFloat","abstract":"<p>A declaration that this NSNumber contains a float.</p>"},"Protocols/SDLAudioStreamManagerDelegate.html":{"name":"SDLAudioStreamManagerDelegate","abstract":"<p>Undocumented</p>"},"Protocols/SDLChoiceSetDelegate.html":{"name":"SDLChoiceSetDelegate","abstract":"<p>Undocumented</p>"},"Protocols/SDLKeyboardDelegate.html":{"name":"SDLKeyboardDelegate","abstract":"<p>Undocumented</p>"},"Protocols/SDLLogTarget.html":{"name":"SDLLogTarget","abstract":"<p>A protocol describing a place logs from SDLLogManager are logged to</p>"},"Protocols/SDLManagerDelegate.html":{"name":"SDLManagerDelegate","abstract":"<p>Undocumented</p>"},"Protocols/SDLSecurityType.html":{"name":"SDLSecurityType","abstract":"<p>A protocol used by SDL Security libraries.</p>"},"Protocols/SDLStreamingAudioManagerType.html":{"name":"SDLStreamingAudioManagerType","abstract":"<p>Undocumented</p>"},"Protocols/SDLStreamingMediaManagerDataSource.html":{"name":"SDLStreamingMediaManagerDataSource","abstract":"<p>Undocumented</p>"},"Protocols/SDLTouchManagerDelegate.html":{"name":"SDLTouchManagerDelegate","abstract":"<p>Undocumented</p>"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagNone":{"name":"SDLStreamingEncryptionFlagNone","abstract":"<p>Undocumented</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateOnly":{"name":"SDLStreamingEncryptionFlagAuthenticateOnly","abstract":"<p>Undocumented</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateAndEncrypt":{"name":"SDLStreamingEncryptionFlagAuthenticateAndEncrypt","abstract":"<p>Undocumented</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeLayer":{"name":"SDLCarWindowRenderingTypeLayer","abstract":"<p>Undocumented</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewAfterScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewAfterScreenUpdates","abstract":"<p>Undocumented</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewBeforeScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewBeforeScreenUpdates","abstract":"<p>Undocumented</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeRequest":{"name":"SDLRPCMessageTypeRequest","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeResponse":{"name":"SDLRPCMessageTypeResponse","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeNotification":{"name":"SDLRPCMessageTypeNotification","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusAllowed":{"name":"SDLPermissionGroupStatusAllowed","abstract":"<p>Every RPC in the group is currently allowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusDisallowed":{"name":"SDLPermissionGroupStatusDisallowed","abstract":"<p>Every RPC in the group is currently disallowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusMixed":{"name":"SDLPermissionGroupStatusMixed","abstract":"<p>Some RPCs in the group are allowed and some disallowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusUnknown":{"name":"SDLPermissionGroupStatusUnknown","abstract":"<p>The current status of the group is unknown.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAllAllowed":{"name":"SDLPermissionGroupTypeAllAllowed","abstract":"<p>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.</p>","parent_name":"SDLPermissionGroupType"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAny":{"name":"SDLPermissionGroupTypeAny","abstract":"<p>Be notified when any change in availability occurs among the group.</p>","parent_name":"SDLPermissionGroupType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeSimple":{"name":"SDLLogFormatTypeSimple","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDefault":{"name":"SDLLogFormatTypeDefault","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDetailed":{"name":"SDLLogFormatTypeDetailed","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDefault":{"name":"SDLLogLevelDefault","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelOff":{"name":"SDLLogLevelOff","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelError":{"name":"SDLLogLevelError","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelWarning":{"name":"SDLLogLevelWarning","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDebug":{"name":"SDLLogLevelDebug","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelVerbose":{"name":"SDLLogLevelVerbose","abstract":"<p>Undocumented</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagError":{"name":"SDLLogFlagError","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagWarning":{"name":"SDLLogFlagWarning","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagDebug":{"name":"SDLLogFlagDebug","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagVerbose":{"name":"SDLLogFlagVerbose","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionTransmit":{"name":"SDLLogBytesDirectionTransmit","abstract":"<p>Undocumented</p>","parent_name":"SDLLogBytesDirection"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionReceive":{"name":"SDLLogBytesDirectionReceive","abstract":"<p>Undocumented</p>","parent_name":"SDLLogBytesDirection"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorUnknown":{"name":"SDLTransportErrorUnknown","abstract":"<p>Connection cannot be established due to a reason not listed here.</p>","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionRefused":{"name":"SDLTransportErrorConnectionRefused","abstract":"<p>TCP connection is refused.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionTimedOut":{"name":"SDLTransportErrorConnectionTimedOut","abstract":"<p>TCP connection cannot be established within given time.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorNetworkDown":{"name":"SDLTransportErrorNetworkDown","abstract":"<p>TCP connection cannot be established since network is down.","parent_name":"SDLTransportError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorPendingPresentationDeleted":{"name":"SDLChoiceSetManagerErrorPendingPresentationDeleted","abstract":"<p>Undocumented</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorDeletionFailed":{"name":"SDLChoiceSetManagerErrorDeletionFailed","abstract":"<p>Undocumented</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorUploadFailed":{"name":"SDLChoiceSetManagerErrorUploadFailed","abstract":"<p>Undocumented</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLMenuManagerError.html#/c:@E@SDLMenuManagerError@SDLMenuManagerErrorRPCsFailed":{"name":"SDLMenuManagerErrorRPCsFailed","abstract":"<p>Undocumented</p>","parent_name":"SDLMenuManagerError"},"Enums/SDLSoftButtonManagerError.html#/c:@E@SDLSoftButtonManagerError@SDLSoftButtonManagerErrorPendingUpdateSuperseded":{"name":"SDLSoftButtonManagerErrorPendingUpdateSuperseded","abstract":"<p>Undocumented</p>","parent_name":"SDLSoftButtonManagerError"},"Enums/SDLTextAndGraphicManagerError.html#/c:@E@SDLTextAndGraphicManagerError@SDLTextAndGraphicManagerErrorPendingUpdateSuperseded":{"name":"SDLTextAndGraphicManagerErrorPendingUpdateSuperseded","abstract":"<p>Undocumented</p>","parent_name":"SDLTextAndGraphicManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorCannotOverwrite":{"name":"SDLFileManagerErrorCannotOverwrite","abstract":"<p>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.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorNoKnownFile":{"name":"SDLFileManagerErrorNoKnownFile","abstract":"<p>A file was attempted to be accessed but it does not exist.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToStart":{"name":"SDLFileManagerErrorUnableToStart","abstract":"<p>The file manager attempted to start but encountered an error.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToUpload":{"name":"SDLFileManagerErrorUnableToUpload","abstract":"<p>The file manager was unable to send this file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDoesNotExist":{"name":"SDLFileManagerErrorFileDoesNotExist","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerUploadCanceled":{"name":"SDLFileManagerUploadCanceled","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileUploadTasksFailed":{"name":"SDLFileManagerMultipleFileUploadTasksFailed","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileDeleteTasksFailed":{"name":"SDLFileManagerMultipleFileDeleteTasksFailed","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDataMissing":{"name":"SDLFileManagerErrorFileDataMissing","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRPCRequestFailed":{"name":"SDLManagerErrorRPCRequestFailed","abstract":"<p>An RPC request failed to send.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotConnected":{"name":"SDLManagerErrorNotConnected","abstract":"<p>Some action was attempted that requires a connection to the remote head unit.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotReady":{"name":"SDLManagerErrorNotReady","abstract":"<p>Some action was attempted before the ready state was reached.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorUnknownRemoteError":{"name":"SDLManagerErrorUnknownRemoteError","abstract":"<p>The remote system encountered an unknown error.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorManagersFailedToStart":{"name":"SDLManagerErrorManagersFailedToStart","abstract":"<p>One or more of the sub-managers failed to start.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationFailed":{"name":"SDLManagerErrorRegistrationFailed","abstract":"<p>Registering with the remote system failed.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationSuccessWithWarning":{"name":"SDLManagerErrorRegistrationSuccessWithWarning","abstract":"<p>Registering with the remote system was successful, but had a warning.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorCancelled":{"name":"SDLManagerErrorCancelled","abstract":"<p>Request operations were cancelled before they could be sent</p>","parent_name":"SDLManagerError"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutList":{"name":"SDLChoiceSetLayoutList","abstract":"<p>Undocumented</p>","parent_name":"SDLChoiceSetLayout"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutTiles":{"name":"SDLChoiceSetLayoutTiles","abstract":"<p>Undocumented</p>","parent_name":"SDLChoiceSetLayout"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNotConnected":{"name":"SDLAudioStreamManagerErrorNotConnected","abstract":"<p>Undocumented</p>","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNoQueuedAudio":{"name":"SDLAudioStreamManagerErrorNoQueuedAudio","abstract":"<p>Undocumented</p>","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatPNG":{"name":"SDLArtworkImageFormatPNG","abstract":"<p>Undocumented</p>","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatJPG":{"name":"SDLArtworkImageFormatJPG","abstract":"<p>Undocumented</p>","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html":{"name":"SDLArtworkImageFormat","abstract":"<p>Undocumented</p>"},"Enums/SDLAudioStreamManagerError.html":{"name":"SDLAudioStreamManagerError","abstract":"<p>Undocumented</p>"},"Enums/SDLChoiceSetLayout.html":{"name":"SDLChoiceSetLayout","abstract":"<p>Undocumented</p>"},"Enums/SDLManagerError.html":{"name":"SDLManagerError","abstract":"<p>Errors associated with the SDLManager class.</p>"},"Enums/SDLFileManagerError.html":{"name":"SDLFileManagerError","abstract":"<p>Errors associated with the SDLFileManager class.</p>"},"Enums/SDLTextAndGraphicManagerError.html":{"name":"SDLTextAndGraphicManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLSoftButtonManagerError.html":{"name":"SDLSoftButtonManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLMenuManagerError.html":{"name":"SDLMenuManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLChoiceSetManagerError.html":{"name":"SDLChoiceSetManagerError","abstract":"<p>Undocumented</p>"},"Enums/SDLTransportError.html":{"name":"SDLTransportError","abstract":"<p>Errors associated with transport.</p>"},"Enums/SDLLogBytesDirection.html":{"name":"SDLLogBytesDirection","abstract":"<p>Undocumented</p>"},"Enums/SDLLogFlag.html":{"name":"SDLLogFlag","abstract":"<p>Flags used for SDLLogLevel to provide correct enum values. This is purely for internal use.</p>"},"Enums/SDLLogLevel.html":{"name":"SDLLogLevel","abstract":"<p>An enum describing a level of logging.</p>"},"Enums/SDLLogFormatType.html":{"name":"SDLLogFormatType","abstract":"<p>The output format of logs; how they will appear when printed out into a string.</p>"},"Enums/SDLPermissionGroupType.html":{"name":"SDLPermissionGroupType","abstract":"<p>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.</p>"},"Enums/SDLPermissionGroupStatus.html":{"name":"SDLPermissionGroupStatus","abstract":"<p>The status of the group of RPCs permissions.</p>"},"Enums/SDLRPCMessageType.html":{"name":"SDLRPCMessageType","abstract":"<p>The type of RPC message</p>"},"Enums/SDLCarWindowRenderingType.html":{"name":"SDLCarWindowRenderingType","abstract":"<p>The type of rendering that CarWindow will perform. Depending on your app, you may need to try different ones for best performance</p>"},"Enums/SDLStreamingEncryptionFlag.html":{"name":"SDLStreamingEncryptionFlag","abstract":"<p>A flag determining how video and audio streaming should be encrypted</p>"},"Constants.html#/c:@SDLAmbientLightStatusNight":{"name":"SDLAmbientLightStatusNight","abstract":"<p>Represents a <q>night</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight1":{"name":"SDLAmbientLightStatusTwilight1","abstract":"<p>Represents a <q>twilight 1</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight2":{"name":"SDLAmbientLightStatusTwilight2","abstract":"<p>Represents a <q>twilight 2</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight3":{"name":"SDLAmbientLightStatusTwilight3","abstract":"<p>Represents a <q>twilight 3</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight4":{"name":"SDLAmbientLightStatusTwilight4","abstract":"<p>Represents a <q>twilight 4</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusDay":{"name":"SDLAmbientLightStatusDay","abstract":"<p>Represents a <q>day</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusUnknown":{"name":"SDLAmbientLightStatusUnknown","abstract":"<p>Represents an <q>unknown</q> ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusInvalid":{"name":"SDLAmbientLightStatusInvalid","abstract":"<p>Represents a <q>invalid</q> ambient light status</p>"},"Constants.html#/c:@SDLAppHMITypeDefault":{"name":"SDLAppHMITypeDefault","abstract":"<p>The App will have default rights.</p>"},"Constants.html#/c:@SDLAppHMITypeCommunication":{"name":"SDLAppHMITypeCommunication","abstract":"<p>Communication type of App</p>"},"Constants.html#/c:@SDLAppHMITypeMedia":{"name":"SDLAppHMITypeMedia","abstract":"<p>App dealing with Media</p>"},"Constants.html#/c:@SDLAppHMITypeMessaging":{"name":"SDLAppHMITypeMessaging","abstract":"<p>Messaging App</p>"},"Constants.html#/c:@SDLAppHMITypeNavigation":{"name":"SDLAppHMITypeNavigation","abstract":"<p>Navigation App</p>"},"Constants.html#/c:@SDLAppHMITypeInformation":{"name":"SDLAppHMITypeInformation","abstract":"<p>Information App</p>"},"Constants.html#/c:@SDLAppHMITypeSocial":{"name":"SDLAppHMITypeSocial","abstract":"<p>App dealing with social media</p>"},"Constants.html#/c:@SDLAppHMITypeProjection":{"name":"SDLAppHMITypeProjection","abstract":"<p>App dealing with Mobile Projection applications</p>"},"Constants.html#/c:@SDLAppHMITypeBackgroundProcess":{"name":"SDLAppHMITypeBackgroundProcess","abstract":"<p>App designed for use in the background</p>"},"Constants.html#/c:@SDLAppHMITypeTesting":{"name":"SDLAppHMITypeTesting","abstract":"<p>App only for Testing purposes</p>"},"Constants.html#/c:@SDLAppHMITypeSystem":{"name":"SDLAppHMITypeSystem","abstract":"<p>System App</p>"},"Constants.html#/c:@SDLAppHMITypeRemoteControl":{"name":"SDLAppHMITypeRemoteControl","abstract":"<p>Remote control</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonIgnitionOff":{"name":"SDLAppInterfaceUnregisteredReasonIgnitionOff","abstract":"<p>Vehicle ignition turned off.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonBluetoothOff":{"name":"SDLAppInterfaceUnregisteredReasonBluetoothOff","abstract":"<p>Bluetooth was turned off, causing termination of a necessary Bluetooth connection.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUSBDisconnected":{"name":"SDLAppInterfaceUnregisteredReasonUSBDisconnected","abstract":"<p>USB was disconnected, causing termination of a necessary iAP connection.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel":{"name":"SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonTooManyRequests":{"name":"SDLAppInterfaceUnregisteredReasonTooManyRequests","abstract":"<p>Either too many &ndash; or too many per unit of time &ndash; requests were made by the application.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonDriverDistractionViolation":{"name":"SDLAppInterfaceUnregisteredReasonDriverDistractionViolation","abstract":"<p>The application has issued requests which cause driver distraction rules to be violated.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonLanguageChange":{"name":"SDLAppInterfaceUnregisteredReasonLanguageChange","abstract":"<p>The user performed a language change on the SDL platform, causing the application to need to be reregistered for the new language.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonMasterReset":{"name":"SDLAppInterfaceUnregisteredReasonMasterReset","abstract":"<p>The user performed a MASTER RESET on the SDL platform, causing removal of a necessary Bluetooth pairing.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonFactoryDefaults":{"name":"SDLAppInterfaceUnregisteredReasonFactoryDefaults","abstract":"<p>The user restored settings to FACTORY DEFAULTS on the SDL platform.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonAppUnauthorized":{"name":"SDLAppInterfaceUnregisteredReasonAppUnauthorized","abstract":"<p>The app is not being authorized to be connected to SDL.</p>"},"Constants.html#/c:@SDLErrorDomainAudioStreamManager":{"name":"SDLErrorDomainAudioStreamManager","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorPlayPause":{"name":"SDLAudioStreamingIndicatorPlayPause","abstract":"<p>Default playback indicator."},"Constants.html#/c:@SDLAudioStreamingIndicatorPlay":{"name":"SDLAudioStreamingIndicatorPlay","abstract":"<p>Indicates that a button press of the Play/Pause button starts the audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorPause":{"name":"SDLAudioStreamingIndicatorPause","abstract":"<p>Indicates that a button press of the Play/Pause button pauses the current audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorStop":{"name":"SDLAudioStreamingIndicatorStop","abstract":"<p>Indicates that a button press of the Play/Pause button stops the current audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingStateAudible":{"name":"SDLAudioStreamingStateAudible","abstract":"<p>Currently streaming audio, if any, is audible to user.</p>"},"Constants.html#/c:@SDLAudioStreamingStateAttenuated":{"name":"SDLAudioStreamingStateAttenuated","abstract":"<p>Some kind of audio mixing is taking place. Currently streaming audio, if any, is audible to the user at a lowered volume.</p>"},"Constants.html#/c:@SDLAudioStreamingStateNotAudible":{"name":"SDLAudioStreamingStateNotAudible","abstract":"<p>Currently streaming audio, if any, is not audible to user. made via VR session.</p>"},"Constants.html#/c:@SDLAudioTypePCM":{"name":"SDLAudioTypePCM","abstract":"<p>PCM raw audio</p>"},"Constants.html#/c:@SDLBitsPerSample8Bit":{"name":"SDLBitsPerSample8Bit","abstract":"<p>8 bits per sample</p>"},"Constants.html#/c:@SDLBitsPerSample16Bit":{"name":"SDLBitsPerSample16Bit","abstract":"<p>16 bits per sample</p>"},"Constants.html#/c:@SDLButtonEventModeButtonUp":{"name":"SDLButtonEventModeButtonUp","abstract":"<p>The button was released</p>"},"Constants.html#/c:@SDLButtonEventModeButtonDown":{"name":"SDLButtonEventModeButtonDown","abstract":"<p>The button was depressed</p>"},"Constants.html#/c:@SDLButtonNameOk":{"name":"SDLButtonNameOk","abstract":"<p>Represents the button usually labeled <q>OK</q>. 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 <q>OK</q> buttons <em>AND</em> 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.</p>"},"Constants.html#/c:@SDLButtonNamePlayPause":{"name":"SDLButtonNamePlayPause","abstract":"<p>Represents the play/pause button for media apps. Replaces <q>OK</q> on sub-5.0 head units, compliments it on 5.0 head units and later.</p>"},"Constants.html#/c:@SDLButtonNameSeekLeft":{"name":"SDLButtonNameSeekLeft","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLButtonNameSeekRight":{"name":"SDLButtonNameSeekRight","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLButtonNameTuneUp":{"name":"SDLButtonNameTuneUp","abstract":"<p>Represents a turn of the tuner knob in the clockwise direction one tick.</p>"},"Constants.html#/c:@SDLButtonNameTuneDown":{"name":"SDLButtonNameTuneDown","abstract":"<p>Represents a turn of the tuner knob in the counter-clockwise direction one tick.</p>"},"Constants.html#/c:@SDLButtonNamePreset0":{"name":"SDLButtonNamePreset0","abstract":"<p>Represents the preset 0 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset1":{"name":"SDLButtonNamePreset1","abstract":"<p>Represents the preset 1 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset2":{"name":"SDLButtonNamePreset2","abstract":"<p>Represents the preset 2 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset3":{"name":"SDLButtonNamePreset3","abstract":"<p>Represents the preset 3 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset4":{"name":"SDLButtonNamePreset4","abstract":"<p>Represents the preset 4 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset5":{"name":"SDLButtonNamePreset5","abstract":"<p>Represents the preset 5 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset6":{"name":"SDLButtonNamePreset6","abstract":"<p>Represents the preset 6 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset7":{"name":"SDLButtonNamePreset7","abstract":"<p>Represents the preset 7 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset8":{"name":"SDLButtonNamePreset8","abstract":"<p>Represents the preset 8 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset9":{"name":"SDLButtonNamePreset9","abstract":"<p>Represents the preset 9 button.</p>"},"Constants.html#/c:@SDLButtonNameCustomButton":{"name":"SDLButtonNameCustomButton","abstract":"<p>Represents the Custom button.</p>"},"Constants.html#/c:@SDLButtonNameSearch":{"name":"SDLButtonNameSearch","abstract":"<p>Represents the SEARCH button.</p>"},"Constants.html#/c:@SDLButtonNameACMax":{"name":"SDLButtonNameACMax","abstract":"<p>Represents AC max button *</p>"},"Constants.html#/c:@SDLButtonNameAC":{"name":"SDLButtonNameAC","abstract":"<p>Represents AC button *</p>"},"Constants.html#/c:@SDLButtonNameRecirculate":{"name":"SDLButtonNameRecirculate","abstract":"<p>Represents a Recirculate button</p>"},"Constants.html#/c:@SDLButtonNameFanUp":{"name":"SDLButtonNameFanUp","abstract":"<p>Represents a Fan up button</p>"},"Constants.html#/c:@SDLButtonNameFanDown":{"name":"SDLButtonNameFanDown","abstract":"<p>Represents a fan down button</p>"},"Constants.html#/c:@SDLButtonNameTempUp":{"name":"SDLButtonNameTempUp","abstract":"<p>Represents a temperature up button</p>"},"Constants.html#/c:@SDLButtonNameTempDown":{"name":"SDLButtonNameTempDown","abstract":"<p>Represents a temperature down button</p>"},"Constants.html#/c:@SDLButtonNameDefrostMax":{"name":"SDLButtonNameDefrostMax","abstract":"<p>Represents a Defrost max button.</p>"},"Constants.html#/c:@SDLButtonNameDefrost":{"name":"SDLButtonNameDefrost","abstract":"<p>Represents a Defrost button.</p>"},"Constants.html#/c:@SDLButtonNameDefrostRear":{"name":"SDLButtonNameDefrostRear","abstract":"<p>Represents a Defrost rear button.</p>"},"Constants.html#/c:@SDLButtonNameUpperVent":{"name":"SDLButtonNameUpperVent","abstract":"<p>Represents a Upper Vent button.</p>"},"Constants.html#/c:@SDLButtonNameLowerVent":{"name":"SDLButtonNameLowerVent","abstract":"<p>Represents a Lower vent button.</p>"},"Constants.html#/c:@SDLButtonNameVolumeUp":{"name":"SDLButtonNameVolumeUp","abstract":"<p>Represents a volume up button.</p>"},"Constants.html#/c:@SDLButtonNameVolumeDown":{"name":"SDLButtonNameVolumeDown","abstract":"<p>Represents a volume down button.</p>"},"Constants.html#/c:@SDLButtonNameEject":{"name":"SDLButtonNameEject","abstract":"<p>Represents a Eject Button.</p>"},"Constants.html#/c:@SDLButtonNameSource":{"name":"SDLButtonNameSource","abstract":"<p>Represents a Source button.</p>"},"Constants.html#/c:@SDLButtonNameShuffle":{"name":"SDLButtonNameShuffle","abstract":"<p>Represents a SHUFFLE button.</p>"},"Constants.html#/c:@SDLButtonNameRepeat":{"name":"SDLButtonNameRepeat","abstract":"<p>Represents a Repeat button.</p>"},"Constants.html#/c:@SDLButtonPressModeLong":{"name":"SDLButtonPressModeLong","abstract":"<p>A button was released, after it was pressed for a long time. Actual timing is defined by the head unit and may vary.</p>"},"Constants.html#/c:@SDLButtonPressModeShort":{"name":"SDLButtonPressModeShort","abstract":"<p>A button was released, after it was pressed for a short time. Actual timing is defined by the head unit and may vary.</p>"},"Constants.html#/c:@SDLCarModeStatusNormal":{"name":"SDLCarModeStatusNormal","abstract":"<p>Provides carmode NORMAL to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusFactory":{"name":"SDLCarModeStatusFactory","abstract":"<p>Provides carmode FACTORY to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusTransport":{"name":"SDLCarModeStatusTransport","abstract":"<p>Provides carmode TRANSPORT to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusCrash":{"name":"SDLCarModeStatusCrash","abstract":"<p>Provides carmode CRASH to each module.</p>"},"Constants.html#/c:@SDLCharacterSetType2":{"name":"SDLCharacterSetType2","abstract":"<p>Character Set Type 2</p>"},"Constants.html#/c:@SDLCharacterSetType5":{"name":"SDLCharacterSetType5","abstract":"<p>Character Set Type 5</p>"},"Constants.html#/c:@SDLCharacterSetCID1":{"name":"SDLCharacterSetCID1","abstract":"<p>Character Set CID1</p>"},"Constants.html#/c:@SDLCharacterSetCID2":{"name":"SDLCharacterSetCID2","abstract":"<p>Character Set CID2</p>"},"Constants.html#/c:@SDLCompassDirectionNorth":{"name":"SDLCompassDirectionNorth","abstract":"<p>Direction North</p>"},"Constants.html#/c:@SDLCompassDirectionNorthwest":{"name":"SDLCompassDirectionNorthwest","abstract":"<p>Direction Northwest</p>"},"Constants.html#/c:@SDLCompassDirectionWest":{"name":"SDLCompassDirectionWest","abstract":"<p>Direction West</p>"},"Constants.html#/c:@SDLCompassDirectionSouthwest":{"name":"SDLCompassDirectionSouthwest","abstract":"<p>Direction Southwest</p>"},"Constants.html#/c:@SDLCompassDirectionSouth":{"name":"SDLCompassDirectionSouth","abstract":"<p>Direction South</p>"},"Constants.html#/c:@SDLCompassDirectionSoutheast":{"name":"SDLCompassDirectionSoutheast","abstract":"<p>Direction Southeast</p>"},"Constants.html#/c:@SDLCompassDirectionEast":{"name":"SDLCompassDirectionEast","abstract":"<p>Direction East</p>"},"Constants.html#/c:@SDLCompassDirectionNortheast":{"name":"SDLCompassDirectionNortheast","abstract":"<p>Direction Northeast</p>"},"Constants.html#/c:@SDLComponentVolumeStatusUnknown":{"name":"SDLComponentVolumeStatusUnknown","abstract":"<p>Unknown SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusNormal":{"name":"SDLComponentVolumeStatusNormal","abstract":"<p>Normal SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusLow":{"name":"SDLComponentVolumeStatusLow","abstract":"<p>Low SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusFault":{"name":"SDLComponentVolumeStatusFault","abstract":"<p>Fault SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusAlert":{"name":"SDLComponentVolumeStatusAlert","abstract":"<p>Alert SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusNotSupported":{"name":"SDLComponentVolumeStatusNotSupported","abstract":"<p>Not supported SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLDefrostZoneFront":{"name":"SDLDefrostZoneFront","abstract":"<p>A SDLDefrostZone with the value of <em>FRONT</em></p>"},"Constants.html#/c:@SDLDefrostZoneRear":{"name":"SDLDefrostZoneRear","abstract":"<p>A SDLDefrostZone with the value of <em>REAR</em></p>"},"Constants.html#/c:@SDLDefrostZoneAll":{"name":"SDLDefrostZoneAll","abstract":"<p>A SDLDefrostZone with the value of <em>All</em></p>"},"Constants.html#/c:@SDLDefrostZoneNone":{"name":"SDLDefrostZoneNone","abstract":"<p>A SDLDefrostZone with the value of <em>None</em></p>"},"Constants.html#/c:@SDLDeliveryModePrompt":{"name":"SDLDeliveryModePrompt","abstract":"<p>User is prompted on HMI</p>"},"Constants.html#/c:@SDLDeliveryModeDestination":{"name":"SDLDeliveryModeDestination","abstract":"<p>Set the location as destination without prompting the user</p>"},"Constants.html#/c:@SDLDeliveryModeQueue":{"name":"SDLDeliveryModeQueue","abstract":"<p>Adds the current location to navigation queue</p>"},"Constants.html#/c:@SDLDeviceLevelStatusZeroBars":{"name":"SDLDeviceLevelStatusZeroBars","abstract":"<p>Device battery level is zero bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusOneBar":{"name":"SDLDeviceLevelStatusOneBar","abstract":"<p>Device battery level is one bar</p>"},"Constants.html#/c:@SDLDeviceLevelStatusTwoBars":{"name":"SDLDeviceLevelStatusTwoBars","abstract":"<p>Device battery level is two bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusThreeBars":{"name":"SDLDeviceLevelStatusThreeBars","abstract":"<p>Device battery level is three bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusFourBars":{"name":"SDLDeviceLevelStatusFourBars","abstract":"<p>Device battery level is four bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusNotProvided":{"name":"SDLDeviceLevelStatusNotProvided","abstract":"<p>Device battery level is unknown</p>"},"Constants.html#/c:@SDLDimensionNoFix":{"name":"SDLDimensionNoFix","abstract":"<p>No GPS at all</p>"},"Constants.html#/c:@SDLDimension2D":{"name":"SDLDimension2D","abstract":"<p>Longitude and latitude of the GPS</p>"},"Constants.html#/c:@SDLDimension3D":{"name":"SDLDimension3D","abstract":"<p>Longitude and latitude and altitude of the GPS</p>"},"Constants.html#/c:@SDLDisplayModeDay":{"name":"SDLDisplayModeDay","abstract":"<p>@abstract Display Mode : DAY</p>"},"Constants.html#/c:@SDLDisplayModeNight":{"name":"SDLDisplayModeNight","abstract":"<p>@abstract Display Mode : NIGHT.</p>"},"Constants.html#/c:@SDLDisplayModeAuto":{"name":"SDLDisplayModeAuto","abstract":"<p>@abstract Display Mode : AUTO.</p>"},"Constants.html#/c:@SDLDisplayTypeCID":{"name":"SDLDisplayTypeCID","abstract":"<p>This display type provides a 2-line x 20 character <q>dot matrix</q> display.</p>"},"Constants.html#/c:@SDLDisplayTypeType2":{"name":"SDLDisplayTypeType2","abstract":"<p>Display type 2</p>"},"Constants.html#/c:@SDLDisplayTypeType5":{"name":"SDLDisplayTypeType5","abstract":"<p>Display type 5</p>"},"Constants.html#/c:@SDLDisplayTypeNGN":{"name":"SDLDisplayTypeNGN","abstract":"<p>This display type provides an 8 inch touchscreen display.</p>"},"Constants.html#/c:@SDLDisplayTypeGen28DMA":{"name":"SDLDisplayTypeGen28DMA","abstract":"<p>Display type Gen 28 DMA</p>"},"Constants.html#/c:@SDLDisplayTypeGen26DMA":{"name":"SDLDisplayTypeGen26DMA","abstract":"<p>Display type Gen 26 DMA</p>"},"Constants.html#/c:@SDLDisplayTypeMFD3":{"name":"SDLDisplayTypeMFD3","abstract":"<p>Display type MFD3</p>"},"Constants.html#/c:@SDLDisplayTypeMFD4":{"name":"SDLDisplayTypeMFD4","abstract":"<p>Display type MFD4</p>"},"Constants.html#/c:@SDLDisplayTypeMFD5":{"name":"SDLDisplayTypeMFD5","abstract":"<p>Display type MFD5</p>"},"Constants.html#/c:@SDLDisplayTypeGen38Inch":{"name":"SDLDisplayTypeGen38Inch","abstract":"<p>Display type Gen 3 8-inch</p>"},"Constants.html#/c:@SDLDisplayTypeGeneric":{"name":"SDLDisplayTypeGeneric","abstract":"<p>Display type Generic</p>"},"Constants.html#/c:@SDLDistanceUnitMiles":{"name":"SDLDistanceUnitMiles","abstract":"<p>@abstract SDLDistanceUnit: <em>MILES</em></p>"},"Constants.html#/c:@SDLDistanceUnitKilometers":{"name":"SDLDistanceUnitKilometers","abstract":"<p>@abstract SDLDistanceUnit: <em>KILOMETERS</em></p>"},"Constants.html#/c:@SDLDriverDistractionStateOn":{"name":"SDLDriverDistractionStateOn","abstract":"<p>Driver distraction rules are in effect.</p>"},"Constants.html#/c:@SDLDriverDistractionStateOff":{"name":"SDLDriverDistractionStateOff","abstract":"<p>Driver distraction rules are NOT in effect.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusNormal":{"name":"SDLECallConfirmationStatusNormal","abstract":"<p>No E-Call signal triggered.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusInProgress":{"name":"SDLECallConfirmationStatusInProgress","abstract":"<p>An E-Call is being in progress.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCancelled":{"name":"SDLECallConfirmationStatusCancelled","abstract":"<p>An E-Call was cancelled by the user.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCompleted":{"name":"SDLECallConfirmationStatusCompleted","abstract":"<p>The E-Call sequence is completed.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusUnsuccessful":{"name":"SDLECallConfirmationStatusUnsuccessful","abstract":"<p>An E-Call could not be connected.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusConfiguredOff":{"name":"SDLECallConfirmationStatusConfiguredOff","abstract":"<p>E-Call is not configured on this vehicle.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCompleteDTMFTimeout":{"name":"SDLECallConfirmationStatusCompleteDTMFTimeout","abstract":"<p>E-Call is considered to be complete without Emergency Operator contact.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusClosed":{"name":"SDLElectronicParkBrakeStatusClosed","abstract":"<p>Parking brake actuators have been fully applied.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusTransition":{"name":"SDLElectronicParkBrakeStatusTransition","abstract":"<p>Parking brake actuators are transitioning to either Apply/Closed or Release/Open state.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusOpen":{"name":"SDLElectronicParkBrakeStatusOpen","abstract":"<p>Parking brake actuators are released.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusDriveActive":{"name":"SDLElectronicParkBrakeStatusDriveActive","abstract":"<p>When driver pulls the Electronic Parking Brake switch while driving <q>at speed</q>.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusFault":{"name":"SDLElectronicParkBrakeStatusFault","abstract":"<p>When system has a fault or is under maintenance.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeNoEvent":{"name":"SDLEmergencyEventTypeNoEvent","abstract":"<p>No emergency event has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeFrontal":{"name":"SDLEmergencyEventTypeFrontal","abstract":"<p>Frontal collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeSide":{"name":"SDLEmergencyEventTypeSide","abstract":"<p>Side collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeRear":{"name":"SDLEmergencyEventTypeRear","abstract":"<p>Rear collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeRollover":{"name":"SDLEmergencyEventTypeRollover","abstract":"<p>A rollover event has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeNotSupported":{"name":"SDLEmergencyEventTypeNotSupported","abstract":"<p>The signal is not supported</p>"},"Constants.html#/c:@SDLEmergencyEventTypeFault":{"name":"SDLEmergencyEventTypeFault","abstract":"<p>Emergency status cannot be determined</p>"},"Constants.html#/c:@SDLFileTypeBMP":{"name":"SDLFileTypeBMP","abstract":"<p>file type: Bitmap (BMP)</p>"},"Constants.html#/c:@SDLFileTypeJPEG":{"name":"SDLFileTypeJPEG","abstract":"<p>file type: JPEG</p>"},"Constants.html#/c:@SDLFileTypePNG":{"name":"SDLFileTypePNG","abstract":"<p>file type: PNG</p>"},"Constants.html#/c:@SDLFileTypeWAV":{"name":"SDLFileTypeWAV","abstract":"<p>file type: WAVE (WAV)</p>"},"Constants.html#/c:@SDLFileTypeMP3":{"name":"SDLFileTypeMP3","abstract":"<p>file type: MP3</p>"},"Constants.html#/c:@SDLFileTypeAAC":{"name":"SDLFileTypeAAC","abstract":"<p>file type: AAC</p>"},"Constants.html#/c:@SDLFileTypeBinary":{"name":"SDLFileTypeBinary","abstract":"<p>file type: BINARY</p>"},"Constants.html#/c:@SDLFileTypeJSON":{"name":"SDLFileTypeJSON","abstract":"<p>file type: JSON</p>"},"Constants.html#/c:@SDLFuelCutoffStatusTerminateFuel":{"name":"SDLFuelCutoffStatusTerminateFuel","abstract":"<p>Fuel is cut off</p>"},"Constants.html#/c:@SDLFuelCutoffStatusNormalOperation":{"name":"SDLFuelCutoffStatusNormalOperation","abstract":"<p>Fuel is not cut off</p>"},"Constants.html#/c:@SDLFuelCutoffStatusFault":{"name":"SDLFuelCutoffStatusFault","abstract":"<p>Status of the fuel pump cannot be determined</p>"},"Constants.html#/c:@SDLFuelTypeGasoline":{"name":"SDLFuelTypeGasoline","abstract":"<p>Fuel type: Gasoline</p>"},"Constants.html#/c:@SDLFuelTypeDiesel":{"name":"SDLFuelTypeDiesel","abstract":"<p>Fuel type: Diesel</p>"},"Constants.html#/c:@SDLFuelTypeCNG":{"name":"SDLFuelTypeCNG","abstract":"<p>Fuel type: CNG</p>"},"Constants.html#/c:@SDLFuelTypeLPG":{"name":"SDLFuelTypeLPG","abstract":"<p>Fuel type: LPG</p>"},"Constants.html#/c:@SDLFuelTypeHydrogen":{"name":"SDLFuelTypeHydrogen","abstract":"<p>Fuel type: Hydrogen</p>"},"Constants.html#/c:@SDLFuelTypeBattery":{"name":"SDLFuelTypeBattery","abstract":"<p>Fuel type: Battery</p>"},"Constants.html#/c:@SDLGlobalPropertyHelpPrompt":{"name":"SDLGlobalPropertyHelpPrompt","abstract":"<p>The help prompt to be spoken if the user needs assistance during a user-initiated interaction.</p>"},"Constants.html#/c:@SDLGlobalPropertyTimeoutPrompt":{"name":"SDLGlobalPropertyTimeoutPrompt","abstract":"<p>The prompt to be spoken if the user-initiated interaction times out waiting for the user&rsquo;s verbal input.</p>"},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpTitle":{"name":"SDLGlobalPropertyVoiceRecognitionHelpTitle","abstract":"<p>The title of the menu displayed when the user requests help via voice recognition.</p>"},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpItems":{"name":"SDLGlobalPropertyVoiceRecognitionHelpItems","abstract":"<p>Items of the menu displayed when the user requests help via voice recognition.</p>"},"Constants.html#/c:@SDLGlobalPropertyMenuName":{"name":"SDLGlobalPropertyMenuName","abstract":"<p>The name of the menu button displayed in templates</p>"},"Constants.html#/c:@SDLGlobalPropertyMenuIcon":{"name":"SDLGlobalPropertyMenuIcon","abstract":"<p>An icon on the menu button displayed in templates</p>"},"Constants.html#/c:@SDLGlobalPropertyKeyboard":{"name":"SDLGlobalPropertyKeyboard","abstract":"<p>Property related to the keyboard</p>"},"Constants.html#/c:@SDLHMILevelFull":{"name":"SDLHMILevelFull","abstract":"<p>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</p>"},"Constants.html#/c:@SDLHMILevelLimited":{"name":"SDLHMILevelLimited","abstract":"<p>This HMI Level is only defined for a media application using an HMI with an 8 inch touchscreen (Nav) system. The application&rsquo;s Show text is displayed and it receives button presses from media-oriented buttons (SEEKRIGHT, SEEKLEFT, TUNEUP, TUNEDOWN, PRESET_0-9)</p>"},"Constants.html#/c:@SDLHMILevelBackground":{"name":"SDLHMILevelBackground","abstract":"<p>App cannot interact with user via TTS, VR, Display or Button Presses. App can perform the following operations:</p>"},"Constants.html#/c:@SDLHMILevelNone":{"name":"SDLHMILevelNone","abstract":"<p>Application has been discovered by SDL, but it cannot send any requests or receive any notifications</p>"},"Constants.html#/c:@SDLHMIZoneCapabilitiesFront":{"name":"SDLHMIZoneCapabilitiesFront","abstract":"<p>Indicates HMI available for front seat passengers.</p>"},"Constants.html#/c:@SDLHMIZoneCapabilitiesBack":{"name":"SDLHMIZoneCapabilitiesBack","abstract":"<p>Indicates HMI available for rear seat passengers.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusNotStable":{"name":"SDLIgnitionStableStatusNotStable","abstract":"<p>The current ignition switch status is considered not to be stable.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusStable":{"name":"SDLIgnitionStableStatusStable","abstract":"<p>The current ignition switch status is considered to be stable.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusMissingFromTransmitter":{"name":"SDLIgnitionStableStatusMissingFromTransmitter","abstract":"<p>The current ignition switch status is considered to be missing from the transmitter</p>"},"Constants.html#/c:@SDLIgnitionStatusUnknown":{"name":"SDLIgnitionStatusUnknown","abstract":"<p>Ignition status currently unknown</p>"},"Constants.html#/c:@SDLIgnitionStatusOff":{"name":"SDLIgnitionStatusOff","abstract":"<p>Ignition is off</p>"},"Constants.html#/c:@SDLIgnitionStatusAccessory":{"name":"SDLIgnitionStatusAccessory","abstract":"<p>Ignition is in mode accessory</p>"},"Constants.html#/c:@SDLIgnitionStatusRun":{"name":"SDLIgnitionStatusRun","abstract":"<p>Ignition is in mode run</p>"},"Constants.html#/c:@SDLIgnitionStatusStart":{"name":"SDLIgnitionStatusStart","abstract":"<p>Ignition is in mode start</p>"},"Constants.html#/c:@SDLIgnitionStatusInvalid":{"name":"SDLIgnitionStatusInvalid","abstract":"<p>Signal is invalid</p>"},"Constants.html#/c:@SDLImageFieldNameSoftButtonImage":{"name":"SDLImageFieldNameSoftButtonImage","abstract":"<p>The image field for SoftButton</p>"},"Constants.html#/c:@SDLImageFieldNameChoiceImage":{"name":"SDLImageFieldNameChoiceImage","abstract":"<p>The first image field for Choice.</p>"},"Constants.html#/c:@SDLImageFieldNameChoiceSecondaryImage":{"name":"SDLImageFieldNameChoiceSecondaryImage","abstract":"<p>The scondary image field for Choice.</p>"},"Constants.html#/c:@SDLImageFieldNameVoiceRecognitionHelpItem":{"name":"SDLImageFieldNameVoiceRecognitionHelpItem","abstract":"<p>The image field for vrHelpItem.</p>"},"Constants.html#/c:@SDLImageFieldNameTurnIcon":{"name":"SDLImageFieldNameTurnIcon","abstract":"<p>The image field for Turn.</p>"},"Constants.html#/c:@SDLImageFieldNameMenuIcon":{"name":"SDLImageFieldNameMenuIcon","abstract":"<p>The image field for the menu icon in SetGlobalProperties.</p>"},"Constants.html#/c:@SDLImageFieldNameCommandIcon":{"name":"SDLImageFieldNameCommandIcon","abstract":"<p>The image field for AddCommand."},"Constants.html#/c:@SDLImageFieldNameAppIcon":{"name":"SDLImageFieldNameAppIcon","abstract":"<p>The image field for the app icon (set by setAppIcon).</p>"},"Constants.html#/c:@SDLImageFieldNameGraphic":{"name":"SDLImageFieldNameGraphic","abstract":"<p>The primary image field for Show."},"Constants.html#/c:@SDLImageFieldNameSecondaryGraphic":{"name":"SDLImageFieldNameSecondaryGraphic","abstract":"<p>The secondary image field for Show."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTIcon":{"name":"SDLImageFieldNameShowConstantTBTIcon","abstract":"<p>The primary image field for ShowConstant TBT."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTNextTurnIcon":{"name":"SDLImageFieldNameShowConstantTBTNextTurnIcon","abstract":"<p>The secondary image field for ShowConstant TBT.</p>"},"Constants.html#/c:@SDLImageFieldNameLocationImage":{"name":"SDLImageFieldNameLocationImage","abstract":"<p>The optional image of a destination / location</p>"},"Constants.html#/c:@SDLImageTypeStatic":{"name":"SDLImageTypeStatic","abstract":"<p>Activate an icon that shipped with the IVI system by passing a hex value.</p>"},"Constants.html#/c:@SDLImageTypeDynamic":{"name":"SDLImageTypeDynamic","abstract":"<p>An icon referencing an image uploaded by the app (identifier to be sent by SDLPutFile)</p>"},"Constants.html#/c:@SDLInteractionModeManualOnly":{"name":"SDLInteractionModeManualOnly","abstract":"<p>Interaction Mode : Manual Only</p>"},"Constants.html#/c:@SDLInteractionModeVoiceRecognitionOnly":{"name":"SDLInteractionModeVoiceRecognitionOnly","abstract":"<p>Interaction Mode : VR Only</p>"},"Constants.html#/c:@SDLInteractionModeBoth":{"name":"SDLInteractionModeBoth","abstract":"<p>Interaction Mode : Manual &amp; VR</p>"},"Constants.html#/c:@SDLKeyboardEventKeypress":{"name":"SDLKeyboardEventKeypress","abstract":"<p>The use has pressed the keyboard key (applies to both SINGLE_KEYPRESS and RESEND_CURRENT_ENTRY modes).</p>"},"Constants.html#/c:@SDLKeyboardEventSubmitted":{"name":"SDLKeyboardEventSubmitted","abstract":"<p>The User has finished entering text from the keyboard and submitted the entry.</p>"},"Constants.html#/c:@SDLKeyboardEventCancelled":{"name":"SDLKeyboardEventCancelled","abstract":"<p>The User has pressed the HMI-defined <q>Cancel</q> button.</p>"},"Constants.html#/c:@SDLKeyboardEventAborted":{"name":"SDLKeyboardEventAborted","abstract":"<p>The User has not finished entering text and the keyboard is aborted with the event of higher priority.</p>"},"Constants.html#/c:@SDLKeyboardEventVoice":{"name":"SDLKeyboardEventVoice","abstract":"<p>The user used voice as input for the keyboard</p>"},"Constants.html#/c:@SDLKeyboardLayoutQWERTY":{"name":"SDLKeyboardLayoutQWERTY","abstract":"<p>QWERTY layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeyboardLayoutQWERTZ":{"name":"SDLKeyboardLayoutQWERTZ","abstract":"<p>QWERTZ layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeyboardLayoutAZERTY":{"name":"SDLKeyboardLayoutAZERTY","abstract":"<p>AZERTY layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeypressModeSingleKeypress":{"name":"SDLKeypressModeSingleKeypress","abstract":"<p>SINGLE_KEYPRESS:<br>Each and every User`s keypress must be reported (new notification for every newly entered single symbol).</p>"},"Constants.html#/c:@SDLKeypressModeQueueKeypresses":{"name":"SDLKeypressModeQueueKeypresses","abstract":"<p>QUEUE_KEYPRESSES:<br>The whole entry is reported only after the User submits it (by ‘Search’ button click displayed on touchscreen keyboard)</p>"},"Constants.html#/c:@SDLKeypressModeResendCurrentEntry":{"name":"SDLKeypressModeResendCurrentEntry","abstract":"<p>RESEND_CURRENT_ENTRY:<br>The whole entry must be reported each and every time the User makes a new keypress<br> (new notification with all previously entered symbols and a newly entered one appended).</p>"},"Constants.html#/c:@SDLLanguageEnSa":{"name":"SDLLanguageEnSa","abstract":"<p>English_SA</p>"},"Constants.html#/c:@SDLLanguageHeIl":{"name":"SDLLanguageHeIl","abstract":"<p>Hebrew_IL</p>"},"Constants.html#/c:@SDLLanguageRoRo":{"name":"SDLLanguageRoRo","abstract":"<p>Romainian_RO</p>"},"Constants.html#/c:@SDLLanguageUkUa":{"name":"SDLLanguageUkUa","abstract":"<p>Ukrainian_UA</p>"},"Constants.html#/c:@SDLLanguageIdId":{"name":"SDLLanguageIdId","abstract":"<p>Indonesian_ID</p>"},"Constants.html#/c:@SDLLanguageViVn":{"name":"SDLLanguageViVn","abstract":"<p>Vietnamese_VN</p>"},"Constants.html#/c:@SDLLanguageMsMy":{"name":"SDLLanguageMsMy","abstract":"<p>Malay_MY</p>"},"Constants.html#/c:@SDLLanguageHiIn":{"name":"SDLLanguageHiIn","abstract":"<p>Hindi_IN</p>"},"Constants.html#/c:@SDLLanguageNlBe":{"name":"SDLLanguageNlBe","abstract":"<p>Dutch(Flemish)_BE</p>"},"Constants.html#/c:@SDLLanguageElGr":{"name":"SDLLanguageElGr","abstract":"<p>Greek_GR</p>"},"Constants.html#/c:@SDLLanguageHuHu":{"name":"SDLLanguageHuHu","abstract":"<p>Hungarian_HU</p>"},"Constants.html#/c:@SDLLanguageFiFi":{"name":"SDLLanguageFiFi","abstract":"<p>Finnish_FI</p>"},"Constants.html#/c:@SDLLanguageSkSk":{"name":"SDLLanguageSkSk","abstract":"<p>Slovak_SK</p>"},"Constants.html#/c:@SDLLanguageEnUs":{"name":"SDLLanguageEnUs","abstract":"<p>English_US</p>"},"Constants.html#/c:@SDLLanguageEnIn":{"name":"SDLLanguageEnIn","abstract":"<p>English - India</p>"},"Constants.html#/c:@SDLLanguageThTh":{"name":"SDLLanguageThTh","abstract":"<p>Thai - Thailand</p>"},"Constants.html#/c:@SDLLanguageEsMx":{"name":"SDLLanguageEsMx","abstract":"<p>Spanish - Mexico</p>"},"Constants.html#/c:@SDLLanguageFrCa":{"name":"SDLLanguageFrCa","abstract":"<p>French - Canada</p>"},"Constants.html#/c:@SDLLanguageDeDe":{"name":"SDLLanguageDeDe","abstract":"<p>German - Germany</p>"},"Constants.html#/c:@SDLLanguageEsEs":{"name":"SDLLanguageEsEs","abstract":"<p>Spanish - Spain</p>"},"Constants.html#/c:@SDLLanguageEnGb":{"name":"SDLLanguageEnGb","abstract":"<p>English - Great Britain</p>"},"Constants.html#/c:@SDLLanguageRuRu":{"name":"SDLLanguageRuRu","abstract":"<p>Russian - Russia</p>"},"Constants.html#/c:@SDLLanguageTrTr":{"name":"SDLLanguageTrTr","abstract":"<p>Turkish - Turkey</p>"},"Constants.html#/c:@SDLLanguagePlPl":{"name":"SDLLanguagePlPl","abstract":"<p>Polish - Poland</p>"},"Constants.html#/c:@SDLLanguageFrFr":{"name":"SDLLanguageFrFr","abstract":"<p>French - France</p>"},"Constants.html#/c:@SDLLanguageItIt":{"name":"SDLLanguageItIt","abstract":"<p>Italian - Italy</p>"},"Constants.html#/c:@SDLLanguageSvSe":{"name":"SDLLanguageSvSe","abstract":"<p>Swedish - Sweden</p>"},"Constants.html#/c:@SDLLanguagePtPt":{"name":"SDLLanguagePtPt","abstract":"<p>Portuguese - Portugal</p>"},"Constants.html#/c:@SDLLanguageNlNl":{"name":"SDLLanguageNlNl","abstract":"<p>Dutch (Standard) - Netherlands</p>"},"Constants.html#/c:@SDLLanguageEnAu":{"name":"SDLLanguageEnAu","abstract":"<p>English - Australia</p>"},"Constants.html#/c:@SDLLanguageZhCn":{"name":"SDLLanguageZhCn","abstract":"<p>Mandarin - China</p>"},"Constants.html#/c:@SDLLanguageZhTw":{"name":"SDLLanguageZhTw","abstract":"<p>Mandarin - Taiwan</p>"},"Constants.html#/c:@SDLLanguageJaJp":{"name":"SDLLanguageJaJp","abstract":"<p>Japanese - Japan</p>"},"Constants.html#/c:@SDLLanguageArSa":{"name":"SDLLanguageArSa","abstract":"<p>Arabic - Saudi Arabia</p>"},"Constants.html#/c:@SDLLanguageKoKr":{"name":"SDLLanguageKoKr","abstract":"<p>Korean - South Korea</p>"},"Constants.html#/c:@SDLLanguagePtBr":{"name":"SDLLanguagePtBr","abstract":"<p>Portuguese - Brazil</p>"},"Constants.html#/c:@SDLLanguageCsCz":{"name":"SDLLanguageCsCz","abstract":"<p>Czech - Czech Republic</p>"},"Constants.html#/c:@SDLLanguageDaDk":{"name":"SDLLanguageDaDk","abstract":"<p>Danish - Denmark</p>"},"Constants.html#/c:@SDLLanguageNoNo":{"name":"SDLLanguageNoNo","abstract":"<p>Norwegian - Norway</p>"},"Constants.html#/c:@SDLLayoutModeIconOnly":{"name":"SDLLayoutModeIconOnly","abstract":"<p>This mode causes the interaction to display the previous set of choices as icons.</p>"},"Constants.html#/c:@SDLLayoutModeIconWithSearch":{"name":"SDLLayoutModeIconWithSearch","abstract":"<p>This mode causes the interaction to display the previous set of choices as icons along with a search field in the HMI.</p>"},"Constants.html#/c:@SDLLayoutModeListOnly":{"name":"SDLLayoutModeListOnly","abstract":"<p>This mode causes the interaction to display the previous set of choices as a list.</p>"},"Constants.html#/c:@SDLLayoutModeListWithSearch":{"name":"SDLLayoutModeListWithSearch","abstract":"<p>This mode causes the interaction to display the previous set of choices as a list along with a search field in the HMI.</p>"},"Constants.html#/c:@SDLLayoutModeKeyboard":{"name":"SDLLayoutModeKeyboard","abstract":"<p>This mode causes the interaction to immediately display a keyboard entry through the HMI.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftHighBeam":{"name":"SDLLightNameFrontLeftHighBeam","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_HIGH_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontRightHighBeam":{"name":"SDLLightNameFrontRightHighBeam","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_HIGH_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftLowBeam":{"name":"SDLLightNameFrontLeftLowBeam","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_LOW_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontRightLowBeam":{"name":"SDLLightNameFrontRightLowBeam","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_LOW_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftParkingLight":{"name":"SDLLightNameFrontLeftParkingLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_PARKING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightParkingLight":{"name":"SDLLightNameFrontRightParkingLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_PARKING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftFogLight":{"name":"SDLLightNameFrontLeftFogLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightFogLight":{"name":"SDLLightNameFrontRightFogLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftDaytimeRunningLight":{"name":"SDLLightNameFrontLeftDaytimeRunningLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_DAYTIME_RUNNING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightDaytimeRunningLight":{"name":"SDLLightNameFrontRightDaytimeRunningLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_DAYTIME_RUNNING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftTurnLight":{"name":"SDLLightNameFrontLeftTurnLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightTurnLight":{"name":"SDLLightNameFrontRightTurnLight","abstract":"<p>@abstract Represents the Light with name FRONT_Right_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftFogLight":{"name":"SDLLightNameRearLeftFogLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_FOG_LIGHT.</p>"},"Constants.html#/c:@SDLLightNameRearRightFogLight":{"name":"SDLLightNameRearRightFogLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftTailLight":{"name":"SDLLightNameRearLeftTailLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_TAIL_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightTailLight":{"name":"SDLLightNameRearRightTailLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_TAIL_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftBrakeLight":{"name":"SDLLightNameRearLeftBrakeLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_BRAKE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightBrakeLight":{"name":"SDLLightNameRearRightBrakeLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_BRAKE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftTurnLight":{"name":"SDLLightNameRearLeftTurnLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightTurnLight":{"name":"SDLLightNameRearRightTurnLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRegistrationPlateLight":{"name":"SDLLightNameRearRegistrationPlateLight","abstract":"<p>@abstract Represents the Light with name REAR_REGISTRATION_PLATE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameHighBeams":{"name":"SDLLightNameHighBeams","abstract":"<p>@abstract Include all high beam lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameLowBeams":{"name":"SDLLightNameLowBeams","abstract":"<p>@abstract Include all low beam lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameFogLights":{"name":"SDLLightNameFogLights","abstract":"<p>@abstract Include all fog lights: front_left, front_right, rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameRunningLights":{"name":"SDLLightNameRunningLights","abstract":"<p>@abstract Include all daytime running lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameParkingLights":{"name":"SDLLightNameParkingLights","abstract":"<p>@abstract Include all parking lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameBrakeLights":{"name":"SDLLightNameBrakeLights","abstract":"<p>@abstract Include all brake lights: rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameRearReversingLights":{"name":"SDLLightNameRearReversingLights","abstract":"<p>@abstract Represents the Light with name REAR_REVERSING_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameSideMarkerLights":{"name":"SDLLightNameSideMarkerLights","abstract":"<p>@abstract Represents the Light with name SIDE_MARKER_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameLeftTurnLights":{"name":"SDLLightNameLeftTurnLights","abstract":"<p>@abstract Include all left turn signal lights: front_left, rear_left, left_side and mirror_mounted.</p>"},"Constants.html#/c:@SDLLightNameRightTurnLights":{"name":"SDLLightNameRightTurnLights","abstract":"<p>@abstract Include all right turn signal lights: front_right, rear_right, right_side and mirror_mounted.</p>"},"Constants.html#/c:@SDLLightNameHazardLights":{"name":"SDLLightNameHazardLights","abstract":"<p>@abstract Include all hazard lights: front_left, front_right, rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameAmbientLights":{"name":"SDLLightNameAmbientLights","abstract":"<p>@abstract Represents the Light with name AMBIENT_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameOverHeadLights":{"name":"SDLLightNameOverHeadLights","abstract":"<p>@abstract Represents the Light with name OVERHEAD_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameReadingLights":{"name":"SDLLightNameReadingLights","abstract":"<p>@abstract Represents the Light with name READING_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameTrunkLights":{"name":"SDLLightNameTrunkLights","abstract":"<p>@abstract Represents the Light with name TRUNK_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameExteriorFrontLights":{"name":"SDLLightNameExteriorFrontLights","abstract":"<p>@abstract Include exterior lights located in front of the vehicle. For example, fog lights and low beams.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearLights":{"name":"SDLLightNameExteriorRearLights","abstract":"<p>@abstract Include exterior lights located at the back of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorLeftLights":{"name":"SDLLightNameExteriorLeftLights","abstract":"<p>@abstract Include exterior lights located at the left side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRightLights":{"name":"SDLLightNameExteriorRightLights","abstract":"<p>@abstract Include exterior lights located at the right side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRearCargoLights":{"name":"SDLLightNameExteriorRearCargoLights","abstract":"<p>@abstract Cargo lamps illuminate the cargo area.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearTruckBedLights":{"name":"SDLLightNameExteriorRearTruckBedLights","abstract":"<p>@abstract Truck bed lamps light up the bed of the truck.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearTrailerLights":{"name":"SDLLightNameExteriorRearTrailerLights","abstract":"<p>@abstract Trailer lights are lamps mounted on a trailer hitch.</p>"},"Constants.html#/c:@SDLLightNameExteriorLeftSpotLights":{"name":"SDLLightNameExteriorLeftSpotLights","abstract":"<p>@abstract It is the spotlights mounted on the left side of a vehicle.</p>"},"Constants.html#/c:@SDLLightNameExteriorRightSpotLights":{"name":"SDLLightNameExteriorRightSpotLights","abstract":"<p>@abstract It is the spotlights mounted on the right side of a vehicle.</p>"},"Constants.html#/c:@SDLLightNameExteriorLeftPuddleLights":{"name":"SDLLightNameExteriorLeftPuddleLights","abstract":"<p>@abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.</p>"},"Constants.html#/c:@SDLLightNameExteriorRightPuddleLights":{"name":"SDLLightNameExteriorRightPuddleLights","abstract":"<p>@abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.</p>"},"Constants.html#/c:@SDLLightNameExteriorAllLights":{"name":"SDLLightNameExteriorAllLights","abstract":"<p>@abstract Include all exterior lights around the vehicle.</p>"},"Constants.html#/c:@SDLLightStatusOn":{"name":"SDLLightStatusOn","abstract":"<p>@abstract Light status currently on.</p>"},"Constants.html#/c:@SDLLightStatusOFF":{"name":"SDLLightStatusOFF","abstract":"<p>@abstract Light status currently Off.</p>"},"Constants.html#/c:@SDLLightStatusRampUp":{"name":"SDLLightStatusRampUp","abstract":"<p>@abstract Light status currently RAMP_UP.</p>"},"Constants.html#/c:@SDLLightStatusRampDown":{"name":"SDLLightStatusRampDown","abstract":"<p>@abstract Light status currently RAMP_DOWN.</p>"},"Constants.html#/c:@SDLLightStatusUnknown":{"name":"SDLLightStatusUnknown","abstract":"<p>@abstract Light status currently UNKNOWN.</p>"},"Constants.html#/c:@SDLLightStatusInvalid":{"name":"SDLLightStatusInvalid","abstract":"<p>@abstract Light status currently INVALID.</p>"},"Constants.html#/c:@SDLLockScreenStatusOff":{"name":"SDLLockScreenStatusOff","abstract":"<p>LockScreen is Not Required</p>"},"Constants.html#/c:@SDLLockScreenStatusOptional":{"name":"SDLLockScreenStatusOptional","abstract":"<p>LockScreen is Optional</p>"},"Constants.html#/c:@SDLLockScreenStatusRequired":{"name":"SDLLockScreenStatusRequired","abstract":"<p>LockScreen is Not Required</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusNormal":{"name":"SDLMaintenanceModeStatusNormal","abstract":"<p>Maintenance Mode Status : Normal</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusNear":{"name":"SDLMaintenanceModeStatusNear","abstract":"<p>Maintenance Mode Status : Near</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusActive":{"name":"SDLMaintenanceModeStatusActive","abstract":"<p>Maintenance Mode Status : Active</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusFeatureNotPresent":{"name":"SDLMaintenanceModeStatusFeatureNotPresent","abstract":"<p>Maintenance Mode Status : Feature not present</p>"},"Constants.html#/c:@SDLMassageCushionTopLumbar":{"name":"SDLMassageCushionTopLumbar","abstract":"<p>@abstract TOP LUMBAR cushions of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionMiddleLumbar":{"name":"SDLMassageCushionMiddleLumbar","abstract":"<p>@abstract MIDDLE LUMBAR cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionBottomLumbar":{"name":"SDLMassageCushionBottomLumbar","abstract":"<p>@abstract BOTTOM LUMBAR cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionBackBolsters":{"name":"SDLMassageCushionBackBolsters","abstract":"<p>@abstract BACK BOLSTERS cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionSeatBolsters":{"name":"SDLMassageCushionSeatBolsters","abstract":"<p>@abstract SEAT BOLSTERS cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageModeOff":{"name":"SDLMassageModeOff","abstract":"<p>@abstract Massage Mode Status : OFF</p>"},"Constants.html#/c:@SDLMassageModeLow":{"name":"SDLMassageModeLow","abstract":"<p>@abstract Massage Mode Status : LOW</p>"},"Constants.html#/c:@SDLMassageModeHigh":{"name":"SDLMassageModeHigh","abstract":"<p>@abstract Massage Mode Status : HIGH</p>"},"Constants.html#/c:@SDLMassageZoneLumbar":{"name":"SDLMassageZoneLumbar","abstract":"<p>@abstract The back of a multi-contour massage seat. or SEAT_BACK</p>"},"Constants.html#/c:@SDLMassageZoneSeatCushion":{"name":"SDLMassageZoneSeatCushion","abstract":"<p>@abstract The bottom a multi-contour massage seat. or SEAT_BOTTOM</p>"},"Constants.html#/c:@SDLMediaClockFormatClock1":{"name":"SDLMediaClockFormatClock1","abstract":"<p>Media clock format: Clock1</p>"},"Constants.html#/c:@SDLMediaClockFormatClock2":{"name":"SDLMediaClockFormatClock2","abstract":"<p>Media clock format: Clock2</p>"},"Constants.html#/c:@SDLMediaClockFormatClock3":{"name":"SDLMediaClockFormatClock3","abstract":"<p>Media clock format: Clock3</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText1":{"name":"SDLMediaClockFormatClockText1","abstract":"<p>Media clock format: ClockText1</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText2":{"name":"SDLMediaClockFormatClockText2","abstract":"<p>Media clock format: ClockText2</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText3":{"name":"SDLMediaClockFormatClockText3","abstract":"<p>Media clock format: ClockText3</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText4":{"name":"SDLMediaClockFormatClockText4","abstract":"<p>Media clock format: ClockText4</p>"},"Constants.html#/c:@SDLMetadataTypeMediaTitle":{"name":"SDLMetadataTypeMediaTitle","abstract":"<p>The song / media title name</p>"},"Constants.html#/c:@SDLMetadataTypeMediaArtist":{"name":"SDLMetadataTypeMediaArtist","abstract":"<p>The <q>artist</q> of the media</p>"},"Constants.html#/c:@SDLMetadataTypeMediaAlbum":{"name":"SDLMetadataTypeMediaAlbum","abstract":"<p>The <q>album</q> of the media&quot;</p>"},"Constants.html#/c:@SDLMetadataTypeMediaYear":{"name":"SDLMetadataTypeMediaYear","abstract":"<p>The <q>year</q> that the media was created</p>"},"Constants.html#/c:@SDLMetadataTypeMediaGenre":{"name":"SDLMetadataTypeMediaGenre","abstract":"<p>The <q>genre</q> of the media</p>"},"Constants.html#/c:@SDLMetadataTypeMediaStation":{"name":"SDLMetadataTypeMediaStation","abstract":"<p>The <q>station</q> that the media is playing on</p>"},"Constants.html#/c:@SDLMetadataTypeRating":{"name":"SDLMetadataTypeRating","abstract":"<p>The <q>rating</q> given to the media</p>"},"Constants.html#/c:@SDLMetadataTypeCurrentTemperature":{"name":"SDLMetadataTypeCurrentTemperature","abstract":"<p>The current temperature of the weather information</p>"},"Constants.html#/c:@SDLMetadataTypeMaximumTemperature":{"name":"SDLMetadataTypeMaximumTemperature","abstract":"<p>The high / maximum temperature of the weather information for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeMinimumTemperature":{"name":"SDLMetadataTypeMinimumTemperature","abstract":"<p>The low / minimum temperature of the weather information for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeWeatherTerm":{"name":"SDLMetadataTypeWeatherTerm","abstract":"<p>A description of the weather for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeHumidity":{"name":"SDLMetadataTypeHumidity","abstract":"<p>The humidity of the weather information for the current period</p>"},"Constants.html#/c:@SDLModuleTypeClimate":{"name":"SDLModuleTypeClimate","abstract":"<p>A SDLModuleType with the value of <em>CLIMATE</em></p>"},"Constants.html#/c:@SDLModuleTypeRadio":{"name":"SDLModuleTypeRadio","abstract":"<p>A SDLModuleType with the value of <em>RADIO</em></p>"},"Constants.html#/c:@SDLModuleTypeSeat":{"name":"SDLModuleTypeSeat","abstract":"<p>A SDLModuleType with the value of <em>SEAT</em></p>"},"Constants.html#/c:@SDLModuleTypeAudio":{"name":"SDLModuleTypeAudio","abstract":"<p>A SDLModuleType with the value of <em>AUDIO</em></p>"},"Constants.html#/c:@SDLModuleTypeLight":{"name":"SDLModuleTypeLight","abstract":"<p>A SDLModuleType with the value of <em>LIGHT</em></p>"},"Constants.html#/c:@SDLModuleTypeHMISettings":{"name":"SDLModuleTypeHMISettings","abstract":"<p>A SDLModuleType with the value of <em>HMI_SETTINGS</em></p>"},"Constants.html#/c:@SDLNotificationUserInfoObject":{"name":"SDLNotificationUserInfoObject","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLTransportDidDisconnect":{"name":"SDLTransportDidDisconnect","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLTransportDidConnect":{"name":"SDLTransportDidConnect","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLTransportConnectError":{"name":"SDLTransportConnectError","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveError":{"name":"SDLDidReceiveError","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveLockScreenIcon":{"name":"SDLDidReceiveLockScreenIcon","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidBecomeReady":{"name":"SDLDidBecomeReady","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidUpdateProjectionView":{"name":"SDLDidUpdateProjectionView","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAddCommandResponse":{"name":"SDLDidReceiveAddCommandResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAddSubMenuResponse":{"name":"SDLDidReceiveAddSubMenuResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAlertResponse":{"name":"SDLDidReceiveAlertResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAlertManeuverResponse":{"name":"SDLDidReceiveAlertManeuverResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressResponse":{"name":"SDLDidReceiveButtonPressResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveChangeRegistrationResponse":{"name":"SDLDidReceiveChangeRegistrationResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetResponse":{"name":"SDLDidReceiveCreateInteractionChoiceSetResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDeleteCommandResponse":{"name":"SDLDidReceiveDeleteCommandResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDeleteFileResponse":{"name":"SDLDidReceiveDeleteFileResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetResponse":{"name":"SDLDidReceiveDeleteInteractionChoiceSetResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDeleteSubmenuResponse":{"name":"SDLDidReceiveDeleteSubmenuResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageResponse":{"name":"SDLDidReceiveDiagnosticMessageResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveDialNumberResponse":{"name":"SDLDidReceiveDialNumberResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataResponse":{"name":"SDLDidReceiveEncodedSyncPDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruResponse":{"name":"SDLDidReceiveEndAudioPassThruResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGenericResponse":{"name":"SDLDidReceiveGenericResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetDTCsResponse":{"name":"SDLDidReceiveGetDTCsResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilitiesResponse":{"name":"SDLDidReceiveGetSystemCapabilitiesResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetVehicleDataResponse":{"name":"SDLDidReceiveGetVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveGetWaypointsResponse":{"name":"SDLDidReceiveGetWaypointsResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveListFilesResponse":{"name":"SDLDidReceiveListFilesResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruResponse":{"name":"SDLDidReceivePerformAudioPassThruResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceivePerformInteractionResponse":{"name":"SDLDidReceivePerformInteractionResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceivePutFileResponse":{"name":"SDLDidReceivePutFileResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveReadDIDResponse":{"name":"SDLDidReceiveReadDIDResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceResponse":{"name":"SDLDidReceiveRegisterAppInterfaceResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesResponse":{"name":"SDLDidReceiveResetGlobalPropertiesResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveScrollableMessageResponse":{"name":"SDLDidReceiveScrollableMessageResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSendHapticDataResponse":{"name":"SDLDidReceiveSendHapticDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSendLocationResponse":{"name":"SDLDidReceiveSendLocationResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetAppIconResponse":{"name":"SDLDidReceiveSetAppIconResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutResponse":{"name":"SDLDidReceiveSetDisplayLayoutResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesResponse":{"name":"SDLDidReceiveSetGlobalPropertiesResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataResponse":{"name":"SDLDidReceiveSetInteriorVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerResponse":{"name":"SDLDidReceiveSetMediaClockTimerResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveShowConstantTBTResponse":{"name":"SDLDidReceiveShowConstantTBTResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveShowResponse":{"name":"SDLDidReceiveShowResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSliderResponse":{"name":"SDLDidReceiveSliderResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSpeakResponse":{"name":"SDLDidReceiveSpeakResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeButtonResponse":{"name":"SDLDidReceiveSubscribeButtonResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataResponse":{"name":"SDLDidReceiveSubscribeVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeWaypointsResponse":{"name":"SDLDidReceiveSubscribeWaypointsResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSyncPDataResponse":{"name":"SDLDidReceiveSyncPDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUpdateTurnListResponse":{"name":"SDLDidReceiveUpdateTurnListResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceResponse":{"name":"SDLDidReceiveUnregisterAppInterfaceResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonResponse":{"name":"SDLDidReceiveUnsubscribeButtonResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataResponse":{"name":"SDLDidReceiveUnsubscribeVehicleDataResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeWaypointsResponse":{"name":"SDLDidReceiveUnsubscribeWaypointsResponse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeDriverDistractionStateNotification":{"name":"SDLDidChangeDriverDistractionStateNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeHMIStatusNotification":{"name":"SDLDidChangeHMIStatusNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAudioPassThruNotification":{"name":"SDLDidReceiveAudioPassThruNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveAppUnregisteredNotification":{"name":"SDLDidReceiveAppUnregisteredNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveButtonEventNotification":{"name":"SDLDidReceiveButtonEventNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressNotification":{"name":"SDLDidReceiveButtonPressNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveCommandNotification":{"name":"SDLDidReceiveCommandNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveEncodedDataNotification":{"name":"SDLDidReceiveEncodedDataNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveInteriorVehicleDataNotification":{"name":"SDLDidReceiveInteriorVehicleDataNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveKeyboardInputNotification":{"name":"SDLDidReceiveKeyboardInputNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeLanguageNotification":{"name":"SDLDidChangeLanguageNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeLockScreenStatusNotification":{"name":"SDLDidChangeLockScreenStatusNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveNewHashNotification":{"name":"SDLDidReceiveNewHashNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveVehicleIconNotification":{"name":"SDLDidReceiveVehicleIconNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangePermissionsNotification":{"name":"SDLDidChangePermissionsNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveRemoteControlStatusNotification":{"name":"SDLDidReceiveRemoteControlStatusNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveSystemRequestNotification":{"name":"SDLDidReceiveSystemRequestNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidChangeTurnByTurnStateNotification":{"name":"SDLDidChangeTurnByTurnStateNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveTouchEventNotification":{"name":"SDLDidReceiveTouchEventNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveVehicleDataNotification":{"name":"SDLDidReceiveVehicleDataNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDidReceiveWaypointNotification":{"name":"SDLDidReceiveWaypointNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLPRNDLPark":{"name":"SDLPRNDLPark","abstract":"<p>Park</p>"},"Constants.html#/c:@SDLPRNDLReverse":{"name":"SDLPRNDLReverse","abstract":"<p>Reverse gear</p>"},"Constants.html#/c:@SDLPRNDLNeutral":{"name":"SDLPRNDLNeutral","abstract":"<p>No gear</p>"},"Constants.html#/c:@SDLPRNDLDrive":{"name":"SDLPRNDLDrive","abstract":"<p>@abstract: Drive gear</p>"},"Constants.html#/c:@SDLPRNDLSport":{"name":"SDLPRNDLSport","abstract":"<p>Drive Sport mode</p>"},"Constants.html#/c:@SDLPRNDLLowGear":{"name":"SDLPRNDLLowGear","abstract":"<p>1st gear hold</p>"},"Constants.html#/c:@SDLPRNDLFirst":{"name":"SDLPRNDLFirst","abstract":"<p>First gear</p>"},"Constants.html#/c:@SDLPRNDLSecond":{"name":"SDLPRNDLSecond","abstract":"<p>Second gear</p>"},"Constants.html#/c:@SDLPRNDLThird":{"name":"SDLPRNDLThird","abstract":"<p>Third gear</p>"},"Constants.html#/c:@SDLPRNDLFourth":{"name":"SDLPRNDLFourth","abstract":"<p>Fourth gear</p>"},"Constants.html#/c:@SDLPRNDLFifth":{"name":"SDLPRNDLFifth","abstract":"<p>Fifth gear</p>"},"Constants.html#/c:@SDLPRNDLSixth":{"name":"SDLPRNDLSixth","abstract":"<p>Sixth gear</p>"},"Constants.html#/c:@SDLPRNDLSeventh":{"name":"SDLPRNDLSeventh","abstract":"<p>Seventh gear</p>"},"Constants.html#/c:@SDLPRNDLEighth":{"name":"SDLPRNDLEighth","abstract":"<p>Eighth gear</p>"},"Constants.html#/c:@SDLPRNDLUnknown":{"name":"SDLPRNDLUnknown","abstract":"<p>Unknown</p>"},"Constants.html#/c:@SDLPRNDLFault":{"name":"SDLPRNDLFault","abstract":"<p>Fault</p>"},"Constants.html#/c:@SDLPermissionStatusAllowed":{"name":"SDLPermissionStatusAllowed","abstract":"<p>permission: allowed</p>"},"Constants.html#/c:@SDLPermissionStatusDisallowed":{"name":"SDLPermissionStatusDisallowed","abstract":"<p>permission: disallowed</p>"},"Constants.html#/c:@SDLPermissionStatusUserDisallowed":{"name":"SDLPermissionStatusUserDisallowed","abstract":"<p>permission: user disallowed</p>"},"Constants.html#/c:@SDLPermissionStatusUserConsentPending":{"name":"SDLPermissionStatusUserConsentPending","abstract":"<p>permission: user consent pending</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusUndefined":{"name":"SDLPowerModeQualificationStatusUndefined","abstract":"<p>An undefined status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusEvaluationInProgress":{"name":"SDLPowerModeQualificationStatusEvaluationInProgress","abstract":"<p>An <q>evaluation in progress</q> status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusNotDefined":{"name":"SDLPowerModeQualificationStatusNotDefined","abstract":"<p>A <q>not defined</q> status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusOk":{"name":"SDLPowerModeQualificationStatusOk","abstract":"<p>An <q>ok</q> status</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyOut":{"name":"SDLPowerModeStatusKeyOut","abstract":"<p>The key is not in the ignition, and the power is off</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyRecentlyOut":{"name":"SDLPowerModeStatusKeyRecentlyOut","abstract":"<p>The key is not in the ignition and it was just recently removed</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyApproved":{"name":"SDLPowerModeStatusKeyApproved","abstract":"<p>The key is not in the ignition, but an approved key is available</p>"},"Constants.html#/c:@SDLPowerModeStatusPostAccessory":{"name":"SDLPowerModeStatusPostAccessory","abstract":"<p>We are in a post-accessory power situation</p>"},"Constants.html#/c:@SDLPowerModeStatusAccessory":{"name":"SDLPowerModeStatusAccessory","abstract":"<p>The car is in accessory power mode</p>"},"Constants.html#/c:@SDLPowerModeStatusPostIgnition":{"name":"SDLPowerModeStatusPostIgnition","abstract":"<p>We are in a post-ignition power situation</p>"},"Constants.html#/c:@SDLPowerModeStatusIgnitionOn":{"name":"SDLPowerModeStatusIgnitionOn","abstract":"<p>The ignition is on but the car is not yet running</p>"},"Constants.html#/c:@SDLPowerModeStatusRunning":{"name":"SDLPowerModeStatusRunning","abstract":"<p>The ignition is on and the car is running</p>"},"Constants.html#/c:@SDLPowerModeStatusCrank":{"name":"SDLPowerModeStatusCrank","abstract":"<p>We are in a crank power situation</p>"},"Constants.html#/c:@SDLPredefinedLayoutDefault":{"name":"SDLPredefinedLayoutDefault","abstract":"<p>A default layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutMedia":{"name":"SDLPredefinedLayoutMedia","abstract":"<p>The default media layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutNonMedia":{"name":"SDLPredefinedLayoutNonMedia","abstract":"<p>The default non-media layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutOnscreenPresets":{"name":"SDLPredefinedLayoutOnscreenPresets","abstract":"<p>A media layout containing preset buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationFullscreenMap":{"name":"SDLPredefinedLayoutNavigationFullscreenMap","abstract":"<p>The default navigation layout with a fullscreen map</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationList":{"name":"SDLPredefinedLayoutNavigationList","abstract":"<p>A list layout used for navigation apps</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationKeyboard":{"name":"SDLPredefinedLayoutNavigationKeyboard","abstract":"<p>A keyboard layout used for navigation apps</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithText":{"name":"SDLPredefinedLayoutGraphicWithText","abstract":"<p>A layout with a single graphic on the left and text on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextWithGraphic":{"name":"SDLPredefinedLayoutTextWithGraphic","abstract":"<p>A layout with text on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTilesOnly":{"name":"SDLPredefinedLayoutTilesOnly","abstract":"<p>A layout with only softbuttons placed in a tile layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsOnly":{"name":"SDLPredefinedLayoutTextButtonsOnly","abstract":"<p>A layout with only soft buttons that only accept text</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTiles":{"name":"SDLPredefinedLayoutGraphicWithTiles","abstract":"<p>A layout with a single graphic on the left and soft buttons in a tile layout on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTilesWithGraphic":{"name":"SDLPredefinedLayoutTilesWithGraphic","abstract":"<p>A layout with soft buttons in a tile layout on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextAndSoftButtons":{"name":"SDLPredefinedLayoutGraphicWithTextAndSoftButtons","abstract":"<p>A layout with a single graphic on the left and both text and soft buttons on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextAndSoftButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextAndSoftButtonsWithGraphic","abstract":"<p>A layout with both text and soft buttons on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextButtons":{"name":"SDLPredefinedLayoutGraphicWithTextButtons","abstract":"<p>A layout with a single graphic on the left and text-only soft buttons on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextButtonsWithGraphic","abstract":"<p>A layout with text-only soft buttons on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutLargeGraphicWithSoftButtons","abstract":"<p>A layout with a single large graphic and soft buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutDoubleGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutDoubleGraphicWithSoftButtons","abstract":"<p>A layout with two graphics and soft buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicOnly":{"name":"SDLPredefinedLayoutLargeGraphicOnly","abstract":"<p>A layout with only a single large graphic</p>"},"Constants.html#/c:@SDLPrerecordedSpeechHelp":{"name":"SDLPrerecordedSpeechHelp","abstract":"<p>A prerecorded help prompt</p>"},"Constants.html#/c:@SDLPrerecordedSpeechInitial":{"name":"SDLPrerecordedSpeechInitial","abstract":"<p>A prerecorded initial prompt</p>"},"Constants.html#/c:@SDLPrerecordedSpeechListen":{"name":"SDLPrerecordedSpeechListen","abstract":"<p>A prerecorded listen prompt is available</p>"},"Constants.html#/c:@SDLPrerecordedSpeechPositive":{"name":"SDLPrerecordedSpeechPositive","abstract":"<p>A prerecorded positive indicator noise is available</p>"},"Constants.html#/c:@SDLPrerecordedSpeechNegative":{"name":"SDLPrerecordedSpeechNegative","abstract":"<p>A prerecorded negative indicator noise is available</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceNoSourceSelected":{"name":"SDLPrimaryAudioSourceNoSourceSelected","abstract":"<p>Currently no source selected</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceUSB":{"name":"SDLPrimaryAudioSourceUSB","abstract":"<p>USB is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceUSB2":{"name":"SDLPrimaryAudioSourceUSB2","abstract":"<p>USB2 is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceBluetoothStereo":{"name":"SDLPrimaryAudioSourceBluetoothStereo","abstract":"<p>Bluetooth Stereo is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceLineIn":{"name":"SDLPrimaryAudioSourceLineIn","abstract":"<p>Line in is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceIpod":{"name":"SDLPrimaryAudioSourceIpod","abstract":"<p>iPod is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceMobileApp":{"name":"SDLPrimaryAudioSourceMobileApp","abstract":"<p>Mobile app is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceCD":{"name":"SDLPrimaryAudioSourceCD","abstract":"<p>@abstract CD is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceAM":{"name":"SDLPrimaryAudioSourceAM","abstract":"<p>@abstract Radio frequency AM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceFM":{"name":"SDLPrimaryAudioSourceFM","abstract":"<p>@abstract Radio frequency FM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceXM":{"name":"SDLPrimaryAudioSourceXM","abstract":"<p>@abstract Radio frequency XM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceDAB":{"name":"SDLPrimaryAudioSourceDAB","abstract":"<p>@abstract Radio frequency DAB is current source</p>"},"Constants.html#/c:@SDLRadioBandAM":{"name":"SDLRadioBandAM","abstract":"<p>Represents AM radio band</p>"},"Constants.html#/c:@SDLRadioBandFM":{"name":"SDLRadioBandFM","abstract":"<p>Represents FM radio band</p>"},"Constants.html#/c:@SDLRadioBandXM":{"name":"SDLRadioBandXM","abstract":"<p>Represents XM radio band</p>"},"Constants.html#/c:@SDLRadioStateAcquiring":{"name":"SDLRadioStateAcquiring","abstract":"<p>Represents Radio state as ACQUIRING</p>"},"Constants.html#/c:@SDLRadioStateAcquired":{"name":"SDLRadioStateAcquired","abstract":"<p>Represents Radio state as ACQUIRED</p>"},"Constants.html#/c:@SDLRadioStateMulticast":{"name":"SDLRadioStateMulticast","abstract":"<p>Represents Radio state as MULTICAST</p>"},"Constants.html#/c:@SDLRadioStateNotFound":{"name":"SDLRadioStateNotFound","abstract":"<p>Represents Radio state as NOT_FOUND</p>"},"Constants.html#/c:@SDLRequestTypeHTTP":{"name":"SDLRequestTypeHTTP","abstract":"<p>An HTTP request</p>"},"Constants.html#/c:@SDLRequestTypeFileResume":{"name":"SDLRequestTypeFileResume","abstract":"<p>A file resumption request</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationRequest":{"name":"SDLRequestTypeAuthenticationRequest","abstract":"<p>An authentication request</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationChallenge":{"name":"SDLRequestTypeAuthenticationChallenge","abstract":"<p>An authentication challenge</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationAck":{"name":"SDLRequestTypeAuthenticationAck","abstract":"<p>An authentication acknowledgment</p>"},"Constants.html#/c:@SDLRequestTypeProprietary":{"name":"SDLRequestTypeProprietary","abstract":"<p>An proprietary formatted request</p>"},"Constants.html#/c:@SDLRequestTypeQueryApps":{"name":"SDLRequestTypeQueryApps","abstract":"<p>An Query Apps request</p>"},"Constants.html#/c:@SDLRequestTypeLaunchApp":{"name":"SDLRequestTypeLaunchApp","abstract":"<p>A Launch Apps request</p>"},"Constants.html#/c:@SDLRequestTypeLockScreenIconURL":{"name":"SDLRequestTypeLockScreenIconURL","abstract":"<p>The URL for a lock screen icon</p>"},"Constants.html#/c:@SDLRequestTypeTrafficMessageChannel":{"name":"SDLRequestTypeTrafficMessageChannel","abstract":"<p>A traffic message channel request</p>"},"Constants.html#/c:@SDLRequestTypeDriverProfile":{"name":"SDLRequestTypeDriverProfile","abstract":"<p>A driver profile request</p>"},"Constants.html#/c:@SDLRequestTypeVoiceSearch":{"name":"SDLRequestTypeVoiceSearch","abstract":"<p>A voice search request</p>"},"Constants.html#/c:@SDLRequestTypeNavigation":{"name":"SDLRequestTypeNavigation","abstract":"<p>A navigation request</p>"},"Constants.html#/c:@SDLRequestTypePhone":{"name":"SDLRequestTypePhone","abstract":"<p>A phone request</p>"},"Constants.html#/c:@SDLRequestTypeClimate":{"name":"SDLRequestTypeClimate","abstract":"<p>A climate request</p>"},"Constants.html#/c:@SDLRequestTypeSettings":{"name":"SDLRequestTypeSettings","abstract":"<p>A settings request</p>"},"Constants.html#/c:@SDLRequestTypeVehicleDiagnostics":{"name":"SDLRequestTypeVehicleDiagnostics","abstract":"<p>A vehicle diagnostics request</p>"},"Constants.html#/c:@SDLRequestTypeEmergency":{"name":"SDLRequestTypeEmergency","abstract":"<p>An emergency request</p>"},"Constants.html#/c:@SDLRequestTypeMedia":{"name":"SDLRequestTypeMedia","abstract":"<p>A media request</p>"},"Constants.html#/c:@SDLRequestTypeFOTA":{"name":"SDLRequestTypeFOTA","abstract":"<p>A firmware over-the-air request</p>"},"Constants.html#/c:@SDLRequestTypeOEMSpecific":{"name":"SDLRequestTypeOEMSpecific","abstract":"<p>A request that is OEM specific using the <code>RequestSubType</code> in SystemRequest</p>"},"Constants.html#/c:@SDLResultSuccess":{"name":"SDLResultSuccess","abstract":"<p>The request succeeded</p>"},"Constants.html#/c:@SDLResultInvalidData":{"name":"SDLResultInvalidData","abstract":"<p>The request contained invalid data</p>"},"Constants.html#/c:@SDLResultCharacterLimitExceeded":{"name":"SDLResultCharacterLimitExceeded","abstract":"<p>The request had a string containing too many characters</p>"},"Constants.html#/c:@SDLResultUnsupportedRequest":{"name":"SDLResultUnsupportedRequest","abstract":"<p>The request is not supported by the IVI unit implementing SDL</p>"},"Constants.html#/c:@SDLResultOutOfMemory":{"name":"SDLResultOutOfMemory","abstract":"<p>The system could not process the request because the necessary memory couldn&rsquo;t be allocated</p>"},"Constants.html#/c:@SDLResultTooManyPendingRequests":{"name":"SDLResultTooManyPendingRequests","abstract":"<p>There are too many requests pending (means that the response has not been delivered yet).</p>"},"Constants.html#/c:@SDLResultInvalidId":{"name":"SDLResultInvalidId","abstract":"<p>One of the provided IDs is not valid.</p>"},"Constants.html#/c:@SDLResultDuplicateName":{"name":"SDLResultDuplicateName","abstract":"<p>The provided name or synonym is a duplicate of some already-defined name or synonym.</p>"},"Constants.html#/c:@SDLResultTooManyApplications":{"name":"SDLResultTooManyApplications","abstract":"<p>There are already too many registered applications.</p>"},"Constants.html#/c:@SDLResultApplicationRegisteredAlready":{"name":"SDLResultApplicationRegisteredAlready","abstract":"<p>RegisterAppInterface has been called, but this app is already registered</p>"},"Constants.html#/c:@SDLResultUnsupportedVersion":{"name":"SDLResultUnsupportedVersion","abstract":"<p>The Head Unit doesn&rsquo;t support the SDL version that is requested by the mobile application.</p>"},"Constants.html#/c:@SDLResultWrongLanguage":{"name":"SDLResultWrongLanguage","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultApplicationNotRegistered":{"name":"SDLResultApplicationNotRegistered","abstract":"<p>A command can not be executed because no application has been registered with RegisterApplication.</p>"},"Constants.html#/c:@SDLResultInUse":{"name":"SDLResultInUse","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultVehicleDataNotAllowed":{"name":"SDLResultVehicleDataNotAllowed","abstract":"<p>The user has turned off access to vehicle data, and it is globally unavailable to mobile applications.</p>"},"Constants.html#/c:@SDLResultVehicleDataNotAvailable":{"name":"SDLResultVehicleDataNotAvailable","abstract":"<p>The requested vehicle data is not available on this vehicle or is not published.</p>"},"Constants.html#/c:@SDLResultRejected":{"name":"SDLResultRejected","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultAborted":{"name":"SDLResultAborted","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultIgnored":{"name":"SDLResultIgnored","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultUnsupportedResource":{"name":"SDLResultUnsupportedResource","abstract":"<p>A button that was requested for subscription is not supported under the current system.</p>"},"Constants.html#/c:@SDLResultFileNotFound":{"name":"SDLResultFileNotFound","abstract":"<p>A specified file could not be found on the head unit.</p>"},"Constants.html#/c:@SDLResultGenericError":{"name":"SDLResultGenericError","abstract":"<p>Provided data is valid but something went wrong in the lower layers.</p>"},"Constants.html#/c:@SDLResultDisallowed":{"name":"SDLResultDisallowed","abstract":"<p>RPC is not authorized in local policy table.</p>"},"Constants.html#/c:@SDLResultUserDisallowed":{"name":"SDLResultUserDisallowed","abstract":"<p>RPC is included in a functional group explicitly blocked by the user.</p>"},"Constants.html#/c:@SDLResultTimedOut":{"name":"SDLResultTimedOut","abstract":"<p>Overlay reached the maximum timeout and closed.</p>"},"Constants.html#/c:@SDLResultCancelRoute":{"name":"SDLResultCancelRoute","abstract":"<p>User selected to Cancel Route.</p>"},"Constants.html#/c:@SDLResultCorruptedData":{"name":"SDLResultCorruptedData","abstract":"<p>The data sent failed to pass CRC check in receiver end.</p>"},"Constants.html#/c:@SDLResultTruncatedData":{"name":"SDLResultTruncatedData","abstract":"<p>The RPC (e.g. ReadDID) executed successfully but the data exceeded the platform maximum threshold and thus, only part of the data is available.</p>"},"Constants.html#/c:@SDLResultRetry":{"name":"SDLResultRetry","abstract":"<p>The user interrupted the RPC (e.g. PerformAudioPassThru) and indicated to start over. Note, the app must issue the new RPC.</p>"},"Constants.html#/c:@SDLResultWarnings":{"name":"SDLResultWarnings","abstract":"<p>The RPC (e.g. SubscribeVehicleData) executed successfully but one or more items have a warning or failure.</p>"},"Constants.html#/c:@SDLResultSaved":{"name":"SDLResultSaved","abstract":"<p>The RPC (e.g. Slider) executed successfully and the user elected to save the current position / value.</p>"},"Constants.html#/c:@SDLResultInvalidCertificate":{"name":"SDLResultInvalidCertificate","abstract":"<p>The certificate provided during authentication is invalid.</p>"},"Constants.html#/c:@SDLResultExpiredCertificate":{"name":"SDLResultExpiredCertificate","abstract":"<p>The certificate provided during authentication is expired.</p>"},"Constants.html#/c:@SDLResultResumeFailed":{"name":"SDLResultResumeFailed","abstract":"<p>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.</p>"},"Constants.html#/c:@SDLResultDataNotAvailable":{"name":"SDLResultDataNotAvailable","abstract":"<p>The requested data is not available on this vehicle or is not published for the connected app.</p>"},"Constants.html#/c:@SDLResultReadOnly":{"name":"SDLResultReadOnly","abstract":"<p>The requested data is read only thus cannot be change via remote control .</p>"},"Constants.html#/c:@SDLSamplingRate8KHZ":{"name":"SDLSamplingRate8KHZ","abstract":"<p>Sampling rate of 8 kHz</p>"},"Constants.html#/c:@SDLSamplingRate16KHZ":{"name":"SDLSamplingRate16KHZ","abstract":"<p>Sampling rate of 16 kHz</p>"},"Constants.html#/c:@SDLSamplingRate22KHZ":{"name":"SDLSamplingRate22KHZ","abstract":"<p>Sampling rate of 22 kHz</p>"},"Constants.html#/c:@SDLSamplingRate44KHZ":{"name":"SDLSamplingRate44KHZ","abstract":"<p>Sampling rate of 44 kHz</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeSave":{"name":"SDLSeatMemoryActionTypeSave","abstract":"<p>@abstract Save current seat postions and settings to seat memory.</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeRestore":{"name":"SDLSeatMemoryActionTypeRestore","abstract":"<p>@abstract Restore / apply the seat memory settings to the current seat.</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeNone":{"name":"SDLSeatMemoryActionTypeNone","abstract":"<p>@abstract No action to be performed.</p>"},"Constants.html#/c:@SDLSoftButtonTypeText":{"name":"SDLSoftButtonTypeText","abstract":"<p>Text kind Softbutton</p>"},"Constants.html#/c:@SDLSoftButtonTypeImage":{"name":"SDLSoftButtonTypeImage","abstract":"<p>Image kind Softbutton</p>"},"Constants.html#/c:@SDLSoftButtonTypeBoth":{"name":"SDLSoftButtonTypeBoth","abstract":"<p>Both (Text &amp; Image) kind Softbutton</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesText":{"name":"SDLSpeechCapabilitiesText","abstract":"<p>The SDL platform can speak text phrases.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesSAPIPhonemes":{"name":"SDLSpeechCapabilitiesSAPIPhonemes","abstract":"<p>The SDL platform can speak SAPI Phonemes.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesLHPlusPhonemes":{"name":"SDLSpeechCapabilitiesLHPlusPhonemes","abstract":"<p>The SDL platform can speak LHPlus Phonemes.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesPrerecorded":{"name":"SDLSpeechCapabilitiesPrerecorded","abstract":"<p>The SDL platform can speak Prerecorded indicators and prompts.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesSilence":{"name":"SDLSpeechCapabilitiesSilence","abstract":"<p>The SDL platform can speak Silence.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesFile":{"name":"SDLSpeechCapabilitiesFile","abstract":"<p>The SDL platform can play a file</p>"},"Constants.html#/c:@SDLStaticIconNameAcceptCall":{"name":"SDLStaticIconNameAcceptCall","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameAddWaypoint":{"name":"SDLStaticIconNameAddWaypoint","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameAlbum":{"name":"SDLStaticIconNameAlbum","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameAmbientLighting":{"name":"SDLStaticIconNameAmbientLighting","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameArrowNorth":{"name":"SDLStaticIconNameArrowNorth","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameAudioMute":{"name":"SDLStaticIconNameAudioMute","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameAudiobookEpisode":{"name":"SDLStaticIconNameAudiobookEpisode","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameAudiobookNarrator":{"name":"SDLStaticIconNameAudiobookNarrator","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameAuxillaryAudio":{"name":"SDLStaticIconNameAuxillaryAudio","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBack":{"name":"SDLStaticIconNameBack","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity0Of5":{"name":"SDLStaticIconNameBatteryCapacity0Of5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity1Of5":{"name":"SDLStaticIconNameBatteryCapacity1Of5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity2Of5":{"name":"SDLStaticIconNameBatteryCapacity2Of5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity3Of5":{"name":"SDLStaticIconNameBatteryCapacity3Of5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity4Of5":{"name":"SDLStaticIconNameBatteryCapacity4Of5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity5Of5":{"name":"SDLStaticIconNameBatteryCapacity5Of5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBluetoothAudioSource":{"name":"SDLStaticIconNameBluetoothAudioSource","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBluetooth1":{"name":"SDLStaticIconNameBluetooth1","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBluetooth2":{"name":"SDLStaticIconNameBluetooth2","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameBrowse":{"name":"SDLStaticIconNameBrowse","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCellPhoneInRoamingMode":{"name":"SDLStaticIconNameCellPhoneInRoamingMode","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength0Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength0Of5Bars","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength1Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength1Of5Bars","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength2Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength2Of5Bars","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength3Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength3Of5Bars","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength4Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength4Of5Bars","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength5Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength5Of5Bars","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameChangeLaneLeft":{"name":"SDLStaticIconNameChangeLaneLeft","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameChangeLaneRight":{"name":"SDLStaticIconNameChangeLaneRight","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCheckBoxChecked":{"name":"SDLStaticIconNameCheckBoxChecked","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCheckBoxUnchecked":{"name":"SDLStaticIconNameCheckBoxUnchecked","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameClimate":{"name":"SDLStaticIconNameClimate","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameClock":{"name":"SDLStaticIconNameClock","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameCompose":{"name":"SDLStaticIconNameCompose","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameContact":{"name":"SDLStaticIconNameContact","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameContinue":{"name":"SDLStaticIconNameContinue","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameDash":{"name":"SDLStaticIconNameDash","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameDate":{"name":"SDLStaticIconNameDate","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameDelete":{"name":"SDLStaticIconNameDelete","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameDestination":{"name":"SDLStaticIconNameDestination","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameDestinationFerryAhead":{"name":"SDLStaticIconNameDestinationFerryAhead","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameEbookmark":{"name":"SDLStaticIconNameEbookmark","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameEmpty":{"name":"SDLStaticIconNameEmpty","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameEndCall":{"name":"SDLStaticIconNameEndCall","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFail":{"name":"SDLStaticIconNameFail","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFastForward30Secs":{"name":"SDLStaticIconNameFastForward30Secs","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFavoriteHeart":{"name":"SDLStaticIconNameFavoriteHeart","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFavoriteStar":{"name":"SDLStaticIconNameFavoriteStar","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFaxNumber":{"name":"SDLStaticIconNameFaxNumber","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFilename":{"name":"SDLStaticIconNameFilename","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFilter":{"name":"SDLStaticIconNameFilter","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFolder":{"name":"SDLStaticIconNameFolder","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFuelPrices":{"name":"SDLStaticIconNameFuelPrices","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameFullMap":{"name":"SDLStaticIconNameFullMap","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameGenericPhoneNumber":{"name":"SDLStaticIconNameGenericPhoneNumber","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameGenre":{"name":"SDLStaticIconNameGenre","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameGlobalKeyboard":{"name":"SDLStaticIconNameGlobalKeyboard","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameHighwayExitInformation":{"name":"SDLStaticIconNameHighwayExitInformation","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameHomePhoneNumber":{"name":"SDLStaticIconNameHomePhoneNumber","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameHyperlink":{"name":"SDLStaticIconNameHyperlink","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameID3TagUnknown":{"name":"SDLStaticIconNameID3TagUnknown","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameIncomingCalls":{"name":"SDLStaticIconNameIncomingCalls","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameInformation":{"name":"SDLStaticIconNameInformation","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameIPodMediaSource":{"name":"SDLStaticIconNameIPodMediaSource","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameJoinCalls":{"name":"SDLStaticIconNameJoinCalls","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameKeepLeft":{"name":"SDLStaticIconNameKeepLeft","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameKeepRight":{"name":"SDLStaticIconNameKeepRight","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameKey":{"name":"SDLStaticIconNameKey","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameLeft":{"name":"SDLStaticIconNameLeft","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameLeftArrow":{"name":"SDLStaticIconNameLeftArrow","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameLeftExit":{"name":"SDLStaticIconNameLeftExit","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameLineInAudioSource":{"name":"SDLStaticIconNameLineInAudioSource","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameLocked":{"name":"SDLStaticIconNameLocked","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlLeftArrow":{"name":"SDLStaticIconNameMediaControlLeftArrow","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlRecording":{"name":"SDLStaticIconNameMediaControlRecording","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlRightArrow":{"name":"SDLStaticIconNameMediaControlRightArrow","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlStop":{"name":"SDLStaticIconNameMediaControlStop","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMicrophone":{"name":"SDLStaticIconNameMicrophone","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMissedCalls":{"name":"SDLStaticIconNameMissedCalls","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMobilePhoneNumber":{"name":"SDLStaticIconNameMobilePhoneNumber","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMoveDown":{"name":"SDLStaticIconNameMoveDown","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMoveUp":{"name":"SDLStaticIconNameMoveUp","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameMP3TagArtist":{"name":"SDLStaticIconNameMP3TagArtist","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameNavigation":{"name":"SDLStaticIconNameNavigation","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameNavigationCurrentDirection":{"name":"SDLStaticIconNameNavigationCurrentDirection","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameNegativeRatingThumbsDown":{"name":"SDLStaticIconNameNegativeRatingThumbsDown","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameNew":{"name":"SDLStaticIconNameNew","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameOfficePhoneNumber":{"name":"SDLStaticIconNameOfficePhoneNumber","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameOpened":{"name":"SDLStaticIconNameOpened","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameOrigin":{"name":"SDLStaticIconNameOrigin","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameOutgoingCalls":{"name":"SDLStaticIconNameOutgoingCalls","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePause":{"name":"SDLStaticIconNamePause","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneCall1":{"name":"SDLStaticIconNamePhoneCall1","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneCall2":{"name":"SDLStaticIconNamePhoneCall2","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneDevice":{"name":"SDLStaticIconNamePhoneDevice","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePhonebook":{"name":"SDLStaticIconNamePhonebook","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePhoto":{"name":"SDLStaticIconNamePhoto","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePlay":{"name":"SDLStaticIconNamePlay","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePlaylist":{"name":"SDLStaticIconNamePlaylist","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePopUp":{"name":"SDLStaticIconNamePopUp","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePositiveRatingThumbsUp":{"name":"SDLStaticIconNamePositiveRatingThumbsUp","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePower":{"name":"SDLStaticIconNamePower","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNamePrimaryPhone":{"name":"SDLStaticIconNamePrimaryPhone","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRadioButtonChecked":{"name":"SDLStaticIconNameRadioButtonChecked","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRadioButtonUnchecked":{"name":"SDLStaticIconNameRadioButtonUnchecked","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRecentCalls":{"name":"SDLStaticIconNameRecentCalls","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRecentDestinations":{"name":"SDLStaticIconNameRecentDestinations","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRedo":{"name":"SDLStaticIconNameRedo","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRefresh":{"name":"SDLStaticIconNameRefresh","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRemoteDiagnosticsCheckEngine":{"name":"SDLStaticIconNameRemoteDiagnosticsCheckEngine","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRendered911Assist":{"name":"SDLStaticIconNameRendered911Assist","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRepeat":{"name":"SDLStaticIconNameRepeat","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRepeatPlay":{"name":"SDLStaticIconNameRepeatPlay","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameReply":{"name":"SDLStaticIconNameReply","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRewind30Secs":{"name":"SDLStaticIconNameRewind30Secs","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRight":{"name":"SDLStaticIconNameRight","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRightExit":{"name":"SDLStaticIconNameRightExit","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRingtones":{"name":"SDLStaticIconNameRingtones","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand1":{"name":"SDLStaticIconNameRoundaboutLeftHand1","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand2":{"name":"SDLStaticIconNameRoundaboutLeftHand2","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand3":{"name":"SDLStaticIconNameRoundaboutLeftHand3","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand4":{"name":"SDLStaticIconNameRoundaboutLeftHand4","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand5":{"name":"SDLStaticIconNameRoundaboutLeftHand5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand6":{"name":"SDLStaticIconNameRoundaboutLeftHand6","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand7":{"name":"SDLStaticIconNameRoundaboutLeftHand7","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand1":{"name":"SDLStaticIconNameRoundaboutRightHand1","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand2":{"name":"SDLStaticIconNameRoundaboutRightHand2","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand3":{"name":"SDLStaticIconNameRoundaboutRightHand3","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand4":{"name":"SDLStaticIconNameRoundaboutRightHand4","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand5":{"name":"SDLStaticIconNameRoundaboutRightHand5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand6":{"name":"SDLStaticIconNameRoundaboutRightHand6","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand7":{"name":"SDLStaticIconNameRoundaboutRightHand7","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameRSS":{"name":"SDLStaticIconNameRSS","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSettings":{"name":"SDLStaticIconNameSettings","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSharpLeft":{"name":"SDLStaticIconNameSharpLeft","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSharpRight":{"name":"SDLStaticIconNameSharpRight","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameShow":{"name":"SDLStaticIconNameShow","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameShufflePlay":{"name":"SDLStaticIconNameShufflePlay","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSkiPlaces":{"name":"SDLStaticIconNameSkiPlaces","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSlightLeft":{"name":"SDLStaticIconNameSlightLeft","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSlightRight":{"name":"SDLStaticIconNameSlightRight","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSmartphone":{"name":"SDLStaticIconNameSmartphone","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSortList":{"name":"SDLStaticIconNameSortList","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber0":{"name":"SDLStaticIconNameSpeedDialNumbersNumber0","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber1":{"name":"SDLStaticIconNameSpeedDialNumbersNumber1","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber2":{"name":"SDLStaticIconNameSpeedDialNumbersNumber2","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber3":{"name":"SDLStaticIconNameSpeedDialNumbersNumber3","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber4":{"name":"SDLStaticIconNameSpeedDialNumbersNumber4","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber5":{"name":"SDLStaticIconNameSpeedDialNumbersNumber5","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber6":{"name":"SDLStaticIconNameSpeedDialNumbersNumber6","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber7":{"name":"SDLStaticIconNameSpeedDialNumbersNumber7","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber8":{"name":"SDLStaticIconNameSpeedDialNumbersNumber8","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber9":{"name":"SDLStaticIconNameSpeedDialNumbersNumber9","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameSuccess":{"name":"SDLStaticIconNameSuccess","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameTrackTitle":{"name":"SDLStaticIconNameTrackTitle","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameTrafficReport":{"name":"SDLStaticIconNameTrafficReport","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameTurnList":{"name":"SDLStaticIconNameTurnList","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameUTurnLeftTraffic":{"name":"SDLStaticIconNameUTurnLeftTraffic","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameUTurnRightTraffic":{"name":"SDLStaticIconNameUTurnRightTraffic","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameUndo":{"name":"SDLStaticIconNameUndo","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameUnlocked":{"name":"SDLStaticIconNameUnlocked","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameUSBMediaAudioSource":{"name":"SDLStaticIconNameUSBMediaAudioSource","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo1":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo1","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo2":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo2","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo3":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo3","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo4":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo4","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionFailed":{"name":"SDLStaticIconNameVoiceRecognitionFailed","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionPause":{"name":"SDLStaticIconNameVoiceRecognitionPause","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSuccessful":{"name":"SDLStaticIconNameVoiceRecognitionSuccessful","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemActive":{"name":"SDLStaticIconNameVoiceRecognitionSystemActive","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemListening":{"name":"SDLStaticIconNameVoiceRecognitionSystemListening","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionTryAgain":{"name":"SDLStaticIconNameVoiceRecognitionTryAgain","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameWarning":{"name":"SDLStaticIconNameWarning","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameWeather":{"name":"SDLStaticIconNameWeather","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameWifiFull":{"name":"SDLStaticIconNameWifiFull","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameZoomIn":{"name":"SDLStaticIconNameZoomIn","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLStaticIconNameZoomOut":{"name":"SDLStaticIconNameZoomOut","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLDefaultScreenSize":{"name":"SDLDefaultScreenSize","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamDidStartNotification":{"name":"SDLVideoStreamDidStartNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamDidStopNotification":{"name":"SDLVideoStreamDidStopNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamSuspendedNotification":{"name":"SDLVideoStreamSuspendedNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamDidStartNotification":{"name":"SDLAudioStreamDidStartNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamDidStopNotification":{"name":"SDLAudioStreamDidStopNotification","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLLockScreenManagerWillPresentLockScreenViewController":{"name":"SDLLockScreenManagerWillPresentLockScreenViewController","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLLockScreenManagerDidPresentLockScreenViewController":{"name":"SDLLockScreenManagerDidPresentLockScreenViewController","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLLockScreenManagerWillDismissLockScreenViewController":{"name":"SDLLockScreenManagerWillDismissLockScreenViewController","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLLockScreenManagerDidDismissLockScreenViewController":{"name":"SDLLockScreenManagerDidDismissLockScreenViewController","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateStopped":{"name":"SDLVideoStreamManagerStateStopped","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateStarting":{"name":"SDLVideoStreamManagerStateStarting","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateReady":{"name":"SDLVideoStreamManagerStateReady","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateSuspended":{"name":"SDLVideoStreamManagerStateSuspended","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateShuttingDown":{"name":"SDLVideoStreamManagerStateShuttingDown","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateStopped":{"name":"SDLAudioStreamManagerStateStopped","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateStarting":{"name":"SDLAudioStreamManagerStateStarting","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateReady":{"name":"SDLAudioStreamManagerStateReady","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateShuttingDown":{"name":"SDLAudioStreamManagerStateShuttingDown","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAppStateInactive":{"name":"SDLAppStateInactive","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLAppStateActive":{"name":"SDLAppStateActive","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLSupportedSeatDriver":{"name":"SDLSupportedSeatDriver","abstract":"<p>@abstract Save current seat postions and settings to seat memory.</p>"},"Constants.html#/c:@SDLSupportedSeatFrontPassenger":{"name":"SDLSupportedSeatFrontPassenger","abstract":"<p>@abstract Restore / apply the seat memory settings to the current seat.</p>"},"Constants.html#/c:@SDLSystemActionDefaultAction":{"name":"SDLSystemActionDefaultAction","abstract":"<p>A default soft button action</p>"},"Constants.html#/c:@SDLSystemActionStealFocus":{"name":"SDLSystemActionStealFocus","abstract":"<p>An action causing your app to steal HMI focus</p>"},"Constants.html#/c:@SDLSystemActionKeepContext":{"name":"SDLSystemActionKeepContext","abstract":"<p>An action causing you to keep context</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeNavigation":{"name":"SDLSystemCapabilityTypeNavigation","abstract":"<p>The navigation capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypePhoneCall":{"name":"SDLSystemCapabilityTypePhoneCall","abstract":"<p>The phone call capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeVideoStreaming":{"name":"SDLSystemCapabilityTypeVideoStreaming","abstract":"<p>The video streaming capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeRemoteControl":{"name":"SDLSystemCapabilityTypeRemoteControl","abstract":"<p>The remote control capability</p>"},"Constants.html#/c:@SDLSystemContextMain":{"name":"SDLSystemContextMain","abstract":"<p>No user interaction (user-initiated or app-initiated) is in progress.</p>"},"Constants.html#/c:@SDLSystemContextVoiceRecognitionSession":{"name":"SDLSystemContextVoiceRecognitionSession","abstract":"<p>VR-oriented, user-initiated or app-initiated interaction is in-progress.</p>"},"Constants.html#/c:@SDLSystemContextMenu":{"name":"SDLSystemContextMenu","abstract":"<p>Menu-oriented, user-initiated or app-initiated interaction is in-progress.</p>"},"Constants.html#/c:@SDLSystemContextHMIObscured":{"name":"SDLSystemContextHMIObscured","abstract":"<p>The app&rsquo;s display HMI is currently being obscured by either a system or other app&rsquo;s overlay.</p>"},"Constants.html#/c:@SDLSystemContextAlert":{"name":"SDLSystemContextAlert","abstract":"<p>Broadcast only to whichever app has an alert currently being displayed.</p>"},"Constants.html#/c:@SDLTBTStateRouteUpdateRequest":{"name":"SDLTBTStateRouteUpdateRequest","abstract":"<p>The route should be updated</p>"},"Constants.html#/c:@SDLTBTStateRouteAccepted":{"name":"SDLTBTStateRouteAccepted","abstract":"<p>The route is accepted</p>"},"Constants.html#/c:@SDLTBTStateRouteRefused":{"name":"SDLTBTStateRouteRefused","abstract":"<p>The route is refused</p>"},"Constants.html#/c:@SDLTBTStateRouteCancelled":{"name":"SDLTBTStateRouteCancelled","abstract":"<p>The route is cancelled</p>"},"Constants.html#/c:@SDLTBTStateETARequest":{"name":"SDLTBTStateETARequest","abstract":"<p>The route should update its Estimated Time of Arrival</p>"},"Constants.html#/c:@SDLTBTStateNextTurnRequest":{"name":"SDLTBTStateNextTurnRequest","abstract":"<p>The route should update its next turn</p>"},"Constants.html#/c:@SDLTBTStateRouteStatusRequest":{"name":"SDLTBTStateRouteStatusRequest","abstract":"<p>The route should update its status</p>"},"Constants.html#/c:@SDLTBTStateRouteSummaryRequest":{"name":"SDLTBTStateRouteSummaryRequest","abstract":"<p>The route update its summary</p>"},"Constants.html#/c:@SDLTBTStateTripStatusRequest":{"name":"SDLTBTStateTripStatusRequest","abstract":"<p>The route should update the trip&rsquo;s status</p>"},"Constants.html#/c:@SDLTBTStateRouteUpdateRequestTimeout":{"name":"SDLTBTStateRouteUpdateRequestTimeout","abstract":"<p>The route update timed out</p>"},"Constants.html#/c:@SDLTPMSUnknown":{"name":"SDLTPMSUnknown","abstract":"<p>If set the status of the tire is not known.</p>"},"Constants.html#/c:@SDLTPMSSystemFault":{"name":"SDLTPMSSystemFault","abstract":"<p>TPMS does not function.</p>"},"Constants.html#/c:@SDLTPMSSensorFault":{"name":"SDLTPMSSensorFault","abstract":"<p>The sensor of the tire does not function.</p>"},"Constants.html#/c:@SDLTPMSLow":{"name":"SDLTPMSLow","abstract":"<p>TPMS is reporting a low tire pressure for the tire.</p>"},"Constants.html#/c:@SDLTPMSSystemActive":{"name":"SDLTPMSSystemActive","abstract":"<p>TPMS is active and the tire pressure is monitored.</p>"},"Constants.html#/c:@SDLTPMSTrain":{"name":"SDLTPMSTrain","abstract":"<p>TPMS is reporting that the tire must be trained.</p>"},"Constants.html#/c:@SDLTPMSTrainingComplete":{"name":"SDLTPMSTrainingComplete","abstract":"<p>TPMS reports the training for the tire is completed.</p>"},"Constants.html#/c:@SDLTPMSNotTrained":{"name":"SDLTPMSNotTrained","abstract":"<p>TPMS reports the tire is not trained.</p>"},"Constants.html#/c:@SDLTemperatureUnitCelsius":{"name":"SDLTemperatureUnitCelsius","abstract":"<p>Reflects the current HMI setting for temperature unit in Celsius</p>"},"Constants.html#/c:@SDLTemperatureUnitFahrenheit":{"name":"SDLTemperatureUnitFahrenheit","abstract":"<p>Reflects the current HMI setting for temperature unit in Fahrenheit</p>"},"Constants.html#/c:@SDLTextAlignmentLeft":{"name":"SDLTextAlignmentLeft","abstract":"<p>Text aligned left.</p>"},"Constants.html#/c:@SDLTextAlignmentRight":{"name":"SDLTextAlignmentRight","abstract":"<p>Text aligned right.</p>"},"Constants.html#/c:@SDLTextAlignmentCenter":{"name":"SDLTextAlignmentCenter","abstract":"<p>Text aligned centered.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField1":{"name":"SDLTextFieldNameMainField1","abstract":"<p>The first line of the first set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField2":{"name":"SDLTextFieldNameMainField2","abstract":"<p>The second line of the first set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField3":{"name":"SDLTextFieldNameMainField3","abstract":"<p>The first line of the second set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField4":{"name":"SDLTextFieldNameMainField4"},"Constants.html#/c:@SDLTextFieldNameStatusBar":{"name":"SDLTextFieldNameStatusBar","abstract":"<p>The status bar on the NGN display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMediaClock":{"name":"SDLTextFieldNameMediaClock","abstract":"<p>Text value for MediaClock field. Must be properly formatted according to MediaClockFormat. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMediaTrack":{"name":"SDLTextFieldNameMediaTrack","abstract":"<p>The track field of NGN type ACMs. This field is only available for media applications on a NGN display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText1":{"name":"SDLTextFieldNameAlertText1","abstract":"<p>The first line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText2":{"name":"SDLTextFieldNameAlertText2","abstract":"<p>The second line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText3":{"name":"SDLTextFieldNameAlertText3","abstract":"<p>The third line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameScrollableMessageBody":{"name":"SDLTextFieldNameScrollableMessageBody","abstract":"<p>Long form body of text that can include newlines and tabs. Applies to SDLScrollableMessage.</p>"},"Constants.html#/c:@SDLTextFieldNameInitialInteractionText":{"name":"SDLTextFieldNameInitialInteractionText","abstract":"<p>First line suggestion for a user response (in the case of VR enabled interaction).</p>"},"Constants.html#/c:@SDLTextFieldNameNavigationText1":{"name":"SDLTextFieldNameNavigationText1","abstract":"<p>First line of navigation text.</p>"},"Constants.html#/c:@SDLTextFieldNameNavigationText2":{"name":"SDLTextFieldNameNavigationText2","abstract":"<p>Second line of navigation text.</p>"},"Constants.html#/c:@SDLTextFieldNameETA":{"name":"SDLTextFieldNameETA","abstract":"<p>Estimated Time of Arrival time for navigation.</p>"},"Constants.html#/c:@SDLTextFieldNameTotalDistance":{"name":"SDLTextFieldNameTotalDistance","abstract":"<p>Total distance to destination for navigation.</p>"},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText1":{"name":"SDLTextFieldNameAudioPassThruDisplayText1","abstract":"<p>First line of text for audio pass thru.</p>"},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText2":{"name":"SDLTextFieldNameAudioPassThruDisplayText2","abstract":"<p>Second line of text for audio pass thru.</p>"},"Constants.html#/c:@SDLTextFieldNameSliderHeader":{"name":"SDLTextFieldNameSliderHeader","abstract":"<p>Header text for slider.</p>"},"Constants.html#/c:@SDLTextFieldNameSliderFooter":{"name":"SDLTextFieldNameSliderFooter","abstract":"<p>Footer text for slider</p>"},"Constants.html#/c:@SDLTextFieldNameMenuName":{"name":"SDLTextFieldNameMenuName","abstract":"<p>Primary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameSecondaryText":{"name":"SDLTextFieldNameSecondaryText","abstract":"<p>Secondary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameTertiaryText":{"name":"SDLTextFieldNameTertiaryText","abstract":"<p>Tertiary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameMenuTitle":{"name":"SDLTextFieldNameMenuTitle","abstract":"<p>Optional text to label an app menu button (for certain touchscreen platforms)</p>"},"Constants.html#/c:@SDLTextFieldNameLocationName":{"name":"SDLTextFieldNameLocationName","abstract":"<p>Optional name / title of intended location for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNameLocationDescription":{"name":"SDLTextFieldNameLocationDescription","abstract":"<p>Optional description of intended location / establishment (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNameAddressLines":{"name":"SDLTextFieldNameAddressLines","abstract":"<p>Optional location address (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNamePhoneNumber":{"name":"SDLTextFieldNamePhoneNumber","abstract":"<p>Optional hone number of intended location / establishment (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTimerModeUp":{"name":"SDLTimerModeUp","abstract":"<p>The timer should count up.</p>"},"Constants.html#/c:@SDLTimerModeDown":{"name":"SDLTimerModeDown","abstract":"<p>The timer should count down.</p>"},"Constants.html#/c:@SDLTimerModeNone":{"name":"SDLTimerModeNone","abstract":"<p>The timer should not count.</p>"},"Constants.html#/c:@SDLTouchTypeBegin":{"name":"SDLTouchTypeBegin","abstract":"<p>The touch is the beginning of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeMove":{"name":"SDLTouchTypeMove","abstract":"<p>The touch is the movement of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeEnd":{"name":"SDLTouchTypeEnd","abstract":"<p>The touch is the ending of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeCancel":{"name":"SDLTouchTypeCancel","abstract":"<p>The touch is the cancellation of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTriggerSourceMenu":{"name":"SDLTriggerSourceMenu","abstract":"<p>Selection made via menu</p>"},"Constants.html#/c:@SDLTriggerSourceVoiceRecognition":{"name":"SDLTriggerSourceVoiceRecognition","abstract":"<p>Selection made via Voice session</p>"},"Constants.html#/c:@SDLTriggerSourceKeyboard":{"name":"SDLTriggerSourceKeyboard","abstract":"<p>Selection made via Keyboard</p>"},"Constants.html#/c:@SDLTurnSignalOff":{"name":"SDLTurnSignalOff","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLTurnSignalLeft":{"name":"SDLTurnSignalLeft","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLTurnSignalRight":{"name":"SDLTurnSignalRight","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLTurnSignalBoth":{"name":"SDLTurnSignalBoth","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SDLUpdateModeCountUp":{"name":"SDLUpdateModeCountUp","abstract":"<p>Starts the media clock timer counting upward, in increments of 1 second.</p>"},"Constants.html#/c:@SDLUpdateModeCountDown":{"name":"SDLUpdateModeCountDown","abstract":"<p>Starts the media clock timer counting downward, in increments of 1 second.</p>"},"Constants.html#/c:@SDLUpdateModePause":{"name":"SDLUpdateModePause","abstract":"<p>Pauses the media clock timer.</p>"},"Constants.html#/c:@SDLUpdateModeResume":{"name":"SDLUpdateModeResume","abstract":"<p>Resumes the media clock timer. The timer resumes counting in whatever mode was in effect before pausing (i.e. COUNTUP or COUNTDOWN).</p>"},"Constants.html#/c:@SDLUpdateModeClear":{"name":"SDLUpdateModeClear","abstract":"<p>Clear the media clock timer.</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveNotConfirmed","abstract":"<p>Inactive not confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveConfirmed","abstract":"<p>Inactive confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusActiveNotConfirmed","abstract":"<p>Active not confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveConfirmed":{"name":"SDLVehicleDataActiveStatusActiveConfirmed","abstract":"<p>Active confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusFault":{"name":"SDLVehicleDataActiveStatusFault","abstract":"<p>Fault</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNoEvent":{"name":"SDLVehicleDataEventStatusNoEvent","abstract":"<p>No event</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNo":{"name":"SDLVehicleDataEventStatusNo","abstract":"<p>The event is a No status</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusYes":{"name":"SDLVehicleDataEventStatusYes","abstract":"<p>The event is a Yes status</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNotSupported":{"name":"SDLVehicleDataEventStatusNotSupported","abstract":"<p>Vehicle data event is not supported</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusFault":{"name":"SDLVehicleDataEventStatusFault","abstract":"<p>The event is a Fault status</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotSupported":{"name":"SDLVehicleDataNotificationStatusNotSupported","abstract":"<p>The vehicle data notification status is not supported</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNormal":{"name":"SDLVehicleDataNotificationStatusNormal","abstract":"<p>The vehicle data notification status is normal</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusActive":{"name":"SDLVehicleDataNotificationStatusActive","abstract":"<p>The vehicle data notification status is active</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotUsed":{"name":"SDLVehicleDataNotificationStatusNotUsed","abstract":"<p>The vehicle data notification status is not used</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeSuccess":{"name":"SDLVehicleDataResultCodeSuccess","abstract":"<p>Individual vehicle data item / DTC / DID request or subscription successful</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeTruncatedData":{"name":"SDLVehicleDataResultCodeTruncatedData","abstract":"<p>DTC / DID request successful, however, not all active DTCs or full contents of DID location available</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDisallowed":{"name":"SDLVehicleDataResultCodeDisallowed","abstract":"<p>This vehicle data item is not allowed for this app by SDL</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeUserDisallowed":{"name":"SDLVehicleDataResultCodeUserDisallowed","abstract":"<p>The user has not granted access to this type of vehicle data item at this time</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeInvalidId":{"name":"SDLVehicleDataResultCodeInvalidId","abstract":"<p>The ECU ID referenced is not a valid ID on the bus / system</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeVehicleDataNotAvailable":{"name":"SDLVehicleDataResultCodeVehicleDataNotAvailable","abstract":"<p>The requested vehicle data item / DTC / DID is not currently available or responding on the bus / system</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDataAlreadySubscribed":{"name":"SDLVehicleDataResultCodeDataAlreadySubscribed","abstract":"<p>The vehicle data item is already subscribed</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDataNotSubscribed":{"name":"SDLVehicleDataResultCodeDataNotSubscribed","abstract":"<p>The vehicle data item cannot be unsubscribed because it is not currently subscribed</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeIgnored":{"name":"SDLVehicleDataResultCodeIgnored","abstract":"<p>The request for this item is ignored because it is already in progress</p>"},"Constants.html#/c:@SDLVehicleDataStatusNoDataExists":{"name":"SDLVehicleDataStatusNoDataExists","abstract":"<p>No data avaliable</p>"},"Constants.html#/c:@SDLVehicleDataStatusOff":{"name":"SDLVehicleDataStatusOff","abstract":"<p>The status is Off</p>"},"Constants.html#/c:@SDLVehicleDataStatusOn":{"name":"SDLVehicleDataStatusOn","abstract":"<p>The status is On</p>"},"Constants.html#/c:@SDLVehicleDataTypeGPS":{"name":"SDLVehicleDataTypeGPS","abstract":"<p>GPS vehicle data</p>"},"Constants.html#/c:@SDLVehicleDataTypeSpeed":{"name":"SDLVehicleDataTypeSpeed","abstract":"<p>Vehicle speed data</p>"},"Constants.html#/c:@SDLVehicleDataTypeRPM":{"name":"SDLVehicleDataTypeRPM","abstract":"<p>Vehicle RPM data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelLevel":{"name":"SDLVehicleDataTypeFuelLevel","abstract":"<p>Vehicle fuel level data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelLevelState":{"name":"SDLVehicleDataTypeFuelLevelState","abstract":"<p>Vehicle fuel level state data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelConsumption":{"name":"SDLVehicleDataTypeFuelConsumption","abstract":"<p>Vehicle fuel consumption data</p>"},"Constants.html#/c:@SDLVehicleDataTypeExternalTemperature":{"name":"SDLVehicleDataTypeExternalTemperature","abstract":"<p>Vehicle external temperature data</p>"},"Constants.html#/c:@SDLVehicleDataTypeVIN":{"name":"SDLVehicleDataTypeVIN","abstract":"<p>Vehicle VIN data</p>"},"Constants.html#/c:@SDLVehicleDataTypePRNDL":{"name":"SDLVehicleDataTypePRNDL","abstract":"<p>Vehicle PRNDL data</p>"},"Constants.html#/c:@SDLVehicleDataTypeTirePressure":{"name":"SDLVehicleDataTypeTirePressure","abstract":"<p>Vehicle tire pressure data</p>"},"Constants.html#/c:@SDLVehicleDataTypeOdometer":{"name":"SDLVehicleDataTypeOdometer","abstract":"<p>Vehicle odometer data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBeltStatus":{"name":"SDLVehicleDataTypeBeltStatus","abstract":"<p>Vehicle belt status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBodyInfo":{"name":"SDLVehicleDataTypeBodyInfo","abstract":"<p>Vehicle body info data</p>"},"Constants.html#/c:@SDLVehicleDataTypeDeviceStatus":{"name":"SDLVehicleDataTypeDeviceStatus","abstract":"<p>Vehicle device status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeECallInfo":{"name":"SDLVehicleDataTypeECallInfo","abstract":"<p>Vehicle emergency call info data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelRange":{"name":"SDLVehicleDataTypeFuelRange","abstract":"<p>Vehicle fuel range data</p>"},"Constants.html#/c:@SDLVehicleDataTypeAirbagStatus":{"name":"SDLVehicleDataTypeAirbagStatus","abstract":"<p>Vehicle airbag status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEmergencyEvent":{"name":"SDLVehicleDataTypeEmergencyEvent","abstract":"<p>Vehicle emergency event info</p>"},"Constants.html#/c:@SDLVehicleDataTypeClusterModeStatus":{"name":"SDLVehicleDataTypeClusterModeStatus","abstract":"<p>Vehicle cluster mode status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeMyKey":{"name":"SDLVehicleDataTypeMyKey","abstract":"<p>Vehicle MyKey data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBraking":{"name":"SDLVehicleDataTypeBraking","abstract":"<p>Vehicle braking data</p>"},"Constants.html#/c:@SDLVehicleDataTypeWiperStatus":{"name":"SDLVehicleDataTypeWiperStatus","abstract":"<p>Vehicle wiper status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeHeadlampStatus":{"name":"SDLVehicleDataTypeHeadlampStatus","abstract":"<p>Vehicle headlamp status</p>"},"Constants.html#/c:@SDLVehicleDataTypeBatteryVoltage":{"name":"SDLVehicleDataTypeBatteryVoltage","abstract":"<p>Vehicle battery voltage data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEngineOilLife":{"name":"SDLVehicleDataTypeEngineOilLife","abstract":"<p>Vehicle engine oil life data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEngineTorque":{"name":"SDLVehicleDataTypeEngineTorque","abstract":"<p>Vehicle engine torque data</p>"},"Constants.html#/c:@SDLVehicleDataTypeAccelerationPedal":{"name":"SDLVehicleDataTypeAccelerationPedal","abstract":"<p>Vehicle accleration pedal data</p>"},"Constants.html#/c:@SDLVehicleDataTypeSteeringWheel":{"name":"SDLVehicleDataTypeSteeringWheel","abstract":"<p>Vehicle steering wheel data</p>"},"Constants.html#/c:@SDLVehicleDataTypeElectronicParkBrakeStatus":{"name":"SDLVehicleDataTypeElectronicParkBrakeStatus","abstract":"<p>Vehicle electronic parking brake status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeTurnSignal":{"name":"SDLVehicleDataTypeTurnSignal","abstract":"<p>Vehicle turn signal data</p>"},"Constants.html#/c:@SDLVentilationModeUpper":{"name":"SDLVentilationModeUpper","abstract":"<p>The upper ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeLower":{"name":"SDLVentilationModeLower","abstract":"<p>The lower ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeBoth":{"name":"SDLVentilationModeBoth","abstract":"<p>The both ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeNone":{"name":"SDLVentilationModeNone","abstract":"<p>No ventilation mode</p>"},"Constants.html#/c:@SDLVideoStreamingCodecH264":{"name":"SDLVideoStreamingCodecH264","abstract":"<p>H264</p>"},"Constants.html#/c:@SDLVideoStreamingCodecH265":{"name":"SDLVideoStreamingCodecH265","abstract":"<p>H265</p>"},"Constants.html#/c:@SDLVideoStreamingCodecTheora":{"name":"SDLVideoStreamingCodecTheora","abstract":"<p>Theora</p>"},"Constants.html#/c:@SDLVideoStreamingCodecVP8":{"name":"SDLVideoStreamingCodecVP8","abstract":"<p>VP8</p>"},"Constants.html#/c:@SDLVideoStreamingCodecVP9":{"name":"SDLVideoStreamingCodecVP9","abstract":"<p>VP9</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRAW":{"name":"SDLVideoStreamingProtocolRAW","abstract":"<p>RAW</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTP":{"name":"SDLVideoStreamingProtocolRTP","abstract":"<p>RTP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTSP":{"name":"SDLVideoStreamingProtocolRTSP","abstract":"<p>RTSP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTMP":{"name":"SDLVideoStreamingProtocolRTMP","abstract":"<p>RTMP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolWebM":{"name":"SDLVideoStreamingProtocolWebM","abstract":"<p>WebM</p>"},"Constants.html#/c:@SDLVideoStreamingStateStreamable":{"name":"SDLVideoStreamingStateStreamable","abstract":"<p>STREAMABLE, the current app is allowed to stream video</p>"},"Constants.html#/c:@SDLVideoStreamingStateNotStreamable":{"name":"SDLVideoStreamingStateNotStreamable","abstract":"<p>NOT_STREAMABLE, the current app is not allowed to stream video</p>"},"Constants.html#/c:@SDLVRCapabilitiesText":{"name":"SDLVRCapabilitiesText","abstract":"<p>The SDL platform is capable of recognizing spoken text in the current language.</p>"},"Constants.html#/c:@SDLWarningLightStatusOff":{"name":"SDLWarningLightStatusOff","abstract":"<p>The warning light is off</p>"},"Constants.html#/c:@SDLWarningLightStatusOn":{"name":"SDLWarningLightStatusOn","abstract":"<p>The warning light is off</p>"},"Constants.html#/c:@SDLWarningLightStatusFlash":{"name":"SDLWarningLightStatusFlash","abstract":"<p>The warning light is flashing</p>"},"Constants.html#/c:@SDLWarningLightStatusNotUsed":{"name":"SDLWarningLightStatusNotUsed","abstract":"<p>The warning light is unused</p>"},"Constants.html#/c:@SDLWayPointTypeAll":{"name":"SDLWayPointTypeAll","abstract":"<p>All other waypoint types</p>"},"Constants.html#/c:@SDLWayPointTypeDestination":{"name":"SDLWayPointTypeDestination","abstract":"<p>The destination waypoint</p>"},"Constants.html#/c:@SDLWiperStatusOff":{"name":"SDLWiperStatusOff","abstract":"<p>Wiper is off</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticOff":{"name":"SDLWiperStatusAutomaticOff","abstract":"<p>Wiper is off automatically</p>"},"Constants.html#/c:@SDLWiperStatusOffMoving":{"name":"SDLWiperStatusOffMoving","abstract":"<p>Wiper is moving but off</p>"},"Constants.html#/c:@SDLWiperStatusManualIntervalOff":{"name":"SDLWiperStatusManualIntervalOff","abstract":"<p>Wiper is off due to a manual interval</p>"},"Constants.html#/c:@SDLWiperStatusManualIntervalOn":{"name":"SDLWiperStatusManualIntervalOn","abstract":"<p>Wiper is on due to a manual interval</p>"},"Constants.html#/c:@SDLWiperStatusManualLow":{"name":"SDLWiperStatusManualLow","abstract":"<p>Wiper is on low manually</p>"},"Constants.html#/c:@SDLWiperStatusManualHigh":{"name":"SDLWiperStatusManualHigh","abstract":"<p>Wiper is on high manually</p>"},"Constants.html#/c:@SDLWiperStatusManualFlick":{"name":"SDLWiperStatusManualFlick","abstract":"<p>Wiper is on for a single wipe manually</p>"},"Constants.html#/c:@SDLWiperStatusWash":{"name":"SDLWiperStatusWash","abstract":"<p>Wiper is in wash mode</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticLow":{"name":"SDLWiperStatusAutomaticLow","abstract":"<p>Wiper is on low automatically</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticHigh":{"name":"SDLWiperStatusAutomaticHigh","abstract":"<p>Wiper is on high automatically</p>"},"Constants.html#/c:@SDLWiperStatusCourtesyWipe":{"name":"SDLWiperStatusCourtesyWipe","abstract":"<p>Wiper is performing a courtesy wipe</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticAdjust":{"name":"SDLWiperStatusAutomaticAdjust","abstract":"<p>Wiper is on automatic adjust</p>"},"Constants.html#/c:@SDLWiperStatusStalled":{"name":"SDLWiperStatusStalled","abstract":"<p>Wiper is stalled</p>"},"Constants.html#/c:@SDLWiperStatusNoDataExists":{"name":"SDLWiperStatusNoDataExists","abstract":"<p>Wiper data is not available</p>"},"Constants.html#/c:@SmartDeviceLinkVersionNumber":{"name":"SmartDeviceLinkVersionNumber","abstract":"<p>Undocumented</p>"},"Constants.html#/c:@SmartDeviceLinkVersionString":{"name":"SmartDeviceLinkVersionString","abstract":"<p>Undocumented</p>"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:":{"name":"-initWithText:image:","abstract":"<p>Undocumented</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:position:":{"name":"-initWithText:image:position:","abstract":"<p>Undocumented</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)text":{"name":"text","abstract":"<p>Text to display for VR Help item</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)image":{"name":"image","abstract":"<p>Image for VR Help item</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)position":{"name":"position","abstract":"<p>Position to display item in VR Help list</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The strings the user can say to activate this voice command</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)handler":{"name":"handler","abstract":"<p>The handler that will be called when the command is activated</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(im)initWithVoiceCommands:handler:":{"name":"-initWithVoiceCommands:handler:","abstract":"<p>Undocumented</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)protocol":{"name":"protocol","abstract":"<p>Protocol type, see VideoStreamingProtocol</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)codec":{"name":"codec","abstract":"<p>Codec type, see VideoStreamingCodec</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(im)initWithCodec:protocol:":{"name":"-initWithCodec:protocol:","abstract":"<p>Undocumented</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:","abstract":"<p>Undocumented</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)preferredResolution":{"name":"preferredResolution","abstract":"<p>The preferred resolution of a video stream for decoding and rendering on HMI</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)maxBitrate":{"name":"maxBitrate","abstract":"<p>The maximum bitrate of video stream that is supported, in kbps, optional</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)supportedFormats":{"name":"supportedFormats","abstract":"<p>Detailed information on each format supported by this system, in its preferred order</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)hapticSpatialDataSupported":{"name":"hapticSpatialDataSupported","abstract":"<p>True if the system can utilize the haptic spatial data from the source being streamed.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)make":{"name":"make","abstract":"<p>The make of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)model":{"name":"model","abstract":"<p>The model of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)modelYear":{"name":"modelYear","abstract":"<p>The model year of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)trim":{"name":"trim","abstract":"<p>The trim of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)dataType":{"name":"dataType","abstract":"<p>Defined published data element type</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)resultCode":{"name":"resultCode","abstract":"<p>Published data result code</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(im)initWithTurnList:softButtons:":{"name":"-initWithTurnList:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)turnList":{"name":"turnList","abstract":"<p>Optional, SDLTurn, 1 - 100 entries</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)softButtons":{"name":"softButtons","abstract":"<p>Required, SDLSoftButton, 0 - 1 Entries</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The result of requesting to unsubscribe to the GPSData.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The result of requesting to unsubscribe to the vehicle speed in kilometers per hour.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The result of requesting to unsubscribe to the number of revolutions per minute of the engine.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The result of requesting to unsubscribe to the fuel level in the tank (percentage)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The result of requesting to unsubscribe to the fuel level state.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The result of requesting to unsubscribe to the fuel range.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The result of requesting to unsubscribe to the instantaneous fuel consumption in microlitres.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The result of requesting to unsubscribe to the external temperature in degrees celsius.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The result of requesting to unsubscribe to the PRNDL status.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The result of requesting to unsubscribe to the tireStatus.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>The result of requesting to unsubscribe to the odometer in km.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the seat belts.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The result of requesting to unsubscribe to the body information including power modes.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The result of requesting to unsubscribe to the device status including signal and battery strength.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The result of requesting to unsubscribe to the status of the brake pedal.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the wipers.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the head lamps.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The result of requesting to unsubscribe to the estimated percentage of remaining oil life of the engine.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>The result of requesting to unsubscribe to the torque value for engine (in Nm) on non-diesel variants.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>The result of requesting to unsubscribe to the accelerator pedal position (percentage depressed)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>The result of requesting to unsubscribe to the current angle of the steering wheel (in deg)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>The result of requesting to unsubscribe to the emergency call info</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The result of requesting to unsubscribe to the airbag status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>The result of requesting to unsubscribe to the emergency event</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"<p>The result of requesting to unsubscribe to the cluster modes</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>The result of requesting to unsubscribe to the myKey status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The result of requesting to unsubscribe to the electronic parking brake status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The result of requesting to unsubscribe to the turn signal</p>","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":"<p>Convenience init for unsubscribing to all possible vehicle data items.</p>","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":"<p>Convenience init for unsubscribing to all possible vehicle data items.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)gps":{"name":"gps","abstract":"<p>If true, unsubscribes from GPS</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)speed":{"name":"speed","abstract":"<p>If true, unsubscribes from Speed</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"<p>If true, unsubscribes from RPM</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>If true, unsubscribes from Fuel Level</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>If true, unsubscribes from Fuel Level State</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>If true, unsubscribes from Fuel Range</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>If true, unsubscribes from Instant Fuel Consumption</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>If true, unsubscribes from External Temperature</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"<p>If true, unsubscribes from PRNDL</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>If true, unsubscribes from Tire Pressure</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"<p>If true, unsubscribes from Odometer</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>If true, unsubscribes from Belt Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>If true, unsubscribes from Body Information</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>If true, unsubscribes from Device Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>If true, unsubscribes from Driver Braking</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>If true, unsubscribes from Wiper Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>If true, unsubscribes from Head Lamp Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>If true, unsubscribes from Engine Oil Life</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>If true, unsubscribes from Engine Torque</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>If true, unsubscribes from Acc Pedal Position</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>If true, unsubscribes from Steering Wheel Angle data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>If true, unsubscribes from eCallInfo</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>If true, unsubscribes from Airbag Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>If true, unsubscribes from Emergency Event</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>If true, unsubscribes from Cluster Mode Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"<p>If true, unsubscribes from My Key</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, unsubscribes to the Electronic Parking Brake Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, unsubscribes to the Turn Signal</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(im)initWithButtonName:":{"name":"-initWithButtonName:","abstract":"<p>Undocumented</p>","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(py)buttonName":{"name":"buttonName","abstract":"<p>A name of the button to unsubscribe from","parent_name":"SDLUnsubscribeButton"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(im)initWithNavigationText:turnIcon:":{"name":"-initWithNavigationText:turnIcon:","abstract":"<p>Undocumented</p>","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)navigationText":{"name":"navigationText","abstract":"<p>Individual turn text. Must provide at least text or icon for a given turn</p>","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)turnIcon":{"name":"turnIcon","abstract":"<p>Individual turn icon. Must provide at least text or icon for a given turn</p>","parent_name":"SDLTurn"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventDelegate":{"name":"touchEventDelegate","abstract":"<p>Notified of processed touches such as pinches, pans, and taps</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventHandler":{"name":"touchEventHandler","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapDistanceThreshold":{"name":"tapDistanceThreshold","abstract":"<p>Distance between two taps on the screen, in the head unit&rsquo;s coordinate system, used for registering double-tap callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)panDistanceThreshold":{"name":"panDistanceThreshold","abstract":"<p>Minimum distance for a pan gesture in the head unit&rsquo;s coordinate system, used for registering pan callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapTimeThreshold":{"name":"tapTimeThreshold","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold":{"name":"movementTimeThreshold","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)enableSyncedPanning":{"name":"enableSyncedPanning","abstract":"<p>If set to NO, the display link syncing will be ignored and <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold\">movementTimeThreshold</a></code> will be used. Defaults to YES.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEnabled":{"name":"touchEnabled","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)cancelPendingTouches":{"name":"-cancelPendingTouches","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:":{"name":"-initWithHitTester:","abstract":"<p>Initialize a touch manager with a hit tester if available</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)syncFrame":{"name":"-syncFrame","abstract":"<p>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.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)pressAvailable":{"name":"pressAvailable","abstract":"<p>Whether or not long presses are available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)multiTouchAvailable":{"name":"multiTouchAvailable","abstract":"<p>Whether or not multi-touch (e.g. a pinch gesture) is available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)doublePressAvailable":{"name":"doublePressAvailable","abstract":"<p>Whether or not a double tap is available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)touchEventId":{"name":"touchEventId","abstract":"<p>A touch&rsquo;s unique identifier. The application can track the current touch events by id.</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)timeStamp":{"name":"timeStamp","abstract":"<p>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.</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)coord":{"name":"coord","abstract":"<p>The touch&rsquo;s coordinate</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)x":{"name":"x","abstract":"<p>The x value of the touch coordinate</p>","parent_name":"SDLTouchCoord"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)y":{"name":"y","abstract":"<p>The y value of the touch coordinate</p>","parent_name":"SDLTouchCoord"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(im)initWithTouchEvent:":{"name":"-initWithTouchEvent:","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)identifier":{"name":"identifier","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)location":{"name":"location","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)timeStamp":{"name":"timeStamp","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isFirstFinger":{"name":"isFirstFinger","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isSecondFinger":{"name":"isSecondFinger","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)pressureTelltale":{"name":"pressureTelltale","abstract":"<p>Status of the Tire Pressure Telltale. See WarningLightStatus.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftFront":{"name":"leftFront","abstract":"<p>The status of the left front tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightFront":{"name":"rightFront","abstract":"<p>The status of the right front tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftRear":{"name":"leftRear","abstract":"<p>The status of the left rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightRear":{"name":"rightRear","abstract":"<p>The status of the right rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerLeftRear":{"name":"innerLeftRear","abstract":"<p>The status of the inner left rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerRightRear":{"name":"innerRightRear","abstract":"<p>The status of the innter right rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)name":{"name":"name","abstract":"<p>The enumeration identifying the field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)characterSet":{"name":"characterSet","abstract":"<p>The character set that is supported in this field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)width":{"name":"width","abstract":"<p>The number of characters in one row of this field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)rows":{"name":"rows","abstract":"<p>The number of rows for this text field.</p>","parent_name":"SDLTextField"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:":{"name":"-initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:","abstract":"<p>Undocumented</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryColor:secondaryColor:backgroundColor:":{"name":"-initWithPrimaryColor:secondaryColor:backgroundColor:","abstract":"<p>Undocumented</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)primaryColor":{"name":"primaryColor","abstract":"<p>The <q>primary</q> 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 <code>mediaClockTimer</code> bar and the highlight color of soft buttons.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)secondaryColor":{"name":"secondaryColor","abstract":"<p>The <q>secondary</q> 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.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The background color to be used on the template. If the OEM does not support this parameter, assume on <q>dayColorScheme</q> that this will be a light color, and on <q>nightColorScheme</q> a dark color. You should do the same for your custom schemes.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithUnit:value:":{"name":"-initWithUnit:value:","abstract":"<p>Undocumented</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)unit":{"name":"unit","abstract":"<p>Temperature Unit</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)value":{"name":"value","abstract":"<p>Temperature Value in TemperatureUnit specified unit. Range depends on OEM and is not checked by SDL.</p>","parent_name":"SDLTemperature"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(im)initWithText:type:":{"name":"-initWithText:type:","abstract":"<p>Initialize with text and a type</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)textChunksFromString:":{"name":"+textChunksFromString:","abstract":"<p>Create TTS using text</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)sapiChunksFromString:":{"name":"+sapiChunksFromString:","abstract":"<p>Create TTS using SAPI</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)lhPlusChunksFromString:":{"name":"+lhPlusChunksFromString:","abstract":"<p>Create TTS using LH Plus</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)prerecordedChunksFromString:":{"name":"+prerecordedChunksFromString:","abstract":"<p>Create TTS using prerecorded chunks</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)silenceChunks":{"name":"+silenceChunks","abstract":"<p>Create TTS using silence</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)fileChunksWithName:":{"name":"+fileChunksWithName:","abstract":"<p>Create <q>TTS</q> to play an audio file previously uploaded to the system.</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)text":{"name":"text","abstract":"<p>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 <q>type</q> field.</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)type":{"name":"type","abstract":"<p>The type of information in the <q>text</q> field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).</p>","parent_name":"SDLTTSChunk"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>If returned, the platform supports on-screen SoftButtons</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>If returned, the platform supports custom on-screen Presets</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)speechCapabilities":{"name":"speechCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)prerecordedSpeechCapabilities":{"name":"prerecordedSpeechCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)vrCapability":{"name":"vrCapability","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)pcmStreamCapability":{"name":"pcmStreamCapability","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability":{"name":"navigationCapability","abstract":"<p>If returned, the platform supports navigation</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability":{"name":"phoneCapability","abstract":"<p>If returned, the platform supports making phone calls</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"<p>If returned, the platform supports video streaming</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"<p>If returned, the platform supports remote control capabilities</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)init":{"name":"-init","abstract":"<p>Init is unavailable. Dependencies must be injected using initWithConnectionManager:</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"<p>Creates a new system capability manager with a specified connection manager</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager. This method is used internally.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)updateCapabilityType:completionHandler:":{"name":"-updateCapabilityType:completionHandler:","abstract":"<p>Retrieves a capability type from the remote system. This function must be called in order to retrieve the values of <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability\">navigationCapability</a></code>, <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability\">phoneCapability</a></code>, <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability\">videoStreamingCapability</a></code> and <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability\">remoteControlCapability</a></code>. 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.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithNavigationCapability:":{"name":"-initWithNavigationCapability:","abstract":"<p>Undocumented</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithPhoneCapability:":{"name":"-initWithPhoneCapability:","abstract":"<p>Undocumented</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithVideoStreamingCapability:":{"name":"-initWithVideoStreamingCapability:","abstract":"<p>Undocumented</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithRemoteControlCapability:":{"name":"-initWithRemoteControlCapability:","abstract":"<p>Undocumented</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"<p>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.</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)navigationCapability":{"name":"navigationCapability","abstract":"<p>Describes extended capabilities for onboard navigation system</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)phoneCapability":{"name":"phoneCapability","abstract":"<p>Describes extended capabilities of the module&rsquo;s phone feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"<p>Describes extended capabilities of the module&rsquo;s phone feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"<p>Describes extended capabilities of the module&rsquo;s phone feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"<p>Undocumented</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"<p>The major version indicates versions that is not-compatible to previous versions</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"<p>The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"<p>Allows backward-compatible fixes to the API without increasing the minor version of the interface</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The result of requesting to subscribe to the GPSData.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The result of requesting to subscribe to the vehicle speed in kilometers per hour.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The result of requesting to subscribe to the number of revolutions per minute of the engine.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The result of requesting to subscribe to the fuel level in the tank (percentage)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The result of requesting to subscribe to the fuel level state.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The result of requesting to subscribe to the fuel range.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The result of requesting to subscribe to the external temperature in degrees celsius.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The result of requesting to subscribe to the PRNDL status.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The result of requesting to subscribe to the tireStatus.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>The result of requesting to subscribe to the odometer in km.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The result of requesting to subscribe to the status of the seat belts.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The result of requesting to subscribe to the body information including power modes.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The result of requesting to subscribe to the device status including signal and battery strength.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The result of requesting to subscribe to the status of the brake pedal.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The result of requesting to subscribe to the status of the wipers.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>The result of requesting to subscribe to the status of the head lamps.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The result of requesting to subscribe to the estimated percentage of remaining oil life of the engine.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>The result of requesting to subscribe to the accelerator pedal position (percentage depressed)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>The result of requesting to subscribe to the current angle of the steering wheel (in deg)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>The result of requesting to subscribe to the emergency call info</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The result of requesting to subscribe to the airbag status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>The result of requesting to subscribe to the emergency event</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"<p>The result of requesting to subscribe to the cluster modes</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>The result of requesting to subscribe to the myKey status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The result of requesting to subscribe to the electronic parking brake status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The result of requesting to subscribe to the turn signal</p>","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":"<p>Convenience init for subscribing to all possible vehicle data items.</p>","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":"<p>Convenience init for subscribing to all possible vehicle data items.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, subscribes GPS data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, subscribes Speed data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, subscribes RPM data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, subscribes Fuel Level data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, subscribes Fuel Level State data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>A boolean value. If true, subscribes Fuel Range data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, subscribes Instant Fuel Consumption data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, subscribes External Temperature data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, subscribes PRNDL data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, subscribes Tire Pressure status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, subscribes Odometer data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, subscribes Belt Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, subscribes Body Information data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, subscribes Device Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, subscribes Driver Braking data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, subscribes Wiper Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, subscribes Head Lamp Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>A boolean value. If true, subscribes to Engine Oil Life data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, subscribes Engine Torque data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, subscribes Acc Pedal Position data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>A boolean value. If true, subscribes Steering Wheel Angle data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>A boolean value. If true, subscribes eCall Info data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>A boolean value. If true, subscribes Airbag Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>A boolean value. If true, subscribes Emergency Event data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>A boolean value. If true, subscribes Cluster Mode Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"<p>A boolean value. If true, subscribes myKey data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, subscribes to the electronic parking brake status.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, subscribes to the turn signal status.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Construct a SDLSubscribeButton with a handler callback when an event occurs.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithButtonName:handler:":{"name":"-initWithButtonName:handler:","abstract":"<p>Undocumented</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)handler":{"name":"handler","abstract":"<p>A handler that will let you know when the button you subscribed to is selected.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)buttonName":{"name":"buttonName","abstract":"<p>The name of the button to subscribe to","parent_name":"SDLSubscribeButton"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager":{"name":"touchManager","abstract":"<p>Touch Manager responsible for providing touch event notifications.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioManager":{"name":"audioManager","abstract":"<p>Audio Manager responsible for managing streaming audio.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)rootViewController":{"name":"rootViewController","abstract":"<p>This property is used for SDLCarWindow, the ability to stream any view controller. To start, you must set an initial view controller on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaConfiguration.html\">SDLStreamingMediaConfiguration</a></code> <code>rootViewController</code>. After streaming begins, you can replace that view controller with a new root by placing the new view controller into this property.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)focusableItemManager":{"name":"focusableItemManager","abstract":"<p>A haptic interface that can be updated to reparse views within the window you&rsquo;ve provided. Send a <code><a href=\"36f8f5912051ae747ef441d6511ca4cbConstants.html#/c:@SDLDidUpdateProjectionView\">SDLDidUpdateProjectionView</a></code> notification or call the <code>updateInterfaceLayout</code> method to reparse. The <q>output</q> of this haptic interface occurs in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager\">touchManager</a></code> property where it will call the delegate.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)streamingSupported":{"name":"streamingSupported","abstract":"<p>Whether or not video streaming is supported</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoConnected":{"name":"videoConnected","abstract":"<p>Whether or not the video session is connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoEncrypted":{"name":"videoEncrypted","abstract":"<p>Whether or not the video session is encrypted. This may be different than the requestedEncryptionType.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioConnected":{"name":"audioConnected","abstract":"<p>Whether or not the audio session is connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioEncrypted":{"name":"audioEncrypted","abstract":"<p>Whether or not the audio session is encrypted. This may be different than the requestedEncryptionType.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoStreamingPaused":{"name":"videoStreamingPaused","abstract":"<p>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.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)screenSize":{"name":"screenSize","abstract":"<p>This is the current screen size of a connected display. This will be the size the video encoder uses to encode the raw image data.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoFormat":{"name":"videoFormat","abstract":"<p>This is the agreed upon format of video encoder that is in use, or nil if not currently connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)supportedFormats":{"name":"supportedFormats","abstract":"<p>A list of all supported video formats by this manager</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)pixelBufferPool":{"name":"pixelBufferPool","abstract":"<p>The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)requestedEncryptionType":{"name":"requestedEncryptionType","abstract":"<p>The requested encryption type when a session attempts to connect. This setting applies to both video and audio sessions.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"<p>Create a new streaming media manager for navigation and VPM apps with a specified configuration</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startWithProtocol:":{"name":"-startWithProtocol:","abstract":"<p>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 <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startAudioWithProtocol:":{"name":"-startAudioWithProtocol:","abstract":"<p>Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startVideoWithProtocol:":{"name":"-startVideoWithProtocol:","abstract":"<p>Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopAudio":{"name":"-stopAudio","abstract":"<p>Stop the audio feature of the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopVideo":{"name":"-stopVideo","abstract":"<p>Stop the video feature of the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:":{"name":"-sendVideoData:","abstract":"<p>This method receives raw image data and will run iOS8+&lsquo;s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:presentationTimestamp:":{"name":"-sendVideoData:presentationTimestamp:","abstract":"<p>This method receives raw image data and will run iOS8+&lsquo;s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"<p>This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"<p>Set security managers which could be used. This is primarily used with video streaming applications to authenticate and perhaps encrypt traffic data.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)maximumDesiredEncryption":{"name":"maximumDesiredEncryption","abstract":"<p>What encryption level video/audio streaming should be. The default is SDLStreamingEncryptionFlagAuthenticateAndEncrypt.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)customVideoEncoderSettings":{"name":"customVideoEncoderSettings","abstract":"<p>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.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)dataSource":{"name":"dataSource","abstract":"<p>Usable to change run time video stream setup behavior. Only use this and modify the results if you <em>really</em> know what you&rsquo;re doing. The head unit defaults are generally good.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController":{"name":"rootViewController","abstract":"<p>Set the initial view controller your video streaming content is within.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)carWindowRenderingType":{"name":"carWindowRenderingType","abstract":"<p>Declares if CarWindow will use layer rendering or view rendering. Defaults to layer rendering.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)enableForcedFramerateSync":{"name":"enableForcedFramerateSync","abstract":"<p>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 <em>must</em> be YES. If NO, <code>enableSyncedPanning</code> on SDLTouchManager will be set to NO. Defaults to YES.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)allowMultipleViewControllerOrientations":{"name":"allowMultipleViewControllerOrientations","abstract":"<p>When YES, the StreamingMediaManager will disable its internal checks that the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController\">rootViewController</a></code> only has one <code>supportedOrientation</code>. Having multiple orientations can cause streaming issues. If you wish to disable this check, set it to YES. Defaults to NO.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)init":{"name":"-init","abstract":"<p>Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you&rsquo;d like custom video encoder settings, you can set the property manually.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"<p>Manually set all the properties to the streaming media configuration</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:":{"name":"-initWithSecurityManagers:","abstract":"<p>Create a secure configuration for each of the security managers provided.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfigurationWithSecurityManagers:":{"name":"+secureConfigurationWithSecurityManagers:","abstract":"<p>Create a secure configuration for each of the security managers provided.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)insecureConfiguration":{"name":"+insecureConfiguration","abstract":"<p>Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you&rsquo;d like custom video encoder settings, you can set the property manually. This is equivalent to <code>init</code>.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingInsecureConfigurationWithInitialViewController:":{"name":"+autostreamingInsecureConfigurationWithInitialViewController:","abstract":"<p>Create a CarWindow insecure configuration with a view controller</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithSecurityManagers:initialViewController:":{"name":"+autostreamingSecureConfigurationWithSecurityManagers:initialViewController:","abstract":"<p>Create a CarWindow secure configuration with a view controller and security managers</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(im)initWithCountryCode:fccFacilityId:":{"name":"-initWithCountryCode:fccFacilityId:","abstract":"<p>Undocumented</p>","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)countryCode":{"name":"countryCode","abstract":"<p>@abstract Binary Representation of ITU Country Code. USA Code is 001.</p>","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)fccFacilityId":{"name":"fccFacilityId","abstract":"<p>@abstract Binary representation of unique facility ID assigned by the FCC","parent_name":"SDLStationIDNumber"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithHours:minutes:seconds:":{"name":"-initWithHours:minutes:seconds:","abstract":"<p>Undocumented</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)hours":{"name":"hours","abstract":"<p>The hour of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)minutes":{"name":"minutes","abstract":"<p>The minute of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)seconds":{"name":"seconds","abstract":"<p>The second of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTS:":{"name":"-initWithTTS:","abstract":"<p>Undocumented</p>","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTSChunks:":{"name":"-initWithTTSChunks:","abstract":"<p>Undocumented</p>","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of TTSChunk structs which, taken together, specify the phrase to be spoken</p>","parent_name":"SDLSpeak"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)name":{"name":"name","abstract":"<p>The name of this soft button state</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)artwork":{"name":"artwork","abstract":"<p>The artwork to be used with this button or nil if it is text-only</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)text":{"name":"text","abstract":"<p>The text to be used with this button or nil if it is image-only</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)highlighted":{"name":"highlighted","abstract":"<p>Whether or not the button should be highlighted on the UI</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)systemAction":{"name":"systemAction","abstract":"<p>A special system action</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)softButton":{"name":"softButton","abstract":"<p>An SDLSoftButton describing this state</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:image:":{"name":"-initWithStateName:text:image:","abstract":"<p>Create the soft button state. Either the text or artwork or both may be set.</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:artwork:":{"name":"-initWithStateName:text:artwork:","abstract":"<p>Create the soft button state. Either the text or artwork or both may be set.</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)name":{"name":"name","abstract":"<p>The name of this button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states":{"name":"states","abstract":"<p>All states available to this button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentState":{"name":"currentState","abstract":"<p>The name of the current state of this soft button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentStateSoftButton":{"name":"currentStateSoftButton","abstract":"<p>Undocumented</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)eventHandler":{"name":"eventHandler","abstract":"<p>The handler to be called when the button is in the current state and is pressed</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:states:initialStateName:handler:":{"name":"-initWithName:states:initialStateName:handler:","abstract":"<p>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.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:state:handler:":{"name":"-initWithName:state:handler:","abstract":"<p>Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToStateNamed:":{"name":"-transitionToStateNamed:","abstract":"<p>Transition the soft button to another state in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states\">states</a></code> property. The wrapper considers all transitions valid (assuming a state with that name exists).</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToNextState":{"name":"-transitionToNextState","abstract":"<p>Transition the soft button to the next state of the array set when in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states\">states</a></code> property</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)stateWithName:":{"name":"-stateWithName:","abstract":"<p>Return a state from the state array with a specific name.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"<p>The button supports a short press.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"<p>The button supports a LONG press.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"<p>The button supports <q>button down</q> and <q>button up</q>.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)imageSupported":{"name":"imageSupported","abstract":"<p>The button supports referencing a static or dynamic image.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)handler":{"name":"handler","abstract":"<p>Undocumented</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)type":{"name":"type","abstract":"<p>Describes whether this soft button displays only text, only an image, or both</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)text":{"name":"text","abstract":"<p>Optional text to display (if defined as TEXT or BOTH type)</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)image":{"name":"image","abstract":"<p>Optional image struct for SoftButton (if defined as IMAGE or BOTH type)</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)isHighlighted":{"name":"isHighlighted","abstract":"<p>Displays in an alternate mode, e.g. with a colored background or foreground. Depends on the IVI system.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)softButtonID":{"name":"softButtonID","abstract":"<p>Value which is returned via OnButtonPress / OnButtonEvent</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)systemAction":{"name":"systemAction","abstract":"<p>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.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSliderResponse.html#/c:objc(cs)SDLSliderResponse(py)sliderPosition":{"name":"sliderPosition","abstract":"<p>The selected position of the slider.</p>","parent_name":"SDLSliderResponse"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:":{"name":"-initWithNumTicks:position:","abstract":"<p>Create an SDLSlider 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.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooter:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooter:timeout:","abstract":"<p>Create an SDLSlider with all required data and a static footer (or no footer).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:","abstract":"<p>Create an SDLSlider with all required data and a dynamic footer (or no footer).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)numTicks":{"name":"numTicks","abstract":"<p>Represents a number of selectable items on a horizontal axis</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)position":{"name":"position","abstract":"<p>An Initial position of slider control</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderHeader":{"name":"sliderHeader","abstract":"<p>A text header to display</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderFooter":{"name":"sliderFooter","abstract":"<p>A text footer to display</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)timeout":{"name":"timeout","abstract":"<p>An App defined timeout in milliseconds</p>","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":"<p>The status of TPMS for this particular tire</p>","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)pressure":{"name":"pressure","abstract":"<p>The pressure value of this particular tire in kPa (kilopascals)</p>","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":"<p>Undocumented</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText1":{"name":"navigationText1","abstract":"<p>The first line of text in a multi-line overlay screen.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText2":{"name":"navigationText2","abstract":"<p>The second line of text in a multi-line overlay screen.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)eta":{"name":"eta","abstract":"<p>Estimated Time of Arrival time at final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)timeToDestination":{"name":"timeToDestination","abstract":"<p>The amount of time needed to reach the final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)totalDistance":{"name":"totalDistance","abstract":"<p>The distance to the final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)turnIcon":{"name":"turnIcon","abstract":"<p>An icon to show with the turn description</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)nextTurnIcon":{"name":"nextTurnIcon","abstract":"<p>An icon to show with the next turn description</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuver":{"name":"distanceToManeuver","abstract":"<p>Fraction of distance till next maneuver (starting from when AlertManeuver is triggered). Used to calculate progress bar.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuverScale":{"name":"distanceToManeuverScale","abstract":"<p>Distance till next maneuver (starting from) from previous maneuver. Used to calculate progress bar.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)maneuverComplete":{"name":"maneuverComplete","abstract":"<p>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.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)softButtons":{"name":"softButtons","abstract":"<p>Three dynamic SoftButtons available (first SoftButton is fixed to <q>Turns</q>). If omitted on supported displays, the currently displayed SoftButton values will not change.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:":{"name":"-initWithMainField1:mainField2:alignment:","abstract":"<p>Undocumented</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:","abstract":"<p>Undocumented</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField1":{"name":"mainField1","abstract":"<p>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":"<p>The text displayed on the second display line of a two-line display</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField3":{"name":"mainField3","abstract":"<p>The text displayed on the first display line of the second page</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField4":{"name":"mainField4","abstract":"<p>The text displayed on the second display line of the second page</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)alignment":{"name":"alignment","abstract":"<p>The alignment that Specifies how mainField1 and mainField2 text","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)statusBar":{"name":"statusBar","abstract":"<p>Text in the Status Bar</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaClock":{"name":"mediaClock","abstract":"<p>This property is deprecated use SetMediaClockTimer instead.","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaTrack":{"name":"mediaTrack","abstract":"<p>The text in the track field</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)graphic":{"name":"graphic","abstract":"<p>An image to be shown on supported displays</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"<p>An image to be shown on supported displays</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)softButtons":{"name":"softButtons","abstract":"<p>The the Soft buttons defined by the App</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)customPresets":{"name":"customPresets","abstract":"<p>The Custom Presets defined by the App</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)metadataTags":{"name":"metadataTags","abstract":"<p>Text Field Metadata</p>","parent_name":"SDLShow"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:":{"name":"-initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:":{"name":"-initWithUpdateMode:hours:minutes:seconds:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:":{"name":"-initWithUpdateMode:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)startTime":{"name":"startTime","abstract":"<p>A Start Time with specifying hour, minute, second values</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)endTime":{"name":"endTime","abstract":"<p>An END time of type SDLStartTime, specifying hour, minute, second values</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)updateMode":{"name":"updateMode","abstract":"<p>The media clock/timer update mode (COUNTUP/COUNTDOWN/PAUSE/RESUME)</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)audioStreamingIndicator":{"name":"audioStreamingIndicator","abstract":"<p>The audio streaming indicator used for a play/pause button.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetInteriorVehicleDataResponse.html#/c:objc(cs)SDLSetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"<p>The new module data for the requested module</p>","parent_name":"SDLSetInteriorVehicleDataResponse"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(im)initWithModuleData:":{"name":"-initWithModuleData:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"<p>The module data to set for the requested RC module.</p>","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:":{"name":"-initWithHelpText:timeoutText:","abstract":"<p>Initialize SetGlobalProperties with help text and timeout text</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:","abstract":"<p>Initialize SetGlobalProperties with help text, timeout text, help title, and help items</p>","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":"<p>Initialize SetGlobalProperties with all possible items</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Help prompt for when the user asks for help with an interface prompt</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>Help prompt for when an interface prompt times out</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelpTitle":{"name":"vrHelpTitle","abstract":"<p>Sets a voice recognition Help Title</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelp":{"name":"vrHelp","abstract":"<p>Sets the items listed in the VR help screen used in an interaction started by Push to Talk</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuTitle":{"name":"menuTitle","abstract":"<p>Text for the menu button label</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuIcon":{"name":"menuIcon","abstract":"<p>Icon for the menu button</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)keyboardProperties":{"name":"keyboardProperties","abstract":"<p>On-screen keyboard (perform interaction) configuration</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>The display capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>The button capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>The soft button capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>The preset bank capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithLayout:":{"name":"-initWithLayout:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:dayColorScheme:nightColorScheme:":{"name":"-initWithPredefinedLayout:dayColorScheme:nightColorScheme:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)displayLayout":{"name":"displayLayout","abstract":"<p>A display layout. Predefined or dynamically created screen layout.","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to be used on a head unit using a <q>light</q> or <q>day</q> color scheme. The OEM may only support this theme if their head unit only has a light color scheme.</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to be used on a head unit using a <q>dark</q> or <q>night</q> color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Undocumented</p>","parent_name":"SDLSetAppIcon"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(py)syncFileName":{"name":"syncFileName","abstract":"<p>A file reference name","parent_name":"SDLSetAppIcon"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>The longitudinal coordinate of the location.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>The latitudinal coordinate of the location.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationName":{"name":"locationName","abstract":"<p>Name / title of intended location</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationDescription":{"name":"locationDescription","abstract":"<p>Description of the intended location / establishment</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)addressLines":{"name":"addressLines","abstract":"<p>Location address for display purposes only</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)phoneNumber":{"name":"phoneNumber","abstract":"<p>Phone number of intended location / establishment</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationImage":{"name":"locationImage","abstract":"<p>Image / icon of intended location</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)deliveryMode":{"name":"deliveryMode","abstract":"<p>Mode in which the sendLocation request is sent</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)timeStamp":{"name":"timeStamp","abstract":"<p>Arrival time of Location. If multiple SendLocations are sent, this will be used for sorting as well.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address":{"name":"address","abstract":"<p>Address to be used for setting destination</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(im)initWithHapticRectData:":{"name":"-initWithHapticRectData:","abstract":"<p>Constructs a new SDLSendHapticData object indicated by the hapticSpatialData parameter</p>","parent_name":"SDLSendHapticData"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(py)hapticRectData":{"name":"hapticRectData","abstract":"<p>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</p>","parent_name":"SDLSendHapticData"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:action:":{"name":"-initWithId:action:","abstract":"<p>@abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:label:action:":{"name":"-initWithId:label:action:","abstract":"<p>@abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)id":{"name":"id","abstract":"<p>@abstract id of the action to be performed.</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)label":{"name":"label","abstract":"<p>@abstract label of the action to be performed.</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)action":{"name":"action","abstract":"<p>@abstract type of action to be performed</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Constructs a newly allocated SDLSeatControlData object with cushion and firmness</p>","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":"<p>Constructs a newly allocated SDLSeatControlData object with cushion and firmness</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)id":{"name":"id","abstract":"<p>@abstract id of seat that is a remote controllable seat.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingEnabled":{"name":"heatingEnabled","abstract":"<p>@abstract Whether or not heating is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingEnabled":{"name":"coolingEnabled","abstract":"<p>@abstract Whether or not cooling is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingLevel":{"name":"heatingLevel","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingLevel":{"name":"coolingLevel","abstract":"<p>@abstract cooling level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)horizontalPosition":{"name":"horizontalPosition","abstract":"<p>@abstract horizontal Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)verticalPosition":{"name":"verticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)frontVerticalPosition":{"name":"frontVerticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backVerticalPosition":{"name":"backVerticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backTiltAngle":{"name":"backTiltAngle","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportHorizontalPosition":{"name":"headSupportHorizontalPosition","abstract":"<p>@abstract head Support Horizontal Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportVerticalPosition":{"name":"headSupportVerticalPosition","abstract":"<p>@abstract head Support Vertical Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageEnabled":{"name":"massageEnabled","abstract":"<p>@abstract Whether or not massage is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageMode":{"name":"massageMode","abstract":"<p>@abstract Array of massage mode data.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageCushionFirmness":{"name":"massageCushionFirmness","abstract":"<p>@abstract Array of firmness of a cushion.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)memory":{"name":"memory","abstract":"<p>@abstract type of action to be performed</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@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":"<p>@abstract Whether or not heating is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingEnabledAvailable":{"name":"coolingEnabledAvailable","abstract":"<p>@abstract Whether or not cooling is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingLevelAvailable":{"name":"heatingLevelAvailable","abstract":"<p>@abstract Whether or not heating level is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingLevelAvailable":{"name":"coolingLevelAvailable","abstract":"<p>@abstract Whether or not cooling level is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)horizontalPositionAvailable":{"name":"horizontalPositionAvailable","abstract":"<p>@abstract Whether or not horizontal Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)verticalPositionAvailable":{"name":"verticalPositionAvailable","abstract":"<p>@abstract Whether or not vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)frontVerticalPositionAvailable":{"name":"frontVerticalPositionAvailable","abstract":"<p>@abstract Whether or not front Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backVerticalPositionAvailable":{"name":"backVerticalPositionAvailable","abstract":"<p>@abstract Whether or not back Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backTiltAngleAvailable":{"name":"backTiltAngleAvailable","abstract":"<p>@abstract Whether or not backTilt Angle Available is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportHorizontalPositionAvailable":{"name":"headSupportHorizontalPositionAvailable","abstract":"<p>@abstract Whether or not head Supports for Horizontal Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportVerticalPositionAvailable":{"name":"headSupportVerticalPositionAvailable","abstract":"<p>@abstract Whether or not head Supports for Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageEnabledAvailable":{"name":"massageEnabledAvailable","abstract":"<p>@abstract Whether or not massage Enabled is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageModeAvailable":{"name":"massageModeAvailable","abstract":"<p>@abstract Whether or not massage Mode is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageCushionFirmnessAvailable":{"name":"massageCushionFirmnessAvailable","abstract":"<p>@abstract Whether or not massage Cushion Firmness is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)memoryAvailable":{"name":"memoryAvailable","abstract":"<p>@abstract Whether or not memory is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:":{"name":"-initWithMessage:","abstract":"<p>Undocumented</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:":{"name":"-initWithMessage:timeout:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)scrollableMessageBody":{"name":"scrollableMessageBody","abstract":"<p>A Body of text that can include newlines and tabs","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)timeout":{"name":"timeout","abstract":"<p>Gets/Sets an App defined timeout. Indicates how long of a timeout in milliseconds from the","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)softButtons":{"name":"softButtons","abstract":"<p>Gets/Sets App defined SoftButtons.If omitted on supported displays, only the","parent_name":"SDLScrollableMessage"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)resolution":{"name":"resolution","abstract":"<p>The resolution of the prescribed screen area</p>","parent_name":"SDLScreenParams"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)touchEventAvailable":{"name":"touchEventAvailable","abstract":"<p>Types of screen touch events available in screen area</p>","parent_name":"SDLScreenParams"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1":{"name":"textField1","abstract":"<p>The top text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2":{"name":"textField2","abstract":"<p>The second text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3":{"name":"textField3","abstract":"<p>The third text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4":{"name":"textField4","abstract":"<p>The fourth text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)mediaTrackTextField":{"name":"mediaTrackTextField","abstract":"<p>The media text field available within the media layout. Often less emphasized than textField(1-4)</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)primaryGraphic":{"name":"primaryGraphic","abstract":"<p>The primary graphic within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"<p>A secondary graphic used in some template layouts</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textAlignment":{"name":"textAlignment","abstract":"<p>What alignment textField(1-4) should use</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1Type":{"name":"textField1Type","abstract":"<p>The type of data textField1 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2Type":{"name":"textField2Type","abstract":"<p>The type of data textField2 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3Type":{"name":"textField3Type","abstract":"<p>The type of data textField3 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4Type":{"name":"textField4Type","abstract":"<p>The type of data textField4 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)softButtonObjects":{"name":"softButtonObjects","abstract":"<p>The current list of soft buttons within a template layout. Set this array to change the displayed soft buttons.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menu":{"name":"menu","abstract":"<p>The current list of menu cells displayed in the app&rsquo;s menu.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The current list of voice commands available for the user to speak and be recognized by the IVI&rsquo;s voice recognition engine.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)keyboardConfiguration":{"name":"keyboardConfiguration","abstract":"<p>The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)preloadedChoices":{"name":"preloadedChoices","abstract":"<p>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.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)initWithConnectionManager:fileManager:":{"name":"-initWithConnectionManager:fileManager:","abstract":"<p>Initialize a screen manager</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>Starts the manager and all sub-managers</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)beginUpdates":{"name":"-beginUpdates","abstract":"<p>Delays all screen updates until endUpdatesWithCompletionHandler: is called.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdates":{"name":"-endUpdates","abstract":"<p>Update text fields with new text set into the text field properties. Pass an empty string <code>\\@&quot;&quot;</code> to clear the text field.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdatesWithCompletionHandler:":{"name":"-endUpdatesWithCompletionHandler:","abstract":"<p>Update text fields with new text set into the text field properties. Pass an empty string <code>\\@&quot;&quot;</code> to clear the text field.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)softButtonObjectNamed:":{"name":"-softButtonObjectNamed:","abstract":"<p>Undocumented</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)preloadChoices:withCompletionHandler:":{"name":"-preloadChoices:withCompletionHandler:","abstract":"<p>Preload cells to the head unit. This will <em>greatly</em> reduce the time taken to present a choice set. Any already matching a choice already on the head unit will be ignored. You <em>do not</em> 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.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)deleteChoices:":{"name":"-deleteChoices:","abstract":"<p>Delete loaded cells from the head unit. If the cells don&rsquo;t exist on the head unit they will be ignored.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentChoiceSet:mode:":{"name":"-presentChoiceSet:mode:","abstract":"<p>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&rsquo;re lazy&hellip;for real though, it&rsquo;s kind of confusing to the user and isn&rsquo;t recommended.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentSearchableChoiceSet:mode:withKeyboardDelegate:":{"name":"-presentSearchableChoiceSet:mode:withKeyboardDelegate:","abstract":"<p>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&rsquo;re lazy&hellip;for real though, it&rsquo;s kind of confusing to the user and isn&rsquo;t recommended.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentKeyboardWithInitialText:delegate:":{"name":"-presentKeyboardWithInitialText:delegate:","abstract":"<p>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.</p>","parent_name":"SDLScreenManager"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(im)initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:":{"name":"-initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:","abstract":"<p>Undocumented</p>","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationShortName":{"name":"stationShortName","abstract":"<p>@abstract Identifies the 4-alpha-character station call sign","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationIDNumber":{"name":"stationIDNumber","abstract":"<p>@abstract Used for network Application.","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLongName":{"name":"stationLongName","abstract":"<p>@abstract Identifies the station call sign or other identifying","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLocation":{"name":"stationLocation","abstract":"<p>@abstract Provides the 3-dimensional geographic station location</p>","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationMessage":{"name":"stationMessage","abstract":"<p>@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":"<p>Undocumented</p>","parent_name":"SDLResetGlobalProperties"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(py)properties":{"name":"properties","abstract":"<p>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":"<p>Undocumented</p>","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":"<p>Constructs a newly allocated SDLRemoteControlCapabilities object with given parameters</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)climateControlCapabilities":{"name":"climateControlCapabilities","abstract":"<p>If included, the platform supports RC climate controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)radioControlCapabilities":{"name":"radioControlCapabilities","abstract":"<p>If included, the platform supports RC radio controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>If included, the platform supports RC button controls with the included button names.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)seatControlCapabilities":{"name":"seatControlCapabilities","abstract":"<p>If included, the platform supports seat controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)audioControlCapabilities":{"name":"audioControlCapabilities","abstract":"<p>If included, the platform supports audio controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)hmiSettingsControlCapabilities":{"name":"hmiSettingsControlCapabilities","abstract":"<p>If included, the platform supports hmi setting controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)lightControlCapabilities":{"name":"lightControlCapabilities","abstract":"<p>If included, the platform supports light controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"<p>The RPC spec version supported by the connected IVI system.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)language":{"name":"language","abstract":"<p>The currently active VR+TTS language on the module. See <q>Language</q> for options.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>The currently active display language on the module. See <q>Language</q> for options.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>Contains information about the display for the SDL system to which the application is currently connected.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>Provides information about the capabilities of a SDL HMI button.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>Contains information about a SoftButton&rsquo;s capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>If returned, the platform supports custom on-screen Presets</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"<p>Specifies HMI Zones in the vehicle.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)speechCapabilities":{"name":"speechCapabilities","abstract":"<p>Contains information about TTS capabilities on the SDL platform.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)prerecordedSpeech":{"name":"prerecordedSpeech","abstract":"<p>Contains information about the speech capabilities on the SDL platform","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vrCapabilities":{"name":"vrCapabilities","abstract":"<p>The VR capabilities of the connected SDL platform.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"<p>Describes different audio type configurations for SDLPerformAudioPassThru, e.g. {8kHz,8-bit,PCM}</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)pcmStreamCapabilities":{"name":"pcmStreamCapabilities","abstract":"<p>Describes different audio type configurations for the audio PCM stream service, e.g. {8kHz,8-bit,PCM}</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vehicleType":{"name":"vehicleType","abstract":"<p>Specifies the connected vehicle&rsquo;s type</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)supportedDiagModes":{"name":"supportedDiagModes","abstract":"<p>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.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"<p>Specifies the availability of various SDL features.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlVersion":{"name":"sdlVersion","abstract":"<p>The SmartDeviceLink Core version</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)systemSoftwareVersion":{"name":"systemSoftwareVersion","abstract":"<p>The software version of the system that implements SmartDeviceLink Core</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)iconResumed":{"name":"iconResumed","abstract":"<p>Whether or not the app&rsquo;s icon already existed on the system and was resumed. That means that the icon does not need to be sent by the app.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithLifecycleConfiguration:":{"name":"-initWithLifecycleConfiguration:","abstract":"<p>Convenience init for registering the application with a lifecycle configuration.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:":{"name":"-initWithAppName:appId:languageDesired:","abstract":"<p>Convenience init for registering the application.</p>","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":"<p>Convenience init for registering the application.</p>","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":"<p>Convenience init for registering the application.</p>","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":"<p>Convenience init for registering the application with all possible options.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"<p>The version of the SDL interface</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appName":{"name":"appName","abstract":"<p>The mobile application&rsquo;s name. This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SmartDeviceLink.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ttsName":{"name":"ttsName","abstract":"<p>TTS string for VR recognition of the mobile application name.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"<p>A String representing an abbreviated version of the mobile application&rsquo;s name (if necessary) that will be displayed on the media screen.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)vrSynonyms":{"name":"vrSynonyms","abstract":"<p>Defines additional voice recognition commands</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)isMediaApplication":{"name":"isMediaApplication","abstract":"<p>Indicates if the application is a media or a non-media application.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)languageDesired":{"name":"languageDesired","abstract":"<p>A Language enumeration indicating what language the application intends to use for user interaction (TTS and VR).</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hmiDisplayLanguageDesired":{"name":"hmiDisplayLanguageDesired","abstract":"<p>An enumeration indicating what language the application intends to use for user interaction (Display).</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appHMIType":{"name":"appHMIType","abstract":"<p>A list of all applicable app types stating which classifications to be given to the app.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hashID":{"name":"hashID","abstract":"<p>ID used to uniquely identify current state of all app data that can persist through connection cycles (e.g. ignition cycles).</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)deviceInfo":{"name":"deviceInfo","abstract":"<p>Information about the connecting device</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appID":{"name":"appID","abstract":"<p>ID used to validate app with policy table entries</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)fullAppID":{"name":"fullAppID","abstract":"<p>A full UUID appID used to validate app with policy table entries.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appInfo":{"name":"appInfo","abstract":"<p>Information about the application running</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to be used on a head unit using a <q>light</q> or <q>day</q> color scheme. The OEM may only support this theme if their head unit only has a light color scheme.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to be used on a head unit using a <q>dark</q> or <q>night</q> color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithX:y:width:height:":{"name":"-initWithX:y:width:height:","abstract":"<p>Create a Rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithCGRect:":{"name":"-initWithCGRect:","abstract":"<p>Create a Rectangle from a CGRect</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)x":{"name":"x","abstract":"<p>The X-coordinate of the user control</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)y":{"name":"y","abstract":"<p>The Y-coordinate of the user control</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)width":{"name":"width","abstract":"<p>The width of the user control&rsquo;s bounding rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)height":{"name":"height","abstract":"<p>The height of the user control&rsquo;s bounding rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLReadDIDResponse.html#/c:objc(cs)SDLReadDIDResponse(py)didResult":{"name":"didResult","abstract":"<p>Array of requested DID results (with data if available).</p>","parent_name":"SDLReadDIDResponse"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(im)initWithECUName:didLocation:":{"name":"-initWithECUName:didLocation:","abstract":"<p>Undocumented</p>","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)ecuName":{"name":"ecuName","abstract":"<p>An ID of the vehicle module","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)didLocation":{"name":"didLocation","abstract":"<p>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":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","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":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyInteger":{"name":"frequencyInteger","abstract":"<p>The integer part of the frequency ie for 101.7 this value should be 101</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyFraction":{"name":"frequencyFraction","abstract":"<p>The fractional part of the frequency for 101.7 is 7</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)band":{"name":"band","abstract":"<p>Radio band value</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)rdsData":{"name":"rdsData","abstract":"<p>Read only parameter. See RDSData data type for details.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDs":{"name":"availableHDs","abstract":"<p>number of HD sub-channels if available</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdChannel":{"name":"hdChannel","abstract":"<p>Current HD sub-channel if available</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalStrength":{"name":"signalStrength","abstract":"<p>Signal Strength Value</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalChangeThreshold":{"name":"signalChangeThreshold","abstract":"<p>If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)radioEnable":{"name":"radioEnable","abstract":"<p>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</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)state":{"name":"state","abstract":"<p>Read only parameter. See RadioState data type for details.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdRadioEnable":{"name":"hdRadioEnable","abstract":"<p>True if the hd radio is on, false is the radio is off</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)sisData":{"name":"sisData","abstract":"<p>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":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","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":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>The short friendly name of the radio control module.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioEnableAvailable":{"name":"radioEnableAvailable","abstract":"<p>Availability of the control of enable/disable radio.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioBandAvailable":{"name":"radioBandAvailable","abstract":"<p>Availability of the control of radio band.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioFrequencyAvailable":{"name":"radioFrequencyAvailable","abstract":"<p>Availability of the control of radio frequency.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdChannelAvailable":{"name":"hdChannelAvailable","abstract":"<p>Availability of the control of HD radio channel.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)rdsDataAvailable":{"name":"rdsDataAvailable","abstract":"<p>Availability of the getting Radio Data System (RDS) data.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDsAvailable":{"name":"availableHDsAvailable","abstract":"<p>Availability of the getting the number of available HD channels.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)stateAvailable":{"name":"stateAvailable","abstract":"<p>Availability of the getting the Radio state.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalStrengthAvailable":{"name":"signalStrengthAvailable","abstract":"<p>Availability of the getting the signal strength.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalChangeThresholdAvailable":{"name":"signalChangeThresholdAvailable","abstract":"<p>Availability of the getting the signal Change Threshold</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdRadioEnableAvailable":{"name":"hdRadioEnableAvailable","abstract":"<p>Availability of the control of enable/disable HD radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)siriusXMRadioAvailable":{"name":"siriusXMRadioAvailable","abstract":"<p>Availability of sirius XM radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)sisDataAvailable":{"name":"sisDataAvailable","abstract":"<p>Availability of the getting HD radio Station Information Service (SIS) data.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct@store":{"name":"store","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)initWithDictionary:":{"name":"-initWithDictionary:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)init":{"name":"-init","abstract":"<p>Init</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)serializeAsDictionary:":{"name":"-serializeAsDictionary:","abstract":"<p>Converts struct to JSON formatted data</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(py)response":{"name":"response","abstract":"<p>The response within the userinfo dictionary</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)initWithName:object:rpcResponse:":{"name":"-initWithName:object:rpcResponse:","abstract":"<p>Create an NSNotification object caontaining an SDLRPCResponse</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseMemberOfClass:":{"name":"-isResponseMemberOfClass:","abstract":"<p>Returns whether or not the containing response is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseKindOfClass:":{"name":"-isResponseKindOfClass:","abstract":"<p>Returns whether or not the containing response is a kind of class, including subclasses.</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)correlationID":{"name":"correlationID","abstract":"<p>The correlation id of the corresponding SDLRPCRequest.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)success":{"name":"success","abstract":"<p>Whether or not the SDLRPCRequest was successful.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)resultCode":{"name":"resultCode","abstract":"<p>The result of the SDLRPCRequest. If the request failed, the result code contains the failure reason.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)info":{"name":"info","abstract":"<p>More detailed success or error message.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCRequest.html#/c:objc(cs)SDLRPCRequest(py)correlationID":{"name":"correlationID","abstract":"<p>A unique id assigned to message sent to Core. The Correlation ID is used to map a request to its response.</p>","parent_name":"SDLRPCRequest"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(py)notification":{"name":"notification","abstract":"<p>The notification within the userinfo dictionary</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)initWithName:object:rpcNotification:":{"name":"-initWithName:object:rpcNotification:","abstract":"<p>Create an NSNotification object caontaining an SDLRPCNotification</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationMemberOfClass:":{"name":"-isNotificationMemberOfClass:","abstract":"<p>Returns whether or not the containing notification is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationKindOfClass:":{"name":"-isNotificationKindOfClass:","abstract":"<p>Returns whether or not the containing notification is a kind of class, including subclasses.</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage@function":{"name":"function","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage@parameters":{"name":"parameters","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage@messageType":{"name":"messageType","abstract":"<p>Undocumented</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)initWithDictionary:":{"name":"-initWithDictionary:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getFunctionName":{"name":"-getFunctionName","abstract":"<p>Returns the function name.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setFunctionName:":{"name":"-setFunctionName:","abstract":"<p>Sets the function name.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getParameters:":{"name":"-getParameters:","abstract":"<p>Returns the value associated with the provided key. If the key does not exist, null is returned.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setParameters:value:":{"name":"-setParameters:value:","abstract":"<p>Sets a key-value pair using the function name as the key.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)bulkData":{"name":"bulkData","abstract":"<p>The data in the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)name":{"name":"name","abstract":"<p>The name of the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)messageType":{"name":"messageType","abstract":"<p>The type of data in the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithRed:green:blue:":{"name":"-initWithRed:green:blue:","abstract":"<p>Create an SDL color object with red / green / blue values between 0-255</p>","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithColor:":{"name":"-initWithColor:","abstract":"<p>Create an SDL color object with a UIColor object.</p>","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)red":{"name":"red","abstract":"<p>The red value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)green":{"name":"green","abstract":"<p>The green value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)blue":{"name":"blue","abstract":"<p>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":"<p>Undocumented</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programService":{"name":"programService","abstract":"<p>Program Service Name</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)radioText":{"name":"radioText","abstract":"<p>Radio Text</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)clockText":{"name":"clockText","abstract":"<p>The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programIdentification":{"name":"programIdentification","abstract":"<p>Program Identification - the call sign for the radio station</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programType":{"name":"programType","abstract":"<p>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":"<p>Traffic Program Identification - Identifies a station that offers traffic</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficAnnouncementIdentification":{"name":"trafficAnnouncementIdentification","abstract":"<p>Traffic Announcement Identification - Indicates an ongoing traffic announcement</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)region":{"name":"region","abstract":"<p>Region</p>","parent_name":"SDLRDSData"},"Classes/SDLPutFileResponse.html#/c:objc(cs)SDLPutFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>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.</p>","parent_name":"SDLPutFileResponse"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)init":{"name":"-init","abstract":"<p>Init</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:":{"name":"-initWithFileName:fileType:","abstract":"<p>Convenience init for creating a putfile with a name and file format.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:":{"name":"-initWithFileName:fileType:persistentFile:","abstract":"<p>Convenience init for creating a putfile with a name, file format, and persistance.</p>","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":"<p>Convenience init for creating a putfile that is part of a multiple frame payload.</p>","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":"<p>Convenience init for creating a putfile that is part of a multiple frame payload.</p>","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":"<p>Convenience init for creating a putfile that is part of a multiple frame payload. A CRC checksum is calculated for the bulk data.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)syncFileName":{"name":"syncFileName","abstract":"<p>File reference name</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)fileType":{"name":"fileType","abstract":"<p>A FileType value representing a selected file type</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)persistentFile":{"name":"persistentFile","abstract":"<p>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.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)systemFile":{"name":"systemFile","abstract":"<p>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.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)offset":{"name":"offset","abstract":"<p>Offset in bytes for resuming partial data chunks.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)length":{"name":"length","abstract":"<p>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</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)crc":{"name":"crc","abstract":"<p>Additional CRC32 checksum to protect data integrity up to 512 Mbits.</p>","parent_name":"SDLPutFile"},"Classes/SDLPresetBankCapabilities.html#/c:objc(cs)SDLPresetBankCapabilities(py)onScreenPresetsAvailable":{"name":"onScreenPresetsAvailable","abstract":"<p>If Onscreen custom presets are available.</p>","parent_name":"SDLPresetBankCapabilities"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(im)initWithFirstTouch:secondTouch:":{"name":"-initWithFirstTouch:secondTouch:","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)firstTouch":{"name":"firstTouch","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)secondTouch":{"name":"secondTouch","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)distance":{"name":"distance","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)center":{"name":"center","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)isValid":{"name":"isValid","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(im)initWithDialNumber:":{"name":"-initWithDialNumber:","abstract":"<p>Undocumented</p>","parent_name":"SDLPhoneCapability"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(py)dialNumberEnabled":{"name":"dialNumberEnabled","abstract":"<p>Whether or not the DialNumber RPC is enabled.</p>","parent_name":"SDLPhoneCapability"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>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 <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager. This method is used internally.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)isRPCAllowed:":{"name":"-isRPCAllowed:","abstract":"<p>Determine if an individual RPC is allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)groupStatusOfRPCs:":{"name":"-groupStatusOfRPCs:","abstract":"<p>Determine if all RPCs are allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)statusOfRPCs:":{"name":"-statusOfRPCs:","abstract":"<p>Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber<BOOL> specifying if that RPC is currently allowed</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)addObserverForRPCs:groupType:withHandler:":{"name":"-addObserverForRPCs:groupType:withHandler:","abstract":"<p>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.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeAllObservers":{"name":"-removeAllObservers","abstract":"<p>Remove every current observer</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeObserverForIdentifier:":{"name":"-removeObserverForIdentifier:","abstract":"<p>Remove block observers for the specified RPC</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)rpcName":{"name":"rpcName","abstract":"<p>Name of the individual RPC in the policy table.</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)hmiPermissions":{"name":"hmiPermissions","abstract":"<p>HMI Permissions for the individual RPC; i.e. which HMI levels may it be used in</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)parameterPermissions":{"name":"parameterPermissions","abstract":"<p>RPC parameters for the individual RPC</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)choiceID":{"name":"choiceID","abstract":"<p>ID of the choice that was selected in response to PerformInteraction. Only is valid if general result is <q>success:true</q>.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)manualTextEntry":{"name":"manualTextEntry","abstract":"<p>Manually entered text selection, e.g. through keyboard. Can be returned in lieu of choiceID, depending on the trigger source.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)triggerSource":{"name":"triggerSource","abstract":"<p>A <em>SDLTriggerSource</em> object which will be shown in the HMI. Only is valid if resultCode is SUCCESS.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetId:":{"name":"-initWithInteractionChoiceSetId:","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetIdList:":{"name":"-initWithInteractionChoiceSetIdList:","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialText":{"name":"initialText","abstract":"<p>The Text that Displayed when the interaction begins. This text may","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>An array of one or more TTSChunks that, taken together, specify","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionMode":{"name":"interactionMode","abstract":"<p>The Indicates mode that indicate how user selects interaction","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionChoiceSetIDList":{"name":"interactionChoiceSetIDList","abstract":"<p>A Vector<Integer> value representing an Array of one or more Choice","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>A Vector<TTSChunk> which taken together, specify the help phrase to","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>An array of TTSChunks which, taken together, specify the phrase to","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeout":{"name":"timeout","abstract":"<p>An Integer value representing the amount of time, in milliseconds,","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)vrHelp":{"name":"vrHelp","abstract":"<p>A Voice recognition Help, which is a suggested VR Help Items to","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionLayout":{"name":"interactionLayout","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:","abstract":"<p>Undocumented</p>","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:","abstract":"<p>Undocumented</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>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":"<p>a line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText2":{"name":"audioPassThruDisplayText2","abstract":"<p>A line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)samplingRate":{"name":"samplingRate","abstract":"<p>A samplingRate</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)maxDuration":{"name":"maxDuration","abstract":"<p>the maximum duration of audio recording in milliseconds</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)bitsPerSample":{"name":"bitsPerSample","abstract":"<p>the quality the audio is recorded - 8 bit or 16 bit</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioType":{"name":"audioType","abstract":"<p>an audioType</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)muteAudio":{"name":"muteAudio","abstract":"<p>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":"<p>A handler that will be called whenever an <code>onAudioPassThru</code> notification is received.</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)allowed":{"name":"allowed","abstract":"<p>A set of all parameters that are permitted for this given RPC.</p>","parent_name":"SDLParameterPermissions"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"<p>A set of all parameters that are prohibited for this given RPC.</p>","parent_name":"SDLParameterPermissions"},"Classes/SDLOnWayPointChange.html#/c:objc(cs)SDLOnWayPointChange(py)waypoints":{"name":"waypoints","abstract":"<p>Location address for display purposes only</p>","parent_name":"SDLOnWayPointChange"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)gps":{"name":"gps","abstract":"<p>The car current GPS coordinates</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)speed":{"name":"speed","abstract":"<p>The vehicle speed in kilometers per hour</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)rpm":{"name":"rpm","abstract":"<p>The number of revolutions per minute of the engine.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The fuel level in the tank (percentage)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The fuel level state</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The instantaneous fuel consumption in microlitres</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The external temperature in degrees celsius.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)vin":{"name":"vin","abstract":"<p>The Vehicle Identification Number</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)prndl":{"name":"prndl","abstract":"<p>The current gear shift state of the user&rsquo;s vehicle</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>The current pressure warnings for the user&rsquo;s vehicle</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)odometer":{"name":"odometer","abstract":"<p>Odometer reading in km</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>The status of the seat belts</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The body information including power modes</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The IVI system status including signal and battery strength</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>The status of the brake pedal</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The status of the wipers</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>Status of the head lamps</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The estimated percentage (0% - 100%) of remaining oil life of the engine</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>Torque value for engine (in Nm) on non-diesel variants</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>Accelerator pedal position (percentage depressed)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>Current angle of the steering wheel (in deg)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Emergency Call notification and confirmation data</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The status of the air bags</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Information related to an emergency event (and if it occurred)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>The status modes of the cluster</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)myKey":{"name":"myKey","abstract":"<p>Information related to the MyKey feature</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The status of the electronic parking brake</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>The status of the turn signal</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)type":{"name":"type","abstract":"<p>The type of touch event.</p>","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)event":{"name":"event","abstract":"<p>List of all individual touches involved in this event.</p>","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTBTClientState.html#/c:objc(cs)SDLOnTBTClientState(py)state":{"name":"state","abstract":"<p>Current State of TBT client</p>","parent_name":"SDLOnTBTClientState"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType":{"name":"requestType","abstract":"<p>The type of system request.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"<p>A request subType used when the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType\">requestType</a></code> is <code>OEM_SPECIFIC</code>.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)url":{"name":"url","abstract":"<p>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.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)timeout":{"name":"timeout","abstract":"<p>Optional timeout for HTTP requests Required if a URL is provided</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)fileType":{"name":"fileType","abstract":"<p>Optional file type (meant for HTTP file requests).</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)offset":{"name":"offset","abstract":"<p>Optional offset in bytes for resuming partial data chunks</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)length":{"name":"length","abstract":"<p>Optional length in bytes for resuming partial data chunks</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)URL":{"name":"URL","abstract":"<p>Undocumented</p>","parent_name":"SDLOnSyncPData"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)Timeout":{"name":"Timeout","abstract":"<p>Undocumented</p>","parent_name":"SDLOnSyncPData"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allocatedModules":{"name":"allocatedModules","abstract":"<p>@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":"<p>@abstract Contains a list (zero or more) of module types that are free to access for the application.</p>","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allowed":{"name":"allowed","abstract":"<p>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":"<p>Describes change in permissions for a given set of RPCs</p>","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)driverDistractionStatus":{"name":"driverDistractionStatus","abstract":"<p>Get the current driver distraction status(i.e. whether driver distraction rules are in effect, or not)</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)userSelected":{"name":"userSelected","abstract":"<p>Get user selection status for the application (has the app been selected via hmi or voice command)</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)lockScreenStatus":{"name":"lockScreenStatus","abstract":"<p>Indicates if the lockscreen should be required, optional or off</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>Get HMILevel in effect for the application</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)language":{"name":"language","abstract":"<p>Current SDL voice engine (VR+TTS) language</p>","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>Current display language</p>","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)event":{"name":"event","abstract":"<p>The type of keyboard input</p>","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)data":{"name":"data","abstract":"<p>The current keyboard string input from the user</p>","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnInteriorVehicleData.html#/c:objc(cs)SDLOnInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"<p>The subscribed module data that changed</p>","parent_name":"SDLOnInteriorVehicleData"},"Classes/SDLOnHashChange.html#/c:objc(cs)SDLOnHashChange(py)hashID":{"name":"hashID","abstract":"<p>Calculated hash ID to be referenced during RegisterAppInterface request.</p>","parent_name":"SDLOnHashChange"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>SDLHMILevel in effect for the application</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)audioStreamingState":{"name":"audioStreamingState","abstract":"<p>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.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)videoStreamingState":{"name":"videoStreamingState","abstract":"<p>Current availablility of video streaming for the application. When this parameter is NOT_STREAMABLE, the application must stop video streaming to SDL.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)systemContext":{"name":"systemContext","abstract":"<p>Whether a user-initiated interaction is in-progress (VRSESSION or MENU), or not (MAIN)</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)data":{"name":"data","abstract":"<p>Contains base64 encoded string of SyncP packets.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)URL":{"name":"URL","abstract":"<p>If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded to the provided URL.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)Timeout":{"name":"Timeout","abstract":"<p>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.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)state":{"name":"state","abstract":"<p>The driver distraction state (i.e. whether driver distraction rules are in effect, or not)</p>","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)cmdID":{"name":"cmdID","abstract":"<p>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.</p>","parent_name":"SDLOnCommand"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)triggerSource":{"name":"triggerSource","abstract":"<p>Indicates whether command was selected via voice or via a menu selection (using the OK button).</p>","parent_name":"SDLOnCommand"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonName":{"name":"buttonName","abstract":"<p>The button&rsquo;s name</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press event</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)customButtonID":{"name":"customButtonID","abstract":"<p>If ButtonName is <q>CUSTOM_BUTTON</q>, this references the integer ID passed by a custom button. (e.g. softButton ID)</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonName":{"name":"buttonName","abstract":"<p>The name of the button</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonEventMode":{"name":"buttonEventMode","abstract":"<p>Indicates whether this is an UP or DOWN event</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)customButtonID":{"name":"customButtonID","abstract":"<p>If ButtonName is <q>CUSTOM_BUTTON</q>, this references the integer ID passed by a custom button. (e.g. softButton ID)</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnAppInterfaceUnregistered.html#/c:objc(cs)SDLOnAppInterfaceUnregistered(py)reason":{"name":"reason","abstract":"<p>The reason application&rsquo;s interface was terminated</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryName":{"name":"countryName","abstract":"<p>Name of the country (localized)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryCode":{"name":"countryCode","abstract":"<p>countryCode of the country(ISO 3166-2)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)postalCode":{"name":"postalCode","abstract":"<p>postalCode of location (PLZ, ZIP, PIN, CAP etc.)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)administrativeArea":{"name":"administrativeArea","abstract":"<p>Portion of country (e.g. state)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subAdministrativeArea":{"name":"subAdministrativeArea","abstract":"<p>Portion of administrativeArea (e.g. county)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)locality":{"name":"locality","abstract":"<p>Hypernym for city/village</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subLocality":{"name":"subLocality","abstract":"<p>Hypernym for district</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)thoroughfare":{"name":"thoroughfare","abstract":"<p>Hypernym for street, road etc.</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subThoroughfare":{"name":"subThoroughfare","abstract":"<p>Portion of thoroughfare (e.g. house number)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allResponseNames":{"name":"+allResponseNames","abstract":"<p>All of the possible SDL RPC Response notification names</p>","parent_name":"SDLNotificationConstants"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allButtonEventNotifications":{"name":"+allButtonEventNotifications","abstract":"<p>All of the possible SDL Button event notification names</p>","parent_name":"SDLNotificationConstants"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(im)initWithSendLocation:waypoints:":{"name":"-initWithSendLocation:waypoints:","abstract":"<p>Undocumented</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)sendLocationEnabled":{"name":"sendLocationEnabled","abstract":"<p>Whether or not the SendLocation RPC is enabled.</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)getWayPointsEnabled":{"name":"getWayPointsEnabled","abstract":"<p>Whether or not Waypoint related RPCs are enabled.</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLMyKey.html#/c:objc(cs)SDLMyKey(py)e911Override":{"name":"e911Override","abstract":"<p>Indicates whether e911 override is on. References signal <q>MyKey_e911Override_St</q>. See VehicleDataStatus.</p>","parent_name":"SDLMyKey"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithRadioControlData:":{"name":"-initWithRadioControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with radio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithClimateControlData:":{"name":"-initWithClimateControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with climate control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithAudioControlData:":{"name":"-initWithAudioControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with audio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithLightControlData:":{"name":"-initWithLightControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with light control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithHMISettingsControlData:":{"name":"-initWithHMISettingsControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with hmi settings data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithSeatControlData:":{"name":"-initWithSeatControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with seat control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleType":{"name":"moduleType","abstract":"<p>The moduleType indicates which type of data should be changed and identifies which data object exists in this struct.</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)radioControlData":{"name":"radioControlData","abstract":"<p>The radio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)climateControlData":{"name":"climateControlData","abstract":"<p>The climate control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)seatControlData":{"name":"seatControlData","abstract":"<p>The seat control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)audioControlData":{"name":"audioControlData","abstract":"<p>The audio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)lightControlData":{"name":"lightControlData","abstract":"<p>The light control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)hmiSettingsControlData":{"name":"hmiSettingsControlData","abstract":"<p>The hmi control data</p>","parent_name":"SDLModuleData"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:":{"name":"-initWithTextFieldTypes:mainField2:","abstract":"<p>Constructs a newly allocated SDLMetadataType object with NSArrays</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:mainField3:mainField4:":{"name":"-initWithTextFieldTypes:mainField2:mainField3:mainField4:","abstract":"<p>Undocumented</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField1":{"name":"mainField1","abstract":"<p>The type of data contained in the <q>mainField1</q> text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField2":{"name":"mainField2","abstract":"<p>The type of data contained in the <q>mainField2</q> text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField3":{"name":"mainField3","abstract":"<p>The type of data contained in the <q>mainField3</q> text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField4":{"name":"mainField4","abstract":"<p>The type of data contained in the <q>mainField4</q> text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:":{"name":"-initWithMenuName:","abstract":"<p>Undocumented</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:parentId:position:":{"name":"-initWithMenuName:parentId:position:","abstract":"<p>Undocumented</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)parentID":{"name":"parentID","abstract":"<p>The unique ID of an existing submenu to which a command will be added</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)position":{"name":"position","abstract":"<p>The position within the items of the parent Command Menu</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)menuName":{"name":"menuName","abstract":"<p>The menu name which appears in menu, representing this command</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)title":{"name":"title","abstract":"<p>The cell&rsquo;s text to be displayed</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)icon":{"name":"icon","abstract":"<p>The cell&rsquo;s icon to be displayed</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The strings the user can say to activate this voice command</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)handler":{"name":"handler","abstract":"<p>The handler that will be called when the command is activated</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)subCells":{"name":"subCells","abstract":"<p>If this is non-nil, this cell will be a sub-menu button, displaying the subcells in a menu when pressed.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:voiceCommands:handler:":{"name":"-initWithTitle:icon:voiceCommands:handler:","abstract":"<p>Create a menu cell that has no subcells.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:subCells:":{"name":"-initWithTitle:subCells:","abstract":"<p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:subCells:":{"name":"-initWithTitle:icon:subCells:","abstract":"<p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>","parent_name":"SDLMenuCell"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(im)initWithMassageMode:massageZone:":{"name":"-initWithMassageMode:massageZone:","abstract":"<p>@abstract Constructs a newly allocated SDLMassageModeData object with massageMode and massageZone</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageMode":{"name":"massageMode","abstract":"<p>@abstract mode of a massage zone</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageZone":{"name":"massageZone","abstract":"<p>@abstract zone of a multi-contour massage seat.</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(im)initWithMassageCushion:firmness:":{"name":"-initWithMassageCushion:firmness:","abstract":"<p>Constructs a newly allocated SDLMassageCushionFirmness object with cushion and firmness</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)cushion":{"name":"cushion","abstract":"<p>@abstract cushion of a multi-contour massage seat.</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)firmness":{"name":"firmness","abstract":"<p>@abstract zone of a multi-contour massage seat.</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)configuration":{"name":"configuration","abstract":"<p>The configuration the manager was set up with.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>The current HMI level of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)audioStreamingState":{"name":"audioStreamingState","abstract":"<p>The current audio streaming state of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemContext":{"name":"systemContext","abstract":"<p>The current system context of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)fileManager":{"name":"fileManager","abstract":"<p>The file manager to be used by the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)permissionManager":{"name":"permissionManager","abstract":"<p>The permission manager monitoring RPC permissions.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)streamManager":{"name":"streamManager","abstract":"<p>The streaming media manager to be used for starting video sessions.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)screenManager":{"name":"screenManager","abstract":"<p>The screen manager for sending UI related RPCs.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemCapabilityManager":{"name":"systemCapabilityManager","abstract":"<p>Centralized manager for retrieving all system capabilities.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)registerResponse":{"name":"registerResponse","abstract":"<p>The response of a register call after it has been received.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)delegate":{"name":"delegate","abstract":"<p>The manager&rsquo;s delegate.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)pendingRPCTransactions":{"name":"pendingRPCTransactions","abstract":"<p>The currently pending RPC request send transactions</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)proxy":{"name":"proxy","abstract":"<p>Undocumented</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)initWithConfiguration:delegate:":{"name":"-initWithConfiguration:delegate:","abstract":"<p>Initialize the manager with a configuration. Call <code>startWithHandler</code> to begin waiting for a connection.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startWithReadyHandler:":{"name":"-startWithReadyHandler:","abstract":"<p>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.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager, it will disconnect if needed and no longer look for a connection. You probably don&rsquo;t need to call this method ever.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:":{"name":"-sendRequest:","abstract":"<p>Send an RPC request and don&rsquo;t bother with the response or error. If you need the response or error, call sendRequest:withCompletionHandler: instead.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:withResponseHandler:":{"name":"-sendRequest:withResponseHandler:","abstract":"<p>Send an RPC request and set a completion handler that will be called with the response when the response returns.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequests:progressHandler:completionHandler:":{"name":"-sendRequests:progressHandler:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendSequentialRequests:progressHandler:completionHandler:":{"name":"-sendSequentialRequests:progressHandler:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)modules":{"name":"modules","abstract":"<p>Active log modules</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)targets":{"name":"targets","abstract":"<p>Active log targets</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)filters":{"name":"filters","abstract":"<p>Active log filters</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)globalLogLevel":{"name":"globalLogLevel","abstract":"<p>Any modules that do not have an explicitly specified level will by default use this log level</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)formatType":{"name":"formatType","abstract":"<p>Active log format</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)asynchronous":{"name":"asynchronous","abstract":"<p>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.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"<p>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.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)dateFormatter":{"name":"dateFormatter","abstract":"<p>Active date formatter</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)logQueue":{"name":"logQueue","abstract":"<p>The queue asynchronously logged logs are logged on. Say that 10 times fast.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)sharedManager":{"name":"+sharedManager","abstract":"<p>The singleton object</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)setConfiguration:":{"name":"+setConfiguration:","abstract":"<p>Sets a configuration to be used by the log manager&rsquo;s sharedManager. This is generally for internal use and you should set your configuration using SDLManager&rsquo;s startWithConfiguration: method.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)setConfiguration:":{"name":"-setConfiguration:","abstract":"<p>Sets a configuration to be used by the log manager. This is generally for internal use and you should set your configuration using SDLManager&rsquo;s startWithConfiguration: method.</p>","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":"<p>Log to the sharedManager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","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":"<p>Log to this log manager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","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":"<p>Log to this sharedManager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","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":"<p>Log to this log manager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","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":"<p>Log to this sharedManager&rsquo;s active log targets. This is used internally to log.</p>","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":"<p>Log to this manager&rsquo;s active log targets. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(py)filter":{"name":"filter","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)initWithCustomFilter:":{"name":"-initWithCustomFilter:","abstract":"<p>Create a new filter with a custom filter block. The filter block will take a log model and return a BOOL of pass / fail.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingString:caseSensitive:":{"name":"+filterByDisallowingString:caseSensitive:","abstract":"<p>Returns a filter that only allows logs not containing the passed string within their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingString:caseSensitive:":{"name":"+filterByAllowingString:caseSensitive:","abstract":"<p>Returns a filter that only allows logs containing the passed string within their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingRegex:":{"name":"+filterByDisallowingRegex:","abstract":"<p>Returns a filter that only allows logs not passing the passed regex against their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingRegex:":{"name":"+filterByAllowingRegex:","abstract":"<p>Returns a filter that only allows logs passing the passed regex against their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingModules:":{"name":"+filterByDisallowingModules:","abstract":"<p>Returns a filter that only allows logs not within the specified file modules to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingModules:":{"name":"+filterByAllowingModules:","abstract":"<p>Returns a filter that only allows logs of the specified file modules to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingFileNames:":{"name":"+filterByDisallowingFileNames:","abstract":"<p>Returns a filter that only allows logs not within the specified files to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingFileNames:":{"name":"+filterByAllowingFileNames:","abstract":"<p>Returns a filter that only allows logs within the specified files to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)name":{"name":"name","abstract":"<p>The name of the this module, e.g. <q>Transport</q></p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)files":{"name":"files","abstract":"<p>All of the files contained within this module. When a log is logged, the <code>__FILE__</code> (in Obj-C) or <code>#file</code> (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&rsquo;s log level and the module&rsquo;s name will be printed in the formatted log.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)logLevel":{"name":"logLevel","abstract":"<p>The custom level of the log. This is <code>SDLLogLevelDefault</code> (whatever the current global log level is) by default.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)init":{"name":"-init","abstract":"<p>This method is unavailable and may not be used.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:level:":{"name":"-initWithName:files:level:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name, set of files, and associated log level.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:":{"name":"-initWithName:files:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name and set of files. The logging level is the same as the current global logging file by using <code>SDLLogLevelDefault</code>.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(cm)moduleWithName:files:":{"name":"+moduleWithName:files:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name and set of files. The logging level is the same as the current global logging file by using <code>SDLLogLevelDefault</code>.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)containsFile:":{"name":"-containsFile:","abstract":"<p>Returns whether or not this module contains a given file.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)modules":{"name":"modules","abstract":"<p>Any custom logging modules used by the developer&rsquo;s code. Defaults to none.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)targets":{"name":"targets","abstract":"<p>Where the logs will attempt to output. Defaults to Console.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)filters":{"name":"filters","abstract":"<p>What log filters will run over this session. Defaults to none.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)formatType":{"name":"formatType","abstract":"<p>How detailed of logs will be output. Defaults to Default.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)asynchronous":{"name":"asynchronous","abstract":"<p>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.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"<p>Whether or not error logs will be dispatched to loggers asynchronously. Defaults to NO.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)globalLogLevel":{"name":"globalLogLevel","abstract":"<p>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":"<p>A default logger for production. This sets the format type to Default, the log level to Error, and only enables the ASL logger.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)debugConfiguration":{"name":"+debugConfiguration","abstract":"<p>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.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)appIcon":{"name":"appIcon","abstract":"<p>The app&rsquo;s icon. This will be set by the lock screen configuration.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)vehicleIcon":{"name":"vehicleIcon","abstract":"<p>The vehicle&rsquo;s designated icon. This will be set by the lock screen manager when it is notified that a lock screen icon has been downloaded.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The designated background color set in the lock screen configuration, or the default SDL gray-blue.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showInOptionalState":{"name":"showInOptionalState","abstract":"<p>Whether or not the lock screen should be shown in the <q>lock screen optional</q> state. Defaults to false.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableAutomaticLockScreen":{"name":"enableAutomaticLockScreen","abstract":"<p>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.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The background color of the lock screen. This could be a branding color, or leave at the default for a dark blue-gray.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)appIcon":{"name":"appIcon","abstract":"<p>Your app icon as it will appear on the lock screen.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)customViewController":{"name":"customViewController","abstract":"<p>A custom view controller that the lock screen will manage the presentation of.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)disabledConfiguration":{"name":"+disabledConfiguration","abstract":"<p>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.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfiguration":{"name":"+enabledConfiguration","abstract":"<p>Use this configuration for the basic default lock screen. A custom app icon will not be used.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithAppIcon:backgroundColor:":{"name":"+enabledConfigurationWithAppIcon:backgroundColor:","abstract":"<p>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.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithViewController:":{"name":"+enabledConfigurationWithViewController:","abstract":"<p>Use this configuration if you wish to provide your own view controller for the lock screen. This view controller&rsquo;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.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)coordinate":{"name":"coordinate","abstract":"<p>Latitude/Longitude of the location</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationName":{"name":"locationName","abstract":"<p>Name of location.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)addressLines":{"name":"addressLines","abstract":"<p>Location address for display purposes only.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationDescription":{"name":"locationDescription","abstract":"<p>Description intended location / establishment.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)phoneNumber":{"name":"phoneNumber","abstract":"<p>Phone number of location / establishment.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationImage":{"name":"locationImage","abstract":"<p>Image / icon of intended location.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)searchAddress":{"name":"searchAddress","abstract":"<p>Address to be used by navigation engines for search.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>Latitude of the location</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>Longitude of the location</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)filenames":{"name":"filenames","abstract":"<p>An array of all filenames resident on the module for the given registered app. If omitted, then no files currently reside on the system.</p>","parent_name":"SDLListFilesResponse"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>Provides the total local space available on the module for the registered app.</p>","parent_name":"SDLListFilesResponse"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:":{"name":"-initWithId:status:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:density:color:":{"name":"-initWithId:status:density:color:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:lightStatus:lightDensity:lightColor:":{"name":"-initWithId:lightStatus:lightDensity:lightColor:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)id":{"name":"id","abstract":"<p>@abstract The name of a light or a group of lights</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)status":{"name":"status","abstract":"<p>@abstract Reflects the status of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)density":{"name":"density","abstract":"<p>@abstract Reflects the density of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)color":{"name":"color","abstract":"<p>@abstract Reflects the color of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(im)initWithLightStates:":{"name":"-initWithLightStates:","abstract":"<p>Constructs a newly allocated SDLLightControlData object with lightState</p>","parent_name":"SDLLightControlData"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(py)lightState":{"name":"lightState","abstract":"<p>@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":"<p>Constructs a newly allocated SDLLightControlCapabilities object with given parameters</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@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":"<p>@abstract An array of available LightCapabilities that are controllable.</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Constructs a newly allocated SDLLightCapabilities object with the name of the light or group of lights</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:densityAvailable:colorAvailable:statusAvailable:":{"name":"-initWithName:densityAvailable:colorAvailable:statusAvailable:","abstract":"<p>Constructs a newly allocated SDLLightCapabilities object with given parameters</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)name":{"name":"name","abstract":"<p>@abstract The name of a light or a group of lights</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)densityAvailable":{"name":"densityAvailable","abstract":"<p>@abstract Indicates if the light&rsquo;s density can be set remotely (similar to a dimmer).</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)colorAvailable":{"name":"colorAvailable","abstract":"<p>@abstract Indicates if the light&rsquo;s color can be set remotely by using the RGB color space.</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)statusAvailable":{"name":"statusAvailable","abstract":"<p>@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":"<p>The full name of the app to that the configuration should be updated to.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)shortAppName":{"name":"shortAppName","abstract":"<p>An abbrevited application name that will be used on the app launching screen if the full one would be truncated.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)ttsName":{"name":"ttsName","abstract":"<p>A Text to Speech String for voice recognition of the mobile application name.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"<p>Additional voice recognition commands. May not interfere with any other app name or global commands.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(im)initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:":{"name":"-initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:","abstract":"<p>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":"<p>Undocumented</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:appId:":{"name":"+defaultConfigurationWithAppName:appId:","abstract":"<p>A production configuration that runs using IAP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:fullAppId:":{"name":"+defaultConfigurationWithAppName:fullAppId:","abstract":"<p>A production configuration that runs using IAP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:appId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:appId:ipAddress:port:","abstract":"<p>A debug configuration that runs using TCP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:fullAppId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:fullAppId:ipAddress:port:","abstract":"<p>A debug configuration that runs using TCP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugMode":{"name":"tcpDebugMode","abstract":"<p>Whether or not debug mode is enabled</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugIPAddress":{"name":"tcpDebugIPAddress","abstract":"<p>The ip address at which the library will look for a server</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugPort":{"name":"tcpDebugPort","abstract":"<p>The port at which the library will look for a server</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appName":{"name":"appName","abstract":"<p>The full name of the app</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId":{"name":"appId","abstract":"<p>The app id. This must be the same as the app id received from the SDL developer portal.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)fullAppId":{"name":"fullAppId","abstract":"<p>The full app id. This must be the same as the full app id received from the SDL developer portal.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)resumeHash":{"name":"resumeHash","abstract":"<p>A hash id which should be passed to the remote system in the RegisterAppInterface</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)isMedia":{"name":"isMedia","abstract":"<p>This is an automatically set based on the app type</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType":{"name":"appType","abstract":"<p>The application type</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)additionalAppTypes":{"name":"additionalAppTypes","abstract":"<p>Additional application types beyond <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType\">appType</a></code></p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)language":{"name":"language","abstract":"<p>The default language to use</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)languagesSupported":{"name":"languagesSupported","abstract":"<p>An array of all the supported languages</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appIcon":{"name":"appIcon","abstract":"<p>The application icon to be used on an app launching screen</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)shortAppName":{"name":"shortAppName","abstract":"<p>An abbrevited application name that will be used on the app launching screen if the full one would be truncated</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)ttsName":{"name":"ttsName","abstract":"<p>A Text to Speech String for voice recognition of the mobile application name.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"<p>Additional voice recognition commands. May not interfere with any other app name or global commands.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to use when the head unit is in a light / day situation.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to use when the head unit is in a dark / night situation.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:","abstract":"<p>Undocumented</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)language":{"name":"language","abstract":"<p>The keyboard language</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keyboardLayout":{"name":"keyboardLayout","abstract":"<p>Desired keyboard layout</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keypressMode":{"name":"keypressMode","abstract":"<p>Desired keypress mode.</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)limitedCharacterList":{"name":"limitedCharacterList","abstract":"<p>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.</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteText":{"name":"autoCompleteText","abstract":"<p>Allows an app to prepopulate the text field with a suggested or completed entry as the user types</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionWidth":{"name":"resolutionWidth","abstract":"<p>Resolution width</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionHeight":{"name":"resolutionHeight","abstract":"<p>Resolution height</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(im)initWithWidth:height:":{"name":"-initWithWidth:height:","abstract":"<p>Undocumented</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)name":{"name":"name","abstract":"<p>The name that identifies the field.</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"<p>The image types that are supported in this field.</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageResolution":{"name":"imageResolution","abstract":"<p>The image resolution of this field</p>","parent_name":"SDLImageField"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:":{"name":"-initWithName:ofType:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:isTemplate:":{"name":"-initWithName:ofType:isTemplate:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:isTemplate:":{"name":"-initWithName:isTemplate:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticImageValue:":{"name":"-initWithStaticImageValue:","abstract":"<p>Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image&rsquo;s value.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticIconName:":{"name":"-initWithStaticIconName:","abstract":"<p>Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image&rsquo;s value.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)value":{"name":"value","abstract":"<p>The static hex icon value or the binary image file name identifier (sent by SDLPutFile)</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)imageType":{"name":"imageType","abstract":"<p>Describes whether the image is static or dynamic</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)isTemplate":{"name":"isTemplate","abstract":"<p>Indicates that this image can be (re)colored by the HMI to best fit the current color scheme.</p>","parent_name":"SDLImage"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)lowBeamsOn":{"name":"lowBeamsOn","abstract":"<p>Low beams are on or off.</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)highBeamsOn":{"name":"highBeamsOn","abstract":"<p>High beams are on or off</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)ambientLightSensorStatus":{"name":"ambientLightSensorStatus","abstract":"<p>Status of the ambient light senser</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(im)initWithId:rect:":{"name":"-initWithId:rect:","abstract":"<p>Undocumented</p>","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)id":{"name":"id","abstract":"<p>A user control spatial identifier</p>","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)rect":{"name":"rect","abstract":"<p>The position of the haptic rectangle to be highlighted. The center of this rectangle will be <q>touched</q> when a press occurs.</p>","parent_name":"SDLHapticRect"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(im)initWithDisplaymode:temperatureUnit:distanceUnit:":{"name":"-initWithDisplaymode:temperatureUnit:distanceUnit:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)displayMode":{"name":"displayMode","abstract":"<p>@abstract Display the Display Mode used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)temperatureUnit":{"name":"temperatureUnit","abstract":"<p>@abstract Display the temperature unit used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)distanceUnit":{"name":"distanceUnit","abstract":"<p>@abstract Display the distance unit used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@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":"<p>@abstract Availability of the control of distance unit.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)temperatureUnitAvailable":{"name":"temperatureUnitAvailable","abstract":"<p>@abstract Availability of the control of temperature unit.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)displayModeUnitAvailable":{"name":"displayModeUnitAvailable","abstract":"<p>@abstract Availability of the control of HMI display mode.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)allowed":{"name":"allowed","abstract":"<p>A set of all HMI levels that are permitted for this given RPC</p>","parent_name":"SDLHMIPermissions"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"<p>A set of all HMI levels that are prohibited for this given RPC</p>","parent_name":"SDLHMIPermissions"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)navigation":{"name":"navigation","abstract":"<p>Availability of built in Nav. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)phoneCall":{"name":"phoneCall","abstract":"<p>Availability of built in phone. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)videoStreaming":{"name":"videoStreaming","abstract":"<p>Availability of built in video streaming. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLGetWayPointsResponse.html#/c:objc(cs)SDLGetWayPointsResponse(py)waypoints":{"name":"waypoints","abstract":"<p>Provides additional human readable info regarding the result.</p>","parent_name":"SDLGetWayPointsResponse"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(im)initWithType:":{"name":"-initWithType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetWayPoints"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(py)waypointType":{"name":"waypointType","abstract":"<p>To request for either the destination","parent_name":"SDLGetWayPoints"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The car current GPS coordinates</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The vehicle speed in kilometers per hour</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The number of revolutions per minute of the engine.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The fuel level in the tank (percentage)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The fuel level state</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The instantaneous fuel consumption in microlitres</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The external temperature in degrees celsius.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)vin":{"name":"vin","abstract":"<p>The Vehicle Identification Number</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The current gear shift state of the user&rsquo;s vehicle</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The current pressure warnings for the user&rsquo;s vehicle</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>Odometer reading in km</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The status of the seat belts</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The body information including power modes</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The IVI system status including signal and battery strength</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The status of the brake pedal</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The status of the wipers</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>Status of the head lamps</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The estimated percentage (0% - 100%) of remaining oil life of the engine</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>Torque value for engine (in Nm) on non-diesel variants</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>Accelerator pedal position (percentage depressed)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>Current angle of the steering wheel (in deg)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Emergency Call notification and confirmation data</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The status of the air bags</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Information related to an emergency event (and if it occurred)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>The status modes of the cluster</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>Information related to the MyKey feature</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The status of the electronic parking brake</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The status of the turn signal</p>","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":"<p>Convenience init for getting data for all possible vehicle data items.</p>","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":"<p>Convenience init for getting data for all possible vehicle data items.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, requests GPS data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, requests Speed data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, requests RPM data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, requests Fuel Level data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, requests Fuel Level State data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>A boolean value. If true, requests Fuel Range data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, requests Instant Fuel Consumption data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, requests External Temperature data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)vin":{"name":"vin","abstract":"<p>A boolean value. If true, requests the Vehicle Identification Number.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, requests PRNDL data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, requests Tire Pressure data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, requests Odometer data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, requests Belt Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, requests Body Information data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, requests Device Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, requests Driver Braking data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, requests Wiper Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, requests Head Lamp Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>A boolean value. If true, requests Engine Oil Life data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, requests Engine Torque data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, requests Acc Pedal Position data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>A boolean value. If true, requests Steering Wheel Angle data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>A boolean value. If true, requests Emergency Call Info data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>A boolean value. If true, requests Air Bag Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>A boolean value. If true, requests Emergency Event (if it occurred) data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>A boolean value. If true, requests Cluster Mode Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)myKey":{"name":"myKey","abstract":"<p>A boolean value. If true, requests MyKey data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, requests Electronic Parking Brake status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, requests Turn Signal data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetSystemCapabilityResponse.html#/c:objc(cs)SDLGetSystemCapabilityResponse(py)systemCapability":{"name":"systemCapability","abstract":"<p>The requested system capability, of the type that was sent in the request</p>","parent_name":"SDLGetSystemCapabilityResponse"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:":{"name":"-initWithType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"<p>They type of capability you&rsquo;d like to receive in the response.</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"<p>The requested data</p>","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)isSubscribed":{"name":"isSubscribed","abstract":"<p>It is a conditional-mandatory parameter: must be returned in case <q>subscribe</q> parameter was present in the related request.</p>","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:":{"name":"-initWithModuleType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:":{"name":"-initAndSubscribeToModuleType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:":{"name":"-initAndUnsubscribeToModuleType:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleType":{"name":"moduleType","abstract":"<p>The type of a RC module to retrieve module data from the vehicle.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)subscribe":{"name":"subscribe","abstract":"<p>If subscribe is true, the head unit will register onInteriorVehicleData notifications for the requested moduelType.","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)ecuHeader":{"name":"ecuHeader","abstract":"<p>2 byte ECU Header for DTC response (as defined in VHR_Layout_Specification_DTCs.pdf)</p>","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)dtc":{"name":"dtc","abstract":"<p>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).</p>","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:":{"name":"-initWithECUName:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:mask:":{"name":"-initWithECUName:mask:","abstract":"<p>Undocumented</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)ecuName":{"name":"ecuName","abstract":"<p>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":"<p>DTC Mask Byte to be sent in diagnostic request to module. NSNumber* dtcMask Minvalue:0; Maxvalue:255</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>longitude degrees</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>latitude degrees</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcYear":{"name":"utcYear","abstract":"<p>utc year</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMonth":{"name":"utcMonth","abstract":"<p>utc month</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcDay":{"name":"utcDay","abstract":"<p>utc day</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcHours":{"name":"utcHours","abstract":"<p>utc hours</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMinutes":{"name":"utcMinutes","abstract":"<p>utc minutes</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcSeconds":{"name":"utcSeconds","abstract":"<p>utc seconds</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)compassDirection":{"name":"compassDirection","abstract":"<p>Optional, Potential Compass Directions</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)pdop":{"name":"pdop","abstract":"<p>The 3D positional dilution of precision.</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)hdop":{"name":"hdop","abstract":"<p>The horizontal dilution of precision</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)vdop":{"name":"vdop","abstract":"<p>the vertical dilution of precision</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)actual":{"name":"actual","abstract":"<p>What the coordinates are based on</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)satellites":{"name":"satellites","abstract":"<p>The number of satellites in view</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)dimension":{"name":"dimension","abstract":"<p>The supported dimensions of the GPS</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)altitude":{"name":"altitude","abstract":"<p>Altitude in meters</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)heading":{"name":"heading","abstract":"<p>Heading based on the GPS data.</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)speed":{"name":"speed","abstract":"<p>Speed in KPH</p>","parent_name":"SDLGPSData"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)type":{"name":"type","abstract":"<p>The vehicle&rsquo;s fuel type</p>","parent_name":"SDLFuelRange"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)range":{"name":"range","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption.</p>","parent_name":"SDLFuelRange"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)artworkRetryCount":{"name":"artworkRetryCount","abstract":"<p>Defines the number of times the file manager will attempt to reupload <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLArtwork.html\">SDLArtwork</a></code> files in the event of a failed upload to Core.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)fileRetryCount":{"name":"fileRetryCount","abstract":"<p>Defines the number of times the file manager will attempt to reupload general <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLFile.html\">SDLFile</a></code>s in the event of a failed upload to Core.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"<p>Creates a default file manager configuration.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)init":{"name":"-init","abstract":"<p>Use <code>defaultConfiguration</code> instead</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)initWithArtworkRetryCount:fileRetryCount:":{"name":"-initWithArtworkRetryCount:fileRetryCount:","abstract":"<p>Creates a file manager configuration with customized upload retry counts.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)remoteFileNames":{"name":"remoteFileNames","abstract":"<p>A set of all names of files known on the remote head unit. Known files can be used or deleted on the remote system.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)bytesAvailable":{"name":"bytesAvailable","abstract":"<p>The number of bytes still available for files for this app.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)currentState":{"name":"currentState","abstract":"<p>The state of the file manager.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)pendingTransactions":{"name":"pendingTransactions","abstract":"<p>The currently pending transactions (Upload, Delete, and List Files) in the file manager</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)suspended":{"name":"suspended","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)init":{"name":"-init","abstract":"<p>Initialize the class&hellip;or not, since this method is unavailable. Dependencies must be injected using initWithConnectionManager:</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"<p>Creates a new file manager with a specified connection manager</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"<p>Creates a new file manager with a specified connection manager and configuration</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>The manager stars up and attempts to fetch its initial list and transfer initial files.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)stop":{"name":"-stop","abstract":"<p>Cancels all file manager operations and deletes all associated data.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)hasUploadedFile:":{"name":"-hasUploadedFile:","abstract":"<p>Check if the remote system contains a file</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFileWithName:completionHandler:":{"name":"-deleteRemoteFileWithName:completionHandler:","abstract":"<p>Delete a file stored on the remote system</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFilesWithNames:completionHandler:":{"name":"-deleteRemoteFilesWithNames:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFile:completionHandler:":{"name":"-uploadFile:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:progressHandler:completionHandler:":{"name":"-uploadFiles:progressHandler:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:completionHandler:":{"name":"-uploadFiles:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtwork:completionHandler:":{"name":"-uploadArtwork:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:completionHandler:":{"name":"-uploadArtworks:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:progressHandler:completionHandler:":{"name":"-uploadArtworks:progressHandler:completionHandler:","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(cm)temporaryFileDirectory":{"name":"+temporaryFileDirectory","abstract":"<p>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.</p>","parent_name":"SDLFileManager"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)persistent":{"name":"persistent","abstract":"<p>Whether or not the file should persist on disk between car ignition cycles.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)overwrite":{"name":"overwrite","abstract":"<p>Whether or not the file should overwrite an existing file on the remote disk with the same name.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)name":{"name":"name","abstract":"<p>The name the file should be stored under on the remote disk. This is how the file will be referenced in all later calls.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileURL":{"name":"fileURL","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)data":{"name":"data","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileSize":{"name":"fileSize","abstract":"<p>The size of the binary data of the SDLFile.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileType":{"name":"fileType","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)inputStream":{"name":"inputStream","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)init":{"name":"-init","abstract":"<p>Undocumented</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithFileURL:name:persistent:":{"name":"-initWithFileURL:name:persistent:","abstract":"<p>The designated initializer for an SDL File. The only major property that is not set using this is <q>overwrite</q>, which defaults to NO.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileAtFileURL:name:":{"name":"+persistentFileAtFileURL:name:","abstract":"<p>Create an SDL file using a local file URL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileAtFileURL:name:":{"name":"+fileAtFileURL:name:","abstract":"<p>Create an SDL file using a local file URL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithData:name:fileExtension:persistent:":{"name":"-initWithData:name:fileExtension:persistent:","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileWithData:name:fileExtension:":{"name":"+persistentFileWithData:name:fileExtension:","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileWithData:name:fileExtension:":{"name":"+fileWithData:name:fileExtension:","abstract":"<p>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.</p>","parent_name":"SDLFile"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(im)initWithChannelId:channelSetting:":{"name":"-initWithChannelId:channelSetting:","abstract":"<p>Undocumented</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelName":{"name":"channelName","abstract":"<p>@abstract Read-only channel / frequency name","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelSetting":{"name":"channelSetting","abstract":"<p>@abstract Reflects the setting, from 0%-100%.</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelId":{"name":"channelId","abstract":"<p>@abstract id of the channel.</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEncodedSyncPData.html#/c:objc(cs)SDLEncodedSyncPData(py)data":{"name":"data","abstract":"<p>Contains base64 encoded string of SyncP packets.</p>","parent_name":"SDLEncodedSyncPData"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)emergencyEventType":{"name":"emergencyEventType","abstract":"<p>References signal <q>VedsEvntType_D_Ltchd</q>. See EmergencyEventType.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)fuelCutoffStatus":{"name":"fuelCutoffStatus","abstract":"<p>References signal <q>RCM_FuelCutoff</q>. See FuelCutoffStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)rolloverEvent":{"name":"rolloverEvent","abstract":"<p>References signal <q>VedsEvntRoll_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)maximumChangeVelocity":{"name":"maximumChangeVelocity","abstract":"<p>References signal <q>VedsMaxDeltaV_D_Ltchd</q>. Change in velocity in KPH.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)multipleEvents":{"name":"multipleEvents","abstract":"<p>References signal <q>VedsMultiEvnt_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallNotificationStatus":{"name":"eCallNotificationStatus","abstract":"<p>References signal <q>eCallNotification_4A</q>. See VehicleDataNotificationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)auxECallNotificationStatus":{"name":"auxECallNotificationStatus","abstract":"<p>References signal <q>eCallNotification</q>. See VehicleDataNotificationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallConfirmationStatus":{"name":"eCallConfirmationStatus","abstract":"<p>References signal <q>eCallConfirmation</q>. See ECallConfirmationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayType":{"name":"displayType","abstract":"<p>The type of display</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayName":{"name":"displayName","abstract":"<p>The name of the connected display</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)textFields":{"name":"textFields","abstract":"<p>An array of SDLTextField structures, each of which describes a field in the HMI which the application can write to using operations such as <em>SDLShow</em>, <em>SDLSetMediaClockTimer</em>, etc.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)imageFields":{"name":"imageFields","abstract":"<p>An array of SDLImageField elements</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)mediaClockFormats":{"name":"mediaClockFormats","abstract":"<p>An array of SDLMediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)graphicSupported":{"name":"graphicSupported","abstract":"<p>The display&rsquo;s persistent screen supports.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)templatesAvailable":{"name":"templatesAvailable","abstract":"<p>Number of presets the screen supports</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)screenParams":{"name":"screenParams","abstract":"<p>A set of all parameters related to a prescribed screen area (e.g. for video / touch input)</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"<p>The number of on-screen custom presets available (if any); otherwise omitted</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(im)initWithNumber:":{"name":"-initWithNumber:","abstract":"<p>Undocumented</p>","parent_name":"SDLDialNumber"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(py)number":{"name":"number","abstract":"<p>Up to 40 character string representing the phone number. All characters stripped except for &lsquo;0&rsquo;-&lsquo;9&rsquo;, &lsquo;*&rsquo;, &lsquo;#&rsquo;, &lsquo;,&rsquo;, &lsquo;;&rsquo;, and &lsquo;+&rsquo;</p>","parent_name":"SDLDialNumber"},"Classes/SDLDiagnosticMessageResponse.html#/c:objc(cs)SDLDiagnosticMessageResponse(py)messageDataResult":{"name":"messageDataResult","abstract":"<p>Array of bytes comprising CAN message result.</p>","parent_name":"SDLDiagnosticMessageResponse"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(im)initWithTargetId:length:data:":{"name":"-initWithTargetId:length:data:","abstract":"<p>Undocumented</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)targetID":{"name":"targetID","abstract":"<p>Name of target ECU</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageLength":{"name":"messageLength","abstract":"<p>Length of message (in bytes)</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageData":{"name":"messageData","abstract":"<p>Array of bytes comprising CAN message.</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)voiceRecOn":{"name":"voiceRecOn","abstract":"<p>Indicates whether the voice recognition is on or off</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)btIconOn":{"name":"btIconOn","abstract":"<p>Indicates whether the bluetooth connection established</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)callActive":{"name":"callActive","abstract":"<p>Indicates whether a call is being active</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)phoneRoaming":{"name":"phoneRoaming","abstract":"<p>Indicates whether the phone is in roaming mode</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)textMsgAvailable":{"name":"textMsgAvailable","abstract":"<p>Indicates whether a textmessage is available</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)battLevelStatus":{"name":"battLevelStatus","abstract":"<p>Battery level status</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)stereoAudioOutputMuted":{"name":"stereoAudioOutputMuted","abstract":"<p>The status of the stereo audio output channel</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)monoAudioOutputMuted":{"name":"monoAudioOutputMuted","abstract":"<p>The status of the mono audio output channel</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)signalLevelStatus":{"name":"signalLevelStatus","abstract":"<p>Signal level status</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)primaryAudioSource":{"name":"primaryAudioSource","abstract":"<p>The current primary audio source of SDL (if selected).</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)eCallEventActive":{"name":"eCallEventActive","abstract":"<p>Indicates if an emergency call is active</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(cm)currentDevice":{"name":"+currentDevice","abstract":"<p>Undocumented</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)hardware":{"name":"hardware","abstract":"<p>Device model</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)firmwareRev":{"name":"firmwareRev","abstract":"<p>Device firmware version</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)os":{"name":"os","abstract":"<p>Device OS</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)osVersion":{"name":"osVersion","abstract":"<p>Device OS version</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)carrier":{"name":"carrier","abstract":"<p>Device mobile carrier</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)maxNumberRFCOMMPorts":{"name":"maxNumberRFCOMMPorts","abstract":"<p>Number of bluetooth RFCOMM ports available.</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Undocumented</p>","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(py)menuID":{"name":"menuID","abstract":"<p>the MenuID that identifies the SDLSubMenu to be delete","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Undocumented</p>","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"<p>a unique ID that identifies the Choice Set","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteFileResponse.html#/c:objc(cs)SDLDeleteFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>The remaining available space for your application to store data on the remote system.</p>","parent_name":"SDLDeleteFileResponse"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Undocumented</p>","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(py)syncFileName":{"name":"syncFileName","abstract":"<p>a file reference name","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Undocumented</p>","parent_name":"SDLDeleteCommand"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(py)cmdID":{"name":"cmdID","abstract":"<p>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":"<p>Undocumented</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:":{"name":"-initWithHour:minute:second:millisecond:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)millisecond":{"name":"millisecond","abstract":"<p>Milliseconds part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)second":{"name":"second","abstract":"<p>Seconds part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)minute":{"name":"minute","abstract":"<p>Minutes part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)hour":{"name":"hour","abstract":"<p>Hour part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)day":{"name":"day","abstract":"<p>Day of the month</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)month":{"name":"month","abstract":"<p>Month of the year</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)year":{"name":"year","abstract":"<p>The year in YYYY format</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneMinuteOffset":{"name":"timezoneMinuteOffset","abstract":"<p>Time zone offset in Min with regard to UTC</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneHourOffset":{"name":"timezoneHourOffset","abstract":"<p>Time zone offset in Hours with regard to UTC</p>","parent_name":"SDLDateTime"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)resultCode":{"name":"resultCode","abstract":"<p>Individual DID result code.</p>","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)didLocation":{"name":"didLocation","abstract":"<p>Location of raw data from vehicle data DID</p>","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)data":{"name":"data","abstract":"<p>Raw DID-based data returned for requested element.</p>","parent_name":"SDLDIDResult"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(im)initWithId:choiceSet:":{"name":"-initWithId:choiceSet:","abstract":"<p>Undocumented</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"<p>A unique ID that identifies the Choice Set</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)choiceSet":{"name":"choiceSet","abstract":"<p>Array of choices, which the user can select by menu or voice recognition</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lifecycleConfig":{"name":"lifecycleConfig","abstract":"<p>The lifecycle configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lockScreenConfig":{"name":"lockScreenConfig","abstract":"<p>The lock screen configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)loggingConfig":{"name":"loggingConfig","abstract":"<p>The log configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)streamingMediaConfig":{"name":"streamingMediaConfig","abstract":"<p>The streaming media configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig":{"name":"fileManagerConfig","abstract":"<p>The file manager configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:":{"name":"-initWithLifecycle:lockScreen:logging:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:":{"name":"+configurationWithLifecycle:lockScreen:logging:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeActive":{"name":"powerModeActive","abstract":"<p>References signal <q>PowerMode_UB</q>.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeQualificationStatus":{"name":"powerModeQualificationStatus","abstract":"<p>References signal <q>PowerModeQF</q>. See PowerModeQualificationStatus.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)carModeStatus":{"name":"carModeStatus","abstract":"<p>References signal <q>CarMode</q>. See CarMode.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeStatus":{"name":"powerModeStatus","abstract":"<p>References signal <q>PowerMode</q>. See PowerMode.</p>","parent_name":"SDLClusterModeStatus"},"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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)fanSpeed":{"name":"fanSpeed","abstract":"<p>Speed of Fan in integer</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)currentTemperature":{"name":"currentTemperature","abstract":"<p>The Current Temperature in SDLTemperature</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)desiredTemperature":{"name":"desiredTemperature","abstract":"<p>Desired Temperature in SDLTemperature</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acEnable":{"name":"acEnable","abstract":"<p>Represents if AC is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)circulateAirEnable":{"name":"circulateAirEnable","abstract":"<p>Represents if circulation of air is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)autoModeEnable":{"name":"autoModeEnable","abstract":"<p>Represents if auto mode is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)defrostZone":{"name":"defrostZone","abstract":"<p>Represents the kind of defrost zone</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)dualModeEnable":{"name":"dualModeEnable","abstract":"<p>Represents if dual mode is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acMaxEnable":{"name":"acMaxEnable","abstract":"<p>Represents if ac max is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)ventilationMode":{"name":"ventilationMode","abstract":"<p>Represents the kind of Ventilation zone</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedSteeringWheelEnable":{"name":"heatedSteeringWheelEnable","abstract":"<p>@abstract value false means disabled/turn off, value true means enabled/turn on.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedWindshieldEnable":{"name":"heatedWindshieldEnable","abstract":"<p>@abstract value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedRearWindowEnable":{"name":"heatedRearWindowEnable","abstract":"<p>@abstract value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedMirrorsEnable":{"name":"heatedMirrorsEnable","abstract":"<p>@abstract Value false means disabled, value true means enabled.</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Availability of the control of fan speed.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)desiredTemperatureAvailable":{"name":"desiredTemperatureAvailable","abstract":"<p>Availability of the control of desired temperature.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acEnableAvailable":{"name":"acEnableAvailable","abstract":"<p>Availability of the control of turn on/off AC.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acMaxEnableAvailable":{"name":"acMaxEnableAvailable","abstract":"<p>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":"<p>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":"<p>Availability of the control of enable/disable auto mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)dualModeEnableAvailable":{"name":"dualModeEnableAvailable","abstract":"<p>Availability of the control of enable/disable dual mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZoneAvailable":{"name":"defrostZoneAvailable","abstract":"<p>Availability of the control of defrost zones.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZone":{"name":"defrostZone","abstract":"<p>A set of all defrost zones that are controllable.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationModeAvailable":{"name":"ventilationModeAvailable","abstract":"<p>Availability of the control of air ventilation mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationMode":{"name":"ventilationMode","abstract":"<p>A set of all ventilation modes that are controllable.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedSteeringWheelAvailable":{"name":"heatedSteeringWheelAvailable","abstract":"<p>@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":"<p>@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":"<p>@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":"<p>@abstract Availability of the control (enable/disable) of heated Mirrors.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout":{"name":"defaultTimeout","abstract":"<p>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 <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout\">timeout</a></code> for more details. If this is not set by you, it will default to 10 seconds.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultLayout":{"name":"defaultLayout","abstract":"<p>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 <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout\">layout</a></code> for more details. If this is not set by you, it will default to <code>SDLChoiceSetLayoutList</code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)title":{"name":"title","abstract":"<p>Maps to PerformInteraction.initialText. The title of the choice set, and/or the initial text on a keyboard prompt.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>Maps to PerformInteraction.initialPrompt. The initial prompt spoken to the user at the start of an interaction.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout":{"name":"layout","abstract":"<p>Maps to PerformInteraction.interactionLayout. Whether the presented choices are arranged as a set of tiles or a list.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout":{"name":"timeout","abstract":"<p>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 <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout\">defaultTimeout</a></code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>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.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Maps to PerformInteraction.helpPrompt. This is the spoken string when a user speaks <q>help</q> when the interaction is occurring.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpList":{"name":"helpList","abstract":"<p>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.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)delegate":{"name":"delegate","abstract":"<p>The delegate of this choice set, called when the user interacts with it.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)choices":{"name":"choices","abstract":"<p>The choices to be displayed to the user within this choice set. These choices could match those already preloaded via <code>SDLScreenManager preloadChoices:withCompletionHandler:</code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:choices:":{"name":"-initWithTitle:delegate:choices:","abstract":"<p>Initialize with a title, delegate, and choices. It will use the default timeout and layout, all other properties (such as prompts) will be <code>nil</code>.</p>","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":"<p>Initializer with all possible properties.</p>","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":"<p>Initializer with all possible properties.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)text":{"name":"text","abstract":"<p>Maps to Choice.menuName. The primary text of the cell. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are not permitted and will result in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> failing to initialize.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryText":{"name":"secondaryText","abstract":"<p>Maps to Choice.secondaryText. Optional secondary text of the cell, if available. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are permitted.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)tertiaryText":{"name":"tertiaryText","abstract":"<p>Maps to Choice.tertiaryText. Optional tertitary text of the cell, if available. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are permitted.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>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.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)artwork":{"name":"artwork","abstract":"<p>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.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryArtwork":{"name":"secondaryArtwork","abstract":"<p>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.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)init":{"name":"-init","abstract":"<p>Initialize the cell with nothing. This is unavailable</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:":{"name":"-initWithText:","abstract":"<p>Initialize the cell with text and nothing else.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:artwork:voiceCommands:":{"name":"-initWithText:artwork:voiceCommands:","abstract":"<p>Initialize the cell with text, optional artwork, and optional voice commands</p>","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":"<p>Initialize the cell with all optional items</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:":{"name":"-initWithId:menuName:vrCommands:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)choiceID":{"name":"choiceID","abstract":"<p>The application-scoped identifier that uniquely identifies this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)menuName":{"name":"menuName","abstract":"<p>Text which appears in menu, representing this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)vrCommands":{"name":"vrCommands","abstract":"<p>VR synonyms for this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)image":{"name":"image","abstract":"<p>The image of the choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryText":{"name":"secondaryText","abstract":"<p>Secondary text to display; e.g. address of POI in a search result entry</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)tertiaryText":{"name":"tertiaryText","abstract":"<p>Tertiary text to display; e.g. distance to POI for a search result entry</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryImage":{"name":"secondaryImage","abstract":"<p>Secondary image for choice</p>","parent_name":"SDLChoice"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:":{"name":"-initWithLanguage:hmiDisplayLanguage:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)language":{"name":"language","abstract":"<p>The language the app wants to change to</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>HMI display language</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)appName":{"name":"appName","abstract":"<p>Request a new app name registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ttsName":{"name":"ttsName","abstract":"<p>Request a new TTSName registration.</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"<p>Request a new app short name registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)vrSynonyms":{"name":"vrSynonyms","abstract":"<p>Request a new VR synonyms registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLCarWindowViewController.html#/c:objc(cs)SDLCarWindowViewController(py)supportedOrientation":{"name":"supportedOrientation","abstract":"<p>The supported interface orientation you wish to use. Defaults to MaskPortrait.</p>","parent_name":"SDLCarWindowViewController"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:":{"name":"-initWithButtonName:moduleType:","abstract":"<p>Undocumented</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleType":{"name":"moduleType","abstract":"<p>The module where the button should be pressed.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonName":{"name":"buttonName","abstract":"<p>The name of supported RC climate or radio button.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press event.</p>","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":"<p>A NSNumber value indicates whether the button supports a SHORT press</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"<p>A NSNumber value indicates whether the button supports a LONG press</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"<p>A NSNumber value indicates whether the button supports <q>button down</q> and <q>button up</q></p>","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":"<p>References signal <q>VedsDrvBelt_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBeltDeployed":{"name":"passengerBeltDeployed","abstract":"<p>References signal <q>VedsPasBelt_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBuckleBelted":{"name":"passengerBuckleBelted","abstract":"<p>References signal <q>VedsRw1PasBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBuckleBelted":{"name":"driverBuckleBelted","abstract":"<p>References signal <q>VedsRw1DrvBckl_D_Ltchd</q>. See VehicleDataEventStatus</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow2BuckleBelted":{"name":"leftRow2BuckleBelted","abstract":"<p>References signal <q>VedsRw2lBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerChildDetected":{"name":"passengerChildDetected","abstract":"<p>References signal <q>VedsRw1PasChld_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow2BuckleBelted":{"name":"rightRow2BuckleBelted","abstract":"<p>References signal <q>VedsRw2rBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow2BuckleBelted":{"name":"middleRow2BuckleBelted","abstract":"<p>References signal <q>VedsRw2mBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow3BuckleBelted":{"name":"middleRow3BuckleBelted","abstract":"<p>References signal <q>VedsRw3mBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow3BuckleBelted":{"name":"leftRow3BuckleBelted","abstract":"<p>References signal <q>VedsRw3lBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow3BuckleBelted":{"name":"rightRow3BuckleBelted","abstract":"<p>References signal <q>VedsRw3rBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRearInflatableBelted":{"name":"leftRearInflatableBelted","abstract":"<p>References signal <q>VedsRw2lRib_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRearInflatableBelted":{"name":"rightRearInflatableBelted","abstract":"<p>References signal <q>VedsRw2rRib_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BeltDeployed":{"name":"middleRow1BeltDeployed","abstract":"<p>References signal <q>VedsRw1mBelt_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BuckleBelted":{"name":"middleRow1BuckleBelted","abstract":"<p>References signal <q>VedsRw1mBckl_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)delegate":{"name":"delegate","abstract":"<p>The delegate describing when files are done playing or any errors that occur</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)playing":{"name":"playing","abstract":"<p>Whether or not we are currently playing audio</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)queue":{"name":"queue","abstract":"<p>The queue of audio files that will be played in sequence</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)init":{"name":"-init","abstract":"<p>Init should only occur with dependencies. use <code>initWithManager:</code></p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)initWithManager:":{"name":"-initWithManager:","abstract":"<p>Create an audio stream manager with a reference to the parent stream manager.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithFileURL:":{"name":"-pushWithFileURL:","abstract":"<p>Push a new file URL onto the queue after converting it into the correct PCM format for streaming binary data. Call <code>playNextWhenReady</code> to start playing the next completed pushed file.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)playNextWhenReady":{"name":"-playNextWhenReady","abstract":"<p>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.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)stop":{"name":"-stop","abstract":"<p>Stop playing the queue after the current item completes and clear the queue. If nothing is playing, the queue will be cleared.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)samplingRate":{"name":"samplingRate","abstract":"<p>The sampling rate for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)bitsPerSample":{"name":"bitsPerSample","abstract":"<p>The sample depth in bit for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)audioType":{"name":"audioType","abstract":"<p>The audiotype for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(im)initWithSource:keepContext:volume:equalizerSettings:":{"name":"-initWithSource:keepContext:volume:equalizerSettings:","abstract":"<p>Constructs a newly allocated SDLAudioControlData object with given parameters</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)source":{"name":"source","abstract":"<p>@abstract In a getter response or a notification,","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)keepContext":{"name":"keepContext","abstract":"<p>@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":"<p>@abstract Reflects the volume of audio, from 0%-100%.</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)equalizerSettings":{"name":"equalizerSettings","abstract":"<p>@abstract Defines the list of supported channels (band) and their current/desired settings on HMI</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)</p>","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":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with given parameters</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@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":"<p>@abstract Availability of the control of audio source.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)keepContextAvailable":{"name":"keepContextAvailable","abstract":"<p>Availability of the keepContext parameter.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)volumeAvailable":{"name":"volumeAvailable","abstract":"<p>@abstract Availability of the control of audio volume.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerAvailable":{"name":"equalizerAvailable","abstract":"<p>@abstract Availability of the control of Equalizer Settings.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerMaxChannelId":{"name":"equalizerMaxChannelId","abstract":"<p>@abstract Must be included if equalizerAvailable=true,","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)isTemplate":{"name":"isTemplate","abstract":"<p>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 <code>UIImage</code>s rendering mode to <code>UIImageRenderingModeAlwaysTemplate</code>. 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.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:name:asImageFormat:":{"name":"+artworkWithImage:name:asImageFormat:","abstract":"<p>Convenience helper to create an ephemeral artwork from an image.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:asImageFormat:":{"name":"+artworkWithImage:asImageFormat:","abstract":"<p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:name:asImageFormat:":{"name":"+persistentArtworkWithImage:name:asImageFormat:","abstract":"<p>Convenience helper to create a persistent artwork from an image.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:asImageFormat:":{"name":"+persistentArtworkWithImage:asImageFormat:","abstract":"<p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:name:persistent:asImageFormat:":{"name":"-initWithImage:name:persistent:asImageFormat:","abstract":"<p>Create a file for transmission to the remote system from a UIImage.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:persistent:asImageFormat:":{"name":"-initWithImage:persistent:asImageFormat:","abstract":"<p>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&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(cm)currentAppInfo":{"name":"+currentAppInfo","abstract":"<p>Undocumented</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appDisplayName":{"name":"appDisplayName","abstract":"<p>The name displayed for the mobile application on the mobile device (can differ from the app name set in the initial RAI request).</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appBundleID":{"name":"appBundleID","abstract":"<p>The AppBundleID of an iOS application or package name of the Android application. This supports App Launch strategies for each platform.</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appVersion":{"name":"appVersion","abstract":"<p>Represents the build version number of this particular mobile app.</p>","parent_name":"SDLAppInfo"},"Classes/SDLAlertResponse.html#/c:objc(cs)SDLAlertResponse(py)tryAgainTime":{"name":"tryAgainTime","abstract":"<p>Undocumented</p>","parent_name":"SDLAlertResponse"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTS:softButtons:":{"name":"-initWithTTS:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTSChunks:softButtons:":{"name":"-initWithTTSChunks:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of text chunks.</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)softButtons":{"name":"softButtons","abstract":"<p>An arry of soft buttons. If omitted on supported displays, only the system defined <q>Close</q> SoftButton shall be displayed.</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:duration:":{"name":"-initWithAlertText1:alertText2:duration:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:":{"name":"-initWithAlertText1:alertText2:alertText3:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:softButtons:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:softButtons:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:playTone:":{"name":"-initWithTTS:playTone:","abstract":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:playTone:duration:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:playTone:":{"name":"-initWithTTSChunks:playTone:","abstract":"<p>Undocumented</p>","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":"<p>Undocumented</p>","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":"<p>Undocumented</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText1":{"name":"alertText1","abstract":"<p>The String to be displayed in the first field of the display during the Alert</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText2":{"name":"alertText2","abstract":"<p>The String to be displayed in the second field of the display during the Alert</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText3":{"name":"alertText3","abstract":"<p>the String to be displayed in the third field of the display during the Alert","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array which, taken together, specify what is to be spoken to the user</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)duration":{"name":"duration","abstract":"<p>The duration of the displayed portion of the alert, in milliseconds.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)playTone":{"name":"playTone","abstract":"<p>Whether the alert tone should be played before the TTS (if any) is spoken.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)progressIndicator":{"name":"progressIndicator","abstract":"<p>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.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)softButtons":{"name":"softButtons","abstract":"<p>App defined SoftButtons.</p>","parent_name":"SDLAlert"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverAirbagDeployed":{"name":"driverAirbagDeployed","abstract":"<p>References signal <q>VedsDrvBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverSideAirbagDeployed":{"name":"driverSideAirbagDeployed","abstract":"<p>References signal <q>VedsDrvSideBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverCurtainAirbagDeployed":{"name":"driverCurtainAirbagDeployed","abstract":"<p>References signal <q>VedsDrvCrtnBag_D_Ltchd</q>. See VehicleDataEventStatus</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerAirbagDeployed":{"name":"passengerAirbagDeployed","abstract":"<p>References signal <q>VedsPasBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerCurtainAirbagDeployed":{"name":"passengerCurtainAirbagDeployed","abstract":"<p>References signal <q>VedsPasCrtnBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverKneeAirbagDeployed":{"name":"driverKneeAirbagDeployed","abstract":"<p>References signal <q>VedsKneeDrvBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerSideAirbagDeployed":{"name":"passengerSideAirbagDeployed","abstract":"<p>References signal <q>VedsPasSideBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerKneeAirbagDeployed":{"name":"passengerKneeAirbagDeployed","abstract":"<p>References signal <q>VedsKneePasBag_D_Ltchd</q>. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:":{"name":"-initWithId:menuName:","abstract":"<p>Undocumented</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:position:":{"name":"-initWithId:menuName:position:","abstract":"<p>Undocumented</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuIcon:position:":{"name":"-initWithId:menuName:menuIcon:position:","abstract":"<p>Undocumented</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuID":{"name":"menuID","abstract":"<p>a Menu ID that identifies a sub menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)position":{"name":"position","abstract":"<p>a position of menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuName":{"name":"menuName","abstract":"<p>a menuName which is displayed representing this submenu item","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuIcon":{"name":"menuIcon","abstract":"<p>An image that is displayed alongside this submenu item</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Constructs a SDLAddCommand with a handler callback when an event occurs.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:handler:":{"name":"-initWithId:vrCommands:handler:","abstract":"<p>Convenience init for creating a voice command menu item.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:handler:":{"name":"-initWithId:vrCommands:menuName:handler:","abstract":"<p>Convenience init for creating a menu item with text.</p>","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":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","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":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","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":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler":{"name":"handler","abstract":"<p>A handler that will let you know when the button you created is subscribed.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdID":{"name":"cmdID","abstract":"<p>A unique id that identifies the command.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)menuParams":{"name":"menuParams","abstract":"<p>A <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLMenuParams.html\">SDLMenuParams</a></code> pointer which defines the command and how it is added to the command menu.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands":{"name":"vrCommands","abstract":"<p>An array of strings to be used as VR synonyms for this command.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdIcon":{"name":"cmdIcon","abstract":"<p>Image struct containing a static or dynamic icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html":{"name":"SDLAddCommand","abstract":"<p>This class will add a command to the application&rsquo;s Command Menu</p>"},"Classes.html#/c:objc(cs)SDLAddCommandResponse":{"name":"SDLAddCommandResponse","abstract":"<p>Response to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLAddCommand.html\">SDLAddCommand</a></code></p>"},"Classes/SDLAddSubMenu.html":{"name":"SDLAddSubMenu","abstract":"<p>Add a SDLSubMenu to the Command Menu"},"Classes.html#/c:objc(cs)SDLAddSubMenuResponse":{"name":"SDLAddSubMenuResponse","abstract":"<p>Response to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLAddSubMenu.html\">SDLAddSubMenu</a></code></p>"},"Classes/SDLAirbagStatus.html":{"name":"SDLAirbagStatus","abstract":"<p>A vehicle data status struct for airbags</p>"},"Classes/SDLAlert.html":{"name":"SDLAlert","abstract":"<p>Shows an alert which typically consists of text-to-speech message and text on the display. At least either alertText1, alertText2 or TTSChunks need to be provided.</p>"},"Classes/SDLAlertManeuver.html":{"name":"SDLAlertManeuver","abstract":"<p>Shows a SDLShowConstantTBT message with an optional voice command. This message is shown as an overlay over the display&rsquo;s base screen.</p>"},"Classes.html#/c:objc(cs)SDLAlertManeuverResponse":{"name":"SDLAlertManeuverResponse","abstract":"<p>Response to SDLAlertManeuver</p>"},"Classes/SDLAlertResponse.html":{"name":"SDLAlertResponse","abstract":"<p>Response to SDLAlert</p>"},"Classes/SDLAppInfo.html":{"name":"SDLAppInfo","abstract":"<p>A struct used in register app interface. Contains detailed information about the registered application.</p>"},"Classes/SDLArtwork.html":{"name":"SDLArtwork","abstract":"<p>Undocumented</p>"},"Classes/SDLAudioControlCapabilities.html":{"name":"SDLAudioControlCapabilities","abstract":"<p>Undocumented</p>"},"Classes/SDLAudioControlData.html":{"name":"SDLAudioControlData","abstract":"<p>Undocumented</p>"},"Classes/SDLAudioPassThruCapabilities.html":{"name":"SDLAudioPassThruCapabilities","abstract":"<p>Describes different audio type configurations for SDLPerformAudioPassThru, e.g. {8kHz,8-bit,PCM}</p>"},"Classes/SDLAudioStreamManager.html":{"name":"SDLAudioStreamManager","abstract":"<p>Undocumented</p>"},"Classes/SDLBeltStatus.html":{"name":"SDLBeltStatus","abstract":"<p>Vehicle data struct for the seat belt status</p>"},"Classes/SDLBodyInformation.html":{"name":"SDLBodyInformation","abstract":"<p>The body information including power modes.</p>"},"Classes/SDLButtonCapabilities.html":{"name":"SDLButtonCapabilities","abstract":"<p>Provides information about the capabilities of a SDL HMI button.</p>"},"Classes/SDLButtonPress.html":{"name":"SDLButtonPress","abstract":"<p>This RPC allows a remote control type mobile application to simulate a hardware button press event.</p>"},"Classes.html#/c:objc(cs)SDLButtonPressResponse":{"name":"SDLButtonPressResponse","abstract":"<p>Response to SDLButtonPress</p>"},"Classes/SDLCarWindowViewController.html":{"name":"SDLCarWindowViewController","abstract":"<p>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.</p>"},"Classes/SDLChangeRegistration.html":{"name":"SDLChangeRegistration","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLChangeRegistrationResponse":{"name":"SDLChangeRegistrationResponse","abstract":"<p>Response to SDLChangeRegistrations</p>"},"Classes/SDLChoice.html":{"name":"SDLChoice","abstract":"<p>A choice is an option which a user can select either via the menu or via voice recognition (VR) during an application initiated interaction.</p>"},"Classes/SDLChoiceCell.html":{"name":"SDLChoiceCell","abstract":"<p>Undocumented</p>"},"Classes/SDLChoiceSet.html":{"name":"SDLChoiceSet","abstract":"<p>Undocumented</p>"},"Classes/SDLClimateControlCapabilities.html":{"name":"SDLClimateControlCapabilities","abstract":"<p>Contains information about a climate control module&rsquo;s capabilities.</p>"},"Classes/SDLClimateControlData.html":{"name":"SDLClimateControlData","abstract":"<p>The current information for the Climate Remote Control Module</p>"},"Classes/SDLClusterModeStatus.html":{"name":"SDLClusterModeStatus","abstract":"<p>A vehicle data struct for the cluster mode and power status</p>"},"Classes/SDLConfiguration.html":{"name":"SDLConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLCreateInteractionChoiceSet.html":{"name":"SDLCreateInteractionChoiceSet","abstract":"<p>Creates a Choice Set which can be used in subsequent <em>SDLPerformInteraction</em> Operations.</p>"},"Classes.html#/c:objc(cs)SDLCreateInteractionChoiceSetResponse":{"name":"SDLCreateInteractionChoiceSetResponse","abstract":"<p>Response to SDLCreateInteractionChoiceSet has been called</p>"},"Classes/SDLDIDResult.html":{"name":"SDLDIDResult","abstract":"<p>A vehicle data struct</p>"},"Classes/SDLDateTime.html":{"name":"SDLDateTime","abstract":"<p>A struct referenced in SendLocation for an absolute date</p>"},"Classes/SDLDeleteCommand.html":{"name":"SDLDeleteCommand","abstract":"<p>Removes a command from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteCommandResponse":{"name":"SDLDeleteCommandResponse","abstract":"<p>Response to SDLDeleteCommand</p>"},"Classes/SDLDeleteFile.html":{"name":"SDLDeleteFile","abstract":"<p>Used to delete a file resident on the SDL module in the app&rsquo;s local cache."},"Classes/SDLDeleteFileResponse.html":{"name":"SDLDeleteFileResponse","abstract":"<p>Response to SDLDeleteFile</p>"},"Classes/SDLDeleteInteractionChoiceSet.html":{"name":"SDLDeleteInteractionChoiceSet","abstract":"<p>Deletes an existing Choice Set identified by the parameter"},"Classes.html#/c:objc(cs)SDLDeleteInteractionChoiceSetResponse":{"name":"SDLDeleteInteractionChoiceSetResponse","abstract":"<p>SDLDeleteInteractionChoiceSetResponse is sent, when SDLDeleteInteractionChoiceSet has been called</p>"},"Classes/SDLDeleteSubMenu.html":{"name":"SDLDeleteSubMenu","abstract":"<p>Deletes a submenu from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteSubMenuResponse":{"name":"SDLDeleteSubMenuResponse","abstract":"<p>Response to SDLDeleteSubMenu</p>"},"Classes/SDLDeviceInfo.html":{"name":"SDLDeviceInfo","abstract":"<p>Various information about connecting device. Referenced in RegisterAppInterface</p>"},"Classes/SDLDeviceStatus.html":{"name":"SDLDeviceStatus","abstract":"<p>Describes the status related to a connected mobile device or SDL and if or how it is represented in the vehicle.</p>"},"Classes/SDLDiagnosticMessage.html":{"name":"SDLDiagnosticMessage","abstract":"<p>Non periodic vehicle diagnostic request</p>"},"Classes/SDLDiagnosticMessageResponse.html":{"name":"SDLDiagnosticMessageResponse","abstract":"<p>Response to SDLDiagnosticMessage</p>"},"Classes/SDLDialNumber.html":{"name":"SDLDialNumber","abstract":"<p>This RPC is used to tell the head unit to use bluetooth to dial a phone number using the phone.</p>"},"Classes.html#/c:objc(cs)SDLDialNumberResponse":{"name":"SDLDialNumberResponse","abstract":"<p>The response to SDLDialNumber</p>"},"Classes/SDLDisplayCapabilities.html":{"name":"SDLDisplayCapabilities","abstract":"<p>Contains information about the display for the SDL system to which the application is currently connected.</p>"},"Classes/SDLECallInfo.html":{"name":"SDLECallInfo","abstract":"<p>A vehicle data struct for emergency call information</p>"},"Classes/SDLEmergencyEvent.html":{"name":"SDLEmergencyEvent","abstract":"<p>A vehicle data struct for an emergency event</p>"},"Classes/SDLEncodedSyncPData.html":{"name":"SDLEncodedSyncPData","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLEncodedSyncPDataResponse":{"name":"SDLEncodedSyncPDataResponse","abstract":"<p>The response to SDLEncodedSyncPData</p>"},"Classes.html#/c:objc(cs)SDLEndAudioPassThru":{"name":"SDLEndAudioPassThru","abstract":"<p>When this request is invoked, the audio capture stops</p>"},"Classes.html#/c:objc(cs)SDLEndAudioPassThruResponse":{"name":"SDLEndAudioPassThruResponse","abstract":"<p>Response to SDLEndAudioPassThru</p>"},"Classes/SDLEqualizerSettings.html":{"name":"SDLEqualizerSettings","abstract":"<p>Defines the each Equalizer channel settings.</p>"},"Classes/SDLFile.html":{"name":"SDLFile","abstract":"<p>Undocumented</p>"},"Classes/SDLFileManager.html":{"name":"SDLFileManager","abstract":"<p>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.</p>"},"Classes/SDLFileManagerConfiguration.html":{"name":"SDLFileManagerConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLFuelRange.html":{"name":"SDLFuelRange","abstract":"<p>Describes the distance a vehicle can travel with the current level of fuel.</p>"},"Classes/SDLGPSData.html":{"name":"SDLGPSData","abstract":"<p>Describes the GPS data. Not all data will be available on all carlines.</p>"},"Classes.html#/c:objc(cs)SDLGenericResponse":{"name":"SDLGenericResponse","abstract":"<p>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.</p>"},"Classes/SDLGetDTCs.html":{"name":"SDLGetDTCs","abstract":"<p>This RPC allows to request diagnostic module trouble codes from a certain"},"Classes/SDLGetDTCsResponse.html":{"name":"SDLGetDTCsResponse","abstract":"<p>Response to SDLGetDTCs</p>"},"Classes/SDLGetInteriorVehicleData.html":{"name":"SDLGetInteriorVehicleData","abstract":"<p>Reads the current status value of specified remote control module (type)."},"Classes/SDLGetInteriorVehicleDataResponse.html":{"name":"SDLGetInteriorVehicleDataResponse","abstract":"<p>A response to SDLGetInteriorVehicleData</p>"},"Classes/SDLGetSystemCapability.html":{"name":"SDLGetSystemCapability","abstract":"<p>Undocumented</p>"},"Classes/SDLGetSystemCapabilityResponse.html":{"name":"SDLGetSystemCapabilityResponse","abstract":"<p>Response to SDLGetSystemCapability</p>"},"Classes/SDLGetVehicleData.html":{"name":"SDLGetVehicleData","abstract":"<p>Requests current values of specific published vehicle data items.</p>"},"Classes/SDLGetVehicleDataResponse.html":{"name":"SDLGetVehicleDataResponse","abstract":"<p>Response to SDLGetVehicleData</p>"},"Classes/SDLGetWayPoints.html":{"name":"SDLGetWayPoints","abstract":"<p>Undocumented</p>"},"Classes/SDLGetWayPointsResponse.html":{"name":"SDLGetWayPointsResponse","abstract":"<p>Response to SDLGetWayPoints</p>"},"Classes/SDLHMICapabilities.html":{"name":"SDLHMICapabilities","abstract":"<p>Undocumented</p>"},"Classes/SDLHMIPermissions.html":{"name":"SDLHMIPermissions","abstract":"<p>Defining sets of HMI levels, which are permitted or prohibited for a given RPC.</p>"},"Classes/SDLHMISettingsControlCapabilities.html":{"name":"SDLHMISettingsControlCapabilities","abstract":"<p>Undocumented</p>"},"Classes/SDLHMISettingsControlData.html":{"name":"SDLHMISettingsControlData","abstract":"<p>Corresponds to <q>HMI_SETTINGS</q> ModuleType</p>"},"Classes/SDLHapticRect.html":{"name":"SDLHapticRect","abstract":"<p>Defines spatial for each user control object for video streaming application</p>"},"Classes/SDLHeadLampStatus.html":{"name":"SDLHeadLampStatus","abstract":"<p>Vehicle data struct for status of head lamps</p>"},"Classes/SDLImage.html":{"name":"SDLImage","abstract":"<p>Specifies which image shall be used e.g. in SDLAlerts or on SDLSoftbuttons provided the display supports it.</p>"},"Classes/SDLImageField.html":{"name":"SDLImageField","abstract":"<p>A struct used in DisplayCapabilities describing the capability of an image field</p>"},"Classes/SDLImageResolution.html":{"name":"SDLImageResolution","abstract":"<p>The resolution of an image</p>"},"Classes/SDLKeyboardProperties.html":{"name":"SDLKeyboardProperties","abstract":"<p>Configuration of on-screen keyboard (if available)</p>"},"Classes/SDLLifecycleConfiguration.html":{"name":"SDLLifecycleConfiguration","abstract":"<p>Configuration options for SDLManager</p>"},"Classes/SDLLifecycleConfigurationUpdate.html":{"name":"SDLLifecycleConfigurationUpdate","abstract":"<p>Configuration update options for SDLManager. This class can be used to update the lifecycle configuration in"},"Classes/SDLLightCapabilities.html":{"name":"SDLLightCapabilities","abstract":"<p>Undocumented</p>"},"Classes/SDLLightControlCapabilities.html":{"name":"SDLLightControlCapabilities","abstract":"<p>Undocumented</p>"},"Classes/SDLLightControlData.html":{"name":"SDLLightControlData","abstract":"<p>Undocumented</p>"},"Classes/SDLLightState.html":{"name":"SDLLightState","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLListFiles":{"name":"SDLListFiles","abstract":"<p>Requests the current list of resident filenames for the registered app. Not"},"Classes/SDLListFilesResponse.html":{"name":"SDLListFilesResponse","abstract":"<p>Response to SDLListFiles</p>"},"Classes/SDLLocationCoordinate.html":{"name":"SDLLocationCoordinate","abstract":"<p>Describes a coordinate on earth</p>"},"Classes/SDLLocationDetails.html":{"name":"SDLLocationDetails","abstract":"<p>Describes a location, including its coordinate, name, etc. Used in WayPoints.</p>"},"Classes/SDLLockScreenConfiguration.html":{"name":"SDLLockScreenConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLLockScreenViewController.html":{"name":"SDLLockScreenViewController","abstract":"<p>Undocumented</p>"},"Classes/SDLLogConfiguration.html":{"name":"SDLLogConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLLogFileModule.html":{"name":"SDLLogFileModule","abstract":"<p>Undocumented</p>"},"Classes/SDLLogFilter.html":{"name":"SDLLogFilter","abstract":"<p>Undocumented</p>"},"Classes/SDLLogManager.html":{"name":"SDLLogManager","abstract":"<p>This is the central manager of logging. A developer should not have to interact with this class, it is exclusively used internally.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetAppleSystemLog":{"name":"SDLLogTargetAppleSystemLog","abstract":"<p>The Apple System Log target is an iOS 2.0+ compatible log target that logs to both the Console and to the System Log.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetFile":{"name":"SDLLogTargetFile","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetOSLog":{"name":"SDLLogTargetOSLog","abstract":"<p>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). </p>"},"Classes/SDLManager.html":{"name":"SDLManager","abstract":"<p>Undocumented</p>"},"Classes/SDLMassageCushionFirmness.html":{"name":"SDLMassageCushionFirmness","abstract":"<p>The intensity or firmness of a cushion.</p>"},"Classes/SDLMassageModeData.html":{"name":"SDLMassageModeData","abstract":"<p>Specify the mode of a massage zone.</p>"},"Classes/SDLMenuCell.html":{"name":"SDLMenuCell","abstract":"<p>Undocumented</p>"},"Classes/SDLMenuParams.html":{"name":"SDLMenuParams","abstract":"<p>Used when adding a sub menu to an application menu or existing sub menu.</p>"},"Classes/SDLMetadataTags.html":{"name":"SDLMetadataTags","abstract":"<p>Undocumented</p>"},"Classes/SDLModuleData.html":{"name":"SDLModuleData","abstract":"<p>Describes a remote control module&rsquo;s data</p>"},"Classes/SDLMyKey.html":{"name":"SDLMyKey","abstract":"<p>Vehicle Data struct</p>"},"Classes/SDLNavigationCapability.html":{"name":"SDLNavigationCapability","abstract":"<p>Extended capabilities for an onboard navigation system</p>"},"Classes/SDLNotificationConstants.html":{"name":"SDLNotificationConstants","abstract":"<p>Undocumented</p>"},"Classes/SDLOasisAddress.html":{"name":"SDLOasisAddress","abstract":"<p>Struct used in SendLocation describing an address</p>"},"Classes/SDLOnAppInterfaceUnregistered.html":{"name":"SDLOnAppInterfaceUnregistered","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLOnAudioPassThru":{"name":"SDLOnAudioPassThru","abstract":"<p>Binary data is in binary part of hybrid msg.</p>"},"Classes/SDLOnButtonEvent.html":{"name":"SDLOnButtonEvent","abstract":"<p>Notifies application that user has depressed or released a button to which"},"Classes/SDLOnButtonPress.html":{"name":"SDLOnButtonPress","abstract":"<p>Notifies application of button press events for buttons to which the application is subscribed. SDL supports two button press events defined as follows:</p>"},"Classes/SDLOnCommand.html":{"name":"SDLOnCommand","abstract":"<p>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.</p>"},"Classes/SDLOnDriverDistraction.html":{"name":"SDLOnDriverDistraction","abstract":"<p>Notifies the application of the current driver distraction state (whether driver distraction rules are in effect, or not).</p>"},"Classes/SDLOnEncodedSyncPData.html":{"name":"SDLOnEncodedSyncPData","abstract":"<p>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 ***</p>"},"Classes/SDLOnHMIStatus.html":{"name":"SDLOnHMIStatus"},"Classes/SDLOnHashChange.html":{"name":"SDLOnHashChange","abstract":"<p>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.</p>"},"Classes/SDLOnInteriorVehicleData.html":{"name":"SDLOnInteriorVehicleData","abstract":"<p>Notifications when subscribed vehicle data changes.</p>"},"Classes/SDLOnKeyboardInput.html":{"name":"SDLOnKeyboardInput","abstract":"<p>Sent when a keyboard presented by a PerformInteraction has a keyboard input.</p>"},"Classes/SDLOnLanguageChange.html":{"name":"SDLOnLanguageChange","abstract":"<p>Provides information to what language the SDL HMI language was changed</p>"},"Classes/SDLOnLockScreenStatus.html":{"name":"SDLOnLockScreenStatus","abstract":"<p>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.</p>"},"Classes/SDLOnPermissionsChange.html":{"name":"SDLOnPermissionsChange","abstract":"<p>Provides update to app of which sets of functions are available</p>"},"Classes/SDLOnRCStatus.html":{"name":"SDLOnRCStatus","abstract":"<p>OnRCStatus notifications to all registered mobile applications and the HMI whenever"},"Classes/SDLOnSyncPData.html":{"name":"SDLOnSyncPData","abstract":"<p>DEPRECATED</p>"},"Classes/SDLOnSystemRequest.html":{"name":"SDLOnSystemRequest","abstract":"<p>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)</p>"},"Classes/SDLOnTBTClientState.html":{"name":"SDLOnTBTClientState","abstract":"<p>Provides applications with notifications specific to the current TBT client status on the module</p>"},"Classes/SDLOnTouchEvent.html":{"name":"SDLOnTouchEvent","abstract":"<p>Notifies about touch events on the screen&rsquo;s prescribed area during video streaming</p>"},"Classes/SDLOnVehicleData.html":{"name":"SDLOnVehicleData","abstract":"<p>Callback for the periodic and non periodic vehicle data read function.</p>"},"Classes/SDLOnWayPointChange.html":{"name":"SDLOnWayPointChange","abstract":"<p>Notification which provides the entire LocationDetails when there is a change to any waypoints or destination.</p>"},"Classes/SDLParameterPermissions.html":{"name":"SDLParameterPermissions","abstract":"<p>Defining sets of parameters, which are permitted or prohibited for a given RPC.</p>"},"Classes/SDLPerformAudioPassThru.html":{"name":"SDLPerformAudioPassThru","abstract":"<p>This will open an audio pass thru session. By doing so the app can receive"},"Classes.html#/c:objc(cs)SDLPerformAudioPassThruResponse":{"name":"SDLPerformAudioPassThruResponse","abstract":"<p>Response to SDLPerformAudioPassThru</p>"},"Classes/SDLPerformInteraction.html":{"name":"SDLPerformInteraction","abstract":"<p>Performs an application-initiated interaction in which the user can select a"},"Classes/SDLPerformInteractionResponse.html":{"name":"SDLPerformInteractionResponse","abstract":"<p>PerformInteraction Response is sent, when SDLPerformInteraction has been called</p>"},"Classes/SDLPermissionItem.html":{"name":"SDLPermissionItem","abstract":"<p>Undocumented</p>"},"Classes/SDLPermissionManager.html":{"name":"SDLPermissionManager","abstract":"<p>Undocumented</p>"},"Classes/SDLPhoneCapability.html":{"name":"SDLPhoneCapability","abstract":"<p>Extended capabilities of the module&rsquo;s phone feature</p>"},"Classes/SDLPinchGesture.html":{"name":"SDLPinchGesture","abstract":"<p>Undocumented</p>"},"Classes/SDLPresetBankCapabilities.html":{"name":"SDLPresetBankCapabilities","abstract":"<p>Contains information about on-screen preset capabilities.</p>"},"Classes/SDLPutFile.html":{"name":"SDLPutFile","abstract":"<p>Used to push a binary data onto the SDL module from a mobile device, such as icons and album art.</p>"},"Classes/SDLPutFileResponse.html":{"name":"SDLPutFileResponse","abstract":"<p>Response to SDLPutFile</p>"},"Classes/SDLRDSData.html":{"name":"SDLRDSData","abstract":"<p>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.</p>"},"Classes/SDLRGBColor.html":{"name":"SDLRGBColor","abstract":"<p>Undocumented</p>"},"Classes/SDLRPCMessage.html":{"name":"SDLRPCMessage","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLRPCNotification":{"name":"SDLRPCNotification","abstract":"<p>An RPC sent from the head unit to the app about some data change, such as a button was pressed</p>"},"Classes/SDLRPCNotificationNotification.html":{"name":"SDLRPCNotificationNotification","abstract":"<p>An NSNotification object that makes retrieving internal SDLRPCNotification data easier</p>"},"Classes/SDLRPCRequest.html":{"name":"SDLRPCRequest","abstract":"<p>Undocumented</p>"},"Classes/SDLRPCResponse.html":{"name":"SDLRPCResponse","abstract":"<p>Undocumented</p>"},"Classes/SDLRPCResponseNotification.html":{"name":"SDLRPCResponseNotification","abstract":"<p>An NSNotification object that makes retrieving internal SDLRPCResponse data easier</p>"},"Classes/SDLRPCStruct.html":{"name":"SDLRPCStruct","abstract":"<p>Undocumented</p>"},"Classes/SDLRadioControlCapabilities.html":{"name":"SDLRadioControlCapabilities","abstract":"<p>Contains information about a radio control module&rsquo;s capabilities.</p>"},"Classes/SDLRadioControlData.html":{"name":"SDLRadioControlData","abstract":"<p>Include information (both read-only and changeable data) about a remote control radio module.</p>"},"Classes/SDLReadDID.html":{"name":"SDLReadDID","abstract":"<p>Non periodic vehicle data read request. This is an RPC to get diagnostics"},"Classes/SDLReadDIDResponse.html":{"name":"SDLReadDIDResponse","abstract":"<p>A response to ReadDID</p>"},"Classes/SDLRectangle.html":{"name":"SDLRectangle","abstract":"<p>A struct describing a rectangle</p>"},"Classes/SDLRegisterAppInterface.html":{"name":"SDLRegisterAppInterface","abstract":"<p>Registers the application&rsquo;s interface with SDL. The <code>RegisterAppInterface</code> 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 <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses.html#/c:objc(cs)SDLUnregisterAppInterface\">SDLUnregisterAppInterface</a></code> method, or by SDL sending an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLOnAppInterfaceUnregistered.html\">SDLOnAppInterfaceUnregistered</a></code> notification, or by loss of the underlying transport connection, or closing of the underlying message transmission protocol RPC session.</p>"},"Classes/SDLRegisterAppInterfaceResponse.html":{"name":"SDLRegisterAppInterfaceResponse","abstract":"<p>Response to SDLRegisterAppInterface</p>"},"Classes/SDLRemoteControlCapabilities.html":{"name":"SDLRemoteControlCapabilities","abstract":"<p>Capabilities of the remote control feature</p>"},"Classes/SDLResetGlobalProperties.html":{"name":"SDLResetGlobalProperties","abstract":"<p>Resets the passed global properties to their default values as defined by"},"Classes.html#/c:objc(cs)SDLResetGlobalPropertiesResponse":{"name":"SDLResetGlobalPropertiesResponse","abstract":"<p>Response to ResetGlobalProperties</p>"},"Classes/SDLSISData.html":{"name":"SDLSISData","abstract":"<p>HD radio Station Information Service (SIS) data.</p>"},"Classes/SDLScreenManager.html":{"name":"SDLScreenManager","abstract":"<p>Undocumented</p>"},"Classes/SDLScreenParams.html":{"name":"SDLScreenParams","abstract":"<p>A struct in DisplayCapabilities describing parameters related to a video / touch input area</p>"},"Classes/SDLScrollableMessage.html":{"name":"SDLScrollableMessage","abstract":"<p>Creates a full screen overlay containing a large block of formatted text that"},"Classes.html#/c:objc(cs)SDLScrollableMessageResponse":{"name":"SDLScrollableMessageResponse","abstract":"<p>Response to SDLScrollableMessage</p>"},"Classes/SDLSeatControlCapabilities.html":{"name":"SDLSeatControlCapabilities","abstract":"<p>Include information about a seat control capabilities.</p>"},"Classes/SDLSeatControlData.html":{"name":"SDLSeatControlData","abstract":"<p>Seat control data corresponds to <q>SEAT</q> ModuleType.</p>"},"Classes/SDLSeatMemoryAction.html":{"name":"SDLSeatMemoryAction","abstract":"<p>Specify the action to be performed.</p>"},"Classes/SDLSendHapticData.html":{"name":"SDLSendHapticData","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLSendHapticDataResponse":{"name":"SDLSendHapticDataResponse","abstract":"<p>Response to SDLSendHapticData</p>"},"Classes/SDLSendLocation.html":{"name":"SDLSendLocation","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLSendLocationResponse":{"name":"SDLSendLocationResponse","abstract":"<p>Response to SDLSendLocation</p>"},"Classes/SDLSetAppIcon.html":{"name":"SDLSetAppIcon","abstract":"<p>Used to set existing local file on SDL as the app&rsquo;s icon. Not supported on"},"Classes.html#/c:objc(cs)SDLSetAppIconResponse":{"name":"SDLSetAppIconResponse","abstract":"<p>Response to SDLSetAppIcon</p>"},"Classes/SDLSetDisplayLayout.html":{"name":"SDLSetDisplayLayout","abstract":"<p>Used to set an alternate display layout. If not sent, default screen for"},"Classes/SDLSetDisplayLayoutResponse.html":{"name":"SDLSetDisplayLayoutResponse","abstract":"<p>Response to SDLSetDisplayLayout</p>"},"Classes/SDLSetGlobalProperties.html":{"name":"SDLSetGlobalProperties","abstract":"<p>Sets global property values</p>"},"Classes.html#/c:objc(cs)SDLSetGlobalPropertiesResponse":{"name":"SDLSetGlobalPropertiesResponse","abstract":"<p>Response to SDLSetGlobalProperties</p>"},"Classes/SDLSetInteriorVehicleData.html":{"name":"SDLSetInteriorVehicleData","abstract":"<p>This RPC allows a remote control type mobile application to"},"Classes/SDLSetInteriorVehicleDataResponse.html":{"name":"SDLSetInteriorVehicleDataResponse","abstract":"<p>Response to SDLSetInteriorVehicleData</p>"},"Classes/SDLSetMediaClockTimer.html":{"name":"SDLSetMediaClockTimer","abstract":"<p>Sets the media clock/timer value and the update method (e.g.count-up,"},"Classes.html#/c:objc(cs)SDLSetMediaClockTimerResponse":{"name":"SDLSetMediaClockTimerResponse","abstract":"<p>Response to SDLSetMediaClockTimer</p>"},"Classes/SDLShow.html":{"name":"SDLShow","abstract":"<p>Updates the application&rsquo;s display text area, regardless of whether or not"},"Classes/SDLShowConstantTBT.html":{"name":"SDLShowConstantTBT","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLShowConstantTBTResponse":{"name":"SDLShowConstantTBTResponse","abstract":"<p>Response to SDLShowConstantTBT</p>"},"Classes.html#/c:objc(cs)SDLShowResponse":{"name":"SDLShowResponse","abstract":"<p>Response to SDLShow</p>"},"Classes/SDLSingleTireStatus.html":{"name":"SDLSingleTireStatus","abstract":"<p>Tire pressure status of a single tire.</p>"},"Classes/SDLSlider.html":{"name":"SDLSlider","abstract":"<p>Creates a full screen or pop-up overlay (depending on platform) with a single user controlled slider</p>"},"Classes/SDLSliderResponse.html":{"name":"SDLSliderResponse","abstract":"<p>Response to SDLSlider</p>"},"Classes/SDLSoftButton.html":{"name":"SDLSoftButton","abstract":"<p>Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts</p>"},"Classes/SDLSoftButtonCapabilities.html":{"name":"SDLSoftButtonCapabilities","abstract":"<p>Contains information about a SoftButton&rsquo;s capabilities.</p>"},"Classes/SDLSoftButtonObject.html":{"name":"SDLSoftButtonObject","abstract":"<p>A soft button wrapper object that is capable of storing and switching between states</p>"},"Classes/SDLSoftButtonState.html":{"name":"SDLSoftButtonState","abstract":"<p>Undocumented</p>"},"Classes/SDLSpeak.html":{"name":"SDLSpeak","abstract":"<p>Speaks a phrase over the vehicle audio system using SDL&rsquo;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&rsquo;s TTS engine to speak a <q>speech-sculpted</q> phrase.</p>"},"Classes.html#/c:objc(cs)SDLSpeakResponse":{"name":"SDLSpeakResponse","abstract":"<p>Response to SDLSpeak</p>"},"Classes/SDLStartTime.html":{"name":"SDLStartTime","abstract":"<p>Describes the hour, minute and second values used to set the media clock.</p>"},"Classes/SDLStationIDNumber.html":{"name":"SDLStationIDNumber","abstract":"<p>Describes the hour, minute and second values used to set the media clock.</p>"},"Classes/SDLStreamingMediaConfiguration.html":{"name":"SDLStreamingMediaConfiguration","abstract":"<p>Undocumented</p>"},"Classes/SDLStreamingMediaManager.html":{"name":"SDLStreamingMediaManager","abstract":"<p>Undocumented</p>"},"Classes/SDLSubscribeButton.html":{"name":"SDLSubscribeButton","abstract":"<p>Establishes a subscription to button notifications for HMI buttons. Buttons"},"Classes.html#/c:objc(cs)SDLSubscribeButtonResponse":{"name":"SDLSubscribeButtonResponse","abstract":"<p>Response to SDLSubscribeButton</p>"},"Classes/SDLSubscribeVehicleData.html":{"name":"SDLSubscribeVehicleData","abstract":"<p>Subscribes to specific published vehicle data items. The data will be only sent if it has changed. The application will be notified by the <code>onVehicleData</code> notification whenever new data is available. The update rate is dependent on sensors, vehicle architecture and vehicle type.</p>"},"Classes/SDLSubscribeVehicleDataResponse.html":{"name":"SDLSubscribeVehicleDataResponse","abstract":"<p>Response to SDLSubscribeVehicleData</p>"},"Classes.html#/c:objc(cs)SDLSubscribeWayPoints":{"name":"SDLSubscribeWayPoints","abstract":"<p>A SDLSubscribeWaypoints can be sent to subscribe"},"Classes.html#/c:objc(cs)SDLSubscribeWayPointsResponse":{"name":"SDLSubscribeWayPointsResponse","abstract":"<p>Response to SubscribeWayPoints</p>"},"Classes/SDLSyncMsgVersion.html":{"name":"SDLSyncMsgVersion","abstract":"<p>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.</p>"},"Classes.html#/c:objc(cs)SDLSyncPData":{"name":"SDLSyncPData","abstract":"<p>Undocumented</p>"},"Classes.html#/c:objc(cs)SDLSyncPDataResponse":{"name":"SDLSyncPDataResponse","abstract":"<p>Response to SyncPData</p>"},"Classes/SDLSystemCapability.html":{"name":"SDLSystemCapability","abstract":"<p>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 <q>navigationCapability</q> should exist.</p>"},"Classes/SDLSystemCapabilityManager.html":{"name":"SDLSystemCapabilityManager","abstract":"<p>Undocumented</p>"},"Classes/SDLTTSChunk.html":{"name":"SDLTTSChunk","abstract":"<p>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).</p>"},"Classes/SDLTemperature.html":{"name":"SDLTemperature","abstract":"<p>Struct using in Remote Control representing a temperature.</p>"},"Classes/SDLTemplateColorScheme.html":{"name":"SDLTemplateColorScheme","abstract":"<p>Undocumented</p>"},"Classes/SDLTextField.html":{"name":"SDLTextField","abstract":"<p>Struct defining the characteristics of a displayed field on the HMI.</p>"},"Classes/SDLTireStatus.html":{"name":"SDLTireStatus","abstract":"<p>Struct used in Vehicle Data; the status and pressure of the tires.</p>"},"Classes/SDLTouch.html":{"name":"SDLTouch","abstract":"<p>Undocumented</p>"},"Classes/SDLTouchCoord.html":{"name":"SDLTouchCoord","abstract":"<p>The coordinate of a touch, used in a touch event</p>"},"Classes/SDLTouchEvent.html":{"name":"SDLTouchEvent","abstract":"<p>A touch which occurred on the IVI system during projection</p>"},"Classes/SDLTouchEventCapabilities.html":{"name":"SDLTouchEventCapabilities","abstract":"<p>The capabilities of touches during projection applications</p>"},"Classes/SDLTouchManager.html":{"name":"SDLTouchManager","abstract":"<p>Undocumented</p>"},"Classes/SDLTurn.html":{"name":"SDLTurn","abstract":"<p>A struct used in UpdateTurnList for Turn-by-Turn navigation applications</p>"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterface":{"name":"SDLUnregisterAppInterface","abstract":"<p>Terminates an application&rsquo;s interface registration. This causes SDL&reg; to"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterfaceResponse":{"name":"SDLUnregisterAppInterfaceResponse","abstract":"<p>Response to UnregisterAppInterface</p>"},"Classes/SDLUnsubscribeButton.html":{"name":"SDLUnsubscribeButton","abstract":"<p>Deletes a subscription to button notifications for the specified button. For"},"Classes.html#/c:objc(cs)SDLUnsubscribeButtonResponse":{"name":"SDLUnsubscribeButtonResponse","abstract":"<p>Response to UnsubscribeButton</p>"},"Classes/SDLUnsubscribeVehicleData.html":{"name":"SDLUnsubscribeVehicleData","abstract":"<p>This function is used to unsubscribe the notifications from the"},"Classes/SDLUnsubscribeVehicleDataResponse.html":{"name":"SDLUnsubscribeVehicleDataResponse","abstract":"<p>Response to UnsubscribeVehicleData</p>"},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPoints":{"name":"SDLUnsubscribeWayPoints","abstract":"<p>Request to unsubscribe from navigation WayPoints and Destination</p>"},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPointsResponse":{"name":"SDLUnsubscribeWayPointsResponse","abstract":"<p>Response to UnsubscribeWayPoints</p>"},"Classes/SDLUpdateTurnList.html":{"name":"SDLUpdateTurnList","abstract":"<p>Updates the list of next maneuvers, which can be requested by the user pressing the softbutton<br></p>"},"Classes.html#/c:objc(cs)SDLUpdateTurnListResponse":{"name":"SDLUpdateTurnListResponse","abstract":"<p>Response to UpdateTurnList</p>"},"Classes/SDLVehicleDataResult.html":{"name":"SDLVehicleDataResult","abstract":"<p>Individual published data request result</p>"},"Classes/SDLVehicleType.html":{"name":"SDLVehicleType","abstract":"<p>Describes the type of vehicle the mobile phone is connected with.</p>"},"Classes/SDLVideoStreamingCapability.html":{"name":"SDLVideoStreamingCapability","abstract":"<p>Contains information about this system&rsquo;s video streaming capabilities</p>"},"Classes/SDLVideoStreamingFormat.html":{"name":"SDLVideoStreamingFormat","abstract":"<p>An available format for video streaming in projection applications</p>"},"Classes/SDLVoiceCommand.html":{"name":"SDLVoiceCommand","abstract":"<p>Undocumented</p>"},"Classes/SDLVRHelpItem.html":{"name":"SDLVRHelpItem","abstract":"<p>A help item for voice commands, used locally in interaction lists and globally</p>"},"Categories/NSString(SDLEnum).html#/c:objc(cs)NSString(im)isEqualToEnum:":{"name":"-isEqualToEnum:","abstract":"<p>Returns whether or not two enums are equal.</p>","parent_name":"NSString(SDLEnum)"},"Categories/NSString(SDLEnum).html":{"name":"NSString(SDLEnum)","abstract":"<p>Undocumented</p>"},"Categories.html":{"name":"Categories","abstract":"<p>The following categories are available globally.</p>"},"Classes.html":{"name":"Classes","abstract":"<p>The following classes are available globally.</p>"},"Constants.html":{"name":"Constants","abstract":"<p>The following constants are available globally.</p>"},"Enums.html":{"name":"Enumerations","abstract":"<p>The following enumerations are available globally.</p>"},"Protocols.html":{"name":"Protocols","abstract":"<p>The following protocols are available globally.</p>"},"Type Definitions.html":{"name":"Type Definitions","abstract":"<p>The following type definitions are available globally.</p>"}} \ No newline at end of file
diff --git a/docs/undocumented.json b/docs/undocumented.json
index 2244b63c8..a9db88108 100644
--- a/docs/undocumented.json
+++ b/docs/undocumented.json
@@ -8,37 +8,23 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAddCommand.h",
- "line": 50,
- "symbol": "SDLAddCommand.-initWithId:vrCommands:handler:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAddCommand.h",
- "line": 52,
- "symbol": "SDLAddCommand.-initWithId:vrCommands:menuName:handler:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAddCommand.h",
- "line": 54,
- "symbol": "SDLAddCommand.-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAddSubMenu.h",
+ "line": 26,
+ "symbol": "SDLAddSubMenu.-initWithId:menuName:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAddSubMenu.h",
- "line": 24,
- "symbol": "SDLAddSubMenu.-initWithId:menuName:",
+ "line": 28,
+ "symbol": "SDLAddSubMenu.-initWithId:menuName:position:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAddSubMenu.h",
- "line": 26,
- "symbol": "SDLAddSubMenu.-initWithId:menuName:position:",
+ "line": 30,
+ "symbol": "SDLAddSubMenu.-initWithId:menuName:menuIcon:position:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
@@ -176,6 +162,20 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAudioControlCapabilities.h",
+ "line": 8,
+ "symbol": "SDLAudioControlCapabilities",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAudioControlData.h",
+ "line": 11,
+ "symbol": "SDLAudioControlData",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLAudioStreamManager.h",
"line": 19,
"symbol": "SDLErrorDomainAudioStreamManager",
@@ -260,6 +260,69 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceCell.h",
+ "line": 15,
+ "symbol": "SDLChoiceCell",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceSet.h",
+ "line": 18,
+ "symbol": "SDLChoiceSetLayout",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.enum",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceSet.h",
+ "line": 18,
+ "symbol": "SDLChoiceSetLayout",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceSet.h",
+ "line": 19,
+ "symbol": "SDLChoiceSetLayout.SDLChoiceSetLayoutList",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceSet.h",
+ "line": 20,
+ "symbol": "SDLChoiceSetLayout.SDLChoiceSetLayoutTiles",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceSet.h",
+ "line": 23,
+ "symbol": "SDLChoiceSet",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceSetDelegate.h",
+ "line": 18,
+ "symbol": "SDLChoiceSetDelegate",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.protocol",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceSetDelegate.h",
+ "line": 20,
+ "symbol": "SDLChoiceSetDelegate.-choiceSet:didSelectChoice:withSource:atRowIndex:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLChoiceSetDelegate.h",
+ "line": 21,
+ "symbol": "SDLChoiceSetDelegate.-choiceSet:didReceiveError:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLClimateControlCapabilities.h",
"line": 16,
"symbol": "SDLClimateControlCapabilities.-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:",
@@ -267,6 +330,13 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLClimateControlCapabilities.h",
+ "line": 18,
+ "symbol": "SDLClimateControlCapabilities.-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLClimateControlData.h",
"line": 19,
"symbol": "SDLClimateControlData.-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:",
@@ -274,8 +344,15 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLClimateControlData.h",
+ "line": 21,
+ "symbol": "SDLClimateControlData.-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLConfiguration.h",
- "line": 18,
+ "line": 19,
"symbol": "SDLConfiguration",
"symbol_kind": "sourcekitten.source.lang.objc.decl.class",
"warning": "undocumented"
@@ -386,6 +463,13 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLEqualizerSettings.h",
+ "line": 14,
+ "symbol": "SDLEqualizerSettings.-initWithChannelId:channelSetting:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLErrorConstants.h",
"line": 97,
"symbol": "SDLTextAndGraphicManagerError.SDLTextAndGraphicManagerErrorPendingUpdateSuperseded",
@@ -407,6 +491,41 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLErrorConstants.h",
+ "line": 118,
+ "symbol": "SDLChoiceSetManagerError",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.enum",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLErrorConstants.h",
+ "line": 118,
+ "symbol": "SDLChoiceSetManagerError",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLErrorConstants.h",
+ "line": 119,
+ "symbol": "SDLChoiceSetManagerError.SDLChoiceSetManagerErrorPendingPresentationDeleted",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLErrorConstants.h",
+ "line": 120,
+ "symbol": "SDLChoiceSetManagerError.SDLChoiceSetManagerErrorDeletionFailed",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLErrorConstants.h",
+ "line": 121,
+ "symbol": "SDLChoiceSetManagerError.SDLChoiceSetManagerErrorUploadFailed",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.enumcase",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLFile.h",
"line": 16,
"symbol": "SDLFile",
@@ -422,16 +541,16 @@
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLFileManager.h",
- "line": 20,
- "symbol": "SDLFileName",
+ "line": 21,
+ "symbol": "SDLFileManagerStartupCompletionHandler",
"symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLFileManager.h",
- "line": 22,
- "symbol": "SDLFileManagerStartupCompletionHandler",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLFileManagerConfiguration.h",
+ "line": 15,
+ "symbol": "SDLFileManagerConfiguration",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
"warning": "undocumented"
},
{
@@ -491,13 +610,6 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLGetVehicleData.h",
- "line": 23,
- "symbol": "SDLGetVehicleData.-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:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLGetWayPoints.h",
"line": 10,
"symbol": "SDLGetWayPoints",
@@ -519,30 +631,16 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLHapticRect.h",
- "line": 22,
- "symbol": "SDLHapticRect.-initWithId:rect:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLImage.h",
- "line": 18,
- "symbol": "SDLImage.-initWithName:ofType:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLImage.h",
- "line": 20,
- "symbol": "SDLImage.-initWithName:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLHMISettingsControlCapabilities.h",
+ "line": 8,
+ "symbol": "SDLHMISettingsControlCapabilities",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLImage.h",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLHapticRect.h",
"line": 22,
- "symbol": "SDLImage.-initWithStaticImageValue:",
+ "symbol": "SDLHapticRect.-initWithId:rect:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
@@ -554,6 +652,13 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLKeyboardDelegate.h",
+ "line": 31,
+ "symbol": "SDLKeyboardDelegate",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.protocol",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLKeyboardProperties.h",
"line": 17,
"symbol": "SDLKeyboardProperties.-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:",
@@ -562,12 +667,40 @@
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLLifecycleConfiguration.h",
- "line": 25,
+ "line": 26,
"symbol": "SDLLifecycleConfiguration.-init",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLLightCapabilities.h",
+ "line": 10,
+ "symbol": "SDLLightCapabilities",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLLightControlCapabilities.h",
+ "line": 10,
+ "symbol": "SDLLightControlCapabilities",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLLightControlData.h",
+ "line": 10,
+ "symbol": "SDLLightControlData",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLLightState.h",
+ "line": 13,
+ "symbol": "SDLLightState",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLLockScreenConfiguration.h",
"line": 14,
"symbol": "SDLLockScreenConfiguration",
@@ -576,7 +709,7 @@
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLLockScreenConfiguration.h",
- "line": 41,
+ "line": 47,
"symbol": "SDLLockScreenConfiguration.-init",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
@@ -785,20 +918,6 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLMenuCell.h",
- "line": 46,
- "symbol": "SDLMenuCell.-initWithTitle:icon:voiceCommands:handler:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLMenuCell.h",
- "line": 47,
- "symbol": "SDLMenuCell.-initWithTitle:subCells:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLMenuParams.h",
"line": 17,
"symbol": "SDLMenuParams.-initWithMenuName:",
@@ -827,20 +946,6 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLModuleData.h",
- "line": 18,
- "symbol": "SDLModuleData.-initWithRadioControlData:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLModuleData.h",
- "line": 19,
- "symbol": "SDLModuleData.-initWithClimateControlData:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNavigationCapability.h",
"line": 18,
"symbol": "SDLNavigationCapability.-initWithSendLocation:waypoints:",
@@ -885,517 +990,531 @@
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
"line": 109,
- "symbol": "SDLDidReceiveError",
+ "symbol": "SDLTransportConnectError",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
"line": 110,
- "symbol": "SDLDidReceiveLockScreenIcon",
+ "symbol": "SDLDidReceiveError",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
"line": 111,
- "symbol": "SDLDidBecomeReady",
+ "symbol": "SDLDidReceiveLockScreenIcon",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
"line": 112,
+ "symbol": "SDLDidBecomeReady",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
+ "line": 113,
"symbol": "SDLDidUpdateProjectionView",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 118,
+ "line": 119,
"symbol": "SDLDidReceiveAddCommandResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 119,
+ "line": 120,
"symbol": "SDLDidReceiveAddSubMenuResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 120,
+ "line": 121,
"symbol": "SDLDidReceiveAlertResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 121,
+ "line": 122,
"symbol": "SDLDidReceiveAlertManeuverResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 122,
+ "line": 123,
"symbol": "SDLDidReceiveButtonPressResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 123,
+ "line": 124,
"symbol": "SDLDidReceiveChangeRegistrationResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 124,
+ "line": 125,
"symbol": "SDLDidReceiveCreateInteractionChoiceSetResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 125,
+ "line": 126,
"symbol": "SDLDidReceiveDeleteCommandResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 126,
+ "line": 127,
"symbol": "SDLDidReceiveDeleteFileResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 127,
+ "line": 128,
"symbol": "SDLDidReceiveDeleteInteractionChoiceSetResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 128,
+ "line": 129,
"symbol": "SDLDidReceiveDeleteSubmenuResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 129,
+ "line": 130,
"symbol": "SDLDidReceiveDiagnosticMessageResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 130,
+ "line": 131,
"symbol": "SDLDidReceiveDialNumberResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 131,
+ "line": 132,
"symbol": "SDLDidReceiveEncodedSyncPDataResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 132,
+ "line": 133,
"symbol": "SDLDidReceiveEndAudioPassThruResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 133,
+ "line": 134,
"symbol": "SDLDidReceiveGenericResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 134,
+ "line": 135,
"symbol": "SDLDidReceiveGetDTCsResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 135,
+ "line": 136,
"symbol": "SDLDidReceiveGetInteriorVehicleDataResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 136,
+ "line": 137,
"symbol": "SDLDidReceiveGetSystemCapabilitiesResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 137,
+ "line": 138,
"symbol": "SDLDidReceiveGetVehicleDataResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 138,
+ "line": 139,
"symbol": "SDLDidReceiveGetWaypointsResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 139,
+ "line": 140,
"symbol": "SDLDidReceiveListFilesResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 140,
+ "line": 141,
"symbol": "SDLDidReceivePerformAudioPassThruResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 141,
+ "line": 142,
"symbol": "SDLDidReceivePerformInteractionResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 142,
+ "line": 143,
"symbol": "SDLDidReceivePutFileResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 143,
+ "line": 144,
"symbol": "SDLDidReceiveReadDIDResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 144,
+ "line": 145,
"symbol": "SDLDidReceiveRegisterAppInterfaceResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 145,
+ "line": 146,
"symbol": "SDLDidReceiveResetGlobalPropertiesResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 146,
+ "line": 147,
"symbol": "SDLDidReceiveScrollableMessageResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 147,
+ "line": 148,
"symbol": "SDLDidReceiveSendHapticDataResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 148,
+ "line": 149,
"symbol": "SDLDidReceiveSendLocationResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 149,
+ "line": 150,
"symbol": "SDLDidReceiveSetAppIconResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 150,
+ "line": 151,
"symbol": "SDLDidReceiveSetDisplayLayoutResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 151,
+ "line": 152,
"symbol": "SDLDidReceiveSetGlobalPropertiesResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 152,
+ "line": 153,
"symbol": "SDLDidReceiveSetInteriorVehicleDataResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 153,
+ "line": 154,
"symbol": "SDLDidReceiveSetMediaClockTimerResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 154,
+ "line": 155,
"symbol": "SDLDidReceiveShowConstantTBTResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 155,
+ "line": 156,
"symbol": "SDLDidReceiveShowResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 156,
+ "line": 157,
"symbol": "SDLDidReceiveSliderResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 157,
+ "line": 158,
"symbol": "SDLDidReceiveSpeakResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 158,
+ "line": 159,
"symbol": "SDLDidReceiveSubscribeButtonResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 159,
+ "line": 160,
"symbol": "SDLDidReceiveSubscribeVehicleDataResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 160,
+ "line": 161,
"symbol": "SDLDidReceiveSubscribeWaypointsResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 161,
+ "line": 162,
"symbol": "SDLDidReceiveSyncPDataResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 162,
+ "line": 163,
"symbol": "SDLDidReceiveUpdateTurnListResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 163,
+ "line": 164,
"symbol": "SDLDidReceiveUnregisterAppInterfaceResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 164,
+ "line": 165,
"symbol": "SDLDidReceiveUnsubscribeButtonResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 165,
+ "line": 166,
"symbol": "SDLDidReceiveUnsubscribeVehicleDataResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 166,
+ "line": 167,
"symbol": "SDLDidReceiveUnsubscribeWaypointsResponse",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 172,
+ "line": 173,
"symbol": "SDLDidChangeDriverDistractionStateNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 173,
+ "line": 174,
"symbol": "SDLDidChangeHMIStatusNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 174,
+ "line": 175,
"symbol": "SDLDidReceiveAudioPassThruNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 175,
+ "line": 176,
"symbol": "SDLDidReceiveAppUnregisteredNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 176,
+ "line": 177,
"symbol": "SDLDidReceiveButtonEventNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 177,
+ "line": 178,
"symbol": "SDLDidReceiveButtonPressNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 178,
+ "line": 179,
"symbol": "SDLDidReceiveCommandNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 179,
+ "line": 180,
"symbol": "SDLDidReceiveEncodedDataNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 180,
+ "line": 181,
"symbol": "SDLDidReceiveInteriorVehicleDataNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 181,
+ "line": 182,
"symbol": "SDLDidReceiveKeyboardInputNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 182,
+ "line": 183,
"symbol": "SDLDidChangeLanguageNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 183,
+ "line": 184,
"symbol": "SDLDidChangeLockScreenStatusNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 184,
+ "line": 185,
"symbol": "SDLDidReceiveNewHashNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 185,
+ "line": 186,
"symbol": "SDLDidReceiveVehicleIconNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 186,
+ "line": 187,
"symbol": "SDLDidChangePermissionsNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 187,
+ "line": 188,
+ "symbol": "SDLDidReceiveRemoteControlStatusNotification",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
+ "line": 189,
"symbol": "SDLDidReceiveSystemRequestNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 188,
+ "line": 190,
"symbol": "SDLDidChangeTurnByTurnStateNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 189,
+ "line": 191,
"symbol": "SDLDidReceiveTouchEventNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 190,
+ "line": 192,
"symbol": "SDLDidReceiveVehicleDataNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 191,
+ "line": 193,
"symbol": "SDLDidReceiveWaypointNotification",
"symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLNotificationConstants.h",
- "line": 193,
+ "line": 195,
"symbol": "SDLNotificationConstants",
"symbol_kind": "sourcekitten.source.lang.objc.decl.class",
"warning": "undocumented"
@@ -1562,27 +1681,6 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLPutFile.h",
- "line": 21,
- "symbol": "SDLPutFile.-initWithFileName:fileType:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLPutFile.h",
- "line": 23,
- "symbol": "SDLPutFile.-initWithFileName:fileType:persistentFile:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLPutFile.h",
- "line": 25,
- "symbol": "SDLPutFile.-initWithFileName:fileType:persistentFile:systemFile:offset:length:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRDSData.h",
"line": 14,
"symbol": "SDLRDSData.-initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:",
@@ -1590,6 +1688,13 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRGBColor.h",
+ "line": 16,
+ "symbol": "SDLRGBColor",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRPCMessage.h",
"line": 10,
"symbol": "SDLRPCMessage",
@@ -1667,20 +1772,6 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRadioControlCapabilities.h",
- "line": 14,
- "symbol": "SDLRadioControlCapabilities.-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRadioControlData.h",
- "line": 18,
- "symbol": "SDLRadioControlData.-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLReadDID.h",
"line": 24,
"symbol": "SDLReadDID.-initWithECUName:didLocation:",
@@ -1688,52 +1779,38 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRegisterAppInterface.h",
- "line": 91,
- "symbol": "SDLRegisterAppInterface.-initWithLifecycleConfiguration:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRegisterAppInterface.h",
- "line": 93,
- "symbol": "SDLRegisterAppInterface.-initWithAppName:appId:languageDesired:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
- "warning": "undocumented"
- },
- {
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRegisterAppInterface.h",
- "line": 95,
- "symbol": "SDLRegisterAppInterface.-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRemoteControlCapabilities.h",
+ "line": 22,
+ "symbol": "SDLRemoteControlCapabilities.-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRegisterAppInterface.h",
- "line": 97,
- "symbol": "SDLRegisterAppInterface.-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLResetGlobalProperties.h",
+ "line": 30,
+ "symbol": "SDLResetGlobalProperties.-initWithProperties:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLRemoteControlCapabilities.h",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSISData.h",
"line": 18,
- "symbol": "SDLRemoteControlCapabilities.-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:",
+ "symbol": "SDLSISData.-initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLResetGlobalProperties.h",
- "line": 30,
- "symbol": "SDLResetGlobalProperties.-initWithProperties:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLScreenManager.h",
+ "line": 44,
+ "symbol": "SDLScreenManager",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLScreenManager.h",
- "line": 31,
- "symbol": "SDLScreenManager",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "line": 214,
+ "symbol": "SDLScreenManager.-softButtonObjectNamed:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
@@ -1751,6 +1828,20 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSeatControlCapabilities.h",
+ "line": 14,
+ "symbol": "SDLSeatControlCapabilities.-initWithName:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSeatControlCapabilities.h",
+ "line": 16,
+ "symbol": "SDLSeatControlCapabilities.-initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSendLocation.h",
"line": 16,
"symbol": "SDLSendLocation",
@@ -1780,19 +1871,26 @@
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSetDisplayLayout.h",
- "line": 20,
+ "line": 22,
"symbol": "SDLSetDisplayLayout.-initWithPredefinedLayout:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSetDisplayLayout.h",
- "line": 22,
+ "line": 24,
"symbol": "SDLSetDisplayLayout.-initWithLayout:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSetDisplayLayout.h",
+ "line": 26,
+ "symbol": "SDLSetDisplayLayout.-initWithPredefinedLayout:dayColorScheme:nightColorScheme:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSetInteriorVehicleData.h",
"line": 18,
"symbol": "SDLSetInteriorVehicleData.-initWithModuleData:",
@@ -1801,14 +1899,21 @@
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSetMediaClockTimer.h",
- "line": 25,
+ "line": 26,
+ "symbol": "SDLSetMediaClockTimer.-initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSetMediaClockTimer.h",
+ "line": 28,
"symbol": "SDLSetMediaClockTimer.-initWithUpdateMode:hours:minutes:seconds:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},
{
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLSetMediaClockTimer.h",
- "line": 27,
+ "line": 30,
"symbol": "SDLSetMediaClockTimer.-initWithUpdateMode:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
@@ -1933,6 +2038,1259 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 14,
+ "symbol": "SDLStaticIconName",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 19,
+ "symbol": "SDLStaticIconNameAcceptCall",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 24,
+ "symbol": "SDLStaticIconNameAddWaypoint",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 29,
+ "symbol": "SDLStaticIconNameAlbum",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 34,
+ "symbol": "SDLStaticIconNameAmbientLighting",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 39,
+ "symbol": "SDLStaticIconNameArrowNorth",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 44,
+ "symbol": "SDLStaticIconNameAudioMute",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 49,
+ "symbol": "SDLStaticIconNameAudiobookEpisode",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 54,
+ "symbol": "SDLStaticIconNameAudiobookNarrator",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 59,
+ "symbol": "SDLStaticIconNameAuxillaryAudio",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 64,
+ "symbol": "SDLStaticIconNameBack",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 69,
+ "symbol": "SDLStaticIconNameBatteryCapacity0Of5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 74,
+ "symbol": "SDLStaticIconNameBatteryCapacity1Of5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 79,
+ "symbol": "SDLStaticIconNameBatteryCapacity2Of5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 84,
+ "symbol": "SDLStaticIconNameBatteryCapacity3Of5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 89,
+ "symbol": "SDLStaticIconNameBatteryCapacity4Of5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 94,
+ "symbol": "SDLStaticIconNameBatteryCapacity5Of5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 99,
+ "symbol": "SDLStaticIconNameBluetoothAudioSource",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 104,
+ "symbol": "SDLStaticIconNameBluetooth1",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 109,
+ "symbol": "SDLStaticIconNameBluetooth2",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 114,
+ "symbol": "SDLStaticIconNameBrowse",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 119,
+ "symbol": "SDLStaticIconNameCellPhoneInRoamingMode",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 124,
+ "symbol": "SDLStaticIconNameCellServiceSignalStrength0Of5Bars",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 129,
+ "symbol": "SDLStaticIconNameCellServiceSignalStrength1Of5Bars",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 134,
+ "symbol": "SDLStaticIconNameCellServiceSignalStrength2Of5Bars",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 139,
+ "symbol": "SDLStaticIconNameCellServiceSignalStrength3Of5Bars",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 144,
+ "symbol": "SDLStaticIconNameCellServiceSignalStrength4Of5Bars",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 149,
+ "symbol": "SDLStaticIconNameCellServiceSignalStrength5Of5Bars",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 154,
+ "symbol": "SDLStaticIconNameChangeLaneLeft",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 159,
+ "symbol": "SDLStaticIconNameChangeLaneRight",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 164,
+ "symbol": "SDLStaticIconNameCheckBoxChecked",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 169,
+ "symbol": "SDLStaticIconNameCheckBoxUnchecked",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 174,
+ "symbol": "SDLStaticIconNameClimate",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 179,
+ "symbol": "SDLStaticIconNameClock",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 184,
+ "symbol": "SDLStaticIconNameCompose",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 189,
+ "symbol": "SDLStaticIconNameContact",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 194,
+ "symbol": "SDLStaticIconNameContinue",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 199,
+ "symbol": "SDLStaticIconNameDash",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 204,
+ "symbol": "SDLStaticIconNameDate",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 209,
+ "symbol": "SDLStaticIconNameDelete",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 214,
+ "symbol": "SDLStaticIconNameDestination",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 219,
+ "symbol": "SDLStaticIconNameDestinationFerryAhead",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 224,
+ "symbol": "SDLStaticIconNameEbookmark",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 229,
+ "symbol": "SDLStaticIconNameEmpty",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 234,
+ "symbol": "SDLStaticIconNameEndCall",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 239,
+ "symbol": "SDLStaticIconNameFail",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 244,
+ "symbol": "SDLStaticIconNameFastForward30Secs",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 249,
+ "symbol": "SDLStaticIconNameFavoriteHeart",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 254,
+ "symbol": "SDLStaticIconNameFavoriteStar",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 259,
+ "symbol": "SDLStaticIconNameFaxNumber",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 264,
+ "symbol": "SDLStaticIconNameFilename",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 269,
+ "symbol": "SDLStaticIconNameFilter",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 274,
+ "symbol": "SDLStaticIconNameFolder",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 279,
+ "symbol": "SDLStaticIconNameFuelPrices",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 284,
+ "symbol": "SDLStaticIconNameFullMap",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 289,
+ "symbol": "SDLStaticIconNameGenericPhoneNumber",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 294,
+ "symbol": "SDLStaticIconNameGenre",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 299,
+ "symbol": "SDLStaticIconNameGlobalKeyboard",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 304,
+ "symbol": "SDLStaticIconNameHighwayExitInformation",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 309,
+ "symbol": "SDLStaticIconNameHomePhoneNumber",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 314,
+ "symbol": "SDLStaticIconNameHyperlink",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 319,
+ "symbol": "SDLStaticIconNameID3TagUnknown",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 324,
+ "symbol": "SDLStaticIconNameIncomingCalls",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 329,
+ "symbol": "SDLStaticIconNameInformation",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 334,
+ "symbol": "SDLStaticIconNameIPodMediaSource",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 339,
+ "symbol": "SDLStaticIconNameJoinCalls",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 344,
+ "symbol": "SDLStaticIconNameKeepLeft",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 349,
+ "symbol": "SDLStaticIconNameKeepRight",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 354,
+ "symbol": "SDLStaticIconNameKey",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 359,
+ "symbol": "SDLStaticIconNameLeft",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 364,
+ "symbol": "SDLStaticIconNameLeftArrow",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 369,
+ "symbol": "SDLStaticIconNameLeftExit",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 374,
+ "symbol": "SDLStaticIconNameLineInAudioSource",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 379,
+ "symbol": "SDLStaticIconNameLocked",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 384,
+ "symbol": "SDLStaticIconNameMediaControlLeftArrow",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 389,
+ "symbol": "SDLStaticIconNameMediaControlRecording",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 394,
+ "symbol": "SDLStaticIconNameMediaControlRightArrow",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 399,
+ "symbol": "SDLStaticIconNameMediaControlStop",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 404,
+ "symbol": "SDLStaticIconNameMicrophone",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 409,
+ "symbol": "SDLStaticIconNameMissedCalls",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 414,
+ "symbol": "SDLStaticIconNameMobilePhoneNumber",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 419,
+ "symbol": "SDLStaticIconNameMoveDown",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 424,
+ "symbol": "SDLStaticIconNameMoveUp",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 429,
+ "symbol": "SDLStaticIconNameMP3TagArtist",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 434,
+ "symbol": "SDLStaticIconNameNavigation",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 439,
+ "symbol": "SDLStaticIconNameNavigationCurrentDirection",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 444,
+ "symbol": "SDLStaticIconNameNegativeRatingThumbsDown",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 449,
+ "symbol": "SDLStaticIconNameNew",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 454,
+ "symbol": "SDLStaticIconNameOfficePhoneNumber",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 459,
+ "symbol": "SDLStaticIconNameOpened",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 464,
+ "symbol": "SDLStaticIconNameOrigin",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 469,
+ "symbol": "SDLStaticIconNameOutgoingCalls",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 474,
+ "symbol": "SDLStaticIconNamePause",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 479,
+ "symbol": "SDLStaticIconNamePhoneCall1",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 484,
+ "symbol": "SDLStaticIconNamePhoneCall2",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 489,
+ "symbol": "SDLStaticIconNamePhoneDevice",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 494,
+ "symbol": "SDLStaticIconNamePhonebook",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 499,
+ "symbol": "SDLStaticIconNamePhoto",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 504,
+ "symbol": "SDLStaticIconNamePlay",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 509,
+ "symbol": "SDLStaticIconNamePlaylist",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 514,
+ "symbol": "SDLStaticIconNamePopUp",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 519,
+ "symbol": "SDLStaticIconNamePositiveRatingThumbsUp",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 524,
+ "symbol": "SDLStaticIconNamePower",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 529,
+ "symbol": "SDLStaticIconNamePrimaryPhone",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 534,
+ "symbol": "SDLStaticIconNameRadioButtonChecked",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 539,
+ "symbol": "SDLStaticIconNameRadioButtonUnchecked",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 544,
+ "symbol": "SDLStaticIconNameRecentCalls",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 549,
+ "symbol": "SDLStaticIconNameRecentDestinations",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 554,
+ "symbol": "SDLStaticIconNameRedo",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 559,
+ "symbol": "SDLStaticIconNameRefresh",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 564,
+ "symbol": "SDLStaticIconNameRemoteDiagnosticsCheckEngine",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 569,
+ "symbol": "SDLStaticIconNameRendered911Assist",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 574,
+ "symbol": "SDLStaticIconNameRepeat",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 579,
+ "symbol": "SDLStaticIconNameRepeatPlay",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 584,
+ "symbol": "SDLStaticIconNameReply",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 589,
+ "symbol": "SDLStaticIconNameRewind30Secs",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 594,
+ "symbol": "SDLStaticIconNameRight",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 599,
+ "symbol": "SDLStaticIconNameRightExit",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 604,
+ "symbol": "SDLStaticIconNameRingtones",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 609,
+ "symbol": "SDLStaticIconNameRoundaboutLeftHand1",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 614,
+ "symbol": "SDLStaticIconNameRoundaboutLeftHand2",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 619,
+ "symbol": "SDLStaticIconNameRoundaboutLeftHand3",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 624,
+ "symbol": "SDLStaticIconNameRoundaboutLeftHand4",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 629,
+ "symbol": "SDLStaticIconNameRoundaboutLeftHand5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 634,
+ "symbol": "SDLStaticIconNameRoundaboutLeftHand6",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 639,
+ "symbol": "SDLStaticIconNameRoundaboutLeftHand7",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 644,
+ "symbol": "SDLStaticIconNameRoundaboutRightHand1",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 649,
+ "symbol": "SDLStaticIconNameRoundaboutRightHand2",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 654,
+ "symbol": "SDLStaticIconNameRoundaboutRightHand3",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 659,
+ "symbol": "SDLStaticIconNameRoundaboutRightHand4",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 664,
+ "symbol": "SDLStaticIconNameRoundaboutRightHand5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 669,
+ "symbol": "SDLStaticIconNameRoundaboutRightHand6",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 674,
+ "symbol": "SDLStaticIconNameRoundaboutRightHand7",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 679,
+ "symbol": "SDLStaticIconNameRSS",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 684,
+ "symbol": "SDLStaticIconNameSettings",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 689,
+ "symbol": "SDLStaticIconNameSharpLeft",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 694,
+ "symbol": "SDLStaticIconNameSharpRight",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 699,
+ "symbol": "SDLStaticIconNameShow",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 704,
+ "symbol": "SDLStaticIconNameShufflePlay",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 709,
+ "symbol": "SDLStaticIconNameSkiPlaces",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 714,
+ "symbol": "SDLStaticIconNameSlightLeft",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 719,
+ "symbol": "SDLStaticIconNameSlightRight",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 724,
+ "symbol": "SDLStaticIconNameSmartphone",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 729,
+ "symbol": "SDLStaticIconNameSortList",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 734,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber0",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 739,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber1",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 744,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber2",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 749,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber3",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 754,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber4",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 759,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber5",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 764,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber6",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 769,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber7",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 774,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber8",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 779,
+ "symbol": "SDLStaticIconNameSpeedDialNumbersNumber9",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 784,
+ "symbol": "SDLStaticIconNameSuccess",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 789,
+ "symbol": "SDLStaticIconNameTrackTitle",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 794,
+ "symbol": "SDLStaticIconNameTrafficReport",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 799,
+ "symbol": "SDLStaticIconNameTurnList",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 804,
+ "symbol": "SDLStaticIconNameUTurnLeftTraffic",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 809,
+ "symbol": "SDLStaticIconNameUTurnRightTraffic",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 814,
+ "symbol": "SDLStaticIconNameUndo",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 819,
+ "symbol": "SDLStaticIconNameUnlocked",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 824,
+ "symbol": "SDLStaticIconNameUSBMediaAudioSource",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 829,
+ "symbol": "SDLStaticIconNameVoiceControlScrollbarListItemNo1",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 834,
+ "symbol": "SDLStaticIconNameVoiceControlScrollbarListItemNo2",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 839,
+ "symbol": "SDLStaticIconNameVoiceControlScrollbarListItemNo3",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 844,
+ "symbol": "SDLStaticIconNameVoiceControlScrollbarListItemNo4",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 849,
+ "symbol": "SDLStaticIconNameVoiceRecognitionFailed",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 854,
+ "symbol": "SDLStaticIconNameVoiceRecognitionPause",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 859,
+ "symbol": "SDLStaticIconNameVoiceRecognitionSuccessful",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 864,
+ "symbol": "SDLStaticIconNameVoiceRecognitionSystemActive",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 869,
+ "symbol": "SDLStaticIconNameVoiceRecognitionSystemListening",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 874,
+ "symbol": "SDLStaticIconNameVoiceRecognitionTryAgain",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 879,
+ "symbol": "SDLStaticIconNameWarning",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 884,
+ "symbol": "SDLStaticIconNameWeather",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 889,
+ "symbol": "SDLStaticIconNameWifiFull",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 894,
+ "symbol": "SDLStaticIconNameZoomIn",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStaticIconName.h",
+ "line": 899,
+ "symbol": "SDLStaticIconNameZoomOut",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStationIDNumber.h",
+ "line": 16,
+ "symbol": "SDLStationIDNumber.-initWithCountryCode:fccFacilityId:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingAudioManagerType.h",
"line": 11,
"symbol": "SDLStreamingAudioManagerType",
@@ -2073,6 +3431,104 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 40,
+ "symbol": "SDLVideoStreamManagerState",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 41,
+ "symbol": "SDLVideoStreamManagerStateStopped",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 42,
+ "symbol": "SDLVideoStreamManagerStateStarting",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 43,
+ "symbol": "SDLVideoStreamManagerStateReady",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 44,
+ "symbol": "SDLVideoStreamManagerStateSuspended",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 45,
+ "symbol": "SDLVideoStreamManagerStateShuttingDown",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 47,
+ "symbol": "SDLAudioStreamManagerState",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 48,
+ "symbol": "SDLAudioStreamManagerStateStopped",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 49,
+ "symbol": "SDLAudioStreamManagerStateStarting",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 50,
+ "symbol": "SDLAudioStreamManagerStateReady",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 51,
+ "symbol": "SDLAudioStreamManagerStateShuttingDown",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 53,
+ "symbol": "SDLAppState",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 54,
+ "symbol": "SDLAppStateInactive",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerConstants.h",
+ "line": 55,
+ "symbol": "SDLAppStateActive",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLStreamingMediaManagerDataSource.h",
"line": 16,
"symbol": "SDLStreamingMediaManagerDataSource",
@@ -2143,6 +3599,27 @@
"warning": "undocumented"
},
{
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTemplateColorScheme.h",
+ "line": 18,
+ "symbol": "SDLTemplateColorScheme",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.class",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTemplateColorScheme.h",
+ "line": 20,
+ "symbol": "SDLTemplateColorScheme.-initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTemplateColorScheme.h",
+ "line": 21,
+ "symbol": "SDLTemplateColorScheme.-initWithPrimaryColor:secondaryColor:backgroundColor:",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "warning": "undocumented"
+ },
+ {
"file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTouch.h",
"line": 13,
"symbol": "",
@@ -2234,16 +3711,44 @@
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLUnsubscribeButton.h",
- "line": 27,
- "symbol": "SDLUnsubscribeButton.-initWithButtonName:",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTurnSignal.h",
+ "line": 14,
+ "symbol": "SDLTurnSignal",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
"warning": "undocumented"
},
{
- "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLUnsubscribeVehicleData.h",
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTurnSignal.h",
+ "line": 19,
+ "symbol": "SDLTurnSignalOff",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTurnSignal.h",
"line": 24,
- "symbol": "SDLUnsubscribeVehicleData.-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:",
+ "symbol": "SDLTurnSignalLeft",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTurnSignal.h",
+ "line": 29,
+ "symbol": "SDLTurnSignalRight",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLTurnSignal.h",
+ "line": 34,
+ "symbol": "SDLTurnSignalBoth",
+ "symbol_kind": "sourcekitten.source.lang.objc.decl.constant",
+ "warning": "undocumented"
+ },
+ {
+ "file": "/Users/joel/Projects/SDL/sdl_ios/SmartDeviceLink/SDLUnsubscribeButton.h",
+ "line": 27,
+ "symbol": "SDLUnsubscribeButton.-initWithButtonName:",
"symbol_kind": "sourcekitten.source.lang.objc.decl.method.instance",
"warning": "undocumented"
},