diff options
author | Sho Amano <samano@xevo.com> | 2018-08-09 21:01:58 +0900 |
---|---|---|
committer | Sho Amano <samano@xevo.com> | 2018-08-09 22:32:13 +0900 |
commit | f0cff660f098eea0a1d48979734516a4965c44c0 (patch) | |
tree | 04893006d6f63ec2360ae8e1f2f4ceacff6c3c44 | |
parent | 114f9c69f68b0255331236585a338e49069dd62e (diff) | |
parent | 3cb0f3be950203b8c0737ffe36debb2628d8d707 (diff) | |
download | sdl_ios-f0cff660f098eea0a1d48979734516a4965c44c0.tar.gz |
Merge branch 'develop' into feature/multiple_transports
Conflicts:
SmartDeviceLink-iOS.xcodeproj/project.pbxproj
SmartDeviceLink/SDLCarWindow.m
SmartDeviceLink/SDLLifecycleManager.m
SmartDeviceLink/SDLStreamingAudioLifecycleManager.h
SmartDeviceLink/SDLStreamingAudioLifecycleManager.m
SmartDeviceLink/SDLStreamingMediaManager.m
SmartDeviceLink/SDLStreamingVideoLifecycleManager.h
SmartDeviceLink/SDLStreamingVideoLifecycleManager.m
SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m
SmartDeviceLinkTests/SDLStreamingMediaLifecycleManagerSpec.m
SmartDeviceLinkTests/SDLStreamingVideoLifecycleManagerSpec.m
221 files changed, 10070 insertions, 845 deletions
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index dcf9581e4..995262c63 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,5 +1,7 @@ [Things to note: Pull Requests **must** fix an issue. Discussion about the feature / bug takes place in the issue, discussion of the implementation takes place in the PR. Please also see the [Contributing Guide](https://github.com/smartdevicelink/sdl_ios/blob/master/.github/CONTRIBUTING.md) for information on branch naming and the CLA. +Also, remember that all new public file headers should be added as public in the `File Inspector / Target Membership` pane, added to `SmartDeviceLink.h` and to *both* `.podspec` files. + Delete the above section when you've read it.] Fixes #[issue number] diff --git a/CHANGELOG.md b/CHANGELOG.md index 0160c9cba..f4d0bc5fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 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. + # 6.0.0 (Changes since RC1) * None diff --git a/SmartDeviceLink-iOS.podspec b/SmartDeviceLink-iOS.podspec index 5c242fb9a..c7af62700 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.0" +s.version = "6.0.1" 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', @@ -86,16 +89,20 @@ 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', @@ -118,11 +125,14 @@ ss.public_header_files = [ 'SmartDeviceLink/SDLGetWaypointsResponse.h', 'SmartDeviceLink/SDLGlobalProperty.h', 'SmartDeviceLink/SDLGPSData.h', +'SmartDeviceLink/SDLGPSLocation.h', 'SmartDeviceLink/SDLHapticRect.h', 'SmartDeviceLink/SDLHeadLampStatus.h', 'SmartDeviceLink/SDLHMICapabilities.h', 'SmartDeviceLink/SDLHMILevel.h', 'SmartDeviceLink/SDLHMIPermissions.h', +'SmartDeviceLink/SDLHMISettingsControlCapabilities.h', +'SmartDeviceLink/SDLHMISettingsControlData.h', 'SmartDeviceLink/SDLHMIZoneCapabilities.h', 'SmartDeviceLink/SDLIgnitionStableStatus.h', 'SmartDeviceLink/SDLIgnitionStatus.h', @@ -141,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', @@ -158,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', @@ -187,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', @@ -243,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', @@ -263,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', @@ -273,7 +301,10 @@ ss.public_header_files = [ 'SmartDeviceLink/SDLSpeak.h', 'SmartDeviceLink/SDLSpeakResponse.h', 'SmartDeviceLink/SDLSpeechCapabilities.h', +'SmartDeviceLink/SDLSRGBColor.h', 'SmartDeviceLink/SDLStartTime.h', +'SmartDeviceLink/SDLStaticIconName.h', +'SmartDeviceLink/SDLStationIDNumber.h', 'SmartDeviceLink/SDLStreamingMediaConfiguration.h', 'SmartDeviceLink/SDLStreamingMediaManager.h', 'SmartDeviceLink/SDLStreamingMediaManagerConstants.h', @@ -308,9 +339,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', @@ -335,6 +368,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 434da4f5f..8e048bf28 100644 --- a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj +++ b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj @@ -270,6 +270,90 @@ 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 */; }; + 1EAA47152034052D000FE74B /* SDLGPSLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA47132034052D000FE74B /* SDLGPSLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EAA47162034052D000FE74B /* SDLGPSLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA47142034052D000FE74B /* SDLGPSLocation.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 */; }; + 1EAA4735203458CE000FE74B /* SDLSRGBColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EAA4733203458CE000FE74B /* SDLSRGBColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EAA4736203458CE000FE74B /* SDLSRGBColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA4734203458CE000FE74B /* SDLSRGBColor.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 */; }; + 1EAA477C2036BD6D000FE74B /* SDLSDLSRGBColorSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA477B2036BD6D000FE74B /* SDLSDLSRGBColorSpec.m */; }; + 1EAA477E2036C091000FE74B /* SDLGPSLocationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EAA477D2036C091000FE74B /* SDLGPSLocationSpec.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 +380,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, ); }; }; @@ -333,6 +420,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 */; }; @@ -353,6 +446,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, ); }; }; @@ -873,6 +968,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 +1010,12 @@ 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, ); }; }; @@ -930,12 +1034,6 @@ 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 */; }; - 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 */; }; 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 */; }; @@ -1068,6 +1166,9 @@ 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 */; }; @@ -1100,6 +1201,9 @@ 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, ); }; }; @@ -1118,6 +1222,8 @@ 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, ); }; }; + 8880B2EF21021E37004721DB /* TextValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8880B2ED21021964004721DB /* TextValidator.swift */; }; + 8880B2F421022896004721DB /* TextValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 8880B2F121022887004721DB /* TextValidator.m */; }; 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 */; }; @@ -1129,6 +1235,9 @@ 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 */; }; + 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, ); }; }; @@ -1181,9 +1290,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 /* SDLStreamingVideoLifecycleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8966E91E56939F00413EAB /* SDLStreamingVideoLifecycleManager.h */; }; - DA8966EC1E56939F00413EAB /* SDLStreamingVideoLifecycleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8966EA1E56939F00413EAB /* SDLStreamingVideoLifecycleManager.m */; }; - DA8966EF1E5693E300413EAB /* SDLStreamingVideoLifecycleManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8966EE1E5693E300413EAB /* SDLStreamingVideoLifecycleManagerSpec.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, ); }; }; @@ -1260,9 +1366,6 @@ 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 */; }; - EE976009206389EC00768CEB /* SDLStreamingAudioLifecycleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EE976008206389EC00768CEB /* SDLStreamingAudioLifecycleManager.h */; }; - EE97600B206389F600768CEB /* SDLStreamingAudioLifecycleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EE97600A206389F600768CEB /* SDLStreamingAudioLifecycleManager.m */; }; - EE97600D20638A8A00768CEB /* SDLStreamingAudioLifecycleManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EE97600C20638A8A00768CEB /* SDLStreamingAudioLifecycleManagerSpec.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 */; }; @@ -1623,6 +1726,90 @@ 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>"; }; + 1EAA47132034052D000FE74B /* SDLGPSLocation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLGPSLocation.h; sourceTree = "<group>"; }; + 1EAA47142034052D000FE74B /* SDLGPSLocation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLGPSLocation.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>"; }; + 1EAA4733203458CE000FE74B /* SDLSRGBColor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSRGBColor.h; sourceTree = "<group>"; }; + 1EAA4734203458CE000FE74B /* SDLSRGBColor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSRGBColor.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>"; }; + 1EAA477B2036BD6D000FE74B /* SDLSDLSRGBColorSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSDLSRGBColorSpec.m; sourceTree = "<group>"; }; + 1EAA477D2036C091000FE74B /* SDLGPSLocationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLGPSLocationSpec.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>"; }; @@ -1649,6 +1836,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>"; }; @@ -1689,6 +1879,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>"; }; @@ -1717,6 +1913,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>"; }; @@ -2259,6 +2457,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>"; }; @@ -2298,6 +2499,12 @@ 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>"; }; @@ -2316,12 +2523,6 @@ 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>"; }; - 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>"; }; 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>"; }; @@ -2458,6 +2659,9 @@ 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>"; }; @@ -2496,7 +2700,10 @@ 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; }; + 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; }; 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>"; }; @@ -2510,6 +2717,9 @@ 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; }; + 8880B2ED21021964004721DB /* TextValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextValidator.swift; sourceTree = "<group>"; }; + 8880B2F021022887004721DB /* TextValidator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextValidator.h; sourceTree = "<group>"; }; + 8880B2F121022887004721DB /* TextValidator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TextValidator.m; sourceTree = "<group>"; }; 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>"; }; @@ -2520,6 +2730,9 @@ 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>"; }; + 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>"; }; @@ -2577,9 +2790,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 /* SDLStreamingVideoLifecycleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLStreamingVideoLifecycleManager.h; sourceTree = "<group>"; }; - DA8966EA1E56939F00413EAB /* SDLStreamingVideoLifecycleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingVideoLifecycleManager.m; sourceTree = "<group>"; }; - DA8966EE1E5693E300413EAB /* SDLStreamingVideoLifecycleManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingVideoLifecycleManagerSpec.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>"; }; @@ -2658,9 +2868,6 @@ 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>"; }; - EE976008206389EC00768CEB /* SDLStreamingAudioLifecycleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLStreamingAudioLifecycleManager.h; sourceTree = "<group>"; }; - EE97600A206389F600768CEB /* SDLStreamingAudioLifecycleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingAudioLifecycleManager.m; sourceTree = "<group>"; }; - EE97600C20638A8A00768CEB /* SDLStreamingAudioLifecycleManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLStreamingAudioLifecycleManagerSpec.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>"; }; @@ -2740,6 +2947,7 @@ 162E81E21A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m */, 162E81E31A9BDE8A00906325 /* SDLAppHMITypeSpec.m */, 162E81E41A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m */, + 2BF2F85120ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m */, 162E81E51A9BDE8A00906325 /* SDLAudioStreamingStateSpec.m */, 162E81E61A9BDE8A00906325 /* SDLAudioTypeSpec.m */, 162E81E71A9BDE8A00906325 /* SDLBitsPerSampleSpec.m */, @@ -2754,8 +2962,11 @@ 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 */, @@ -2773,10 +2984,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 */, @@ -2790,6 +3006,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 */, @@ -2799,6 +3017,7 @@ 162E82191A9BDE8A00906325 /* SDLTimerModeSpec.m */, 162E821A1A9BDE8A00906325 /* SDLTouchTypeSpec.m */, 162E821B1A9BDE8A00906325 /* SDLTriggerSource.m */, + 8818ADDC2100FE0C007D6F19 /* SDLTurnSignalSpec.m */, 162E821C1A9BDE8A00906325 /* SDLUpdateModeSpec.m */, 162E821D1A9BDE8A00906325 /* SDLVehicleDataActiveStatusSpec.m */, 162E821E1A9BDE8A00906325 /* SDLVehicleDataEventStatusSpec.m */, @@ -2815,6 +3034,8 @@ 1EE8C4391F347D4D00FDC2CF /* SDLRadioStateSpec.m */, 1EE8C43B1F347EAE00FDC2CF /* SDLTemperatureUnitSpec.m */, 1EE8C43D1F347F0500FDC2CF /* SDLVentilationModeSpec.m */, + 5D64FE6C20DA9CE600792F9F /* SDLVideoStreamingStateSpec.m */, + 1EB59CD1202DCA9B00343A61 /* SDLMassageModeSpec.m */, ); path = EnumSpecs; sourceTree = "<group>"; @@ -2836,6 +3057,7 @@ 162E82331A9BDE8A00906325 /* SDLOnLanguageChangeSpec.m */, 162E82341A9BDE8A00906325 /* SDLOnLockScreenStatusSpec.m */, 162E82351A9BDE8A00906325 /* SDLOnPermissionsChangeSpec.m */, + 1EAA470D2032BF1D000FE74B /* SDLOnRCStatusSpec.m */, 162E82361A9BDE8A00906325 /* SDLOnSyncPDataSpec.m */, 162E82371A9BDE8A00906325 /* SDLOnSystemRequestSpec.m */, 162E82381A9BDE8A00906325 /* SDLOnTBTClientStateSpec.m */, @@ -2972,6 +3194,8 @@ children = ( 162E828F1A9BDE8A00906325 /* SDLAirbagStatusSpec.m */, DA96C0651D4D4F730022F520 /* SDLAppInfoSpec.m */, + 1EAA47772036BA74000FE74B /* SDLAudioControlCapabilitiesSpec.m */, + 1EAA47732036B31E000FE74B /* SDLAudioControlDataSpec.m */, 162E82901A9BDE8A00906325 /* SDLAudioPassThruCapabilitiesSpec.m */, 162E82911A9BDE8A00906325 /* SDLBeltStatusSpec.m */, 162E82921A9BDE8A00906325 /* SDLBodyInformationSpec.m */, @@ -2988,17 +3212,27 @@ 162E829A1A9BDE8A00906325 /* SDLECallInfoSpec.m */, 162E829B1A9BDE8A00906325 /* SDLEmergencyEventSpec.m */, 88B3BFA120DA911E00943565 /* SDLFuelRangeSpec.m */, + 1EAA47752036B847000FE74B /* SDLEqualizerSettingsSpec.m */, 162E829C1A9BDE8A00906325 /* SDLGPSDataSpec.m */, + 1EAA477D2036C091000FE74B /* SDLGPSLocationSpec.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 */, @@ -3016,9 +3250,15 @@ 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 */, + 1EAA477B2036BD6D000FE74B /* SDLSDLSRGBColorSpec.m */, + 1EAA477F2036C2C9000FE74B /* SDLStationIDNumberSpec.m */, 162E82AB1A9BDE8A00906325 /* SDLStartTimeSpec.m */, 162E82AC1A9BDE8A00906325 /* SDLSyncMsgVersionSpec.m */, 5D0A9F961F1559EC00CC80DD /* SDLSystemCapabilitySpec.m */, @@ -3444,6 +3684,8 @@ children = ( 5D48329B1A8EA33D00252386 /* Preferences.h */, 5D48329C1A8EA33D00252386 /* Preferences.m */, + 8880B2F021022887004721DB /* TextValidator.h */, + 8880B2F121022887004721DB /* TextValidator.m */, ); name = Utilities; sourceTree = "<group>"; @@ -3764,6 +4006,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 */, @@ -3796,8 +4042,12 @@ 5D61FAAE1A84238A00846EE7 /* SDLEmergencyEvent.m */, 88B3BF9A20DA8BBC00943565 /* SDLFuelRange.h */, 88B3BF9B20DA8BBC00943565 /* SDLFuelRange.m */, + 1EAA4723203416D3000FE74B /* SDLEqualizerSettings.h */, + 1EAA4724203416D3000FE74B /* SDLEqualizerSettings.m */, 5D61FACE1A84238A00846EE7 /* SDLGPSData.h */, 5D61FACF1A84238A00846EE7 /* SDLGPSData.m */, + 1EAA47132034052D000FE74B /* SDLGPSLocation.h */, + 1EAA47142034052D000FE74B /* SDLGPSLocation.m */, 88EED8361F33AE1700E6C42E /* SDLHapticRect.h */, 88EED8371F33AE1700E6C42E /* SDLHapticRect.m */, 5D61FAD01A84238A00846EE7 /* SDLHeadLampStatus.h */, @@ -3806,6 +4056,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 */, @@ -3818,6 +4080,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 */, @@ -3854,12 +4120,24 @@ 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 */, + 1EAA4733203458CE000FE74B /* SDLSRGBColor.h */, + 1EAA4734203458CE000FE74B /* SDLSRGBColor.m */, 5D61FBBE1A84238B00846EE7 /* SDLStartTime.h */, 5D61FBBF1A84238B00846EE7 /* SDLStartTime.m */, + 1EAA470F2033FE80000FE74B /* SDLStationIDNumber.h */, + 1EAA47102033FE80000FE74B /* SDLStationIDNumber.m */, 5D61FBC81A84238B00846EE7 /* SDLSyncMsgVersion.h */, 5D61FBC91A84238B00846EE7 /* SDLSyncMsgVersion.m */, 5D00AC691F141339004000D9 /* SDLSystemCapability.h */, @@ -3905,6 +4183,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 */, @@ -3933,12 +4213,18 @@ 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 */, @@ -3957,6 +4243,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 */, @@ -3977,6 +4267,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 */, @@ -4008,10 +4304,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 */, @@ -4030,8 +4332,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 */, @@ -4060,6 +4366,8 @@ 8B7B31991F2F7B5700BDC38D /* SDLVideoStreamingCodec.m */, 8B7B319C1F2F7CF700BDC38D /* SDLVideoStreamingProtocol.h */, 8B7B319D1F2F7CF700BDC38D /* SDLVideoStreamingProtocol.m */, + 5D0C29FA20D93D8C008B56CD /* SDLVideoStreamingState.h */, + 5D0C29FB20D93D8C008B56CD /* SDLVideoStreamingState.m */, ); name = Enums; sourceTree = "<group>"; @@ -4134,6 +4442,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 */, @@ -5014,6 +5324,7 @@ children = ( 5DEF69631FD6FEC2004B8C2F /* Mocks */, 5DEF69601FD6FB75004B8C2F /* SDLAudioStreamManagerSpec.m */, + 5D64FE7020DA9E6700792F9F /* SDLStreamingAudioLifecycleManagerSpec.m */, ); name = "Audio Manager"; sourceTree = "<group>"; @@ -5021,8 +5332,7 @@ 5DEF69621FD6FEB6004B8C2F /* Video */ = { isa = PBXGroup; children = ( - EE97600C20638A8A00768CEB /* SDLStreamingAudioLifecycleManagerSpec.m */, - DA8966EE1E5693E300413EAB /* SDLStreamingVideoLifecycleManagerSpec.m */, + 5D64FE6E20DA9E4300792F9F /* SDLStreamingVideoLifecycleManagerSpec.m */, DABB62161E4A900C0034C567 /* SDLH264VideoEncoderSpec.m */, EED5CA031F4D1D5E00F04000 /* SDLRAWH264PacketizerSpec.m */, EED5CA091F4D206800F04000 /* SDLRTPH264PacketizerSpec.m */, @@ -5131,6 +5441,7 @@ children = ( 88A0AA55207CFE5C0075132C /* AppUserDefaults.swift */, 88DFB051207F8DF50079D19D /* Protocol+ProxyManagerDelegate.swift */, + 8880B2ED21021964004721DB /* TextValidator.swift */, ); name = Utilities; sourceTree = "<group>"; @@ -5210,10 +5521,10 @@ DA8966E81E56938C00413EAB /* Lifecycle */ = { isa = PBXGroup; children = ( - EE976008206389EC00768CEB /* SDLStreamingAudioLifecycleManager.h */, - EE97600A206389F600768CEB /* SDLStreamingAudioLifecycleManager.m */, - DA8966E91E56939F00413EAB /* SDLStreamingVideoLifecycleManager.h */, - DA8966EA1E56939F00413EAB /* SDLStreamingVideoLifecycleManager.m */, + 5D0C2A0220D947AB008B56CD /* SDLStreamingAudioLifecycleManager.h */, + 5D0C2A0320D947AB008B56CD /* SDLStreamingAudioLifecycleManager.m */, + 5D0C29FE20D9479B008B56CD /* SDLStreamingVideoLifecycleManager.h */, + 5D0C29FF20D9479B008B56CD /* SDLStreamingVideoLifecycleManager.m */, ); name = Lifecycle; sourceTree = "<group>"; @@ -5303,7 +5614,36 @@ 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 */, + 1EAA4735203458CE000FE74B /* SDLSRGBColor.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 */, + 1EAA47152034052D000FE74B /* SDLGPSLocation.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 */, @@ -5318,6 +5658,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 */, @@ -5350,6 +5691,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 */, @@ -5428,7 +5770,6 @@ 5D61FD051A84238C00846EE7 /* SDLOnButtonPress.h in Headers */, 5D61FCC51A84238C00846EE7 /* SDLHMIZoneCapabilities.h in Headers */, DAA41D551DF66B2000BC7337 /* SDLH264VideoEncoder.h in Headers */, - EE976009206389EC00768CEB /* SDLStreamingAudioLifecycleManager.h in Headers */, 8B7B319A1F2F7B5700BDC38D /* SDLVideoStreamingCodec.h in Headers */, 5D61FCAF1A84238C00846EE7 /* SDLGenericResponse.h in Headers */, 5D61FC4F1A84238C00846EE7 /* SDLBodyInformation.h in Headers */, @@ -5492,6 +5833,7 @@ 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 */, @@ -5586,6 +5928,7 @@ 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 */, @@ -5624,6 +5967,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 */, @@ -5659,14 +6003,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 /* SDLStreamingVideoLifecycleManager.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 */, @@ -5865,7 +6210,7 @@ }; 5D61FA1B1A84237100846EE7 = { CreatedOnToolsVersion = 6.1.1; - LastSwiftMigration = 0930; + LastSwiftMigration = 0940; }; 5D61FA251A84237100846EE7 = { CreatedOnToolsVersion = 6.1.1; @@ -5968,6 +6313,7 @@ buildActionMask = 2147483647; files = ( 5D4832A51A94F90D00252386 /* ConnectionTransitionContext.m in Sources */, + 8880B2F421022896004721DB /* TextValidator.m in Sources */, 8800871E20A6356D008E1EA0 /* ButtonManager.m in Sources */, 5D0218FC1A8E7E1700D1BF62 /* ConnectionContainerViewController.m in Sources */, 88DA6D10209794A400AD8297 /* AlertManager.m in Sources */, @@ -5993,7 +6339,9 @@ 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 */, @@ -6013,6 +6361,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 */, @@ -6022,6 +6371,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 */, @@ -6044,13 +6394,17 @@ 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 */, 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 */, @@ -6065,11 +6419,11 @@ 5D61FD821A84238C00846EE7 /* SDLSetAppIconResponse.m in Sources */, 5D61FDF81A84238C00846EE7 /* SDLV1ProtocolMessage.m in Sources */, 5D61FDC81A84238C00846EE7 /* SDLTextAlignment.m in Sources */, - EE97600B206389F600768CEB /* SDLStreamingAudioLifecycleManager.m in Sources */, 5D4631091F21261B0092EFDC /* SDLControlFramePayloadRPCStartServiceAck.m in Sources */, 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 */, @@ -6086,6 +6440,7 @@ 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 */, @@ -6093,6 +6448,7 @@ 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 */, @@ -6104,7 +6460,9 @@ 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 */, + 1EAA47162034052D000FE74B /* SDLGPSLocation.m in Sources */, 1EE48E911F2F0EE700B98D08 /* SDLTemperatureUnit.m in Sources */, 5D61FCD81A84238C00846EE7 /* SDLInteractionMode.m in Sources */, 5D61FCB01A84238C00846EE7 /* SDLGenericResponse.m in Sources */, @@ -6159,6 +6517,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 */, @@ -6174,9 +6533,11 @@ 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 */, @@ -6186,9 +6547,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 */, @@ -6224,6 +6587,7 @@ 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 */, @@ -6240,6 +6604,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 */, @@ -6249,6 +6614,7 @@ 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 */, @@ -6263,8 +6629,10 @@ 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 */, @@ -6273,6 +6641,7 @@ EE38C0C3211C440400E170AD /* SDLPrimaryProtocolDelegate.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 */, @@ -6287,6 +6656,7 @@ 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 */, @@ -6316,6 +6686,7 @@ 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 */, @@ -6324,9 +6695,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 */, @@ -6334,6 +6707,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 */, @@ -6352,16 +6726,19 @@ 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 */, + 1EAA4736203458CE000FE74B /* SDLSRGBColor.m in Sources */, 5D61FD001A84238C00846EE7 /* SDLOnAppInterfaceUnregistered.m in Sources */, - DA8966EC1E56939F00413EAB /* SDLStreamingVideoLifecycleManager.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 */, @@ -6375,6 +6752,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 */, @@ -6382,8 +6760,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 */, @@ -6406,11 +6786,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 */, @@ -6427,6 +6810,7 @@ 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 */, @@ -6447,6 +6831,7 @@ 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 */, @@ -6460,6 +6845,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 */, @@ -6468,6 +6854,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 */, @@ -6483,6 +6870,7 @@ 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 */, @@ -6492,6 +6880,7 @@ 1EE8C45A1F387BBB00FDC2CF /* SDLGetInteriorVehicleDataSpec.m in Sources */, 5D6035D5202CE4A500A429C9 /* TestMultipleRequestsConnectionManager.m in Sources */, 162E83691A9BDE8B00906325 /* SDLSubscribeButtonResponseSpec.m in Sources */, + 1EAA477E2036C091000FE74B /* SDLGPSLocationSpec.m in Sources */, 5DAE06751BDEC6D600F9B498 /* SDLArtworkSpec.m in Sources */, 5DA23FF01F2FA0FF009C0313 /* SDLControlFramePayloadEndServiceSpec.m in Sources */, 162E83591A9BDE8B00906325 /* SDLListFilesResponseSpec.m in Sources */, @@ -6502,6 +6891,7 @@ 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 */, @@ -6510,17 +6900,18 @@ 162E83231A9BDE8B00906325 /* SDLAddSubMenuSpec.m in Sources */, DA4353E91D2721680099B8C4 /* DispatchTimerSpec.m in Sources */, 1EE8C45D1F387D1C00FDC2CF /* SDLGetInteriorVehicleDataResponseSpec.m in Sources */, - DA8966EF1E5693E300413EAB /* SDLStreamingVideoLifecycleManagerSpec.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 */, @@ -6555,6 +6946,7 @@ 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 */, @@ -6572,15 +6964,18 @@ 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 */, 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 */, @@ -6590,10 +6985,12 @@ 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 */, 162E82FE1A9BDE8B00906325 /* SDLTBTStateSpec.m in Sources */, 5D5DBF0B1D48E5E600D4F914 /* SDLLockScreenViewControllerSnapshotTests.m in Sources */, @@ -6606,9 +7003,11 @@ 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 */, + 1E89B0DE2031636000A47992 /* SDLSeatControlDataSpec.m in Sources */, 162E831A1A9BDE8B00906325 /* SDLOnLockScreenStatusSpec.m in Sources */, 162E83431A9BDE8B00906325 /* SDLSyncPDataSpec.m in Sources */, 167ED9461A9BCE5D00797BE5 /* SwiftSpec.swift in Sources */, @@ -6623,10 +7022,13 @@ 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 */, @@ -6635,6 +7037,7 @@ 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 */, @@ -6668,27 +7071,31 @@ 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 */, + 1EAA477C2036BD6D000FE74B /* SDLSDLSRGBColorSpec.m in Sources */, DA9F7EB01DCC063400ACAE48 /* SDLLocationDetailsSpec.m in Sources */, 5DC978261B7A38640012C2F1 /* SDLGlobalsSpec.m in Sources */, 162E82FF1A9BDE8B00906325 /* SDLTextAlignmentSpec.m in Sources */, 162E831F1A9BDE8B00906325 /* SDLOnTouchEventSpec.m in Sources */, 162E83921A9BDE8B00906325 /* SDLTouchEventCapabilitiesSpec.m in Sources */, - EE97600D20638A8A00768CEB /* SDLStreamingAudioLifecycleManagerSpec.m in Sources */, 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 */, @@ -6696,6 +7103,7 @@ 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 */, @@ -6704,6 +7112,7 @@ 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 */, @@ -6725,6 +7134,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 */, @@ -6736,6 +7146,7 @@ 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 */, @@ -6747,6 +7158,7 @@ 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 */, @@ -6756,6 +7168,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 */, @@ -6777,6 +7190,7 @@ 88DFB053207F8E100079D19D /* Protocol+ProxyManagerDelegate.swift in Sources */, 88B849C820812442002A034D /* VehicleDataManager.swift in Sources */, 8829569E207CFD0E00EF056C /* AppDelegate.swift in Sources */, + 8880B2EF21021E37004721DB /* TextValidator.swift in Sources */, 88A0AA58207CFE650075132C /* ProxyManager.swift in Sources */, 88166B00207E41E900076236 /* MenuManager.swift in Sources */, 8814AEAC20AB667B00466E0F /* PerformInteractionManager.swift in Sources */, @@ -7183,7 +7597,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp; - PRODUCT_NAME = "SDL Example"; + PRODUCT_NAME = "SDL Example Swift"; SWIFT_OBJC_BRIDGING_HEADER = "SmartDeviceLink_Example/SmartDeviceLink-Example-Swift-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 3.0; @@ -7202,7 +7616,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp; - PRODUCT_NAME = "SDL Example"; + PRODUCT_NAME = "SDL Example Swift"; SWIFT_OBJC_BRIDGING_HEADER = "SmartDeviceLink_Example/SmartDeviceLink-Example-Swift-Bridging-Header.h"; SWIFT_VERSION = 3.0; }; diff --git a/SmartDeviceLink.podspec b/SmartDeviceLink.podspec index 764f4788c..eeac8a8ac 100644 --- a/SmartDeviceLink.podspec +++ b/SmartDeviceLink.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SmartDeviceLink" -s.version = "6.0.0" +s.version = "6.0.1" 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', @@ -86,16 +89,20 @@ 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', @@ -118,11 +125,14 @@ ss.public_header_files = [ 'SmartDeviceLink/SDLGetWaypointsResponse.h', 'SmartDeviceLink/SDLGlobalProperty.h', 'SmartDeviceLink/SDLGPSData.h', +'SmartDeviceLink/SDLGPSLocation.h', 'SmartDeviceLink/SDLHapticRect.h', 'SmartDeviceLink/SDLHeadLampStatus.h', 'SmartDeviceLink/SDLHMICapabilities.h', 'SmartDeviceLink/SDLHMILevel.h', 'SmartDeviceLink/SDLHMIPermissions.h', +'SmartDeviceLink/SDLHMISettingsControlCapabilities.h', +'SmartDeviceLink/SDLHMISettingsControlData.h', 'SmartDeviceLink/SDLHMIZoneCapabilities.h', 'SmartDeviceLink/SDLIgnitionStableStatus.h', 'SmartDeviceLink/SDLIgnitionStatus.h', @@ -141,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', @@ -162,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', @@ -187,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', @@ -243,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', @@ -263,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', @@ -273,7 +301,10 @@ ss.public_header_files = [ 'SmartDeviceLink/SDLSpeak.h', 'SmartDeviceLink/SDLSpeakResponse.h', 'SmartDeviceLink/SDLSpeechCapabilities.h', +'SmartDeviceLink/SDLSRGBColor.h', 'SmartDeviceLink/SDLStartTime.h', +'SmartDeviceLink/SDLStaticIconName.h', +'SmartDeviceLink/SDLStationIDNumber.h', 'SmartDeviceLink/SDLStreamingMediaConfiguration.h', 'SmartDeviceLink/SDLStreamingMediaManager.h', 'SmartDeviceLink/SDLStreamingMediaManagerConstants.h', @@ -308,9 +339,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', @@ -335,6 +368,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/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/SDLAudioControlCapabilities.h b/SmartDeviceLink/SDLAudioControlCapabilities.h new file mode 100644 index 000000000..b21317753 --- /dev/null +++ b/SmartDeviceLink/SDLAudioControlCapabilities.h @@ -0,0 +1,69 @@ +// 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 volueAvailable:(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; + +/** + * @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..32832c627 --- /dev/null +++ b/SmartDeviceLink/SDLAudioControlCapabilities.m @@ -0,0 +1,78 @@ +// 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 volueAvailable:(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.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)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/SDLCarWindow.m b/SmartDeviceLink/SDLCarWindow.m index 22335c7e1..2d6c6f4b2 100755 --- a/SmartDeviceLink/SDLCarWindow.m +++ b/SmartDeviceLink/SDLCarWindow.m @@ -19,8 +19,8 @@ #import "SDLError.h" #import "SDLStateMachine.h" #import "SDLStreamingMediaConfiguration.h" -#import "SDLStreamingMediaManagerConstants.h" #import "SDLStreamingVideoLifecycleManager.h" +#import "SDLStreamingMediaManagerConstants.h" NS_ASSUME_NONNULL_BEGIN 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/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..086774ddb --- /dev/null +++ b/SmartDeviceLink/SDLEqualizerSettings.h @@ -0,0 +1,43 @@ +// 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; + +- (instancetype)initWithChannelId:(UInt8)channelId channelName:(nullable NSString *)channelName 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..2f2452717 --- /dev/null +++ b/SmartDeviceLink/SDLEqualizerSettings.m @@ -0,0 +1,55 @@ +// 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 { + return [self initWithChannelId:channelId channelName:nil channelSetting:channelSetting]; +} + +- (instancetype)initWithChannelId:(UInt8)channelId channelName:(nullable NSString *)channelName channelSetting:(UInt8)channelSetting { + self = [self init]; + if(!self) { + return nil; + } + + self.channelId = @(channelId); + self.channelSetting = @(channelSetting); + self.channelName = channelName; + + 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/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/SDLGPSLocation.h b/SmartDeviceLink/SDLGPSLocation.h new file mode 100644 index 000000000..1019fc3d7 --- /dev/null +++ b/SmartDeviceLink/SDLGPSLocation.h @@ -0,0 +1,40 @@ +// SDLGPSLocation.h +// + +#import "SDLRPCMessage.h" + +/** + * Provides teh 3-dimensional geographic station location. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface SDLGPSLocation : SDLRPCStruct + +- (instancetype)initWithLatitudeDegrees:(double)latitudeDegrees longitudeDegrees:(double)longitudeDegrees; + +- (instancetype)initWithLatitudeDegrees:(double)latitudeDegrees longitudeDegrees:(double)longitudeDegrees altitudeMeters:(nullable NSNumber<SDLFloat> *)altitudeMeters; + +/** + * @abstract longitude degrees + * + * Required, Float, -180 - 180 + */ +@property (strong, nonatomic) NSNumber<SDLFloat> *longitudeDegrees; + +/** + * @abstract latitude degrees + * + * Required, Float, -90 - 90 + */ +@property (strong, nonatomic) NSNumber<SDLFloat> *latitudeDegrees; +/** + * @abstract altitude in meters + * + * Optional, Float, -99999.0 - 99999 + */ +@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *altitudeMeters; + +@end + +NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLGPSLocation.m b/SmartDeviceLink/SDLGPSLocation.m new file mode 100644 index 000000000..4a2fce5b1 --- /dev/null +++ b/SmartDeviceLink/SDLGPSLocation.m @@ -0,0 +1,54 @@ +// SDLGPSLocation.m +// + +#import "SDLGPSLocation.h" +#import "SDLNames.h" +#import "NSMutableDictionary+Store.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation SDLGPSLocation + +- (instancetype)initWithLatitudeDegrees:(double)latitudeDegrees longitudeDegrees:(double)longitudeDegrees { + return [self initWithLatitudeDegrees:latitudeDegrees longitudeDegrees:longitudeDegrees altitudeMeters:nil]; +} + +-(instancetype)initWithLatitudeDegrees:(double)latitudeDegrees longitudeDegrees:(double)longitudeDegrees altitudeMeters:(nullable NSNumber<SDLFloat> *)altitudeMeters { + self = [self init]; + if(!self) { + return nil; + } + + self.latitudeDegrees = @(latitudeDegrees); + self.longitudeDegrees = @(longitudeDegrees); + self.altitudeMeters = altitudeMeters; + + return self; +} + +- (void)setLongitudeDegrees:(NSNumber<SDLFloat> *)longitudeDegrees { + [store sdl_setObject:longitudeDegrees forName:SDLNameLongitudeDegrees]; +} + +- (NSNumber<SDLFloat> *)longitudeDegrees { + return [store sdl_objectForName:SDLNameLongitudeDegrees]; +} + +- (void)setLatitudeDegrees:(NSNumber<SDLFloat> *)latitudeDegrees { + [store sdl_setObject:latitudeDegrees forName:SDLNameLatitudeDegrees]; +} + +- (NSNumber<SDLFloat> *)latitudeDegrees { + return [store sdl_objectForName:SDLNameLatitudeDegrees]; +} +- (void)setAltitudeMeters:(nullable NSNumber<SDLFloat> *)altitudeMeters { + [store sdl_setObject:altitudeMeters forName:SDLNameAltitudeMeters]; +} + +- (nullable NSNumber<SDLFloat> *)altitudeMeters { + return [store sdl_objectForName:SDLNameAltitudeMeters]; +} + +@end + +NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLGetVehicleData.h b/SmartDeviceLink/SDLGetVehicleData.h index 56e4d70ba..82b3f7ce4 100644 --- a/SmartDeviceLink/SDLGetVehicleData.h +++ b/SmartDeviceLink/SDLGetVehicleData.h @@ -47,7 +47,7 @@ NS_ASSUME_NONNULL_BEGIN * @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:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus: instead"); +- (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. @@ -60,6 +60,7 @@ NS_ASSUME_NONNULL_BEGIN * @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 @@ -77,11 +78,12 @@ NS_ASSUME_NONNULL_BEGIN * @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 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 vin:(BOOL)vin wiperStatus:(BOOL)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; /** * A boolean value. If true, requests GPS data. @@ -218,6 +220,16 @@ NS_ASSUME_NONNULL_BEGIN */ @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 4be6846ad..6b795b057 100644 --- a/SmartDeviceLink/SDLGetVehicleData.m +++ b/SmartDeviceLink/SDLGetVehicleData.m @@ -18,10 +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 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 vin:vin wiperStatus: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 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 vin:(BOOL)vin wiperStatus:(BOOL)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; @@ -35,6 +35,7 @@ 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); @@ -52,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); @@ -274,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 1c864a1b6..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" @@ -169,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 049dcb79c..9e8aeff6c 100644 --- a/SmartDeviceLink/SDLGetVehicleDataResponse.m +++ b/SmartDeviceLink/SDLGetVehicleDataResponse.m @@ -245,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/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 3f404f76d..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. @@ -60,6 +61,14 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithStaticImageValue:(UInt16)staticImageValue; /** + * 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 diff --git a/SmartDeviceLink/SDLImage.m b/SmartDeviceLink/SDLImage.m index e04de1563..fcf05819a 100644 --- a/SmartDeviceLink/SDLImage.m +++ b/SmartDeviceLink/SDLImage.m @@ -50,6 +50,10 @@ NS_ASSUME_NONNULL_BEGIN 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 { diff --git a/SmartDeviceLink/SDLLifecycleManager.m b/SmartDeviceLink/SDLLifecycleManager.m index 5a9411d6c..9f5c47762 100644 --- a/SmartDeviceLink/SDLLifecycleManager.m +++ b/SmartDeviceLink/SDLLifecycleManager.m @@ -378,7 +378,11 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready"; dispatch_group_leave(managerGroup); }]; - dispatch_group_enter(managerGroup); + if (self.streamManager != nil) { + [self.streamManager startWithProtocol: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); @@ -695,7 +699,8 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready"; [self.lifecycleStateMachine transitionToState:SDLLifecycleStateStopped]; } else if ([self.lifecycleStateMachine isCurrentState:SDLLifecycleStateStopped]) { return; - } else if ([appUnregisteredNotification.reason isEqualToEnum:SDLAppInterfaceUnregisteredReasonAppUnauthorized]) { + } 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]; } else { [self.lifecycleStateMachine transitionToState:SDLLifecycleStateReconnecting]; diff --git a/SmartDeviceLink/SDLLightCapabilities.h b/SmartDeviceLink/SDLLightCapabilities.h new file mode 100644 index 000000000..880a66fd6 --- /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 sRGBColorSpaceAvailable Light's color can be set remotely by using the sRGB color space + @param statusAvailable whether status is available + + @return An instance of the SDLLightCapabilities class + */ +- (instancetype)initWithName:(SDLLightName)name densityAvailable:(BOOL)densityAvailable sRGBColorSpaceAvailable:(BOOL)sRGBColorSpaceAvailable 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 sRGB color space. + * + * Optional, Boolean + */ +@property (nullable, strong, nonatomic) NSNumber<SDLBool> *sRGBColorSpaceAvailable; + +/** + * @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..aaa0029c0 --- /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 sRGBColorSpaceAvailable:(BOOL)sRGBColorSpaceAvailable statusAvailable:(BOOL)statusAvailable { + self = [self init]; + if(!self) { + return nil; + } + self.name = name; + self.densityAvailable = @(densityAvailable); + self.sRGBColorSpaceAvailable = @(sRGBColorSpaceAvailable); + 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)setSRGBColorSpaceAvailable:(nullable NSNumber<SDLBool> *)sRGBColorSpaceAvailable { + [store sdl_setObject:sRGBColorSpaceAvailable forName:SDLNameSRGBColorSpaceAvailable]; +} + +- (nullable NSNumber<SDLBool> *)sRGBColorSpaceAvailable { + return [store sdl_objectForName:SDLNameSRGBColorSpaceAvailable]; +} + +- (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..19152c61c --- /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)initWithLightStateArray:(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..0190d4bb5 --- /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)initWithLightStateArray:(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..895d09bf6 --- /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_BREAK_LIGHT + */ +extern SDLLightName const SDLLightNameRearLeftBreakLight; + +/** + * @abstract Represents the Light with name REAR_RIGHT_BREAK_LIGHT + */ +extern SDLLightName const SDLLightNameRearRightBreakLight; + +/** + * @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..7263deaa0 --- /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 SDLLightNameRearLeftBreakLight = @"REAR_LEFT_BREAK_LIGHT"; +SDLLightName const SDLLightNameRearRightBreakLight = @"REAR_RIGHT_BREAK_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..cbec342d6 --- /dev/null +++ b/SmartDeviceLink/SDLLightState.h @@ -0,0 +1,64 @@ +// SDLLightState.h +// + +#import "SDLRPCMessage.h" +#import "SDLLightName.h" +#import "SDLLightStatus.h" + +@class SDLSRGBColor; + +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 sRGBColor Reflects the color of Light. + @return An instance of the SDLLightState class + */ +- (instancetype)initWithId:(SDLLightName)id status:(SDLLightStatus)status density:(double)density sRGBColor:(SDLSRGBColor *)sRGBColor; + +/** + * @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) SDLSRGBColor *sRGBColor; + +@end + +NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLLightState.m b/SmartDeviceLink/SDLLightState.m new file mode 100644 index 000000000..0f74487d7 --- /dev/null +++ b/SmartDeviceLink/SDLLightState.m @@ -0,0 +1,71 @@ +// SDLLightState.m +// + +#import "SDLLightState.h" +#import "SDLNames.h" +#import "NSMutableDictionary+Store.h" +#import "SDLSRGBColor.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 sRGBColor:(SDLSRGBColor *)sRGBColor { + self = [self init]; + if(!self) { + return nil; + } + self.id = id; + self.status = status; + self.density = @(density); + self.sRGBColor = sRGBColor; + + 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)setSRGBColor:(nullable SDLSRGBColor *)sRGBColor { + [store sdl_setObject:sRGBColor forName:SDLNameSRGBColor]; +} + +- (nullable SDLSRGBColor *)sRGBColor { + return [store sdl_objectForName:SDLNameSRGBColor]; +} + +@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/SDLLogFileModuleMap.m b/SmartDeviceLink/SDLLogFileModuleMap.m index 218ffa42c..c9aa4150b 100644 --- a/SmartDeviceLink/SDLLogFileModuleMap.m +++ b/SmartDeviceLink/SDLLogFileModuleMap.m @@ -85,7 +85,7 @@ } + (SDLLogFileModule *)sdl_screenManagerChoiceSetModule { - return [SDLLogFileModule moduleWithName:@"Screen/ChoiceSet" files:[NSSet setWithArray:@[@"SDLChoiceSetManager", @"SDLCheckChoiceVROptionalOperation", @"SDLDeleteChoicesOperation", @"SDLPreloadChoicesOperation", @"SDLPresentChoiceSetOperation", @"SDLPresentKeyboardOperation"]]]; + return [SDLLogFileModule moduleWithName:@"Screen/ChoiceSet" files:[NSSet setWithArray:@[@"SDLChoiceSetManager", @"SDLCheckChoiceVROptionalOperation", @"SDLDeleteChoicesOperation", @"SDLPreloadChoicesOperation", @"SDLPresentChoiceSetOperation", @"SDLPresentKeyboardOperation", @"SDLChoiceSet"]]]; } 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 cc4debb0b..82a6ea2b3 100644 --- a/SmartDeviceLink/SDLMenuManager.m +++ b/SmartDeviceLink/SDLMenuManager.m @@ -318,7 +318,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 +342,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]]; @@ -368,11 +368,9 @@ UInt32 const MenuCellIdMin = 1; 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 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 d91b068c8..74aac6008 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; @@ -49,6 +55,10 @@ 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; @@ -62,11 +72,18 @@ extern SDLName const SDLNameButtonEventMode; extern SDLName const SDLNameButtonName; extern SDLName const SDLNameButtonPress; extern SDLName const SDLNameButtonPressMode; +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; @@ -85,6 +102,7 @@ extern SDLName const SDLNameCountryName; 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; @@ -99,6 +117,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; @@ -110,12 +130,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; @@ -138,6 +162,7 @@ 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; @@ -145,17 +170,25 @@ 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; @@ -179,17 +212,39 @@ 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 SDLNameId; @@ -215,9 +270,11 @@ extern SDLName const SDLNameInteractionMode; extern SDLName const SDLNameIsHighlighted; extern SDLName const SDLNameIsMediaApplication; extern SDLName const SDLNameIsSubscribed; +extern SDLName const SDLNameKeepContext; 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; @@ -227,6 +284,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; @@ -251,6 +311,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; @@ -258,6 +326,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; @@ -315,6 +384,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; @@ -415,6 +485,8 @@ 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; @@ -439,6 +511,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; @@ -446,15 +521,25 @@ 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 SDLNameSRGBColor; +extern SDLName const SDLNameSRGBColorSpaceAvailable; 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; @@ -468,6 +553,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; @@ -480,6 +566,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; @@ -495,6 +583,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; @@ -504,6 +593,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; @@ -527,14 +617,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 fe18ada75..fa7e6bf8f 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"; @@ -47,6 +53,10 @@ 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"; @@ -60,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"; @@ -83,6 +100,7 @@ SDLName const SDLNameCountryName = @"countryName"; 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"; @@ -97,6 +115,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"; @@ -108,10 +128,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"; @@ -134,6 +158,7 @@ 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"; @@ -141,17 +166,25 @@ 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"; @@ -175,18 +208,40 @@ 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 SDLNameId = @"id"; @@ -212,9 +267,11 @@ SDLName const SDLNameInteractionMode = @"interactionMode"; SDLName const SDLNameIsHighlighted = @"isHighlighted"; SDLName const SDLNameIsMediaApplication = @"isMediaApplication"; SDLName const SDLNameIsSubscribed = @"isSubscribed"; +SDLName const SDLNameKeepContext = @"keepContext"; 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"; @@ -224,6 +281,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"; @@ -244,6 +304,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"; @@ -251,6 +318,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"; @@ -308,6 +377,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"; @@ -375,8 +445,8 @@ SDLName const SDLNameReadDID = @"ReadDID"; SDLName const SDLNameRearLeftDoorAjar = @"rearLeftDoorAjar"; SDLName const SDLNameRearRightDoorAjar = @"rearRightDoorAjar"; SDLName const SDLNameReason = @"reason"; -SDLName const SDLNameRect = @"rect"; SDLName const SDLNameRed = @"red"; +SDLName const SDLNameRect = @"rect"; SDLName const SDLNameRegion = @"REG"; SDLName const SDLNameRegisterAppInterface = @"RegisterAppInterface"; SDLName const SDLNameRemoteControlCapability = @"remoteControlCapability"; @@ -410,6 +480,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"; @@ -433,6 +505,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"; @@ -440,15 +515,25 @@ 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 SDLNameSRGBColor = @"sRGBColor"; +SDLName const SDLNameSRGBColorSpaceAvailable = @"sRGBColorSpaceAvailable"; 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"; @@ -462,6 +547,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"; @@ -475,6 +561,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"; @@ -490,6 +578,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"; @@ -499,6 +588,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"; @@ -522,14 +612,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..1a0133118 100644 --- a/SmartDeviceLink/SDLNotificationConstants.h +++ b/SmartDeviceLink/SDLNotificationConstants.h @@ -184,6 +184,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..7bda755a1 100644 --- a/SmartDeviceLink/SDLNotificationConstants.m +++ b/SmartDeviceLink/SDLNotificationConstants.m @@ -89,6 +89,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..d28842852 100644 --- a/SmartDeviceLink/SDLNotificationDispatcher.m +++ b/SmartDeviceLink/SDLNotificationDispatcher.m @@ -325,6 +325,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..abdb027c8 --- /dev/null +++ b/SmartDeviceLink/SDLOnRCStatus.h @@ -0,0 +1,49 @@ +// SDLOnRCStatus.h +// + +#import <SmartDeviceLink/SmartDeviceLink.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..a9a0e9560 --- /dev/null +++ b/SmartDeviceLink/SDLOnRCStatus.m @@ -0,0 +1,46 @@ +// SDLOnRCStatus.m +// + +#import "SDLOnRCStatus.h" + +#import "NSMutableDictionary+Store.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/SDLOnVehicleData.h b/SmartDeviceLink/SDLOnVehicleData.h index 309e231aa..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" @@ -169,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 d7e95863a..8c77db316 100644 --- a/SmartDeviceLink/SDLOnVehicleData.m +++ b/SmartDeviceLink/SDLOnVehicleData.m @@ -245,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/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/SDLProxy.m b/SmartDeviceLink/SDLProxy.m index eeadbd06b..4d6b3ec1b 100644 --- a/SmartDeviceLink/SDLProxy.m +++ b/SmartDeviceLink/SDLProxy.m @@ -43,7 +43,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.0"; +NSString *const SDLProxyVersion = @"6.0.1"; const float StartSessionTime = 10.0; const float NotifyProxyClosedDelay = (float)0.1; const int PoliciesCorrelationId = 65535; 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/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..c693778d0 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 sisData Station Information Service (SIS) data + @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 sisData:(SDLSISData *)sisData; /** * 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..19c778cb7 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 sisData:(SDLSISData *)sisData { + self = [self init]; + if(!self) { + return nil; + } + + self.frequencyInteger = frequencyInteger; + self.frequencyFraction = frequencyFraction; + self.band = band; + self.hdChannel = hdChannel; + self.radioEnable = radioEnable; + self.sisData = sisData; + + 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/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/SDLSISData.h b/SmartDeviceLink/SDLSISData.h new file mode 100644 index 000000000..c8a40a647 --- /dev/null +++ b/SmartDeviceLink/SDLSISData.h @@ -0,0 +1,61 @@ +// SDLSISData.h +// + +#import "SDLRPCMessage.h" + +@class SDLStationIDNumber; +@class SDLGPSLocation; + +/** + * 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 SDLGPSLocation *)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, SDLGPSLocation type + */ +@property (nullable, strong, nonatomic) SDLGPSLocation *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..8e3ad9aa6 --- /dev/null +++ b/SmartDeviceLink/SDLSISData.m @@ -0,0 +1,72 @@ +// SDLSISData.m +// + +#import "SDLSISData.h" + +#import "SDLStationIDNumber.h" +#import "SDLGPSLocation.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 SDLGPSLocation *)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 SDLGPSLocation *)stationLocation { + [store sdl_setObject:stationLocation forName:SDLNameStationLocation]; +} + +- (nullable SDLGPSLocation *)stationLocation { + return [store sdl_objectForName:SDLNameStationLocation ofClass:SDLGPSLocation.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/SDLSRGBColor.h b/SmartDeviceLink/SDLSRGBColor.h new file mode 100644 index 000000000..96b24c37e --- /dev/null +++ b/SmartDeviceLink/SDLSRGBColor.h @@ -0,0 +1,35 @@ +// SDLSRGBColor.h +// + +#import "SDLRPCMessage.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SDLSRGBColor : SDLRPCStruct + +- (instancetype)initWithRed:(UInt8)red green:(UInt8)green blue:(UInt8)blue; + +/** + * @abstract value of red in integer + * + * Required, Integer minValue:0 maxValue:255 + */ +@property (strong, nonatomic) NSNumber<SDLInt> *red; + +/** + * @abstract value of red in integer + * + * Required, Integer minValue:0 maxValue:255 + */ +@property (strong, nonatomic) NSNumber<SDLInt> *green; + +/** + * @abstract value of red in integer + * + * Required, Integer minValue:0 maxValue:255 + */ +@property (strong, nonatomic) NSNumber<SDLInt> *blue; + +@end + +NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLSRGBColor.m b/SmartDeviceLink/SDLSRGBColor.m new file mode 100644 index 000000000..7843a36aa --- /dev/null +++ b/SmartDeviceLink/SDLSRGBColor.m @@ -0,0 +1,52 @@ +// SDLSRGBColor.m +// + +#import "SDLSRGBColor.h" +#import "SDLNames.h" +#import "NSMutableDictionary+Store.h" + + +NS_ASSUME_NONNULL_BEGIN + +@implementation SDLSRGBColor + +- (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; +} + +- (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/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/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 f65acb444..e3e9278b2 100644 --- a/SmartDeviceLink/SDLSoftButtonManager.m +++ b/SmartDeviceLink/SDLSoftButtonManager.m @@ -50,7 +50,8 @@ NS_ASSUME_NONNULL_BEGIN @property (strong, nonatomic, nullable) SDLDisplayCapabilities *displayCapabilities; @property (strong, nonatomic, nullable) SDLSoftButtonCapabilities *softButtonCapabilities; -@property (assign, nonatomic) BOOL waitingOnHMILevelUpdateToSetButtons; +@property (assign, nonatomic) BOOL waitingOnHMILevelUpdateToUpdate; +@property (assign, nonatomic) BOOL isDirty; @end @@ -65,7 +66,8 @@ NS_ASSUME_NONNULL_BEGIN _softButtonObjects = @[]; _currentLevel = nil; - _waitingOnHMILevelUpdateToSetButtons = NO; + _waitingOnHMILevelUpdateToUpdate = NO; + _isDirty = NO; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_registerResponse:) name:SDLDidReceiveRegisterAppInterfaceResponse object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_displayLayoutResponse:) name:SDLDidReceiveSetDisplayLayoutResponse object:nil]; @@ -85,14 +87,16 @@ NS_ASSUME_NONNULL_BEGIN _currentLevel = nil; _displayCapabilities = nil; _softButtonCapabilities = nil; - _waitingOnHMILevelUpdateToSetButtons = NO; + _waitingOnHMILevelUpdateToUpdate = NO; + _isDirty = NO; } - (void)setSoftButtonObjects:(NSArray<SDLSoftButtonObject *> *)softButtonObjects { - if (self.currentLevel == nil || [self.currentLevel isEqualToString:SDLHMILevelNone]) { - _waitingOnHMILevelUpdateToSetButtons = YES; - _softButtonObjects = softButtonObjects; + // Only update if something changed. This prevents, for example, an empty array being reset + if (_softButtonObjects == softButtonObjects) { return; + } else { + self.isDirty = YES; } self.inProgressUpdate = nil; @@ -119,57 +123,13 @@ NS_ASSUME_NONNULL_BEGIN } } - _softButtonObjects = softButtonObjects; - - for (SDLSoftButtonObject *button in _softButtonObjects) { + for (SDLSoftButtonObject *button in softButtonObjects) { button.manager = self; } - NSMutableArray<SDLArtwork *> *initialStatesToBeUploaded = [NSMutableArray array]; - NSMutableArray<SDLArtwork *> *otherStatesToBeUploaded = [NSMutableArray array]; - if (self.displayCapabilities ? self.displayCapabilities.graphicSupported.boolValue : YES) { - // Upload all soft button images, the initial state images first, then the other states. We need to send updates when the initial state is ready. - for (SDLSoftButtonObject *object in self.softButtonObjects) { - if (object.currentState.artwork != nil && ![self.fileManager hasUploadedFile:object.currentState.artwork]) { - [initialStatesToBeUploaded addObject:object.currentState.artwork]; - } - } - for (SDLSoftButtonObject *object in self.softButtonObjects) { - for (SDLSoftButtonState *state in object.states) { - if ([state.name isEqualToString:object.currentState.name]) { continue; } - if (state.artwork != nil && ![self.fileManager hasUploadedFile:state.artwork]) { - [otherStatesToBeUploaded addObject:state.artwork]; - } - } - } - } - - // Upload initial images, then other state images - if (initialStatesToBeUploaded.count > 0) { - SDLLogD(@"Uploading soft button initial artworks"); - [self.fileManager uploadArtworks:[initialStatesToBeUploaded copy] completionHandler:^(NSArray<NSString *> * _Nonnull artworkNames, NSError * _Nullable error) { - if (error != nil) { - SDLLogE(@"Error uploading soft button artworks: %@", error); - } - - SDLLogD(@"Soft button initial artworks uploaded"); - [self sdl_updateWithCompletionHandler:nil]; - }]; - } - if (otherStatesToBeUploaded.count > 0) { - SDLLogD(@"Uploading soft button other state artworks"); - [self.fileManager uploadArtworks:[otherStatesToBeUploaded copy] completionHandler:^(NSArray<NSString *> * _Nonnull artworkNames, NSError * _Nullable error) { - if (error != nil) { - SDLLogE(@"Error uploading soft button artworks: %@", error); - } - - SDLLogD(@"Soft button other state artworks uploaded"); - // In case our soft button states have changed in the meantime - [self sdl_updateWithCompletionHandler:nil]; - }]; - } + _softButtonObjects = softButtonObjects; - [self sdl_updateWithCompletionHandler:nil]; + [self updateWithCompletionHandler:nil]; } - (nullable SDLSoftButtonObject *)softButtonObjectNamed:(NSString *)name { @@ -182,19 +142,30 @@ NS_ASSUME_NONNULL_BEGIN return nil; } -- (void)updateWithCompletionHandler:(nullable SDLSoftButtonUpdateCompletionHandler)handler { - if (self.isBatchingUpdates) { return; } - - [self sdl_updateWithCompletionHandler:handler]; +- (void)sdl_transitionSoftButton:(SDLSoftButtonObject *)softButton { + self.isDirty = YES; + [self updateWithCompletionHandler:nil]; } -- (void)sdl_updateWithCompletionHandler:(nullable SDLSoftButtonUpdateCompletionHandler)handler { +- (void)updateWithCompletionHandler:(nullable SDLSoftButtonUpdateCompletionHandler)handler { + // Don't send if we're batching + if (self.isBatchingUpdates || !self.isDirty) { return; } + // Don't send if we're in HMI NONE if (self.currentLevel == nil || [self.currentLevel isEqualToString:SDLHMILevelNone]) { + self.waitingOnHMILevelUpdateToUpdate = YES; return; + } else { + self.waitingOnHMILevelUpdateToUpdate = NO; } + [self sdl_updateWithCompletionHandler:handler]; +} + +- (void)sdl_updateWithCompletionHandler:(nullable SDLSoftButtonUpdateCompletionHandler)handler { SDLLogD(@"Updating soft buttons"); + self.isDirty = NO; + if (self.inProgressUpdate != nil) { SDLLogV(@"In progress update exists, queueing update"); // If we already have a pending update, we're going to tell the old handler that it was superseded by a new update and then return @@ -217,13 +188,16 @@ NS_ASSUME_NONNULL_BEGIN self.inProgressUpdate = [[SDLShow alloc] init]; self.inProgressUpdate.mainField1 = self.currentMainField1 ?: @""; - BOOL headUnitSupportsImages = self.softButtonCapabilities ? self.softButtonCapabilities.imageSupported.boolValue : NO; + if ([self sdl_supportsSoftButtonImages]) { + [self sdl_uploadInitialStateImages]; + [self sdl_uploadOtherStateImages]; + } if (self.softButtonObjects == nil) { SDLLogV(@"Soft button objects are nil, sending an empty array"); self.inProgressUpdate.softButtons = @[]; } else if (([self sdl_currentStateHasImages] && ![self sdl_allCurrentStateImagesAreUploaded]) - || !headUnitSupportsImages) { + || ![self sdl_supportsSoftButtonImages]) { // The images don't yet exist on the head unit, or we cannot use images, send a text update, if possible. Otherwise, don't send anything yet. NSArray<SDLSoftButton *> *textOnlyButtons = [self sdl_textButtonsForCurrentState]; if (textOnlyButtons != nil) { @@ -283,6 +257,62 @@ NS_ASSUME_NONNULL_BEGIN return YES; } +- (BOOL)sdl_supportsSoftButtonImages { + BOOL supportsGraphics = self.displayCapabilities ? self.displayCapabilities.graphicSupported.boolValue : YES; + BOOL supportsSoftButtonImages = self.softButtonCapabilities ? self.softButtonCapabilities.imageSupported.boolValue : NO; + + return (supportsGraphics && supportsSoftButtonImages); +} + +- (void)sdl_uploadInitialStateImages { + NSMutableArray<SDLArtwork *> *initialStatesToBeUploaded = [NSMutableArray array]; + // Upload all soft button images, the initial state images first, then the other states. We need to send updates when the initial state is ready. + for (SDLSoftButtonObject *object in self.softButtonObjects) { + if (object.currentState.artwork != nil && ![self.fileManager hasUploadedFile:object.currentState.artwork]) { + [initialStatesToBeUploaded addObject:object.currentState.artwork]; + } + } + + // Upload initial images, then other state images + if (initialStatesToBeUploaded.count > 0) { + SDLLogD(@"Uploading soft button initial artworks"); + [self.fileManager uploadArtworks:[initialStatesToBeUploaded copy] completionHandler:^(NSArray<NSString *> * _Nonnull artworkNames, NSError * _Nullable error) { + if (error != nil) { + SDLLogE(@"Error uploading soft button artworks: %@", error); + } + + SDLLogD(@"Soft button initial artworks uploaded"); + [self sdl_updateWithCompletionHandler:nil]; + }]; + } +} + +- (void)sdl_uploadOtherStateImages { + NSMutableArray<SDLArtwork *> *otherStatesToBeUploaded = [NSMutableArray array]; + // Upload all soft button images, the initial state images first, then the other states. We need to send updates when the initial state is ready. + for (SDLSoftButtonObject *object in self.softButtonObjects) { + for (SDLSoftButtonState *state in object.states) { + if ([state.name isEqualToString:object.currentState.name]) { continue; } + if (state.artwork != nil && ![self.fileManager hasUploadedFile:state.artwork]) { + [otherStatesToBeUploaded addObject:state.artwork]; + } + } + } + + if (otherStatesToBeUploaded.count > 0) { + SDLLogD(@"Uploading soft button other state artworks"); + [self.fileManager uploadArtworks:[otherStatesToBeUploaded copy] completionHandler:^(NSArray<NSString *> * _Nonnull artworkNames, NSError * _Nullable error) { + if (error != nil) { + SDLLogE(@"Error uploading soft button artworks: %@", error); + } + + SDLLogD(@"Soft button other state artworks uploaded"); + // In case our soft button states have changed in the meantime + [self sdl_updateWithCompletionHandler:nil]; + }]; + } +} + #pragma mark - Creating Soft Buttons /** @@ -336,7 +366,9 @@ NS_ASSUME_NONNULL_BEGIN self.displayCapabilities = response.displayCapabilities; // Auto-send an updated Show - [self updateWithCompletionHandler:nil]; + if (self.softButtonObjects.count > 0) { + [self updateWithCompletionHandler:nil]; + } } - (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification { @@ -346,12 +378,8 @@ NS_ASSUME_NONNULL_BEGIN self.currentLevel = hmiStatus.hmiLevel; // Auto-send an updated show if we were in NONE and now we are not - if ([oldHMILevel isEqualToString:SDLHMILevelNone] && ![self.currentLevel isEqualToString:SDLHMILevelNone]) { - if (self.waitingOnHMILevelUpdateToSetButtons) { - [self setSoftButtonObjects:_softButtonObjects]; - } else { - [self sdl_updateWithCompletionHandler:nil]; - } + if ([oldHMILevel isEqualToString:SDLHMILevelNone] && ![self.currentLevel isEqualToString:SDLHMILevelNone] && self.waitingOnHMILevelUpdateToUpdate) { + [self updateWithCompletionHandler:nil]; } } diff --git a/SmartDeviceLink/SDLSoftButtonObject.m b/SmartDeviceLink/SDLSoftButtonObject.m index be7915a55..427421590 100644 --- a/SmartDeviceLink/SDLSoftButtonObject.m +++ b/SmartDeviceLink/SDLSoftButtonObject.m @@ -16,6 +16,12 @@ NS_ASSUME_NONNULL_BEGIN +@interface SDLSoftButtonManager() + +- (void)sdl_transitionSoftButton:(SDLSoftButtonObject *)softButton; + +@end + @interface SDLSoftButtonObject() @property (assign, nonatomic) NSUInteger buttonId; @@ -55,7 +61,7 @@ NS_ASSUME_NONNULL_BEGIN SDLLogD(@"Transitioning button %@ to state %@", self.name, stateName); self.currentStateName = stateName; - [self.manager updateWithCompletionHandler:nil]; + [self.manager sdl_transitionSoftButton:self]; return YES; } 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 index 340da1309..3b9fdfae3 100644 --- a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h +++ b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h @@ -1,14 +1,13 @@ // // SDLStreamingAudioLifecycleManager.h -// SmartDeviceLink-iOS +// 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 "SDLConnectionManagerType.h" #import "SDLHMILevel.h" #import "SDLProtocolListener.h" #import "SDLStreamingAudioManagerType.h" @@ -19,40 +18,23 @@ @class SDLStateMachine; @class SDLStreamingMediaConfiguration; -NS_ASSUME_NONNULL_BEGIN - -typedef NSString SDLAppState; -extern SDLAppState *const SDLAppStateInactive; -extern SDLAppState *const SDLAppStateActive; - -typedef NSString SDLAudioStreamState; -extern SDLAudioStreamState *const SDLAudioStreamStateStopped; -extern SDLAudioStreamState *const SDLAudioStreamStateStarting; -extern SDLAudioStreamState *const SDLAudioStreamStateReady; -extern SDLAudioStreamState *const SDLAudioStreamStateShuttingDown; +@protocol SDLConnectionManagerType; -#pragma mark - Interface +NS_ASSUME_NONNULL_BEGIN @interface SDLStreamingAudioLifecycleManager : NSObject <SDLProtocolListener, SDLStreamingAudioManagerType> -@property (strong, nonatomic, readonly) SDLStateMachine *appStateMachine; +@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 (strong, nonatomic, readonly) SDLAudioStreamState *currentAudioStreamState; @property (copy, nonatomic, nullable) SDLHMILevel hmiLevel; -@property (nonatomic, strong, readonly) SDLAudioStreamManager *audioManager; - -/** - * Whether or not streaming is supported - * - * @see SDLRegisterAppInterface SDLDisplayCapabilities - */ -@property (assign, nonatomic, readonly, getter=isStreamingSupported) BOOL streamingSupported; - /** * Whether or not the audio session is connected. */ @@ -64,7 +46,14 @@ extern SDLAudioStreamState *const SDLAudioStreamStateShuttingDown; @property (assign, nonatomic, readonly, getter=isAudioEncrypted) BOOL audioEncrypted; /** - * The requested encryption type when a session attempts to connect. + * 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 */ @@ -100,7 +89,6 @@ extern SDLAudioStreamState *const SDLAudioStreamStateShuttingDown; */ - (BOOL)sendAudioData:(NSData *)audioData; - @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m index 882a3ae34..215962283 100644 --- a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m +++ b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m @@ -1,26 +1,22 @@ // // SDLStreamingAudioLifecycleManager.m -// SmartDeviceLink-iOS +// 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 "SDLStreamingAudioLifecycleManager.h" #import "SDLAudioStreamManager.h" +#import "SDLConnectionManagerType.h" #import "SDLControlFramePayloadAudioStartServiceAck.h" #import "SDLControlFramePayloadConstants.h" #import "SDLControlFramePayloadNak.h" #import "SDLDisplayCapabilities.h" -#import "SDLGenericResponse.h" -#import "SDLGetSystemCapability.h" -#import "SDLGetSystemCapabilityResponse.h" #import "SDLGlobals.h" -#import "SDLH264VideoEncoder.h" #import "SDLHMICapabilities.h" #import "SDLLogMacros.h" -#import "SDLNotificationConstants.h" #import "SDLOnHMIStatus.h" #import "SDLProtocol.h" #import "SDLProtocolMessage.h" @@ -29,51 +25,37 @@ #import "SDLRPCResponseNotification.h" #import "SDLStateMachine.h" #import "SDLStreamingMediaConfiguration.h" -#import "SDLSystemCapability.h" #import "SDLVehicleType.h" NS_ASSUME_NONNULL_BEGIN -SDLAppState *const SDLAppStateInactive = @"AppInactive"; -SDLAppState *const SDLAppStateActive = @"AppActive"; +@interface SDLStreamingAudioLifecycleManager() -SDLAudioStreamState *const SDLAudioStreamStateStopped = @"AudioStreamStopped"; -SDLAudioStreamState *const SDLAudioStreamStateStarting = @"AudioStreamStarting"; -SDLAudioStreamState *const SDLAudioStreamStateReady = @"AudioStreamReady"; -SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShuttingDown"; - - -@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 (assign, nonatomic, readonly, getter=isHmiStateAudioStreamCapable) BOOL hmiStateAudioStreamCapable; - @property (copy, nonatomic) NSArray<NSString *> *secureMakes; @property (copy, nonatomic) NSString *connectedVehicleMake; -@property (strong, nonatomic, readwrite) SDLStateMachine *appStateMachine; -@property (strong, nonatomic, readwrite) SDLStateMachine *audioStreamStateMachine; - @end - @implementation SDLStreamingAudioLifecycleManager -#pragma mark - Public -#pragma mark Lifecycle - - (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLStreamingMediaConfiguration *)configuration { self = [super init]; if (!self) { return nil; } - SDLLogV(@"Creating StreamingAudioLifecycleManager"); + SDLLogV(@"Creating AudioStreamingLifecycleManager"); _connectionManager = connectionManager; + _audioManager = [[SDLAudioStreamManager alloc] initWithManager:self]; _requestedEncryptionType = configuration.maximumDesiredEncryption; @@ -97,7 +79,7 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti } _appStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:initialState states:[self.class sdl_appStateTransitionDictionary]]; - _audioStreamStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLAudioStreamStateStopped states:[self.class sdl_audioStreamingStateTransitionDictionary]]; + _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]; @@ -122,12 +104,12 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti } - (void)stop { - SDLLogD(@"Stopping StreamingMediaAudioLifecycleManager"); + SDLLogD(@"Stopping manager"); [self sdl_stopAudioSession]; - [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateStopped]; + self.hmiLevel = SDLHMILevelNone; - self.protocol = nil; + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped]; } - (BOOL)sendAudioData:(NSData*)audioData { @@ -145,15 +127,16 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti } #pragma mark Getters + - (BOOL)isAudioConnected { - return [self.audioStreamStateMachine isCurrentState:SDLAudioStreamStateReady]; + return [self.audioStreamStateMachine isCurrentState:SDLAudioStreamManagerStateReady]; } - (SDLAppState *)currentAppState { return self.appStateMachine.currentState; } -- (SDLAudioStreamState *)currentAudioStreamState { +- (SDLAudioStreamManagerState *)currentAudioStreamState { return self.audioStreamStateMachine.currentState; } @@ -177,26 +160,24 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti } - (void)didEnterStateAppInactive { - SDLLogD(@"App became inactive in StreamingMediaAudioLifecycleManager"); - if (!self.protocol) { return; } - + 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 in StreamingMediaAudioLifecycleManager"); - if (!self.protocol) { return; } - + SDLLogD(@"App became active"); [self sdl_startAudioSession]; } #pragma mark Audio + (NSDictionary<SDLState *, SDLAllowableStateTransitions *> *)sdl_audioStreamingStateTransitionDictionary { return @{ - SDLAudioStreamStateStopped : @[SDLAudioStreamStateStarting], - SDLAudioStreamStateStarting : @[SDLAudioStreamStateStopped, SDLAudioStreamStateReady], - SDLAudioStreamStateReady : @[SDLAudioStreamStateShuttingDown, SDLAudioStreamStateStopped], - SDLAudioStreamStateShuttingDown : @[SDLAudioStreamStateStopped] + SDLAudioStreamManagerStateStopped : @[SDLAudioStreamManagerStateStarting], + SDLAudioStreamManagerStateStarting : @[SDLAudioStreamManagerStateStopped, SDLAudioStreamManagerStateReady], + SDLAudioStreamManagerStateReady : @[SDLAudioStreamManagerStateShuttingDown, SDLAudioStreamManagerStateStopped], + SDLAudioStreamManagerStateShuttingDown : @[SDLAudioStreamManagerStateStopped] }; } @@ -213,7 +194,7 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti [self.protocol startSecureServiceWithType:SDLServiceTypeAudio payload:nil completionHandler:^(BOOL success, NSError * _Nonnull error) { if (error) { SDLLogE(@"TLS setup error: %@", error); - [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateStopped]; + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped]; } }]; } else { @@ -232,7 +213,7 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti } #pragma mark - SDLProtocolListener -#pragma mark Audio Start Service ACK +#pragma mark Video / Audio Start Service ACK - (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK { switch (startServiceACK.header.serviceType) { @@ -254,10 +235,10 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti [[SDLGlobals sharedGlobals] setDynamicMTUSize:(NSUInteger)audioAckPayload.mtu forServiceType:SDLServiceTypeAudio]; } - [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateReady]; + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateReady]; } -#pragma mark Audio Start Service NAK +#pragma mark Video / Audio Start Service NAK - (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK { switch (startServiceNAK.header.serviceType) { @@ -273,20 +254,16 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti [self sdl_transitionToStoppedState:SDLServiceTypeAudio]; } -#pragma mark Audio End Service +#pragma mark Video / Audio End Service - (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK { - if (endServiceACK.header.serviceType == SDLServiceTypeAudio) { - SDLLogD(@"Audio service ended"); - [self sdl_transitionToStoppedState:endServiceACK.header.serviceType]; - } + SDLLogD(@"%@ service ended", (endServiceACK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio")); + [self sdl_transitionToStoppedState:endServiceACK.header.serviceType]; } - (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK { - if (endServiceNAK.header.serviceType == SDLServiceTypeAudio) { - SDLLogW(@"Audio service ended with end service NAK"); - [self sdl_transitionToStoppedState:endServiceNAK.header.serviceType]; - } + 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 @@ -331,18 +308,20 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti } } - #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:SDLAudioStreamStateStopped] - && self.isHmiStateAudioStreamCapable) { - [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateStarting]; + if ([self.audioStreamStateMachine isCurrentState:SDLAudioStreamManagerStateStopped] && self.isHmiStateAudioStreamCapable) { + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStarting]; } } @@ -353,21 +332,19 @@ SDLAudioStreamState *const SDLAudioStreamStateShuttingDown = @"AudioStreamShutti } if (self.isAudioConnected) { - [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateShuttingDown]; + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateShuttingDown]; } } - (void)sdl_transitionToStoppedState:(SDLServiceType)serviceType { switch (serviceType) { case SDLServiceTypeAudio: - [self.audioStreamStateMachine transitionToState:SDLAudioStreamStateStopped]; - break; - default: + [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped]; break; + default: break; } } - #pragma mark Setters / Getters - (BOOL)isHmiStateAudioStreamCapable { diff --git a/SmartDeviceLink/SDLStreamingMediaManager.m b/SmartDeviceLink/SDLStreamingMediaManager.m index 2056469d1..95819666a 100644 --- a/SmartDeviceLink/SDLStreamingMediaManager.m +++ b/SmartDeviceLink/SDLStreamingMediaManager.m @@ -165,8 +165,8 @@ NS_ASSUME_NONNULL_BEGIN } - (void)setRequestedEncryptionType:(SDLStreamingEncryptionFlag)requestedEncryptionType { - self.audioLifecycleManager.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/SDLStreamingVideoLifecycleManager.h b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h index 34c499cd8..b2c8df48f 100644 --- a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h +++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h @@ -1,18 +1,19 @@ // // SDLStreamingVideoLifecycleManager.h -// SmartDeviceLink-iOS +// 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 "SDLStreamingMediaManagerConstants.h" +#import "SDLVideoStreamingFormat.h" +#import "SDLVideoStreamingState.h" @class SDLCarWindow; @class SDLImageResolution; @@ -20,45 +21,29 @@ @class SDLStateMachine; @class SDLStreamingMediaConfiguration; @class SDLTouchManager; -@class SDLVideoStreamingFormat; +@protocol SDLConnectionManagerType; @protocol SDLFocusableItemLocatorType; @protocol SDLStreamingMediaManagerDataSource; -NS_ASSUME_NONNULL_BEGIN - -typedef NSString SDLAppState; -// defined in SDLStreamingAudioLifecycleManager.m -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; -#pragma mark - Interface +NS_ASSUME_NONNULL_BEGIN @interface SDLStreamingVideoLifecycleManager : NSObject <SDLProtocolListener> -@property (strong, nonatomic, readonly) SDLStateMachine *appStateMachine; @property (strong, nonatomic, readonly) SDLStateMachine *videoStreamStateMachine; +@property (strong, nonatomic, readonly) SDLVideoStreamManagerState *currentVideoStreamState; +@property (strong, nonatomic, readonly) SDLStateMachine *appStateMachine; @property (strong, nonatomic, readonly) SDLAppState *currentAppState; -@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) UIViewController *rootViewController; @property (strong, nonatomic, readonly, nullable) SDLCarWindow *carWindow; @@ -138,7 +123,7 @@ extern SDLVideoStreamState *const SDLVideoStreamStateShuttingDown; @property (assign, nonatomic, readonly, nullable) CVPixelBufferPoolRef pixelBufferPool; /** - * The requested encryption type when a session attempts to connect. + * The requested encryption type when a session attempts to connect. This setting applies to both video and audio sessions. * * DEFAULT: SDLStreamingEncryptionFlagAuthenticateAndEncrypt */ @@ -184,7 +169,6 @@ extern SDLVideoStreamState *const SDLVideoStreamStateShuttingDown; */ - (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer presentationTimestamp:(CMTime)presentationTimestamp; - @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m index 96ec9ce3b..d459194e0 100644 --- a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m +++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m @@ -1,29 +1,31 @@ // // SDLStreamingVideoLifecycleManager.m -// SmartDeviceLink-iOS +// 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 "SDLStreamingVideoLifecycleManager.h" +#import "CVPixelBufferRef+SDLUtil.h" #import "SDLCarWindow.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" @@ -37,28 +39,16 @@ #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 -SDLVideoStreamState *const SDLVideoStreamStateStopped = @"VideoStreamStopped"; -SDLVideoStreamState *const SDLVideoStreamStateStarting = @"VideoStreamStarting"; -SDLVideoStreamState *const SDLVideoStreamStateReady = @"VideoStreamReady"; -SDLVideoStreamState *const SDLVideoStreamStateSuspended = @"VideoStreamSuspended"; -SDLVideoStreamState *const SDLVideoStreamStateShuttingDown = @"VideoStreamShuttingDown"; - -static NSUInteger const FramesToSendOnBackground = 30; - typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_Nullable capability); - -@interface SDLStreamingVideoLifecycleManager () <SDLVideoEncoderDelegate> +@interface SDLStreamingVideoLifecycleManager() <SDLVideoEncoderDelegate> @property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager; @property (weak, nonatomic) SDLProtocol *protocol; @@ -66,6 +56,9 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N @property (assign, nonatomic, readonly, getter=isAppStateVideoStreamCapable) BOOL appStateVideoStreamCapable; @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; @@ -73,9 +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 (assign, nonatomic) CV_NULLABLE CVPixelBufferRef backgroundingPixelBuffer; @property (strong, nonatomic, nullable) CADisplayLink *displayLink; @@ -85,19 +75,15 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N @end - @implementation SDLStreamingVideoLifecycleManager -#pragma mark - Public -#pragma mark Lifecycle - - (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLStreamingMediaConfiguration *)configuration { self = [super init]; if (!self) { return nil; } - SDLLogV(@"Creating StreamingVideoLifecycleManager"); + SDLLogV(@"Creating StreamingLifecycleManager"); _connectionManager = connectionManager; _videoEncoderSettings = configuration.customVideoEncoderSettings ?: SDLH264VideoEncoder.defaultVideoEncoderSettings; @@ -124,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]; @@ -143,10 +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]]; + _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]; @@ -170,12 +159,20 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N } - (void)stop { - SDLLogD(@"Stopping StreamingVideoLifecycleManager"); + SDLLogD(@"Stopping manager"); [self sdl_stopVideoSession]; - [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateStopped]; + _protocol = nil; + _screenSize = SDLDefaultScreenSize; + _backgroundingPixelBuffer = NULL; + _preferredFormatIndex = 0; + _preferredResolutionIndex = 0; - self.protocol = nil; + _hmiLevel = SDLHMILevelNone; + _videoStreamingState = SDLVideoStreamingStateNotStreamable; + _lastPresentationTimestamp = kCMTimeInvalid; + + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped]; } - (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer { @@ -211,8 +208,9 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N } #pragma mark Getters + - (BOOL)isVideoConnected { - return [self.videoStreamStateMachine isCurrentState:SDLVideoStreamStateReady]; + return [self.videoStreamStateMachine isCurrentState:SDLVideoStreamManagerStateReady]; } - (BOOL)isVideoStreamingPaused { @@ -227,7 +225,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N return self.appStateMachine.currentState; } -- (SDLVideoStreamState *)currentVideoStreamState { +- (SDLVideoStreamManagerState *)currentVideoStreamState { return self.videoStreamStateMachine.currentState; } @@ -251,14 +249,14 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N } - (void)didEnterStateAppInactive { - SDLLogD(@"App became inactive in StreamingVideoLifecycleManager"); + SDLLogD(@"App became inactive"); if (!self.protocol) { return; } [self sdl_sendBackgroundFrames]; [self.touchManager cancelPendingTouches]; - if ([self.videoStreamStateMachine.currentState isEqualToString:SDLVideoStreamStateReady]) { - [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateSuspended]; + if ([self.videoStreamStateMachine.currentState isEqualToString:SDLVideoStreamManagerStateReady]) { + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateSuspended]; } else { [self sdl_stopVideoSession]; } @@ -267,11 +265,11 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N // 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 in StreamingVideoLifecycleManager"); + SDLLogD(@"App became active"); if (!self.protocol) { return; } - if ([self.videoStreamStateMachine.currentState isEqualToString:SDLVideoStreamStateSuspended]) { - [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateReady]; + if ([self.videoStreamStateMachine.currentState isEqualToString:SDLVideoStreamManagerStateSuspended]) { + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateReady]; } else { [self sdl_startVideoSession]; } @@ -280,11 +278,11 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N #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] }; } @@ -358,7 +356,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"); @@ -368,7 +366,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; } @@ -376,7 +374,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; } @@ -407,7 +405,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N - (void)didEnterStateVideoStreamSuspended { SDLLogD(@"Video stream suspended"); - + [[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamSuspendedNotification object:nil]; } @@ -417,7 +415,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N } #pragma mark - SDLProtocolListener -#pragma mark Video Start Service ACK +#pragma mark Video / Audio Start Service ACK - (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK { switch (startServiceACK.header.serviceType) { @@ -457,10 +455,10 @@ 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 Start Service NAK +#pragma mark Video / Audio Start Service NAK - (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK { switch (startServiceNAK.header.serviceType) { @@ -478,7 +476,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N // If we have no payload rejected params, we don't know what to do to retry, so we'll just stop and maybe cry if (nakPayload.rejectedParams.count == 0) { - [self sdl_transitionToStoppedState]; + [self sdl_transitionToStoppedState:SDLServiceTypeVideo]; return; } @@ -496,36 +494,16 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N [self sdl_sendVideoStartService]; } -#pragma mark Video End Service +#pragma mark Video / Audio End Service - (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK { - if (endServiceACK.header.serviceType == SDLServiceTypeVideo) { - SDLLogD(@"Video service ended"); - [self sdl_transitionToStoppedState]; - } + SDLLogD(@"%@ service ended", (endServiceACK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio")); + [self sdl_transitionToStoppedState:endServiceACK.header.serviceType]; } - (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK { - if (endServiceNAK.header.serviceType == SDLServiceTypeVideo) { - SDLLogW(@"Video service ended with end service NAK"); - [self sdl_transitionToStoppedState]; - } -} - -#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]; - } - } + 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 @@ -560,15 +538,24 @@ 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; } @@ -580,11 +567,30 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N } } +#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."); @@ -596,8 +602,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" @@ -613,12 +619,18 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N } if (self.isVideoConnected) { - [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateShuttingDown]; + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateShuttingDown]; } } -- (void)sdl_transitionToStoppedState { - [self.videoStreamStateMachine transitionToState:SDLVideoStreamStateStopped]; +- (void)sdl_transitionToStoppedState:(SDLServiceType)serviceType { + switch (serviceType) { + case SDLServiceTypeVideo: + [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped]; + break; + default: + break; + } } - (void)sdl_displayLinkFired:(CADisplayLink *)displayLink { @@ -691,7 +703,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N if (self.preferredFormatIndex >= self.preferredFormats.count || self.preferredResolutionIndex >= self.preferredResolutions.count) { SDLLogE(@"No preferred format or no preferred resolution found that works: format index %lu, resolution index %lu", (unsigned long)self.preferredFormatIndex, (unsigned long)self.preferredResolutionIndex); - [self sdl_transitionToStoppedState]; + [self sdl_transitionToStoppedState:SDLServiceTypeVideo]; return; } @@ -706,7 +718,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 { @@ -715,7 +727,6 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N } } - #pragma mark Setters / Getters - (void)setRootViewController:(UIViewController *)rootViewController { @@ -733,13 +744,14 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N } - (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 618644d14..8549e58e3 100644 --- a/SmartDeviceLink/SDLSubscribeVehicleData.h +++ b/SmartDeviceLink/SDLSubscribeVehicleData.h @@ -48,7 +48,7 @@ NS_ASSUME_NONNULL_BEGIN * @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:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus: instead"); +- (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. @@ -61,6 +61,7 @@ NS_ASSUME_NONNULL_BEGIN * @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 @@ -78,10 +79,11 @@ NS_ASSUME_NONNULL_BEGIN * @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 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 wiperStatus:(BOOL)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; /** * A boolean value. If true, subscribes GPS data. @@ -213,6 +215,17 @@ NS_ASSUME_NONNULL_BEGIN */ @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 1bbeaa1de..013496525 100644 --- a/SmartDeviceLink/SDLSubscribeVehicleData.m +++ b/SmartDeviceLink/SDLSubscribeVehicleData.m @@ -18,10 +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 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 wiperStatus: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 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 wiperStatus:(BOOL)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; @@ -35,6 +35,7 @@ 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); @@ -52,6 +53,7 @@ NS_ASSUME_NONNULL_BEGIN self.speed = @(speed); self.steeringWheelAngle = @(steeringWheelAngle); self.tirePressure = @(tirePressure); + self.turnSignal = @(turnSignal); self.wiperStatus = @(wiperStatus); return self; @@ -265,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 7fcffebef..1cc10c6b3 100644 --- a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h +++ b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h @@ -198,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 c9c1bb7fd..b39328d7e 100644 --- a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m +++ b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m @@ -226,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/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/SDLTextAndGraphicManager.m b/SmartDeviceLink/SDLTextAndGraphicManager.m index 413aada4d..34bc8d97d 100644 --- a/SmartDeviceLink/SDLTextAndGraphicManager.m +++ b/SmartDeviceLink/SDLTextAndGraphicManager.m @@ -54,6 +54,7 @@ NS_ASSUME_NONNULL_BEGIN @property (strong, nonatomic, nullable) SDLArtwork *blankArtwork; +@property (assign, nonatomic) BOOL waitingOnHMILevelUpdateToUpdate; @property (assign, nonatomic) BOOL isDirty; @end @@ -72,6 +73,9 @@ NS_ASSUME_NONNULL_BEGIN _currentScreenData = [[SDLShow alloc] init]; _currentLevel = SDLHMILevelNone; + _waitingOnHMILevelUpdateToUpdate = NO; + _isDirty = NO; + [[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]; @@ -102,6 +106,7 @@ NS_ASSUME_NONNULL_BEGIN _displayCapabilities = nil; _currentLevel = SDLHMILevelNone; _blankArtwork = nil; + _waitingOnHMILevelUpdateToUpdate = NO; _isDirty = NO; } @@ -110,6 +115,14 @@ NS_ASSUME_NONNULL_BEGIN - (void)updateWithCompletionHandler:(nullable SDLTextAndGraphicUpdateCompletionHandler)handler { if (self.isBatchingUpdates) { return; } + // Don't send if we're in HMI NONE + if (self.currentLevel == nil || [self.currentLevel isEqualToString:SDLHMILevelNone]) { + self.waitingOnHMILevelUpdateToUpdate = YES; + return; + } else { + self.waitingOnHMILevelUpdateToUpdate = NO; + } + if (self.isDirty) { self.isDirty = NO; [self sdl_updateWithCompletionHandler:handler]; @@ -117,11 +130,6 @@ NS_ASSUME_NONNULL_BEGIN } - (void)sdl_updateWithCompletionHandler:(nullable SDLTextAndGraphicUpdateCompletionHandler)handler { - // Don't send if we're in HMI NONE - if (self.currentLevel == nil || [self.currentLevel isEqualToString:SDLHMILevelNone]) { - return; - } - SDLLogD(@"Updating text and graphics"); if (self.inProgressUpdate != nil) { SDLLogV(@"In progress update exists, queueing update"); @@ -487,6 +495,13 @@ NS_ASSUME_NONNULL_BEGIN return [array copy]; } +- (BOOL)sdl_hasData { + BOOL hasTextFields = ([self sdl_findNonNilTextFields].count > 0); + BOOL hasImageFields = (self.primaryGraphic != nil) || (self.secondaryGraphic != nil); + + return hasTextFields || hasImageFields; +} + #pragma mark - Equality - (BOOL)sdl_showImages:(SDLShow *)show isEqualToShowImages:(SDLShow *)show2 { @@ -507,110 +522,98 @@ NS_ASSUME_NONNULL_BEGIN - (void)setTextField1:(nullable NSString *)textField1 { _textField1 = textField1; + _isDirty = YES; if (!self.isBatchingUpdates) { // If we aren't batching, send the update immediately, if we are, set ourselves as dirty (so we know we should send an update after the batch ends) - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setTextField2:(nullable NSString *)textField2 { _textField2 = textField2; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setTextField3:(nullable NSString *)textField3 { _textField3 = textField3; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setTextField4:(nullable NSString *)textField4 { _textField4 = textField4; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setMediaTrackTextField:(nullable NSString *)mediaTrackTextField { _mediaTrackTextField = mediaTrackTextField; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setPrimaryGraphic:(nullable SDLArtwork *)primaryGraphic { _primaryGraphic = primaryGraphic; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setSecondaryGraphic:(nullable SDLArtwork *)secondaryGraphic { _secondaryGraphic = secondaryGraphic; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setAlignment:(nullable SDLTextAlignment)alignment { _alignment = alignment ? alignment : SDLTextAlignmentCenter; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setTextField1Type:(nullable SDLMetadataType)textField1Type { _textField1Type = textField1Type; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setTextField2Type:(nullable SDLMetadataType)textField2Type { _textField2Type = textField2Type; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setTextField3Type:(nullable SDLMetadataType)textField3Type { _textField3Type = textField3Type; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } - (void)setTextField4Type:(nullable SDLMetadataType)textField4Type { _textField4Type = textField4Type; + _isDirty = YES; if (!self.isBatchingUpdates) { - [self sdl_updateWithCompletionHandler:nil]; - } else { - _isDirty = YES; + [self updateWithCompletionHandler:nil]; } } @@ -644,18 +647,21 @@ NS_ASSUME_NONNULL_BEGIN self.displayCapabilities = response.displayCapabilities; // Auto-send an updated show - [self sdl_updateWithCompletionHandler:nil]; + if ([self sdl_hasData]) { + [self sdl_updateWithCompletionHandler:nil]; + } } - (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification { SDLOnHMIStatus *hmiStatus = (SDLOnHMIStatus *)notification.notification; + SDLHMILevel oldLevel = self.currentLevel; + self.currentLevel = hmiStatus.hmiLevel; + // Auto-send an updated show if we were in NONE and now we are not - if ([self.currentLevel isEqualToString:SDLHMILevelNone] && ![hmiStatus.hmiLevel isEqualToString:SDLHMILevelNone]) { + if ([oldLevel isEqualToString:SDLHMILevelNone] && ![self.currentLevel isEqualToString:SDLHMILevelNone] && self.waitingOnHMILevelUpdateToUpdate) { [self sdl_updateWithCompletionHandler:nil]; } - - self.currentLevel = hmiStatus.hmiLevel; } @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 3e2d8d81b..ace3cf584 100644 --- a/SmartDeviceLink/SDLUnsubscribeVehicleData.h +++ b/SmartDeviceLink/SDLUnsubscribeVehicleData.h @@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN * @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:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus: instead"); +- (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. @@ -63,6 +63,7 @@ NS_ASSUME_NONNULL_BEGIN * @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 @@ -80,10 +81,11 @@ NS_ASSUME_NONNULL_BEGIN * @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 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 wiperStatus:(BOOL)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; /** * If true, unsubscribes from GPS @@ -215,6 +217,16 @@ NS_ASSUME_NONNULL_BEGIN */ @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 6ad89d5a5..3ecf16bfc 100644 --- a/SmartDeviceLink/SDLUnsubscribeVehicleData.m +++ b/SmartDeviceLink/SDLUnsubscribeVehicleData.m @@ -18,10 +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 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 wiperStatus: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 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 wiperStatus:(BOOL)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; @@ -35,6 +35,7 @@ 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); @@ -52,6 +53,7 @@ NS_ASSUME_NONNULL_BEGIN self.speed = @(speed); self.steeringWheelAngle = @(steeringWheelAngle); self.tirePressure = @(tirePressure); + self.turnSignal = @(turnSignal); self.wiperStatus = @(wiperStatus); return self; @@ -265,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 f0eb57497..0500a1921 100644 --- a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h +++ b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h @@ -16,187 +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 fuel range. + The result of requesting to unsubscribe to the fuel range. Optional */ @property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelRange; /** - The result of requesting to subscribe to the instantaneous fuel consumption in microlitres. + 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 estimated percentage of remaining oil life of the engine. + 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 subscribe to the torque value for engine (in Nm) on non-diesel variants. + 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 945511f8d..6ad213dee 100644 --- a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m +++ b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m @@ -226,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/SDLVehicleDataType.h b/SmartDeviceLink/SDLVehicleDataType.h index 323fcfe3a..4afe818f8 100644 --- a/SmartDeviceLink/SDLVehicleDataType.h +++ b/SmartDeviceLink/SDLVehicleDataType.h @@ -148,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 c02de4acb..4b37a2456 100644 --- a/SmartDeviceLink/SDLVehicleDataType.m +++ b/SmartDeviceLink/SDLVehicleDataType.m @@ -32,3 +32,6 @@ SDLVehicleDataType const SDLVehicleDataTypeEngineOilLife = @"VEHICLEDATA_ENGINEO 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 388c9f234..996da6be6 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" @@ -160,17 +163,27 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[]; #import "SDLECallInfo.h" #import "SDLEmergencyEvent.h" #import "SDLFuelRange.h" +#import "SDLEqualizerSettings.h" #import "SDLGPSData.h" +#import "SDLGPSLocation.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" @@ -188,10 +201,16 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[]; #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 "SDLSRGBColor.h" #import "SDLStartTime.h" +#import "SDLStationIDNumber.h" #import "SDLSyncMsgVersion.h" #import "SDLSystemCapability.h" #import "SDLTTSChunk.h" @@ -214,6 +233,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" @@ -227,9 +247,12 @@ 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" @@ -248,7 +271,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" @@ -265,8 +293,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" @@ -276,7 +307,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" @@ -287,6 +320,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" diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m index b6b52f0a0..ff2ae7931 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLMenuCellSpec.m @@ -41,6 +41,15 @@ describe(@"a menu cell", ^{ expect(testCell.voiceCommands).to(beNil()); expect(testCell.subCells).to(equal(someSubcells)); }); + + 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 cc6443407..f960f05ba 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" 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]; @@ -195,14 +205,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)); }); }); @@ -212,14 +228,20 @@ 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()); }); }); }); 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/SDLSoftButtonManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m index 7eaad7142..17be53b19 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m @@ -24,23 +24,23 @@ @interface SDLSoftButtonManager() +@property (strong, nonatomic) NSArray<SDLSoftButton *> *currentSoftButtons; + @property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager; @property (weak, nonatomic) SDLFileManager *fileManager; -@property (strong, nonatomic) NSArray<SDLSoftButton *> *currentSoftButtons; - @property (strong, nonatomic, nullable) SDLShow *inProgressUpdate; @property (copy, nonatomic, nullable) SDLSoftButtonUpdateCompletionHandler inProgressHandler; -@property (strong, nonatomic, nullable) SDLShow *queuedImageUpdate; @property (assign, nonatomic) BOOL hasQueuedUpdate; @property (copy, nonatomic, nullable) SDLSoftButtonUpdateCompletionHandler queuedUpdateHandler; -@property (strong, nonatomic, nullable) SDLHMILevel currentLevel; -@property (assign, nonatomic) BOOL waitingOnHMILevelUpdateToSetButtons; +@property (copy, nonatomic, nullable) SDLHMILevel currentLevel; @property (strong, nonatomic, nullable) SDLDisplayCapabilities *displayCapabilities; @property (strong, nonatomic, nullable) SDLSoftButtonCapabilities *softButtonCapabilities; +@property (assign, nonatomic) BOOL waitingOnHMILevelUpdateToUpdate; + @end QuickSpecBegin(SDLSoftButtonManagerSpec) @@ -91,22 +91,22 @@ describe(@"a soft button manager", ^{ expect(testManager.hasQueuedUpdate).to(beFalse()); expect(testManager.displayCapabilities).to(beNil()); expect(testManager.softButtonCapabilities).to(beNil()); - expect(testManager.waitingOnHMILevelUpdateToSetButtons).to(beFalse()); + expect(testManager.waitingOnHMILevelUpdateToUpdate).to(beFalse()); }); context(@"when in HMI NONE", ^{ beforeEach(^{ testManager.currentLevel = SDLHMILevelNone; - NSString *sameName = @"Same name"; - testObject1 = [[SDLSoftButtonObject alloc] initWithName:sameName states:@[object1State1, object1State2] initialStateName:object1State1Name handler:nil]; - testObject2 = [[SDLSoftButtonObject alloc] initWithName:sameName state:object2State1 handler:nil]; + testObject1 = [[SDLSoftButtonObject alloc] initWithName:@"name1" states:@[object1State1, object1State2] initialStateName:object1State1Name handler:nil]; + testObject2 = [[SDLSoftButtonObject alloc] initWithName:@"name2" state:object2State1 handler:nil]; testManager.softButtonObjects = @[testObject1, testObject2]; }); - it(@"should not set the soft buttons", ^{ - expect(testManager.waitingOnHMILevelUpdateToSetButtons).to(beTrue()); + it(@"should set the soft buttons, but not update", ^{ + expect(testManager.softButtonObjects).toNot(beEmpty()); + expect(testManager.waitingOnHMILevelUpdateToUpdate).to(beTrue()); expect(testManager.inProgressUpdate).to(beNil()); }); }); @@ -115,15 +115,15 @@ describe(@"a soft button manager", ^{ beforeEach(^{ testManager.currentLevel = nil; - NSString *sameName = @"Same name"; - testObject1 = [[SDLSoftButtonObject alloc] initWithName:sameName states:@[object1State1, object1State2] initialStateName:object1State1Name handler:nil]; - testObject2 = [[SDLSoftButtonObject alloc] initWithName:sameName state:object2State1 handler:nil]; + testObject1 = [[SDLSoftButtonObject alloc] initWithName:@"name1" states:@[object1State1, object1State2] initialStateName:object1State1Name handler:nil]; + testObject2 = [[SDLSoftButtonObject alloc] initWithName:@"name2" state:object2State1 handler:nil]; testManager.softButtonObjects = @[testObject1, testObject2]; }); - it(@"should not set the soft buttons", ^{ - expect(testManager.waitingOnHMILevelUpdateToSetButtons).to(beTrue()); + it(@"should set the soft buttons, but not update", ^{ + expect(testManager.softButtonObjects).toNot(beEmpty()); + expect(testManager.waitingOnHMILevelUpdateToUpdate).to(beTrue()); expect(testManager.inProgressUpdate).to(beNil()); }); }); @@ -359,7 +359,7 @@ describe(@"a soft button manager", ^{ expect(testManager.currentLevel).to(beNil()); expect(testManager.displayCapabilities).to(beNil()); expect(testManager.softButtonCapabilities).to(beNil()); - expect(testManager.waitingOnHMILevelUpdateToSetButtons).to(beFalse()); + expect(testManager.waitingOnHMILevelUpdateToUpdate).to(beFalse()); }); }); }); 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/SDLStreamingVideoLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m index 81c9d97ad..33062b9db 100644 --- a/SmartDeviceLinkTests/SDLStreamingVideoLifecycleManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m @@ -1,49 +1,40 @@ -// -// SDLStreamingVideoLifecycleManagerSpec.m -// SmartDeviceLink-iOS -// - #import <Quick/Quick.h> #import <Nimble/Nimble.h> #import <OCMock/OCMock.h> #import "SDLCarWindowViewController.h" -#import "SDLConnectionManagerType.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 "SDLStreamingVideoLifecycleManager.h" -#import "SDLFakeStreamingManagerDataSource.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(SDLStreamingVideoLifecycleManagerSpec) -describe(@"the streaming media manager", ^{ +describe(@"the streaming video manager", ^{ __block SDLStreamingVideoLifecycleManager *streamingLifecycleManager = nil; __block SDLStreamingMediaConfiguration *testConfiguration = [SDLStreamingMediaConfiguration insecureConfiguration]; __block SDLCarWindowViewController *testViewController = [[SDLCarWindowViewController alloc] init]; @@ -51,9 +42,10 @@ describe(@"the streaming media manager", ^{ __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]; @@ -82,7 +74,7 @@ describe(@"the streaming media manager", ^{ expect(@(streamingLifecycleManager.pixelBufferPool == NULL)).to(equal(@YES)); expect(@(streamingLifecycleManager.requestedEncryptionType)).to(equal(@(SDLStreamingEncryptionFlagNone))); expect(streamingLifecycleManager.currentAppState).to(equal(SDLAppStateActive)); - 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)); @@ -96,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,7 +105,7 @@ describe(@"the streaming media manager", ^{ expect(@(CGSizeEqualToSize(streamingLifecycleManager.screenSize, CGSizeZero))).to(equal(@YES)); expect(@(streamingLifecycleManager.pixelBufferPool == NULL)).to(equal(@YES)); expect(streamingLifecycleManager.currentAppState).to(equal(SDLAppStateActive)); - expect(streamingLifecycleManager.currentVideoStreamState).to(match(SDLVideoStreamStateStopped)); + expect(streamingLifecycleManager.currentVideoStreamState).to(match(SDLVideoStreamManagerStateStopped)); }); describe(@"after receiving a register app interface notification", ^{ @@ -174,22 +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 video stream is open", ^{ + context(@"and the stream is open", ^{ beforeEach(^{ - [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; }); @@ -197,41 +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 video stream", ^{ - 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 video stream", ^{ - 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 video stream", ^{ - 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 video stream", ^{ - expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateReady)); + 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)); }); }); }); @@ -243,107 +244,126 @@ describe(@"the streaming media manager", ^{ }); it(@"should suspend the video stream", ^{ - 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 video stream", ^{ - 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 video stream", ^{ - 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 video stream", ^{ - 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 not close video stream", ^{ - expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateReady)); + it(@"should close the stream", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown)); }); }); }); }); - describe(@"and video stream is closed", ^{ + context(@"and both streams are closed", ^{ beforeEach(^{ - [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 video stream", ^{ - 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 video stream", ^{ - 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 video stream", ^{ - 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 the streams", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStarting)); + }); + }); + + context(@"full but not streamable", ^{ + beforeEach(^{ + sendNotificationForHMILevel(SDLHMILevelFull, SDLVideoStreamingStateNotStreamable); }); - it(@"should start video stream", ^{ - expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStarting)); + it(@"should not start the stream", ^{ + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped)); }); }); }); @@ -352,7 +372,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", ^{ @@ -381,50 +401,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)); + }); }); }); }); @@ -440,7 +460,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; @@ -461,7 +481,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)); }); }); @@ -475,7 +495,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)); }); }); @@ -528,7 +548,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; @@ -558,7 +578,7 @@ describe(@"the streaming media manager", ^{ }); it(@"should end the service", ^{ - expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamStateStopped)); + expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped)); }); }); }); @@ -568,7 +588,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; @@ -581,7 +601,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)); }); }); @@ -590,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; @@ -603,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)); }); }); }); diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m index 5005483d0..ef5b18623 100644 --- a/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m +++ b/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m @@ -94,7 +94,7 @@ describe(@"text and graphic manager", ^{ expect(testManager.textField1).to(equal(testString)); expect(testManager.inProgressUpdate).to(beNil()); - expect(testManager.isDirty).to(beFalse()); + expect(testManager.isDirty).to(beTrue()); }); }); @@ -108,7 +108,7 @@ describe(@"text and graphic manager", ^{ expect(testManager.textField1).to(equal(testString)); expect(testManager.inProgressUpdate).to(beNil()); - expect(testManager.isDirty).to(beFalse()); + expect(testManager.isDirty).to(beTrue()); }); }); 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/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/SDLLightNameSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLightNameSpec.m new file mode 100644 index 000000000..e711273da --- /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(SDLLightNameRearLeftBreakLight).to(equal(@"REAR_LEFT_BREAK_LIGHT")); + expect(SDLLightNameRearRightBreakLight).to(equal(@"REAR_RIGHT_BREAK_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/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 ee79864fa..2d9812475 100644 --- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m @@ -42,6 +42,8 @@ describe(@"Individual Enum Value Tests", ^ { 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/SDLOnVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m index bb7a040f2..aba995df9 100644 --- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m @@ -39,6 +39,7 @@ describe(@"Getter/Setter Tests", ^ { testNotification.deviceStatus = device; testNotification.driverBraking = SDLVehicleDataEventStatusYes; testNotification.eCallInfo = eCall; + testNotification.electronicParkBrakeStatus = SDLElectronicParkBrakeStatusDriveActive; testNotification.emergencyEvent = event; testNotification.engineOilLife = @34.45; testNotification.engineTorque = @-200.124; @@ -56,6 +57,7 @@ describe(@"Getter/Setter Tests", ^ { testNotification.speed = @70.1; testNotification.steeringWheelAngle = @0.000000001; testNotification.tirePressure = tires; + testNotification.turnSignal = SDLTurnSignalRight; testNotification.vin = @"222222222722"; testNotification.wiperStatus = SDLWiperStatusStalled; @@ -67,6 +69,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testNotification.deviceStatus).to(equal(device)); expect(testNotification.driverBraking).to(equal(SDLVehicleDataEventStatusYes)); expect(testNotification.eCallInfo).to(equal(eCall)); + expect(testNotification.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive)); expect(testNotification.emergencyEvent).to(equal(event)); expect(testNotification.engineOilLife).to(equal(@34.45)); expect(testNotification.engineTorque).to(equal(@-200.124)); @@ -84,41 +87,44 @@ describe(@"Getter/Setter Tests", ^ { 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", ^ { NSDictionary* dict = @{SDLNameNotification: - @{SDLNameParameters: - @{SDLNameAccelerationPedalPosition:@99.99999999, - SDLNameAirbagStatus:airbag, - SDLNameBeltStatus:belt, - SDLNameBodyInformation:body, - SDLNameClusterModeStatus:clusterMode, - SDLNameDeviceStatus:device, - SDLNameDriverBraking:SDLVehicleDataEventStatusYes, - SDLNameECallInfo:eCall, - 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, - SDLNameVIN:@"222222222722", - SDLNameWiperStatus:SDLWiperStatusStalled}, - SDLNameOperationName:SDLNameOnVehicleData}}; + @{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.accPedalPosition).to(equal(@99.99999999)); @@ -129,6 +135,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testNotification.deviceStatus).to(equal(device)); expect(testNotification.driverBraking).to(equal(SDLVehicleDataEventStatusYes)); expect(testNotification.eCallInfo).to(equal(eCall)); + expect(testNotification.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive)); expect(testNotification.emergencyEvent).to(equal(event)); expect(testNotification.engineOilLife).to(equal(@45.1)); expect(testNotification.engineTorque).to(equal(@-200.124)); @@ -146,6 +153,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); }); @@ -161,6 +169,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testNotification.deviceStatus).to(beNil()); expect(testNotification.driverBraking).to(beNil()); expect(testNotification.eCallInfo).to(beNil()); + expect(testNotification.electronicParkBrakeStatus).to(beNil()); expect(testNotification.emergencyEvent).to(beNil()); expect(testNotification.engineOilLife).to(beNil()); expect(testNotification.engineTorque).to(beNil()); @@ -178,6 +187,7 @@ describe(@"Getter/Setter Tests", ^ { 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/SDLAddSubMenuSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m index 8dd5742cb..f082671b5 100644 --- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m @@ -9,21 +9,60 @@ #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"]; + }); + + 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:", ^{ + 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()); + }); + + 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 +70,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 +90,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 c1df0f946..d5575fe7b 100644 --- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m @@ -25,6 +25,7 @@ describe(@"Getter/Setter Tests", ^ { testRequest.deviceStatus = @NO; testRequest.driverBraking = @YES; testRequest.eCallInfo = @YES; + testRequest.electronicParkBrakeStatus = @YES; testRequest.emergencyEvent = @YES; testRequest.engineOilLife = @YES; testRequest.engineTorque = @NO; @@ -42,6 +43,7 @@ describe(@"Getter/Setter Tests", ^ { testRequest.speed = @NO; testRequest.steeringWheelAngle = @NO; testRequest.tirePressure = @NO; + testRequest.turnSignal = @YES; testRequest.wiperStatus = @NO; expect(testRequest.accPedalPosition).to(equal(@YES)); @@ -52,6 +54,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); @@ -69,6 +72,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); }); @@ -83,6 +87,7 @@ describe(@"Getter/Setter Tests", ^ { SDLNameDeviceStatus:@YES, SDLNameDriverBraking:@YES, SDLNameECallInfo:@YES, + SDLNameElectronicParkBrakeStatus:@YES, SDLNameEmergencyEvent:@NO, SDLNameEngineOilLife:@YES, SDLNameEngineTorque:@YES, @@ -100,6 +105,7 @@ describe(@"Getter/Setter Tests", ^ { SDLNameSpeed:@YES, SDLNameSteeringWheelAngle:@NO, SDLNameTirePressure:@YES, + SDLNameTurnSignal:@NO, SDLNameWiperStatus:@YES}, SDLNameOperationName:SDLNameGetVehicleData}}; SDLGetVehicleData* testRequest = [[SDLGetVehicleData alloc] initWithDictionary:dict]; @@ -112,6 +118,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); @@ -129,6 +136,7 @@ describe(@"Getter/Setter Tests", ^ { 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(@YES)); }); }); @@ -145,6 +153,7 @@ describe(@"initializers", ^{ expect(testRequest.deviceStatus).to(beNil()); expect(testRequest.driverBraking).to(beNil()); expect(testRequest.eCallInfo).to(beNil()); + expect(testRequest.electronicParkBrakeStatus).to(beNil()); expect(testRequest.emergencyEvent).to(beNil()); expect(testRequest.engineOilLife).to(beNil()); expect(testRequest.engineTorque).to(beNil()); @@ -162,6 +171,7 @@ describe(@"initializers", ^{ 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()); }); @@ -176,6 +186,7 @@ describe(@"initializers", ^{ 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)); @@ -193,11 +204,12 @@ describe(@"initializers", ^{ 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)); }); 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 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 vin:YES wiperStatus:YES]; + 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)); @@ -207,6 +219,7 @@ describe(@"initializers", ^{ 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)); @@ -224,6 +237,7 @@ describe(@"initializers", ^{ 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/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/SDLSubscribeVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m index 79575e019..3ec8a0adb 100644 --- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m @@ -25,6 +25,7 @@ describe(@"Getter/Setter Tests", ^ { testRequest.deviceStatus = @NO; testRequest.driverBraking = @YES; testRequest.eCallInfo = @YES; + testRequest.electronicParkBrakeStatus = @YES; testRequest.emergencyEvent = @YES; testRequest.engineOilLife = @YES; testRequest.engineTorque = @NO; @@ -42,6 +43,7 @@ describe(@"Getter/Setter Tests", ^ { testRequest.speed = @NO; testRequest.steeringWheelAngle = @NO; testRequest.tirePressure = @NO; + testRequest.turnSignal = @YES; testRequest.wiperStatus = @NO; expect(testRequest.accPedalPosition).to(equal(@YES)); @@ -52,6 +54,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); @@ -69,39 +72,42 @@ describe(@"Getter/Setter Tests", ^ { 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", ^ { NSDictionary<NSString *, id> *dict = @{SDLNameRequest: - @{SDLNameParameters: - @{SDLNameAccelerationPedalPosition:@YES, - SDLNameAirbagStatus:@YES, - SDLNameBeltStatus:@YES, - SDLNameBodyInformation:@YES, - SDLNameClusterModeStatus:@YES, - SDLNameDeviceStatus:@YES, - SDLNameDriverBraking:@YES, - SDLNameECallInfo:@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, - SDLNameWiperStatus:@NO}, - SDLNameOperationName:SDLNameSubscribeVehicleData}}; + @{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.accPedalPosition).to(equal(@YES)); @@ -112,6 +118,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); @@ -129,6 +136,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); }); }); @@ -145,6 +153,7 @@ describe(@"initializers", ^{ expect(testRequest.deviceStatus).to(beNil()); expect(testRequest.driverBraking).to(beNil()); expect(testRequest.eCallInfo).to(beNil()); + expect(testRequest.electronicParkBrakeStatus).to(beNil()); expect(testRequest.emergencyEvent).to(beNil()); expect(testRequest.engineOilLife).to(beNil()); expect(testRequest.engineTorque).to(beNil()); @@ -162,11 +171,12 @@ describe(@"initializers", ^{ 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 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 wiperStatus:YES]; + 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)); @@ -176,6 +186,7 @@ describe(@"initializers", ^{ 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)); @@ -193,6 +204,7 @@ describe(@"initializers", ^{ 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)); }); @@ -207,6 +219,7 @@ describe(@"initializers", ^{ 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)); @@ -224,6 +237,7 @@ describe(@"initializers", ^{ 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)); }); }); diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m index f2131d8e7..d571d743e 100644 --- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m @@ -25,6 +25,7 @@ describe(@"Getter/Setter Tests", ^ { testRequest.deviceStatus = @YES; testRequest.driverBraking = @YES; testRequest.eCallInfo = @YES; + testRequest.electronicParkBrakeStatus = @YES; testRequest.emergencyEvent = @YES; testRequest.engineOilLife = @YES; testRequest.engineTorque = @YES; @@ -42,6 +43,7 @@ describe(@"Getter/Setter Tests", ^ { testRequest.speed = @YES; testRequest.steeringWheelAngle = @YES; testRequest.tirePressure = @YES; + testRequest.turnSignal = @NO; testRequest.wiperStatus = @YES; expect(testRequest.accPedalPosition).to(equal(@YES)); @@ -52,6 +54,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); @@ -69,39 +72,42 @@ describe(@"Getter/Setter Tests", ^ { 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", ^ { NSDictionary<NSString *, id> *dict = @{SDLNameRequest: - @{SDLNameParameters: - @{SDLNameAccelerationPedalPosition:@YES, - SDLNameAirbagStatus:@YES, - SDLNameBeltStatus:@YES, - SDLNameBodyInformation:@YES, - SDLNameClusterModeStatus:@YES, - SDLNameDeviceStatus:@YES, - SDLNameDriverBraking:@YES, - SDLNameECallInfo:@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, - SDLNameWiperStatus:@YES}, - SDLNameOperationName:SDLNameUnsubscribeVehicleData}}; + @{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.accPedalPosition).to(equal(@YES)); @@ -112,6 +118,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); @@ -129,6 +136,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); }); }); @@ -145,6 +153,7 @@ describe(@"initializers", ^{ expect(testRequest.deviceStatus).to(beNil()); expect(testRequest.driverBraking).to(beNil()); expect(testRequest.eCallInfo).to(beNil()); + expect(testRequest.electronicParkBrakeStatus).to(beNil()); expect(testRequest.emergencyEvent).to(beNil()); expect(testRequest.engineOilLife).to(beNil()); expect(testRequest.engineTorque).to(beNil()); @@ -162,11 +171,12 @@ describe(@"initializers", ^{ 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:", ^{ - SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo: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 wiperStatus:YES]; + 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)); @@ -176,6 +186,7 @@ describe(@"initializers", ^{ 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)); @@ -193,6 +204,7 @@ describe(@"initializers", ^{ 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)); }); @@ -207,6 +219,7 @@ describe(@"initializers", ^{ 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)); @@ -224,6 +237,7 @@ describe(@"initializers", ^{ 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)); }); }); diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m index 1696ab8c9..9d7a69713 100644 --- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m @@ -39,6 +39,7 @@ describe(@"Getter/Setter Tests", ^ { testResponse.deviceStatus = device; testResponse.driverBraking = SDLVehicleDataEventStatusNoEvent; testResponse.eCallInfo = eCall; + testResponse.electronicParkBrakeStatus = SDLElectronicParkBrakeStatusDriveActive; testResponse.emergencyEvent = event; testResponse.engineOilLife = @56.3; testResponse.engineTorque = @630.4; @@ -56,6 +57,7 @@ describe(@"Getter/Setter Tests", ^ { testResponse.speed = @100; testResponse.steeringWheelAngle = @-1500; testResponse.tirePressure = tires; + testResponse.turnSignal = SDLTurnSignalBoth; testResponse.vin = @"6574839201"; testResponse.wiperStatus = SDLWiperStatusAutomaticHigh; @@ -67,6 +69,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testResponse.deviceStatus).to(equal(device)); expect(testResponse.driverBraking).to(equal(SDLVehicleDataEventStatusNoEvent)); expect(testResponse.eCallInfo).to(equal(eCall)); + expect(testResponse.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive)); expect(testResponse.emergencyEvent).to(equal(event)); expect(testResponse.engineOilLife).to(equal(@56.3)); expect(testResponse.engineTorque).to(equal(@630.4)); @@ -84,6 +87,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); }); @@ -100,6 +104,7 @@ describe(@"Getter/Setter Tests", ^ { SDLNameDeviceStatus:device, SDLNameDriverBraking:SDLVehicleDataEventStatusNoEvent, SDLNameECallInfo:eCall, + SDLNameElectronicParkBrakeStatus:SDLElectronicParkBrakeStatusDriveActive, SDLNameEmergencyEvent:event, SDLNameEngineOilLife:@23.22, SDLNameEngineTorque:@630.4, @@ -117,6 +122,7 @@ describe(@"Getter/Setter Tests", ^ { SDLNameSpeed:@100, SDLNameSteeringWheelAngle:@-1500, SDLNameTirePressure:tires, + SDLNameTurnSignal:SDLTurnSignalOff, SDLNameVIN:@"6574839201", SDLNameWiperStatus:SDLWiperStatusAutomaticHigh}, SDLNameOperationName:SDLNameGetVehicleData}} mutableCopy]; @@ -130,6 +136,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testResponse.deviceStatus).to(equal(device)); expect(testResponse.driverBraking).to(equal(SDLVehicleDataEventStatusNoEvent)); expect(testResponse.eCallInfo).to(equal(eCall)); + expect(testResponse.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive)); expect(testResponse.emergencyEvent).to(equal(event)); expect(testResponse.engineOilLife).to(equal(@23.22)); expect(testResponse.engineTorque).to(equal(@630.4)); @@ -147,6 +154,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); }); @@ -162,6 +170,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testResponse.deviceStatus).to(beNil()); expect(testResponse.driverBraking).to(beNil()); expect(testResponse.eCallInfo).to(beNil()); + expect(testResponse.electronicParkBrakeStatus).to(beNil()); expect(testResponse.emergencyEvent).to(beNil()); expect(testResponse.engineOilLife).to(beNil()); expect(testResponse.engineTorque).to(beNil()); @@ -179,6 +188,7 @@ describe(@"Getter/Setter Tests", ^ { 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/SDLSubscribeVehicleDataResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m index b608a0174..aa8000b14 100644 --- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m @@ -29,6 +29,7 @@ describe(@"Getter/Setter Tests", ^ { testResponse.deviceStatus = vehicleDataResult; testResponse.driverBraking = vehicleDataResult; testResponse.eCallInfo = vehicleDataResult; + testResponse.electronicParkBrakeStatus = vehicleDataResult; testResponse.emergencyEvent = vehicleDataResult; testResponse.engineOilLife = vehicleDataResult; testResponse.engineTorque = vehicleDataResult; @@ -46,6 +47,7 @@ describe(@"Getter/Setter Tests", ^ { testResponse.speed = vehicleDataResult; testResponse.steeringWheelAngle = vehicleDataResult; testResponse.tirePressure = vehicleDataResult; + testResponse.turnSignal = vehicleDataResult; testResponse.wiperStatus = vehicleDataResult; expect(testResponse.accPedalPosition).to(equal(vehicleDataResult)); @@ -56,6 +58,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testResponse.deviceStatus).to(equal(vehicleDataResult)); expect(testResponse.driverBraking).to(equal(vehicleDataResult)); expect(testResponse.eCallInfo).to(equal(vehicleDataResult)); + expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult)); expect(testResponse.emergencyEvent).to(equal(vehicleDataResult)); expect(testResponse.engineOilLife).to(equal(vehicleDataResult)); expect(testResponse.engineTorque).to(equal(vehicleDataResult)); @@ -73,6 +76,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); }); @@ -87,6 +91,7 @@ describe(@"Getter/Setter Tests", ^ { SDLNameDeviceStatus:vehicleDataResult, SDLNameDriverBraking:vehicleDataResult, SDLNameECallInfo:vehicleDataResult, + SDLNameElectronicParkBrakeStatus:vehicleDataResult, SDLNameEmergencyEvent:vehicleDataResult, SDLNameEngineOilLife:vehicleDataResult, SDLNameEngineTorque:vehicleDataResult, @@ -104,6 +109,7 @@ describe(@"Getter/Setter Tests", ^ { SDLNameSpeed:vehicleDataResult, SDLNameSteeringWheelAngle:vehicleDataResult, SDLNameTirePressure:vehicleDataResult, + SDLNameTurnSignal:vehicleDataResult, SDLNameWiperStatus:vehicleDataResult}, SDLNameOperationName:SDLNameSubscribeVehicleData}}; SDLSubscribeVehicleDataResponse* testResponse = [[SDLSubscribeVehicleDataResponse alloc] initWithDictionary:dict]; @@ -116,6 +122,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testResponse.deviceStatus).to(equal(vehicleDataResult)); expect(testResponse.driverBraking).to(equal(vehicleDataResult)); expect(testResponse.eCallInfo).to(equal(vehicleDataResult)); + expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult)); expect(testResponse.emergencyEvent).to(equal(vehicleDataResult)); expect(testResponse.engineOilLife).to(equal(vehicleDataResult)); expect(testResponse.engineTorque).to(equal(vehicleDataResult)); @@ -133,6 +140,7 @@ describe(@"Getter/Setter Tests", ^ { 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)); }); @@ -147,6 +155,7 @@ describe(@"Getter/Setter Tests", ^ { expect(testResponse.deviceStatus).to(beNil()); expect(testResponse.driverBraking).to(beNil()); expect(testResponse.eCallInfo).to(beNil()); + expect(testResponse.electronicParkBrakeStatus).to(beNil()); expect(testResponse.emergencyEvent).to(beNil()); expect(testResponse.engineOilLife).to(beNil()); expect(testResponse.engineTorque).to(beNil()); @@ -164,6 +173,7 @@ describe(@"Getter/Setter Tests", ^ { 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 ce36c0c13..8af7ef673 100644 --- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m @@ -47,6 +47,8 @@ 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)); @@ -74,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", ^ { @@ -104,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]; @@ -134,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", ^ { @@ -165,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..0e01a3680 --- /dev/null +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLAudioControlCapabilitiesSpec.m @@ -0,0 +1,83 @@ +// +// 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.volumeAvailable = @(NO); + testStruct.equalizerAvailable = @(NO); + testStruct.equalizerMaxChannelId = @56; + + expect(testStruct.moduleName).to(equal(@"module")); + 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.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 volueAvailable:@YES equalizerAvailable:@NO equalizerMaxChannelID:@34]; + + expect(testStruct.moduleName).to(equal(@"module")); + expect(testStruct.sourceAvailable).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), + 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.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.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..b45784e78 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,6 +88,10 @@ 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", ^ { @@ -89,6 +107,29 @@ 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));; + }); + + 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 +147,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..cb3fbff65 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,6 +53,11 @@ 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", ^ { @@ -63,6 +72,28 @@ 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)); + }); + + 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 +106,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 +125,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 +144,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/SDLEqualizerSettingsSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLEqualizerSettingsSpec.m new file mode 100644 index 000000000..39ae43e6d --- /dev/null +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLEqualizerSettingsSpec.m @@ -0,0 +1,67 @@ +// +// 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 set and get correctly", ^ { + SDLEqualizerSettings* testStruct = [[SDLEqualizerSettings alloc] initWithChannelId:2 channelName:@"channel" channelSetting:45]; + + expect(testStruct.channelId).to(equal(@2)); + expect(testStruct.channelName).to(equal(@"channel")); + 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/SDLGPSLocationSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLGPSLocationSpec.m new file mode 100644 index 000000000..2df315fe9 --- /dev/null +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLGPSLocationSpec.m @@ -0,0 +1,70 @@ +// +// SDLGPSLocationSpec.m +// SmartDeviceLinkTests +// + +#import <Foundation/Foundation.h> + +#import <Quick/Quick.h> +#import <Nimble/Nimble.h> + +#import "SDLNames.h" +#import "SDLGPSLocation.h" + + + +QuickSpecBegin(SDLGPSLocationSpec) + +describe(@"Getter/Setter Tests", ^ { + it(@"Should set and get correctly", ^ { + SDLGPSLocation* testStruct = [[SDLGPSLocation alloc] init]; + + testStruct.longitudeDegrees = @(-60); + testStruct.latitudeDegrees = @60; + testStruct.altitudeMeters = @5000; + + expect(testStruct.longitudeDegrees).to(equal(@(-60))); + expect(testStruct.latitudeDegrees).to(equal(@60)); + expect(testStruct.altitudeMeters).to(equal(@5000)); + + }); + + it(@"Should set and get correctly", ^ { + SDLGPSLocation* testStruct = [[SDLGPSLocation alloc] initWithLatitudeDegrees:-60 longitudeDegrees:60]; + + expect(testStruct.latitudeDegrees).to(equal(@(-60))); + expect(testStruct.longitudeDegrees).to(equal(@60)); + }); + + it(@"Should set and get correctly", ^ { + SDLGPSLocation* testStruct = [[SDLGPSLocation alloc] initWithLatitudeDegrees:-60 longitudeDegrees:60 altitudeMeters:@5000]; + + expect(testStruct.latitudeDegrees).to(equal(@(-60))); + expect(testStruct.longitudeDegrees).to(equal(@60)); + expect(testStruct.altitudeMeters).to(equal(@5000)); + }); + + it(@"Should get correctly when initialized", ^ { + NSMutableDictionary* dict = [@{SDLNameLatitudeDegrees:@(-60), + SDLNameLongitudeDegrees:@60, + SDLNameAltitudeMeters:@5000 + } mutableCopy]; + + SDLGPSLocation* testStruct = [[SDLGPSLocation alloc] initWithDictionary:dict]; + + expect(testStruct.latitudeDegrees).to(equal(@(-60))); + expect(testStruct.longitudeDegrees).to(equal(@60)); + expect(testStruct.altitudeMeters).to(equal(@5000)); + }); + + it(@"Should return nil if not set", ^ { + SDLGPSLocation* testStruct = [[SDLGPSLocation alloc] init]; + + expect(testStruct.longitudeDegrees).to(beNil()); + expect(testStruct.latitudeDegrees).to(beNil()); + expect(testStruct.altitudeMeters).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 b4a0b2be6..56939ee0e 100644 --- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLImageSpec.m @@ -137,6 +137,16 @@ describe(@"initializers", ^{ 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()); + }); }); QuickSpecEnd diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightCapabilitiesSpec.m new file mode 100644 index 000000000..55fad3f9c --- /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.sRGBColorSpaceAvailable = @NO; + + expect(testStruct.name).to(equal(SDLLightNameFogLights)); + expect(testStruct.densityAvailable).to(equal(@YES)); + expect(testStruct.sRGBColorSpaceAvailable).to(equal(@NO)); + }); + + it(@"Should set and get correctly", ^ { + SDLLightCapabilities* testStruct = [[SDLLightCapabilities alloc] initWithName:SDLLightNameFogLights densityAvailable:YES sRGBColorSpaceAvailable:NO statusAvailable:NO]; + + expect(testStruct.name).to(equal(SDLLightNameFogLights)); + expect(testStruct.densityAvailable).to(equal(@YES)); + expect(testStruct.sRGBColorSpaceAvailable).to(equal(@NO)); + expect(testStruct.statusAvailable).to(equal(@NO)); + + }); + + it(@"Should get correctly when initialized", ^ { + NSMutableDictionary* dict = [@{SDLNameName:SDLLightNameFogLights, + SDLNameDensityAvailable:@YES, + SDLNameSRGBColorSpaceAvailable:@NO + } mutableCopy]; + + SDLLightCapabilities* testStruct = [[SDLLightCapabilities alloc] initWithDictionary:dict]; + + expect(testStruct.name).to(equal(SDLLightNameFogLights)); + expect(testStruct.densityAvailable).to(equal(@YES)); + expect(testStruct.sRGBColorSpaceAvailable).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.sRGBColorSpaceAvailable).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..d2b2d6e1b --- /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] initWithLightStateArray:[@[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..7d3fd57cb --- /dev/null +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLLightStateSpec.m @@ -0,0 +1,79 @@ +// +// SDLLightStateSpec.m +// SmartDeviceLinkTests +// + +#import <Foundation/Foundation.h> +#import <Quick/Quick.h> +#import <Nimble/Nimble.h> + +#import "SDLLightState.h" +#import "SDLLightStatus.h" +#import "SDLSRGBColor.h" +#import "SDLLightName.h" +#import "SDLNames.h" + +QuickSpecBegin(SDLLightStateSpec) + +SDLSRGBColor* somesRGBColor = [[SDLSRGBColor 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.sRGBColor = somesRGBColor; + + expect(testStruct.id).to(equal(SDLLightNameFogLights)); + expect(testStruct.status).to(equal(SDLLightStatusOn)); + expect(testStruct.density).to(equal(@(0.5))); + expect(testStruct.sRGBColor).to(equal(somesRGBColor)); + }); + + 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.sRGBColor).to(beNil()); + + }); + + it(@"Should set and get correctly", ^ { + SDLLightState* testStruct = [[SDLLightState alloc] initWithId:SDLLightNameFogLights status:SDLLightStatusOFF density:0.5 sRGBColor:somesRGBColor]; + + expect(testStruct.id).to(equal(SDLLightNameFogLights)); + expect(testStruct.status).to(equal(SDLLightStatusOFF)); + expect(testStruct.density).to(equal(@(0.5))); + expect(testStruct.sRGBColor).to(equal(somesRGBColor)); + + }); + + it(@"Should get correctly when initialized", ^ { + NSMutableDictionary* dict = [@{SDLNameId:SDLLightNameFogLights, + SDLNameStatus:SDLLightStatusOn, + SDLNameDensity:@(0.5), + SDLNameSRGBColor:somesRGBColor} 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.sRGBColor).to(equal(somesRGBColor)); + + }); + + 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.sRGBColor).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/SDLRadioControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlCapabilitiesSpec.m index d6e07fe11..70873d96e 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,8 +95,12 @@ 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", ^ { SDLRadioControlCapabilities* testStruct = [[SDLRadioControlCapabilities alloc] initWithModuleName:@"someName" radioEnableAvailable:YES radioBandAvailable:NO radioFrequencyAvailable:YES hdChannelAvailable:NO rdsDataAvailable:NO availableHDsAvailable:NO stateAvailable:YES signalStrengthAvailable:YES signalChangeThresholdAvailable:NO]; @@ -95,6 +114,27 @@ 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)); + }); + + 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..02e38bcaa 100644 --- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRadioControlDataSpec.m @@ -12,10 +12,12 @@ #import "SDLRadioBand.h" #import "SDLRadioState.h" #import "SDLRDSData.h" +#import "SDLSISData.h" #import "SDLNames.h" QuickSpecBegin(SDLRadioControlDataSpec) __block SDLRDSData* someRdsData = [[SDLRDSData alloc] init]; +__block SDLSISData* someSisData = [[SDLSISData alloc] init]; describe(@"Initialization tests", ^{ @@ -32,6 +34,9 @@ describe(@"Initialization tests", ^{ expect(testStruct.signalChangeThreshold).to(beNil()); expect(testStruct.radioEnable).to(beNil()); expect(testStruct.state).to(beNil()); + expect(testStruct.hdRadioEnable).to(beNil()); + expect(testStruct.sisData).to(beNil()); + }); it(@"should properly initialize initWithDictionary", ^{ @@ -45,7 +50,10 @@ describe(@"Initialization tests", ^{ SDLNameSignalStrength : @54, SDLNameSignalChangeThreshold : @76, SDLNameRadioEnable : @YES, - SDLNameState : SDLRadioStateNotFound} mutableCopy]; + SDLNameState : SDLRadioStateNotFound, + SDLNameHDRadioEnable : @NO, + SDLNameSISData:someSisData + } mutableCopy]; SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initWithDictionary:dict]; expect(testStruct.frequencyInteger).to(equal(@101)); @@ -58,6 +66,9 @@ 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)); + expect(testStruct.sisData).to(equal(someSisData)); + }); it(@"Should set and get correctly", ^{ @@ -72,6 +83,8 @@ describe(@"Initialization tests", ^{ testStruct.signalChangeThreshold = @76; testStruct.radioEnable = @YES; testStruct.state = SDLRadioStateNotFound; + testStruct.hdRadioEnable = @YES; + testStruct.sisData = someSisData; expect(testStruct.frequencyInteger).to(equal(@101)); expect(testStruct.frequencyFraction).to(equal(@7)); @@ -83,6 +96,8 @@ 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)); + expect(testStruct.sisData).to(equal(someSisData)); }); it(@"Should get correctly when initialized with Module Name and other radio control capabilite's parameters", ^ { @@ -94,6 +109,39 @@ describe(@"Initialization tests", ^{ expect(testStruct.hdChannel).to(equal(@2)); expect(testStruct.radioEnable).to(equal(@YES)); }); + + it(@"Should get correctly when initialized with Module Name and other radio control capabilite's parameters", ^ { + 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)); + }); + + it(@"Should get correctly when initialized with Module Name and other radio control capabilite's parameters", ^ { + 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()); + }); + + it(@"Should get correctly when initialized with Module Name and other radio control capabilite's parameters", ^ { + SDLRadioControlData* testStruct = [[SDLRadioControlData alloc] initWithFrequencyInteger:@101 frequencyFraction:@7 band:SDLRadioBandAM hdChannel:@2 radioEnable:@YES sisData:someSisData]; + + 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(equal(someSisData)); + }); + }); QuickSpecEnd diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRemoteControlCapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLRemoteControlCapabilitiesSpec.m index 0dc04323a..f7547af26 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,89 @@ 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", ^ { 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])); + }); + + 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/SDLSDLSRGBColorSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSDLSRGBColorSpec.m new file mode 100644 index 000000000..6fc596d10 --- /dev/null +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSDLSRGBColorSpec.m @@ -0,0 +1,63 @@ +// +// SDLSDLSRGBColorSpec.m +// SmartDeviceLinkTests +// + +#import <Foundation/Foundation.h> + +#import <Quick/Quick.h> +#import <Nimble/Nimble.h> + +#import "SDLNames.h" +#import "SDLSRGBColor.h" + + +QuickSpecBegin( SDLSDLSRGBColorSpec) + +describe(@"Getter/Setter Tests", ^ { + it(@"Should set and get correctly", ^ { + SDLSRGBColor* testStruct = [[SDLSRGBColor alloc] init]; + + testStruct.red = @123; + testStruct.green = @23; + testStruct.blue = @54; + + expect(testStruct.red).to(equal(@123)); + expect(testStruct.green).to(equal(@23)); + expect(testStruct.blue).to(equal(@54)); + + }); + + it(@"Should set and get correctly", ^ { + SDLSRGBColor* testStruct = [[SDLSRGBColor alloc] initWithRed:123 green:23 blue:54]; + + expect(testStruct.red).to(equal(@123)); + expect(testStruct.green).to(equal(@23)); + expect(testStruct.blue).to(equal(@54)); + }); + + it(@"Should get correctly when initialized", ^ { + NSMutableDictionary* dict = [@{SDLNameRed:@123, + SDLNameBlue:@23, + SDLNameGreen:@54 + } mutableCopy]; + + SDLSRGBColor* testStruct = [[SDLSRGBColor alloc] initWithDictionary:dict]; + + expect(testStruct.red).to(equal(@123)); + expect(testStruct.green).to(equal(@54)); + expect(testStruct.blue).to(equal(@23)); + }); + + it(@"Should return nil if not set", ^ { + SDLSRGBColor* testStruct = [[SDLSRGBColor alloc] init]; + + expect(testStruct.red).to(beNil()); + expect(testStruct.green).to(beNil()); + expect(testStruct.blue).to(beNil()); + + }); +}); + +QuickSpecEnd + diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSISDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSISDataSpec.m new file mode 100644 index 000000000..e9ff6afd9 --- /dev/null +++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSISDataSpec.m @@ -0,0 +1,81 @@ +// +// 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 "SDLGPSLocation.h" + + +QuickSpecBegin(SDLSISDataSpec) + +SDLStationIDNumber *someID = [[SDLStationIDNumber alloc] init]; +SDLGPSLocation *someLocation = [[SDLGPSLocation 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/SmartDeviceLink_Example/AppConstants.h b/SmartDeviceLink_Example/AppConstants.h index 91c615fde..649909d43 100644 --- a/SmartDeviceLink_Example/AppConstants.h +++ b/SmartDeviceLink_Example/AppConstants.h @@ -82,6 +82,7 @@ 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; @@ -99,6 +100,7 @@ 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; diff --git a/SmartDeviceLink_Example/AppConstants.m b/SmartDeviceLink_Example/AppConstants.m index ff4e54cbd..490016105 100644 --- a/SmartDeviceLink_Example/AppConstants.m +++ b/SmartDeviceLink_Example/AppConstants.m @@ -80,6 +80,7 @@ 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"; @@ -97,6 +98,7 @@ 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"; diff --git a/SmartDeviceLink_Example/ConnectionIAPTableViewController.storyboard b/SmartDeviceLink_Example/ConnectionIAPTableViewController.storyboard index ef04daa8e..44ec1e58b 100644 --- a/SmartDeviceLink_Example/ConnectionIAPTableViewController.storyboard +++ b/SmartDeviceLink_Example/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/ConnectionTCPTableViewController.storyboard b/SmartDeviceLink_Example/ConnectionTCPTableViewController.storyboard index fc112572c..ff8be7363 100644 --- a/SmartDeviceLink_Example/ConnectionTCPTableViewController.storyboard +++ b/SmartDeviceLink_Example/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/Main.storyboard b/SmartDeviceLink_Example/Main.storyboard index 81cd0bdcf..7415d792f 100644 --- a/SmartDeviceLink_Example/Main.storyboard +++ b/SmartDeviceLink_Example/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.m b/SmartDeviceLink_Example/MenuManager.m index d9af5d408..083d368d8 100644 --- a/SmartDeviceLink_Example/MenuManager.m +++ b/SmartDeviceLink_Example/MenuManager.m @@ -49,17 +49,17 @@ NS_ASSUME_NONNULL_BEGIN 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:@[vehicleDataType] handler:^(SDLTriggerSource _Nonnull triggerSource) { + 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 subCells:submenuItems]; + 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, ACEmergencyEventMenuName, ACEngineOilLifeMenuName, ACEngineTorqueMenuName, ACExternalTemperatureMenuName, ACFuelLevelMenuName, ACFuelLevelStateMenuName, ACFuelRangeMenuName, ACGPSMenuName, ACHeadLampStatusMenuName, ACInstantFuelConsumptionMenuName, ACMyKeyMenuName, ACOdometerMenuName, ACPRNDLMenuName, ACRPMMenuName, ACSpeedMenuName, ACSteeringWheelAngleMenuName, ACTirePressureMenuName, ACVINMenuName, ACWiperStatusMenuName]; + 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 performManager:(PerformInteractionManager *)performManager { @@ -95,7 +95,7 @@ NS_ASSUME_NONNULL_BEGIN [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/MenuManager.swift b/SmartDeviceLink_Example/MenuManager.swift index 775c05f5c..959265a74 100644 --- a/SmartDeviceLink_Example/MenuManager.swift +++ b/SmartDeviceLink_Example/MenuManager.swift @@ -59,16 +59,17 @@ private extension MenuManager { /// - Returns: A SDLMenuCell object class func menuCellGetAllVehicleData(with manager: SDLManager) -> SDLMenuCell { let submenuItems = allVehicleDataTypes.map { submenuName in - SDLMenuCell(title: submenuName, icon: nil, voiceCommands: [submenuName], handler: { triggerSource in + SDLMenuCell(title: submenuName, icon: nil, voiceCommands: nil, handler: { triggerSource in VehicleDataManager.getAllVehicleData(with: manager, triggerSource: triggerSource, vehicleDataType: submenuName) }) } - return SDLMenuCell(title: ACGetAllVehicleDataMenuName, subCells: submenuItems) + + 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, ACEmergencyEventMenuName, ACEngineOilLifeMenuName, ACEngineTorqueMenuName, ACExternalTemperatureMenuName, ACFuelLevelMenuName, ACFuelLevelStateMenuName, ACFuelRangeMenuName, ACGPSMenuName, ACHeadLampStatusMenuName, ACInstantFuelConsumptionMenuName, ACMyKeyMenuName, ACOdometerMenuName, ACPRNDLMenuName, ACRPMMenuName, ACSpeedMenuName, ACSteeringWheelAngleMenuName, ACTirePressureMenuName, ACVINMenuName, ACWiperStatusMenuName] + 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 @@ -119,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: @@ -132,8 +133,8 @@ private extension MenuManager { } })) } - - return SDLMenuCell(title: ACSubmenuMenuName, subCells: submenuItems) + + return SDLMenuCell(title: ACSubmenuMenuName, icon: SDLArtwork(image: #imageLiteral(resourceName: "choice_set").withRenderingMode(.alwaysTemplate), persistent: true, as: .PNG), subCells: submenuItems) } } diff --git a/SmartDeviceLink_Example/TextValidator.h b/SmartDeviceLink_Example/TextValidator.h new file mode 100644 index 000000000..df8a12321 --- /dev/null +++ b/SmartDeviceLink_Example/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/SmartDeviceLink_Example/TextValidator.m b/SmartDeviceLink_Example/TextValidator.m new file mode 100644 index 000000000..2e14c4797 --- /dev/null +++ b/SmartDeviceLink_Example/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/TextValidator.swift b/SmartDeviceLink_Example/TextValidator.swift new file mode 100644 index 000000000..3c0e5645e --- /dev/null +++ b/SmartDeviceLink_Example/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/SmartDeviceLink_Example/VehicleDataManager.m b/SmartDeviceLink_Example/VehicleDataManager.m index 85ac0ff1c..999a22616 100644 --- a/SmartDeviceLink_Example/VehicleDataManager.m +++ b/SmartDeviceLink_Example/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,12 +128,12 @@ 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)getAllVehicleDataWithManager:(SDLManager *)manager triggerSource:(SDLTriggerSource)triggerSource vehicleDataType:(NSString *)vehicleDataType { SDLLogD(@"Checking if app has permission to access vehicle data..."); if (![manager.permissionManager isRPCAllowed:@"GetVehicleData"]) { @@ -141,9 +142,9 @@ NS_ASSUME_NONNULL_BEGIN } SDLLogD(@"App has permission to access vehicle data. Requesting vehicle data..."); - SDLGetVehicleData *getVehicleSpeed = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo: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 vin:YES wiperStatus:YES]; + 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:getVehicleSpeed withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { + [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 data" textField2:nil]]; return; @@ -152,30 +153,39 @@ NS_ASSUME_NONNULL_BEGIN SDLGetVehicleDataResponse *getVehicleDataResponse = (SDLGetVehicleDataResponse *)response; SDLResult resultCode = getVehicleDataResponse.resultCode; - NSMutableString *alertMessage = [NSMutableString string]; + NSString *alertTitle = vehicleDataType; + NSString *alertMessage = nil; + if ([resultCode isEqualToEnum:SDLResultRejected]) { SDLLogD(@"The request for vehicle data was rejected"); - [alertMessage appendString:@"Rejected"]; + alertMessage = @"Rejected"; } else if ([resultCode isEqualToEnum:SDLResultDisallowed]) { SDLLogD(@"This app does not have the required permissions to access vehicle data."); - [alertMessage appendString:@"Disallowed"]; + alertMessage = @"Disallowed"; } else if ([resultCode isEqualToEnum:SDLResultSuccess] || [resultCode isEqualToEnum:SDLResultDataNotAvailable]) { SDLLogD(@"Request for vehicle data successful"); if (getVehicleDataResponse) { - NSString *vehicleDataTypeDescription = [self sdlex_vehicleDataDescription:getVehicleDataResponse vehicleDataType:vehicleDataType]; - [alertMessage appendString:vehicleDataTypeDescription]; + alertMessage = [self sdlex_vehicleDataDescription:getVehicleDataResponse vehicleDataType:vehicleDataType]; } else { SDLLogE(@"No vehicle data returned"); - [alertMessage appendString:@"No vehicle data returned"]; + alertMessage = @"No vehicle data returned"; } } - [triggerSource isEqualToEnum:SDLTriggerSourceMenu] ? [manager sendRequest:[AlertManager alertWithMessageAndCloseButton:alertMessage textField2:nil]] : [manager sendRequest:[[SDLSpeak alloc] initWithTTS:alertMessage]]; + 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 = @""; + NSString *vehicleDataDescription = nil; if ([vehicleDataType isEqualToString:ACAccelerationPedalPositionMenuName]) { vehicleDataDescription = vehicleData.accPedalPosition.description; @@ -193,6 +203,8 @@ NS_ASSUME_NONNULL_BEGIN 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]) { @@ -225,18 +237,13 @@ NS_ASSUME_NONNULL_BEGIN 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; } - NSString *vehicleDataTypeDescription = [NSString stringWithFormat:@"%@: %@", vehicleDataType, vehicleDataDescription != nil ? vehicleDataDescription : @"Vehicle data not available"]; - - NSString *filteredNewlines = [vehicleDataTypeDescription stringByReplacingOccurrencesOfString:@"\\n" withString:@""]; - NSArray<NSString *> *filteredCharacters = [filteredNewlines componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 :."] invertedSet]]; - NSString *filteredString = [filteredCharacters componentsJoinedByString:@" "]; - NSString *truncatedString = [filteredString substringToIndex:MIN(500, [filteredString length])]; - - return truncatedString; + return vehicleDataDescription ?: @"Vehicle data not available"; } #pragma mark - Phone Calls diff --git a/SmartDeviceLink_Example/VehicleDataManager.swift b/SmartDeviceLink_Example/VehicleDataManager.swift index d670a5ec5..08b2881c3 100644 --- a/SmartDeviceLink_Example/VehicleDataManager.swift +++ b/SmartDeviceLink_Example/VehicleDataManager.swift @@ -111,41 +111,46 @@ extension VehicleDataManager { 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, 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, vin: true, wiperStatus: true) + 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 alertMessage = "" + var alertTitle: String = "" + var alertMessage: String = "" + switch response!.resultCode { case .rejected: SDLLog.d("The request for vehicle data was rejected") - alertMessage = "Rejected" + alertTitle = "Rejected" case .disallowed: SDLLog.d("This app does not have the required permissions to access vehicle data") - alertMessage = "Disallowed" + alertTitle = "Disallowed" case .success, .dataNotAvailable: - SDLLog.d("Request for vehicle data successful") if let vehicleData = response as? SDLGetVehicleDataResponse { + alertTitle = vehicleDataType alertMessage = vehicleDataDescription(vehicleData, vehicleDataType: vehicleDataType) + SDLLog.d("Request for \(vehicleDataType) vehicle data successful, \(alertMessage)") } else { - SDLLog.e("No vehicle data returned") - alertMessage = "No vehicle data returned" + alertTitle = "No vehicle data returned" + SDLLog.e(alertTitle) } default: break } - triggerSource == .menu ? manager.send(AlertManager.alertWithMessageAndCloseButton(alertMessage.isEmpty ? "No data available" : alertMessage)) : manager.send(SDLSpeak(tts: alertMessage)) - } - } + alertTitle = TextValidator.validateText(alertTitle, length: 25) + alertMessage = TextValidator.validateText(alertMessage, length: 200) - class func createVehicleDataAlertMessage(response: SDLRPCResponse?, vehicleDataType: String) -> String { - if let vehicleData = response as? SDLGetVehicleDataResponse { - SDLLog.d("Some vehicle data returned successfully") - return vehicleDataDescription(vehicleData, vehicleDataType: vehicleDataType) - } else { - SDLLog.e("Vehicle data request successful, but no data was returned") - return "Unknown" + 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)) + } } } @@ -161,62 +166,63 @@ extension VehicleDataManager { var vehicleDataDescription = "" switch vehicleDataType { case ACAccelerationPedalPositionMenuName: - vehicleDataDescription += vehicleData.accPedalPosition?.description ?? notAvailable + vehicleDataDescription = vehicleData.accPedalPosition?.description ?? notAvailable case ACAirbagStatusMenuName: - vehicleDataDescription += vehicleData.airbagStatus?.description ?? notAvailable + vehicleDataDescription = vehicleData.airbagStatus?.description ?? notAvailable case ACBeltStatusMenuName: - vehicleDataDescription += vehicleData.beltStatus?.description ?? notAvailable + vehicleDataDescription = vehicleData.beltStatus?.description ?? notAvailable case ACBodyInformationMenuName: - vehicleDataDescription += vehicleData.bodyInformation?.description ?? notAvailable + vehicleDataDescription = vehicleData.bodyInformation?.description ?? notAvailable case ACClusterModeStatusMenuName: - vehicleDataDescription += vehicleData.clusterModeStatus?.description ?? notAvailable + vehicleDataDescription = vehicleData.clusterModeStatus?.description ?? notAvailable case ACDeviceStatusMenuName: - vehicleDataDescription += vehicleData.deviceStatus?.description ?? notAvailable + vehicleDataDescription = vehicleData.deviceStatus?.description ?? notAvailable case ACDriverBrakingMenuName: - vehicleDataDescription += vehicleData.driverBraking?.rawValue.rawValue ?? notAvailable + vehicleDataDescription = vehicleData.driverBraking?.rawValue.rawValue ?? notAvailable case ACECallInfoMenuName: - vehicleDataDescription += vehicleData.eCallInfo?.description ?? notAvailable + vehicleDataDescription = vehicleData.eCallInfo?.description ?? notAvailable + case ACElectronicParkBrakeStatus: + vehicleDataDescription = vehicleData.electronicParkBrakeStatus?.rawValue.rawValue ?? notAvailable case ACEmergencyEventMenuName: - vehicleDataDescription += vehicleData.emergencyEvent?.description ?? notAvailable + vehicleDataDescription = vehicleData.emergencyEvent?.description ?? notAvailable case ACEngineOilLifeMenuName: - vehicleDataDescription += vehicleData.engineOilLife?.description ?? notAvailable + vehicleDataDescription = vehicleData.engineOilLife?.description ?? notAvailable case ACEngineTorqueMenuName: - vehicleDataDescription += vehicleData.engineTorque?.description ?? notAvailable + vehicleDataDescription = vehicleData.engineTorque?.description ?? notAvailable case ACExternalTemperatureMenuName: - vehicleDataDescription += vehicleData.externalTemperature?.description ?? notAvailable + vehicleDataDescription = vehicleData.externalTemperature?.description ?? notAvailable case ACFuelLevelMenuName: - vehicleDataDescription += vehicleData.fuelLevel?.description ?? notAvailable + vehicleDataDescription = vehicleData.fuelLevel?.description ?? notAvailable case ACFuelLevelStateMenuName: - vehicleDataDescription += vehicleData.fuelLevel_State?.rawValue.rawValue ?? notAvailable + vehicleDataDescription = vehicleData.fuelLevel_State?.rawValue.rawValue ?? notAvailable case ACFuelRangeMenuName: - vehicleDataDescription += vehicleData.fuelRange?.description ?? notAvailable + vehicleDataDescription = vehicleData.fuelRange?.description ?? notAvailable case ACGPSMenuName: - vehicleDataDescription += vehicleData.gps?.description ?? notAvailable + vehicleDataDescription = vehicleData.gps?.description ?? notAvailable case ACHeadLampStatusMenuName: - vehicleDataDescription += vehicleData.headLampStatus?.description ?? notAvailable + vehicleDataDescription = vehicleData.headLampStatus?.description ?? notAvailable case ACInstantFuelConsumptionMenuName: - vehicleDataDescription += vehicleData.instantFuelConsumption?.description ?? notAvailable + vehicleDataDescription = vehicleData.instantFuelConsumption?.description ?? notAvailable case ACMyKeyMenuName: - vehicleDataDescription += vehicleData.myKey?.description ?? notAvailable + vehicleDataDescription = vehicleData.myKey?.description ?? notAvailable case ACOdometerMenuName: - vehicleDataDescription += vehicleData.odometer?.description ?? notAvailable + vehicleDataDescription = vehicleData.odometer?.description ?? notAvailable case ACPRNDLMenuName: - vehicleDataDescription += vehicleData.prndl?.rawValue.rawValue ?? notAvailable + vehicleDataDescription = vehicleData.prndl?.rawValue.rawValue ?? notAvailable case ACSpeedMenuName: - vehicleDataDescription += vehicleData.speed?.description ?? notAvailable + vehicleDataDescription = vehicleData.speed?.description ?? notAvailable case ACSteeringWheelAngleMenuName: - vehicleDataDescription += vehicleData.steeringWheelAngle?.description ?? notAvailable + vehicleDataDescription = vehicleData.steeringWheelAngle?.description ?? notAvailable case ACTirePressureMenuName: - vehicleDataDescription += vehicleData.tirePressure?.description ?? notAvailable + vehicleDataDescription = vehicleData.tirePressure?.description ?? notAvailable + case ACTurnSignalMenuName: + vehicleDataDescription = vehicleData.turnSignal?.rawValue.rawValue ?? notAvailable case ACVINMenuName: - vehicleDataDescription += vehicleData.vin?.description ?? notAvailable + vehicleDataDescription = vehicleData.vin?.description ?? notAvailable default: break } - // Trim all non a-Z0-9 characters and truncate description to 500 characters - let alertMessage = "\(vehicleDataType): \(vehicleDataDescription)" - let alertMessageFiltered = String(alertMessage.filter { "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 :.".contains($0) }) - return alertMessageFiltered.trunc(length: 495, trailing: "") + return vehicleDataDescription } /// Checks if the app has the required permissions to access vehicle data @@ -291,9 +297,3 @@ extension VehicleDataManager { } } } - -extension String { - func trunc(length: Int, trailing: String = "…") -> String { - return (self.count > length) ? self.prefix(length) + trailing : self - } -} |